diff options
author | ctrlaltca@gmail.com <> | 2011-11-19 11:33:31 +0000 |
---|---|---|
committer | ctrlaltca@gmail.com <> | 2011-11-19 11:33:31 +0000 |
commit | 98dbe6f0d2edfff3a1f5785504504b4a6e5dd4eb (patch) | |
tree | 89f19120abb170cb37bb512c8c9535eb2b451da8 /buildscripts/PhpDocumentor/phpDocumentor | |
parent | 1f09b786730956d01c48a82272617a0f8b2597f0 (diff) |
updating phpDocumentor, part 2: add new version
Diffstat (limited to 'buildscripts/PhpDocumentor/phpDocumentor')
948 files changed, 131721 insertions, 0 deletions
diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Classes.inc b/buildscripts/PhpDocumentor/phpDocumentor/Classes.inc new file mode 100755 index 00000000..6de944a5 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Classes.inc @@ -0,0 +1,1356 @@ +<?php +/** + * Intermediate class parsing structure. + * + * phpDocumentor :: automatic documentation generator + * + * PHP versions 4 and 5 + * + * Copyright (c) 2001-2007 Gregory Beaver + * + * LICENSE: + * + * This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General + * Public License as published by the Free Software Foundation; + * either version 2.1 of the License, or (at your option) any + * later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @author Greg Beaver <cellog@php.net> + * @copyright 2001-2007 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version CVS: $Id: Classes.inc 243933 2007-10-10 01:18:25Z ashnazg $ + * @filesource + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @see parserDocBlock, parserInclude, parserPage, parserClass + * @see parserDefine, parserFunction, parserMethod, parserVar + * @since 1.0rc1 + * @todo CS cleanup - change package to PhpDocumentor + */ +/** + * Intermediate class parsing structure. + * + * The {@link phpDocumentor_IntermediateParser} class uses this class and its + * cousin, {@link ProceduralPages} to organize all parsed source code elements. + * Data is fed to each immediately after it is parsed, and at conversion time, + * everything is organized. + * + * The Classes class is responsible for all inheritance, including resolving + * name conflicts between classes, determining which classes extend other + * classes, and is responsible for all inheritance of documentation. + * {@internal + * This structure parses classes, vars and methods by file, and then iterates + * over the class tree to set up inheritance. The {@link Inherit()} + * method is the meat of the class, and processes the class trees from root to + * branch, ensuring that parsing order is unimportant.}} + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @author Greg Beaver <cellog@php.net> + * @copyright 2001-2007 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @since 1.0rc1 + * @todo CS cleanup - change package to PhpDocumentor + */ +class Classes +{ + /**#@+ + * @access private + */ + /** + * file being parsed, used in every add function to match up elements with + * the file that contains them + * + * This variable is used during parsing to associate class elements added + * to the data structures that contain them with the file they reside in + * @see addClass(), addMethod(), addVar(), nextFile() + * @var string + */ + var $curfile; + /** + * class being parsed, used to match up methods and vars with their parent + * class + * + * This variable is used during parsing to associate class elements added + * to the data structures that contain them with the file they reside in + * @see addMethod(), addVar() + * @var string + */ + var $curclass; + + /** + * Used when a definite match is made between a parent class and a child + * class + * + * This variable is used in post-parsing. + * + * Format:<pre> + * array( + * parent => array( + * parentfile => array( + * child => childfile + * ) + * ) + * )</pre> + * @var array + */ + var $definitechild; + /** + * array of parsed classes organized by the name of the file that contains + * the class. + * + * Format:<pre> + * array( + * filename => array( + * classname => {@link parserClass} + * ) + * )</pre> + * @var array + */ + var $classesbyfile = array(); + /** + * array of file names organized by classes that are in the file. + * + * This structure is designed to handle name conflicts. Two files can + * contain classes with the same name, and this array will record both + * filenames to help control linking and inheritance errors + * + * Format:<pre> + * array( + * classname => array( + * name of file containing classname, + * name of file 2 containing classname, + * ... + * ) + * )</pre> + * @var array + */ + var $classesbynamefile = array(); + /** + * array of parsed methods organized by the file that contains them. + * + * Format:<pre> + * array( + * filename => array( + * classname => array( + * {@link parserMethod} 1, + * {@link parserMethod} 2, + * ... + * ) + * ) + * )</pre> + * @var array + */ + var $methodsbyfile = array(); + /** + * array of parsed vars organized by the file that contains them. + * + * Format:<pre> + * array( + * filename => array( + * classname => array( + * {@link parserVar} 1, + * {@link parserVar} 2, + * ... + * ) + * ) + * )</pre> + * @var array + */ + var $varsbyfile = array(); + /** + * array of parsed class constants organized by the file that contains them. + * + * Format:<pre> + * array( + * filename => array( + * classname => array( + * {@link parserConst} 1, + * {@link parserConst} 2, + * ... + * ) + * ) + * )</pre> + * @var array + */ + var $constsbyfile = array(); + /** + * keeps track of extend declarations by file, used to find inheritance + * + * Format:<pre> + * array( + * filename => array( + * classname => parentclassname + * ) + * )</pre> + * @var array + */ + var $extendsbyfile = array(); + /** + * Keeps track of child classes by file. + * Since phpDocumentor can document collections of files that contain name + * conflicts (PHP would give a fatal error), it + * is impossible to assume a class that declares "extends foo" necessarily + * extends the class foo in file X. It could be an + * extended class of class foo in file Y. Because of this, phpDocumentor + * relies on packaging to resolve the name conflict + * This array keeps track of the packages of a child class + * + * Format:<pre> + * array( + * parentclassname => array( + * filename => array( + * childclassname => array( + * packagename, + * packagename + * ) + * ) + * ) + * )</pre> + * @var array + */ + var $classchildrenbyfile = array(); + /** + * Keeps track of class packages found in a file. + * This is used in {@link getParentClass()} to determine the number of + * packages in a file, in order to resolve inheritance issues + * Format:<pre> + * array( + * filename => array( + * packagename1, + * packagename2, + * ... + * ) + * )</pre> + * @var array + */ + var $classpackagebyfile = array(); + /** + * a tree of class inheritance by name. + * + * Format:<pre> + * array( + * childname => parentname, + * childname1 => parentname1, + * rootname => 0, + * ... + * )</pre> + * @var array + * @see Converter::generateSortedClassTreeFromClass() + */ + var $classparents = array(); + /** + * Keeps track of package and subpackage for each class name, organized + * by package + * + * Format:<pre> + * array( + * classname => array( + * path => array( + * package, + * subpackage + * ), + * path2 => array( + * package, + * subpackage + * ), + * ... + * ) + * )</pre> + * @var array + */ + var $classpathpackages = array(); + /** + * used to delete duplicates in the same package to avoid documentation errors + * + * Specifically used in {@link Converter::checkKillClass()} + */ + var $killclass = array(); + /** + * array of methods by package and class + * + * format:<pre> + * array(packagename => + * array(classname => + * array(methodname1 => {@link parserMethod} class, + * methodname2 => {@link parserMethod} class,...) + * ) + * ) + * )</pre> + * @var array + * @see Converter + */ + var $methods = array(); + + /** + * array of class variables by package and class + * + * format:<pre> + * array(packagename => + * array(classname => + * array(variablename1 => {@link parserVar} class, + * variablename2 => {@link parserVar} class,... + * ) + * ) + * )</pre> + * @var array + * @see Converter + */ + var $vars = array(); + + /** + * array of class variables by package and class + * + * format:<pre> + * array(packagename => + * array(classname => + * array(constname1 => {@link parserConst} class, + * constname2 => {@link parserConst} class,... + * ) + * ) + * )</pre> + * @var array + * @see Converter + */ + var $consts = array(); + /** + * Reverse class_packages_by_file, used to prevent duplicates + * @var array Format: array(packagename => 1) + */ + var $revcpbf = array(); + /** + * All classes with no parents (no extends clause) are tracked in this array + * by the file that contains them. + * + * Format:<pre> + * array( + * classname => array( + * name of file1 that contains root classname, + * name of file2 that contains root classname, + * ... + * ) + * )</pre> + * @var array + */ + var $roots = array(); + /** + * All classes with a parent that was not parsed are included in this array + * + * Format:<pre> + * array( + * classname => array( + * name of file1 that contains root classname, + * name of file2 that contains root classname, + * ... + * ) + * )</pre> + * @var array + */ + var $specialRoots = array(); + + /** + * array of all files that contain classes with the same name + * @var array Format: (classname => array(path1, path2,...)) + */ + var $potentialclassconflicts = array(); + + /** + * array of all inter-package name conflicts of classes + * + * This array allows documentation of PHP namespace conflicts that would + * occur should a user try to include these files in the same file + * @var array Format: (classname => array(path1, path2,...)) + */ + var $classconflicts = array(); + /**#@-*/ + /** + * While parsing, add a class to the list of parsed classes + * + * sets up the {@link $classesbyfile, $classesbynamefile, $extendsbyfile}, + * {@link $classchildrenbyfile, $roots} arrays, and sets {@link $curclass} + * + * @param parserClass &$element element is a {@link parserClass} + * + * @return void + * @uses addPackageToFile() marks the current class's package as being + * present in a file + */ + function addClass(&$element) + { + $this->curclass = $element->getName(); + $element->curfile = $this->curfile; + if (isset($this->classesbyfile[$this->curfile][$this->curclass])) { + addWarning(PDERROR_ELEMENT_IGNORED, + 'class', $this->curclass, $this->curfile); + $this->curclass = false; + return; + } + $this-> + classesbyfile + [$this->curfile][$this->curclass] + = $element; + $this-> + classesbynamefile[$this->curclass][] + = $this->curfile; + $this-> + extendsbyfile[$this->curfile][$this->curclass] + = $element->getExtends(); + $this-> + classchildrenbyfile[$element->getExtends()] + [$this->curfile][$this->curclass][] + = $element->docblock->package; + if ($element->docblock->getExplicitPackage()) + $this->addPackageToFile($element->docblock->package); + if (!$element->getExtends()) { + $this->roots[$this->curclass][] = $this->curfile; + } + } + + /** + * While parsing, add a method to the list of parsed methods + * + * sets up the {@link $methodsbyfile} array using {@link $curfile} and + * {@link $curclass} + * + * @param parserMethod &$element element is a {@link parserMethod} + * + * @return void + */ + function addMethod(&$element) + { + if (!$this->curclass) return; + $this->methodsbyfile[$this->curfile][$this->curclass][] = $element; + } + + /** + * While parsing, add a variable to the list of parsed variables + * + * sets up the {@link $varsbyfile} array using {@link $curfile} + * and {@link $curclass} + * + * @param parserVar &$element element is a {@link parserVar} + * + * @return void + */ + function addVar(&$element) + { + if (!$this->curclass) return; + $this->varsbyfile[$this->curfile][$this->curclass][] = $element; + } + + /** + * While parsing, add a variable to the list of parsed variables + * + * sets up the {@link $constsbyfile} array using {@link $curfile} + * and {@link $curclass} + * + * @param parserConst &$element element is a {@link parserConst} + * + * @return void + */ + function addConst(&$element) + { + if (!$this->curclass) return; + $this->constsbyfile[$this->curfile][$this->curclass][] = $element; + } + + /** + * Prepare to parse a new file + * + * sets {@link $curfile} to $file and {@link $curclass} + * to false (no class being parsed) + * + * @param string $file file currently being parsed + * + * @return void + */ + function nextFile($file) + { + $this->curfile = $file; + $this->curclass = false; + } + + /** + * Mark a package as being used in a class + * + * {@source} + * + * @param string $package package name + * + * @return void + */ + function addPackageToFile($package) + { + if (!isset($this->revcpbf[$this->curfile][$package])) + $this->classpackagebyfile[$this->curfile][] = $package; + $this->revcpbf[$this->curfile][$package] = 1; + } + + /** + * Find the parent class of $class, and set up structures to note this fact + * + * Modifies the {@link parserClass} element in {@link $classesbyfile} to use + * the parent's package, and inherit methods/vars + * + * @param string $class child class to find parent class + * @param string $file file child class is located in + * + * @return void + * @uses $definitechild if a match is made between a parent class and parameter + * $class in file $file, then definitechild is set here + * @uses getParentClass() to find the parent class + */ + function setClassParent($class,$file) + { + if (is_array($par = $this->getParentClass($class, $file))) { + // (for debugging) + // phpDocumentor_out("$file class $class extends " + // . $par[1] ." file ". $par[0] . "\n"); + + $this->classesbyfile[$file][$class]->setParent($par[1], $par[0], $this); + $this->definitechild[$par[1]][$par[0]][$class] = $file; + } else { + $this->classesbyfile[$file][$class]->setParentNoClass($par); + } + } + + /** + * Main processing engine for setting up class inheritance. + * + * This function uses {@link $roots} to traverse the inheritance tree via + * {@link processChild()} and returns the data structures + * phpDocumentor_IntermediateParser needs to convert parsed data + * to output using {@link phpDocumentor_IntermediateParser::Convert()} + * + * @param phpDocumentor_IntermediateParser &$render the renderer object + * + * @return void + * @uses processChild() set up inheritance + * @todo CS Cleanup - rename to "inherit" for CamelCaps naming standard + */ + function Inherit(&$render) + { + phpDocumentor_out("\nProcessing Class Inheritance\n\n"); + flush(); + phpDocumentor_out("\nProcessing Root Trees\n\n"); + flush(); + foreach ($this->roots as $class => $files) { + for ($i=0; $i<count($files); $i++) { + $this->processChild($render, $class, $files[$i]); + } + } + if (0) + foreach ($this->classesbyfile as $i => $j) { + foreach ($j as $k => $m) { + var_dump($i, $k); + if ($i == 'iConverter') { + var_dump($j); + } + } + } + phpDocumentor_out("\nProcessing leftover classes " + . "(classes that extend root classes not found in the same package)\n"); + flush(); + foreach ($this->classesbyfile as $i => $j) { + foreach ($j as $k => $m) { + $this->processChild($render, $k, $i, true); + } + } + phpDocumentor_out("done processing leftover classes\n"); + flush(); + $this->setupClassConflicts(); + } + + /** + * Transfers actual conflicts from {@link $potentialClassconflicts} to + * {@link $classconflicts} + * + * @return void + * @access private + * @uses $potentialclassconflicts transfers values to {@link $classconflicts} + */ + function setupClassConflicts() + { + foreach ($this->potentialclassconflicts as $class => $paths) { + if (count($paths) - 1) { //conflict + $package = array(); + foreach ($paths as $path) { + // create a list of conflicting classes in each package + if (isset($this->classpathpackages[$class][$path])) + $package[$this->classpathpackages[$class][$path][0]][] = $path; + } + foreach ($package as $pathpackages) { + /* + * if at least 2 functions exist in the same package, + * delete all but the first one and add warnings + */ + if (count($pathpackages) - 1) { + for ($i=1; $i < count($pathpackages); $i++) { + if (isset($this->classesbyfile[$pathpackages[$i]])) { + addWarning(PDERROR_ELEMENT_IGNORED, + 'class', $class, $pathpackages[$i]); + $this->killClass($class, $pathpackages[$i]); + $oth = array_flip($paths); + unset($paths[$oth[$pathpackages[$i]]]); + } + } + } + } + $this->classconflicts[$class] = $paths; + } + } + } + + /** + * If a package contains two classes with the same name, this function finds + * that conflict + * + * Returns the {@link $classconflicts} entry for class $class, minus its own path + * + * @param mixed $class the class name to search for + * + * @return mixed returns false if no conflicts, + * or an array of paths containing conflicts + */ + function getConflicts($class) + { + if (!isset($this->classconflicts[$class])) return false; + $a = array(); + foreach ($this->classconflicts[$class] as $conflict) { + $a[$this->classesbyfile[$conflict][$class]->docblock->package] + = $this->classesbyfile[$conflict][$class]; + } + return $a; + } + + /** + * sets up {@link $killclass} for use by Converter::checkKillClass() + * + * @param mixed $class the class + * @param mixed $path the path + * + * @return void + * @access private + */ + function killClass($class,$path) + { + $this->killclass[$class][$path] = true; + } + + /** + * This function recursively climbs up the class tree, setting inherited + * information like package and adds the elements to + * {@link phpDocumentor_IntermediateParser}. + * + * Using structures defined in {@link Classes}, + * the function first sets package information, + * and then seeks out child classes. + * It uses 3 tests to determine whether a class is a child class. + * <ol> + * <li>child class is in the same file as the parent class + * and extends parent class + * </li> + * <li>child class is in a different file and specifies + * the parent's @package in its docblock + * </li> + * <li>child class is in a different file and is in a + * different @package, with one possible parent class + * </li> + * </ol> + * + * @param phpDocumentor_IntermediateParser &$render the renderer object + * @param string $class class to process + * @param string $file name of file $class + * is located in + * @param boolean $furb flag used privately + * to control informational + * output while parsing + * (used when processing + * leftover classes in + * {@link Inherit()} + * + * @return void + * @global string default package, usually "default" + */ + function processChild(&$render,$class,$file,$furb = false) + { + global $phpDocumentor_DefaultPackageName; + if (isset($this->classesbyfile[$file][$class]->processed)) + return; + $this->potentialclassconflicts[$class][] = $file; + if ($furb) + phpDocumentor_out("Processing $class in file $file\n"); + flush(); + $this->classesbyfile[$file][$class]->processed = true; + + $db = $this->classesbyfile[$file][$class]; + $render->addUses($db, $file); + if (!$render->parsePrivate) { + /* + * if this class has an @access private, + * and parse private is disabled, remove it + */ + if ($db->docblock->hasaccess) { + $aaa = $db->docblock->getKeyword('access'); + if (is_object($aaa) && $aaa->getString() == 'private') { + if (isset($this->varsbyfile[$file]) + && isset($this->varsbyfile[$file][$class])) { + unset($this->varsbyfile[$file][$class]); + } + if (isset($this->methodsbyfile[$file]) + && isset($this->methodsbyfile[$file][$class])) { + unset($this->methodsbyfile[$file][$class]); + } + if (isset($this->constsbyfile[$file]) + && isset($this->constsbyfile[$file][$class])) { + unset($this->constsbyfile[$file][$class]); + } + $this->classesbyfile[$file][$class]->ignore = true; + // if this is a root class, remove it from the roots array + if (isset($this->roots[$class])) { + foreach ($this->roots[$class] as $i => $files) { + // find the file key and unset + if ($files == $file) + unset($this->roots[$class][$i]); + } + } + /* + * if this is a child, remove it from the list + * of child classes of its parent + */ + if ($db->getExtends()) + unset($this->classchildrenbyfile[$db->getExtends()][$file]); + return; + } + } + } + if ($render->packageoutput) { + if (!in_array($db->docblock->package, $render->packageoutput)) { + if (isset($this->varsbyfile[$file]) + && isset($this->varsbyfile[$file][$class])) { + unset($this->varsbyfile[$file][$class]); + } + if (isset($this->methodsbyfile[$file]) + && isset($this->methodsbyfile[$file][$class])) { + unset($this->methodsbyfile[$file][$class]); + } + if (isset($this->constsbyfile[$file]) + && isset($this->constsbyfile[$file][$class])) { + unset($this->constsbyfile[$file][$class]); + } + $this->classesbyfile[$file][$class]->ignore = true; + if (isset($this->roots[$class])) { + foreach ($this->roots[$class] as $i => $files) { + if ($files == $file) unset($this->roots[$class][$i]); + } + } + if ($db->getExtends()) + unset($this->classchildrenbyfile[$db->getExtends()][$file]); + return; + } + } + $this->setClassParent($class, $file); + $db = $this->classesbyfile[$file][$class]; + if ($furb && !is_array($db->parent)) { + // debug("furb adding $class $file to roots"); + $this->specialRoots[$db->parent][] = array($class, $file); + } + // fix for 591396 + if (!$db->docblock->getExplicitPackage()) { + $a = $render->proceduralpages->pagepackages[$file]; + if ($a[0] != $phpDocumentor_DefaultPackageName) { + // inherit page package + $this->classesbyfile[$file][$class]->docblock->package = $a[0]; + } + } + if ($this->classesbyfile[$file][$class]->docblock->package + == $render->proceduralpages->pagepackages[$file][0]) { + if ($this->classesbyfile[$file][$class]->docblock->subpackage == '') { + $this->classesbyfile[$file][$class]->docblock->subpackage + = $render->proceduralpages->pagepackages[$file][1]; + } + } + $db = $this->classesbyfile[$file][$class]; + $render->addPackageParent($db); + $render->addPageIfNecessary($file, $db); + if ($access = $db->docblock->getKeyword('access')) { + if (!is_string($access) && is_object($access)) + $access = $access->getString(); + if (!is_string($access)) + $access = 'public'; + if (($access == 'private') && (!$render->parsePrivate)) { + if (isset($this->varsbyfile[$file]) + && isset($this->varsbyfile[$file][$class])) { + foreach ($this->varsbyfile[$file][$class] as $i => $vr) { + $vr->docblock->addKeyword('access', 'private'); + $this->varsbyfile[$file][$class][$i] = $vr; + } + } + if (isset($this->methodsbyfile[$file]) + && isset($this->methodsbyfile[$file][$class])) { + foreach ($this->methodsbyfile[$file][$class] as $i => $vr) { + $vr->docblock->addKeyword('access', 'private'); + $this->methodsbyfile[$file][$class][$i] = $vr; + } + } + if (isset($this->constsbyfile[$file]) + && isset($this->constsbyfile[$file][$class])) { + foreach ($this->constsbyfile[$file][$class] as $i => $vr) { + $vr->docblock->addKeyword('access', 'private'); + $this->constsbyfile[$file][$class][$i] = $vr; + } + } + } + } + $this->classpathpackages[$class][$file] + = array($db->docblock->package,$db->docblock->subpackage); + if ($db->docblock->getExplicitPackage()) { + $render->proceduralpages-> + addClassPackageToFile($file, + $db->docblock->package, $db->docblock->subpackage); + } + $render->addElementToPage($db, $file); + if (isset($this->varsbyfile[$file]) + && isset($this->varsbyfile[$file][$class])) { + foreach ($this->varsbyfile[$file][$class] as $i => $vr) { + $vr->docblock->package = $db->docblock->package; + $vr->docblock->subpackage = $db->docblock->subpackage; + $render->addElementToPage($vr, $file); + $render->addUses($vr, $file); + $this->varsbyfile[$file][$class][$i] = $vr; + $this->vars[$db->docblock->package][$class][$vr->getName()] = $vr; + } + } + if (isset($this->methodsbyfile[$file]) + && isset($this->methodsbyfile[$file][$class])) { + foreach ($this->methodsbyfile[$file][$class] as $i => $vr) { + $vr->docblock->package = $db->docblock->package; + $vr->docblock->subpackage = $db->docblock->subpackage; + $render->addElementToPage($vr, $file); + $render->addUses($vr, $file); + $this->methodsbyfile[$file][$class][$i] = $vr; + $this->methods[$db->docblock->package][$class][$vr->getName()] = $vr; + } + } + if (isset($this->constsbyfile[$file]) + && isset($this->constsbyfile[$file][$class])) { + foreach ($this->constsbyfile[$file][$class] as $i => $vr) { + $vr->docblock->package = $db->docblock->package; + $vr->docblock->subpackage = $db->docblock->subpackage; + $render->addElementToPage($vr, $file); + $render->addUses($vr, $file); + $this->constsbyfile[$file][$class][$i] = $vr; + $this->methods[$db->docblock->package][$class][$vr->getName()] = $vr; + } + } + $this->classpackages[$class][] + = array($db->docblock->package,$db->docblock->subpackage); + if (is_array($db->parent)) + $this->classparents[$db->docblock->package][$class] = $db->parent[1]; + else + $this->classparents[$db->docblock->package][$class] = $db->getExtends(); + if (is_array($db->parent)) { + $z = $this->getClass($db->parent[1], $db->parent[0]); + + $this->classchildren[$z->docblock->package][$db->parent[1]][] = $db; + } + if (isset($this->classchildrenbyfile[$class])) { + foreach ($this->classchildrenbyfile[$class] as $childfile => $other) { + // test 1, inherits in same file (must be same package) + if ($childfile == $file) { + foreach ($other as $child => $packages) { + // debug("parent $class same file $child"); + $this->processChild($render, $child, $childfile); + $x = $this->getClass($child, $childfile); + if ($x->docblock->package + != $GLOBALS['phpDocumentor_DefaultPackageName']) { + // child package need root for class trees + if ($x->docblock->package != $db->docblock->package) { + // debug("adding $child in $childfile 1"); + $this->roots[$child][] = $childfile; + } + } + } + } else { + // test 2, different file, same package + foreach ($other as $child => $packages) { + for ($j=0; $j<count($packages); $j++) { + if ($this->classesbyfile[$file][$class]-> + docblock->package == $packages[$j]) { + $this->processChild($render, $child, $childfile); + // debug("$childfile diff file $child, parent $class, + // same package ".$packages[$j]); + } else { + /* + * test 3, different file, different package, + * only 1 parent is possible + */ + if (isset($this->classesbynamefile[$child])) { + // 1 possible parent + if (count($this->classesbynamefile[$class]) + == 1) { + // debug("$childfile diff file $child, + // diff package, + // 1 possible parent root $class"); + $this->processChild($render, + $child, $childfile); + $x = $this->getClass($child, $childfile); + if ($x->docblock->package + != $GLOBALS + ['phpDocumentor_DefaultPackageName']) { + // child package need root + //for class trees + if ($x->docblock->package + != $db->docblock->package) { + // debug("adding roots + // $child in $childfile 2"); + $this->roots[$child][] = $childfile; + } + } + } + } + } + } + } + } + } + } + } + + /** + * Get the parserClass representation of a class from its name and file + * + * @param string $class classname + * @param string $file file classname is located in + * + * @return parserClass + */ + function &getClass($class, $file) + { + // debug("getClass called with class $class file $file"); + return $this->classesbyfile[$file][$class]; + } + + /** + * Used by {@link parserData::getClasses()} + * to retrieve classes defined in file $path + * + * retrieves the array entry from {@link $classesbyfile} for $path + * + * @param string $path full path to filename + * + * @return mixed returns false if no classes defined in the file, + * otherwise returns an array of {@link parserClass}es + */ + function getClassesInPath($path) + { + if (!isset($this->classesbyfile[$path])) return false; + return $this->classesbyfile[$path]; + } + + /** + * called by {@link parserClass::hasMethods()}. Should not be directly called + * + * @param string $file file classname is located in + * @param string $class classname + * + * @return bool + * @access private + */ + function hasMethods($file, $class) + { + return isset($this->methodsbyfile[$file][$class]); + } + + /** + * called by {@link parserClass::hasConsts()}. + * Should not be directly called + * + * @param string $file file classname is located in + * @param string $class classname + * + * @return bool + * @access private + */ + function hasConsts($file,$class) + { + return isset($this->constsbyfile[$file][$class]); + } + + /** + * called by {@link parserClass::hasVars()}. Should not be directly called + * + * @param string $file file classname is located in + * @param string $class classname + * + * @return bool + * @access private + */ + function hasVars($file, $class) + { + return isset($this->varsbyfile[$file][$class]); + } + + /** + * called by {@link parserClass::hasMethod()}. Should not be directly called + * + * @param string $class classname + * @param string $file file classname is located in + * @param string $name method name + * + * @return bool + * @access private + */ + function hasMethod($class, $file, $name) + { + if (!$this->hasMethods($file, $class)) return false; + for ($i=0; $i<count($this->methodsbyfile[$file][$class]); $i++) { + if ($this->methodsbyfile[$file][$class][$i]->getName() == $name) + return true; + } + return false; + } + + /** + * called by {@link parserClass::hasVar()}. Should not be directly called + * + * @param string $class classname + * @param string $file file classname is located in + * @param string $name var name + * + * @return bool + * @access private + */ + function hasVar($class, $file, $name) + { + if (!$this->hasVars($file, $class)) return false; + for ($i=0; $i<count($this->varsbyfile[$file][$class]); $i++) { + if ($this->varsbyfile[$file][$class][$i]->getName() == $name) + return true; + } + return false; + } + + /** + * called by {@link parserClass::hasConst()}. Should not be directly called + * + * @param string $class classname + * @param string $file file classname is located in + * @param string $name constant name + * + * @return bool + * @access private + */ + function hasConst($class, $file, $name) + { + if (!$this->hasConsts($file, $class)) return false; + for ($i=0; $i<count($this->constsbyfile[$file][$class]); $i++) { + if ($this->constsbyfile[$file][$class][$i]->getName() == $name) + return true; + } + return false; + } + + /** + * called by {@link parserClass::getMethods()}. Should not be directly called + * + * @param string $class classname + * @param string $file file classname is located in + * + * @return mixed + * @access private + */ + function &getMethods($class, $file) + { + if (!isset($this->methodsbyfile[$file][$class])) { + $flag = false; + return $flag; + } + return $this->methodsbyfile[$file][$class]; + } + + /** + * called by {@link parserClass::getVars()}. Should not be directly called + * + * @param string $class classname + * @param string $file file classname is located in + * + * @return mixed + * @access private + */ + function &getVars($class, $file) + { + if (!isset($this->varsbyfile[$file][$class])) { + $flag = false; + return $flag; + } + return $this->varsbyfile[$file][$class]; + } + + /** + * called by {@link parserClass::getConsts()}. Should not be directly called + * + * @param string $class classname + * @param string $file file classname is located in + * + * @return mixed + * @access private + */ + function &getConsts($class, $file) + { + if (!isset($this->constsbyfile[$file][$class])) { + $flag = false; + return $flag; + } + return $this->constsbyfile[$file][$class]; + } + + /** + * called by {@link parserClass::getMethod()}. Should not be directly called + * + * @param string $class classname + * @param string $file file classname is located in + * @param string $name method name + * + * @return mixed + * @access private + */ + function getMethod($class, $file, $name) + { + if (!$this->hasMethod($class, $file, $name)) return false; + for ($i=0; $i<count($this->methodsbyfile[$file][$class]); $i++) { + if ($this->methodsbyfile[$file][$class][$i]->getName() == $name) + return $this->methodsbyfile[$file][$class][$i]; + } + } + + /** + * called by {@link parserClass::getVar()}. Should not be directly called + * + * @param string $class classname + * @param string $file file classname is located in + * @param string $name var name + * + * @return mixed + * @access private + */ + function getVar($class, $file, $name) + { + if (!$this->hasVar($class, $file, $name)) return false; + for ($i=0; $i<count($this->varsbyfile[$file][$class]); $i++) { + if ($this->varsbyfile[$file][$class][$i]->getName() == $name) + return $this->varsbyfile[$file][$class][$i]; + } + } + + /** + * called by {@link parserClass::getConst()}. Should not be directly called + * + * @param string $class classname + * @param string $file file classname is located in + * @param string $name const name + * + * @return mixed + * @access private + */ + function getConst($class, $file, $name) + { + if (!$this->hasConst($class, $file, $name)) return false; + for ($i=0; $i<count($this->constsbyfile[$file][$class]); $i++) { + if ($this->constsbyfile[$file][$class][$i]->getName() == $name) + return $this->constsbyfile[$file][$class][$i]; + } + } + + /** + * Search for a class in a package + * + * @param string $class classname + * @param string $package package classname is in + * + * @return mixed returns false if no class in $package, + * otherwise returns a {@link parserClass} + */ + function &getClassByPackage($class, $package) + { + if (!isset($this->classesbynamefile[$class])) { + // removed, too many warnings, not very useful + // addWarning(PDERROR_CLASS_NOT_IN_PACKAGE,$class,$package); + + $flag = false; + return $flag; + } + for ($i=0; $i < count($this->classesbynamefile[$class]); $i++) { + $cls = + $this->classesbyfile[$this->classesbynamefile[$class][$i]][$class]; + $pkg = $cls->getPackage(); + if ($pkg == $package) + return $cls; + } + // addWarning(PDERROR_CLASS_NOT_IN_PACKAGE,$class,$package); + + $flag = false; + return $flag; + } + + /** + * Find the parent class of a class in file $file + * uses 3 tests to find the parent classname: + * <ol> + * <li>only one class with the parent classname</li> + * <li>more than one class, but only one in the same file as the child</li> + * <li>only one parent class in the same package as the child</li> + * </ol> + * + * @param string $class classname + * @param string $file file classname is located in + * + * @return mixed false if no parent class, + * a string if no parent class found by that name, + * and an array(file parentclass is in, parentclassname) + */ + function getParentClass($class,$file) + { + if (!isset($this->classesbyfile[$file][$class])) { + return false; + } + $element = $this->classesbyfile[$file][$class]; + if (!($ex = $element->getExtends())) return false; + // first check to see if there is one and only one + // class with the parent class's name + if (isset($this->classesbynamefile[$ex])) { + if (count($this->classesbynamefile[$ex]) == 1) { + if ($this->classesbyfile + [$this->classesbynamefile[$ex][0]][$ex]->ignore) { + return $ex; + } + return array($this->classesbynamefile[$ex][0],$ex); + } else { + // next check to see if there is a parent class in the same file + if (isset($this->classesbyfile[$file][$ex])) { + if ($this->classesbyfile[$file][$ex]->ignore) { + return $ex; + } + return array($file,$ex); + } + // next check to see if there is only one package + // used in the file, try to resolve it that way + if (isset($this->classpackagebyfile[$file])) { + if (count($this->classpackagebyfile[$file]) == 1) { + for ($i=0;$i<count($this->classesbynamefile[$ex]);$i++) { + if ($this->classesbyfile + [$this->classesbynamefile[$ex][$i]][$ex]->getPackage() + == $this->classpackagebyfile[$file][0]) { + if ($this->classesbyfile + [$this->classesbynamefile[$ex][$i]][$ex]->ignore) + return $ex; + return array($this->classesbynamefile[$ex][$i],$ex); + } + } + } + } + // name conflict + addWarning(PDERROR_INHERITANCE_CONFLICT, $class, $file, $ex); + return $ex; + } + } else { + if (class_exists('ReflectionClass') && class_exists($ex)) { + $r = new ReflectionClass($ex); + if ($r->isInternal()) { + return $ex; // no warning + } + } + addWarning(PDERROR_PARENT_NOT_FOUND, $class, $ex); + return $ex; + } + } + + /** + * Get a list of all root classes indexed by package. Used to generate + * class trees by {@link Converter} + * + * @param boolean $all [since phpDocumentor 1.3.0RC6] determines whether to + * return class trees that extend non-parsed classes + * + * @return array array(package => array(rootclassname, rootclassname,...),...) + */ + function getRoots($all = false) + { + $roots = array(); + $temproots = $this->roots; + if (!$all) { + foreach ($this->specialRoots as $package => $root) { + foreach ($root as $parent => $info) { + $temproots[$info[0]][] = $info[1]; + } + } + } + foreach ($temproots as $class => $files) { + if (count($files)) { + foreach ($files as $i => $boofou) { + $x = $this->getClass($class, $files[$i]); + + $roots[$x->getPackage()][] = $class; + } + } + } + foreach ($roots as $package => $root) { + usort($roots[$package], "strnatcasecmp"); + } + if ($all) { + $specialRoots = array(); + foreach ($this->specialRoots as $parent => $classinfo) { + if (count($classinfo)) { + foreach ($classinfo as $i => $info) { + $x = $this->getClass($info[0], $info[1]); + + $specialRoots[$x->getPackage()][$parent][] = $info[0]; + } + } + } + foreach ($specialRoots as $package => $root) { + uksort($specialRoots[$package], "strnatcasecmp"); + foreach ($specialRoots[$package] as $parent => $classes) { + usort($specialRoots[$package][$parent], 'strnatcasecmp'); + } + } + return array('special' => $specialRoots, 'normal' => $roots); + } + return $roots; + } + + /** + * Get all classes confirmed in parsing + * to be descended class $parclass in file $file + * + * @param string $parclass name of parent class + * @param string $file file parent class is found in + * + * @return mixed either false if no children, or array of format + * array(childname => childfile,childname2 => childfile2,...) + * @see parserClass::getChildClassList() + * @uses $definitechild + */ + function getDefiniteChildren($parclass, $file) + { + if (isset($this->definitechild[$parclass][$file])) + return $this->definitechild[$parclass][$file]; + return false; + } +} +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converter.inc b/buildscripts/PhpDocumentor/phpDocumentor/Converter.inc new file mode 100755 index 00000000..7f658189 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converter.inc @@ -0,0 +1,5460 @@ +<?php +/** + * Base class for all Converters + * + * phpDocumentor :: automatic documentation generator + * + * PHP versions 4 and 5 + * + * Copyright (c) 2001-2006 Gregory Beaver + * + * LICENSE: + * + * This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General + * Public License as published by the Free Software Foundation; + * either version 2.1 of the License, or (at your option) any + * later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package Converters + * @author Greg Beaver <cellog@php.net> + * @copyright 2001-2006 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version CVS: $Id: Converter.inc 287891 2009-08-30 08:08:00Z ashnazg $ + * @filesource + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @see parserDocBlock, parserInclude, parserPage, parserClass + * @see parserDefine, parserFunction, parserMethod, parserVar + * @since 1.0rc1 + */ +/** + * Smarty template files + */ +include_once("phpDocumentor/Smarty-2.6.0/libs/Smarty.class.php"); +/** + * Base class for all output converters. + * + * The Converter marks the final stage in phpDocumentor. phpDocumentor works + * in this order: + * + * <pre>Parsing => Intermediate Parsing organization => Conversion to output</pre> + * + * A Converter takes output from the {@link phpDocumentor_IntermediateParser} and + * converts it to output. With version 1.2, phpDocumentor includes a variety + * of output converters: + * <ul> + * <li>{@link HTMLframesConverter}</li> + * <li>{@link HTMLSmartyConverter}</li> + * <li>{@link PDFdefaultConverter}</li> + * <li>{@link CHMdefaultConverter}</li> + * <li>{@link CSVdia2codeConverter}</li> + * <li>{@link XMLDocBookConverter}</li> + * </ul> + * {@internal + * The converter takes output directly from {@link phpDocumentor_IntermediateParser} + * and using {@link walk()} or {@link walk_everything} (depending on the value of + * {@link $sort_absolutely_everything}) it "walks" over an array of phpDocumentor elements.}} + * + * @package Converters + * @abstract + * @author Greg Beaver <cellog@php.net> + * @since 1.0rc1 + * @version $Id: Converter.inc 287891 2009-08-30 08:08:00Z ashnazg $ + */ +class Converter +{ + /** + * This converter knows about the new root tree processing + * In order to fix PEAR Bug #6389 + * @var boolean + */ + var $processSpecialRoots = false; + /** + * output format of this converter + * + * in Child converters, this will match the first part of the -o command-line + * as in -o HTML:frames:default "HTML" + * @tutorial phpDocumentor.howto.pkg#using.command-line.output + * @var string + */ + var $outputformat = 'Generic'; + /** + * package name currently being converted + * @var string + */ + var $package = 'default'; + /** + * subpackage name currently being converted + * @var string + */ + var $subpackage = ''; + /** + * set to a classname if currently parsing a class, false if not + * @var string|false + */ + var $class = false; + /**#@+ + * @access private + */ + /** + * the workhorse of linking. + * + * This array is an array of link objects of format: + * [package][subpackage][eltype][elname] = descendant of {@link abstractLink} + * eltype can be page|function|define|class|method|var + * if eltype is method or var, the array format is: + * [package][subpackage][eltype][class][elname] + * @var array + * @see functionLink, pageLink, classLink, defineLink, methodLink, varLink, globalLink + */ + var $links = array(); + + /** + * the workhorse of linking, with allowance for support of multiple + * elements in different files. + * + * This array is an array of link objects of format: + * [package][subpackage][eltype][file][elname] = descendant of {@link abstractLink} + * eltype can be function|define|class|method|var + * if eltype is method or var, the array format is: + * [package][subpackage][eltype][file][class][elname] + * @var array + * @see functionLink, pageLink, classLink, defineLink, methodLink, varLink, globalLink + */ + var $linkswithfile = array(); + /**#@-*/ + /** + * set to value of -po commandline + * @tutorial phpDocumentor.howto.pkg#using.command-line.packageoutput + * @var mixed + */ + var $package_output; + + /** + * name of current page being converted + * @var string + */ + var $page; + + /** + * path of current page being converted + * @var string + */ + var $path; + + /** + * template for the procedural page currently being processed + * @var Smarty + */ + var $page_data; + + /** + * template for the class currently being processed + * @var Smarty + */ + var $class_data; + + /** + * current procedural page being processed + * @var parserPage + */ + var $curpage; + /** + * alphabetical index of all elements sorted by package, subpackage, page, + * and class. + * @var array Format: array(package => array(subpackage => array('page'|'class' => array(path|classname => array(element, element,...))))) + * @uses $sort_absolutely_everything if true, then $package_elements is used, + * otherwise, the {@link ParserData::$classelements} and + * {@link ParserData::$pageelements} variables are used + */ + var $package_elements = array(); + /** + * alphabetical index of all elements + * + * @var array Format: array(first letter of element name => array({@link parserElement} or {@link parserPage},...)) + * @see formatIndex(), HTMLframesConverter::formatIndex() + */ + var $elements = array(); + /** + * alphabetized index of procedural pages by package + * + * @see $leftindex + * @var array Format: array(package => array(subpackage => array({@link pageLink} 1,{@link pageLink} 2,...) + */ + var $page_elements = array(); + /** + * alphabetized index of defines by package + * + * @see $leftindex + * @var array Format: array(package => array(subpackage => array({@link defineLink} 1,{@link defineLink} 2,...) + */ + var $define_elements = array(); + /** + * alphabetized index of classes by package + * + * @see $leftindex + * @var array Format: array(package => array(subpackage => array({@link classLink} 1,{@link classLink} 2,...) + */ + var $class_elements = array(); + /** + * alphabetized index of global variables by package + * + * @see $leftindex + * @var array Format: array(package => array(subpackage => array({@link globalLink} 1,{@link globalLink} 2,...) + */ + var $global_elements = array(); + /** + * alphabetized index of functions by package + * + * @see $leftindex + * @var array Format: array(package => array(subpackage => array({@link functionLink} 1,{@link functionLink} 2,...) + */ + var $function_elements = array(); + /** + * alphabetical index of all elements, indexed by package/subpackage + * + * @var array Format: array(first letter of element name => array({@link parserElement} or {@link parserPage},...)) + * @see formatPkgIndex(), HTMLframesConverter::formatPkgIndex() + */ + var $pkg_elements = array(); + + /** + * alphabetical index of all elements on a page by package/subpackage + * + * The page itself has a link under ###main + * @var array Format: array(package => array(subpackage => array(path => array({@link abstractLink} descendant 1, ...))) + * @see formatLeftIndex() + */ + var $page_contents = array(); + + /** + * This determines whether the {@link $page_contents} array should be sorted by element type as well as alphabetically by name + * @see sortPageContentsByElementType() + * @var boolean + */ + var $sort_page_contents_by_type = false; + /** + * This is used if the content must be passed in the order it should be read, i.e. by package, procedural then classes + * + * This fixes bug 637921, and is used by {@link PDFdefaultConverter} + */ + var $sort_absolutely_everything = false; + /** + * alphabetical index of all methods and vars in a class by package/subpackage + * + * The class itself has a link under ###main + * @var array + * Format:<pre> + * array(package => + * array(subpackage => + * array(path => + * array(class => + * array({@link abstractLink} descendant 1, ... + * ) + * ) + * ) + * )</pre> + * @see formatLeftIndex() + */ + var $class_contents = array(); + /** + * controls processing of elements marked private with @access private + * + * defaults to false. Set with command-line --parseprivate or -pp + * @var bool + */ + var $parseprivate; + /** + * controls display of progress information while parsing. + * + * defaults to false. Set to true for cron jobs or other situations where no visual output is necessary + * @var bool + */ + var $quietmode; + + /** + * directory that output is sent to. -t command-line sets this. + * @tutorial phpDocumentor.howto.pkg#using.command-line.target + */ + var $targetDir = ''; + + /** + * Directory that the template is in, relative to phpDocumentor root directory + * @var string + */ + var $templateDir = ''; + + /** + * Directory that the smarty templates are in + * @var string + */ + var $smarty_dir = ''; + + /** + * Name of the template, from last part of -o + * @tutorial phpDocumentor.howto.pkg#using.command-line.output + * @var string + */ + var $templateName = ''; + + /** + * full path of the current file being converted + */ + var $curfile; + + /** + * All class information, organized by path, and by package + * @var Classes + */ + var $classes; + + /** + * Flag used to help converters determine whether to do special source highlighting + * @var boolean + */ + var $highlightingSource = false; + + /** + * Hierarchy of packages + * + * Every package that contains classes may have parent or child classes + * in other packages. In other words, this code is legal: + * + * <code> + * /** + * * @package one + * * / + * class one {} + * + * /** + * * @package two + * * / + * class two extends one {} + * </code> + * + * In this case, package one is a parent of package two + * @var array + * @see phpDocumentor_IntermediateParser::$package_parents + */ + var $package_parents; + + /** + * Packages associated with categories + * + * Used by the XML:DocBook/peardoc2 converter, and available to others, to + * group many packages into categories + * @see phpDocumentor_IntermediateParser::$packagecategories + * @var array + */ + var $packagecategories; + + /** + * All packages encountered in parsing + * @var array + * @see phpDocumentor_IntermediateParser::$all_packages + */ + var $all_packages; + + /** + * A list of files that have had source code generated + * @var array + */ + var $sourcePaths = array(); + + /** + * Controls which of the one-element-only indexes are generated. + * + * Generation of these indexes for large packages is time-consuming. This is an optimization feature. An + * example of how to use this is in {@link HTMLframesConverter::$leftindex}, and in {@link HTMLframesConverter::formatLeftIndex()}. + * These indexes are intended for use as navigational aids through documentation, but can be used for anything by converters. + * @see $class_elements, $page_elements, $function_elements, $define_elements, $global_elements + * @see formatLeftIndex() + * @var array + */ + var $leftindex = array('classes' => true, 'pages' => true, 'functions' => true, 'defines' => true, 'globals' => true); + + /** @access private */ + var $killclass = false; + /** + * @var string + * @see phpDocumentor_IntermediateParser::$title + */ + var $title = 'Generated Documentation'; + + /** + * Options for each template, parsed from the options.ini file in the template base directory + * @tutorial phpDocumentor/tutorials.pkg#conversion.ppage + * @var array + */ + var $template_options; + + /** + * Tutorials and Extended Documentation parsed from a tutorials/package[/subpackage] directory + * @tutorial tutorials.pkg + * @access private + */ + var $tutorials = array(); + + /** + * tree-format structure of tutorials and their child tutorials, if any + * @var array + * @access private + */ + var $tutorial_tree = false; + + /** + * list of tutorials that have already been processed. Used by @link _setupTutorialTree() + * @var array + * @access private + */ + var $processed_tutorials; + + /** + * List of all @todo tags and a link to the element with the @todo + * + * Format: array(package => array(link to element, array(todo {@link parserTag},...)),...) + * @tutorial tags.todo.pkg + * @var array + */ + var $todoList = array(); + + /** + * Directory where compiled templates go - will be deleted on exit + * + * @var string + * @access private + */ + var $_compiledDir = array(); + + /** + * Initialize Converter data structures + * @param array {@link $all_packages} value + * @param array {@link $package_parents} value + * @param Classes {@link $classes} value + * @param ProceduralPages {@link $proceduralpages} value + * @param array {@link $package_output} value + * @param boolean {@link $parseprivate} value + * @param boolean {@link $quietmode} value + * @param string {@link $targetDir} value + * @param string {@link $templateDir} value + * @param string (@link $title} value + */ + function Converter(&$allp, &$packp, &$classes, &$procpages, $po, $pp, $qm, $targetDir, $template, $title) + { + $this->all_packages = $allp; + $this->package_parents = $packp; + $this->package = $GLOBALS['phpDocumentor_DefaultPackageName']; + $this->proceduralpages = &$procpages; + $this->package_output = $po; + if (is_array($po)) + { + $a = $po[0]; + $this->all_packages = array_flip($po); + $this->all_packages[$a] = 1; + } + $this->parseprivate = $pp; + $this->quietmode = $qm; + $this->classes = &$classes; + $this->roots = $classes->getRoots($this->processSpecialRoots); + $this->title = $title; + $this->setTemplateDir($template); + $this->setTargetdir($targetDir); + } + + /** + * Called by IntermediateParser after creation + * @access private + */ + function setTutorials($tutorials) + { + $this->tutorials = $tutorials; + } + + /** + * @param pkg|cls|proc the tutorial type to search for + * @param tutorial name + * @param string package name + * @param string subpackage name, if any + * @return false|parserTutorial if the tutorial exists, return it + */ + function hasTutorial($type, $name, $package, $subpackage = '') + { + if (isset($this->tutorials[$package][$subpackage][$type][$name . '.' . $type])) + return $this->tutorials[$package][$subpackage][$type][$name . '.' . $type]; + return false; + } + + /** + * Called by {@link walk()} while converting, when the last class element + * has been parsed. + * + * A Converter can use this method in any way it pleases. HTMLframesConverter + * uses it to complete the template for the class and to output its + * documentation + * @see HTMLframesConverter::endClass() + * @abstract + */ + function endClass() + { + } + + /** + * Called by {@link walk()} while converting, when the last procedural page + * element has been parsed. + * + * A Converter can use this method in any way it pleases. HTMLframesConverter + * uses it to complete the template for the procedural page and to output its + * documentation + * @see HTMLframesConverter::endClass() + * @abstract + */ + function endPage() + { + } + + /** + * Called by {@link walk()} while converting. + * + * This method is intended to be the place that {@link $pkg_elements} is + * formatted for output. + * @see HTMLframesConverter::formatPkgIndex() + * @abstract + */ + function formatPkgIndex() + { + } + + /** + * Called by {@link walk()} while converting. + * + * This method is intended to be the place that {@link $elements} is + * formatted for output. + * @see HTMLframesConverter::formatIndex() + * @abstract + */ + function formatIndex() + { + } + + /** + * Called by {@link walk()} while converting. + * + * This method is intended to be the place that any of + * {@link $class_elements, $function_elements, $page_elements}, + * {@link $define_elements}, and {@link $global_elements} is formatted for + * output, depending on the value of {@link $leftindex} + * @see HTMLframesConverter::formatLeftIndex() + * @abstract + */ + function formatLeftIndex() + { + } + + /** + * Called by {@link parserSourceInlineTag::stringConvert()} to allow + * converters to format the source code the way they'd like. + * + * default returns it unchanged (html with xhtml tags) + * @param string output from highlight_string() - use this function to + * reformat the returned data for Converter-specific output + * @return string + * @deprecated in favor of tokenizer-based highlighting. This will be + * removed for 2.0 + */ + function unmangle($sourcecode) + { + return $sourcecode; + } + + /** + * Initialize highlight caching + */ + function startHighlight() + { + $this->_highlightCache = array(false, false); + $this->_appendHighlight = ''; + } + + function getHighlightState() + { + return $this->_highlightCache; + } + + function _setHighlightCache($type, $token) + { + $test = ($this->_highlightCache[0] === $type && $this->_highlightCache[1] == $token); + if (!$test) { + $this->_appendHighlight = $this->flushHighlightCache(); + } else { + $this->_appendHighlight = ''; + } + $this->_highlightCache = array($type, $token); + return $test; + } + + /** + * Return the close text for the current token + * @return string + */ + function flushHighlightCache() + { + $hc = $this->_highlightCache; + $this->_highlightCache = array(false, false); + if ($hc[0]) { + if (!isset($this->template_options[$hc[0]]['/'.$hc[1]])) { + return ''; + } + return $this->template_options[$hc[0]]['/'.$hc[1]]; + } + return ''; + } + + /** + * Used to allow converters to format the source code the way they'd like. + * + * default returns it unchanged. Mainly used by the {@link HighlightParser} + * {@internal + * The method takes information from options.ini, the template options + * file, specifically the [highlightSourceTokens] and [highlightSource] + * sections, and uses them to enclose tokens. + * + * {@source}}} + * @param integer token value from {@link PHP_MANUAL#tokenizer tokenizer constants} + * @param string contents of token + * @param boolean whether the contents are preformatted or need modification + * @return string + */ + function highlightSource($token, $word, $preformatted = false) + { + if ($token !== false) + { + if (!$preformatted) $word = $this->postProcess($word); + if (isset($this->template_options['highlightSourceTokens'][token_name($token)])) + { + if ($this->_setHighlightCache('highlightSourceTokens', token_name($token))) { + return $word; + } + $e = $this->_appendHighlight; + return $e . $this->template_options['highlightSourceTokens'][token_name($token)] . $word; + } else + { + $this->_setHighlightCache(false, false); + $e = $this->_appendHighlight; + return $e . $word; + } + } else + { + if (isset($this->template_options['highlightSource'][$word])) + { + $newword = ($preformatted ? $word : $this->postProcess($word)); + if ($this->_setHighlightCache('highlightSource', $word)) { + return $newword; + } + $e = $this->_appendHighlight; + return $e . $this->template_options['highlightSource'][$word] . $newword; + } else + { + $this->_setHighlightCache(false, false); + $e = $this->_appendHighlight; + return $e . ($preformatted ? $word : $this->postProcess($word)); + } + } + } + + /** + * Used to allow converters to format the source code of DocBlocks the way + * they'd like. + * + * default returns it unchanged. Mainly used by the {@link HighlightParser} + * {@internal + * The method takes information from options.ini, the template options + * file, specifically the [highlightDocBlockSourceTokens] section, and uses + * it to enclose tokens. + * + * {@source}}} + * @param string name of docblock token type + * @param string contents of token + * @param boolean whether the contents are preformatted or need modification + * @return string + */ + function highlightDocBlockSource($token, $word, $preformatted = false) + { + if (empty($word)) { + $this->_setHighlightCache(false, false); + $e = $this->_appendHighlight; + return $e . $word; + } + if (isset($this->template_options['highlightDocBlockSourceTokens'][$token])) + { + if (!$preformatted) $word = $this->postProcess($word); + if ($this->_setHighlightCache('highlightDocBlockSourceTokens', $token)) { + return $word; + } + $e = $this->_appendHighlight; + return $e . $this->template_options['highlightDocBlockSourceTokens'][$token] . $word; + } else { + $this->_setHighlightCache(false, false); + $e = $this->_appendHighlight; + return $e . ($preformatted ? $word : $this->postProcess($word)); + } + } + + /** + * Used to allow converters to format the source code of Tutorial XML the way + * they'd like. + * + * default returns it unchanged. Mainly used by the {@link HighlightParser} + * {@internal + * The method takes information from options.ini, the template options + * file, specifically the [highlightDocBlockSourceTokens] section, and uses + * it to enclose tokens. + * + * {@source}}} + * @param string name of docblock token type + * @param string contents of token + * @param boolean whether the contents are preformatted or need modification + * @return string + */ + function highlightTutorialSource($token, $word, $preformatted = false) + { + if (empty($word)) { + $this->_setHighlightCache(false, false); + $e = $this->_appendHighlight; + return $e . $word; + } + if (isset($this->template_options['highlightTutorialSourceTokens'][$token])) + { + if (!$preformatted) $word = $this->postProcess($word); + if ($this->_setHighlightCache('highlightTutorialSourceTokens', $token)) { + return $word; + } + $e = $this->_appendHighlight; + return $e . $this->template_options['highlightTutorialSourceTokens'][$token] . $word; + } else { + $this->_setHighlightCache(false, false); + $e = $this->_appendHighlight; + return $e . ($preformatted ? $word : $this->postProcess($word)); + } + } + + /** + * Called by {@link parserReturnTag::Convert()} to allow converters to + * change type names to desired formatting + * + * Used by {@link XMLDocBookConverter::type_adjust()} to change true and + * false to the peardoc2 values + * @param string + * @return string + */ + function type_adjust($typename) + { + return $typename; + } + + /** + * Used to convert the {@}example} inline tag in a docblock. + * + * By default, this just wraps ProgramExample + * @see XMLDocBookpeardoc2Converter::exampleProgramExample + * @param string + * @param boolean true if this is to highlight a tutorial <programlisting> + * @return string + */ + function exampleProgramExample($example, $tutorial = false, $inlinesourceparse = null/*false*/, + $class = null/*false*/, $linenum = null/*false*/, $filesourcepath = null/*false*/) + { + return $this->ProgramExample($example, $tutorial, $inlinesourceparse, $class, $linenum, $filesourcepath); + } + + /** + * Used to convert the <<code>> tag in a docblock + * @param string + * @param boolean true if this is to highlight a tutorial <programlisting> + * @return string + */ + function ProgramExample($example, $tutorial = false, $inlinesourceparse = null/*false*/, + $class = null/*false*/, $linenum = null/*false*/, $filesourcepath = null/*false*/) + { + $this->highlightingSource = true; + if (tokenizer_ext) + { + $e = $example; + if (!is_array($example)) + { + $obj = new phpDocumentorTWordParser; + $obj->setup($example); + $e = $obj->getFileSource(); + $bOpenTagFound = false; + foreach ($e as $ke => $ee) + { + foreach ($ee as $kee => $eee) + { + if ((int) $e[$ke][$kee][0] == T_OPEN_TAG) + { + $bOpenTagFound = true; + } + } + } + if (!$bOpenTagFound) { + $example = "<?php\n".$example; + $obj->setup($example); + $e = $obj->getFileSource(); + unset($e[0]); + $e = array_values($e); + } + unset($obj); + } + $saveclass = $this->class; + $parser = new phpDocumentor_HighlightParser; + if (!isset($inlinesourceparse)) + { + $example = $parser->parse($e, $this, true); // force php mode + } else + { + if (isset($filesourcepath)) + { + $example = $parser->parse($e, $this, $inlinesourceparse, $class, $linenum, $filesourcepath); + } elseif (isset($linenum)) + { + $example = $parser->parse($e, $this, $inlinesourceparse, $class, $linenum); + } elseif (isset($class)) + { + $example = $parser->parse($e, $this, $inlinesourceparse, $class); + } else + { + $example = $parser->parse($e, $this, $inlinesourceparse); + } + } + $this->class = $saveclass; + } else + { + $example = $this->postProcess($example); + } + $this->highlightingSource = false; + + if ($tutorial) + { + return $example; + } + + if (!isset($this->template_options['desctranslate'])) return $example; + if (!isset($this->template_options['desctranslate']['code'])) return $example; + $example = $this->template_options['desctranslate']['code'] . $example; + if (!isset($this->template_options['desctranslate']['/code'])) return $example; + return $example . $this->template_options['desctranslate']['/code']; + } + + /** + * @param string + */ + function TutorialExample($example) + { + $this->highlightingSource = true; + $parse = new phpDocumentor_TutorialHighlightParser; + $x = $parse->parse($example, $this); + $this->highlightingSource = false; + return $x; + } + + /** + * Used to convert the contents of <<li>> in a docblock + * @param string + * @return string + */ + function ListItem($item) + { + if (!isset($this->template_options['desctranslate'])) return $item; + if (!isset($this->template_options['desctranslate']['li'])) return $item; + $item = $this->template_options['desctranslate']['li'] . $item; + if (!isset($this->template_options['desctranslate']['/li'])) return $item; + return $item . $this->template_options['desctranslate']['/li']; + } + + /** + * Used to convert the contents of <<ol>> or <<ul>> in a docblock + * @param string + * @return string + */ + function EncloseList($list,$ordered) + { + $listname = ($ordered ? 'ol' : 'ul'); + if (!isset($this->template_options['desctranslate'])) return $list; + if (!isset($this->template_options['desctranslate'][$listname])) return $list; + $list = $this->template_options['desctranslate'][$listname] . $list; + if (!isset($this->template_options['desctranslate']['/'.$listname])) return $list; + return $list . $this->template_options['desctranslate']['/'.$listname]; + } + + /** + * Used to convert the contents of <<pre>> in a docblock + * @param string + * @return string + */ + function PreserveWhiteSpace($string) + { + if (!isset($this->template_options['desctranslate'])) return $string; + if (!isset($this->template_options['desctranslate']['pre'])) return $string; + $string = $this->template_options['desctranslate']['pre'] . $string; + if (!isset($this->template_options['desctranslate']['/pre'])) return $string; + return $string . $this->template_options['desctranslate']['/pre']; + } + + /** + * Used to enclose a paragraph in a docblock + * @param string + * @return string + */ + function EncloseParagraph($para) + { + if (!isset($this->template_options['desctranslate'])) return $para; + if (!isset($this->template_options['desctranslate']['p'])) return $para; + $para = $this->template_options['desctranslate']['p'] . $para; + if (!isset($this->template_options['desctranslate']['/p'])) return $para; + return $para . $this->template_options['desctranslate']['/p']; + } + + /** + * Used to convert the contents of <<b>> in a docblock + * @param string + * @return string + */ + function Bolden($para) + { + if (!isset($this->template_options['desctranslate'])) return $para; + if (!isset($this->template_options['desctranslate']['b'])) return $para; + $para = $this->template_options['desctranslate']['b'] . $para; + if (!isset($this->template_options['desctranslate']['/b'])) return $para; + return $para . $this->template_options['desctranslate']['/b']; + } + + /** + * Used to convert the contents of <<i>> in a docblock + * @param string + * @return string + */ + function Italicize($para) + { + if (!isset($this->template_options['desctranslate'])) return $para; + if (!isset($this->template_options['desctranslate']['i'])) return $para; + $para = $this->template_options['desctranslate']['i'] . $para; + if (!isset($this->template_options['desctranslate']['/i'])) return $para; + return $para . $this->template_options['desctranslate']['/i']; + } + + /** + * Used to convert the contents of <<var>> in a docblock + * @param string + * @return string + */ + function Varize($para) + { + if (!isset($this->template_options['desctranslate'])) return $para; + if (!isset($this->template_options['desctranslate']['var'])) return $para; + $para = $this->template_options['desctranslate']['var'] . $para; + if (!isset($this->template_options['desctranslate']['/var'])) return $para; + return $para . $this->template_options['desctranslate']['/var']; + } + + /** + * Used to convert the contents of <<kbd>> in a docblock + * @param string + * @return string + */ + function Kbdize($para) + { + if (!isset($this->template_options['desctranslate'])) return $para; + if (!isset($this->template_options['desctranslate']['kbd'])) return $para; + $para = $this->template_options['desctranslate']['kbd'] . $para; + if (!isset($this->template_options['desctranslate']['/kbd'])) return $para; + return $para . $this->template_options['desctranslate']['/kbd']; + } + + /** + * Used to convert the contents of <<samp>> in a docblock + * @param string + * @return string + */ + function Sampize($para) + { + if (!isset($this->template_options['desctranslate'])) return $para; + if (!isset($this->template_options['desctranslate']['samp'])) return $para; + $para = $this->template_options['desctranslate']['samp'] . $para; + if (!isset($this->template_options['desctranslate']['/samp'])) return $para; + return $para . $this->template_options['desctranslate']['/samp']; + } + + /** + * Used to convert <<br>> in a docblock + * @param string + * @return string + */ + function Br($para) + { + if (!isset($this->template_options['desctranslate'])) return $para; + if (!isset($this->template_options['desctranslate']['br'])) return $para; + $para = $this->template_options['desctranslate']['br'] . $para; + return $para; + } + + /** + * This version does nothing + * + * Perform necessary post-processing of string data. For example, the HTML + * Converters should escape < and > to become < and > + * @return string + */ + function postProcess($text) + { + return $text; + } + + /** + * Creates a table of contents for a {@}toc} inline tag in a tutorial + * + * This function should return a formatted table of contents. By default, it + * does nothing, it is up to the converter to format the TOC + * @abstract + * @return string table of contents formatted for use in the current output format + * @param array format: array(array('tagname' => section, 'link' => returnsee link, 'id' => anchor name, 'title' => from title tag),...) + */ + function formatTutorialTOC($toc) + { + return ''; + } + + /** + * Write out the formatted source code for a php file + * + * This function provides the primary functionality for the + * {@tutorial tags.filesource.pkg} tag. + * @param string full path to the file + * @param string fully highlighted/linked source code of the file + * @abstract + */ + function writeSource($filepath, $source) + { + debug($source); + return; + } + + /** + * Write out the formatted source code for an example php file + * + * This function provides the primary functionality for the + * {@tutorial tags.example.pkg} tag. + * @param string example title + * @param string example filename (no path) + * @param string fully highlighted/linked source code of the file + * @abstract + */ + function writeExample($title, $path, $source) + { + return; + } + + /** Translate the path info into a unique file name for the highlighted + * source code. + * @param string $pathinfo + * @return string + */ + function getFileSourceName($path) + { + global $_phpDocumentor_options; + $pathinfo = $this->proceduralpages->getPathInfo($path, $this); + $pathinfo['source_loc'] = str_replace($_phpDocumentor_options['Program_Root'].'/','',$pathinfo['source_loc']); + $pathinfo['source_loc'] = str_replace('/','_',$pathinfo['source_loc']); + return "fsource_{$pathinfo['package']}_{$pathinfo['subpackage']}_{$pathinfo['source_loc']}"; + } + + /** Return the fixed path to the source-code file folder. + * @param string $base Path is relative to this folder + * @return string + */ + function getFileSourcePath($base) + { + if (substr($base, strlen($base) - 1) != PATH_DELIMITER) { + $base .= PATH_DELIMITER; + } + return $base . '__filesource'; + } + + /** Return the path to the current + * @param string $pathinfo + * @return string + */ + function getCurrentPageURL() + { + return '{$srcdir}' . PATH_DELIMITER . $this->page_dir; + } + + /** + * @return string an output-format dependent link to phpxref-style highlighted + * source code + * @abstract + */ + function getSourceLink($path) + { + return ''; + } + + /** + * @return string Link to the current page being parsed. + * Should return {@link $curname} and a converter-specific extension. + * @abstract + */ + function getCurrentPageLink() + { + } + + /** + * Return a line of highlighted source code with formatted line number + * + * If the $path is a full path, then an anchor to the line number will be + * added as well + * @param integer line number + * @param string highlighted source code line + * @param false|string full path to @filesource file this line is a part of, + * if this is a single line from a complete file. + * @return string formatted source code line with line number + */ + function sourceLine($linenumber, $line, $path = false) + { + if ($path) + { + return $this->getSourceAnchor($path, $linenumber) . + $this->Br(sprintf('%-6u',$linenumber).str_replace("\n",'',$line)); + } else + { + return $this->Br(sprintf('%-6u',$linenumber).str_replace("\n",'',$line)); + } + } + + /** + * Determine whether an element's file has generated source code, used for + * linking to line numbers of source. + * + * Wrapper for {@link $sourcePaths} in this version + * + * {@internal since file paths get stored with most/all slashes + * set to forward slash '/', we need to doublecheck that + * we're not given a backslashed path to search for... + * if we are, it's likely that it was originally stored + * with a forward slash. Further, I'm not convinced it's safe + * to just check the {@link PHPDOCUMENTOR_WINDOWS} flag, so I'm checking + * specifically for backslashes intead.}} + * + * @param string full path to the source code file + * @return boolean + */ + function hasSourceCode($path) + { + return isset($this->sourcePaths[$path]); + if (strpos($path, '\\') > -1) { + $modifiedPath = str_replace('\\', '/', $path); + return isset($this->sourcePaths[$modifiedPath]); + } else { + return isset($this->sourcePaths[$path]); + } + } + + /** + * Mark a file as having had source code highlighted + * @param string full path of source file + */ + function setSourcePaths($path) + { + $this->sourcePaths[$path] = true; + } + + /** + * Used to translate an XML DocBook entity like ” from a tutorial by + * reading the options.ini file for the template. + * @param string entity name + */ + function TranslateEntity($name) + { + if (!isset($this->template_options['ppage'])) + { + if (!$this->template_options['preservedocbooktags']) + return ''; + else + return '&'.$name.';'; + } + if (isset($this->template_options['ppage']['&'.$name.';'])) + { + return $this->template_options['ppage']['&'.$name.';']; + } else + { + if (!$this->template_options['preservedocbooktags']) + return ''; + else + return '&'.$name.';'; + } + } + + /** + * Used to translate an XML DocBook tag from a tutorial by reading the + * options.ini file for the template. + * @param string tag name + * @param string any attributes Format: array(name => value) + * @param string the tag contents, if any + * @param string the tag contents, if any, unpost-processed + * @return string + */ + function TranslateTag($name,$attr,$cdata,$unconvertedcdata) + { + if (!isset($this->template_options['ppage'])) + { + if (!$this->template_options['preservedocbooktags']) + return $cdata; + else + return '<'.$name.$this->AttrToString($name,$attr,true).'>'.$cdata.'</'.$name.'>'."\n"; + } + // make sure this template transforms the tag into something + if (isset($this->template_options['ppage'][$name])) + { + // test for global attribute transforms like $attr$role = class, changing + // all role="*" attributes to class="*" in html, for example + foreach($attr as $att => $val) + { + if (isset($this->template_options['$attr$'.$att])) + { + $new = ''; + if (!isset($this->template_options['$attr$'.$att]['close'])) + { + $new .= '<'.$this->template_options['$attr$'.$att]['open']; + if (isset($this->template_options['$attr$'.$att]['cdata!'])) + { + if (isset($this->template_options['$attr$'.$att]['separateall'])) + $new .= $this->template_options['$attr$'.$att]['separator']; + else + $new .= ' '; + $new .= $this->template_options['$attr$'.$att]['$'.$att]; + $new .= $this->template_options['$attr$'.$att]['separator']; + if ($this->template_options['$attr$'.$att]['quotevalues']) $val = '"'.$val.'"'; + $new .= $val.'>'; + } else + { + $new .= '>'.$val; + } + $new .= '</'.$this->template_options['$attr$'.$att]['open'].'>'; + } else + { + $new .= $this->template_options['$attr$'.$att]['open'] . $val . $this->template_options['$attr$'.$att]['close']; + } + unset($attr[$att]); + $cdata = $new . $cdata; + } + } + + if (!isset($this->template_options['ppage']['/'.$name])) + {// if the close tag isn't specified, we put opening and closing tags around it, with translated attributes + if (isset($this->template_options['ppage'][$name.'/'])) + $cdata = '<'.$this->template_options['ppage'][$name].$this->AttrToString($name,$attr).'/>' . $cdata; + else + $cdata = '<'.$this->template_options['ppage'][$name].$this->AttrToString($name,$attr).'>' . $cdata . + '</'.$this->template_options['ppage'][$name].'>'; + } else + { // if close tag is specified, use the open and close as literal + if ($name == 'programlisting' && isset($attr['role']) && + ($attr['role'] == 'php' || $attr['role'] == 'tutorial' || $attr['role'] == 'html')) + { // highlight PHP source +// var_dump($unconvertedcdata, $cdata);exit; + if ($attr['role'] == 'php') { + $cdata = $this->ProgramExample($unconvertedcdata, true); + } elseif ($attr['role'] == 'tutorial') { + $cdata = $this->TutorialExample($unconvertedcdata); + } elseif ($attr['role'] == 'html') { + $cdata = $unconvertedcdata; + } + } else + {// normal case below + $cdata = $this->template_options['ppage'][$name].$this->AttrToString($name,$attr). $cdata .$this->template_options['ppage']['/'.$name]; + } + } + return $cdata; + } else + { + if ($this->template_options['preservedocbooktags']) + { + return '<'.$name.$this->AttrToString($name,$attr,true).'>' . $cdata . + '</'.$name.'>'."\n"; + } else + { + return $cdata; + } + } + } + + /** + * Convert the attribute of a Tutorial docbook tag's attribute list + * to a string based on the template options.ini + * @param string tag name + * @param attribute array + * @param boolean if true, returns attrname="value"... + * @return string + */ + function AttrToString($tag,$attr,$unmodified = false) + { + $ret = ''; + if ($unmodified) + { + $ret = ' '; + foreach($attr as $n => $v) + { + $ret .= $n.' = "'.$v.'"'; + } + return $ret; + } + // no_attr tells us to ignore all attributes + if (isset($this->template_options['no_attr'])) return $ret; + // tagname! tells us to ignore all attributes for this tag + if (isset($this->template_options['ppage'][$tag.'!'])) return $ret; + if (count($attr)) $ret = ' '; + // pass 1, check to see if any attributes add together + $same = array(); + foreach($attr as $n => $v) + { + if (isset($this->template_options['ppage'][$tag.'->'.$n])) + { + $same[$this->template_options['ppage'][$tag.'->'.$n]][] = $n; + } + } + foreach($attr as $n => $v) + { + if (isset($this->template_options['ppage'][$tag.'->'.$n])) + { + if (count($same[$this->template_options['ppage'][$tag.'->'.$n]]) == 1) + { // only 1 attribute translated for this one + // this is useful for equivalent value names + if (isset($this->template_options['ppage'][$tag.'->'.$n.'+'.$v])) $v = $this->template_options['ppage'][$tag.'->'.$n.'+'.$v]; + } else + { // more than 1 attribute combines to make the new attribute + $teststrtemp = array(); + foreach($same[$this->template_options['ppage'][$tag.'->'.$n]] as $oldattr) + { + $teststrtemp[] = $oldattr.'+'.$attr[$oldattr]; + } + $teststrs = array(); + $num = count($same[$this->template_options['ppage'][$tag.'->'.$n]]); + for($i=0;$i<$num;$i++) + { + $started = false; + $a = ''; + for($j=$i;!$started || $j != $i;$j = ($j + $i) % $num) + { + if (!empty($a)) $a .= '|'; + $a .= $teststrtemp[$j]; + } + $teststrs[$i] = $a; + } + $done = false; + foreach($teststrs as $test) + { + if ($done) break; + if (isset($this->template_options['ppage'][$tag.'->'.$test])) + { + $done = true; + $v = $this->template_options['ppage'][$tag.'->'.$test]; + } + } + } + $ret .= $this->template_options['ppage'][$tag.'->'.$n].' = "'.$v.'"'; + } else + { + if (!isset($this->template_options['ppage'][$tag.'!'.$n])) + { + if (isset($this->template_options['ppage']['$attr$'.$n])) + $ret .= $this->template_options['ppage']['$attr$'.$n].' = "'.$v.'"'; + else + $ret .= $n.' = "'.$v.'"'; + } + } + } + return $ret; + } + + /** + * Convert the title of a Tutorial docbook tag section + * to a string based on the template options.ini + * @param string tag name + * @param array + * @param string title text + * @param string + * @return string + */ + function ConvertTitle($tag,$attr,$title,$cdata) + { + if (!isset($this->template_options[$tag.'_title'])) return array($attr,$cdata); + if (isset($this->template_options[$tag.'_title']['tag_attr'])) + { + $attr[$this->template_options[$tag.'_title']['tag_attr']] = urlencode($cdata); + $cdata = ''; + } elseif(isset($this->template_options[$tag.'_title']['cdata_start'])) + { + $cdata = $this->template_options[$tag.'_title']['open'] . $title . + $this->template_options[$tag.'_title']['close'] . $cdata; + } else $cdata = $title.$cdata; + return array($attr,$cdata); + } + + /** + * Return a converter-specific id to distinguish tutorials and their + * sections + * + * Used by {@}id} + * @return string + */ + function getTutorialId($package,$subpackage,$tutorial,$id) + { + return $package.$subpackage.$tutorial.$id; + } + + /** + * Create the {@link $elements, $pkg_elements} and {@link $links} arrays + * @access private + * @todo version 2.0 - faulty package_output logic should be removed + * + * in this version, if the parent file isn't in the package, all + * the procedural elements are simply shunted to another package! + */ + function _createPkgElements(&$pages) + { + if (empty($this->elements)) + { + $this->elements = array(); + $this->pkg_elements = array(); + $this->links = array(); + phpDocumentor_out('Building indexes...'); + flush(); + foreach($pages as $j => $flub) + { + $this->package = $pages[$j]->parent->package; + $this->subpackage = $pages[$j]->parent->subpackage; + $this->class = false; + $this->curfile = $pages[$j]->parent->getFile(); + $this->curname = $this->getPageName($pages[$j]->parent); + $this->curpath = $pages[$j]->parent->getPath(); + $use = true; + if ($this->package_output) + { + if (in_array($this->package,$this->package_output)) + { + $this->addElement($pages[$j]->parent,$pages[$j]); + } else + { + if (count($pages[$j]->classelements)) + { + list(,$pages[$j]->parent->package) = each($this->package_output); + reset($this->package_output); + $pages[$j]->parent->subpackage = ''; + $this->addElement($pages[$j]->parent,$pages[$j]); + } else + { + unset($pages[$j]); + continue; + } + } + } else + { + $this->addElement($pages[$j]->parent,$pages[$j]); + } + if ($use) + for($i=0; $i<count($pages[$j]->elements); $i++) + { + $pages[$j]->elements[$i]->docblock->package = $this->package; + $pages[$j]->elements[$i]->docblock->subpackage = $this->subpackage; + $this->proceduralpages->replaceElement($pages[$j]->elements[$i]); + $this->addElement($pages[$j]->elements[$i]); + } + for($i=0; $i<count($pages[$j]->classelements); $i++) + { + if ($this->class) + { + if ($pages[$j]->classelements[$i]->type == 'class') + { + if ($this->checkKillClass($pages[$j]->classelements[$i]->getName(),$pages[$j]->classelements[$i]->getPath())) continue; + $this->package = $pages[$j]->classelements[$i]->docblock->package; + if ($this->package_output) if (!in_array($this->package,$this->package_output)) continue; + $this->subpackage = $pages[$j]->classelements[$i]->docblock->subpackage; + $this->class = $pages[$j]->classelements[$i]->name; + } else + { + if ($this->killclass) continue; + // force all contained elements to have parent package/subpackage + $pages[$j]->classelements[$i]->docblock->package = $this->package; + $pages[$j]->classelements[$i]->docblock->subpackage = $this->subpackage; + } + } + if ($pages[$j]->classelements[$i]->type == 'class') + { + if ($this->checkKillClass($pages[$j]->classelements[$i]->getName(),$pages[$j]->classelements[$i]->getPath())) continue; + $this->package = $pages[$j]->classelements[$i]->docblock->package; + if ($this->package_output) if (!in_array($this->package,$this->package_output)) continue; + $this->subpackage = $pages[$j]->classelements[$i]->docblock->subpackage; + $this->class = $pages[$j]->classelements[$i]->name; + } + if (!$this->killclass) $this->addElement($pages[$j]->classelements[$i]); + } + } + phpDocumentor_out("done\n"); + flush(); + } + $this->sortIndexes(); + $this->sortTodos(); + if ($this->sort_page_contents_by_type) $this->sortPageContentsByElementType($pages); + } + + /** + * Process the {@link $tutorials} array + * + * Using the tutorialname.ext.ini files, this method sets up tutorial + * hierarchy. There is some minimal error checking to make sure that no + * tutorial links to itself, even two levels deep as in tute->next->tute. + * + * If all tests pass, it creates the hierarchy + * @uses generateTutorialOrder() + * @uses _setupTutorialTree() + * @access private + */ + function _processTutorials() + { + $parents = $all = array(); + foreach($this->tutorials as $package => $els) + { + if ($this->package_output) + { + if (!in_array($package,$this->package_output)) + { + unset($this->tutorials[$package]); + continue; + } + } + if (!isset($this->pkg_elements[$package])) + { + unset($this->tutorials[$package]); + continue; + } + foreach($els as $subpackage => $els2) + { + foreach($els2 as $type => $tutorials) + { + foreach($tutorials as $tutorial) + { + if ($tutorial->ini) + { + if (isset($tutorial->ini['Linked Tutorials'])) + { + foreach($tutorial->ini['Linked Tutorials'] as $child) + { + $sub = (empty($tutorial->subpackage) ? '' : $tutorial->subpackage . '/'); + $kid = $tutorial->package . '/' . $sub . $child . '.' . $tutorial->tutorial_type; + // parent includes self as a linked tutorial? + $kidlink = $this->getTutorialLink($kid,false,false,array($tutorial->package)); + if (is_object($kidlink) && $this->returnSee($kidlink) == $tutorial->getLink($this)) + { // bad! + addErrorDie(PDERROR_TUTORIAL_IS_OWN_CHILD,$tutorial->name,$tutorial->name.'.ini'); + } + } + $parents[] = $tutorial; + } + } + $all[$package][$subpackage][$type][] = $tutorial; + } + } + } + } + // loop error-checking, use this to eliminate possibility of accidentally linking to a parent as a child + $testlinks = array(); + foreach($parents as $parent) + { + $testlinks[$parent->name]['links'][] = $parent->getLink($this); + $testlinks[$parent->name]['name'][$parent->getLink($this)] = $parent->name; + } + // generate the order of tutorials, and link them together + foreach($parents as $parent) + { + foreach($parent->ini['Linked Tutorials'] as $child) + { + $sub = (empty($parent->subpackage) ? '' : $parent->subpackage . '/'); + $kid = $parent->package . '/' . $sub . $child . '.' . $parent->tutorial_type; + // child tutorials must be in the same package AND subpackage + // AND have the same extension as the parent, makes things clearer for both ends + if (in_array($this->returnSee($this->getTutorialLink($kid,false,false,array($parent->package))),$testlinks[$parent->name]['links'])) + addErrorDie(PDERROR_TUTORIAL_IS_OWN_GRANDPA,$testlinks[$parent->name][$this->returnSee($this->getTutorialLink($kid,false,false,array($parent->package)))],$kid->name,$testlinks[$parent->name][$this->returnSee($this->getTutorialLink($kid,false,false,array($parent->package)))],$kid->name.'.ini'); + if ($this->returnSee($this->getTutorialLink($kid,false,false,array($parent->package))) == $kid) + { + addWarning(PDERROR_CHILD_TUTORIAL_NOT_FOUND, $child . '.' . $parent->tutorial_type, $parent->name .'.ini',$parent->package, $parent->subpackage); + } + } + } + $new = $tree = $roots = array(); + // build a list of all 'root' tutorials (tutorials without parents). + foreach($parents as $i => $parent) + { + if (! $parent->isChildOf($parents)) { + $roots[] = $parent; + } + } + $parents = $roots; + // add the parents and all child tutorials in order to the list of tutorials to process + foreach($parents as $parent) + { + $this->generateTutorialOrder($parent,$all,$new); + } + if (count($all)) + { + // add the leftover tutorials + foreach($all as $package => $els) + { + foreach($els as $subpackage => $els2) + { + foreach($els2 as $type => $tutorials) + { + foreach($tutorials as $tutorial) + { + $new[$package][$subpackage][$type][] = $tutorial; + } + } + } + } + } + // remove the old, unprocessed tutorials, and set it up with the next code + $this->tutorials = array(); + // reset integrity of the tutorial list + $prev = false; + uksort($new, 'tutorialcmp'); +// debug($this->vardump_tree($new));exit; + foreach($new as $package => $els) + { + foreach($els as $subpackage => $els2) + { + foreach($els2 as $type => $tutorials) + { + foreach($tutorials as $tutorial) + { + if ($prev) + { + $this->tutorials[$prevpackage][$prevsubpackage][$prevtype][$prevname]->setNext($tutorial,$this); + $tutorial->setPrev($prev,$this); + } + $this->tutorials[$package][$subpackage][$type][$tutorial->name] = $tutorial; + $prev = $tutorial->getLink($this,true); + $prevpackage = $package; + $prevsubpackage = $subpackage; + $prevtype = $type; + $prevname = $tutorial->name; + } + } + } + } + $this->tutorial_tree = $this->_setupTutorialTree(); + return $new; + } + + /** + * called by {@link phpDocumentor_IntermediateParser::Convert()} to traverse + * the array of pages and their elements, converting them to the output format + * + * The walk() method should be flexible enough such that it never needs + * modification. walk() sets up all of the indexes, and sorts everything in + * logical alphabetical order. It then passes each element individually to + * {@link Convert()}, which then passes to the Convert*() methods. A child + * Converter need not override any of these unless special functionality must + * be added. see {@tutorial Converters/template.vars.cls} for details. + * {@internal + * walk() first creates all of the indexes {@link $elements, $pkg_elements} + * and the left indexes specified by {@link $leftindexes}, + * and then sorts them by calling {@link sortIndexes()}. + * + * Next, it converts all README/CHANGELOG/INSTALL-style files, using + * {@link Convert_RIC}. + * + * After this, it + * passes all package-level docs to Convert(). Then, it calls the index + * sorting functions {@link formatPkgIndex(), formatIndex()} and + * {@link formatLeftIndex()}. + * + * Finally, it converts each procedural page in alphabetical order. This + * stage passes elements from the physical file to Convert() in alphabetical + * order. First, procedural page elements {@link parserDefine, parserInclude} + * {@link parserGlobal}, and {@link parserFunction} are passed to Convert(). + * + * Then, class elements are passed in this order: {@link parserClass}, then + * all of the {@link parserVar}s in the class and all of the + * {@link parserMethod}s in the class. Classes are in alphabetical order, + * and both vars and methods are in alphabetical order. + * + * Finally, {@link ConvertErrorLog()} is called and the data walk is complete.}} + * @param array Format: array(fullpath => {@link parserData} structure with full {@link parserData::$elements} + * and {@link parserData::$class_elements}. + * @param array Format: array({@link parserPackagePage} 1, {@link parserPackagePage} 2,...) + * @uses Converter::_createPkgElements() sets up {@link $elements} and + * {@link $pkg_elements} array, as well as {@link $links} + */ + function walk(&$pages,&$package_pages) + { + if (empty($pages)) + { + die("<b>ERROR</b>: nothing parsed"); + } + $this->_createPkgElements($pages); + if (count($this->ric)) + { + phpDocumentor_out("Converting README/INSTALL/CHANGELOG contents...\n"); + flush(); + foreach($this->ric as $name => $contents) + { + phpDocumentor_out("$name..."); + flush(); + $this->Convert_RIC($name,$contents); + } + phpDocumentor_out("\ndone\n"); + flush(); + } + foreach($package_pages as $i => $perp) + { + if ($this->package_output) + { + if (!in_array($package_pages[$i]->package,$this->package_output)) continue; + } + phpDocumentor_out('Converting package page for package '.$package_pages[$i]->package.'... '); + flush(); + $this->package = $package_pages[$i]->package; + $this->subpackage = ''; + $this->class = false; + $this->Convert($package_pages[$i]); + phpDocumentor_out("done\n"); + flush(); + } + phpDocumentor_out("Converting tutorials/extended docs\n"); + flush(); + // get tutorials into the order they will display, and set next/prev links + $new = $this->_processTutorials(); + foreach($this->tutorials as $package => $els) + { + foreach($els as $subpackage => $els2) + { + foreach($els2 as $type => $tutorials) + { + foreach($tutorials as $tutorial) + { + switch ($type) + { + case 'pkg' : + $a = ''; + if ($tutorial->ini) + $a .= 'Top-level '; + if (!empty($tutorial->subpackage)) + $a .= 'Sub-'; + $ptext = "Converting ${a}Package-level tutorial ".$tutorial->name.'...'; + break; + case 'cls' : + $a = ''; + if ($tutorial->ini) + $a .= 'Top-level '; + $ptext = "Converting ${a}Class-level tutorial " . $tutorial->name ." and associating..."; + $link = Converter::getClassLink(str_replace('.cls','',$tutorial->name), $tutorial->package); + if (is_object($link)) + { + if ($this->sort_absolutely_everything) + { + $addend = 'unsuccessful '; + if (isset($this->package_elements[$tutorial->package][$tutorial->subpackage]['class'][$link->name])) + { + $this->package_elements[$tutorial->package][$tutorial->subpackage]['class'][$link->name][0]->addTutorial($tutorial,$this); + $addend = 'success '; + } + } else + { + $addend = 'unsuccessful '; + if (!isset($this->classes->killclass[str_replace('.cls','',$tutorial->name)]) && !isset($this->classes->killclass[str_replace('.cls','',$tutorial->name)][$tutorial->path])) + { + foreach($pages as $j => $inf) + { + foreach($inf->classelements as $i => $class) + { + if ($class->type == 'class' && $class->name == str_replace('.cls','',$tutorial->name) && $class->path == $link->path) + { + $pages[$j]->classelements[$i]->addTutorial($tutorial,$this); + $addend = 'success '; + } + } + } + } + } + $ptext .= $addend; + } else $ptext .= "unsuccessful "; + break; + case 'proc' : + $a = ''; + if ($tutorial->ini) + $a .= 'Top-level '; + $ptext = "Converting ${a}Procedural-level tutorial ".$tutorial->name." and associating..."; + $link = Converter::getPageLink(str_replace('.proc','',$tutorial->name), $tutorial->package); + if (is_object($link)) + { + $addend = 'unsuccessful '; + if ($this->sort_absolutely_everything) + { + if (isset($this->package_elements[$tutorial->package][$tutorial->subpackage]['page'][$link->path])) + { + $this->package_elements[$tutorial->package][$tutorial->subpackage]['page'][$link->path][0]->addTutorial($tutorial,$this); + $addend = "success "; + } + } else + { + foreach($pages as $j => $info) + { + if ($j == $link->path) + { + $pages[$j]->addTutorial($tutorial,$this); + $addend = "success "; + } + } + } + $ptext .= $addend; + } else $ptext .= "unsuccessful "; + break; + } + phpDocumentor_out($ptext); + flush(); + $this->package = $tutorial->package; + $this->subpackage = $tutorial->subpackage; + $this->Convert($tutorial); + phpDocumentor_out("done\n"); + flush(); + } + } + } + } + phpDocumentor_out("Formatting Package Indexes..."); + flush(); + $this->formatPkgIndex(); + phpDocumentor_out("done\n"); + flush(); + phpDocumentor_out("Formatting Index..."); + flush(); + $this->formatIndex(); + phpDocumentor_out("done\n\n"); + flush(); + phpDocumentor_out("Formatting Left Quick Index..."); + flush(); + $this->formatLeftIndex(); + phpDocumentor_out("done\n\n"); + flush(); + if ($this->sort_absolutely_everything) return $this->walk_everything(); + foreach($pages as $j => $flub) + { + phpDocumentor_out('Converting '.$pages[$j]->parent->getPath()); + flush(); + $this->package = $pages[$j]->parent->package; + $this->subpackage = $pages[$j]->parent->subpackage; + $this->class = false; + $this->curfile = $pages[$j]->parent->getFile(); + $this->curname = $this->getPageName($pages[$j]->parent); + $this->curpath = $pages[$j]->parent->getPath(); + $use = true; + if ($this->package_output) + { + if (in_array($this->package,$this->package_output)) + { + $this->Convert($pages[$j]); + } else + { + $use = false; + } + } else + { + $this->Convert($pages[$j]); + } + phpDocumentor_out(" Procedural Page Elements..."); + flush(); + if ($use) + for($i=0; $i<count($pages[$j]->elements); $i++) + { + $a = $pages[$j]->elements[$i]->docblock->getKeyword('access'); + if (is_object($a)) $a = $a->getString(); + if (!$this->parseprivate && ($a == 'private')) + continue; +// phpDocumentor_out(" ".$pages[$j]->elements[$i]->name."\n"); + $pages[$j]->elements[$i]->docblock->package = $this->package; + $pages[$j]->elements[$i]->docblock->subpackage = $this->subpackage; + $this->Convert($pages[$j]->elements[$i]); + } + phpDocumentor_out(" Classes..."); + $this->class = false; + flush(); + for($i=0; $i<count($pages[$j]->classelements); $i++) + { + if ($this->class) + { + if ($pages[$j]->classelements[$i]->type == 'class') + { + if (!$this->killclass) $this->endClass(); + $this->killclass = false; + if ($this->checkKillClass($pages[$j]->classelements[$i]->getName(),$pages[$j]->classelements[$i]->getPath())) continue; + $this->package = $pages[$j]->classelements[$i]->docblock->package; + if ($this->package_output) if (!in_array($this->package,$this->package_output)) continue; + $this->subpackage = $pages[$j]->classelements[$i]->docblock->subpackage; + $this->class = $pages[$j]->classelements[$i]->name; + } else + { + $a = $pages[$j]->classelements[$i]->docblock->getKeyword('access'); + if (is_object($a)) $a = $a->getString(); + if (!$this->parseprivate && ($a == 'private')) + continue; + if ($this->killclass) continue; + // force all contained elements to have parent package/subpackage + $pages[$j]->classelements[$i]->docblock->package = $this->package; + $pages[$j]->classelements[$i]->docblock->subpackage = $this->subpackage; + } + } + if ($pages[$j]->classelements[$i]->type == 'class') + { + $this->killclass = false; + if ($this->checkKillClass($pages[$j]->classelements[$i]->getName(),$pages[$j]->classelements[$i]->getPath())) continue; + $this->package = $pages[$j]->classelements[$i]->docblock->package; + if ($this->package_output) if (!in_array($this->package,$this->package_output)) continue; + $this->subpackage = $pages[$j]->classelements[$i]->docblock->subpackage; + $this->class = $pages[$j]->classelements[$i]->name; + } + if ($this->killclass) continue; +// phpDocumentor_out(" ".$pages[$j]->classelements[$i]->name."\n"); + $this->Convert($pages[$j]->classelements[$i]); + } + if (count($pages[$j]->classelements) && !$this->killclass) $this->endClass(); + phpDocumentor_out(" done\n"); + flush(); + $this->endPage(); + } + phpDocumentor_out("\nConverting @todo List..."); + flush(); + if (count($this->todoList)) + { + $this->ConvertTodoList(); + } + phpDocumentor_out("done\n"); + flush(); + phpDocumentor_out("\nConverting Error Log..."); + flush(); + $this->ConvertErrorLog(); + phpDocumentor_out("done\n"); + flush(); + } + + + /** + * Get a tree structure representing the hierarchy of tutorials + * + * Returns an array in format: + * <pre> + * array('tutorial' => {@link parserTutorial}, + * 'kids' => array( // child tutorials + * array('tutorial' => child {@link parserTutorial}, + * 'kids' => array(...) + * ) + * ) + * ) + * </pre> + * @param parserTutorial|array + * @tutorial tutorials.pkg + * @return array + */ + function getTutorialTree($tutorial) + { + if (is_object($tutorial)) + { + $path = $this->_tutorial_path($tutorial,$tutorial,$tutorial); + if (isset($this->tutorial_tree[$path])) { + $tutorial = $this->tutorial_tree[$path]; + } else { + return false; + } + } + $tree = array(); + if (isset($tutorial['tutorial'])) + { + $tree['tutorial'] = $tutorial['tutorial']; + if (isset($tutorial['child'])) + { + foreach($tutorial['child'] as $a => $b) + { + $btut = $b['tutorial']; + $res = array( + 'tutorial' => $this->tutorials + [$btut->package][$btut->subpackage] + [$btut->tutorial_type][$btut->name] + ); + if (isset($b['child'])) + { + $tempres = Converter::getTutorialTree($b); + $res['kids'] = $tempres['kids']; + } + $tree['kids'][] = $res; + } + } + } + return $tree; + } + + /** + * Remove tutorials one by one from $all, and transfer them into $new in the + * order they should be parsed + * @param parserTutorial + * @param array + * @param array + * @access private + */ + function generateTutorialOrder($parent,&$all,&$new) + { + // remove from the list of tutorials to process + foreach($all[$parent->package][$parent->subpackage][$parent->tutorial_type] as $ind => $t) + { + if ($t->name == $parent->name) { + unset($all[$parent->package][$parent->subpackage][$parent->tutorial_type][$ind]); + } + } + // add to the new ordered list of tutorials + $x = &$new[$parent->package][$parent->subpackage][$parent->tutorial_type]; + if (!is_object($x[count($x) - 1]) || $x[count($x) - 1]->name != $parent->name) + { // only add if the parent isn't also a child + $new[$parent->package][$parent->subpackage][$parent->tutorial_type][] = $parent; + // add a new branch to the tree + } + // process all child tutorials, and insert them in order +// debug("processing parent ".$parent->name); + if ($parent->ini) + { + foreach($parent->ini['Linked Tutorials'] as $child) + { + $sub = (empty($parent->subpackage) ? '' : $parent->subpackage . '/'); + $kid = $parent->package . '/' . $sub . $child . '.' . $parent->tutorial_type; + $_klink = $this->getTutorialLink($kid,false,false,array($parent->package)); + if (is_object($_klink)) { + $klink = $this->returnSee($_klink); + } else { + $klink = false; + } + // remove the child from the list of remaining tutorials + foreach($all[$parent->package][$parent->subpackage][$parent->tutorial_type] as $ind => $tute) + { + if ($klink && $tute->getLink($this) == $klink) + { + // set up parent, next and prev links + $tute->setParent($parent, $this); + // remove the child from the list of tutorials to process + foreach($all[$parent->package][$parent->subpackage][$parent->tutorial_type] as $ind => $t) + { + if ($t->name == $tute->name) + unset($all[$parent->package][$parent->subpackage][$parent->tutorial_type][$ind]); + } + // add to the new ordered list of tutorials + $new[$parent->package][$parent->subpackage][$parent->tutorial_type][] = $tute; + if ($tute->ini) + { + // add all the child's child tutorials to the list + $this->generateTutorialOrder($tute,$all,$new); + } + } + } + } + } + return; + } + + /** Returns the path to this tutorial as a string + * @param parserTutorial $pkg + * @param parserTutorial $subpkg + * @param parserTutorial $namepkg + * @return string */ + function _tutorial_path($pkg, $subpkg = 0, $namepkg = 0) + { + if (!$subpkg) { + $subpkg = $pkg; + } + if (!$namepkg) { + $namepkg = $pkg; + } + $subpackagename = ($subpkg->subpackage ? '/' . $subpkg->subpackage : ''); + return $pkg->package . $subpackagename . '/' . $namepkg->name; + } + + + /** + * Creates a tree structure of tutorials + * + * Format: + * <pre> + * array('package/subpackage/tutorial1.ext' => + * array('tutorial' => {@link parserTutorial}, + * 'child' => + * array('package/subpackage/child1tutorial.ext' => ..., + * 'package/subpackage/child2tutorial.ext' => ..., + * ... + * ) + * 'package/subpackage/tutorial2.ext' => ..., + * ... + * ) + * </pre> + * @return array the tutorial tree + * @access private + */ + function _setupTutorialTree($parent = false) + { + if (! isset($this->processed_tutorials)) { + $this->processed_tutorials = array(); + } + $tree = array(); + if (!$parent) + { + foreach($this->tutorials as $package => $s) + { + foreach($s as $subpackage => $t) + { + foreach($t as $type => $n) + { + foreach($n as $name => $tutorial) + { + if ($tutorial->parent) { + continue; + } + + $child_path = $this->_tutorial_path($tutorial,$tutorial,$tutorial); + if (isset($this->processed_tutorials[$child_path])) { + continue; + } + $this->processed_tutorials[$child_path] = $tutorial; + //debug("parent ".$tutorial->name); + $ret = $this->_setupTutorialTree($tutorial); + if (!count($tree)) { + $tree = $ret; + } else { + $tree = array_merge($tree,$ret); + } + } + } + } + } + return $tree; + } + $parent_path = $this->_tutorial_path($parent); + $tree[$parent_path]['tutorial'] = $parent; + // process all child tutorials, and insert them in order + if ($parent->ini) + { + foreach($parent->ini['Linked Tutorials'] as $child) + { + if (isset($this->tutorials[$parent->package][$parent->subpackage] + [$parent->tutorial_type][$child . '.' . + $parent->tutorial_type])) { + // remove the child from the list of remaining tutorials + $tute = $this->tutorials[$parent->package][$parent->subpackage] + [$parent->tutorial_type][$child . '.' . + $parent->tutorial_type]; + } else { + $tute = false; + } + + if (!$tute) { + continue; + } + $child_path = $this->_tutorial_path($parent,$parent,$tute); + if (isset($this->processed_tutorials[$child_path])) { + continue; + } + $this->processed_tutorials[$child_path] = $tute; + if ($tute->name != $child . '.' . $parent->tutorial_type) { + continue; + } + //echo "Adding [$child_path] to [$parent_path]<br>"; + $tree[$parent_path]['child'][$this->_tutorial_path($parent,$parent,$tute)]['tutorial'] + = $tute; + if (!$tute->ini) { + continue; + } + // add all the child's child tutorials to the list + if (!isset($tree[$parent_path]['child'])) { + $tree[$parent_path]['child'] = $this->_setupTutorialTree($tute); + } else { + $tree[$parent_path]['child'] = array_merge($tree[$parent_path]['child'], + $this->_setupTutorialTree($tute)); + } + } + } + return $tree; + } + + /** + * Debugging function for dumping {@link $tutorial_tree} + * @return string + */ + function vardump_tree($tree,$indent='') + { + if (phpDocumentor_get_class($tree) == 'parsertutorial') return $tree->name.' extends '.($tree->parent? $tree->parent->name : 'nothing'); + $a = ''; + foreach($tree as $ind => $stuff) + { + $x = $this->vardump_tree($stuff,"$indent "); + $a .= $indent.'['.$ind." => \n ".$indent.$x."]\n"; + } + return substr($a,0,strlen($a) - 1); + } + + /** + * @access private + */ + function sort_package_elements($a,$b) + { + if (($a->type == $b->type) && (isset($a->isConstructor) && $a->isConstructor)) return -1; + if (($a->type == $b->type) && (isset($b->isConstructor) && $b->isConstructor)) return 1; + if ($a->type == $b->type) return strnatcasecmp($a->name,$b->name); + if ($a->type == 'class') return -1; + if ($b->type == 'class') return 1; + if ($a->type == 'const') return -1; + if ($b->type == 'const') return 1; + if ($a->type == 'var') return -1; + if ($b->type == 'var') return 1; + if ($a->type == 'page') return -1; + if ($b->type == 'page') return 1; + if ($a->type == 'include') return -1; + if ($b->type == 'include') return 1; + if ($a->type == 'define') return -1; + if ($b->type == 'define') return 1; + if ($a->type == 'global') return -1; + if ($b->type == 'global') return 1; + if ($a->type == 'function') return -1; + if ($b->type == 'function') return 1; + } + + /** + * @access private + */ + function defpackagesort($a,$b) + { + if ($a == $GLOBALS['phpDocumentor_DefaultPackageName']) return -1; + if ($b == $GLOBALS['phpDocumentor_DefaultPackageName']) return 0; + return strnatcasecmp($a,$b); + } + + /** + * @access private + */ + function Pc_sort($a,$b) + { + return strnatcasecmp(key($a),key($b)); + } + + /** + * walk over elements by package rather than page + * + * This method is designed for converters like the PDF converter that need + * everything passed in alphabetical order by package/subpackage and by + * procedural and then class information + * @see PDFdefaultConverter + * @see walk() + */ + function walk_everything() + { + global $hooser; + $hooser = false; + uksort($this->package_elements,array($this,'defpackagesort')); + foreach($this->package_elements as $package => $r) + { + if ($this->package_output) + { + if (!in_array($this->package,$this->package_output)) + { + unset($this->package_elements[$package]); + continue; + } + } + uksort($this->package_elements[$package],'strnatcasecmp'); + } + foreach($this->package_elements as $package => $r) + { + foreach($this->package_elements[$package] as $subpackage => $r) + { + if (isset($r['page'])) + { + uksort($r['page'],'strnatcasecmp'); + foreach($r['page'] as $page => $oo) + { + usort($this->package_elements[$package][$subpackage]['page'][$page],array($this,'sort_package_elements')); + } + } + if (isset($r['class'])) + { + uksort($r['class'],'strnatcasecmp'); + foreach($r['class'] as $page => $oo) + { + usort($r['class'][$page],array($this,'sort_package_elements')); + } + } + $this->package_elements[$package][$subpackage] = $r; + } + } + foreach($this->package_elements as $package => $s) + { + $notyet = false; + foreach($s as $subpackage => $r) + { + $this->package = $package; + $this->subpackage = $subpackage; + if (isset($r['page'])) + { + $this->class = false; + foreach($r['page'] as $page => $elements) + { + if (is_array($elements)) + { + foreach($elements as $element) + { + if ($element->type == 'page') + { + phpDocumentor_out('Converting '.$element->parent->getPath()); + flush(); + $this->curfile = $element->parent->getFile(); + $this->curname = $this->getPageName($element->parent); + $this->curpath = $element->parent->getPath(); + $notyet = true; + } else + { + // force all contained elements to have parent package/subpackage + $element->docblock->package = $this->package; + $element->docblock->subpackage = $this->subpackage; + $a = $element->docblock->getKeyword('access'); + if (is_object($a)) $a = $a->getString(); + if (!$this->parseprivate && ($a == 'private')) + continue; + } + if ($notyet) + { + phpDocumentor_out(" Procedural Page Elements..."); + flush(); + $notyet = false; + } + $this->Convert($element); + } + } + $this->endPage(); + phpDocumentor_out("done\n"); + flush(); + } + } + $start_classes = true; + if (isset($r['class'])) + { + foreach($r['class'] as $class => $elements) + { + foreach($elements as $element) + { + if ($element->type == 'class') + { + if (!$start_classes) + { + if (count($elements) && !$this->killclass) $this->endClass(); + phpDocumentor_out("done\n"); + flush(); + } + $start_classes = false; + $this->class = $element->getName(); + $this->killclass = false; + if ($this->checkKillClass($element->getName(),$element->getPath())) continue; + if (!$this->killclass) + { + phpDocumentor_out('Converting '.$this->class."..."); + flush(); + $notyet = true; + } + } else + { + if ($notyet) + { + phpDocumentor_out("Variables/methods/Class constants...\n"); + flush(); + $notyet = false; + } + $a = $element->docblock->getKeyword('access'); + if (is_object($a)) $a = $a->getString(); + if (!$this->parseprivate && ($a == 'private')) + continue; + if ($this->killclass) continue; + // force all contained elements to have parent package/subpackage + $element->docblock->package = $this->package; + $element->docblock->subpackage = $this->subpackage; + } + if ($this->killclass) continue; + $this->Convert($element); + } + } + if (count($elements) && !$this->killclass) $this->endClass(); + phpDocumentor_out("done\n"); + flush(); + } // if isset($r['class']) + } // foreach($s + } // foreach($this->package_elements) + phpDocumentor_out("\nConverting @todo List..."); + flush(); + if (count($this->todoList)) + { + $this->ConvertTodoList(); + } + phpDocumentor_out("done\n"); + flush(); + phpDocumentor_out("\nConverting Error Log..."); + flush(); + $this->ConvertErrorLog(); + phpDocumentor_out("done\n"); + flush(); + } + + /** + * Convert the phpDocumentor parsing/conversion error log + * @abstract + */ + function ConvertErrorLog() + { + } + + /** + * Convert the list of all @todo tags + * @abstract + */ + function ConvertTodoList() + { + } + + /** + * Sorts the @todo list - do not override or modify this function + * @access private + * @uses _sortTodos passed to {@link usort()} to sort the todo list + */ + function sortTodos() + { + phpDocumentor_out("\nSorting @todo list..."); + flush(); + foreach($this->todoList as $package => $r) { + usort($this->todoList[$package], array('Converter', '_sortTodoPackage')); + foreach ($r as $a => $sub) { + if (is_array($this->todoList[$package][$a][1])) { + usort($this->todoList[$package][$a][1],array('Converter', '_sortTodos')); + } + } + } + phpDocumentor_out("done\n"); + } + + /** @access private */ + function _sortTodoPackage($a, $b) + { + return strnatcasecmp($a[0]->name, $b[0]->name); + } + + /** @access private */ + function _sortTodos($a, $b) + { + if (!is_object($a)) { + var_dump($a); + } + return strnatcasecmp($a->getString(), $b->getString()); + } + + /** + * Sorts all indexes - do not override or modify this function + * @uses $leftindex based on the value of leftindex, sorts link arrays + * @uses $class_elements sorts with {@link compareLink} + * @uses $page_elements sorts with {@link compareLink} + * @uses $define_elements sorts with {@link compareLink} + * @uses $global_elements sorts with {@link compareLink} + * @uses $function_elements sorts with {@link compareLink} + * @uses $elements sorts with {@link elementCmp} + * @uses $pkg_elements sorts with {@link elementCmp} after sorting by + * package/subpackage alphabetically + * @access private + */ + function sortIndexes() + { + phpDocumentor_out("\nSorting Indexes..."); + flush(); + uksort($this->elements,'strnatcasecmp'); + if ($this->leftindex['classes']) + { + foreach($this->class_elements as $package => $o1) + { + foreach($o1 as $subpackage => $links) + { + usort($this->class_elements[$package][$subpackage],array($this,'compareLink')); + } + } + } + if ($this->leftindex['pages']) + { + foreach($this->page_elements as $package => $o1) + { + uksort($this->page_elements[$package],'strnatcasecmp'); + foreach($o1 as $subpackage => $links) + { + usort($this->page_elements[$package][$subpackage],array($this,'compareLink')); + } + } + } + if ($this->leftindex['defines']) + { + foreach($this->define_elements as $package => $o1) + { + uksort($this->define_elements[$package],'strnatcasecmp'); + foreach($o1 as $subpackage => $links) + { + usort($this->define_elements[$package][$subpackage],array($this,'compareLink')); + } + } + } + if ($this->leftindex['globals']) + { + foreach($this->global_elements as $package => $o1) + { + uksort($this->global_elements[$package],'strnatcasecmp'); + foreach($o1 as $subpackage => $links) + { + usort($this->global_elements[$package][$subpackage],array($this,'compareLink')); + } + } + } + if ($this->leftindex['functions']) + { + foreach($this->function_elements as $package => $o1) + { + uksort($this->function_elements[$package],'strnatcasecmp'); + foreach($o1 as $subpackage => $links) + { + usort($this->function_elements[$package][$subpackage],array($this,'compareLink')); + } + } + } + foreach($this->elements as $letter => $nothuing) + { + uasort($this->elements[$letter],array($this,"elementCmp")); + } + foreach($this->pkg_elements as $package => $els) + { + uksort($this->pkg_elements[$package],'strnatcasecmp'); + foreach($this->pkg_elements[$package] as $subpackage => $els) + { + if (empty($els)) continue; + uksort($this->pkg_elements[$package][$subpackage],'strnatcasecmp'); + foreach($els as $letter => $yuh) + { + usort($this->pkg_elements[$package][$subpackage][$letter],array($this,"elementCmp")); + } + } + } + phpDocumentor_out("done\n"); + flush(); + } + + /** + * sorts {@link $page_contents} by element type as well as alphabetically + * @see $sort_page_contents_by_element_type + */ + function sortPageContentsByElementType(&$pages) + { + foreach($this->page_contents as $package => $els) + { + foreach($this->page_contents[$package] as $subpackage => $els) + { + if (empty($els)) continue; + foreach($this->page_contents[$package][$subpackage] as $path => $stuff) + { + if (!count($pages[$path]->elements)) continue; + usort($pages[$path]->elements,array($this,'eltypecmp')); + usort($this->page_contents[$package][$subpackage][$path],array($this,'eltypecmp')); + if (isset($this->page_contents[$package][$subpackage][$path][0])) + $this->page_contents[$package][$subpackage][$path]['###main'] = $this->page_contents[$package][$subpackage][$path][0]; + unset($this->page_contents[$package][$subpackage][$path][0]); + } + } + } + } + + /** + * @access private + * @see Converter::sortIndexes() + */ + function compareLink($a, $b) + { + return strnatcasecmp($a->name,$b->name); + } + + /** + * @access private + * @see Converter::sortPageContentsByElementType() + */ + function eltypecmp($a, $b) + { + if ($a->type == 'page') return -1; + if ($b->type == 'page') return 1; + return strnatcasecmp($a->type.$a->name,$b->type.$b->name); + } + + /** + * does a nat case sort on the specified second level value of the array + * + * @param mixed $a + * @param mixed $b + * @return int + * @access private + */ + function elementCmp ($a, $b) + { + return strnatcasecmp($a->getName(), $b->getName()); + } + + /** + * Used to stop conversion of @ignored or private @access classes + * @uses $killclass sets killclass based on the value of {@link Classes::$killclass} + * and {@link $package_output} + * @access private + */ + function checkKillClass($class, $path) + { + $this->killclass = false; + if (isset($this->classes->killclass[$class]) && isset($this->classes->killclass[$class][$path])) $this->killclass = true; + if ($this->package_output) + { + $a = $this->classes->getClass($class, $path); + if (!in_array($a->docblock->package,$this->package_output)) $this->killclass = true; + } + if (PHPDOCUMENTOR_DEBUG && $this->killclass) debug("$class $path killed"); + return $this->killclass; + } + + /** + * @param abstractLink descendant of abstractLink + * @param array|parserTag list of @todos|@todo tag + * @access private + */ + function addTodoLink($link, $todos) + { + $this->todoList[$link->package][] = array($link, $todos); + } + + /** + * Adds all elements to the {@link $elements, $pkg_elements, $links}, + * {@link $linkswithfile} and left indexes - Do not modify or override + * @access private + * @param parserBase any documentable element descendant of parserBase + * except parserTutorial + * @param false|parserPage only used to add a {@link parserPage} if the + * $element passed is a parserPage + * @staticvar string path of current page, used for {@link $page_contents} setup + */ + function addElement(&$element,$pageel=false) + { + static $curpath = ''; + if ($this->package_output) + { + if (!in_array($this->package, $this->package_output)) return; + } + if ($pageel && phpDocumentor_get_class($pageel) == 'parserdata') + { + if (isset($pageel->docblock) && phpDocumentor_get_class($pageel->docblock) == 'parserdocblock') + { + $a = $pageel->docblock->getKeyword('todo'); + if ($a) + { + $this->addTodoLink($this->addLink($element),$a); + } + } + } + if (isset($element->docblock)) + { + $a = $element->docblock->getKeyword('access'); + if (is_object($a)) $a = $a->getString(); + if (!$this->parseprivate && ($a == 'private')) + return; + $a = $element->docblock->getKeyword('todo'); + if ($a) + { + if ($element->type != 'include') { + $this->addTodoLink($this->addLink($element),$a); + } else { + addWarning(PDERROR_NOTODO_INCLUDE, $element->getLineNumber(), + $element->getPath()); + } + } + } + $startPositionOfElementName = 0; // which character of the element name actually starts its textual name + switch($element->type) + { + case 'page' : + if ($this->sort_absolutely_everything) + { + $this->package_elements[$element->package][$element->subpackage]['page'][$element->getPath()][] = $pageel; + } + $link = $this->addLink($element); + $curpath = $element->getPath(); + if ($this->leftindex['pages']) + $this->page_elements[$element->package][$element->subpackage][] = $link; + $this->page_contents[$element->package][$element->subpackage][$curpath]['###main'] = $link; + break; + case 'class' : + if ($this->sort_absolutely_everything) + { + $this->package_elements[$element->docblock->package][$element->docblock->subpackage]['class'][$this->class][] = $element; + } + $link = $this->addLink($element); + if ($this->leftindex['classes']) + $this->class_elements[$element->docblock->package][$element->docblock->subpackage][] = $link; + $this->class_contents[$element->docblock->package][$element->docblock->subpackage][$this->class]['###main'] = $link; + break; + case 'include' : + if ($this->sort_absolutely_everything) + { + $this->package_elements[$element->docblock->package][$element->docblock->subpackage]['page'][$curpath][] = $element; + } + $link = $this->addLink($element); + break; + case 'define' : + if ($this->sort_absolutely_everything) + { + $this->package_elements[$element->docblock->package][$element->docblock->subpackage]['page'][$curpath][] = $element; + } + $link = $this->addLink($element); + if ($this->leftindex['defines']) + $this->define_elements[$element->docblock->package][$element->docblock->subpackage][] = $link; + $this->page_contents[$element->docblock->package][$element->docblock->subpackage][$curpath][] = $link; + break; + case 'global' : + if ($this->sort_absolutely_everything) + { + $this->package_elements[$element->docblock->package][$element->docblock->subpackage]['page'][$curpath][] = $element; + } + $link = $this->addLink($element); + $startPositionOfElementName = 1; // lose the leading "$" character + if ($this->leftindex['globals']) + $this->global_elements[$element->docblock->package][$element->docblock->subpackage][] = $link; + $this->page_contents[$element->docblock->package][$element->docblock->subpackage][$curpath][] = $link; + break; + case 'var' : + if ($this->sort_absolutely_everything) + { + $this->package_elements[$element->docblock->package][$element->docblock->subpackage]['class'][$this->class][] = $element; + } + $link = $this->addLink($element); + $startPositionOfElementName = 1; // lose the leading "$" character + $this->class_contents[$element->docblock->package][$element->docblock->subpackage][$this->class][] = $link; + break; + case 'const' : + if ($this->sort_absolutely_everything) + { + $this->package_elements[$element->docblock->package][$element->docblock->subpackage]['class'][$this->class][] = $element; + } + $link = $this->addLink($element); + $this->class_contents[$element->docblock->package][$element->docblock->subpackage][$this->class][] = $link; + break; + case 'method' : + if ($this->sort_absolutely_everything) + { + $this->package_elements[$element->docblock->package][$element->docblock->subpackage]['class'][$this->class][] = $element; + } + $link = $this->addLink($element); + $this->class_contents[$element->docblock->package][$element->docblock->subpackage][$this->class][] = $link; + break; + case 'function' : + if ($this->sort_absolutely_everything) + { + $this->package_elements[$element->docblock->package][$element->docblock->subpackage]['page'][$curpath][] = $element; + } + $link = $this->addLink($element); + if ($this->leftindex['functions']) + $this->function_elements[$element->docblock->package][$element->docblock->subpackage][] = $link; + $this->page_contents[$element->docblock->package][$element->docblock->subpackage][$curpath][] = $link; + break; + default : + break; + } + if ($element->getType() != 'include') + { + if ($element->getType() == 'var' || $element->getType() == 'method'|| $element->getType() == 'const') + { + $this->links[$this->package][$this->subpackage][$element->getType()][$element->class][$element->getName()] = $link; + $this->linkswithfile[$this->package][$this->subpackage][$element->getType()][$element->getPath()][$element->class][$element->getName()] = $link; + } else + { + if ($element->type == 'page') + { + $this->links[$this->package][$this->subpackage][$element->getType()][$element->getFile()] = $link; + $this->linkswithfile[$this->package][$this->subpackage][$element->getType()][$element->getPath()][$element->getFile()] = $link; + } else + { + $this->links[$this->package][$this->subpackage][$element->getType()][$element->getName()] = $link; + $this->linkswithfile[$this->package][$this->subpackage][$element->getType()][$element->getPath()][$element->getName()] = $link; + } + } + } + if ($element->type == 'page') + { + $this->elements[substr(strtolower($element->getFile()),$startPositionOfElementName,1)][] = $element; + $this->pkg_elements[$this->package][$this->subpackage][substr(strtolower($element->getFile()),$startPositionOfElementName,1)][] = $element; + } else + { + $this->elements[substr(strtolower($element->getName()),$startPositionOfElementName,1)][] = $element; + $this->pkg_elements[$this->package][$this->subpackage][substr(strtolower($element->getName()),$startPositionOfElementName,1)][] = $element; + } + } + + /** + * returns an abstract link to element. Do not modify or override + * + * This method should only be called in process of Conversion, unless + * $element is a parserPage, or $page is set to true, and $element is + * not a parserPage + * @return abstractLink abstractLink descendant + * @access private + * @param parserElement element to add a new link (descended from + * {@link abstractLink})to the {@link $links} array + * @param string classname for elements that are class-based (this may be + * deprecated in the future, as the classname + * should be contained within the element. if $element is a + * page, this parameter is a package name + * @param string subpackage name for page elements + */ + function addLink(&$element,$page = false) + { + if ($page) + { + // create a fake parserPage to extract the fileAlias for this link + $fakepage = new parserPage; + $fakepage->setPath($element->getPath()); + $fakepage->setFile(basename($element->getPath())); + $this->curname = $this->getPageName($fakepage); + } + switch($element->type) + { + case 'function': + $x = new functionLink; + $x->addLink($element->getPath(), $this->curname, $element->name, $element->docblock->package, $element->docblock->subpackage, $element->docblock->category); + return $x; + break; + case 'define': + $x = new defineLink; + $x->addLink($element->getPath(), $this->curname, $element->name, $element->docblock->package, $element->docblock->subpackage, $element->docblock->category); + return $x; + break; + case 'global': + $x = new globalLink; + $x->addLink($element->getPath(), $this->curname, $element->name, $element->docblock->package, $element->docblock->subpackage, $element->docblock->category); + return $x; + break; + case 'class': + $x = new classLink; + $x->addLink($element->getPath(), $this->curname, $element->name, $element->docblock->package, $element->docblock->subpackage, $element->docblock->category); + return $x; + break; + case 'method': + $x = new methodLink; + $x->addLink($this->class, $element->getPath(), $this->curname, $element->name, $element->docblock->package, $element->docblock->subpackage, $element->docblock->category); + return $x; + break; + case 'var': + $x = new varLink; + $x->addLink($this->class, $element->getPath(), $this->curname, $element->name, $element->docblock->package, $element->docblock->subpackage, $element->docblock->category); + return $x; + break; + case 'const': + $x = new constLink; + $x->addLink($this->class, $element->getPath(), $this->curname, $element->name, $element->docblock->package, $element->docblock->subpackage, $element->docblock->category); + return $x; + break; + case 'page': + $x = new pageLink; + $x->addLink($element->getPath(),$this->getPageName($element),$element->file,$element->package, $element->subpackage, $element->category); + return $x; + break; + } + } + + /** + * Return a tree of all classes that extend this class + * + * The data structure returned is designed for a non-recursive algorithm, + * and is somewhat complex. + * In most cases, the array returned is: + * + * <pre> + * array('#root' => + * array('link' => {@link classLink} to $class, + * 'parent' => false, + * 'children' => array(array('class' => 'childclass1', + * 'package' => 'child1package'), + * array('class' => 'childclass2', + * 'package' => 'child2package'),... + * ) + * ), + * 'child1package#childclass1' => + * array('link' => {@link classLink} to childclass1, + * 'parent' => '#root', + * 'children' => array(array('class' => 'kidclass', + * 'package' => 'kidpackage'),... + * ) + * ), + * 'kidpackage#kidclass' => + * array('link' => {@link classLink} to kidclass, + * 'parent' => 'child1package#childclass1', + * 'children' => array() // no children + * ), + * .... + * ) + *</pre> + * + * To describe this format using language, every class in the tree has an + * entry in the first level of the array. The index for all child + * classes that extend the root class is childpackage#childclassname. + * Each entry in the array has 3 elements: link, parent, and children. + * <ul> + * <li>link - a {@link classLink} to the current class</li> + * <li>parent - a {@link classLink} to the class's parent, or false (except for one special case described below)</li> + * <li>children - an array of arrays, each entry has a 'class' and 'package' index to the child class, + * used to find the entry in the big array</li> + * </ul> + * + * special cases are when the #root class has a parent in another package, + * or when the #root class extends a class not found + * by phpDocumentor. In the first case, parent will be a + * classLink to the parent class. In the second, parent will be the + * extends clause, as in: + * <code> + * class X extends Y + * { + * ... + * } + * </code> + * in this case, the #root entry will be array('link' => classLink to X, 'parent' => 'Y', children => array(...)) + * + * The fastest way to design a method to process the array returned + * is to copy HTMLframesConverter::getRootTree() into + * your converter and to modify the html to whatever output format you are going to use + * @see HTMLframesConverter::getRootTree() + * @param string class name + * @param string + * @param string + * @return array Format: see docs + */ + function getSortedClassTreeFromClass($class,$package,$subpackage) + { + $my_tree = array(); + $root = $this->classes->getClassByPackage($class,$package); + if (!$root) return false; + $class_children = $this->classes->getDefiniteChildren($class,$root->curfile); + if (!$class_children) + { + // special case: parent class is found, but is not part of this package, class has no children + if (is_array($root->parent)) + { + $x = $root->getParent($this); + if ($x->docblock->package != $package) + { + $v = Converter::getClassLink($root->getName(),$package,$root->getPath()); + return array('#root' => array('link' => $v,'parent' => Converter::getClassLink($x->getName(),$x->docblock->package,$x->getPath()), 'children' => array())); + } + } else + { // class has normal situation, no children + if (is_string($root->getParent($this))) + return array('#root' => array('link' => Converter::getClassLink($root->getName(),$package,$root->getPath()), 'parent' => $root->getExtends(),'children' => array())); + else + return array('#root' => array('link' => Converter::getClassLink($root->getName(),$package,$root->getPath()), 'parent' => false, 'children' => array())); + } + } + // special case: parent class is found, but is not part of this package, class has children + if (is_array($root->parent)) + { + $x = $root->getParent($this); + if ($x->docblock->package != $package) + { + $v = Converter::getClassLink($root->getName(),$package,$root->getPath()); + $my_tree = array('#root' => array('link' => $v, 'parent' => Converter::getClassLink($x->getName(),$x->docblock->package,$x->getPath()), 'children' => array())); + } else + { + } + } else + $my_tree = array('#root' => array('link' => Converter::getClassLink($root->getName(),$package,$root->getPath()), 'parent' => false, 'children' => array())); + // location of tree walker + $cur = '#root'; + $lastcur = array(array(false,0)); + $childpos = 0; + if (isset($class_children)) + { + do + { + if (!$class_children) + { + list($cur, $childpos) = array_pop($lastcur); + if (isset($my_tree[$cur]['children'][$childpos + 1])) + { + array_push($lastcur, array($cur, $childpos + 1)); + $par = $cur; + $cur = $my_tree[$cur]['children'][$childpos + 1]; + $x = $this->classes->getClassByPackage($cur['class'],$cur['package']); + $childpos = 0; + $cur = $cur['package'] . '#' . $cur['class']; + $my_tree[$cur]['link'] = Converter::getClassLink($x->getName(),$x->docblock->package,$x->getPath()); + $my_tree[$cur]['parent'] = $par; + $my_tree[$cur]['children'] = array(); + $class_children = $this->classes->getDefiniteChildren($x->getName(), $x->curfile); + continue; + } else + { + $class_children = false; + continue; + } + } + foreach($class_children as $chileclass => $chilefile) + { + $ch = $this->classes->getClass($chileclass,$chilefile); + $my_tree[$cur]['children'][] = array('class' => $ch->getName(), 'package' => $ch->docblock->package); + } + usort($my_tree[$cur]['children'],'rootcmp'); + if (isset($my_tree[$cur]['children'][$childpos])) + { + array_push($lastcur, array($cur, $childpos)); + $par = $cur; + $cur = $my_tree[$cur]['children'][$childpos]; + $x = $this->classes->getClassByPackage($cur['class'],$cur['package']); + $cur = $cur['package'] . '#' . $cur['class']; + $my_tree[$cur]['link'] = Converter::getClassLink($x->getName(),$x->docblock->package,$x->getPath()); + $my_tree[$cur]['parent'] = $par; + $my_tree[$cur]['children'] = array(); + $childpos = 0; + $class_children = $this->classes->getDefiniteChildren($x->getName(), $x->curfile); + } else + { + list($cur, $childpos) = array_pop($lastcur); + } + } while ($cur); + } + return $my_tree; + } + + /** + * do not override + * @return bool true if a link to this class exists in package $package and subpackage $subpackage + * @param string $expr class name + * @param string $package package to search in + * @param string $subpackage subpackage to search in + * @access private + */ + function isLinkedClass($expr,$package,$subpackage,$file=false) + { + if ($file) + return isset($this->linkswithfile[$package][$subpackage]['class'][$file][$expr]); + return isset($this->links[$package][$subpackage]['class'][$expr]); + } + + /** + * do not override + * @return bool true if a link to this function exists in package $package and subpackage $subpackage + * @param string $expr function name + * @param string $package package to search in + * @param string $subpackage subpackage to search in + * @access private + */ + function isLinkedFunction($expr,$package,$subpackage,$file=false) + { + if ($file) + return isset($this->linkswithfile[$package][$subpackage]['function'][$file][$expr]); + return isset($this->links[$package][$subpackage]['function'][$expr]); + } + + /** + * do not override + * @return bool true if a link to this define exists in package $package and subpackage $subpackage + * @param string $expr define name + * @param string $package package to search in + * @param string $subpackage subpackage to search in + * @access private + */ + function isLinkedDefine($expr,$package,$subpackage,$file=false) + { + if ($file) + return isset($this->linkswithfile[$package][$subpackage]['define'][$file][$expr]); + return isset($this->links[$package][$subpackage]['define'][$expr]); + } + + /** + * do not override + * @return bool true if a link to this define exists in package $package and subpackage $subpackage + * @param string $expr define name + * @param string $package package to search in + * @param string $subpackage subpackage to search in + * @access private + */ + function isLinkedGlobal($expr,$package,$subpackage,$file=false) + { + if ($file) + return isset($this->linkswithfile[$package][$subpackage]['global'][$file][$expr]); + return isset($this->links[$package][$subpackage]['global'][$expr]); + } + + /** + * do not override + * @return bool true if a link to this procedural page exists in package $package and subpackage $subpackage + * @param string $expr procedural page name + * @param string $package package to search in + * @param string $subpackage subpackage to search in + * @access private + */ + function isLinkedPage($expr,$package,$subpackage,$path=false) + { + if ($path) + return isset($this->linkswithfile[$package][$subpackage]['page'][$path][$expr]); + return isset($this->links[$package][$subpackage]['page'][$expr]); + } + + /** + * do not override + * @return bool true if a link to this method exists in package $package, subpackage $subpackage and class $class + * @param string $expr method name + * @param string $class class name + * @param string $package package to search in + * @param string $subpackage subpackage to search in + * @access private + */ + function isLinkedMethod($expr,$package,$subpackage,$class,$file=false) + { + if ($file) + return isset($this->linkswithfile[$package][$subpackage]['method'][$file][$class][$expr]); + return isset($this->links[$package][$subpackage]['method'][$class][$expr]); + } + + /** + * do not override + * @return bool true if a link to this method exists in package $package, subpackage $subpackage and class $class + * @param string $expr var name + * @param string $class class name + * @param string $package package to search in + * @param string $subpackage subpackage to search in + * @access private + */ + function isLinkedVar($expr,$package,$subpackage,$class,$file=false) + { + if ($file) + return isset($this->linkswithfile[$package][$subpackage]['var'][$file][$class][$expr]); + return isset($this->links[$package][$subpackage]['var'][$class][$expr]); + } + + /** + * do not override + * @return bool true if a link to this method exists in package $package, subpackage $subpackage and class $class + * @param string $expr constant name + * @param string $class class name + * @param string $package package to search in + * @param string $subpackage subpackage to search in + * @access private + */ + function isLinkedConst($expr,$package,$subpackage,$class,$file=false) + { + if ($file) + return isset($this->linkswithfile[$package][$subpackage]['const'][$file][$class][$expr]); + return isset($this->links[$package][$subpackage]['const'][$class][$expr]); + } + + /** + * return false or a {@link classLink} to $expr + * @param string $expr class name + * @param string $package package name + * @return mixed returns a {@link classLink} or false if the element is not found in package $package + * @see classLink + */ + function getClassLink($expr,$package,$file=false, $text = false) + { + if (!isset($this->links[$package])) return false; + foreach($this->links[$package] as $subpackage => $notused) + { + if ($this->isLinkedClass($expr,$package,$subpackage,$file)) + { + if ($file) + { + return $this->linkswithfile[$package][$subpackage]['class'][$file][$expr]; + } + return $this->links[$package][$subpackage]['class'][$expr]; + } + } + return false; + } + + /** + * return false or a {@link functionLink} to $expr + * @param string $expr function name + * @param string $package package name + * @return mixed returns a {@link functionLink} or false if the element is not found in package $package + * @see functionLink + */ + function getFunctionLink($expr,$package,$file=false, $text = false) + { + if (!isset($this->links[$package])) return false; + foreach($this->links[$package] as $subpackage => $notused) + { + if ($this->isLinkedFunction($expr,$package,$subpackage,$file)) + { + if ($file) + { + return $this->linkswithfile[$package][$subpackage]['function'][$file][$expr]; + } + return $this->links[$package][$subpackage]['function'][$expr]; + } + } + return false; + } + + /** + * return false or a {@link defineLink} to $expr + * @param string $expr constant name + * @param string $package package name + * @return mixed returns a {@link defineLink} or false if the element is not found in package $package + * @see defineLink + */ + function getDefineLink($expr,$package,$file=false, $text = false) + { + if (!isset($this->links[$package])) return false; + foreach($this->links[$package] as $subpackage => $notused) + { + if ($this->isLinkedDefine($expr,$package,$subpackage,$file)) + { + if ($file) + { + return $this->linkswithfile[$package][$subpackage]['define'][$file][$expr]; + } + return $this->links[$package][$subpackage]['define'][$expr]; + } + } + return false; + } + + /** + * return false or a {@link globalLink} to $expr + * @param string $expr global variable name (with leading $) + * @param string $package package name + * @return mixed returns a {@link defineLink} or false if the element is not found in package $package + * @see defineLink + */ + function getGlobalLink($expr,$package,$file=false, $text = false) + { + if (!isset($this->links[$package])) return false; + foreach($this->links[$package] as $subpackage => $notused) + { + if ($this->isLinkedGlobal($expr,$package,$subpackage,$file)) + { + if ($file) + { + return $this->linkswithfile[$package][$subpackage]['global'][$file][$expr]; + } + return $this->links[$package][$subpackage]['global'][$expr]; + } + } + return false; + } + + /** + * return false or a {@link pageLink} to $expr + * @param string $expr procedural page name + * @param string $package package name + * @return mixed returns a {@link pageLink} or false if the element is not found in package $package + * @see pageLink + */ + function getPageLink($expr,$package,$path = false, $text = false, $packages = false) + { + if (!isset($this->links[$package])) return false; + foreach($this->links[$package] as $subpackage => $notused) + { + if ($this->isLinkedPage($expr,$package,$subpackage,$path)) + { + if ($path) + { + return $this->linkswithfile[$package][$subpackage]['page'][$path][$expr]; + } + return $this->links[$package][$subpackage]['page'][$expr]; + } + } + return false; + } + + /** + * return false or a {@link methodLink} to $expr in $class + * @param string $expr method name + * @param string $class class name + * @param string $package package name + * @return mixed returns a {@link methodLink} or false if the element is not found in package $package, class $class + * @see methodLink + */ + function getMethodLink($expr,$class,$package,$file=false, $text = false) + { + $expr = trim($expr); + $class = trim($class); + if (!isset($this->links[$package])) return false; + foreach($this->links[$package] as $subpackage => $notused) + { + if ($this->isLinkedMethod($expr,$package,$subpackage,$class,$file)) + { + if ($file) + { + return $this->linkswithfile[$package][$subpackage]['method'][$file][$class][$expr]; + } + return $this->links[$package][$subpackage]['method'][$class][$expr]; + } + } + return false; + } + + /** + * return false or a {@link varLink} to $expr in $class + * @param string $expr var name + * @param string $class class name + * @param string $package package name + * @return mixed returns a {@link varLink} or false if the element is not found in package $package, class $class + * @see varLink + */ + function getVarLink($expr,$class,$package,$file=false, $text = false) + { + $expr = trim($expr); + $class = trim($class); + if (!isset($this->links[$package])) return false; + foreach($this->links[$package] as $subpackage => $notused) + { + if ($this->isLinkedVar($expr,$package,$subpackage,$class,$file)) + { + if ($file) + { + return $this->linkswithfile[$package][$subpackage]['var'][$file][$class][$expr]; + } + return $this->links[$package][$subpackage]['var'][$class][$expr]; + } + } + return false; + } + + /** + * return false or a {@link constLink} to $expr in $class + * @param string $expr constant name + * @param string $class class name + * @param string $package package name + * @return mixed returns a {@link varLink} or false if the element is not found in package $package, class $class + * @see constLink + */ + function getConstLink($expr,$class,$package,$file=false, $text = false) + { + $expr = trim($expr); + $class = trim($class); + if (!isset($this->links[$package])) return false; + foreach($this->links[$package] as $subpackage => $notused) + { + if ($this->isLinkedConst($expr,$package,$subpackage,$class,$file)) + { + if ($file) + { + return $this->linkswithfile[$package][$subpackage]['const'][$file][$class][$expr]; + } + return $this->links[$package][$subpackage]['const'][$class][$expr]; + } + } + return false; + } + + /** + * The meat of the @tutorial tag and inline {@}tutorial} tag + * + * Take a string and return an abstract link to the tutorial it represents. + * Since tutorial naming literally works like the underlying filesystem, the + * way to reference the tutorial is similar. Tutorials are located in a + * subdirectory of any directory parsed, which is named 'tutorials/' (we + * try to make things simple when we can :). They are further organized by + * package and subpackage as: + * + * tutorials/package/subpackage + * + * and the files are named *.cls, *.pkg, or *.proc, and so a link to a tutorial + * named file.cls can be referenced (depending on context) as any of: + * + * <code> + * * @tutorial package/subpackage/file.cls + * * @tutorial package/file.cls + * * @tutorial file.cls + * </code> + * + * The first case will only be needed if file.cls exists in both the current + * package, in anotherpackage/file.cls and in anotherpackage/subpackage/file.cls + * and you wish to reference the one in anotherpackage/subpackage. + * The second case is only needed if you wish to reference file.cls in another + * package and it is unique in that package. the third will link to the first + * file.cls it finds using this search method: + * + * <ol> + * <li>current package/subpackage</li> + * <li>all other subpackages of current package</li> + * <li>parent package, if this package has classes that extend classes in + * another package</li> + * <li>all other packages</li> + * </ol> + * @return tutorialLink|string returns either a link, or the original text, if not found + * @param string the original expression + * @param string package to look in first + * @param string subpackage to look in first + * @param array array of package names to search in if not found in parent packages. + * This is used to limit the search, phpDocumentor automatically searches + * all packages + * @since 1.2 + */ + function getTutorialLink($expr, $package = false, $subpackage = false, $packages = false) + { + // is $expr a comma-delimited list? + if (strpos($expr,',')) + { + $a = explode(',',$expr); + $b = array(); + for($i=0;$i<count($a);$i++) + { + // if so return each component with a link + $b[] = Converter::getTutorialLink(trim($a[$i])); + } + return $b; + } + $subsection = ''; + if (strpos($expr,'#')) + { + $a = explode('#',$expr); + $org = $expr; + $expr = $a[0]; + $subsection = $a[1]; + } + if (strpos($expr,'/')) + { + $a = explode('/',$expr); + if (count($a) == 3) + { + return Converter::getTutorialLink($a[2],$a[0],$a[1],array()); + } + if (count($a) == 2) + { + return Converter::getTutorialLink($a[1],$a[0],false,array()); + } + } + if (!$package) $package = $this->package; + if (!$subpackage) $subpackage = $this->subpackage; + if (!isset($this->all_packages[$package])) return $expr; + elseif (isset($packages[$package])) unset($packages[$package]); + $ext = pathinfo($expr, PATHINFO_EXTENSION); + if (isset($this->tutorials[$package][$subpackage][$ext][$expr])) + { + $a = $this->tutorials[$package][$subpackage][$ext][$expr]; + $link = new tutorialLink; + $link->addLink($subsection,$a->path,$a->name,$a->package,$a->subpackage,$a->getTitle($this,$subsection)); + return $link; + } + do + { + if (!is_array($packages)) + { + $packages = $this->all_packages; + if (isset($packages[$package])) unset($packages[$package]); + } + if (isset($this->tutorials[$package])) + { + if (isset($this->tutorials[$package][$subpackage][$ext][$expr])) + { + $a = $this->tutorials[$package][$subpackage][$ext][$expr]; + $link = new tutorialLink; + $link->addLink($subsection,$a->path,$a->name,$a->package,$a->subpackage,$a->getTitle($this)); + return $link; + } else + { + foreach($this->tutorials[$package] as $subpackage => $stuff) + { + if (isset($stuff[$ext][$expr])) + { + $a = $stuff[$ext][$expr]; + $link = new tutorialLink; + $link->addLink($subsection,$a->path,$a->name,$a->package,$a->subpackage,$a->getTitle($this)); + return $link; + } + } + } + } + // try other packages + // look in parent package first, if found + if (isset($this->package_parents[$package])) + { + $p1 = $package; + $package = $this->package_parents[$package]; + } else + { + // no parent package, so start with the first one that's left + list($package,) = @each($packages); + } + if ($package) + { + if (isset($packages[$package])) unset($packages[$package]); + } + } while (count($packages) || $package); + addWarning(PDERROR_TUTORIAL_NOT_FOUND,$expr); + return $expr; + } + + /** + * The meat of the @see tag and inline {@}link} tag + * + * $expr is a string with many allowable formats: + * <ol> + * <li>proceduralpagename.ext</li> + * <li>constant_name</li> + * <li>classname::function()</li> + * <li>classname::constantname</li> (new 1.2.4) + * <li>classname::$variablename</li> + * <li>classname</li> + * <li>object classname</li> + * <li>function functionname()</li> + * <li>global $globalvarname</li> + * <li>packagename#expr where expr is any of the above</li> + * </ol> + * + * New in version 1.1, you can explicitly specify a package to link to that + * is different from the current package. Use the # operator + * to specify a new package, as in tests#bug-540368.php (which should appear + * as a link like: "{@link tests#bug-540368.php}"). This + * example links to the procedural page bug-540368.php in package + * tests. Also, the "function" operator is now used to specifically + * link to a function instead of a method in the current class. + * + * <code> + * class myclass + * { + * // from inside the class definition, use "function conflict()" to refer to procedural function "conflict()" + * function conflict() + * { + * } + * } + * + * function conflict() + * { + * } + * </code> + * + * If classname:: is not present, and the see tag is in a documentation + * block within a class, then the function uses the classname to + * search for $expr as a function or variable within classname, or any of its parent classes. + * given an $expr without '$', '::' or '()' getLink first searches for + * classes, procedural pages, constants, global variables, and then searches for + * methods and variables within the default class, and finally for any function + * + * @param string $expr expression to search for a link + * @param string $package package to start searching in + * @param array $packages list of all packages to search in + * @return mixed getLink returns a descendant of {@link abstractLink} if it finds a link, otherwise it returns a string + * @see getPageLink(), getDefineLink(), getVarLink(), getFunctionLink(), getClassLink() + * @see pageLink, functionLink, defineLink, classLink, methodLink, varLink + */ + function &getLink($expr, $package = false, $packages = false) + { + // is $expr a comma-delimited list? + if (strpos($expr,',')) + { + $a = explode(',',$expr); + $b = array(); + for($i=0;$i<count($a);$i++) + { + // if so return each component with a link + $b[] = Converter::getLink(trim($a[$i])); + } + return $b; + } + if (strpos($expr,'#')) + { + $a = explode('#',$expr); + if (count($a) == 2) + { // can have exactly 1 package override, otherwise it's ignored + // feature 564991, link to php manual + if ($a[0] == 'PHP_MANUAL') { + $s = 'http://www.php.net/'.$a[1]; + return $s; + } + $s = &Converter::getLink($a[1],$a[0],array()); + return $s; + } + } + $a = &$this->_getLink($expr, $package, $packages); + return $a; + } + + /** + * @access private + */ + function &_getLink($expr, $package = false, $packages = false) + { + if (!$package) $package = $this->package; + // + if (!isset($this->all_packages[$package])) return $expr; + elseif (isset($packages[$package])) unset($packages[$package]); + $links = &$this->links; + $class = $this->class; + if (strpos($expr,'function ') === 0) + { // asking for a function, not a method + if ($test = Converter::getFunctionLink(str_replace('function ','',str_replace('()','',$expr)), $package)) return $test; + else return $expr; + } + if (strpos($expr,'global ') === 0) + { // asking for a global variable + if ($test = Converter::getGlobalLink(str_replace('global ','',$expr), $package)) return $test; + else return $expr; + } + if (strpos($expr,'object ') === 0) + { // asking for a class + if ($test = Converter::getClassLink(str_replace('object ','',$expr), $package)) return $test; + else return $expr; + } + if (strpos($expr,'constant ') === 0) + { // asking for a class + if ($test = Converter::getDefineLink(str_replace('constant ','',$expr), $package)) return $test; + else return $expr; + } + // are we in a class? + if ($class) + { + // is $expr simply a word? see if it is the class + if (trim($expr) == $class) + { + if ($test = Converter::getClassLink(trim(str_replace('object ','',$expr)),$package)) return $test; + } + // if not, check to see if it is a method or variable of this class tree + if (!strpos($expr,'::')) + { + // if get is neither get() nor $get, assume get is a function, add () to make get() + if (strpos($expr,'$') !== 0 && !strpos($expr,'()')) //$get = $get.'()'; + { + if ($a = $this->getLinkMethod($expr,$class,$package)) return $a; + if ($a = $this->getLinkConst($expr,$class,$package)) return $a; + if ($a = $this->getLinkVar('$'.$expr,$class,$package)) return $a; + } + if (strpos($expr,'()')) if ($a = $this->getLinkMethod($expr,$class,$package)) return $a; + if (is_numeric(strpos($expr,'$'))) if ($a = $this->getLinkVar($expr,$class,$package)) return $a; + } + } + if ($test = Converter::getClassLink(trim(str_replace('object ','',$expr)),$package)) return $test; + if ($test = Converter::getPageLink(trim($expr),$package)) return $test; + if ($test = Converter::getDefineLink(trim($expr),$package)) return $test; + if ($test = Converter::getGlobalLink(trim($expr),$package)) return $test; +// if (strpos($expr,'.')) + // package specified + + if (!is_array($packages)) + { + $packages = $this->all_packages; + } + do + { + if (isset($packages[$package])) unset($packages[$package]); + if ($test = Converter::getClassLink(str_replace('object ','',$expr),$package)) return $test; + if ($test = Converter::getPageLink($expr,$package)) return $test; + if ($test = Converter::getDefineLink($expr,$package)) return $test; + if ($test = Converter::getGlobalLink($expr,$package)) return $test; + // is $expr in class::method() or class::$variable format? + if (strpos($expr,'function ') === 0) + { // asking for a function, not a method + if ($test = Converter::getFunctionLink(str_replace('function','',str_replace('()','',$expr)), $package)) return $test; + else return $expr; + } + $test = $this->_getDoubleColon($expr, $package, $packages, $class, $links); + if (!is_string($test)) return $test; + if (strpos($test, 'parent::') === 0) return $test; + // $expr does not have :: + if (is_numeric(@strpos('$',$expr))) + { + // default to current class, whose name is contained in $this->render->parent + if ($test = Converter::getVarLink($expr, $class, $package)) return $test; + } + // $expr is a function? (non-method) + if (@strpos($expr,'()')) + { + // otherwise, see if it is a method + if ($class) + { + if ($test = Converter::getMethodLink(str_replace('()','',$expr), $class, $package)) return $test; + } + // extract the function name, use it to retrieve the file that the function is in + // $page = $this->func_page[str_replace('function ','',str_replace('()','',$expr))]; + // return the link + if ($test = Converter::getFunctionLink(str_replace('function ','',str_replace('()','',$expr)), $package)) return $test; + } + // $expr is just a word. First, test to see if it is a function of the current package + if ($test = Converter::getFunctionLink(str_replace('function ','',str_replace('()','',$expr)), $package)) return $test; + // try other packages + // look in parent package first, if found + if (isset($this->package_parents[$package]) && in_array($this->package_parents[$package], $packages)) + { + $p1 = $package; + $package = $this->package_parents[$package]; + if ($package) + { + if (isset($packages[$package])) unset($packages[$package]); + } + continue; + } + // no parent package, so start with the first one that's left + $package = @array_shift(@array_keys($packages)); + if ($package && isset($packages[$package])) + { + unset($packages[$package]); + } + } while (count($packages) || $package); + $funcs = get_defined_functions(); + // feature 564991, link to php manual + if (in_array(str_replace(array('(',')'),array('',''),$expr),$funcs['internal'])) + { + $return = 'http://www.php.net/'.str_replace(array('(',')'),array('',''),$expr); + return $return; + } + // no links found + return $expr; + } + + /** + * Split up getLink to make it easier to debug + * @access private + */ + function _getDoubleColon(&$expr, &$package, &$packages, $class, $links) + { + if (@strpos($expr,'::')) + { + $class_method = explode('::',$expr); + if ($class_method[0] == 'parent') + { + // can only have parent in the same package as the class! subtle bug + $package = $this->package; + $packages = array(); + $cl = $this->classes->getClassByPackage($class,$package); + if (!$cl) + { // this is possible if an example file has parent::method() + return $expr; + } + $par = $cl->getParent($this); + $phpparent = false; + if (is_object($par)) + { + $package = $par->docblock->package; + $phpparent = $par->getName(); + } else + { + addWarning(PDERROR_CLASS_PARENT_NOT_FOUND,$class,$package,$class_method[1]); + return $expr; + } + if ($phpparent) $class_method[0] = $phpparent; + } + if (strpos($class_method[1],'()')) + { + // strip everything but the function name, return a link + if ($test = Converter::getMethodLink(str_replace('()','',$class_method[1]), $class_method[0], $package)) return $test; + } + if ($test = Converter::getVarLink($class_method[1], $class_method[0], $package)) return $test; + if ($test = Converter::getConstLink($class_method[1], $class_method[0], $package)) return $test; + } + return $expr; + } + + /** + * cycle through parent classes to retrieve a link to a method + * do not use or override, used by getLink + * @access private + */ + function &getLinkMethod($expr, $class, $package) + { + $links = &$this->links; + do + { + // is $expr in class::method() or class::$variable format? + if (@strpos($expr,'::')) + { + $class_method = explode('::',$expr); + if ($class_method[0] == 'parent') + { + $cl = $this->classes->getClassByPackage($class,$package); + $par = $cl->getParent($this); + $phpparent = false; + if (is_object($par)) + { + $package = $par->docblock->package; + $phpparent = $par->getName(); + } else addWarning(PDERROR_CLASSPARENT_NOTFOUND,$class,$package,$class_method[1]); + if ($phpparent) $class_method[0] = $phpparent; + } else + { + $cl = $this->classes->getClassByPackage($class,$package); + } + if (strpos($class_method[1],'()')) + { + // strip everything but the function name, return a link + if ($test = Converter::getMethodLink(str_replace('function ','',str_replace('()','',$class_method[1])), $class_method[0], $package)) return $test; + } + } + if ($test = Converter::getMethodLink(str_replace('()','',$expr), $class, $package)) return $test; + $cl = $this->classes->getClassByPackage($class,$package); + if ($cl) + { + $par = $cl->getParent($this); + if (is_object($par)) + { + $package = $par->docblock->package; + $class = $par->getName(); + } else $class = $par; + } else $class = false; + } while ($class); + // no links found + $flag = false; + return $flag; + } + + /** + * cycle through parent classes to retrieve a link to a var + * do not use or override, used by getLink + * @access private + */ + function &getLinkVar($expr, $class, $package) + { + $links = &$this->links; + do + { + // is $expr in class::method() or class::$variable format? + if (@strpos($expr,'::')) + { + $class_method = explode('::',$expr); + if ($class_method[0] == 'parent') + { + $cl = $this->classes->getClassByPackage($class,$package); + $phpparent = false; + $par = $cl->getParent($this); + if (is_object($par)) + { + $package = $par->docblock->package; + $phpparent = $par->getName(); + } else addWarning(PDERROR_CLASSPARENT_NOTFOUND,$class,$package,$class_method[1]); + if ($phpparent) $class_method[0] = $phpparent; + } else + { + $cl = $this->classes->getClassByPackage($class,$package); + } + if ($test = Converter::getVarLink($class_method[1], $class_method[0], $package)) return $test; + if ($test = Converter::getVarLink('$'.$class_method[1], $class_method[0], $package)) return $test; + } + if ($test = Converter::getVarLink($expr, $class, $package)) return $test; + if ($test = Converter::getVarLink('$'.$expr, $class, $package)) return $test; + $cl = $this->classes->getClassByPackage($class,$package); + if ($cl) + { + $par = $cl->getParent($this); + if (is_object($par)) + { + $package = $par->docblock->package; + $class = $par->getName(); + } else $class = $par; + } else $class = false; + } while ($class); + // no links found + $class = false; + return $class; + } + + /** + * cycle through parent classes to retrieve a link to a class constant + * do not use or override, used by getLink + * @access private + * @since 1.2.4 + */ + function &getLinkConst($expr, $class, $package) + { + $links = &$this->links; + do + { + // is $expr in class::method() or class::$variable format? + if (@strpos($expr,'::')) + { + $class_method = explode('::',$expr); + if ($class_method[0] == 'parent') + { + $cl = $this->classes->getClassByPackage($class,$package); + $phpparent = false; + $par = $cl->getParent($this); + if (is_object($par)) + { + $package = $par->docblock->package; + $phpparent = $par->getName(); + } else addWarning(PDERROR_CLASSPARENT_NOTFOUND,$class,$package,$class_method[1]); + if ($phpparent) $class_method[0] = $phpparent; + } else + { + $cl = $this->classes->getClassByPackage($class,$package); + } + if ($test = Converter::getConstLink($class_method[1], $class_method[0], $package)) return $test; + } + if ($test = Converter::getConstLink($expr, $class, $package)) return $test; + $cl = $this->classes->getClassByPackage($class,$package); + if ($cl) + { + $par = $cl->getParent($this); + if (is_object($par)) + { + $package = $par->docblock->package; + $class = $par->getName(); + } else $class = $par; + } else $class = false; + } while ($class); + // no links found + $flag = false; + return $flag; + } + + /** + * take URL $link and text $text and return a link in the format needed for the Converter + * @param string URL + * @param string text to display + * @return string link to $link + * @abstract + */ + function returnLink($link,$text) + { + } + + /** + * take {@link abstractLink} descendant and text $eltext and return a link + * in the format needed for the Converter + * @param abstractLink + * @param string + * @return string link to $element + * @abstract + */ + function returnSee(&$link, $eltext = false) + { + } + + /** + * take {@link abstractLink} descendant and text $eltext and return a + * unique ID in the format needed for the Converter + * @param abstractLink + * @return string unique identifier of $element + * @abstract + */ + function getId(&$link) + { + } + + /** + * Convert README/INSTALL/CHANGELOG file contents to output format + * @param README|INSTALL|CHANGELOG + * @param string contents of the file + * @abstract + */ + function Convert_RIC($name, $contents) + { + } + + /** + * Convert all elements to output format + * + * This will call ConvertXxx where Xxx is {@link ucfirst}($element->type). + * It is expected that a child converter defines a handler for every + * element type, even if that handler does nothing. phpDocumentor will + * terminate with an error if a handler doesn't exist. + * {@internal + * Since 1.2.0 beta 3, this function has been moved from child converters + * to the parent, because it doesn't really make sense to put it in the + * child converter, and we can add error handling. + * + * {@source}}} + * @throws {@link PDERROR_NO_CONVERT_HANDLER} + * @param mixed {@link parserElement} descendant or {@link parserPackagePage} or {@link parserData} + */ + function Convert(&$element) + { + $handler = 'convert'.ucfirst($element->type); + if (method_exists($this,$handler)) + { + $this->$handler($element); + } else + { + addErrorDie(PDERROR_NO_CONVERTER_HANDLER,$element->type,$handler,phpDocumentor_get_class($this)); + } + } + /**#@+ + * Conversion Handlers + * + * All of the convert* handlers set up template variables for the Smarty + * template.{@internal In addition, the {@link newSmarty()} method is + * called to retrieve the global Smarty template}} + */ + /** + * Default Tutorial Handler + * + * Sets up the tutorial template, and its prev/next/parent links + * {@internal + * Retrieves the title using {@link parserTutorial::getTitle()} and uses the + * {@link parserTutorial::prev, parserTutorial::next, parserTutorial::parent} + * links to set up those links.}} + * @param parserTutorial + */ + function &convertTutorial(&$element) + { + $this->package = $element->package; + $this->subpackage = $element->subpackage; + $x = $element->Convert($this); + $template = &$this->newSmarty(); + $template->assign('contents',$x); + $template->assign('title',$element->getTitle($this)); + $template->assign('nav',$element->parent || $element->prev || $element->next); + if ($element->parent) + { + $template->assign('up',$this->getId($element->parent)); + $template->assign('uptitle',$element->parent->title); + } + if ($element->prev) + { + $template->assign('prev',$this->getId($element->prev)); + $template->assign('prevtitle',$element->prev->title); + } + if ($element->next) + { + $template->assign('next',$this->getId($element->next)); + $template->assign('nexttitle',$element->next->title); + } + return $template; + } + /** + * Default Class Handler + * + * Sets up the class template. + * {@internal special methods + * {@link generateChildClassList(), generateFormattedClassTree()}, + * {@link getFormattedConflicts, getFormattedInheritedMethods}, + * and {@link getFormattedInheritedVars} are called to complete vital + * template setup.}} + */ + function convertClass(&$element) + { + $this->class = $element->getName(); + $this->class_data = &$this->newSmarty(); + $this->class_data->assign("class_name",$element->getName()); + $this->class_data->assign("vars",array()); + $this->class_data->assign("methods",array()); + $this->class_data->assign("consts",array()); + $this->class_data->assign("is_interface", $element->isInterface()); + $this->class_data->assign("implements", $this->getFormattedImplements($element)); + $this->class_data->assign("package",$element->docblock->package); + $this->class_data->assign("line_number",$element->getLineNumber()); + $this->class_data->assign("source_location",$element->getSourceLocation($this)); + $this->class_data->assign("page_link",$this->getCurrentPageLink()); + $docblock = $this->prepareDocBlock($element, false); + $this->class_data->assign("sdesc",$docblock['sdesc']); + $this->class_data->assign("desc",$docblock['desc']); + $this->class_data->assign("access", $docblock['access']); + $this->class_data->assign("abstract", $docblock['abstract']); + $this->class_data->assign("tags",$docblock['tags']); + $this->class_data->assign("api_tags",$docblock['api_tags']); + $this->class_data->assign("info_tags",$docblock['info_tags']); + $this->class_data->assign("utags",$docblock['utags']); + $this->class_data->assign( "prop_tags", $docblock['property_tags'] ); + if ($this->hasSourceCode($element->getPath())) { + $this->class_data->assign("class_slink",$this->getSourceAnchor($element->getPath(),$element->getLineNumber(),$element->getLineNumber(),true)); + } + + else + $this->class_data->assign("class_slink",false); + $this->class_data->assign("children", $this->generateChildClassList($element)); + $this->class_data->assign("class_tree", $this->generateFormattedClassTree($element)); + $this->class_data->assign("conflicts", $this->getFormattedConflicts($element,"classes")); + $inherited_methods = $this->getFormattedInheritedMethods($element); + if (!empty($inherited_methods)) + { + $this->class_data->assign("imethods",$inherited_methods); + } else + { + $this->class_data->assign("imethods",false); + } + $inherited_vars = $this->getFormattedInheritedVars($element); + if (!empty($inherited_vars)) + { + $this->class_data->assign("ivars",$inherited_vars); + } else + { + $this->class_data->assign("ivars",false); + } + $inherited_consts = $this->getFormattedInheritedConsts($element); + if (!empty($inherited_consts)) + { + $this->class_data->assign("iconsts",$inherited_consts); + } else + { + $this->class_data->assign("iconsts",false); + } + } + + + /** + * Converts method for template output + * + * This function must be called by a child converter with any extra + * template variables needed in the parameter $addition + * @param parserMethod + */ + function convertMethod(&$element, $additions = array()) + { + $fname = $element->getName(); + $docblock = $this->prepareDocBlock($element); + $returntype = 'void'; + if ($element->isConstructor) $returntype = $element->class; + if ($element->docblock->return) + { + $a = $element->docblock->return->Convert($this); + $returntype = $element->docblock->return->converted_returnType; + } + $params = $param_i = array(); + if (count($element->docblock->params)) + foreach($element->docblock->params as $param => $val) + { + $a = $val->Convert($this); + $params[] = $param_i[$param] = array("var" => $param,"datatype" => $val->converted_returnType,"data" => $a); + } + + if ($element->docblock->hasaccess) { + $acc = $docblock['access']; + } else { + $acc = 'public'; + } + + if ($this->hasSourceCode($element->getPath())) + $additions["slink"] = $this->getSourceAnchor($element->getPath(),$element->getLineNumber(),$element->getLineNumber(),true); + $this->class_data->append('methods',array_merge( + array('sdesc' => $docblock['sdesc'], + 'desc' => $docblock['desc'], + 'static' => $docblock['static'], + 'abstract' => $docblock['abstract'], + 'tags' => $docblock['tags'], + 'api_tags' => $docblock['api_tags'], + 'see_tags' => $docblock['see_tags'], + 'info_tags_sorted' => $docblock['info_tags_sorted'], + 'info_tags' => $docblock['info_tags'], + 'utags' => $docblock['utags'], + 'constructor' => $element->isConstructor, + 'access' => $acc, + 'function_name' => $fname, + 'function_return' => $returntype, + 'function_call' => $element->getFunctionCall(), + 'ifunction_call' => $element->getIntricateFunctionCall($this, $param_i), + 'descmethod' => $this->getFormattedDescMethods($element), + 'method_overrides' => $this->getFormattedOverrides($element), + 'method_implements' => $this->getFormattedMethodImplements($element), + 'line_number' => $element->getLineNumber(), + 'id' => $this->getId($element), + 'params' => $params), + $additions)); + } + + /** + * Converts class variables for template output. + * + * This function must be called by a child converter with any extra + * template variables needed in the parameter $addition + * @param parserVar + */ + function convertVar(&$element, $additions = array()) + { + $docblock = $this->prepareDocBlock($element); + $b = 'mixed'; + + if ($element->docblock->hasaccess) + $acc = $element->docblock->tags['access'][0]->value; + else + $acc = 'public'; + + if ($element->docblock->var) + { + $b = $element->docblock->var->converted_returnType; + } + if ($this->hasSourceCode($element->getPath())) + $additions["slink"] = $this->getSourceAnchor($element->getPath(),$element->getLineNumber(),$element->getLineNumber(),true); + $this->class_data->append('vars',array_merge( + array('sdesc' => $docblock['sdesc'], + 'desc' => $docblock['desc'], + 'static' => $docblock['static'], + 'abstract' => $docblock['abstract'], + 'utags' => $docblock['utags'], + 'tags' => $docblock['tags'], + 'api_tags' => $docblock['api_tags'], + 'info_tags' => $docblock['info_tags'], + 'var_name' => $element->getName(), + 'has_default' => strlen($element->getValue()), + 'var_default' => $this->postProcess($element->getValue()), + 'var_type' => $b, + 'access' => $acc, + 'line_number' => $element->getLineNumber(), + 'descvar' => $this->getFormattedDescVars($element), + 'var_overrides' => $this->getFormattedOverrides($element), + 'id' => $this->getId($element)), + $additions)); + } + + /** + * Converts class constants for template output. + * + * This function must be called by a child converter with any extra + * template variables needed in the parameter $addition + * @param parserConst + */ + function convertConst(&$element, $additions = array()) + { + $docblock = $this->prepareDocBlock($element); + + if ($element->docblock->hasaccess) + $acc = $element->docblock->tags['access'][0]->value; + else + $acc = 'public'; + + if ($this->hasSourceCode($element->getPath())) + $additions["slink"] = $this->getSourceAnchor($element->getPath(),$element->getLineNumber(),$element->getLineNumber(),true); + $this->class_data->append('consts',array_merge( + array('sdesc' => $docblock['sdesc'], + 'desc' => $docblock['desc'], + 'access' => $docblock['access'], + 'abstract' => $docblock['abstract'], + 'utags' => $docblock['utags'], + 'tags' => $docblock['tags'], + 'api_tags' => $docblock['api_tags'], + 'info_tags' => $docblock['info_tags'], + 'const_name' => $element->getName(), + 'const_value' => $this->postProcess($element->getValue()), + 'access' => $acc, + 'line_number' => $element->getLineNumber(), + 'id' => $this->getId($element)), + $additions)); + } + + /** + * Default Page Handler + * + * {@internal In addition to setting up the smarty template with {@link newSmarty()}, + * this class uses {@link getSourceLocation()} and {@link getClassesOnPage()} + * to set template variables. Also used is {@link getPageName()}, to get + * a Converter-specific name for the page.}} + * @param parserPage + */ + function convertPage(&$element) + { + $this->page_data = &$this->newSmarty(true); + $this->page = $this->getPageName($element->parent); + $this->path = $element->parent->getPath(); + $this->curpage = &$element->parent; + $this->page_data->assign("source_location",$element->parent->getSourceLocation($this)); + $this->page_data->assign("functions",array()); + $this->page_data->assign("includes",array()); + $this->page_data->assign("defines",array()); + $this->page_data->assign("globals",array()); + $this->page_data->assign("classes",$this->getClassesOnPage($element)); + $this->page_data->assign("hasclasses",$element->hasClasses()); + $this->page_data->assign("hasinterfaces",$element->hasInterfaces()); + $this->page_data->assign("name", $element->parent->getFile()); + if ($t = $element->getTutorial()) + { + $this->page_data->assign("tutorial",$this->returnSee($t)); + } else + { + $this->page_data->assign("tutorial",false); + } + if ($element->docblock) + { + $docblock = $this->prepareDocBlock($element, false); + $this->page_data->assign("sdesc",$docblock['sdesc']); + $this->page_data->assign("desc",$docblock['desc']); + $this->page_data->assign("tags",$docblock['tags']); + $this->page_data->assign("api_tags",$docblock['api_tags']); + $this->page_data->assign("info_tags",$docblock['info_tags']); + $this->page_data->assign("utags",$docblock['utags']); + } + } + + /** + * Converts global variables for template output + * + * This function must be called by a child converter with any extra + * template variables needed in the parameter $addition + * {@internal + * In addition to using {@link prepareDocBlock()}, this method also + * uses utility functions {@link getGlobalValue(), getFormattedConflicts()}}} + * @param parserGlobal + * @uses postProcess() on global_value template value, makes it displayable + * @param array any additional template variables should be in this array + */ + function convertGlobal(&$element, $addition = array()) + { + $docblock = $this->prepareDocBlock($element); + $value = $this->getGlobalValue($element->getValue()); + if ($this->hasSourceCode($element->getPath())) + $addition["slink"] = $this->getSourceAnchor($element->getPath(),$element->getLineNumber(),$element->getLineNumber(),true); + $this->page_data->append('globals',array_merge( + array('sdesc' => $docblock['sdesc'], + 'desc' => $docblock['desc'], + 'tags' => $docblock['tags'], + 'api_tags' => $docblock['api_tags'], + 'info_tags' => $docblock['info_tags'], + 'utags' => $docblock['utags'], + 'global_name' => $element->getName(), + 'global_type' => $element->getDataType($this), + 'global_value' => $value, + 'line_number' => $element->getLineNumber(), + 'global_conflicts' => $this->getFormattedConflicts($element,"global variables"), + 'id' => $this->getId($element)), + $addition)); + } + + /** + * Converts defines for template output + * + * This function must be called by a child converter with any extra + * template variables needed in the parameter $addition + * {@internal + * In addition to using {@link prepareDocBlock()}, this method also + * uses utility functions {@link getGlobalValue(), getFormattedConflicts()}}} + * @param parserDefine + * @uses postProcess() on define_value template value, makes it displayable + * @param array any additional template variables should be in this array + */ + function convertDefine(&$element, $addition = array()) + { + $docblock = $this->prepareDocBlock($element); + if ($this->hasSourceCode($element->getPath())) + $addition["slink"] = $this->getSourceAnchor($element->getPath(),$element->getLineNumber(),$element->getLineNumber(),true); + $this->page_data->append('defines',array_merge( + array('sdesc' => $docblock['sdesc'], + 'desc' => $docblock['desc'], + 'tags' => $docblock['tags'], + 'api_tags' => $docblock['api_tags'], + 'info_tags' => $docblock['info_tags'], + 'utags' => $docblock['utags'], + 'define_name' => $element->getName(), + 'line_number' => $element->getLineNumber(), + 'define_value' => $this->postProcess($element->getValue()), + 'define_conflicts' => $this->getFormattedConflicts($element,"defines"), + 'id' => $this->getId($element)), + $addition)); + } + + + /** + * Converts includes for template output + * + * This function must be called by a child converter with any extra + * template variables needed in the parameter $addition + * @see prepareDocBlock() + * @param parserInclude + */ + function convertInclude(&$element, $addition = array()) + { + $docblock = $this->prepareDocBlock($element); + $per = $this->getIncludeValue($element->getValue(), $element->getPath()); + + if ($this->hasSourceCode($element->getPath())) + $addition["slink"] = $this->getSourceAnchor($element->getPath(),$element->getLineNumber(),$element->getLineNumber(),true); + $this->page_data->append('includes',array_merge( + array('sdesc' => $docblock['sdesc'], + 'desc' => $docblock['desc'], + 'tags' => $docblock['tags'], + 'api_tags' => $docblock['api_tags'], + 'info_tags' => $docblock['info_tags'], + 'utags' => $docblock['utags'], + 'include_name' => $element->getName(), + 'line_number' => $element->getLineNumber(), + 'include_value' => $per), + $addition)); + } + + /** + * Converts function for template output + * + * This function must be called by a child converter with any extra + * template variables needed in the parameter $addition + * @see prepareDocBlock() + * @param parserFunction + */ + function convertFunction(&$element, $addition = array()) + { + $docblock = $this->prepareDocBlock($element); + $fname = $element->getName(); + $params = $param_i = array(); + if (count($element->docblock->params)) + foreach($element->docblock->params as $param => $val) + { + $a = $val->Convert($this); + $params[] = $param_i[$param] = array("var" => $param,"datatype" => $val->converted_returnType,"data" => $a); + } + $returntype = 'void'; + if ($element->docblock->return) + { + $a = $element->docblock->return->Convert($this); + $returntype = $element->docblock->return->converted_returnType; + } + + if ($this->hasSourceCode($element->getPath())) + $addition["slink"] = $this->getSourceAnchor($element->getPath(),$element->getLineNumber(),$element->getLineNumber(),true); + $this->page_data->append('functions',array_merge( + array('sdesc' => $docblock['sdesc'], + 'desc' => $docblock['desc'], + 'tags' => $docblock['tags'], + 'api_tags' => $docblock['api_tags'], + 'info_tags' => $docblock['info_tags'], + 'utags' => $docblock['utags'], + 'function_name' => $fname, + 'function_return' => $returntype, + 'function_conflicts' => $this->getFormattedConflicts($element,"functions"), + 'ifunction_call' => $element->getIntricateFunctionCall($this, $param_i), + 'function_call' => $element->getFunctionCall(), + 'line_number' => $element->getLineNumber(), + 'id' => $this->getId($element), + 'params' => $params), + $addition)); + } + /**#@-*/ + + /** + * convert the element's DocBlock for output + * + * This function converts all tags and descriptions for output + * @param mixed any descendant of {@link parserElement}, or {@link parserData} + * @param array used to translate tagnames into other tags + * @param boolean set to false for pages and classes, the only elements allowed to specify @package + * @return array + * + * Format: + * <pre> + * array('sdesc' => DocBlock summary + * 'desc' => DocBlock detailed description + * 'tags' => array('keyword' => tagname, 'data' => tag description) + * known tags + * 'api_tags' => array('keyword' => tagname, 'data' => tag description) + * known api documentation tags + * 'info_tags' => array('keyword' => tagname, 'data' => tag description) + * known informational tags + * [ 'utags' => array('keyword' => tagname, 'data' => tag description + * unknown tags ] + * [ 'vartype' => type from @var/@return tag ] + * [ 'var_descrip' => description from @var/@return tag ] + * ) + * </pre> + */ + function prepareDocBlock(&$element, $names = array(),$nopackage = true) + { + $tagses = $element->docblock->listTags(); + $tags = $ret = $api_tags = $info_tags = array(); + $api_tags_arr = array("abstract", "access", "deprecated", "example", "filesource", + "global", "internal", "name", "return", "see", + "property", "property-read", "property-write", "method", + "staticvar", "usedby", "uses", "var"); + if (!$nopackage) + { + $tags[] = array('keyword' => 'package','data' => $element->docblock->package); + if (!empty($element->docblock->subpackage)) $tags[] = array('keyword' => 'subpackage','data' => $element->docblock->subpackage); + } + if ($element->docblock->var) + { + $a = $element->docblock->var->Convert($this); + $ret['vartype'] = $element->docblock->var->converted_returnType; + if (!empty($a)) + { + $tags[] = array('keyword' => 'var', 'data' => $a); + $ret["var_descrip"] = $a; + } + } + if ($element->docblock->return) + { + $a = $element->docblock->return->Convert($this); + $ret['vartype'] = $element->docblock->return->converted_returnType; + if (!empty($a)) + { + $tags[] = $api_tags[] = array('keyword' => 'return', 'data' => $a); + $ret["var_descrip"] = $a; + } + } + if ($element->docblock->funcglobals) + foreach($element->docblock->funcglobals as $global => $val) + { + if ($a = $this->getGlobalLink($global,$element->docblock->package)) + { + $global = $a; + } + $b = Converter::getLink($val[0]); + if (is_object($b) && phpDocumentor_get_class($b) == 'classlink') + { + $val[0] = $this->returnSee($b); + } + $tags[] = $api_tags[] = array('keyword' => 'global','data' => $val[0].' '.$global.': '.$val[1]->Convert($this)); + } + if ($element->docblock->statics) + foreach($element->docblock->statics as $static => $val) + { + $a = $val->Convert($this); + $tags[] = $api_tags[] = array('keyword' => 'staticvar','data' => $val->converted_returnType.' '.$static.': '.$a); + } + $property_tags = array(); + foreach ( $element->docblock->properties as $prop_name => $val ) + { + $a = $val->Convert( $this ); + if ( !empty( $a ) ) + { + $tags[] = $api_tags[] = array( 'keyword' => $val->keyword , + 'data' => $val->converted_returnType . ' ' . $prop_name . ': ' . $a ); + $prop['prop_name'] = $prop_name; + $prop['access'] = $val->keyword == 'property-read' ? 'read' : + ( $val->keyword == 'property-write' ? 'write' : 'read/write' ); + $prop['prop_type'] = $val->converted_returnType; + $prop['sdesc'] = $a; + $property_tags[ $prop_name ] = $prop; + } + } + ksort( $property_tags, SORT_STRING ); + $property_tags = array_values( $property_tags ); + $info_tags_sorted = array(); + $ret['static'] = false; + foreach($tagses as $tag) + { + if (isset($names[$tag->keyword])) $tag->keyword = $names[$tag->keyword]; + if ($tag->keyword == 'static') { + $ret['static'] = true; + continue; + } + if ($tag->keyword) + $tags[] = array("keyword" => $tag->keyword,"data" => $tag->Convert($this)); + if (in_array($tag->keyword, $api_tags_arr)) { + $api_tags[] = array("keyword" => $tag->keyword,"data" => $tag->Convert($this)); + } else { + $info_tags[] = array("keyword" => $tag->keyword,"data" => $tag->Convert($this)); + @list( $className, $desc ) = explode( " ", $tag->Convert($this), 2 ); + $info_tags_sorted[ $tag->keyword ][] = array( 'keyword' => $className, 'data' => $desc ); + } + } + $utags = array(); + foreach($element->docblock->unknown_tags as $keyword => $tag) + { + foreach($tag as $t) + $utags[] = array('keyword' => $keyword, 'data' => $t->Convert($this)); + } + $ret['abstract'] = false; + $ret['access'] = 'public'; + $see_tags = array(); + foreach($tags as $tag) + { + if ($tag['keyword'] == 'access') { + $ret['access'] = $tag['data']; + } + if ($tag['keyword'] == 'abstract') { + $ret['abstract'] = true; + } + if ($tag['keyword'] == 'see' || $tag['keyword'] == 'uses' || + $tag['keyword'] == 'usedby') { + $see_tags[] = $tag['data']; + } + } + $ret['sdesc'] = $element->docblock->getSDesc($this); + $ret['desc'] = $element->docblock->getDesc($this); + $ret['tags'] = $tags; + $ret['see_tags'] = $see_tags; + $ret['info_tags_sorted'] = $info_tags_sorted; + $ret['api_tags'] = $api_tags; + $ret['info_tags'] = $info_tags; + $ret['utags'] = $utags; + $ret['property_tags'] = $property_tags; + return $ret; + } + + /** + * gets a list of all classes declared on a procedural page represented by + * $element, a {@link parserData} class + * @param parserData &$element + * @return array links to each classes documentation + * + * Format: + * <pre> + * array('name' => class name, + * 'sdesc' => summary of the class + * 'link' => link to the class's documentation) + * </pre> + */ + function getClassesOnPage(&$element) + { + global $_phpDocumentor_setting; + $a = $element->getClasses($this); + $classes = array(); + foreach($a as $package => $clas) + { + if (!empty($_phpDocumentor_setting['packageoutput'])) + { + $packages = explode(',',$_phpDocumentor_setting['packageoutput']); + if (!in_array($package, $packages)) continue; + } + for($i=0; $i<count($clas); $i++) + { + if ($this->parseprivate || ! ($clas[$i]->docblock && $clas[$i]->docblock->hasaccess && $clas[$i]->docblock->tags['access'][0]->value == 'private')) + { + $sdesc = ''; + $r = array(); + $sdesc = $clas[$i]->docblock->getSDesc($this); + if ($clas[$i]->docblock->hasaccess) + $r['access'] = $clas[$i]->docblock->tags['access'][0]->value; + else + $r['access'] = 'public'; + if (isset ($clas[$i]->docblock->tags['abstract'])) + $r['abstract'] = TRUE; + else + $r['abstract'] = FALSE; + $r['name'] = $clas[$i]->getName(); + $r['sdesc'] = $sdesc; + $r['link'] = $this->getClassLink($clas[$i]->getName(),$package,$clas[$i]->getPath()); + $classes[] = $r; + } + } + } + return $classes; + } + + /** + * returns an array containing the class inheritance tree from the root + * object to the class. + * + * This method must be overridden, or phpDocumentor will halt with a fatal + * error + * @return string Converter-specific class tree for an individual class + * @param parserClass class variable + * @abstract + */ + + function generateFormattedClassTree($class) + { + addErrorDie(PDERROR_CONVERTER_OVR_GFCT,phpDocumentor_get_class($this)); + } + + /** + * returns an array containing the class inheritance tree from the root + * object to the class. + * + * This method must be overridden, or phpDocumentor will halt with a fatal + * error + * @return string Converter-specific class tree for an individual class + * @param parserClass class variable + * @abstract + */ + + function getFormattedImplements($el) + { + $ret = array(); + foreach ($el->getImplements() as $interface) + { + $link = $this->getLink($interface); + if ($link && is_object($link)) { + $ret[] = $this->returnSee($link); + } else { + if (class_exists('ReflectionClass')) { + if (interface_exists($interface)) { + $inter = new ReflectionClass($interface); + if ($inter->isInternal()) { + $ret[] = $interface . ' (internal interface)'; + } else { + $ret[] = $interface; + } + } + } else { + $ret[] = $interface; + } + } + } + return $ret; + } + + /** + * @param mixed {@link parserClass, parserFunction, parserDefine} or + * {@link parserGlobal} + * @param string type to display. either 'class','function','define' + * or 'global variable' + * @return array links to conflicting elements, or empty array + * @uses parserClass::getConflicts() + * @uses parserFunction::getConflicts() + * @uses parserDefine::getConflicts() + * @uses parserGlobal::getConflicts() + */ + function getFormattedConflicts(&$element,$type) + { + $conflicts = $element->getConflicts($this); + $r = array(); + if (!$conflicts) return false; + foreach($conflicts as $package => $class) + { + $r[] = $class->getLink($this,$class->docblock->package); + } + if (!empty($r)) $r = array('conflicttype' => $type, 'conflicts' => $r); + return $r; + } + + /** + * Get a list of methods in child classes that override this method + * @return array empty array or array(array('link'=>link to method, + * 'sdesc'=>short description of the method),...) + * @uses parserMethod::getOverridingMethods() + * @param parserMethod + */ + function getFormattedDescMethods(&$element) + { + $meths = $element->getOverridingMethods($this); + $r = array(); + for($i=0; $i<count($meths); $i++) + { + $ms = array(); + $ms['link'] = $meths[$i]->getLink($this); + $ms['sdesc'] = $meths[$i]->docblock->getSDesc($this); + $r[] = $ms; + } + return $r; + } + + /** + * Get a list of vars in child classes that override this var + * @return array empty array or array('link'=>link to var, + * 'sdesc'=>short description of the method + * @uses parserVar::getOverridingVars() + * @param parserVar + */ + function getFormattedDescVars(&$element) + { + $vars = $element->getOverridingVars($this); + $r = array(); + for($i=0; $i<count($vars); $i++) + { + $vs = array(); + $vs['link'] = $vars[$i]->getLink($this); + $vs['sdesc'] = $vars[$i]->docblock->getSDesc($this); + $r[] = $vs; + } + return $r; + } + + /** + * Get the method this method overrides, if any + * @return array|false array('link'=>link to overridden method, + * 'sdesc'=>short description + * @see parserMethod::getOverrides() + * @param parserMethod + */ + function getFormattedOverrides(&$element) + { + $ovr = $element->getOverrides($this); + if (!$ovr) return false; + $sdesc = $ovr->docblock->getSDesc($this); + $name = method_exists($ovr, 'getFunctionCall') ? $ovr->getFunctionCall() : $ovr->getName(); + $link = ($link = $ovr->getLink($this)) ? $link : $ovr->getClass() . '::' . $name; + return array('link' => $link,'sdesc' => $sdesc); + } + + /** + * Get the method this method(s) implemented from an interface, if any + * @return array|false array('link'=>link to implemented method, + * 'sdesc'=>short description + * @uses parserMethod::getImplements() + * @param parserMethod + */ + function getFormattedMethodImplements(&$element) + { + $ovr = $element->getImplements($this); + if (!$ovr) return false; + $ret = array(); + foreach ($ovr as $impl) { + $sdesc = $impl->docblock->getSDesc($this); + $name = $impl->getName(); + $link = ($link = $impl->getLink($this)) ? $link : $impl->getClass() . '::' . $name; + $ret[] = array('link' => $link,'sdesc' => $sdesc); + } + return $ret; + } + + /** + * returns a list of child classes + * + * @param parserClass class variable + * @uses parserClass::getChildClassList() + */ + + function generateChildClassList($class) + { + $kids = $class->getChildClassList($this); + $list = array(); + if (count($kids)) + { + for($i=0; $i<count($kids); $i++) + { + $lt['link'] = $kids[$i]->getLink($this); + $lt['sdesc'] = $kids[$i]->docblock->getSDesc($this); + + if ($kids[$i]->docblock->hasaccess) + $lt['access'] = $kids[$i]->docblock->tags['access'][0]->value; + else + $lt['access'] = 'public'; + + $lt['abstract'] = isset ($kids[$i]->docblock->tags['abstract'][0]); + + $list[] = $lt; + } + } else return false; + return $list; + } + + /** + * Return template-enabled list of inherited variables + * + * uses parserVar helper function getInheritedVars and generates a + * template-enabled list using getClassLink() + * @param parserVar $child class var + * @see getClassLink(), parserVar::getInheritedVars() + * @return array Format: + * <pre> + * array( + * array('parent_class' => link to parent class's documentation, + * 'ivars' => + * array( + * array('name' => inherited variable name, + * 'link' => link to inherited variable's documentation, + * 'default' => default value of inherited variable, + * 'sdesc' => summary of inherited variable), + * ...), + * ...) + * </pre> + */ + + function getFormattedInheritedVars($child) + { + $package = $child->docblock->package; + $subpackage = $child->docblock->subpackage; + $ivars = $child->getInheritedVars($this); + $results = array(); + if (!count($ivars)) return $results; + foreach($ivars as $parent => $vars) + { + $file = $vars['file']; + $vars = $vars['vars']; + $par = $this->classes->getClass($parent,$file); + if ($par) { + $package = $par->docblock->package; + } + usort($vars,array($this,"sortVar")); + $result['parent_class'] = $this->getClassLink($parent, $package); + if (!$result['parent_class']) { + $result['parent_class'] = $parent . ' (Internal Class)'; + } + foreach($vars as $var) + { + $info = array(); + + if ($var->docblock->hasaccess) { + $info['access'] = $var->docblock->tags['access'][0]->value; + } else { + $info['access'] = 'public'; + } + + $info['abstract'] = isset ($var->docblock->tags['abstract'][0]); + + $info['name'] = $var->getName(); + $info['link'] = $var->getLink($this); + if (!$info['link']) { + $info['link'] = $info['name']; + } + $info['default'] = $this->postProcess($var->getValue()); + if ($var->docblock) + $info['sdesc'] = $var->docblock->getSDesc($this); + $result["ivars"][] = $info; + } + $results[] = $result; + $result = array(); + } + return $results; + } + + /** + * Return template-enabled list of inherited methods + * + * uses parserMethod helper function getInheritedMethods and generates a + * template-enabled list using getClassLink() + * @param parserMethod $child class method + * @see getClassLink(), parserMethod::getInheritedMethods() + * @return array Format: + * <pre> + * array( + * array('parent_class' => link to parent class's documentation, + * 'ivars' => + * array( + * array('name' => inherited variable name, + * 'link' => link to inherited variable's documentation, + * 'function_call' => {@link parserMethod::getIntricateFunctionCall()} + * returned array, + * 'sdesc' => summary of inherited variable), + * ...), + * ...) + * </pre> + */ + + function getFormattedInheritedMethods($child) + { + $package = $child->docblock->package; + $subpackage = $child->docblock->subpackage; + $imethods = $child->getInheritedMethods($this); + $results = array(); + if (!count($imethods)) return $results; + foreach($imethods as $parent => $methods) + { + $file = $methods['file']; + $methods = $methods['methods']; + $par = $this->classes->getClass($parent,$file); + if ($par) { + $package = $par->docblock->package; + } + usort($methods,array($this,"sortMethod")); + $result['parent_class'] = $this->getClassLink($parent,$package); + if (!$result['parent_class']) { + $result['parent_class'] = $parent . ' (Internal Class)'; + } + foreach($methods as $method) + { + $info = array(); + + if ($method->docblock->hasaccess) { + $info['access'] = $method->docblock->tags['access'][0]->value; + } else { + $info['access'] = 'public'; + } + $info['abstract'] = isset ($method->docblock->tags['abstract'][0]); + + if ($method->isConstructor) $info['constructor'] = 1; + $returntype = 'void'; + if ($method->isConstructor) { + $returntype = $method->getClass(); + } + if ($method->docblock->return) { + $a = $method->docblock->return->Convert($this); + $returntype = $method->docblock->return->converted_returnType; + } + $info['function_return'] = $returntype; + $info['static'] = isset ($method->docblock->tags['static'][0]); + $info['link'] = $method->getLink($this); + if (!$info['link']) { + $info['link'] = $method->getFunctionCall(); + } + $info['name'] = $method->getName(); + if ($method->docblock) + $info['sdesc'] = $method->docblock->getSDesc($this); + $params = array(); + if (count($method->docblock->params)) + foreach($method->docblock->params as $param => $val) + { + $a = $val->Convert($this); + $params[$param] = array("var" => $param,"datatype" => $val->converted_returnType,"data" => $a); + } + + $info['function_call'] = $method->getIntricateFunctionCall($this,$params); + $result["imethods"][] = $info; + } + $results[] = $result; + $result = array(); + } + return $results; + } + + /** + * Return template-enabled list of inherited class constants + * + * uses parserConst helper function getInheritedConsts and generates a + * template-enabled list using getClassLink() + * @param parserConst $child class constant + * @see getClassLink(), parserMethod::getInheritedConsts() + * @return array Format: + * <pre> + * array( + * array('parent_class' => link to parent class's documentation, + * 'ivars' => + * array( + * array('name' => inherited constant name, + * 'link' => link to inherited constant's documentation, + * 'value' => constant value, + * 'sdesc' => summary of inherited constant), + * ...), + * ...) + * </pre> + */ + + function getFormattedInheritedConsts($child) + { + $package = $child->docblock->package; + $subpackage = $child->docblock->subpackage; + $ivars = $child->getInheritedConsts($this); + $results = array(); + if (!count($ivars)) return $results; + foreach($ivars as $parent => $vars) + { + $file = $vars['file']; + $vars = $vars['consts']; + $par = $this->classes->getClass($parent,$file); + if ($par) { + $package = $par->docblock->package; + } + usort($vars,array($this,"sortVar")); + $result['parent_class'] = $this->getClassLink($parent,$package); + if (!$result['parent_class']) { + $result['parent_class'] = $parent . ' (Internal Class)'; + } + foreach($vars as $var) + { + $info = array(); + + if ($var->docblock->hasaccess) { + $info['access'] = $var->docblock->tags['access'][0]->value; + } else { + $info['access'] = 'public'; + } + $info['name'] = $var->getName(); + $info['link'] = $var->getLink($this); + if (!$info['link']) { + $info['link'] = $info['name'] . ' = ' . $var->getValue(); + } + $info['value'] = $this->postProcess($var->getValue()); + if ($var->docblock) + $info['sdesc'] = $var->docblock->getSDesc($this); + $result["iconsts"][] = $info; + } + $results[] = $result; + $result = array(); + } + return $results; + } + + /** + * Return a Smarty template object to operate with + * + * This returns a Smarty template with pre-initialized variables for use. + * If the method "SmartyInit()" exists, it is called. + * @return Smarty + */ + function &newSmarty() + { + $templ = new Smarty; + $templ->use_sub_dirs = false; + $templ->template_dir = realpath($this->smarty_dir . PATH_DELIMITER . 'templates'); + $templatename = get_class($this) . $this->templateName; + if (!file_exists($this->targetDir . DIRECTORY_SEPARATOR . md5($templatename))) { + // we'll delete this on finishing conversion + $this->_compiledDir[$this->targetDir . DIRECTORY_SEPARATOR . md5($templatename)] = 1; + mkdir($this->targetDir . DIRECTORY_SEPARATOR . md5($templatename),0775); + } + $templ->compile_dir = realpath($this->targetDir . PATH_DELIMITER . md5($templatename)); + $templ->config_dir = realpath($this->smarty_dir . PATH_DELIMITER . 'configs'); + $templ->assign("date",date("r",time())); + $templ->assign("maintitle",$this->title); + $templ->assign("package",$this->package); + $templ->assign("phpdocversion",PHPDOCUMENTOR_VER); + $templ->assign("phpdocwebsite",PHPDOCUMENTOR_WEBSITE); + $templ->assign("subpackage",$this->subpackage); + if (method_exists($this,'SmartyInit')) return $this->SmartyInit($templ); + return $templ; + } + + /** + * Finish up parsing/cleanup directories + */ + function cleanup() + { + foreach ($this->_compiledDir as $dir => $one) { + $this->_rmdir($dir); + } + } + + /** + * Completely remove a directory and its contents + * + * @param string $directory + */ + function _rmdir($directory) + { + $handle = @opendir($directory); + if ($handle) { + while (false !== ($file = readdir($handle))) { + if ($file == '.' || $file == '..') { + continue; + } + if (is_dir($directory . DIRECTORY_SEPARATOR . $file)) { + $this->_rmdir($directory . DIRECTORY_SEPARATOR . $file); + } + @unlink($directory . DIRECTORY_SEPARATOR . $file); + } + closedir($handle); + @rmdir($directory); + } + } + + /** + * do all necessary output + * @see Converter + * @abstract + */ + function Output($title) + { + phpDocumentor_out("WARNING: Generic Converter::Output was used, no output will be generated"); + } + + /** + * Set the template directory with a different template base directory + * @tutorial phpDocumentor.howto.pkg#using.command-line.templatebase + * @param string template base directory + * @param string template name + */ + function setTemplateBase($base, $dir) + { + // remove trailing /'s from the base path, if any + $base = str_replace('\\','/',$base); + while ($base{strlen($base) - 1} == '/') $base = substr($base,0,strlen($base) - 1); + $this->templateName = substr($dir,0,strlen($dir) - 1); + $this->templateDir = $base . "/Converters/" . $this->outputformat . "/" . $this->name . "/templates/" . $dir; + if (!is_dir($this->templateDir)) + { + addErrorDie(PDERROR_TEMPLATEDIR_DOESNT_EXIST, $this->templateDir); + } + + $this->smarty_dir = $this->templateDir; + if (file_exists($this->templateDir . PATH_DELIMITER . 'options.ini')) + { + // retrieve template options, allow array creation + $this->template_options = phpDocumentor_parse_ini_file($this->templateDir . PATH_DELIMITER . 'options.ini',true); + } + } + + /** + * sets the template directory based on the {@link $outputformat} and {@link $name} + * Also sets {@link $templateName} to the $dir parameter + * @param string subdirectory + */ + function setTemplateDir($dir) + { + if ('@DATA-DIR@' != '@'.'DATA-DIR@') { + $templateBase = str_replace('\\', '/', '@DATA-DIR@/PhpDocumentor/phpDocumentor'); + } else { + $templateBase = str_replace('\\','/',$GLOBALS['_phpDocumentor_install_dir']) . '/phpDocumentor'; + } + $this->setTemplateBase($templateBase, $dir); + } + + /** + * Get the absolute path to the converter's base directory + * @return string + */ + function getConverterDir() + { + if ('@DATA-DIR@' != '@' . 'DATA-DIR@') { + return str_replace('\\', '/', "@DATA-DIR@/PhpDocumentor/phpDocumentor/Converters/") . $this->outputformat . "/" . $this->name; + } else { + return str_replace('\\','/',$GLOBALS['_phpDocumentor_install_dir']) ."/phpDocumentor/Converters/" . $this->outputformat . "/" . $this->name; + } + } + + /** + * Parse a global variable's default value for class initialization. + * + * If a global variable's default value is "new class" as in: + * <code> + * $globalvar = new Parser + * </code> + * This method will document it not as "new Parser" but instead as + * "new {@link Parser}". For examples, see {@link phpdoc.inc}. + * Many global variables are classes, and phpDocumentor links to their + * documentation + * @return string default global variable value with link to class if + * it's "new Class" + * @param string default value of a global variable. + */ + function getGlobalValue($value) + { + if (strpos($value,'new') === 0) + { + preg_match('/new([^(]*)((?:.|\r|\n)*)/',$value,$newval); + if (isset($newval[1])) + { + $a = Converter::getLink(trim($newval[1])); + if (!isset($newval[2])) $newval[2] = ''; + if ($a && phpDocumentor_get_class($a) == 'classlink') $value = 'new '.$this->returnSee($a) . + $this->postProcess($newval[2]); + } + return $value; + } + return $this->postProcess($value); + } + + /** + * Parse an include's file to see if it is a file documented in this project + * + * Although not very smart yet, this method will try to look for the + * included file file.ext: + * + * <code> + * include ("file.ext"); + * </code> + * + * If it finds it, it will return a link to the file's documentation. As of + * 1.2.0rc1, phpDocumentor is smarty enough to find these cases: + * <ul> + * <li>absolute path to file</li> + * <li>./file.ext or ../file.ext</li> + * <li>relpath/to/file.ext if relpath is a subdirectory of the base parse + * directory</li> + * </ul> + * For examples, see {@link Setup.inc.php} includes. + * Every include auto-links to the documentation for the file that is included + * @return string included file with link to docs for file, if found + * @param string file included by include statement. + * @param string path of file that has the include statement + */ + function getIncludeValue($value, $ipath) + { + preg_match('/"([^"\']*\.[^"\']*)"/',$value,$match); + if (!isset($match[1])) + preg_match('/\'([^"\']*\.[^"\']*)\'/',$value,$match); + if (isset($match[1])) + { + $fancy_per = $this->proceduralpages->pathMatchesParsedFile($match[1],$ipath); + if ($fancy_per) + { + $link = $this->addLink($fancy_per); + if (is_object($link) && phpDocumentor_get_class($link) == 'pagelink' && + isset($this->all_packages[$link->package])) + { + $value = $this->returnSee($link,$value); + } + } else + { + $per = Converter::getLink($match[1]); + if (is_object($per) && phpDocumentor_get_class($per) == 'pagelink') + $value = $this->returnSee($per); + } + } + return $value; + } + + /** + * Recursively creates all subdirectories that don't exist in the $dir path + * @param string $dir + */ + function createParentDir($dir) + { + if (empty($dir)) return; + $tmp = explode(SMART_PATH_DELIMITER,$dir); + array_pop($tmp); + $parent = implode(SMART_PATH_DELIMITER,$tmp); + if ($parent != '' && !file_exists($parent)) + { + $test = @mkdir($parent,0775); + if (!$test) + { + $this->createParentDir($parent); + $test = @mkdir($parent,0775); + phpDocumentor_out("Creating Parent Directory $parent\n"); + } else + { + phpDocumentor_out("Creating Parent Directory $parent\n"); + } + } + } + + /** + * Sets the output directory for generated documentation + * + * As of 1.3.0RC6, this also sets the compiled templates directory inside + * the target directory + * @param string $dir the output directory + */ + function setTargetDir($dir) + { + if (strlen($dir) > 0) + { + $this->targetDir = $dir; + // if directory does exist create it, this should have more error checking in the future + if (!file_exists($dir)) + { + $tmp = str_replace(array("/","\\"),SMART_PATH_DELIMITER,$dir); + if (substr($tmp,-1) == SMART_PATH_DELIMITER) + { + $tmp = substr($tmp,0,(strlen($tmp)-1)); + } + $this->createParentDir($tmp); + phpDocumentor_out("Creating Directory $dir\n"); + mkdir($dir,0775); + } elseif (!is_dir($dir)) + { + echo "Output path: '$dir' is not a directory\n"; + die(); + } + } else { + echo "a target directory must be specified\n try phpdoc -h\n"; + die(); + } + } + + /** + * Writes a file to target dir + * @param string + * @param string + * @param boolean true if the data is binary and not text + */ + function writeFile($file,$data,$binary = false) + { + if (!file_exists($this->targetDir)) + { + mkdir($this->targetDir,0775); + } + $string = ''; + if ($binary) $string = 'binary file '; + phpDocumentor_out(" Writing $string".$this->targetDir . PATH_DELIMITER . $file . "\n"); + flush(); + $write = 'w'; + if ($binary) $write = 'wb'; + $fp = fopen($this->targetDir . PATH_DELIMITER . $file,$write); + set_file_buffer( $fp, 0 ); + fwrite($fp,$data,strlen($data)); + fclose($fp); + } + + /** + * Copies a file from the template directory to the target directory + * thanks to Robert Hoffmann for this fix + * @param string + */ + function copyFile($file, $subdir = '') + { + if (!file_exists($this->targetDir)) + { + mkdir($this->targetDir,0775); + } + copy($this->templateDir . $subdir . PATH_DELIMITER . $file, $this->targetDir . PATH_DELIMITER . $file); + } + + /** + * Return parserStringWithInlineTags::Convert() cache state + * @see parserStringWithInlineTags::Convert() + * @abstract + */ + function getState() + { + return true; + } + + /** + * Compare parserStringWithInlineTags::Convert() cache state to $state + * @param mixed + * @see parserStringWithInlineTags::Convert() + * @abstract + */ + function checkState($state) + { + return true; + } + +} + +/** + * @access private + * @see Converter::getSortedClassTreeFromClass() + */ +function rootcmp($a, $b) +{ + return strnatcasecmp($a['class'],$b['class']); +} + +/** + * @access private + * @global string used to make the first tutorials converted the default package tutorials + */ +function tutorialcmp($a, $b) +{ + global $phpDocumentor_DefaultPackageName; + if ($a == $phpDocumentor_DefaultPackageName) return -1; + if ($b == $phpDocumentor_DefaultPackageName) return 1; + return strnatcasecmp($a, $b); +} + +/** + * smart htmlentities, doesn't entity the allowed tags list + * Since version 1.1, this function uses htmlspecialchars instead of + * htmlentities, for international support + * This function has been replaced by functionality in {@link ParserDescCleanup.inc} + * @param string $s + * @return string browser-displayable page + * @deprecated As of v1.2, No longer needed, as valid tags are parsed out of the source, + * and everything else is {@link Converter::postProcess()} handled + */ +function adv_htmlentities($s) +{ + return; + global $phpDocumentor___html,$_phpDocumentor_html_allowed; + $result = htmlspecialchars($s); + $entities = array_flip(get_html_translation_table(HTML_SPECIALCHARS)); + $result = strtr($result,$phpDocumentor___html); + $matches = array(); + preg_match_all('/(<img.*>)/U',$result,$matches); + for($i=0;$i<count($matches[1]);$i++) + { + $result = str_replace($matches[1][$i],strtr($matches[1][$i],array_flip(get_html_translation_table(HTML_SPECIALCHARS))),$result); + } + preg_match_all('/(<font.*>)/U',$result,$matches); + for($i=0;$i<count($matches[1]);$i++) + { + $result = str_replace($matches[1][$i],strtr($matches[1][$i],array_flip(get_html_translation_table(HTML_SPECIALCHARS))),$result); + } + preg_match_all('/(<ol.*>)/U',$result,$matches); + for($i=0;$i<count($matches[1]);$i++) + { + $result = str_replace($matches[1][$i],strtr($matches[1][$i],array_flip(get_html_translation_table(HTML_SPECIALCHARS))),$result); + } + preg_match_all('/(<ul.*>)/U',$result,$matches); + for($i=0;$i<count($matches[1]);$i++) + { + $result = str_replace($matches[1][$i],strtr($matches[1][$i],array_flip(get_html_translation_table(HTML_SPECIALCHARS))),$result); + } + preg_match_all('/(<li.*>)/U',$result,$matches); + for($i=0;$i<count($matches[1]);$i++) + { + $result = str_replace($matches[1][$i],strtr($matches[1][$i],array_flip(get_html_translation_table(HTML_SPECIALCHARS))),$result); + } + preg_match_all('/(<a .*>)/U',$result,$matches); + for($i=0;$i<count($matches[1]);$i++) + { + $result = str_replace($matches[1][$i],strtr($matches[1][$i],array_flip(get_html_translation_table(HTML_SPECIALCHARS))),$result); + } + return $result; +} + +/** + * Used solely for setting up the @uses list + * @package ignore + * @ignore + */ +class __dummyConverter extends Converter +{ + function setTemplateDir(){} + function setTargetDir(){} + function getPageName(&$element) + { + if (phpDocumentor_get_class($element) == 'parserpage') return '_'.$element->getName(); + return '_'.$element->parent->getName(); + } +} +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/CHMdefaultConverter.inc b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/CHMdefaultConverter.inc new file mode 100755 index 00000000..b9679a27 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/CHMdefaultConverter.inc @@ -0,0 +1,1899 @@ +<?php +/** + * CHM (Compiled Help Manual) output converter for Smarty Template. + * + * phpDocumentor :: automatic documentation generator + * + * PHP versions 4 and 5 + * + * Copyright (c) 2003-2006 Andrew Eddie, Greg Beaver + * + * LICENSE: + * + * This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General + * Public License as published by the Free Software Foundation; + * either version 2.1 of the License, or (at your option) any + * later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package Converters + * @subpackage CHMdefault + * @author Joshua Eichorn <jeichorn@phpdoc.org> + * @author Greg Beaver <cellog@php.net> + * @copyright 2000-2006 Joshua Eichorn, Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version CVS: $Id: CHMdefaultConverter.inc 234145 2007-04-19 20:20:57Z ashnazg $ + * @filesource + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @since 1.0rc1 + */ +/** + * Generates files that MS HTML Help Worshop can use to create a MS Windows + * compiled help file (CHM) + * + * The free MS HTML Help compiler takes the project file (phpdoc.hhp) and reads + * the table of contents file specified in the project (which is always contents.hhc + * in phpDocumentor). When the converter reaches stable state, it will also + * output an index file index.hhk. The free download for MS HTML Help Workshop + * is available below + * @link http://www.microsoft.com/downloads/release.asp?releaseid=33071 MS HTML Help Workshop download + * @package Converters + * @subpackage CHMdefault + * @author Greg Beaver <cellog@php.net> + * @since 1.0rc1 + * @version $Revision: 234145 $ + */ +class CHMdefaultConverter extends Converter +{ + /** + * CHMdefaultConverter wants elements sorted by type as well as alphabetically + * @see Converter::$sort_page_contents_by_type + * @var boolean + */ + var $sort_page_contents_by_type = true; + /** @var string */ + var $outputformat = 'CHM'; + /** @var string */ + var $name = 'default'; + /** + * indexes of elements by package that need to be generated + * @var array + */ + var $leftindex = array('classes' => true, 'pages' => true, 'functions' => true, 'defines' => false, 'globals' => false); + + /** + * output directory for the current procedural page being processed + * @var string + */ + var $page_dir; + + /** + * target directory passed on the command-line. + * {@link $targetDir} is malleable, always adding package/ and package/subpackage/ subdirectories onto it. + * @var string + */ + var $base_dir; + + /** + * output directory for the current class being processed + * @var string + */ + var $class_dir; + + /** + * array of converted package page names. + * Used to link to the package page in the left index + * @var array Format: array(package => 1) + */ + var $package_pages = array(); + + /** + * controls formatting of parser informative output + * + * Converter prints: + * "Converting /path/to/file.php... Procedural Page Elements... Classes..." + * Since CHMdefaultConverter outputs files while converting, it needs to send a \n to start a new line. However, if there + * is more than one class, output is messy, with multiple \n's just between class file output. This variable prevents that + * and is purely cosmetic + * @var boolean + */ + var $juststarted = false; + + /** + * contains all of the template procedural page element loop data needed for the current template + * @var array + */ + var $current; + + /** + * contains all of the template class element loop data needed for the current template + * @var array + */ + var $currentclass; + var $wrote = false; + var $ric_set = array(); + /** + * Table of Contents entry for index.hhk + * @var array + */ + var $KLinks = array(); + + /** + * sets {@link $base_dir} to $targetDir + * @see Converter() + */ + function CHMdefaultConverter(&$allp, &$packp, &$classes, &$procpages, $po, $pp, $qm, $targetDir, $templateDir, $title) + { + Converter::Converter($allp, $packp, $classes, $procpages,$po, $pp, $qm, $targetDir, $templateDir, $title); + $this->base_dir = $targetDir; + } + + /** + * @deprecated in favor of PHP 4.3.0+ tokenizer-based source highlighting + */ + function unmangle($sourcecode) + { + $sourcecode = str_replace('<code>','<pre>',$sourcecode); + $sourcecode = str_replace('</code>','</pre>',$sourcecode); + $sourcecode = str_replace('<br />',"\n",$sourcecode); + $sourcecode = str_replace(' ',' ',$sourcecode); + $sourcecode = str_replace('<','<',$sourcecode); + $sourcecode = str_replace('>','>',$sourcecode); + $sourcecode = str_replace('&','&',$sourcecode); + return $sourcecode; + } + + /** + * @param string full path to the source file + * @param string fully highlighted source code + */ + function writeSource($path, $value) + { + $templ = &$this->newSmarty(); + $pathinfo = $this->proceduralpages->getPathInfo($path, $this); + $templ->assign('source',$value); + $templ->assign('package',$pathinfo['package']); + $templ->assign('subpackage',$pathinfo['subpackage']); + $templ->assign('name',$pathinfo['name']); + $templ->assign('source_loc',$pathinfo['source_loc']); + $templ->assign('docs',$pathinfo['docs']); + $templ->assign("subdir",'../'); + $templ->register_outputfilter('CHMdefault_outputfilter'); + $this->setTargetDir($this->getFileSourcePath($this->base_dir)); + $this->addSourceTOC($pathinfo['name'],$this->getFileSourceName($path),$pathinfo['package'],$pathinfo['subpackage'], true); + phpDocumentor_out("\n"); + $this->setSourcePaths($path); + $this->writefile($this->getFileSourceName($path).'.html',$templ->fetch('filesource.tpl')); + } + + function writeExample($title, $path, $source) + { + $templ = &$this->newSmarty(); + $templ->assign('source',$source); + if (empty($title)) + { + $title = 'example'; + addWarning(PDERROR_EMPTY_EXAMPLE_TITLE, $path, $title); + } + $templ->assign('title',$title); + $templ->assign('file',$path); + $templ->assign("subdir",'../'); + $templ->register_outputfilter('CHMdefault_outputfilter'); + $pathinfo = $this->proceduralpages->getPathInfo($path, $this); + $this->setTargetDir($this->base_dir . PATH_DELIMITER . '__examplesource'); + $this->addSourceTOC($title,'exsource_'.$path,$pathinfo['package'],$pathinfo['subpackage'], false); + phpDocumentor_out("\n"); + $this->writefile('exsource_'.$path.'.html',$templ->fetch('examplesource.tpl')); + } + + function getExampleLink($path, $title) + { + return $this->returnLink('{$subdir}__examplesource' . PATH_DELIMITER . 'exsource_'.$path.'.html',$title); + } + + function getSourceLink($path) + { + return $this->returnLink('{$subdir}__filesource/' . + $this->getFileSourceName($path).'.html','Source Code for this file'); + } + + /** + * Retrieve a Converter-specific anchor to a segment of a source code file + * parsed via a {@tutorial tags.filesource.pkg} tag. + * @param string full path to source file + * @param string name of anchor + * @param string link text, if this is a link + * @param boolean returns either a link or a destination based on this + * parameter + * @return string link to an anchor, or the anchor + */ + function getSourceAnchor($sourcefile,$anchor,$text = '',$link = false) + { + if ($link) { + return $this->returnLink('{$subdir}__filesource/' . + $this->getFileSourceName($sourcefile) . '.html#a' . $anchor, $text); + } else { + return '<a name="a'.$anchor.'"></a>'; + } + } + + + /** + * Return a line of highlighted source code with formatted line number + * + * If the $path is a full path, then an anchor to the line number will be + * added as well + * @param integer line number + * @param string highlighted source code line + * @param false|string full path to @filesource file this line is a part of, + * if this is a single line from a complete file. + * @return string formatted source code line with line number + */ + function sourceLine($linenumber, $line, $path = false) + { + $extra = ''; + if (strlen(str_replace("\n", '', $line)) == 0) { + $extra = ' '; + } + if ($path) + { + return '<li><div class="src-line">' . $this->getSourceAnchor($path, $linenumber) . + str_replace("\n",'',$line) . $extra . + "</div></li>\n"; + } else + { + return '<li><div class="src-line">' . str_replace("\n",'',$line) . + "$extra</div></li>\n"; + } + } + + /** + * Used to convert the <<code>> tag in a docblock + * @param string + * @param boolean + * @return string + */ + function ProgramExample($example, $tutorial = false, $inlinesourceparse = null/*false*/, + $class = null/*false*/, $linenum = null/*false*/, $filesourcepath = null/*false*/) + { + return $this->PreserveWhiteSpace(parent::ProgramExample($example, $tutorial, $inlinesourceparse, $class, $linenum, $filesourcepath)); + } + + /** + * @param string + */ + function TutorialExample($example) + { + $trans = $this->template_options['desctranslate']; + $this->template_options['desctranslate'] = array(); + $example = '<ol>' . parent::TutorialExample($example) + .'</ol>'; + $this->template_options['desctranslate'] = $trans; + if (!isset($this->template_options['desctranslate'])) return $example; + if (!isset($this->template_options['desctranslate']['code'])) return $example; + $example = $this->template_options['desctranslate']['code'] . $example; + if (!isset($this->template_options['desctranslate']['/code'])) return $example; + return $example . $this->template_options['desctranslate']['/code']; + } + + function getCurrentPageLink() + { + return $this->curname . '.html'; + } + + /** + * Uses htmlspecialchars() on the input + */ + function postProcess($text) + { + if ($this->highlightingSource) { + return str_replace(array(' ',"\t"), array(' ', ' '), + htmlspecialchars($text)); + } + return htmlspecialchars($text); + } + + /** + * Use the template tutorial_toc.tpl to generate a table of contents for HTML + * @return string table of contents formatted for use in the current output format + * @param array format: array(array('tagname' => section, 'link' => returnsee link, 'id' => anchor name, 'title' => from title tag),...) + */ + function formatTutorialTOC($toc) + { + $template = &$this->newSmarty(); + $template->assign('toc',$toc); + return $template->fetch('tutorial_toc.tpl'); + } + + function &SmartyInit(&$templ) + { + if (!isset($this->package_index)) + foreach($this->all_packages as $key => $val) + { + if (isset($this->pkg_elements[$key])) + { + if (!isset($start)) $start = $key; + $this->package_index[] = array('link' => "li_$key.html", 'title' => $key); + } + } + $templ->assign("packageindex",$this->package_index); + $templ->assign("subdir",''); + return $templ; + } + + + /** + * Writes out the template file of {@link $class_data} and unsets the template to save memory + * @see registerCurrentClass() + * @see parent::endClass() + */ + function endClass() + { + $a = '../'; + if (!empty($this->subpackage)) $a .= '../'; + if ($this->juststarted) + { + $this->juststarted = false; + phpDocumentor_out("\n"); + flush(); + } + $this->setTargetDir($this->base_dir . PATH_DELIMITER . $this->class_dir); + $this->class_data->assign("subdir",$a); + $this->class_data->register_outputfilter('CHMdefault_outputfilter'); + $this->addTOC($this->class,$this->class,$this->package,$this->subpackage, true); + $this->writefile($this->class . '.html',$this->class_data->fetch('class.tpl')); + unset($this->class_data); + } + + /** + * Writes out the template file of {@link $page_data} and unsets the template to save memory + * @see registerCurrent() + * @see parent::endPage() + */ + function endPage() + { + $this->package = $this->curpage->package; + $this->subpackage = $this->curpage->subpackage; + $a = '../'; + if (!empty($this->subpackage)) $a .= '../'; + $this->setTargetDir($this->base_dir . PATH_DELIMITER . $this->page_dir); + $this->page_data->assign("package",$this->package); + $this->page_data->assign("subdir",$a); + $this->page_data->register_outputfilter('CHMdefault_outputfilter'); + $this->addTOC($this->curpage->file,$this->page,$this->package,$this->subpackage); + $this->writefile($this->page . '.html',$this->page_data->fetch('page.tpl')); + unset($this->page_data); + } + + /** + * @param string + * @param string + * @return string <a href="'.$link.'">'.$text.'</a> + */ + function returnLink($link,$text) + { + return '<a href="'.$link.'">'.$text.'</a>'; + } + + /** + * CHMdefaultConverter chooses to format both package indexes and the complete index here + * + * This function formats output for the elementindex.html and pkgelementindex.html template files. It then + * writes them to the target directory + * @see generateElementIndex(), generatePkgElementIndex() + */ + function formatPkgIndex() + { + list($package_indexes,$packages,$mletters) = $this->generatePkgElementIndexes(); + for($i=0;$i<count($package_indexes);$i++) + { + $template = &$this->newSmarty(); + $this->package = $package_indexes[$i]['package']; + $this->subpackage = ''; + $template->assign("index",$package_indexes[$i]['pindex']); + $template->assign("package",$package_indexes[$i]['package']); + $template->assign("letters",$mletters[$package_indexes[$i]['package']]); + $template->assign("title","Package ".$package_indexes[$i]['package']." Element Index"); + $template->assign("subdir",'../'); + $template->register_outputfilter('CHMdefault_outputfilter'); + $this->setTargetDir($this->base_dir . PATH_DELIMITER . $package_indexes[$i]['package']); + $this->addTOC($package_indexes[$i]['package']." Alphabetical Index",'elementindex_'.$package_indexes[$i]['package'],$package_indexes[$i]['package'],''); + $this->writefile('elementindex_'.$package_indexes[$i]['package'].'.html',$template->fetch('pkgelementindex.tpl')); + } + phpDocumentor_out("\n"); + flush(); + } + + /** + * CHMdefaultConverter uses this function to format template index.html and packages.html + * + * This function generates the package list from {@link $all_packages}, eliminating any + * packages that don't have any entries in their package index (no files at all, due to @ignore + * or other factors). Then it uses the default package name as the first package index to display. + * It sets the right pane to be either a blank file with instructions on making package-level docs, + * or the package-level docs for the default package. + * @global string Used to set the starting package to display + */ + function formatIndex() + { + global $phpDocumentor_DefaultPackageName; + list($elindex,$mletters) = $this->generateElementIndex(); + $template = &$this->newSmarty(); + $template->assign("index",$elindex); + $template->assign("letters",$mletters); + $template->assign("title","Element Index"); + $template->assign("date",date("r",time())); + $template->register_outputfilter('CHMdefault_outputfilter'); + phpDocumentor_out("\n"); + flush(); + $this->setTargetDir($this->base_dir); + $this->addTOC("Alphabetical Index Of All Elements",'elementindex',"Index",''); + $this->writefile('elementindex.html',$template->fetch('elementindex.tpl')); + usort($this->package_index,"CHMdefault_pindexcmp"); + $index = &$this->newSmarty(); + foreach($this->all_packages as $key => $val) + { + if (isset($this->pkg_elements[$key])) + { + if (!isset($start)) $start = $key; + if (!isset($this->package_pages[$key])) $this->writeNewPPage($key); + } + } + $this->setTargetDir($this->base_dir); + // Created index.html + if (isset($this->pkg_elements[$phpDocumentor_DefaultPackageName])) $start = $phpDocumentor_DefaultPackageName; + $this->package = $start; + $this->subpackage = ''; + $setalready = false; + if (isset($this->tutorials[$start]['']['pkg'])) + { + foreach($this->tutorials[$start]['']['pkg'] as $tute) + { + if ($tute->name == $start . '.pkg') + { + $setalready = true; + $this->addTOC("Start page",$start.'/tutorial_'.$tute->name,"Index",''); + } + } + } + if (!$setalready) + { + if (isset($this->package_pages[$start])) + { + $this->addTOC("Start page",'package_'.$start,"Index",''); + } + else + { + $index->assign("blank","blank"); + $blank = &$this->newSmarty(); + $blank->assign('package',$phpDocumentor_DefaultPackageName); + $this->addTOC("Start page",'blank',"Index",''); + $this->writefile("blank.html",$blank->fetch('blank.tpl')); + Converter::writefile('index.html',$blank->fetch('tutorial.tpl')); + } + } + phpDocumentor_out("\n"); + flush(); + + unset($index); + } + + function writeNewPPage($key) + { + return; + $template = &$this->newSmarty(); + $this->package = $key; + $this->subpackage = ''; + $template->assign("date",date("r",time())); + $template->assign("title",$this->title); + $template->assign("package",$key); + $template->register_outputfilter('CHMdefault_outputfilter'); + phpDocumentor_out("\n"); + flush(); + $this->setTargetDir($this->base_dir); + + $this->addTOC("$key Index","li_$key",$key,''); + $this->writefile("li_$key.html",$template->fetch('index.tpl')); + unset($template); + } + + /** + * Generate indexes for li_package.html and classtree output files + * + * This function generates the li_package.html files from the template file left.html. It does this by + * iterating through each of the $page_elements, $class_elements and $function_elements arrays to retrieve + * the pre-sorted {@link abstractLink} descendants needed for index generation. Conversion of these links to + * text is done by {@link returnSee()}. The {@link $local} parameter is set to false to ensure that paths are correct. + * + * Then it uses {@link generateFormattedClassTrees()} to create class trees from the template file classtrees.html. Output + * filename is classtrees_packagename.html. This function also unsets {@link $elements} and {@link $pkg_elements} to free + * up the considerable memory these two class vars use + * @see $page_elements, $class_elements, $function_elements + */ + function formatLeftIndex() + { + phpDocumentor_out("\n"); + flush(); + $this->setTargetDir($this->base_dir); + if (0)//!isset($this->left)) + { + debug("Nothing parsed, check the command-line"); + die(); + } + foreach($this->all_packages as $package => $rest) + { + if (!isset($this->pkg_elements[$package])) continue; + + // Create class tree page + $template = &$this->newSmarty(); + $template->assign("classtrees",$this->generateFormattedClassTrees($package)); + $template->assign("package",$package); + $template->assign("date",date("r",time())); + $template->register_outputfilter('CHMdefault_outputfilter'); + $this->addTOC("$package Class Trees","classtrees_$package",$package,''); + $this->writefile("classtrees_$package.html",$template->fetch('classtrees.tpl')); + phpDocumentor_out("\n"); + flush(); + } + // free up considerable memory + unset($this->elements); + unset($this->pkg_elements); + } + + /** + * This function takes an {@link abstractLink} descendant and returns an html link + * + * @param abstractLink a descendant of abstractlink should be passed, and never text + * @param string text to display in the link + * @param boolean this parameter is not used, and is deprecated + * @param boolean determines whether the returned text is enclosed in an <a> tag + */ + function returnSee(&$element, $eltext = false, $with_a = true) + { + if (!$element) return false; + if (!$with_a) return $this->getId($element, false); + if (!$eltext) + { + $eltext = ''; + switch($element->type) + { + case 'tutorial' : + $eltext = strip_tags($element->title); + break; + case 'method' : + case 'var' : + case 'const' : + $eltext .= $element->class.'::'; + case 'page' : + case 'define' : + case 'class' : + case 'function' : + case 'global' : + default : + $eltext .= $element->name; + if ($element->type == 'function' || $element->type == 'method') $eltext .= '()'; + break; + } + } + return '<a href="'.$this->getId($element).'">'.$eltext.'</a>'; + } + + function getId($element, $fullpath = true) + { + if (phpDocumentor_get_class($element) == 'parserdata') + { + $element = $this->addLink($element->parent); + $elp = $element->parent; + } elseif (is_a($element, 'parserbase')) + { + $elp = $element; + $element = $this->addLink($element); + } + $c = ''; + if (!empty($element->subpackage)) + { + $c = '/'.$element->subpackage; + } + $b = '{$subdir}'; + switch ($element->type) + { + case 'page' : + if ($fullpath) + return $b.$element->package.$c.'/'.$element->fileAlias.'.html'; + return 'top'; + break; + case 'define' : + case 'global' : + case 'function' : + if ($fullpath) + return $b.$element->package.$c.'/'.$element->fileAlias.'.html#'.$element->type.$element->name; + return $element->type.$element->name; + break; + case 'class' : + if ($fullpath) + return $b.$element->package.$c.'/'.$element->name.'.html'; + return 'top'; + break; + case 'method' : + case 'var' : + case 'const' : + if ($fullpath) + return $b.$element->package.$c.'/'.$element->class.'.html#'.$element->type.$element->name; + return $element->type.$element->name; + break; + case 'tutorial' : + $d = ''; + if ($element->section) + { + $d = '#'.$element->section; + } + return $b.$element->package.$c.'/tutorial_'.$element->name.'.html'.$d; + } + } + + function ConvertTodoList() + { + $todolist = array(); + foreach($this->todoList as $package => $alltodos) + { + foreach($alltodos as $todos) + { + $converted = array(); + $converted['link'] = $this->returnSee($todos[0]); + if (!is_array($todos[1])) + { + $converted['todos'][] = $todos[1]->Convert($this); + } else + { + foreach($todos[1] as $todo) + { + $converted['todos'][] = $todo->Convert($this); + } + } + $todolist[$package][] = $converted; + } + } + $templ = &$this->newSmarty(); + $templ->assign('todos',$todolist); + $templ->register_outputfilter('CHMdefault_outputfilter'); + $this->setTargetDir($this->base_dir); + $this->addTOC('Todo List','todolist','Index','',false,true); + $this->addKLink('Todo List', 'todolist', '', 'Development'); + $this->writefile('todolist.html',$templ->fetch('todolist.tpl')); + } + + /** + * Convert README/INSTALL/CHANGELOG file contents to output format + * @param README|INSTALL|CHANGELOG + * @param string contents of the file + */ + function Convert_RIC($name, $contents) + { + $template = &$this->newSmarty(); + $template->assign('contents',$contents); + $template->assign('name',$name); + $this->setTargetDir($this->base_dir); + $this->addTOC($name,'ric_'.$name,'Index','',false,true); + $this->addKLink($name, 'ric_'.$name, '', 'Development'); + $this->writefile('ric_'.$name . '.html',$template->fetch('ric.tpl')); + $this->ric_set[$name] = true; + } + + /** + * Create errors.html template file output + * + * This method takes all parsing errors and warnings and spits them out ordered by file and line number. + * @global ErrorTracker We'll be using it's output facility + */ + function ConvertErrorLog() + { + global $phpDocumentor_errors; + $allfiles = array(); + $files = array(); + $warnings = $phpDocumentor_errors->returnWarnings(); + $errors = $phpDocumentor_errors->returnErrors(); + $template = &$this->newSmarty(); + foreach($warnings as $warning) + { + $file = '##none'; + $linenum = 'Warning'; + if ($warning->file) + { + $file = $warning->file; + $allfiles[$file] = 1; + $linenum .= ' on line '.$warning->linenum; + } + $files[$file]['warnings'][] = array('name' => $linenum, 'listing' => $warning->data); + } + foreach($errors as $error) + { + $file = '##none'; + $linenum = 'Error'; + if ($error->file) + { + $file = $error->file; + $allfiles[$file] = 1; + $linenum .= ' on line '.$error->linenum; + } + $files[$file]['errors'][] = array('name' => $linenum, 'listing' => $error->data); + } + $i=1; + $af = array(); + foreach($allfiles as $file => $num) + { + $af[$i++] = $file; + } + $allfiles = $af; + usort($allfiles,'strnatcasecmp'); + $allfiles[0] = "Post-parsing"; + foreach($allfiles as $i => $a) + { + $allfiles[$i] = array('file' => $a); + } + $out = array(); + foreach($files as $file => $data) + { + if ($file == '##none') $file = 'Post-parsing'; + $out[$file] = $data; + } + $template->assign("files",$allfiles); + $template->assign("all",$out); + $template->assign("title","phpDocumentor Parser Errors and Warnings"); + $this->setTargetDir($this->base_dir); + $this->writefile("errors.html",$template->fetch('errors.tpl')); + unset($template); + phpDocumentor_out("\n\nTo view errors and warnings, look at ".$this->base_dir. PATH_DELIMITER . "errors.html\n"); + flush(); + } + + function getCData($value) + { + return '<pre>'.htmlentities($value).'</pre>'; + } + + function getTutorialId($package,$subpackage,$tutorial,$id) + { + return $id; + } + + /** + * Converts package page and sets its package as used in {@link $package_pages} + * @param parserPackagePage + */ + function convertPackagepage(&$element) + { + phpDocumentor_out("\n"); + flush(); + $this->package = $element->package; + $this->subpackage = ''; + $contents = $element->Convert($this); + $this->package_pages[$element->package] = str_replace('{$subdir}','../',$contents); + phpDocumentor_out("\n"); + flush(); + $this->setTargetDir($this->base_dir . PATH_DELIMITER . $element->package); + $this->addTOC($element->package." Tutorial",'package_'.$element->package,$element->package,''); + $this->writeFile('package_'.$element->package.'.html',str_replace('{$subdir}','../',$contents)); + $this->setTargetDir($this->base_dir); + Converter::writefile('index.html',str_replace('{$subdir}','',$contents)); + $this->addKLink($element->package." Tutorial", 'package_'.$element->package, '', 'Tutorials'); + } + + /** + * @param parserTutorial + */ + function convertTutorial(&$element) + { + phpDocumentor_out("\n"); + flush(); + $template = &parent::convertTutorial($element); + $a = '../'; + if ($element->subpackage) $a .= '../'; + $template->assign('subdir',$a); + $template->register_outputfilter('CHMdefault_outputfilter'); + $contents = $template->fetch('tutorial.tpl'); + if ($element->package == $GLOBALS['phpDocumentor_DefaultPackageName'] && empty($element->subpackage) && ($element->name == $element->package . '.pkg')) + { + $template->assign('subdir',''); + $this->setTargetDir($this->base_dir); + Converter::writefile('index.html',$template->fetch('tutorial.tpl')); + } + $a = ''; + if ($element->subpackage) $a = PATH_DELIMITER . $element->subpackage; + phpDocumentor_out("\n"); + flush(); + $this->setTargetDir($this->base_dir . PATH_DELIMITER . $element->package . $a); + $this->addTOC($a = strip_tags($element->getTitle($this)), 'tutorial_'.$element->name, + $element->package, $element->subpackage, false, true); + $this->writeFile('tutorial_'.$element->name.'.html',$contents); + $this->addKLink($element->getTitle($this), $element->package . $a . PATH_DELIMITER . 'tutorial_'.$element->name, + '', 'Tutorials'); + } + + /** + * Converts class for template output + * @see prepareDocBlock(), generateChildClassList(), generateFormattedClassTree(), getFormattedConflicts() + * @see getFormattedInheritedMethods(), getFormattedInheritedVars() + * @param parserClass + */ + function convertClass(&$element) + { + parent::convertClass($element); + $this->class_dir = $element->docblock->package; + if (!empty($element->docblock->subpackage)) $this->class_dir .= PATH_DELIMITER . $element->docblock->subpackage; + $a = '../'; + if ($element->docblock->subpackage != '') $a = "../$a"; + + $this->class_data->assign('subdir',$a); + $this->class_data->assign("title","Docs For Class " . $element->getName()); + $this->class_data->assign("page",$element->getName() . '.html'); + $this->addKLink($element->name, $this->class_dir . PATH_DELIMITER . $this->class, '', 'Classes'); + } + + + /** + * Converts class variables for template output + * @see prepareDocBlock(), getFormattedConflicts() + * @param parserDefine + */ + function convertVar(&$element) + { + parent::convertVar($element, array('var_dest' => $this->getId($element,false))); + $this->setTargetDir($this->base_dir . PATH_DELIMITER . $this->class_dir); + $this->addKLink($element->name, $this->class_dir . PATH_DELIMITER .$this->class, $this->getId($element,false), $element->class.' Properties'); + } + + /** + * Converts class constants for template output + * @see prepareDocBlock(), getFormattedConflicts() + * @param parserDefine + */ + function convertConst(&$element) + { + parent::convertConst($element, array('const_dest' => $this->getId($element,false))); + $this->setTargetDir($this->base_dir . PATH_DELIMITER . $this->class_dir); + $this->addKLink($element->name, $this->class_dir . PATH_DELIMITER .$this->class, $this->getId($element,false), $element->class.' Constants'); + } + + /** + * Converts class methods for template output + * @see prepareDocBlock(), getFormattedConflicts() + * @param parserDefine + */ + function convertMethod(&$element) + { + parent::convertMethod($element, array('method_dest' => $this->getId($element,false))); + $this->setTargetDir($this->base_dir . PATH_DELIMITER . $this->class_dir); + $this->addKLink($element->name, $this->class_dir . PATH_DELIMITER .$this->class, $this->getId($element,false), $element->class.' Methods'); + } + + /** + * Converts function for template output + * @see prepareDocBlock(), parserFunction::getFunctionCall(), getFormattedConflicts() + * @param parserFunction + */ + function convertFunction(&$element) + { + $funcloc = $this->getId($this->addLink($element)); + parent::convertFunction($element,array('function_dest' => $this->getId($element,false))); + $this->setTargetDir($this->base_dir . PATH_DELIMITER . $this->page_dir); + $this->addKLink($element->name, $this->page_dir . PATH_DELIMITER . $this->page, $this->getId($element,false), 'Functions'); + } + + /** + * Converts include elements for template output + * @see prepareDocBlock() + * @param parserInclude + */ + function convertInclude(&$element) + { + parent::convertInclude($element, array('include_file' => '_'.strtr($element->getValue(),array('"' => '', "'" => '','.' => '_')))); + $this->setTargetDir($this->base_dir . PATH_DELIMITER . $this->page_dir); + $this->addKLink(str_replace('"', '', $element->getValue()), $this->page_dir . PATH_DELIMITER . $this->page, '', ucfirst($element->name)); + } + + /** + * Converts defines for template output + * @see prepareDocBlock(), getFormattedConflicts() + * @param parserDefine + */ + function convertDefine(&$element) + { + parent::convertDefine($element, array('define_link' => $this->getId($element,false))); + $this->setTargetDir($this->base_dir . PATH_DELIMITER . $this->page_dir); + $this->addKLink($element->name, $this->page_dir . PATH_DELIMITER . $this->page, $this->getId($element,false), 'Constants'); + } + + /** + * Converts global variables for template output + * @param parserGlobal + */ + function convertGlobal(&$element) + { + parent::convertGlobal($element, array('global_link' => $this->getId($element,false))); + $this->setTargetDir($this->base_dir . PATH_DELIMITER . $this->page_dir); + $this->addKLink($element->name, $this->page_dir . PATH_DELIMITER . $this->page, $this->getId($element,false), 'Global Variables'); + } + + /** + * converts procedural pages for template output + * @see prepareDocBlock(), getClassesOnPage() + * @param parserData + */ + function convertPage(&$element) + { + parent::convertPage($element); + $this->juststarted = true; + $this->page_dir = $element->parent->package; + if (!empty($element->parent->subpackage)) $this->page_dir .= PATH_DELIMITER . $element->parent->subpackage; + // registering stuff on the template + $this->page_data->assign("page",$this->getPageName($element) . '.html'); + $this->page_data->assign("title","Docs for page ".$element->parent->getFile()); + $this->setTargetDir($this->base_dir . PATH_DELIMITER . $this->page_dir); + $this->addKLink($element->parent->file, $this->page_dir . PATH_DELIMITER . $this->page, '', 'Files'); + } + + function getPageName(&$element) + { + if (phpDocumentor_get_class($element) == 'parserpage') return '_'.$element->getName(); + return '_'.$element->parent->getName(); + } + + /** + * returns an array containing the class inheritance tree from the root object to the class + * + * @param parserClass class variable + * @return array Format: array(root,child,child,child,...,$class) + * @uses parserClass::getParentClassTree() + */ + + function generateFormattedClassTree($class) + { + $tree = $class->getParentClassTree($this); + $out = ''; + if (count($tree) - 1) + { + $result = array($class->getName()); + $parent = $tree[$class->getName()]; + $distance[] = ''; + while ($parent) + { + $x = $parent; + if (is_object($parent)) + { + $subpackage = $parent->docblock->subpackage; + $package = $parent->docblock->package; + $x = $parent; + $x = $parent->getLink($this); + if (!$x) $x = $parent->getName(); + } + $result[] = + $x; + $distance[] = + "\n%s|\n" . + "%s--"; + if (is_object($parent)) + $parent = $tree[$parent->getName()]; + elseif (isset($tree[$parent])) + $parent = $tree[$parent]; + } + $nbsp = ' '; + for($i=count($result) - 1;$i>=0;$i--) + { + $my_nbsp = ''; + for($j=0;$j<count($result) - $i;$j++) $my_nbsp .= $nbsp; + $distance[$i] = sprintf($distance[$i],$my_nbsp,$my_nbsp); + } + return array('classes'=>array_reverse($result),'distance'=>array_reverse($distance)); + } else + { + return array('classes'=>$class->getName(),'distance'=>array('')); + } + } + + /** @access private */ + function sortVar($a, $b) + { + return strnatcasecmp($a->getName(),$b->getName()); + } + + /** @access private */ + function sortMethod($a, $b) + { + if ($a->isConstructor) return -1; + if ($b->isConstructor) return 1; + return strnatcasecmp($a->getName(),$b->getName()); + } + + /** + * returns a template-enabled array of class trees + * + * @param string $package package to generate a class tree for + * @see $roots, HTMLConverter::getRootTree() + */ + function generateFormattedClassTrees($package) + { + if (!isset($this->roots['normal'][$package]) && + !isset($this->roots['special'][$package])) { + return array(); + } + $trees = array(); + if (isset($this->roots['normal'][$package])) { + $roots = $this->roots['normal'][$package]; + for($i=0;$i<count($roots);$i++) + { + $root = $this->classes->getClassByPackage($roots[$i], $package); + if ($root && $root->isInterface()) { + continue; + } + $trees[] = array('class' => $roots[$i],'class_tree' => "<ul>\n".$this->getRootTree($this->getSortedClassTreeFromClass($roots[$i],$package,''),$package)."</ul>\n"); + } + } + if (isset($this->roots['special'][$package])) { + $roots = $this->roots['special'][$package]; + foreach ($roots as $parent => $classes) { + $thistree = ''; + foreach ($classes as $classinfo) { + $root = $this->classes->getClassByPackage($classinfo, $package); + if ($root && $root->isInterface()) { + continue; + } + $thistree .= + $this->getRootTree( + $this->getSortedClassTreeFromClass( + $classinfo, + $package, + ''), + $package, + true); + } + if (!$thistree) { + continue; + } + $trees[] = array( + 'class' => $parent, + 'class_tree' => "<ul>\n" . $thistree . "</ul>\n" + ); + } + } + return $trees; + } + + /** + * returns a template-enabled array of interface inheritance trees + * + * @param string $package package to generate a class tree for + * @see $roots, HTMLConverter::getRootTree() + */ + function generateFormattedInterfaceTrees($package) + { + if (!isset($this->roots['normal'][$package]) && + !isset($this->roots['special'][$package])) { + return array(); + } + $trees = array(); + if (isset($this->roots['normal'][$package])) { + $roots = $this->roots['normal'][$package]; + for($i=0;$i<count($roots);$i++) + { + $root = $this->classes->getClassByPackage($roots[$i], $package); + if ($root && !$root->isInterface()) { + continue; + } + $trees[] = array('class' => $roots[$i],'class_tree' => "<ul>\n".$this->getRootTree($this->getSortedClassTreeFromClass($roots[$i],$package,''),$package)."</ul>\n"); + } + } + if (isset($this->roots['special'][$package])) { + $roots = $this->roots['special'][$package]; + foreach ($roots as $parent => $classes) { + $thistree = ''; + foreach ($classes as $classinfo) { + $root = $this->classes->getClassByPackage($classinfo, $package); + if ($root && !$root->isInterface()) { + continue; + } + $thistree .= + $this->getRootTree( + $this->getSortedClassTreeFromClass( + $classinfo, + $package, + ''), + $package, + true); + } + if (!$thistree) { + continue; + } + $trees[] = array( + 'class' => $parent, + 'class_tree' => "<ul>\n" . $thistree . "</ul>\n" + ); + } + } + return $trees; + } + + /** + * return formatted class tree for the Class Trees page + * + * @param array $tree output from {@link getSortedClassTreeFromClass()} + * @param string $package package + * @param boolean $nounknownparent if true, an object's parent will not be checked + * @see Classes::$definitechild, generateFormattedClassTrees() + * @return string + */ + function getRootTree($tree, $package, $noparent = false) + { + if (!$tree) return ''; + $my_tree = ''; + $cur = '#root'; + $lastcur = array(false); + $kids = array(); + $dopar = false; + if (!$noparent && $tree[$cur]['parent']) + { + $dopar = true; + if (!is_object($tree[$cur]['parent'])) + { +// debug("parent ".$tree[$cur]['parent']." not found"); + $my_tree .= '<li>' . $tree[$cur]['parent'] .'<ul>'; + } + else + { +// debug("parent ".$this->returnSee($tree[$cur]['parent'])." in other package"); + $my_tree .= '<li>' . $this->returnSee($tree[$cur]['parent']); + if ($tree[$cur]['parent']->package != $package) $my_tree .= ' <b>(Different package)</b><ul>'; + } + } + do + { +// fancy_debug($cur,$lastcur,$kids); + if (count($tree[$cur]['children'])) + { +// debug("$cur has children"); + if (!isset($kids[$cur])) + { +// debug("set $cur kids"); + $kids[$cur] = 1; + $my_tree .= '<li>'.$this->returnSee($tree[$cur]['link']); + $my_tree .= '<ul>'."\n"; + } + array_push($lastcur,$cur); + list(,$cur) = each($tree[$cur]['children']); +// var_dump('listed',$cur); + if ($cur) + { + $cur = $cur['package'] . '#' . $cur['class']; +// debug("set cur to child $cur"); +// $my_tree .= '<li>'.$this->returnSee($tree[$cur]['link']); + continue; + } else + { +// debug("end of children for $cur"); + $cur = array_pop($lastcur); + $cur = array_pop($lastcur); + $my_tree .= '</ul></li>'."\n"; + if ($dopar && ($cur == '#root' || !$cur)) $my_tree .= '</ul></li>'; + } + } else + { +// debug("$cur has no children"); + $my_tree .= '<li>'.$this->returnSee($tree[$cur]['link'])."</li>"; + if ($dopar && $cur == '#root') $my_tree .= '</ul></li>'; + $cur = array_pop($lastcur); + } + } while ($cur); + return $my_tree; + } + /** + * Generate indexing information for given element + * + * @param parserElement descendant of parserElement + * @see generateElementIndex() + * @return array + */ + function getIndexInformation($elt) + { + $Result['type'] = $elt->type; + $Result['file_name'] = $elt->file; + $Result['path'] = $elt->getPath(); + + if (isset($elt->docblock)) + { + $Result['description'] = $elt->docblock->getSDesc($this); + + if ($elt->docblock->hasaccess) + $Result['access'] = $elt->docblock->tags['access'][0]->value; + else + $Result['access'] = 'public'; + + $Result['abstract'] = isset ($elt->docblock->tags['abstract'][0]); + } + else + $Result['description'] = ''; + + $aa = $Result['description']; + if (!empty($aa)) $aa = "<br> $aa"; + + switch($elt->type) + { + case 'class': + $Result['name'] = $elt->getName(); + $Result['title'] = 'Class'; + $Result['link'] = $this->getClassLink($elt->getName(), + $elt->docblock->package, + $elt->getPath(), + $elt->getName()); + $Result['listing'] = 'in file '.$elt->file.', class '.$Result['link']."$aa"; + break; + case 'define': + $Result['name'] = $elt->getName(); + $Result['title'] = 'Constant'; + $Result['link'] = $this->getDefineLink($elt->getName(), + $elt->docblock->package, + $elt->getPath(), + $elt->getName()); + $Result['listing'] = 'in file '.$elt->file.', constant '.$Result['link']."$aa"; + break; + case 'global': + $Result['name'] = $elt->getName(); + $Result['title'] = 'Global'; + $Result['link'] = $this->getGlobalLink($elt->getName(), + $elt->docblock->package, + $elt->getPath(), + $elt->getName()); + $Result['listing'] = 'in file '.$elt->file.', global variable '.$Result['link']."$aa"; + break; + case 'function': + $Result['name'] = $elt->getName(); + $Result['title'] = 'Function'; + $Result['link'] = $this->getFunctionLink($elt->getName(), + $elt->docblock->package, + $elt->getPath(), + $elt->getName().'()'); + $Result['listing'] = 'in file '.$elt->file.', function '.$Result['link']."$aa"; + break; + case 'method': + $Result['name'] = $elt->getName(); + $Result['title'] = 'Method'; + $Result['link'] = $this->getMethodLink($elt->getName(), + $elt->class, + $elt->docblock->package, + $elt->getPath(), + $elt->class.'::'.$elt->getName().'()' + ); + if ($elt->isConstructor) $Result['constructor'] = 1; + $Result['listing'] = 'in file '.$elt->file.', method '.$Result['link']."$aa"; + break; + case 'var': + $Result['name'] = $elt->getName(); + $Result['title'] = 'Variable'; + $Result['link'] = $this->getVarLink($elt->getName(), + $elt->class, + $elt->docblock->package, + $elt->getPath(), + $elt->class.'::'.$elt->getName()); + $Result['listing'] = 'in file '.$elt->file.', variable '.$Result['link']."$aa"; + break; + case 'const': + $Result['name'] = $elt->getName(); + $Result['title'] = 'Variable'; + $Result['link'] = $this->getConstLink($elt->getName(), + $elt->class, + $elt->docblock->package, + $elt->getPath(), + $elt->class.'::'.$elt->getName()); + $Result['listing'] = 'in file '.$elt->file.', class constant '.$Result['link']."$aa"; + break; + case 'page': + $Result['name'] = $elt->getFile(); + $Result['title'] = 'Page'; + $Result['link'] = $this->getPageLink($elt->getFile(), + $elt->package, + $elt->getPath(), + $elt->getFile()); + $Result['listing'] = 'procedural page '.$Result['link']; + break; + case 'include': + $Result['name'] = $elt->getName(); + $Result['title'] = 'Include'; + $Result['link'] = $elt->getValue(); + $Result['listing'] = 'include '.$Result['name']; + break; + } + + return $Result; + } + /** + * Generate alphabetical index of all elements + * + * @see $elements, walk() + */ + function generateElementIndex() + { + $elementindex = array(); + $letters = array(); + $used = array(); + foreach($this->elements as $letter => $nutoh) + { + foreach($this->elements[$letter] as $i => $yuh) + { + if ($this->elements[$letter][$i]->type != 'include') + { + if (!isset($used[$letter])) + { + $letters[]['letter'] = $letter; + $elindex['letter'] = $letter; + $used[$letter] = 1; + } + + $elindex['index'][] = $this->getIndexInformation($this->elements[$letter][$i]); + } + } + if (isset($elindex['index'])) + { + $elementindex[] = $elindex; + } else + { + unset($letters[count($letters) - 1]); + } + $elindex = array(); + } + return array($elementindex,$letters); + } + + function setTemplateDir($dir) + { + Converter::setTemplateDir($dir); + $this->smarty_dir = $this->templateDir; + } + + function copyMediaRecursively($media,$targetdir,$subdir = '') + { + $versionControlDirectories = array ('CVS', 'media/CVS', 'media\\CVS', '.svn', 'media/.svn', 'media\\.svn'); + if (!is_array($media)) { + return; + } + foreach($media as $dir => $files) + { + if ($dir === '/') + { + $this->copyMediaRecursively($files,$targetdir); + } else + { + if (!is_numeric($dir)) + { + if (in_array($dir, $versionControlDirectories)) + { + // skip it entirely + } + else + { + // create the subdir + phpDocumentor_out("creating $targetdir" . PATH_DELIMITER . "$dir\n"); + Converter::setTargetDir($targetdir . PATH_DELIMITER . $dir); + if (!empty($subdir)) + { + $subdir .= PATH_DELIMITER; + } + $this->copyMediaRecursively($files,"$targetdir/$dir",$subdir . $dir); + } + } + else + { + // copy the file + phpDocumentor_out("copying $targetdir" . PATH_DELIMITER . $files['file']."\n"); + $this->copyFile($files['file'],$subdir); + } + } + } + } + + /** + * calls the converter setTargetDir, and then copies any template images and the stylesheet if they haven't been copied + * @see Converter::setTargetDir() + */ + function setTargetDir($dir) + { + Converter::setTargetDir($dir); + if ($this->wrote) return; + $this->wrote = true; + $template_images = array(); + $stylesheets = array(); + $tdir = $dir; + $dir = $this->templateDir; + $this->templateDir = $this->templateDir.'templates/'; + $info = new Io; + $this->copyMediaRecursively($info->getDirTree($this->templateDir.'media',$this->templateDir),$tdir); + } + + /** + * Generate alphabetical index of all elements by package and subpackage + * + * @param string $package name of a package + * @see $pkg_elements, walk(), generatePkgElementIndexes() + */ + function generatePkgElementIndex($package) + { +// var_dump($this->pkg_elements[$package]); + $elementindex = array(); + $letters = array(); + $letterind = array(); + $used = array(); + $subp = ''; + foreach($this->pkg_elements[$package] as $subpackage => $els) + { + if (empty($els)) continue; + if (!empty($subpackage)) $subp = " (<b>subpackage:</b> $subpackage)"; else $subp = ''; + foreach($els as $letter => $yuh) + { + foreach($els[$letter] as $i => $yuh) + { + if ($els[$letter][$i]->type != 'include') + { + if (!isset($used[$letter])) + { + $letters[]['letter'] = $letter; + $letterind[$letter] = count($letters) - 1; + $used[$letter] = 1; + } + $elindex[$letter]['letter'] = $letter; + + $elindex[$letter]['index'][] = $this->getIndexInformation($els[$letter][$i]); + } + } + } + } + ksort($elindex); + usort($letters,'CHMdefault_lettersort'); + if (isset($elindex)) + { + while(list($letter,$tempel) = each($elindex)) + { + if (!isset($tempel)) + { + unset($letters[$letterind[$tempel['letter']]]); + } else + $elementindex[] = $tempel; + } + } else $letters = array(); + return array($elementindex,$letters); + } + + /** + * + * @see generatePkgElementIndex() + */ + function generatePkgElementIndexes() + { + $packages = array(); + $package_names = array(); + $pkg = array(); + $letters = array(); + foreach($this->pkg_elements as $package => $trash) + { + $pkgs['package'] = $package; + $pkg['package'] = $package; + list($pkg['pindex'],$letters[$package]) = $this->generatePkgElementIndex($package); + if (count($pkg['pindex'])) + { + $packages[] = $pkg; + $package_names[] = $pkgs; + } + unset($pkgs); + unset($pkg); + } + foreach($packages as $i => $package) + { + $pnames = array(); + for($j=0;$j<count($package_names);$j++) + { + if ($package_names[$j]['package'] != $package['package']) $pnames[] = $package_names[$j]; + } + $packages[$i]['packageindexes'] = $pnames; + } + return array($packages,$package_names,$letters); + } + + /** + * @param string name of class + * @param string package name + * @param string full path to look in (used in index generation) + * @param boolean deprecated + * @param boolean return just the URL, or enclose it in an html a tag + * @return mixed false if not found, or an html a link to the class's documentation + * @see parent::getClassLink() + */ + function getClassLink($expr,$package, $file = false,$text = false, $with_a = true) + { + $a = Converter::getClassLink($expr,$package,$file); + if (!$a) return false; + return $this->returnSee($a, $text, $with_a); + } + + /** + * @param string name of function + * @param string package name + * @param string full path to look in (used in index generation) + * @param boolean deprecated + * @param boolean return just the URL, or enclose it in an html a tag + * @return mixed false if not found, or an html a link to the function's documentation + * @see parent::getFunctionLink() + */ + function getFunctionLink($expr,$package, $file = false,$text = false) + { + $a = Converter::getFunctionLink($expr,$package,$file); + if (!$a) return false; + return $this->returnSee($a, $text); + } + + /** + * @param string name of define + * @param string package name + * @param string full path to look in (used in index generation) + * @param boolean deprecated + * @param boolean return just the URL, or enclose it in an html a tag + * @return mixed false if not found, or an html a link to the define's documentation + * @see parent::getDefineLink() + */ + function getDefineLink($expr,$package, $file = false,$text = false) + { + $a = Converter::getDefineLink($expr,$package,$file); + if (!$a) return false; + return $this->returnSee($a, $text); + } + + /** + * @param string name of global variable + * @param string package name + * @param string full path to look in (used in index generation) + * @param boolean deprecated + * @param boolean return just the URL, or enclose it in an html a tag + * @return mixed false if not found, or an html a link to the global variable's documentation + * @see parent::getGlobalLink() + */ + function getGlobalLink($expr,$package, $file = false,$text = false) + { + $a = Converter::getGlobalLink($expr,$package,$file); + if (!$a) return false; + return $this->returnSee($a, $text); + } + + /** + * @param string name of procedural page + * @param string package name + * @param string full path to look in (used in index generation) + * @param boolean deprecated + * @param boolean return just the URL, or enclose it in an html a tag + * @return mixed false if not found, or an html a link to the procedural page's documentation + * @see parent::getPageLink() + */ + function getPageLink($expr,$package, $path = false,$text = false) + { + $a = Converter::getPageLink($expr,$package,$path); + if (!$a) return false; + return $this->returnSee($a, $text); + } + + /** + * @param string name of method + * @param string class containing method + * @param string package name + * @param string full path to look in (used in index generation) + * @param boolean deprecated + * @param boolean return just the URL, or enclose it in an html a tag + * @return mixed false if not found, or an html a link to the method's documentation + * @see parent::getMethodLink() + */ + function getMethodLink($expr,$class,$package, $file = false,$text = false) + { + $a = Converter::getMethodLink($expr,$class,$package,$file); + if (!$a) return false; + return $this->returnSee($a, $text); + } + + /** + * @param string name of var + * @param string class containing var + * @param string package name + * @param string full path to look in (used in index generation) + * @param boolean deprecated + * @param boolean return just the URL, or enclose it in an html a tag + * @return mixed false if not found, or an html a link to the var's documentation + * @see parent::getVarLink() + */ + function getVarLink($expr,$class,$package, $file = false,$text = false) + { + $a = Converter::getVarLink($expr,$class,$package,$file); + if (!$a) return false; + return $this->returnSee($a, $text); + } + + /** + * @param string name of class constant + * @param string class containing class constant + * @param string package name + * @param string full path to look in (used in index generation) + * @param boolean deprecated + * @param boolean return just the URL, or enclose it in an html a tag + * @return mixed false if not found, or an html a link to the var's documentation + * @see parent::getVarLink() + */ + function getConstLink($expr,$class,$package, $file = false,$text = false) + { + $a = Converter::getConstLink($expr,$class,$package,$file); + if (!$a) return false; + return $this->returnSee($a, $text); + } + + /** + * does a nat case sort on the specified second level value of the array + * + * @param mixed $a + * @param mixed $b + * @return int + */ + function rcNatCmp ($a, $b) + { + $aa = strtoupper($a[$this->rcnatcmpkey]); + $bb = strtoupper($b[$this->rcnatcmpkey]); + + return strnatcasecmp($aa, $bb); + } + + /** + * does a nat case sort on the specified second level value of the array. + * this one puts constructors first + * + * @param mixed $a + * @param mixed $b + * @return int + */ + function rcNatCmp1 ($a, $b) + { + $aa = strtoupper($a[$this->rcnatcmpkey]); + $bb = strtoupper($b[$this->rcnatcmpkey]); + + if (strpos($aa,'CONSTRUCTOR') === 0) + { + return -1; + } + if (strpos($bb,'CONSTRUCTOR') === 0) + { + return 1; + } + if (strpos($aa,strtoupper($this->class)) === 0) + { + return -1; + } + if (strpos($bb,strtoupper($this->class)) === 0) + { + return -1; + } + return strnatcasecmp($aa, $bb); + } + + /** + * Write a file to disk, and add it to the {@link $hhp_files} list of files + * to include in the generated CHM + * + * {@source} + */ + function writefile($file,$contents) + { + $this->addHHP($this->targetDir . PATH_DELIMITER . $file); + Converter::writefile($file,$contents); + } + + /** + * @uses $hhp_files creates the array by adding parameter $file + */ + function addHHP($file) + { + $file = str_replace($this->base_dir . PATH_DELIMITER, '', $file); + $file = str_replace('\\',PATH_DELIMITER,$file); + $file = str_replace('//',PATH_DELIMITER,$file); + $file = str_replace(PATH_DELIMITER,'\\',$file); + $this->hhp_files[]['name'] = $file; + } + + function generateTOC() + { + $comppack = ''; + $templ = &$this->newSmarty(); + foreach($this->TOC as $package => $TOC1) + { + $comp_subs = ''; + $comp_subs1 = false; + foreach($TOC1 as $subpackage => $types) + { + $comp_types = ''; + foreach($types as $type => $files) + { + $comp = ''; + $templ1 = &$this->newSmarty(); + $templ1->assign('entry', array()); + foreach($files as $file) + { + // use book icon for classes + if ($type == 'Classes') { + $templ1->append('entry', array('paramname' => $file[0],'outputfile' => $file[1],'isclass' => 1)); + } else { + $templ1->append('entry', array('paramname' => $file[0],'outputfile' => $file[1])); + } + } + $templ = &$this->newSmarty(); + $templ->assign('tocsubentries',$templ1->fetch('tocentry.tpl')); + $templ->assign('entry', array(array('paramname' => $type))); + $comp_types .= $templ->fetch('tocentry.tpl'); + } + if (!empty($subpackage)) + { + $templ = &$this->newSmarty(); + $templ->assign('tocsubentries',$comp_types); + $templ->assign('entry', array(array('paramname' => $subpackage))); + $comp_subs .= $templ->fetch('tocentry.tpl'); + } else + { + $comp_subs1 = $comp_types; + } + } + if ($comp_subs1) + $templ->assign('tocsubentries',$comp_subs1); + if (!empty($comp_subs)) + $templ->assign('entry', array(array('paramname' => $package, 'tocsubentries' => $comp_subs))); + else + $templ->assign('entry', array(array('paramname' => $package))); + $comppack .= $templ->fetch('tocentry.tpl'); + } + return $comppack; + } + + function addSourceTOC($name, $file, $package, $subpackage, $source = false) + { + $file = str_replace($this->base_dir . PATH_DELIMITER, '', $this->targetDir) + . PATH_DELIMITER . $file . '.html'; + $file = str_replace('\\',PATH_DELIMITER,$file); + $file = str_replace('//',PATH_DELIMITER,$file); + $file = str_replace(PATH_DELIMITER,'\\',$file); + $sub = $source ? 'Source Code' : 'Examples'; + $this->TOC[$package][$subpackage][$sub][] = array($name, $file); + } + + function addTOC($name,$file,$package,$subpackage,$class = false,$tutorial = false) + { + $file = str_replace($this->base_dir . PATH_DELIMITER, '', $this->targetDir . PATH_DELIMITER) + . $file . '.html'; + $file = str_replace('\\',PATH_DELIMITER,$file); + $file = str_replace('//',PATH_DELIMITER,$file); + $file = str_replace(PATH_DELIMITER,'\\',$file); + $file = str_replace($this->base_dir . '\\', '', $file); + $sub = $class ? 'Classes' : 'Files'; + if ($tutorial) $sub = 'Manual'; + $this->TOC[$package][$subpackage][$sub][] = array($name,$file); + } + + /** + * Add an item to the index.hhk file + * @param string $name index entry name + * @param string $file filename containing index + * @param string $bookmark html anchor of location in file, if any + * @param string $group group this entry with a string + * @uses $KLinks tracks the index + * @author Andrew Eddie <eddieajau@users.sourceforge.net> + */ + function addKLink($name, $file, $bookmark='', $group='') + { + $file = $file . '.html'; + $file = str_replace('\\',PATH_DELIMITER,$file); + $file = str_replace('//',PATH_DELIMITER,$file); + $file = str_replace(PATH_DELIMITER,'\\',$file); +// debug("added $name, $file, $bookmark, $group "); + $link = $file; + $link .= $bookmark ? "#$bookmark" :''; + if ($group) { + $this->KLinks[$group]['grouplink'] = $file; + $this->KLinks[$group][] = array($name,$link); + } + $this->KLinks[] = array($name,$link); + } + + /** + * Get the table of contents for index.hhk + * @return string contents of tocentry.tpl generated from $KLinks + * @author Andrew Eddie <eddieajau@users.sourceforge.net> + */ + function generateKLinks() + { + $templ = &$this->newSmarty(); + $templ->assign('entry', array()); + foreach($this->KLinks as $group=>$link) + { + if (isset($link['grouplink'])) { + $templg = &$this->newSmarty(); + $templg->assign('entry', array()); + foreach($link as $k=>$sublink) + { + if ($k != 'grouplink') { + $templg->append('entry', array('paramname' => $sublink[0],'outputfile' => $sublink[1])); + } + } + $templ->append('entry', array('paramname' => $group, 'outputfile' => $link['grouplink'], 'tocsubentries' => $templg->fetch('tocentry.tpl') )); + } else { + $templ->append('entry', array('paramname' => $link[0],'outputfile' => $link[1])); + } + } + return $templ->fetch('tocentry.tpl'); + } + + /** + * Create the phpdoc.hhp, contents.hhc files needed by MS HTML Help Compiler + * to create a CHM file + * + * The output function generates the table of contents (contents.hhc) + * and file list (phpdoc.hhp) files used to create a .CHM by the + * free MS HTML Help compiler. + * {@internal + * Using {@link $hhp_files}, a list of all separate .html files + * is created in CHM format, and written to phpdoc.hhp. This list was + * generated by {@link writefile}. + * + * Next, a call to the table of contents: + * + * {@source 12 2} + * + * finishes things off}} + * @todo use to directly call html help compiler hhc.exe + * @link http://www.microsoft.com/downloads/release.asp?releaseid=33071 + * @uses generateTOC() assigns to the toc template variable + */ + function Output() + { + $templ = &$this->newSmarty(); + $templ->assign('files',$this->hhp_files); + $this->setTargetDir($this->base_dir); + Converter::writefile('phpdoc.hhp',$templ->fetch('hhp.tpl')); + $templ = &$this->newSmarty(); + $templ->assign('toc',$this->generateTOC()); + Converter::writefile('contents.hhc',$templ->fetch('contents.hhc.tpl')); + $templ->assign('klinks',$this->generateKLinks()); + Converter::writefile('index.hhk',$templ->fetch('index.hhk.tpl')); + phpDocumentor_out("NOTE: to create the documentation.chm file, you must now run Microsoft Help Workshop on phpdoc.hhp\n"); + phpDocumentor_out("To get the free Microsoft Help Workshop, browse to: http://go.microsoft.com/fwlink/?LinkId=14188\n"); + flush(); + } +} + +/** + * @access private + * @global string name of the package to set as the first package + */ +function CHMdefault_pindexcmp($a, $b) +{ + global $phpDocumentor_DefaultPackageName; + if ($a['title'] == $phpDocumentor_DefaultPackageName) return -1; + if ($b['title'] == $phpDocumentor_DefaultPackageName) return 1; + return strnatcasecmp($a['title'],$b['title']); +} + +/** @access private */ +function CHMdefault_lettersort($a, $b) +{ + return strnatcasecmp($a['letter'],$b['letter']); +} + +/** @access private */ +function CHMdefault_outputfilter($src, &$smarty) +{ + return str_replace('{$subdir}',$smarty->_tpl_vars['subdir'],$src); +} +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/options.ini b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/options.ini new file mode 100755 index 00000000..cae1952d --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/options.ini @@ -0,0 +1,507 @@ +preservedocbooktags = false + +;; used to highlight the {@source} inline tag, @filesource tag, and @example tag +[highlightSourceTokens] +;; format: +;; T_CONSTANTNAME = open +;; /T_CONSTANTNAME = close +T_ABSTRACT = <font color="blue"> +/T_ABSTRACT = </font> +T_CLONE = <font color="blue"> +/T_CLONE = </font> +T_HALT_COMPILER = <font color="red"> +/T_HALT_COMPILER = </font> +T_PUBLIC = <font color="blue"> +/T_PUBLIC = </font> +T_PRIVATE = <font color="blue"> +/T_PRIVATE = </font> +T_PROTECTED = <font color="blue"> +/T_PROTECTED = </font> +T_FINAL = <font color="blue"> +/T_FINAL = </font> +T_IMPLEMENTS = <font color="blue"> +/T_IMPLEMENTS = </font> +T_CLASS = <font color="blue"> +/T_CLASS = </font> +T_INTERFACE = <font color="blue"> +/T_INTERFACE = </font> +T_INCLUDE = <font color="blue"> +/T_INCLUDE = </font> +T_INCLUDE_ONCE = <font color="blue"> +/T_INCLUDE_ONCE = </font> +T_REQUIRE_ONCE = <font color="blue"> +/T_REQUIRE_ONCE = </font> +T_FUNCTION = <font color="blue"> +/T_FUNCTION = </font> +T_VARIABLE = <strong> +/T_VARIABLE = </strong> +T_CONSTANT_ENCAPSED_STRING = <font color="#66cccc"> +/T_CONSTANT_ENCAPSED_STRING = </font> +T_COMMENT = <font color="green"> +/T_COMMENT = </font> +T_OBJECT_OPERATOR = <strong> +/T_OBJECT_OPERATOR = </strong> +T_RETURN = <font color="blue"> +/T_RETURN = </font> +T_STATIC = <font color="blue"> +/T_STATIC = </font> +T_SWITCH = <font color="blue"> +/T_SWITCH = </font> +T_IF = <font color="blue"> +/T_IF = </font> +T_FOREACH = <font color="blue"> +/T_FOREACH = </font> +T_FOR = <font color="blue"> +/T_FOR = </font> +T_VAR = <font color="blue"> +/T_VAR = </font> +T_EXTENDS = <font color="blue"> +/T_EXTENDS = </font> +T_RETURN = <font color="blue"> +/T_RETURN = </font> +T_GLOBAL = <font color="blue"> +/T_GLOBAL = </font> +T_DOUBLE_COLON = <strong> +/T_DOUBLE_COLON = </strong> +T_OBJECT_OPERATOR = <strong> +/T_OBJECT_OPERATOR = </strong> +T_OPEN_TAG = <strong> +/T_OPEN_TAG = </strong> +T_CLOSE_TAG = <strong> +/T_CLOSE_TAG = </strong> + +[highlightSource] +;; this is for highlighting things that aren't tokens like "&" +;; format: +;; word = open +;; /word = close +@ = <strong> +/@ = </strong> +& = <strong> +/& = </strong> +[ = <strong> +/[ = </strong> +] = <strong> +/] = </strong> +! = <strong> +/! = </strong> +";" = <strong> +/; = </strong> +( = <strong> +/( = </strong> +) = <strong> +/) = </strong> +, = <strong> +/, = </strong> +{ = <strong> +/{ = </strong> +} = <strong> +/} = </strong> +""" = <font color="#66cccc"> +/" = </font> + +[highlightDocBlockSourceTokens] +;; this is for docblock tokens, using by phpDocumentor_HighlightParser +;; tagphptype is for "string" in @param string description, for example +docblock = <font color="#009999"> +/docblock = </font> +tagphptype = <em> +/tagphptype = </em> +tagvarname = <strong> +/tagvarname = </strong> +coretag = <strong><font color = "#0099FF"> +/coretag = </font></strong> +tag = <strong><font color="#009999"> +/tag = </font></strong> +inlinetag = <em><font color="#0099FF"> +/inlinetag = </font></em> +internal = <em><font color = "#6699cc"> +/internal = </font></em> +closetemplate = <strong><font color="blue"> +/closetemplate = </font></strong> +docblocktemplate = <font color="blue"> +/docblocktemplate = </font color="blue"> + +[highlightTutorialSourceTokens] +;; this is for XML DocBook-based tutorials, highlighted by phpDocumentor_TutorialHighlightParser +;; <tag> +opentag = <span class="tute-tag"> +/opentag = </span> +;; </tag> +closetag = <span class="tute-tag"> +/closetag = </span> +;; <tag attribute="value"> +attribute = <span class="tute-attribute-name"> +/attribute = </span> +;; <tag attribute="value"> +attributevalue = <span class="tute-attribute-value"> +/attributevalue = </span> +;; &entity; +entity = <span class="tute-entity"> +/entity = </span> +;; <!-- comment --> +comment = <span class="tute-comment"> +/comment = </span> +;; {@inline tag} +itag = <span class="tute-inline-tag"> +/itag = </span> + +;; used for translation of html in DocBlocks +[desctranslate] +ul = <ul> +/ul = </ul> +ol = <ol> +/ol = </ol> +li = <li> +/li = </li> +code = +/code = +var = <var> +/var = </var> +samp = <samp> +/samp = </samp> +kbd = <kbd> +/kbd = </kbd> +pre = <pre> +/pre = </pre> +p = <p> +/p = </p> +b = <strong> +/b = </strong> +i = <em> +/i = </em> +br = <br /> + +[ppage] +;; this is the DocBook package page translation section. All DocBook tags +;; that have a corresponding html tag must be listed here +;; +;; examples: +;; 1) +;; tagname = newtagname +;; +;; This is the simplest case, where all attributes will be added into the +;; starting tag and the ending tag will be html/xml style </tranlatedtagname> +;; <tagname></tagname> becomes <newtagname></newtagname> and +;; <tagname attr="value"></tagname> becomes +;; <newtagname attr="value"></newtagname> +;; +;; 2) +;; tagname = newtagname +;; tagname->attr = newattrname +;; +;; in this case, everything will be like the first case, except tags like: +;; <tagname attr="value"></tagname> will become +;; <newtagname newattrname="value"></newtagname> +;; +;; 3) +;; tagname = newtagname +;; tagname->attr = newattrname +;; tagname->attr+value = newvalue +;; +;; in this case, the value is also translated to another. This can be useful +;; for instances such as focus="middle" changing to align="center" or something +;; of that nature. +;; <tagname attr="value"></tagname> will become +;; <newtagname newattrname="newvalue"></newtagname> +;; +;; 4) +;; tagname = newtagname +;; tagname->attr1 = newattrname +;; tagname->attr2 = newattrname +;; tagname->attr1+value|attr2+value = newvalue +;; +;; in this case, two attributes combine to make one new attribute, and the combined +;; value is translated into a new value +;; <tagname attr1="value1" attr2="value2"></tagname> will become +;; <newtagname newattrname="newvalue"></newtagname> +;; +;; 5) +;; tagname = newtagname +;; tagname!attr = dummy +;; +;; here, the attribute will be ignored. dummy is not used and may be any value +;; <tagname attr="value"></tagname> will become +;; <newtagname></newtagname> +;; +;; 6) +;; tagname = newtagname +;; tagname! = dummy +;; +;; here, all attributes will be ignored. dummy is not used and may be any value +;; <tagname attr1="value" attr2="foo"></tagname> will become +;; <newtagname></newtagname> +;; +;; 7) +;; tagname = newtagname +;; tagname/ = 1 +;; +;; here, the tag will be translated as a single tag with no closing tag, and all +;; attributes +;; <tagname attr="val">{text text}</tagname> will become +;; <newtagname attr="val" /> +;; +;; 8) +;; tagname = <starttaginfo /> +;; /tagname = closetagtext +;; +;; in this case, the text <starttaginfo> will be inserted exactly as entered for +;; <tagname> and closetagtext for </tagname> +;; <tagname attr="val"></tagname> will become +;; <starttaginfo />closetagtext +;; +;; 9) +;; $attr$my_attribute = newattrname +;; +;; tagname = newtagname +;; +;; in this case, all occurences of my_attribute in any tag will be changed to +;; newattrname. This is useful for changing things like role="php" to +;; class="php," for example. Note that the text "$attr$" MUST be on the line +;; start for phpDocumentor to recognize it. +;; +;; 10) +;; &entity; = translation text +;; " = " +;; " = """ +;; < = < +;; +;; Use this to control translation of entities to their appropriate values + + = +" = " +” = ” +“ = “ +& = & +< = < +> = > +© = © + +$attr$role = class + +abbrev = abbr + +blockquote = blockquote + +arg = span +arg->choice = class + +author = <font size="-1"><strong>by <em> +/author = </em></strong></font> +author! = 0 + +authorblurb = blockquote + +authorgroup = <strong>Authors:</strong><br /> +/authorgroup = +authorgroup! = 0 + +caution = <table border="1"><th align="center">Caution</th><tr><td> +/caution = </td></tr></table> +caution! = 0 + +command = <b class="cmd"> +/command = </b> + +cmdsynopsis = <div id="cmdsynopsis"> +/cmdsynopsis = </div> + +copyright = <em> +/copyright = </em><br /> + +emphasis = strong + +example = <table class="example" width="100%" border="1"><tr><td> +/example = </td></tr></table> +example! = 0 + +function = +/function = () + +formalpara = p + +graphic = img +graphic->fileref = src +graphic/ = + +important = u + +informalequation = blockquote + +informalexample = pre + +inlineequation = em + +itemizedlist = ul + +listitem = li + +literal = code + +literallayout = pre + +option = " " +/option = + +orderedlist = ol + +para = p + +programlisting = <table border="0" bgcolor="#E0E0E0" cellpadding="5"><tr><td><div class="src-code"> +/programlisting = </div></td></tr></table> +programlisting! = 0 + +refentry = div + +refnamediv = <div class="refname"> +/refnamediv = </div> +refnamediv! = 0 + +refname = h1 + +refpurpose = <h2 class="refpurpose"><em> +/refpurpose = </em></h2> + +refsynopsisdiv = <div class="refsynopsis"> +/refsynopsisdiv = </div> +refsynopsisdiv! = 0 + +refsect1 = span + +refsect2 = +/refsect2 = <hr /> + +refsect3 = +/refsect3 = <br /> + +releaseinfo = ( +/releaseinfo = )<br /> + +simpara = +/simpara = <br /> +simpara! = 0 + +subscript = sub + +superscript = super + +table = table + +table->colsep = rules +table->rowsep = rules +table->colsep+1|rowsep+1 = all +table->colsep+1|rowsep+0 = cols +table->colsep+0|rowsep+1 = rows + +table->frame = frame +table->frame+all = border +table->frame+none = void +table->frame+sides = vsides +table->frame+top = above +table->frame+topbot = hsides + +thead = thead + +tfoot = tfoot + +tbody = tbody + +colspec = col + +tgroup = colgroup +tgroup/ = 1 +tgroup->cols = span + +row = tr + +entry = td +entry->morerows = colspan +entry->morerows+1 = 2 +entry->morerows+2 = 3 +entry->morerows+3 = 4 +entry->morerows+4 = 5 +entry->morerows+5 = 6 +entry->morerows+6 = 7 +entry->morerows+7 = 8 +entry->morerows+8 = 9 +entry->morerows+9 = 10 +entry->morerows+10 = 11 +;; add more if you need more colspans + +warning = <table border="1"><tr><td> +/warning = </td></tr></table> +warning! = 0 + +;; now begins the attributes that should be tags in cdata +[$attr$id] +open = a +;close = /a +cdata! = true +quotevalues = true +separator = "=" +;separateall = true +$id = name + +;; now begins the sections that deal with <title> +[refsynopsisdiv_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h1 class="title" align="center"> +close = </h1> + +[refsect1_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h2 class="title" align="center"> +close = </h1> + +[refsect2_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h2 class="title" align="center"> +close = </h2> + +[refsect3_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h3 class="title" align="center"> +close = </h3> + +[para_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <strong class="title" align="center"> +close = </strong> + +[formalpara_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <strong class="title" align="center"> +close = </strong> + +[example_title] +;tag_attr = true +;attr_name = title +;cdata_start = true +cdata_end = true +open = </td></tr><tr><td><strong> +close = </strong> + +[table_title] +;tag_attr = true +;attr_name = true +cdata_start = true +open = <caption> +close = </caption> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/basicindex.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/basicindex.tpl new file mode 100755 index 00000000..29a27593 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/basicindex.tpl @@ -0,0 +1,21 @@ +{section name=letter loop=$letters} + <a href="{$indexname}.html#{$letters[letter].letter}">{$letters[letter].letter}</a> +{/section} +<table> +{section name=index loop=$index} +<tr><td colspan = "2"><a name="{$index[index].letter}"> </a> +<a href="#top">top</a><br> +<TABLE CELLPADDING='3' CELLSPACING='0' WIDTH='100%' CLASS="border"> + <TR CLASS='TableHeadingColor'> + <TD> + <FONT SIZE='+2'><B>{$index[index].letter}</B></FONT> + </TD> + </TR> +</TABLE> +</td></tr> + {section name=contents loop=$index[index].index} + <tr><td><b>{$index[index].index[contents].name}</b></td><td width="100%" align="left" valign="top">{$index[index].index[contents].listing}</td></tr> + {/section} +{/section} +</table> + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/blank.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/blank.tpl new file mode 100755 index 00000000..6a05f27e --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/blank.tpl @@ -0,0 +1,13 @@ +<html> +<head> + <title>{$maintitle}</title> + <link rel="stylesheet" href="{$subdir}media/stylesheet.css" /> + <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/> +</head> +<body> +<div align="center"><h1>{$maintitle}</h1></div> +<b>Welcome to {$package}!</b><br /> +<br /> +This documentation was generated by <a href="{$phpdocwebsite}">phpDocumentor v{$phpdocversion}</a><br /> +</body> +</html>
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/class.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/class.tpl new file mode 100755 index 00000000..93cd4f27 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/class.tpl @@ -0,0 +1,94 @@ +{include file="header.tpl" eltype="class" hasel=true contents=$classcontents} +<!-- Start of Class Data --> +<H3> + <SPAN class="type">{if $is_interface}Interface{else}Class{/if}</SPAN> {$class_name} + <HR> +</H3> +[line <span class="linenumber">{if $class_slink}{$class_slink}{else}{$line_number}{/if}</span>]<br /> +<pre> +{section name=tree loop=$class_tree.classes}{$class_tree.classes[tree]}{$class_tree.distance[tree]}{/section} +</pre> +{if $tutorial} +<div class="maintutorial">Class Tutorial: {$tutorial}</div> +{/if} +{if $children} +<SPAN class="type">Classes extended from {$class_name}:</SPAN> + {section name=kids loop=$children} + <dl> + <dt>{$children[kids].link}</dt> + <dd>{$children[kids].sdesc}</dd> + </dl> + {/section}</p> +{/if} +{if $conflicts.conflict_type}<p class="warning">Conflicts with classes:<br /> + {section name=me loop=$conflicts.conflicts} + {$conflicts.conflicts[me]}<br /> + {/section} +<p> +{/if} +<SPAN class="type">Location:</SPAN> {$source_location} +<hr> +{include file="docblock.tpl" type="class" sdesc=$sdesc desc=$desc} +<hr> +{include file="var.tpl" show="summary"} +<hr> +{include file="const.tpl" show="summary"} +<hr> +<!-- =========== INHERITED CONST SUMMARY =========== --> +<A NAME='inheritedconst_summary'><!-- --></A> +<H3>Inherited Class Constant Summary</H3> + +{section name=iconsts loop=$iconsts} +<H4>Inherited From Class {$iconsts[iconsts].parent_class}</H4> +<UL> + {section name=iconsts2 loop=$iconsts[iconsts].iconsts} + <!-- =========== Summary =========== --> + <LI><CODE>{$iconsts[iconsts].iconsts[iconsts2].link}</CODE> = <CODE class="varsummarydefault">{$iconsts[iconsts].iconsts[iconsts2].value}</CODE> + <BR> + {$iconsts[iconsts].iconsts[iconsts2].sdesc} + {/section} + </LI> +</UL> +{/section} +<hr> +<!-- =========== INHERITED VAR SUMMARY =========== --> +<A NAME='inheritedvar_summary'><!-- --></A> +<H3>Inherited Class Variable Summary</H3> + +{section name=ivars loop=$ivars} +<H4>Inherited From Class {$ivars[ivars].parent_class}</H4> +<UL> + {section name=ivars2 loop=$ivars[ivars].ivars} + <!-- =========== Summary =========== --> + <LI><CODE>{$ivars[ivars].ivars[ivars2].link}</CODE> = <CODE class="varsummarydefault">{$ivars[ivars].ivars[ivars2].default}</CODE> + <BR> + {$ivars[ivars].ivars[ivars2].sdesc} + {/section} + </LI> +</UL> +{/section} + +<hr> +{include file="method.tpl" show="summary"} +<!-- =========== INHERITED METHOD SUMMARY =========== --> +<A NAME='methods_inherited'><!-- --></A> +<H3>Inherited Method Summary</H3> + +{section name=imethods loop=$imethods} +<H4>Inherited From Class {$imethods[imethods].parent_class}</h4> +<UL> + {section name=im2 loop=$imethods[imethods].imethods} + <!-- =========== Summary =========== --> + <LI><CODE>{$imethods[imethods].imethods[im2].link}</CODE><br> + {$imethods[imethods].imethods[im2].sdesc} + {/section} +</UL> +{/section} +<hr> +{include file="method.tpl"} +<hr> +{include file="var.tpl"} +<hr> +{include file="const.tpl"} +<hr> +{include file="footer.tpl"} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/classleft.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/classleft.tpl new file mode 100755 index 00000000..65d60118 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/classleft.tpl @@ -0,0 +1,8 @@ +{foreach key=subpackage item=files from=$classleftindex} + {if $subpackage != ""}<b>{$subpackage}</b><br>{/if} + {section name=files loop=$files} + {if $files[files].link != ''}<a href="{ldelim}$subdir{rdelim}{$files[files].link}">{/if} + {$files[files].title} + {if $files[files].link != ''}</a>{/if}<br> + {/section} +{/foreach} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/classtrees.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/classtrees.tpl new file mode 100755 index 00000000..6308aba9 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/classtrees.tpl @@ -0,0 +1,12 @@ +{capture name="title"}Class Trees for Package {$package}{/capture} +{include file="header.tpl" title=$smarty.capture.title} + +<!-- Start of Class Data --> +<H2> + {$smarty.capture.title} +</H2> +{section name=classtrees loop=$classtrees} +<SPAN class="code">Root class {$classtrees[classtrees].class}</SPAN> +<code class="vardefaultsummary">{$classtrees[classtrees].class_tree}</code> +{/section} +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/const.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/const.tpl new file mode 100644 index 00000000..720a71b5 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/const.tpl @@ -0,0 +1,29 @@ +{if $show=="summary"} +<!-- =========== CONST SUMMARY =========== --> +<A NAME='const_summary'><!-- --></A> +<H3>Class Constant Summary</H3> + +<UL> + {section name=consts loop=$consts} + <!-- =========== Summary =========== --> + <LI><CODE><a href="{$consts[consts].id}">{$consts[consts].const_name}</a></CODE> = <CODE class="varsummarydefault">{$consts[consts].const_value|replace:"\n":"<br>\n"|replace:" ":" "|replace:"\t":" "}</CODE> + <BR> + {$consts[consts].sdesc} + {/section} +</UL> +{else} +<!-- ============ VARIABLE DETAIL =========== --> + +<A NAME='variable_detail'></A> + +<H3>Class Constant Detail</H3> + +<UL> +{section name=consts loop=$consts} +<A NAME="{$consts[consts].const_dest}"><!-- --></A> +<LI><SPAN class="code">{$consts[consts].const_name}</SPAN> = <CODE class="varsummarydefault">{$consts[consts].const_value|replace:"\n":"<br>\n"|replace:" ":" "|replace:"\t":" "}</CODE> [line <span class="linenumber">{if $consts[consts].slink}{$consts[consts].slink}{else}{$consts[consts].line_number}{/if}</span>]</LI> +{include file="docblock.tpl" sdesc=$consts[consts].sdesc desc=$consts[consts].desc tags=$consts[consts].tags} +<BR> +{/section} +</UL> +{/if}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/contents.hhc.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/contents.hhc.tpl new file mode 100755 index 00000000..44938319 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/contents.hhc.tpl @@ -0,0 +1,11 @@ +<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> +<HTML> +<HEAD> +<meta name="GENERATOR" content="phpDocumentor version {$phpdocversion}"> +<!-- Sitemap 1.0 --> +</HEAD><BODY> +<OBJECT type="text/site properties"> + <param name="ImageType" value="Folder"> +</OBJECT> +{$toc} +</BODY></HTML> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/define.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/define.tpl new file mode 100755 index 00000000..4a3a64e9 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/define.tpl @@ -0,0 +1,33 @@ +{if $summary} +<!-- =========== CONSTANT SUMMARY =========== --> +<A NAME='constant_summary'><!-- --></A> +<H3>Constant Summary</H3> + +<UL> + {section name=def loop=$defines} + <LI><CODE><A HREF="{$defines[def].id}">{$defines[def].define_name}</A></CODE> = <CODE class="varsummarydefault">{$defines[def].define_value}</CODE> + <BR>{$defines[def].sdesc} + {/section} +</UL> +{else} +<!-- ============ CONSTANT DETAIL =========== --> + +<A NAME='constant_detail'></A> +<H3>Constant Detail</H3> + +<UL> + {section name=def loop=$defines} + <A NAME="{$defines[def].define_link}"><!-- --></A> + <LI><SPAN class="code">{$defines[def].define_name}</SPAN> = <CODE class="varsummarydefault">{$defines[def].define_value}</CODE> [line <span class="linenumber">{if $defines[def].slink}{$defines[def].slink}{else}{$defines[def].line_number}{/if}</span>]<br /> + {if $defines[def].define_conflicts.conflict_type} + <p><b>Conflicts with defines:</b> + {section name=me loop=$defines[def].define_conflicts.conflicts} + {$defines[def].define_conflicts.conflicts[me]}<br /> + {/section} + </p> + {/if} +<BR><BR> + {include file="docblock.tpl" sdesc=$defines[def].sdesc desc=$defines[def].desc tags=$defines[def].tags} + {/section} +</UL> +{/if}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/docblock.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/docblock.tpl new file mode 100755 index 00000000..ef621b9b --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/docblock.tpl @@ -0,0 +1,31 @@ +<!-- ========== Info from phpDoc block ========= --> +{if $function} + {if $params} + <p class="label"><b>Parameters</b></p> + {section name=params loop=$params} + <p class=dt><i>{$params[params].var}</i></p> + <p class=indent>{$params[params].data}</p> + {/section} + {/if} +{/if} +{section name=tags loop=$tags} +{if $tags[tags].keyword == 'return'} + <p class="label"><b>Returns</b></p> + <p class=indent>{$tags[tags].data}</p> +{/if} +{/section} +{if $sdesc || $desc} +<p class="label"><b>Remarks</b></p> +{/if} +{if $sdesc} +<p>{$sdesc}</p> +{/if} +{if $desc} +<p>{$desc}</p> +{/if} +{section name=tags loop=$tags} +{if $tags[tags].keyword != 'return'} + <p class="label"><b>{$tags[tags].keyword}</b></p> + <p class=indent>{$tags[tags].data}</p> +{/if} +{/section}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/elementindex.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/elementindex.tpl new file mode 100755 index 00000000..755f33c7 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/elementindex.tpl @@ -0,0 +1,9 @@ +{include file="header.tpl" noleftindex=true} +<a name="top"></a> +<h1>Index of All Elements</h1> +<b>Indexes by package:</b><br> +{section name=p loop=$packageindex} +<a href="elementindex_{$packageindex[p].title}.html">{$packageindex[p].title}</a><br> +{/section}<br> +{include file="basicindex.tpl" indexname="elementindex"} +{include file="footer.tpl"} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/errors.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/errors.tpl new file mode 100755 index 00000000..0f526584 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/errors.tpl @@ -0,0 +1,21 @@ +{include file="header.tpl" noleftindex=true} +{section name=files loop=$files} +<a href="#{$files[files].file}">{$files[files].file}</a><br> +{/section} +{foreach key=file item=issues from=$all} +<a name="{$file}"></a> +<h1>{$file}</h1> +{if count($issues.warnings)} +<h2>Warnings:</h2><br> +{section name=warnings loop=$issues.warnings} +<b>{$issues.warnings[warnings].name}</b> - {$issues.warnings[warnings].listing}<br> +{/section} +{/if} +{if count($issues.errors)} +<h2>Errors:</h2><br> +{section name=errors loop=$issues.errors} +<b>{$issues.errors[errors].name}</b> - {$issues.errors[errors].listing}<br> +{/section} +{/if} +{/foreach} +{include file="footer.tpl"} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/fileleft.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/fileleft.tpl new file mode 100755 index 00000000..45bcf945 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/fileleft.tpl @@ -0,0 +1,8 @@ +{foreach key=subpackage item=files from=$fileleftindex} + {if $subpackage != ""}subpackage <b>{$subpackage}</b><br>{/if} + {section name=files loop=$files} + {if $files[files].link != ''}<a href="{ldelim}$subdir{rdelim}{$files[files].link}">{/if} + {$files[files].title} + {if $files[files].link != ''}</a>{/if}<br> + {/section} +{/foreach} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/filesource.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/filesource.tpl new file mode 100755 index 00000000..55c826b9 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/filesource.tpl @@ -0,0 +1,6 @@ +{capture name="tutle"}File Source for {$name}{/capture} +{include file="header.tpl" title=$smarty.capture.tutle} +<h1 align="center">Source for file {$name}</h1> +<p>Documentation is available at {$docs}</p> +{$source} +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/footer.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/footer.tpl new file mode 100755 index 00000000..157bb1cd --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/footer.tpl @@ -0,0 +1,8 @@ +{if !$index} + <div id="credit"> + <hr> + Documentation generated on {$date} by <a href="{$phpdocwebsite}" target="_blank">phpDocumentor {$phpdocversion}</a> + </div> +{/if} +</body> +</html> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/function.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/function.tpl new file mode 100755 index 00000000..895e8ab4 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/function.tpl @@ -0,0 +1,44 @@ +{if $summary} +<!-- =========== FUNCTION SUMMARY =========== --> +<A NAME='function_summary'><!-- --></A> +<H3>Function Summary</H3> + +<UL> + {section name=func loop=$functions} + <!-- =========== Summary =========== --> + <LI><CODE><A HREF="{$functions[func].id}">{$functions[func].function_return} {$functions[func].function_name}()</A></CODE> + <BR>{$functions[func].sdesc} + {/section} +</UL> +{else} +<!-- ============ FUNCTION DETAIL =========== --> + +<A NAME='function_detail'></A> +<H3>Function Detail</H3> + +<UL> +{section name=func loop=$functions} +<A NAME="{$functions[func].function_dest}"><!-- --></A> + +<LI><SPAN class="code">{$functions[func].function_return} {$functions[func].function_name}()</SPAN> [line <span class="linenumber">{if $functions[func].slink}{$functions[func].slink}{else}{$functions[func].line_number}{/if}</span>]<br /> +<BR><BR> +<SPAN class="type">Usage:</SPAN> <SPAN class="code">{if $functions[func].ifunction_call.returnsref}&{/if}{$functions[func].function_name}( +{if count($functions[func].ifunction_call.params)} +{section name=params loop=$functions[func].ifunction_call.params} +{if $smarty.section.params.iteration != 1}, {/if}{if $functions[func].ifunction_call.params[params].hasdefault}[{/if}{$functions[func].ifunction_call.params[params].type} {$functions[func].ifunction_call.params[params].name}{if $functions[func].ifunction_call.params[params].hasdefault} = {$functions[func].ifunction_call.params[params].default|escape:"html"}]{/if} +{/section} +{/if})</SPAN> +<BR><BR> +{if $functions[func].function_conflicts.conflict_type} +<p><b>Conflicts with functions:</b> +{section name=me loop=$functions[func].function_conflicts.conflicts} +{$functions[func].function_conflicts.conflicts[me]}<br /> +{/section} +</p> +{/if} +{include file="docblock.tpl" sdesc=$functions[func].sdesc desc=$functions[func].desc tags=$functions[func].tags params=$functions[func].params function=true} +<BR> +<p class="top">[ <a href="#top">Top</a> ]</p> +{/section} +</UL> +{/if}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/global.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/global.tpl new file mode 100755 index 00000000..113a67ab --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/global.tpl @@ -0,0 +1,32 @@ +{if $summary} +<!-- =========== GLOBAL VARIABLE SUMMARY =========== --> +<A NAME='global_summary'><!-- --></A> +<H3>Global Variable Summary</H3> + +<UL> + {section name=glob loop=$globals} + <LI><CODE><A HREF="{$globals[glob].id}">{$globals[glob].global_name}</A></CODE> = <CODE class="varsummarydefault">{$globals[glob].global_value}</CODE> + <BR>{$globals[glob].sdesc} + {/section} +</UL> + +{else} +<!-- ============ GLOBAL VARIABLE DETAIL =========== --> + +<A NAME='global_detail'></A> +<H3>Global Variable Detail</H3> + +<UL> + {section name=glob loop=$globals} + <A NAME="{$globals[glob].global_link}"><!-- --></A> + <LI><i>{$globals[glob].global_type}</i> <SPAN class="code">{$globals[glob].global_name}</SPAN> = <CODE class="varsummarydefault">{$globals[glob].global_value}</CODE> [line <span class="linenumber">{if $globals[glob].slink}{$globals[glob].slink}{else}{$globals[glob].line_number}{/if}</span>]<br /> + {if $globals[glob].global_conflicts.conflict_type} + <p><b>Conflicts with globals:</b> + {section name=me loop=$globals[glob].global_conflicts.conflicts} + {$globals[glob].global_conflicts.conflicts[me]}<br /> + {/section} + {/if}<BR><BR> + {include file="docblock.tpl" sdesc=$globals[glob].sdesc desc=$globals[glob].desc tags=$globals[glob].tags} + {/section} +</UL> +{/if}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/header.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/header.tpl new file mode 100755 index 00000000..30fad6bb --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/header.tpl @@ -0,0 +1,22 @@ +<!-- + IE 6 makes the page to wide with the following doctype. I accept + standards if they help me, not if they make anything even harder! +//--> +<!--<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0 Transitional//EN' 'http://www.w3.org/TR/REC-html40/loose.dtd'>//--> +<!--NewPage--> +<HTML> +<HEAD> + <!-- Generated by PhpDoc date: '{$date}' --> + <TITLE>{$title}</TITLE> +<LINK REL ='stylesheet' TYPE='text/css' HREF='{$subdir}media/stylesheet.css' TITLE='Style'> +{if $bgleft} +<STYLE type="text/css"><!-- + BODY {ldelim} + background-image : url("{$subdir}media/bg_left.png"); + background-repeat : repeat-y; + {rdelim} +//--></STYLE> +{/if} +</HEAD> +<BODY {if !$bgleft}BGCOLOR='white'{/if}> +<a name="top"><!-- --></a>
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/hhp.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/hhp.tpl new file mode 100755 index 00000000..c82846a8 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/hhp.tpl @@ -0,0 +1,17 @@ +[OPTIONS] +Compatibility=1.1 or later +Compiled file=documentation.chm +Contents file=contents.hhc +Default topic=index.html +Display compile progress=No +Index file=Index.hhk +Language=0x409 English (United States) +Title={$maintitle} + +[FILES] +{section name=files loop=$files} +{$files[files].name} +{/section} + +[INFOTYPES] + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/include.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/include.tpl new file mode 100755 index 00000000..db76e4dc --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/include.tpl @@ -0,0 +1,26 @@ +{if $summary} +<!-- =========== INCLUDE SUMMARY =========== --> +<A NAME='include_summary'><!-- --></A> +<H3>Include Statements Summary</H3> + +<UL> + {section name=includes loop=$includes} + <LI><CODE><A HREF="#{$includes[includes].include_file}">{$includes[includes].include_name}</A></CODE> = <CODE class="varsummarydefault">{$includes[includes].include_value}</CODE> + <BR>{$includes[includes].sdesc} + {/section} +</UL> +{else} +<!-- ============ INCLUDE DETAIL =========== --> + +<A NAME='include_detail'></A> +<H3>Include Statements Detail</H3> + +<UL> + {section name=includes loop=$includes} + <A NAME="{$includes[includes].include_file}"><!-- --></A> + <LI><SPAN class="code">{$includes[includes].include_name} file:</SPAN> = <CODE class="varsummarydefault">{$includes[includes].include_value}</CODE> [line <span class="linenumber">{if $includes[includes].slink}{$includes[includes].slink}{else}{$includes[includes].line_number}{/if}</span>]<br /> + <BR><BR> + {include file="docblock.tpl" sdesc=$includes[includes].sdesc desc=$includes[includes].desc tags=$includes[includes].tags} + {/section} +</UL> +{/if}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/index.hhk.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/index.hhk.tpl new file mode 100755 index 00000000..94cbd18e --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/index.hhk.tpl @@ -0,0 +1,8 @@ +<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> +<HTML> +<HEAD> +<meta name="GENERATOR" content="phpDocumentor {$phpdocversion} {$phpdocwebsite}"> +<!-- Sitemap 1.0 --> +</HEAD><BODY> +{$klinks} +</BODY></HTML> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/index.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/index.tpl new file mode 100755 index 00000000..4e053097 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/index.tpl @@ -0,0 +1,24 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd"> +<!--NewPage--> +<HTML> +<HEAD> + <!-- Generated by PhpDoc on {$date} --> + <TITLE>{$title}</TITLE> +</HEAD> +<FRAMESET cols='220,*'> +{if $package_count > 1} + <FRAMESET rows='220,*'> + <FRAME src='packages.html' name='left_top'> +{/if} + <FRAME src='{$start}' name='left_bottom'> +{if $package_count > 1} + </FRAMESET> +{/if} + <FRAME src='{$blank}.html' name='right'> + <NOFRAMES> + <H2>Frame Alert</H2> + <P>This document is designed to be viewed using the frames feature. + If you see this message, you are using a non-frame-capable web client.</P> + </NOFRAMES> +</FRAMESET> +</HTML> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/media/bg_left.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/media/bg_left.png Binary files differnew file mode 100755 index 00000000..19fdf05d --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/media/bg_left.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/media/stylesheet.css b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/media/stylesheet.css new file mode 100755 index 00000000..aa245bfa --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/media/stylesheet.css @@ -0,0 +1,130 @@ +BODY, DIV, SPAN, PRE, CODE, TD, TH { + line-height: 140%; + font-size: 10pt; + font-family: verdana,arial,sans-serif; +} + +H1 { + font-size: 12pt; +} + +H4 { + font-size: 10pt; + font-weight: bold; +} + +P.label { + margin-bottom: 5px; +} +P.dt { + margin-top: 0px; + margin-bottom: 0px; +} +P.indent { + margin-top: 0px; + margin-left: 20px; + margin-bottom: 0px; +} +P.method { + background-color: #f0f0f0; + padding: 2px; + border: 1px #cccccc solid; +} + +A { + text-decoration: none; +} + +A:link{ + color: #336699; +} + +A:visited { + color: #003366; +} + +A:active, A:hover { + color: #6699CC; +} + +A:hover{ + text-decoration: underline; +} + +SPAN.type { + color: #336699; + font-size: xx-small; + font-weight: normal; + } + +PRE { + background-color: #EEEEEE; + padding: 10px; + border-width: 1px; + border-color: #336699; + border-style: solid; +} + +HR { + color: #336699; + background-color: #336699; + border-width: 0px; + height: 1px; + filter: Alpha (opacity=100,finishopacity=0,style=1); +} + +DIV.sdesc { + font-weight: bold; + background-color: #EEEEEE; + padding: 10px; + border-width: 1px; + border-color: #336699; + border-style: solid; +} + +DIV.desc { + font-family: monospace; + background-color: #EEEEEE; + padding: 10px; + border-width: 1px; + border-color: #336699; + border-style: solid; +} + +SPAN.code { + font-family: monospace; +} + +CODE.varsummarydefault{ + padding: 1px; + border-width: 1px; + border-style: dashed; + border-color: #336699; +} + +UL.tute { + margin: 0px; + padding: 0px; + padding-left: 5px; + } + +LI.tute { + line-height: 140%; + font-size: 10pt; + text-indent: -15px; + padding-bottom: 2px; + padding-left: 14px; +} + +.small{ + font-size: 9pt; +} + + +.tute-tag { color: #009999 } +.tute-attribute-name { color: #0000FF } +.tute-attribute-value { color: #0099FF } +.tute-entity { font-weight: bold; } +.tute-comment { font-style: italic } +.tute-inline-tag { color: #636311; font-weight: bold } +.src-code { font-family: 'Courier New', Courier, monospace; font-weight: normal; } diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/method.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/method.tpl new file mode 100755 index 00000000..4816c4f9 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/method.tpl @@ -0,0 +1,126 @@ +{if $show == 'summary'} +<!-- =========== METHOD SUMMARY =========== --> +<A NAME='method_summary'><!-- --></A> +<H3>Method Summary</H3> + +<UL> + {section name=methods loop=$methods} + {if $methods[methods].static} + <!-- =========== Summary =========== --> + <LI><CODE>static <A HREF='{$methods[methods].id}'>{$methods[methods].function_return} {$methods[methods].function_name}()</A></CODE> + <BR>{$methods[methods].sdesc} + {/if} + {/section} + {section name=methods loop=$methods} + {if $methods[methods].static} + <!-- =========== Summary =========== --> + <LI><CODE><A HREF='{$methods[methods].id}'>{$methods[methods].function_return} {$methods[methods].function_name}()</A></CODE> + <BR>{$methods[methods].sdesc} + {/if} + {/section} +</UL> + +{else} +<!-- ============ METHOD DETAIL =========== --> + +<A NAME='method_detail'></A> +<H3>Method Detail</H3> + +<UL> +{section name=methods loop=$methods} +{if $methods[methods].static} +<A NAME='{$methods[methods].method_dest}'><!-- --></A> + +<h1><A name="{$methods[methods].function_name}"></A>static {$class_name}::{$methods[methods].function_name}</h1> + +<p class=method> +<b>static {if $methods[methods].ifunction_call.returnsref}&{/if}{$methods[methods].function_name}(</b> +{if count($methods[methods].ifunction_call.params)} +{section name=params loop=$methods[methods].ifunction_call.params} +{if $smarty.section.params.iteration != 1}, {/if} +{if $methods[methods].ifunction_call.params[params].hasdefault}[{/if}<b>{$methods[methods].ifunction_call.params[params].type}</b> +<i>{$methods[methods].ifunction_call.params[params].name}</i>{if $methods[methods].ifunction_call.params[params].hasdefault} = {$methods[methods].ifunction_call.params[params].default}]{/if} +{/section} +{/if}<b> );</b> +</p> + +{if $methods[methods].descmethod} + <p>Overridden in child classes as:<br /> + {section name=dm loop=$methods[methods].descmethod} + <dl> + <dt>{$methods[methods].descmethod[dm].link}</dt> + <dd>{$methods[methods].descmethod[dm].sdesc}</dd> + </dl> + {/section}</p> +{/if} +{if $methods[methods].method_overrides} +<p>Overrides {$methods[methods].method_overrides.link} ({$methods[methods].method_overrides.sdesc|default:"parent method not documented"})</p> +{/if} + {if $methods[methods].method_implements} + <hr class="separator" /> + <div class="notes">Implementation of:</div> + {section name=imp loop=$methods[methods].method_implements} + <dl> + <dt>{$methods[methods].method_implements[imp].link}</dt> + {if $methods[methods].method_implements[imp].sdesc} + <dd>{$methods[methods].method_implements[imp].sdesc}</dd> + {/if} + </dl> + {/section} + {/if} + +{include file="docblock.tpl" sdesc=$methods[methods].sdesc desc=$methods[methods].desc tags=$methods[methods].tags params=$methods[methods].params function=true} + <p class="top">[ <a href="#top">Top</a> ]</p> +<BR> +{/if} +{/section} + +{section name=methods loop=$methods} +{if !$methods[methods].static} +<A NAME='{$methods[methods].method_dest}'><!-- --></A> + +<h1><A name="{$methods[methods].function_name}"></A>{$class_name}::{$methods[methods].function_name}</h1> + +<p class=method> +<b>{if $methods[methods].ifunction_call.returnsref}&{/if}{$methods[methods].function_name}(</b> +{if count($methods[methods].ifunction_call.params)} +{section name=params loop=$methods[methods].ifunction_call.params} +{if $smarty.section.params.iteration != 1}, {/if} +{if $methods[methods].ifunction_call.params[params].hasdefault}[{/if}<b>{$methods[methods].ifunction_call.params[params].type}</b> +<i>{$methods[methods].ifunction_call.params[params].name}</i>{if $methods[methods].ifunction_call.params[params].hasdefault} = {$methods[methods].ifunction_call.params[params].default}]{/if} +{/section} +{/if}<b> );</b> +</p> + +{if $methods[methods].descmethod} + <p>Overridden in child classes as:<br /> + {section name=dm loop=$methods[methods].descmethod} + <dl> + <dt>{$methods[methods].descmethod[dm].link}</dt> + <dd>{$methods[methods].descmethod[dm].sdesc}</dd> + </dl> + {/section}</p> +{/if} +{if $methods[methods].method_overrides} +<p>Overrides {$methods[methods].method_overrides.link} ({$methods[methods].method_overrides.sdesc|default:"parent method not documented"})</p> +{/if} + {if $methods[methods].method_implements} + <hr class="separator" /> + <div class="notes">Implementation of:</div> + {section name=imp loop=$methods[methods].method_implements} + <dl> + <dt>{$methods[methods].method_implements[imp].link}</dt> + {if $methods[methods].method_implements[imp].sdesc} + <dd>{$methods[methods].method_implements[imp].sdesc}</dd> + {/if} + </dl> + {/section} + {/if} + +{include file="docblock.tpl" sdesc=$methods[methods].sdesc desc=$methods[methods].desc tags=$methods[methods].tags params=$methods[methods].params function=true} + <p class="top">[ <a href="#top">Top</a> ]</p> +<BR> +{/if} +{/section} +</UL> +{/if}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/packages.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/packages.tpl new file mode 100755 index 00000000..0967e6e7 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/packages.tpl @@ -0,0 +1,3 @@ +{section name=packages loop=$packages} +<a href="{$packages[packages].link}">{$packages[packages].title}</a> +{/section}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/page.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/page.tpl new file mode 100755 index 00000000..39f4823a --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/page.tpl @@ -0,0 +1,34 @@ +{include file="header.tpl" eltype="Procedural file"} +<h3><SPAN class="type">File:</SPAN> {$source_location}<HR> +</h3> +{if $tutorial} +<div class="maintutorial">Main Tutorial: {$tutorial}</div> +{/if} +{include file="docblock.tpl" desc=$desc sdesc=$sdesc tags=$tags} +Classes in this file: +<dl> +{section name=classes loop=$classes} +<dt>{$classes[classes].link}</dt> + <dd>{$classes[classes].sdesc}</dd> +{/section} +</dl> +<hr> +{include file="include.tpl" summary=true} +<hr> +{include file="global.tpl" summary=true} +<hr> +{include file="define.tpl" summary=true} +<hr> +{include file="function.tpl" summary=true} +<hr> +{include file="include.tpl"} +<hr> +{include file="global.tpl"} +<hr> +{include file="define.tpl"} +<hr> +{include file="function.tpl"} +<hr> +{include file="footer.tpl"} + +</HTML>
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/pkgelementindex.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/pkgelementindex.tpl new file mode 100755 index 00000000..f3a90ab3 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/pkgelementindex.tpl @@ -0,0 +1,14 @@ +{include file="header.tpl"} +<a name="top"></a> +<h1>Element index for package {$package}</h1> +{if count($packageindex) > 1} +<b>Indexes by package:</b><br> +{/if} +{section name=p loop=$packageindex} +{if $packageindex[p].title != $package} +<a href="elementindex_{$packageindex[p].title}.html">{$packageindex[p].title}</a><br> +{/if} +{/section}<br> +<a href="elementindex.html"><b>Index of all elements</b></a><br> +{include file="basicindex.tpl" indexname=elementindex_$package} +{include file="footer.tpl"} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/ric.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/ric.tpl new file mode 100755 index 00000000..eff734c1 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/ric.tpl @@ -0,0 +1,6 @@ +{include file="header.tpl"} +<h1 align="center">{$name}</h1> +<pre> +{$contents|htmlentities} +</pre> +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/tocentry.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/tocentry.tpl new file mode 100755 index 00000000..dd0669b5 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/tocentry.tpl @@ -0,0 +1,11 @@ +<UL> +{section name=entry loop=$entry} + <LI> <OBJECT type="text/sitemap"> + <param name="Name" value="{$entry[entry].paramname}"> +{if $entry[entry].isclass} <param name="ImageNumber" value="1"> +{/if}{if $entry[entry].outputfile} <param name="Local" value="{$entry[entry].outputfile}"> +{/if} </OBJECT> + {if $entry[entry].tocsubentries}{$entry[entry].tocsubentries}{/if} +{/section} + {$tocsubentries} +</UL> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/todolist.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/todolist.tpl new file mode 100755 index 00000000..f929ccdb --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/todolist.tpl @@ -0,0 +1,14 @@ +{include file="header.tpl" title="Todo List"} +<div align="center"><h1>Todo List</h1></div> +{foreach from=$todos key=todopackage item=todo} +<h2>{$todopackage}</h2> +{section name=todo loop=$todo} +<h3>{$todo[todo].link}</h3> +<ul> +{section name=t loop=$todo[todo].todos} + <li>{$todo[todo].todos[t]}</li> +{/section} +</ul> +{/section} +{/foreach} +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/tutorial.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/tutorial.tpl new file mode 100755 index 00000000..a943522c --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/tutorial.tpl @@ -0,0 +1,32 @@ +{include file="header.tpl" title=$title} +{if $nav} +<table width="100%" border="0" cellpadding="0" cellspacing="0"> +<tr> +<td width="10%" align="left" valign="bottom">{if $prev}<a href= +"{$prev}">{/if}Prev{if $prev}</a>{/if}</td> +<td width="80%" align="center" valign="bottom"></td> +<td width="10%" align="right" valign="bottom">{if $next}<a href= +"{$next}">{/if}Next{if $next}</a>{/if}</td> +</tr> +</table> +{/if} +{$contents} +{if $nav} +<table width="100%" border="0" cellpadding="0" cellspacing="0"> +<tr> +<td width="33%" align="left" valign="top">{if $prev}<a href="{$prev}">{/if} +Prev{if $prev}</a>{/if}</td> +<td width="34%" align="center" valign="top">{if $up}<a href= +"{$up}">Up</a>{else} {/if}</td> +<td width="33%" align="right" valign="top">{if $next}<a href= +"{$next}">{/if}Next{if $next}</a>{/if}</td> +</tr> + +<tr> +<td width="33%" align="left" valign="top">{if $prevtitle}{$prevtitle}{/if}</td> +<td width="34%" align="center" valign="top">{if $uptitle}{$uptitle}{/if}</td> +<td width="33%" align="right" valign="top">{if $nexttitle}{$nexttitle}{/if}</td> +</tr> +</table> +{/if} +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/tutorial_toc.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/tutorial_toc.tpl new file mode 100755 index 00000000..3d22d403 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/tutorial_toc.tpl @@ -0,0 +1,29 @@ +{if count($toc)} +<h1 align="center">Table of Contents</h1> +<ul> +{section name=toc loop=$toc} +{if $toc[toc].tagname == 'refsect1'} +{assign var="context" value="refsect1"} +{$toc[toc].link}<br /> +{/if} +{if $toc[toc].tagname == 'refsect2'} +{assign var="context" value="refsect2"} + {$toc[toc].link}<br /> +{/if} +{if $toc[toc].tagname == 'refsect3'} +{assign var="context" value="refsect3"} + {$toc[toc].link}<br /> +{/if} +{if $toc[toc].tagname == 'table'} +{if $context == 'refsect2'} {/if} +{if $context == 'refsect3'} {/if} +Table: {$toc[toc].link} +{/if} +{if $toc[toc].tagname == 'example'} +{if $context == 'refsect2'} {/if} +{if $context == 'refsect3'} {/if} +Table: {$toc[toc].link} +{/if} +{/section} +</ul> +{/if}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/tutorial_tree.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/tutorial_tree.tpl new file mode 100755 index 00000000..de907179 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/tutorial_tree.tpl @@ -0,0 +1,5 @@ +<ul> + <li><a href="{$main.link}" target="right">{$main.title|strip_tags}</a> +{if $kids}{$kids}</li>{/if} +</ul> + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/var.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/var.tpl new file mode 100755 index 00000000..eeefcc51 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/var.tpl @@ -0,0 +1,51 @@ +{if $show=="summary"} +<!-- =========== VAR SUMMARY =========== --> +<A NAME='var_summary'><!-- --></A> +<H3>Class Variable Summary</H3> + +<UL> + {section name=vars loop=$vars} + {if $vars[vars].static} + <!-- =========== Summary =========== --> + <LI><CODE>static <a href="{$vars[vars].id}">{$vars[vars].var_name}</a></CODE> = <CODE class="varsummarydefault">{$vars[vars].var_default|replace:"\n":"<br>\n"|replace:" ":" "|replace:"\t":" "}</CODE> + <BR> + {$vars[vars].sdesc} + {/if} + {/section} + {section name=vars loop=$vars} + {if !$vars[vars].static} + <!-- =========== Summary =========== --> + <LI><CODE><a href="{$vars[vars].id}">{$vars[vars].var_name}</a></CODE> = <CODE class="varsummarydefault">{$vars[vars].var_default|replace:"\n":"<br>\n"|replace:" ":" "|replace:"\t":" "}</CODE> + <BR> + {$vars[vars].sdesc} + {/if} + {/section} +</UL> +{else} +<!-- ============ VARIABLE DETAIL =========== --> + +<A NAME='variable_detail'></A> + +<H3>Variable Detail</H3> + +<UL> +{section name=vars loop=$vars} +{if $vars[vars].static} +<A NAME="{$vars[vars].var_dest}"><!-- --></A> +<LI><SPAN class="code">static {$vars[vars].var_name}</SPAN> = <CODE class="varsummarydefault">{$vars[vars].var_default|replace:"\n":"<br>\n"|replace:" ":" "|replace:"\t":" "}</CODE> [line <span class="linenumber">{if $vars[vars].slink}{$vars[vars].slink}{else}{$vars[vars].line_number}{/if}</span>]</LI> +<LI><b>Data type:</b> <CODE class="varsummarydefault">{$vars[vars].var_type}</CODE>{if $vars[vars].var_overrides}<b>Overrides:</b> {$vars[vars].var_overrides}<br>{/if}</LI> +{include file="docblock.tpl" sdesc=$vars[vars].sdesc desc=$vars[vars].desc tags=$vars[vars].tags} +<BR> +{/if} +{/section} +{section name=vars loop=$vars} +{if !$vars[vars].static} +<A NAME="{$vars[vars].var_dest}"><!-- --></A> +<LI><SPAN class="code">{$vars[vars].var_name}</SPAN> = <CODE class="varsummarydefault">{$vars[vars].var_default|replace:"\n":"<br>\n"|replace:" ":" "|replace:"\t":" "}</CODE> [line <span class="linenumber">{if $vars[vars].slink}{$vars[vars].slink}{else}{$vars[vars].line_number}{/if}</span>]</LI> +<LI><b>Data type:</b> <CODE class="varsummarydefault">{$vars[vars].var_type}</CODE>{if $vars[vars].var_overrides}<b>Overrides:</b> {$vars[vars].var_overrides}<br>{/if}</LI> +{include file="docblock.tpl" sdesc=$vars[vars].sdesc desc=$vars[vars].desc tags=$vars[vars].tags} +<BR> +{/if} +{/section} +</UL> +{/if}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/HTMLSmartyConverter.inc b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/HTMLSmartyConverter.inc new file mode 100755 index 00000000..d9fe459c --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/HTMLSmartyConverter.inc @@ -0,0 +1,1966 @@ +<?php +/** + * HTML output converter for Smarty Template. + * This Converter takes output from the {@link Parser} and converts it to HTML-ready output for use with {@link Smarty}. + * + * phpDocumentor :: automatic documentation generator + * + * PHP versions 4 and 5 + * + * Copyright (c) 2000-2006 Joshua Eichorn, Gregory Beaver + * + * LICENSE: + * + * This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General + * Public License as published by the Free Software Foundation; + * either version 2.1 of the License, or (at your option) any + * later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package Converters + * @subpackage HTMLframes + * @author Joshua Eichorn <jeichorn@phpdoc.org> + * @author Greg Beaver <cellog@php.net> + * @copyright 2000-2006 Joshua Eichorn, Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version CVS: $Id: HTMLSmartyConverter.inc 234145 2007-04-19 20:20:57Z ashnazg $ + * @filesource + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @see parserDocBlock, parserInclude, parserPage, parserClass + * @see parserDefine, parserFunction, parserMethod, parserVar + * @since 1.0rc1 + */ +/** + * HTML output converter. + * This Converter takes output from the {@link Parser} and converts it to HTML-ready output for use with {@link Smarty}. + * + * @package Converters + * @subpackage HTMLSmarty + * @see parserDocBlock, parserInclude, parserPage, parserClass, parserDefine, parserFunction, parserMethod, parserVar + * @author Greg Beaver <cellog@php.net> + * @since 1.0rc1 + * @version $Revision: 234145 $ + */ +class HTMLSmartyConverter extends Converter +{ + /** + * This converter knows about the new root tree processing + * In order to fix PEAR Bug #6389 + * @var boolean + */ + var $processSpecialRoots = true; + /** + * Smarty Converter wants elements sorted by type as well as alphabetically + * @see Converter::$sort_page_contents_by_type + * @var boolean + */ + var $sort_page_contents_by_type = true; + /** @var string */ + var $outputformat = 'HTML'; + /** @var string */ + var $name = 'Smarty'; + /** + * indexes of elements by package that need to be generated + * @var array + */ + var $leftindex = array('classes' => true, 'pages' => true, 'functions' => true, 'defines' => false, 'globals' => false); + + /** + * output directory for the current procedural page being processed + * @var string + */ + var $page_dir; + + /** + * target directory passed on the command-line. + * {@link $targetDir} is malleable, always adding package/ and package/subpackage/ subdirectories onto it. + * @var string + */ + var $base_dir; + + /** + * output directory for the current class being processed + * @var string + */ + var $class_dir; + + /** + * array of converted package page names. + * Used to link to the package page in the left index + * @var array Format: array(package => 1) + */ + var $package_pages = array(); + + /** + * controls formatting of parser informative output + * + * Converter prints: + * "Converting /path/to/file.php... Procedural Page Elements... Classes..." + * Since HTMLdefaultConverter outputs files while converting, it needs to send a \n to start a new line. However, if there + * is more than one class, output is messy, with multiple \n's just between class file output. This variable prevents that + * and is purely cosmetic + * @var boolean + */ + var $juststarted = false; + + /** + * contains all of the template procedural page element loop data needed for the current template + * @var array + */ + var $current; + + /** + * contains all of the template class element loop data needed for the current template + * @var array + */ + var $currentclass; + var $wrote = false; + var $ric_set = array(); + + /** + * sets {@link $base_dir} to $targetDir + * @see Converter() + */ + + /**#@+ + * @access private + */ + var $_classleft_cache = false; + var $_classcontents_cache = false; + var $_pagecontents_cache = false; + var $_pageleft_cache = false; + var $_done_package_index = false; + var $_ric_done = false; + var $_wrote_tdir = false; + var $ric_contents = array(); + /**#@-*/ + + function HTMLSmartyConverter(&$allp, &$packp, &$classes, &$procpages, $po, $pp, $qm, $targetDir, $templateDir, $title) + { + Converter::Converter($allp, $packp, $classes, $procpages,$po, $pp, $qm, $targetDir, $templateDir, $title); + $this->base_dir = $targetDir; + } + + function writeSource($path, $value) + { + $templ = &$this->newSmarty(); + $pathinfo = $this->proceduralpages->getPathInfo($path, $this); + $templ->assign('source',$value); + $templ->assign('package',$pathinfo['package']); + $templ->assign('subpackage',$pathinfo['subpackage']); + $templ->assign('name',$pathinfo['name']); + $templ->assign('source_loc',$pathinfo['source_loc']); + $templ->assign('docs',$pathinfo['docs']); + $templ->assign("subdir",'../'); + $templ->register_outputfilter('HTMLSmarty_outputfilter'); + $this->setTargetDir($this->getFileSourcePath($this->base_dir)); + phpDocumentor_out("\n"); + $this->setSourcePaths($path); + $this->writefile($this->getFileSourceName($path).'.html',$templ->fetch('filesource.tpl')); + } + + function writeExample($title, $path, $source) + { + $templ = &$this->newSmarty(); + $templ->assign('source',$source); + if (empty($title)) + { + $title = 'example'; + addWarning(PDERROR_EMPTY_EXAMPLE_TITLE, $path, $title); + } + $templ->assign('title',$title); + $templ->assign('file',$path); + $templ->assign("subdir",'../'); + $templ->register_outputfilter('HTMLSmarty_outputfilter'); + $this->setTargetDir($this->base_dir . PATH_DELIMITER . '__examplesource'); + phpDocumentor_out("\n"); + $this->writefile('exsource_'.$path.'.html',$templ->fetch('examplesource.tpl')); + } + + function getExampleLink($path, $title) + { + return $this->returnLink('{$subdir}__examplesource' . PATH_DELIMITER . 'exsource_'.$path.'.html',$title); + } + + function getSourceLink($path) + { + return $this->returnLink('{$subdir}__filesource/' . + $this->getFileSourceName($path).'.html','Source Code for this file'); + } + + /** + * Retrieve a Converter-specific anchor to a segment of a source code file + * parsed via a {@tutorial tags.filesource.pkg} tag. + * @param string full path to source file + * @param string name of anchor + * @param string link text, if this is a link + * @param boolean returns either a link or a destination based on this + * parameter + * @return string link to an anchor, or the anchor + */ + function getSourceAnchor($sourcefile,$anchor,$text = '',$link = false) + { + if ($link) { + return $this->returnLink('{$subdir}__filesource/' . + $this->getFileSourceName($sourcefile) . '.html#a' . $anchor, $text); + } else { + return '<a name="a'.$anchor.'"></a>'; + } + } + + /** + * Return a line of highlighted source code with formatted line number + * + * If the $path is a full path, then an anchor to the line number will be + * added as well + * @param integer line number + * @param string highlighted source code line + * @param false|string full path to @filesource file this line is a part of, + * if this is a single line from a complete file. + * @return string formatted source code line with line number + */ + function sourceLine($linenumber, $line, $path = false) + { + $extra = ''; + if (strlen(str_replace("\n", '', $line)) == 0) { + $extra = ' '; + } + if ($path) + { + return '<li><div class="src-line">' . $this->getSourceAnchor($path, $linenumber) . + str_replace("\n",'',$line) . $extra . + "</div></li>\n"; + } else + { + return '<li><div class="src-line">' . str_replace("\n",'',$line) . "$extra</div></li>\n"; + } + } + + /** + * Used to convert the <<code>> tag in a docblock + * @param string + * @param boolean + * @return string + */ + function ProgramExample($example, $tutorial = false, $inlinesourceparse = null/*false*/, + $class = null/*false*/, $linenum = null/*false*/, $filesourcepath = null/*false*/) + { + $trans = $this->template_options['desctranslate']; + $this->template_options['desctranslate'] = array(); + $example = '<ol>' . parent::ProgramExample($example, $tutorial, $inlinesourceparse, $class, $linenum, $filesourcepath) + .'</ol>'; + $this->template_options['desctranslate'] = $trans; + if (!isset($this->template_options['desctranslate'])) return $example; + if (!isset($this->template_options['desctranslate']['code'])) return $example; + $example = $this->template_options['desctranslate']['code'] . $example; + if (!isset($this->template_options['desctranslate']['/code'])) return $example; + return $example . $this->template_options['desctranslate']['/code']; + } + + /** + * @param string + */ + function TutorialExample($example) + { + $trans = $this->template_options['desctranslate']; + $this->template_options['desctranslate'] = array(); + $example = '<ol>' . parent::TutorialExample($example) + .'</ol>'; + $this->template_options['desctranslate'] = $trans; + if (!isset($this->template_options['desctranslate'])) return $example; + if (!isset($this->template_options['desctranslate']['code'])) return $example; + $example = $this->template_options['desctranslate']['code'] . $example; + if (!isset($this->template_options['desctranslate']['/code'])) return $example; + return $example . $this->template_options['desctranslate']['/code']; + } + + function getCurrentPageLink() + { + return $this->curname . '.html'; + } + + function unmangle($sourcecode) + { + $sourcecode = str_replace(' ',' ',$sourcecode); + $sourcecode = str_replace('&','&',$sourcecode); + $sourcecode = str_replace('<br />',"<br>",$sourcecode); + $sourcecode = str_replace('<code>','<pre>',$sourcecode); + $sourcecode = str_replace('</code>','</pre>',$sourcecode); + $sourcecode = str_replace('<','<',$sourcecode); + $sourcecode = str_replace('>','>',$sourcecode); + return $sourcecode; + } + + /** + * Uses htmlspecialchars() on the input + */ + function postProcess($text) + { + if ($this->highlightingSource) { + return str_replace(array(' ',"\t"), array(' ', ' '), + htmlspecialchars($text)); + } + return htmlspecialchars($text); + } + + /** + * Use the template tutorial_toc.tpl to generate a table of contents for HTML + * @return string table of contents formatted for use in the current output format + * @param array format: array(array('tagname' => section, 'link' => returnsee link, 'id' => anchor name, 'title' => from title tag),...) + */ + function formatTutorialTOC($toc) + { + $template = &$this->newSmarty(); + $template->assign('toc',$toc); + return $template->fetch('tutorial_toc.tpl'); + } + + function &SmartyInit(&$templ) + { + $this->makeLeft(); + $templ->assign("ric",$this->ric_set); + $templ->assign("packageindex",$this->package_index); + $templ->assign('hastodos',count($this->todoList)); + $templ->assign('todolink','todolist.html'); + $templ->assign("subdir",''); + return $templ; + } + + /** + * Writes out the template file of {@link $class_data} and unsets the template to save memory + * @see registerCurrentClass() + * @see parent::endClass() + */ + function endClass() + { + $a = '../'; + if (!empty($this->subpackage)) $a .= '../'; + if ($this->juststarted) + { + $this->juststarted = false; + phpDocumentor_out("\n"); + flush(); + } + $this->setTargetDir($this->base_dir . PATH_DELIMITER . $this->class_dir); + $classleft = $this->getClassLeft(); + $this->class_data->assign("compiledfileindex",$this->getPageLeft()); + $this->class_data->assign("compiledclassindex",$classleft['class']); + $this->class_data->assign("compiledinterfaceindex",$classleft['interface']); + $this->class_data->assign("tutorials",$this->getTutorialList()); + $this->class_data->assign("contents",$this->getClassContents()); + $this->class_data->assign("packageindex",$this->package_index); + $this->class_data->assign("package",$this->package); + $this->class_data->assign("subdir",$a); + $this->class_data->register_outputfilter('HTMLSmarty_outputfilter'); + $this->writefile($this->class . '.html',$this->class_data->fetch('class.tpl')); + unset($this->class_data); + } + + function getTutorialList() + { + static $cache = false; + if ($cache) + { + if (isset($cache[$this->package])) return $cache[$this->package]; + } + $package = $this->package; + if (!isset($this->tutorials[$package])) return false; + foreach($this->tutorials[$package] as $subpackage => $blah) + { + $subpackages[] = $subpackage; + } + $tutes = array(); + foreach($subpackages as $subpackage) + { + if (isset($this->tutorial_tree) && is_array($this->tutorial_tree)) + foreach($this->tutorial_tree as $root => $tr) + { + if ($tr['tutorial']->package == $package && $tr['tutorial']->subpackage == $subpackage) + $tutes[$tr['tutorial']->tutorial_type][] = $this->getTutorialTree($tr['tutorial']); + } + } + $cache[$this->package] = $tutes; + return $tutes; + } + + function getTutorialTree($tutorial,$k = false) + { + $ret = ''; + if (is_object($tutorial)) $tree = parent::getTutorialTree($tutorial); else $tree = $tutorial; + if (!$tree) + { + $template = &$this->newSmarty(); + $template->assign('subtree',false); + $template->assign('name',str_replace('.','',$tutorial->name)); + $template->assign('parent',false); + $template->assign('haskids',false); + $template->assign('kids',''); + $link = new tutorialLink; + $t = $tutorial; + $link->addLink('',$t->path,$t->name,$t->package,$t->subpackage,$t->getTitle($this)); + $main = array('link' => $this->getId($link), 'title' => $link->title); + $template->assign('main',$main); + return $template->fetch('tutorial_tree.tpl'); + } + if (isset($tree['kids'])) + { + foreach($tree['kids'] as $subtree) + { + $ret .= $this->getTutorialTree($subtree, true); + } + } + $template = &$this->newSmarty(); + $template->assign('subtree',$k); + $template->assign('name',str_replace('.','',$tree['tutorial']->name)); + $template->assign('parent',($k ? str_replace('.','',$tree['tutorial']->parent->name) : false)); + $template->assign('haskids',strlen($ret)); + $template->assign('kids',$ret); + $link = new tutorialLink; + $t = $tree['tutorial']; + $link->addLink('',$t->path,$t->name,$t->package,$t->subpackage,$t->getTitle($this)); + $main = array('link' => $this->getId($link), 'title' => $link->title); + $template->assign('main',$main); + return $template->fetch('tutorial_tree.tpl'); + } + + function getClassLeft() + { + if ($this->_classleft_cache) + { + if (isset($this->_classleft_cache[$this->package][$this->subpackage])) return $this->_classleft_cache[$this->package][$this->subpackage]; + } + $arr = $classarr = $interfacearr = array(); + if (isset($this->left['#class'][$this->package])) + foreach($this->left['#class'][$this->package] as $subpackage => $pages) + { + for ($i = 0; $i < count($pages); $i++) { + if ($pages[$i]['is_interface']) { + $interfacearr[$subpackage][] = $pages[$i]; + } else { + $classarr[$subpackage][] = $pages[$i]; + } + } + } + $templ = &$this->newSmarty(); + $templ->assign('classleftindex',$classarr); + $classarr = $templ->fetch('classleft.tpl'); + $this->_classleft_cache[$this->package][$this->subpackage]['class'] = $classarr; + $templ = &$this->newSmarty(); + $templ->assign('classleftindex',$interfacearr); + $interfacearr = $templ->fetch('classleft.tpl'); + $this->_classleft_cache[$this->package][$this->subpackage]['interface'] = + $interfacearr; + return $this->_classleft_cache[$this->package][$this->subpackage]; + } + + function getClassContents() + { + if ($this->_classcontents_cache) + { + if (isset($this->_classcontents_cache[$this->package][$this->subpackage][$this->class])) return $this->_classcontents_cache[$this->package][$this->subpackage][$this->class]; + } + $arr = array(); + foreach($this->class_contents[$this->package][$this->subpackage][$this->class] as $i => $link) + { + if (is_object($link)) + $arr[$link->type][] = $this->returnSee($link,$link->name); + } + $this->_classcontents_cache[$this->package][$this->subpackage][$this->class] = $arr; + return $arr; + } + + function getPageContents() + { + if (!isset($this->path)) $this->path = '#####'; + if ($this->_pagecontents_cache) + { + if (isset($this->_pagecontents_cache[$this->package][$this->subpackage][$this->path])) return $this->_pagecontents_cache[$this->package][$this->subpackage][$this->path]; + } + $arr = array(); + foreach($this->page_contents[$this->curpage->package][$this->curpage->subpackage] as $i => $link) + { + if (is_object($link)) + $arr[$link->type][$i] = $this->returnSee($link); + } + $this->_pagecontents_cache[$this->package][$this->subpackage][$this->path] = $arr; + return $arr; + } + + function getPageLeft() + { + if ($this->_pageleft_cache) + { + if (isset($this->_pageleft_cache[$this->package][$this->subpackage])) return $this->_pageleft_cache[$this->package][$this->subpackage]; + } + $arr = array(); + if (isset($this->left[$this->package])) + foreach($this->left[$this->package] as $subpackage => $pages) + { + $arr[$subpackage] = $pages; + } + $templ = &$this->newSmarty(); + $templ->assign('fileleftindex',$arr); + $arr = $templ->fetch('fileleft.tpl'); + $this->_pageleft_cache[$this->package][$this->subpackage] = $arr; + return $arr; + } + + /** + * Writes out the template file of {@link $page_data} and unsets the template to save memory + * @see registerCurrent() + * @see parent::endPage() + */ + function endPage() + { + $this->package = $this->curpage->package; + $this->subpackage = $this->curpage->subpackage; + $a = '../'; + if (!empty($this->subpackage)) $a .= '../'; + $classleft = $this->getClassLeft(); + $this->setTargetDir($this->base_dir . PATH_DELIMITER . $this->page_dir); + $this->page_data->assign("contents",$this->getPageContents()); + $this->page_data->assign("compiledfileindex",$this->getPageLeft()); + $this->page_data->assign("compiledclassindex",$classleft['class']); + $this->page_data->assign("compiledinterfaceindex",$classleft['interface']); + $this->page_data->assign("tutorials",$this->getTutorialList()); + $this->page_data->assign("packageindex",$this->package_index); + $this->page_data->assign("package",$this->package); + $this->page_data->assign("subdir",$a); + $this->page_data->register_outputfilter('HTMLSmarty_outputfilter'); + $this->writefile($this->page . '.html',$this->page_data->fetch('page.tpl')); + unset($this->page_data); + } + + /** + * @param string + * @param string + * @return string <a href="'.$link.'">'.$text.'</a> + */ + function returnLink($link,$text) + { + return '<a href="'.$link.'">'.$text.'</a>'; + } + + function makeLeft() + { + if ($this->_done_package_index) return; + $this->_done_package_index = true; + if (!isset($this->package_index)) + foreach($this->all_packages as $key => $val) + { + if (isset($this->pkg_elements[$key])) + { + if (!isset($start)) $start = $key; + $this->package_index[] = array('link' => "li_$key.html", 'title' => $key); + } + } + foreach($this->page_elements as $package => $o1) + { + foreach($o1 as $subpackage => $links) + { + for($i=0;$i<count($links);$i++) + { + $this->left[$package][$subpackage][] = + array("link" => $this->getId($links[$i]), "title" => $links[$i]->name); + } + } + } + foreach($this->class_elements as $package => $o1) + { + foreach($o1 as $subpackage => $links) + { + for($i=0;$i<count($links);$i++) + { + $isinterface = false; + if ($links[$i]->type == 'class') { + $class = $this->classes->getClass($links[$i]->name, + $links[$i]->path); + if ($class) { + $isinterface = $class->isInterface(); + } + } + $this->left['#class'][$package][$subpackage][] = + array("link" => $this->getId($links[$i]), "title" => $links[$i]->name, 'is_interface' => $isinterface); + } + } + } + } + + /** + * HTMLdefaultConverter chooses to format both package indexes and the complete index here + * + * This function formats output for the elementindex.html and pkgelementindex.html template files. It then + * writes them to the target directory + * @see generateElementIndex(), generatePkgElementIndex() + */ + function formatPkgIndex() + { + list($package_indexes,$packages,$mletters) = $this->generatePkgElementIndexes(); + for($i=0;$i<count($package_indexes);$i++) + { + $template = &$this->newSmarty(); + $this->package = $package_indexes[$i]['package']; + $this->subpackage = ''; + $classleft = $this->getClassLeft(); + $template->assign("compiledfileindex",$this->getPageLeft()); + $template->assign("compiledclassindex",$classleft['class']); + $template->assign("compiledinterfaceindex",$classleft['interface']); + $template->assign("tutorials",$this->getTutorialList()); + $template->assign("index",$package_indexes[$i]['pindex']); + $template->assign("package",$package_indexes[$i]['package']); + $template->assign("letters",$mletters[$package_indexes[$i]['package']]); + $template->assign("title","Package ".$package_indexes[$i]['package']." Element Index"); + $template->assign("date",date("r",time())); + $template->register_outputfilter('HTMLSmarty_outputfilter'); + $this->setTargetDir($this->base_dir); + $this->writefile('elementindex_'.$package_indexes[$i]['package'].'.html',$template->fetch('pkgelementindex.tpl')); + } + phpDocumentor_out("\n"); + flush(); + } + + /** + * HTMLdefaultConverter uses this function to format template index.html and packages.html + * + * This function generates the package list from {@link $all_packages}, eliminating any + * packages that don't have any entries in their package index (no files at all, due to @ignore + * or other factors). Then it uses the default package name as the first package index to display. + * It sets the right pane to be either a blank file with instructions on making package-level docs, + * or the package-level docs for the default package. + * @global string Used to set the starting package to display + */ + function formatIndex() + { + global $phpDocumentor_DefaultPackageName; + if (!isset($this->package_index)) + { + debug("\nERROR: Nothing parsed, check the command-line"); + die(); + } + list($elindex,$mletters) = $this->generateElementIndex(); + $template = &$this->newSmarty(); + $template->assign("index",$elindex); + $template->assign("letters",$mletters); + $template->assign("title","Element Index"); + $template->assign("package", false); + $template->assign("date",date("r",time())); + phpDocumentor_out("\n"); + flush(); + $this->setTargetDir($this->base_dir); + $template->register_outputfilter('HTMLSmarty_outputfilter'); + $this->writefile('elementindex.html',$template->fetch('elementindex.tpl')); + usort($this->package_index,"HTMLSmarty_pindexcmp"); + $index = &$this->newSmarty(); + foreach($this->all_packages as $key => $val) + { + if (isset($this->pkg_elements[$key])) + { + if (!isset($start)) $start = $key; + if (!isset($this->package_pages[$key])) $this->writeNewPPage($key); + } + } + // Created index.html + $start = $phpDocumentor_DefaultPackageName; + if (!isset($this->pkg_elements[$key])) + { + // if there are no elements, use a random package as the default + $a = array_keys($this->pkg_elements); + $start = array_shift($a); + } + $this->package = $start; + $this->subpackage = ''; + $classleft = $this->getClassLeft(); + $index->assign("compiledfileindex",$this->getPageLeft()); + $index->assign("compiledclassindex",$classleft['class']); + $index->assign("compiledinterfaceindex",$classleft['interface']); + $index->assign('hastodos',count($this->todoList)); + $index->assign('todolink','todolist.html'); + $index->assign("tutorials",$this->getTutorialList()); + $index->assign("date",date("r",time())); + $index->assign("package",$this->package); + $index->assign("title",$this->title); + $index->assign("start","li_$start.html"); + if (isset($this->package_pages[$start])) + { + $index->assign("contents",$this->package_pages[$start]); + } + $index->register_outputfilter('HTMLSmarty_outputfilter'); + phpDocumentor_out("\n"); + flush(); + $this->setTargetDir($this->base_dir); + $this->writefile("index.html",$index->fetch('index.tpl')); + unset($index); + + } + + function writeNewPPage($key) + { + $template = &$this->newSmarty(); + $this->package = $key; + $this->subpackage = ''; + $classleft = $this->getClassLeft(); + $template->assign("compiledfileindex",$this->getPageLeft()); + $template->assign("compiledclassindex",$classleft['class']); + $template->assign("compiledinterfaceindex",$classleft['interface']); + $template->assign("tutorials",$this->getTutorialList()); + $template->assign("date",date("r",time())); + $template->assign("title",$this->title); + $template->assign("package",$key); + $template->register_outputfilter('HTMLSmarty_outputfilter'); + phpDocumentor_out("\n"); + flush(); + $this->setTargetDir($this->base_dir); + $this->writefile("li_$key.html",$template->fetch('index.tpl')); + unset($template); + } + + /** + * Generate indexes for li_package.html and classtree output files + * + * This function generates the li_package.html files from the template file left.html. It does this by + * iterating through each of the $page_elements, $class_elements and $function_elements arrays to retrieve + * the pre-sorted {@link abstractLink} descendants needed for index generation. Conversion of these links to + * text is done by {@link returnSee()}. + * + * Then it uses {@link generateFormattedClassTrees()} to create class trees from the template file classtrees.html. Output + * filename is classtrees_packagename.html. This function also unsets {@link $elements} and {@link $pkg_elements} to free + * up the considerable memory these two class vars use + * @see $page_elements, $class_elements, $function_elements + */ + function formatLeftIndex() + { + phpDocumentor_out("\n"); + flush(); + $this->setTargetDir($this->base_dir); + if (!isset($this->left)) + { + debug("Nothing parsed, check the command-line"); + die(); + } + foreach($this->all_packages as $package => $rest) + { + if (!isset($this->pkg_elements[$package])) continue; + // Create class tree page + $template = &$this->newSmarty(); + $classleft = $this->getClassLeft(); + $template->assign("compiledfileindex",$this->getPageLeft()); + $template->assign("compiledclassindex",$classleft['class']); + $template->assign("compiledinterfaceindex",$classleft['interface']); + $template->assign("classtrees",$this->generateFormattedClassTrees($package)); + $template->assign("interfaces",$this->generateFormattedInterfaceTrees($package)); + $template->assign("package",$package); + $template->assign("date",date("r",time())); + $template->assign("title","Class Trees for Package $package"); + $template->register_outputfilter('HTMLSmarty_outputfilter'); + $this->writefile("classtrees_$package.html",$template->fetch('classtrees.tpl')); + phpDocumentor_out("\n"); + flush(); + } + $this->writeRIC(); + // free up considerable memory + unset($this->elements); + unset($this->pkg_elements); + } + + + /** + * This function takes an {@link abstractLink} descendant and returns an html link + * + * @param abstractLink a descendant of abstractlink should be passed, and never text + * @param string text to display in the link + * @param boolean this parameter is not used, and is deprecated + * @param boolean determines whether the returned text is enclosed in an <a> tag + */ + function returnSee(&$element, $eltext = false, $with_a = true) + { + if (!is_object($element) || !$element) return false; + if (!$with_a) return $this->getId($element, false); + if (!$eltext) + { + $eltext = ''; + switch($element->type) + { + case 'tutorial' : + $eltext = strip_tags($element->title); + break; + case 'method' : + case 'var' : + case 'const' : + $eltext .= $element->class.'::'; + case 'page' : + case 'define' : + case 'class' : + case 'function' : + case 'global' : + default : + $eltext .= $element->name; + if ($element->type == 'function' || $element->type == 'method') $eltext .= '()'; + break; + } + } + return '<a href="'.$this->getId($element).'">'.$eltext.'</a>'; + } + + function getId($element, $fullpath = true) + { + if (phpDocumentor_get_class($element) == 'parserdata') + { + $element = $this->addLink($element->parent); + $elp = $element->parent; + } elseif (is_a($element, 'parserbase')) + { + $elp = $element; + $element = $this->addLink($element); + } + $c = ''; + if (!empty($element->subpackage)) + { + $c = '/'.$element->subpackage; + } + $b = '{$subdir}'; + switch ($element->type) + { + case 'page' : + if ($fullpath) + return $b.$element->package.$c.'/'.$element->fileAlias.'.html'; + return 'top'; + break; + case 'define' : + case 'global' : + case 'function' : + if ($fullpath) + return $b.$element->package.$c.'/'.$element->fileAlias.'.html#'.$element->type.$element->name; + return $element->type.$element->name; + break; + case 'class' : + if ($fullpath) + return $b.$element->package.$c.'/'.$element->name.'.html'; + return 'top'; + break; + case 'method' : + case 'var' : + case 'const' : + if ($fullpath) + return $b.$element->package.$c.'/'.$element->class.'.html#'.$element->type.$element->name; + return $element->type.$element->name; + break; + case 'tutorial' : + $d = ''; + if ($element->section) + { + $d = '#'.$element->section; + } + return $b.$element->package.$c.'/tutorial_'.$element->name.'.html'.$d; + } + } + + /** + * Convert README/INSTALL/CHANGELOG file contents to output format + * @param README|INSTALL|CHANGELOG + * @param string contents of the file + */ + function Convert_RIC($name, $contents) + { + $this->ric_contents[$name] = $contents; + $this->ric_set[] = array('file' => 'ric_'.$name . '.html','name' => $name); + } + + function writeRIC() + { + if ($this->_ric_done) return; + $this->_ric_done = true; + foreach($this->ric_contents as $name => $contents) + { + $template = &$this->newSmarty(); + $template->assign('contents',$contents); + $template->assign('name',$name); + $template->assign('title',$name); + $this->setTargetDir($this->base_dir); + $this->writefile('ric_'.$name . '.html',$template->fetch('ric.tpl')); + } + } + + function ConvertTodoList() + { + $todolist = array(); + foreach($this->todoList as $package => $alltodos) + { + foreach($alltodos as $todos) + { + $converted = array(); + $converted['link'] = $this->returnSee($todos[0]); + if (!is_array($todos[1])) + { + $converted['todos'][] = $todos[1]->Convert($this); + } else + { + foreach($todos[1] as $todo) + { + $converted['todos'][] = $todo->Convert($this); + } + } + $todolist[$package][] = $converted; + } + } + $templ = &$this->newSmarty(); + $templ->assign('todos',$todolist); + $templ->register_outputfilter('HTMLSmarty_outputfilter'); + $this->setTargetDir($this->base_dir); + $this->writefile('todolist.html',$templ->fetch('todolist.tpl')); + } + + /** + * Create errors.html template file output + * + * This method takes all parsing errors and warnings and spits them out ordered by file and line number. + * @global ErrorTracker We'll be using it's output facility + */ + function ConvertErrorLog() + { + global $phpDocumentor_errors; + $allfiles = array(); + $files = array(); + $warnings = $phpDocumentor_errors->returnWarnings(); + $errors = $phpDocumentor_errors->returnErrors(); + $template = &$this->newSmarty(); + foreach($warnings as $warning) + { + $file = '##none'; + $linenum = 'Warning'; + if ($warning->file) + { + $file = $warning->file; + $allfiles[$file] = 1; + $linenum .= ' on line '.$warning->linenum; + } + $files[$file]['warnings'][] = array('name' => $linenum, 'listing' => $warning->data); + } + foreach($errors as $error) + { + $file = '##none'; + $linenum = 'Error'; + if ($error->file) + { + $file = $error->file; + $allfiles[$file] = 1; + $linenum .= ' on line '.$error->linenum; + } + $files[$file]['errors'][] = array('name' => $linenum, 'listing' => $error->data); + } + $i=1; + $af = array(); + foreach($allfiles as $file => $num) + { + $af[$i++] = $file; + } + $allfiles = $af; + usort($allfiles,'strnatcasecmp'); + $allfiles[0] = "Post-parsing"; + foreach($allfiles as $i => $a) + { + $allfiles[$i] = array('file' => $a); + } + $out = array(); + foreach($files as $file => $data) + { + if ($file == '##none') $file = 'Post-parsing'; + $out[$file] = $data; + } + $template->assign("files",$allfiles); + $template->assign("all",$out); + $template->assign("title","phpDocumentor Parser Errors and Warnings"); + $template->register_outputfilter('HTMLSmarty_outputfilter'); + $this->setTargetDir($this->base_dir); + $this->writefile("errors.html",$template->fetch('errors.tpl')); + unset($template); + phpDocumentor_out("\n\nTo view errors and warnings, look at ".$this->base_dir. PATH_DELIMITER . "errors.html\n"); + flush(); + } + + function getCData($value) + { + return '<pre>'.htmlentities($value).'</pre>'; + } + + function getTutorialId($package,$subpackage,$tutorial,$id) + { + return $id; + } + + /** + * Converts package page and sets its package as used in {@link $package_pages} + * @param parserPackagePage + */ + function convertPackagepage(&$element) + { + phpDocumentor_out("\n"); + flush(); + $template = &$this->newSmarty(); + $this->package = $element->package; + $this->subpackage = ''; + $classleft = $this->getClassLeft(); + $template->assign("compiledfileindex",$this->getPageLeft()); + $template->assign("compiledclassindex",$classleft['class']); + $template->assign("compiledinterfaceindex",$classleft['interface']); + $template->assign("tutorials",$this->getTutorialList()); + $template->assign("date",date("r",time())); + $template->assign("title",$this->title); + $template->assign("package",$element->package); + $x = $element->Convert($this); + $x = substr($x,strpos($x,'<body')); + $template->assign("contents",trim(substr($x,strpos($x,'>') + 1))); + $this->package_pages[$element->package] = trim(substr($x,strpos($x,'>') + 1)); + $template->register_outputfilter('HTMLSmarty_outputfilter'); + phpDocumentor_out("\n"); + flush(); + $this->setTargetDir($this->base_dir); + $this->writefile("li_".$element->package.".html",$template->fetch('index.tpl')); + unset($template); + } + + /** + * @param parserTutorial + */ + function convertTutorial(&$element) + { + phpDocumentor_out("\n"); + flush(); + $template = &parent::convertTutorial($element); + $this->package = $element->package; + $this->subpackage = $element->subpackage; + $classleft = $this->getClassLeft(); + $template->assign("compiledfileindex",$this->getPageLeft()); + $template->assign("compiledclassindex",$classleft['class']); + $template->assign("compiledinterfaceindex",$classleft['interface']); + $template->assign("tutorials",$this->getTutorialList()); + $template->assign("title",strip_tags($element->getTitle($this))); + $contents = $element->Convert($this); + if ($element->name == $this->package . '.pkg') + { + $this->package_pages[$element->package] = $contents; + } + $a = '../'; + if (!empty($element->subpackage)) $a .= $a; + $template->assign("subdir",$a); + $a = ''; + if ($element->subpackage) $a = PATH_DELIMITER . $element->subpackage; + $template->register_outputfilter('HTMLSmarty_outputfilter'); + $this->setTargetDir($this->base_dir . PATH_DELIMITER . $element->package . $a); + $this->writeFile('tutorial_'.$element->name.'.html',$template->fetch('tutorial.tpl')); + if ($element->name == $element->package . '.pkg') + { + phpDocumentor_out("\n"); + flush(); + // package-level docs + $this->setTargetDir($this->base_dir); + $template->assign("subdir",''); + $this->writeFile('li_'.$element->package.'.html',$template->fetch('tutorial.tpl')); + } + unset($template); + } + + /** + * Converts class for template output + * @see prepareDocBlock(), generateChildClassList(), generateFormattedClassTree(), getFormattedConflicts() + * @see getFormattedInheritedMethods(), getFormattedInheritedVars() + * @param parserClass + */ + function convertClass(&$element) + { + parent::convertClass($element); + $this->class_dir = $element->docblock->package; + if (!empty($element->docblock->subpackage)) $this->class_dir .= PATH_DELIMITER . $element->docblock->subpackage; + $a = '../classtrees_'; + if ($element->docblock->subpackage != '') $a = "../$a"; + + $this->class_data->assign('subdir',$a); + $this->class_data->assign("title","Docs For Class " . $element->getName()); + $this->class_data->assign("page",$element->getName() . '.html'); + } + + /** + * Converts class variables for template output + * @see prepareDocBlock(), getFormattedConflicts() + * @param parserDefine + */ + function convertVar(&$element) + { + parent::convertVar($element, array('var_dest' => $this->getId($element,false))); + } + + /** + * Converts class variables for template output + * @see prepareDocBlock(), getFormattedConflicts() + * @param parserDefine + */ + function convertConst(&$element) + { + parent::convertConst($element, array('const_dest' => $this->getId($element,false))); + } + + /** + * Converts class methods for template output + * @see prepareDocBlock(), getFormattedConflicts() + * @param parserDefine + */ + function convertMethod(&$element) + { + parent::convertMethod($element, array('method_dest' => $this->getId($element,false))); + } + + /** + * Converts function for template output + * @see prepareDocBlock(), parserFunction::getFunctionCall(), getFormattedConflicts() + * @param parserFunction + */ + function convertFunction(&$element) + { + $funcloc = $this->getId($this->addLink($element)); + parent::convertFunction($element,array('function_dest' => $this->getId($element,false))); + } + + /** + * Converts include elements for template output + * @see prepareDocBlock() + * @param parserInclude + */ + function convertInclude(&$element) + { + parent::convertInclude($element, array('include_file' => '_'.strtr($element->getValue(),array('"' => '', "'" => '','.' => '_')))); + } + + /** + * Converts defines for template output + * @see prepareDocBlock(), getFormattedConflicts() + * @param parserDefine + */ + function convertDefine(&$element) + { + parent::convertDefine($element, array('define_link' => $this->getId($element,false))); + } + + /** + * Converts global variables for template output + * @param parserGlobal + * @see prepareDocBlock(), getFormattedConflicts() + */ + function convertGlobal(&$element) + { + parent::convertGlobal($element, array('global_link' => $this->getId($element,false))); + } + + /** + * converts procedural pages for template output + * @see prepareDocBlock(), getClassesOnPage() + * @param parserData + */ + function convertPage(&$element) + { + parent::convertPage($element); + $this->juststarted = true; + $this->page_dir = $element->parent->package; + if (!empty($element->parent->subpackage)) $this->page_dir .= PATH_DELIMITER . $element->parent->subpackage; + // registering stuff on the template + $a = '../'; + if (!empty($element->docblock->subpackage)) $a = $a . $a; + $this->page_data->assign('subdir',$a); + $this->page_data->assign("page",$this->getPageName($element) . '.html'); + $this->page_data->assign("title","Docs for page ".$element->parent->getFile()); + } + + function getPageName(&$element) + { + if (phpDocumentor_get_class($element) == 'parserpage') return '_'.$element->getName(); + return '_'.$element->parent->getName(); + } + + /** + * returns an array containing the class inheritance tree from the root object to the class + * + * @param parserClass class variable + * @return array Format: array(root,child,child,child,...,$class) + * @uses parserClass::getParentClassTree() + */ + + function generateFormattedClassTree($class) + { + $tree = $class->getParentClassTree($this); + $out = ''; + if (count($tree) - 1) + { + $result = array($class->getName()); + $parent = $tree[$class->getName()]; + $distance[] = ''; + while ($parent) + { + $x = $parent; + if (is_object($parent)) + { + $subpackage = $parent->docblock->subpackage; + $package = $parent->docblock->package; + $x = $parent; + $x = $parent->getLink($this); + if (!$x) $x = $parent->getName(); + } + $result[] = + $x; + $distance[] = + "\n%s|\n" . + "%s--"; + if (is_object($parent)) + $parent = $tree[$parent->getName()]; + elseif (isset($tree[$parent])) + $parent = $tree[$parent]; + } + $nbsp = ' '; + for($i=count($result) - 1;$i>=0;$i--) + { + $my_nbsp = ''; + for($j=0;$j<count($result) - $i;$j++) $my_nbsp .= $nbsp; + $distance[$i] = sprintf($distance[$i],$my_nbsp,$my_nbsp); + } + return array('classes'=>array_reverse($result),'distance'=>array_reverse($distance)); + } else + { + return array('classes'=>$class->getName(),'distance'=>array('')); + } + } + + /** @access private */ + function sortVar($a, $b) + { + return strnatcasecmp($a->getName(),$b->getName()); + } + + /** @access private */ + function sortMethod($a, $b) + { + if ($a->isConstructor) return -1; + if ($b->isConstructor) return 1; + return strnatcasecmp($a->getName(),$b->getName()); + } + + /** + * returns a template-enabled array of class trees + * + * @param string $package package to generate a class tree for + * @see $roots, HTMLConverter::getRootTree() + */ + function generateFormattedClassTrees($package) + { + if (!isset($this->roots['normal'][$package]) && + !isset($this->roots['special'][$package])) { + return array(); + } + $trees = array(); + if (isset($this->roots['normal'][$package])) { + $roots = $this->roots['normal'][$package]; + for($i=0;$i<count($roots);$i++) + { + $root = $this->classes->getClassByPackage($roots[$i], $package); + if ($root && $root->isInterface()) { + continue; + } + $trees[] = array('class' => $roots[$i],'class_tree' => "<ul>\n".$this->getRootTree($this->getSortedClassTreeFromClass($roots[$i],$package,''),$package)."</ul>\n"); + } + } + if (isset($this->roots['special'][$package])) { + $roots = $this->roots['special'][$package]; + foreach ($roots as $parent => $classes) { + $thistree = ''; + foreach ($classes as $classinfo) { + $root = $this->classes->getClassByPackage($classinfo, $package); + if ($root && $root->isInterface()) { + continue; + } + $thistree .= + $this->getRootTree( + $this->getSortedClassTreeFromClass( + $classinfo, + $package, + ''), + $package, + true); + } + if (!$thistree) { + continue; + } + $trees[] = array( + 'class' => $parent, + 'class_tree' => "<ul>\n" . $thistree . "</ul>\n" + ); + } + } + return $trees; + } + + /** + * returns a template-enabled array of interface inheritance trees + * + * @param string $package package to generate a class tree for + * @see $roots, HTMLConverter::getRootTree() + */ + function generateFormattedInterfaceTrees($package) + { + if (!isset($this->roots['normal'][$package]) && + !isset($this->roots['special'][$package])) { + return array(); + } + $trees = array(); + if (isset($this->roots['normal'][$package])) { + $roots = $this->roots['normal'][$package]; + for($i=0;$i<count($roots);$i++) + { + $root = $this->classes->getClassByPackage($roots[$i], $package); + if ($root && !$root->isInterface()) { + continue; + } + $trees[] = array('class' => $roots[$i],'class_tree' => "<ul>\n".$this->getRootTree($this->getSortedClassTreeFromClass($roots[$i],$package,''),$package)."</ul>\n"); + } + } + if (isset($this->roots['special'][$package])) { + $roots = $this->roots['special'][$package]; + foreach ($roots as $parent => $classes) { + $thistree = ''; + foreach ($classes as $classinfo) { + $root = $this->classes->getClassByPackage($classinfo, $package); + if ($root && !$root->isInterface()) { + continue; + } + $thistree .= + $this->getRootTree( + $this->getSortedClassTreeFromClass( + $classinfo, + $package, + ''), + $package, + true); + } + if (!$thistree) { + continue; + } + $trees[] = array( + 'class' => $parent, + 'class_tree' => "<ul>\n" . $thistree . "</ul>\n" + ); + } + } + return $trees; + } + + /** + * return formatted class tree for the Class Trees page + * + * @param array $tree output from {@link getSortedClassTreeFromClass()} + * @param string $package package + * @param boolean $nounknownparent if true, an object's parent will not be checked + * @see Classes::$definitechild, generateFormattedClassTrees() + * @return string + */ + function getRootTree($tree, $package, $noparent = false) + { + if (!$tree) return ''; + $my_tree = ''; + $cur = '#root'; + $lastcur = array(false); + $kids = array(); + $dopar = false; + if (!$noparent && $tree[$cur]['parent']) + { + $dopar = true; + if (!is_object($tree[$cur]['parent'])) + { +// debug("parent ".$tree[$cur]['parent']." not found"); + $my_tree .= '<li>' . $tree[$cur]['parent'] .'<ul>'; + } + else + { +// debug("parent ".$this->returnSee($tree[$cur]['parent'])." in other package"); + $root = $this->classes->getClassByPackage($tree[$cur]['parent']->name, + $package); + $my_tree .= '<li>' . $this->returnSee($tree[$cur]['parent']); + if ($tree[$cur]['parent']->package != $package) $my_tree .= ' <b>(Different package)</b><ul>'; + } + } + do + { +// fancy_debug($cur,$lastcur,$kids); + if (count($tree[$cur]['children'])) + { +// debug("$cur has children"); + if (!isset($kids[$cur])) + { +// debug("set $cur kids"); + $kids[$cur] = 1; + $root = $this->classes->getClassByPackage( + $tree[$cur]['link']->name, + $tree[$cur]['link']->package); + if ($implements = $root->getImplements()) { + $my_tree .= '<li>'.$this->returnSee($tree[$cur]['link']) . + ' (implements '; + foreach ($implements as $i => $interface) { + if ($i && $i != count($implements) - 1) $my_tree .= ', '; + if ($link = $this->getLink('object ' . $interface)) { + $my_tree .= $this->returnSee($link); + } else { + $my_tree .= $interface; + } + } + $my_tree .= ')'; + } else { + $my_tree .= '<li>'.$this->returnSee($tree[$cur]['link']); + } + $my_tree .= '<ul>'."\n"; + } + array_push($lastcur,$cur); + list(,$cur) = each($tree[$cur]['children']); +// var_dump('listed',$cur); + if ($cur) + { + $cur = $cur['package'] . '#' . $cur['class']; +// debug("set cur to child $cur"); +// $my_tree .= '<li>'.$this->returnSee($tree[$cur]['link']); + continue; + } else + { +// debug("end of children for $cur"); + $cur = array_pop($lastcur); + $cur = array_pop($lastcur); + $my_tree .= '</ul></li>'."\n"; + if ($dopar && ($cur == '#root' || !$cur)) $my_tree .= '</ul></li>'; + } + } else + { +// debug("$cur has no children"); + $my_tree .= '<li>'.$this->returnSee($tree[$cur]['link'])."</li>"; + if ($dopar && $cur == '#root') $my_tree .= '</ul></li>'; + $cur = array_pop($lastcur); + } + } while ($cur); + return $my_tree; + } + + /** + * Generate indexing information for given element + * + * @param parserElement descendant of parserElement + * @see generateElementIndex() + * @return array + */ + function getIndexInformation($elt) + { + $Result['type'] = $elt->type; + $Result['file_name'] = $elt->file; + $Result['path'] = $elt->getPath(); + + if (isset($elt->docblock)) + { + $Result['description'] = $elt->docblock->getSDesc($this); + + if ($elt->docblock->hasaccess) + $Result['access'] = $elt->docblock->tags['access'][0]->value; + else + $Result['access'] = 'public'; + + $Result['abstract'] = isset ($elt->docblock->tags['abstract'][0]); + } + else + $Result['description'] = ''; + + $aa = $Result['description']; + if (!empty($aa)) $aa = "<br> $aa"; + + switch($elt->type) + { + case 'class': + $Result['name'] = $elt->getName(); + $Result['title'] = 'Class'; + $Result['link'] = $this->getClassLink($elt->getName(), + $elt->docblock->package, + $elt->getPath(), + $elt->getName()); + $Result['listing'] = 'in file '.$elt->file.', class '.$Result['link']."$aa"; + break; + case 'define': + $Result['name'] = $elt->getName(); + $Result['title'] = 'Constant'; + $Result['link'] = $this->getDefineLink($elt->getName(), + $elt->docblock->package, + $elt->getPath(), + $elt->getName()); + $Result['listing'] = 'in file '.$elt->file.', constant '.$Result['link']."$aa"; + break; + case 'global': + $Result['name'] = $elt->getName(); + $Result['title'] = 'Global'; + $Result['link'] = $this->getGlobalLink($elt->getName(), + $elt->docblock->package, + $elt->getPath(), + $elt->getName()); + $Result['listing'] = 'in file '.$elt->file.', global variable '.$Result['link']."$aa"; + break; + case 'function': + $Result['name'] = $elt->getName(); + $Result['title'] = 'Function'; + $Result['link'] = $this->getFunctionLink($elt->getName(), + $elt->docblock->package, + $elt->getPath(), + $elt->getName().'()'); + $Result['listing'] = 'in file '.$elt->file.', function '.$Result['link']."$aa"; + break; + case 'method': + $Result['name'] = $elt->getName(); + $Result['title'] = 'Method'; + $Result['link'] = $this->getMethodLink($elt->getName(), + $elt->class, + $elt->docblock->package, + $elt->getPath(), + $elt->class.'::'.$elt->getName().'()' + ); + if ($elt->isConstructor) $Result['constructor'] = 1; + $Result['listing'] = 'in file '.$elt->file.', method '.$Result['link']."$aa"; + break; + case 'var': + $Result['name'] = $elt->getName(); + $Result['title'] = 'Variable'; + $Result['link'] = $this->getVarLink($elt->getName(), + $elt->class, + $elt->docblock->package, + $elt->getPath(), + $elt->class.'::'.$elt->getName()); + $Result['listing'] = 'in file '.$elt->file.', variable '.$Result['link']."$aa"; + break; + case 'const': + $Result['name'] = $elt->getName(); + $Result['title'] = 'Variable'; + $Result['link'] = $this->getConstLink($elt->getName(), + $elt->class, + $elt->docblock->package, + $elt->getPath(), + $elt->class.'::'.$elt->getName()); + $Result['listing'] = 'in file '.$elt->file.', class constant '.$Result['link']."$aa"; + break; + case 'page': + $Result['name'] = $elt->getFile(); + $Result['title'] = 'Page'; + $Result['link'] = $this->getPageLink($elt->getFile(), + $elt->package, + $elt->getPath(), + $elt->getFile()); + $Result['listing'] = 'procedural page '.$Result['link']; + break; + case 'include': + $Result['name'] = $elt->getName(); + $Result['title'] = 'Include'; + $Result['link'] = $elt->getValue(); + $Result['listing'] = 'include '.$Result['name']; + break; + } + + return $Result; + } + + /** + * Generate alphabetical index of all elements + * + * @see $elements, walk() + */ + function generateElementIndex() + { + $elementindex = array(); + $letters = array(); + $used = array(); + foreach($this->elements as $letter => $nutoh) + { + foreach($this->elements[$letter] as $i => $yuh) + { + if ($this->elements[$letter][$i]->type != 'include') + { + if (!isset($used[$letter])) + { + $letters[]['letter'] = $letter; + $elindex['letter'] = $letter; + $used[$letter] = 1; + } + + $elindex['index'][] = $this->getIndexInformation($this->elements[$letter][$i]); + } + } + if (isset($elindex['index'])) + { + $elementindex[] = $elindex; + } else + { + unset($letters[count($letters) - 1]); + } + $elindex = array(); + } + return array($elementindex,$letters); + } + + function copyMediaRecursively($media,$targetdir,$subdir = '') + { + $versionControlDirectories = array ('CVS', 'media/CVS', 'media\\CVS', '.svn', 'media/.svn', 'media\\.svn'); + if (!is_array($media)) { + return; + } + foreach($media as $dir => $files) + { + if ($dir === '/') + { + $this->copyMediaRecursively($files,$targetdir); + } else + { + if (!is_numeric($dir)) + { + if (in_array($dir, $versionControlDirectories)) + { + // skip it entirely + } + else + { + // create the subdir + phpDocumentor_out("creating $targetdir" . PATH_DELIMITER . "$dir\n"); + Converter::setTargetDir($targetdir . PATH_DELIMITER . $dir); + if (!empty($subdir)) + { + $subdir .= PATH_DELIMITER; + } + $this->copyMediaRecursively($files,"$targetdir/$dir",$subdir . $dir); + } + } + else + { + // copy the file + phpDocumentor_out("copying $targetdir" . PATH_DELIMITER . $files['file']."\n"); + $this->copyFile($files['file'],$subdir); + } + } + } + } + + /** + * calls the converter setTargetDir, and then copies any template images and the stylesheet if they haven't been copied + * @see Converter::setTargetDir() + */ + function setTargetDir($dir) + { + Converter::setTargetDir($dir); + if ($this->_wrote_tdir) return; + $this->_wrote_tdir = true; + $template_images = array(); + $stylesheets = array(); + $tdir = $dir; + $dir = $this->templateDir; + $this->templateDir = $this->templateDir.'templates/'; + $info = new Io; + $this->copyMediaRecursively($info->getDirTree($this->templateDir.'media',$this->templateDir),$tdir); + } + + /** + * Generate alphabetical index of all elements by package and subpackage + * + * @param string $package name of a package + * @see $pkg_elements, walk(), generatePkgElementIndexes() + */ + function generatePkgElementIndex($package) + { + $elementindex = array(); + $letters = array(); + $letterind = array(); + $used = array(); + $subp = ''; + foreach($this->pkg_elements[$package] as $subpackage => $els) + { + if (empty($els)) continue; + if (!empty($subpackage)) $subp = " (<b>subpackage:</b> $subpackage)"; else $subp = ''; + foreach($els as $letter => $yuh) + { + foreach($els[$letter] as $i => $yuh) + { + if ($els[$letter][$i]->type != 'include') + { + if (!isset($used[$letter])) + { + $letters[]['letter'] = $letter; + $letterind[$letter] = count($letters) - 1; + $used[$letter] = 1; + } + $elindex[$letter]['letter'] = $letter; + + $elindex[$letter]['index'][] = $this->getIndexInformation($els[$letter][$i]); + } + } + } + } + ksort($elindex); + usort($letters,'HTMLSmarty_lettersort'); + if (isset($elindex)) + { + while(list($letter,$tempel) = each($elindex)) + { + if (!isset($tempel)) + { + unset($letters[$letterind[$tempel['letter']]]); + } else + $elementindex[] = $tempel; + } + } else $letters = array(); + return array($elementindex,$letters); + } + + /** + * + * @see generatePkgElementIndex() + */ + function generatePkgElementIndexes() + { + $packages = array(); + $package_names = array(); + $pkg = array(); + $letters = array(); + foreach($this->pkg_elements as $package => $trash) + { + $pkgs['package'] = $package; + $pkg['package'] = $package; + list($pkg['pindex'],$letters[$package]) = $this->generatePkgElementIndex($package); + if (count($pkg['pindex'])) + { + $packages[] = $pkg; + $package_names[] = $pkgs; + } + unset($pkgs); + unset($pkg); + } + foreach($packages as $i => $package) + { + $pnames = array(); + for($j=0;$j<count($package_names);$j++) + { + if ($package_names[$j]['package'] != $package['package']) $pnames[] = $package_names[$j]; + } + $packages[$i]['packageindexes'] = $pnames; + } + return array($packages,$package_names,$letters); + } + + /** + * @param string name of class + * @param string package name + * @param string full path to look in (used in index generation) + * @param boolean deprecated + * @param boolean return just the URL, or enclose it in an html a tag + * @return mixed false if not found, or an html a link to the class's documentation + * @see parent::getClassLink() + */ + function getClassLink($expr,$package, $file = false,$text = false, $with_a = true) + { + $a = Converter::getClassLink($expr,$package,$file); + if (!$a) return false; + return $this->returnSee($a, $text, $with_a); + } + + /** + * @param string name of function + * @param string package name + * @param string full path to look in (used in index generation) + * @param boolean deprecated + * @param boolean return just the URL, or enclose it in an html a tag + * @return mixed false if not found, or an html a link to the function's documentation + * @see parent::getFunctionLink() + */ + function getFunctionLink($expr,$package, $file = false,$text = false) + { + $a = Converter::getFunctionLink($expr,$package,$file); + if (!$a) return false; + return $this->returnSee($a, $text); + } + + /** + * @param string name of define + * @param string package name + * @param string full path to look in (used in index generation) + * @param boolean deprecated + * @param boolean return just the URL, or enclose it in an html a tag + * @return mixed false if not found, or an html a link to the define's documentation + * @see parent::getDefineLink() + */ + function getDefineLink($expr,$package, $file = false,$text = false) + { + $a = Converter::getDefineLink($expr,$package,$file); + if (!$a) return false; + return $this->returnSee($a, $text); + } + + /** + * @param string name of global variable + * @param string package name + * @param string full path to look in (used in index generation) + * @param boolean deprecated + * @param boolean return just the URL, or enclose it in an html a tag + * @return mixed false if not found, or an html a link to the global variable's documentation + * @see parent::getGlobalLink() + */ + function getGlobalLink($expr,$package, $file = false,$text = false) + { + $a = Converter::getGlobalLink($expr,$package,$file); + if (!$a) return false; + return $this->returnSee($a, $text); + } + + /** + * @param string name of procedural page + * @param string package name + * @param string full path to look in (used in index generation) + * @param boolean deprecated + * @param boolean return just the URL, or enclose it in an html a tag + * @return mixed false if not found, or an html a link to the procedural page's documentation + * @see parent::getPageLink() + */ + function getPageLink($expr,$package, $path = false,$text = false) + { + $a = Converter::getPageLink($expr,$package,$path); + if (!$a) return false; + return $this->returnSee($a, $text); + } + + /** + * @param string name of method + * @param string class containing method + * @param string package name + * @param string full path to look in (used in index generation) + * @param boolean deprecated + * @param boolean return just the URL, or enclose it in an html a tag + * @return mixed false if not found, or an html a link to the method's documentation + * @see parent::getMethodLink() + */ + function getMethodLink($expr,$class,$package, $file = false,$text = false) + { + $a = Converter::getMethodLink($expr,$class,$package,$file); + if (!$a) return false; + return $this->returnSee($a, $text); + } + + /** + * @param string name of var + * @param string class containing var + * @param string package name + * @param string full path to look in (used in index generation) + * @param boolean deprecated + * @param boolean return just the URL, or enclose it in an html a tag + * @return mixed false if not found, or an html a link to the var's documentation + * @see parent::getVarLink() + */ + function getVarLink($expr,$class,$package, $file = false,$text = false) + { + $a = Converter::getVarLink($expr,$class,$package,$file); + if (!$a) return false; + return $this->returnSee($a, $text); + } + + /** + * @param string name of class constant + * @param string class containing class constant + * @param string package name + * @param string full path to look in (used in index generation) + * @param boolean deprecated + * @param boolean return just the URL, or enclose it in an html a tag + * @return mixed false if not found, or an html a link to the var's documentation + * @see parent::getVarLink() + */ + function getConstLink($expr,$class,$package, $file = false,$text = false) + { + $a = Converter::getConstLink($expr,$class,$package,$file); + if (!$a) return false; + return $this->returnSee($a, $text); + } + + /** + * does a nat case sort on the specified second level value of the array + * + * @param mixed $a + * @param mixed $b + * @return int + */ + function rcNatCmp ($a, $b) + { + $aa = strtoupper($a[$this->rcnatcmpkey]); + $bb = strtoupper($b[$this->rcnatcmpkey]); + + return strnatcasecmp($aa, $bb); + } + + /** + * does a nat case sort on the specified second level value of the array. + * this one puts constructors first + * + * @param mixed $a + * @param mixed $b + * @return int + */ + function rcNatCmp1 ($a, $b) + { + $aa = strtoupper($a[$this->rcnatcmpkey]); + $bb = strtoupper($b[$this->rcnatcmpkey]); + + if (strpos($aa,'CONSTRUCTOR') === 0) + { + return -1; + } + if (strpos($bb,'CONSTRUCTOR') === 0) + { + return 1; + } + if (strpos($aa,strtoupper($this->class)) === 0) + { + return -1; + } + if (strpos($bb,strtoupper($this->class)) === 0) + { + return -1; + } + return strnatcasecmp($aa, $bb); + } + + /** + * This function is not used by HTMLdefaultConverter, but is required by Converter + */ + function Output() + { + } +} + +/** + * @access private + * @global string name of the package to set as the first package + */ +function HTMLSmarty_pindexcmp($a, $b) +{ + global $phpDocumentor_DefaultPackageName; + if ($a['title'] == $phpDocumentor_DefaultPackageName) return -1; + if ($b['title'] == $phpDocumentor_DefaultPackageName) return 1; + return strnatcasecmp($a['title'],$b['title']); +} + +/** @access private */ +function HTMLSmarty_lettersort($a, $b) +{ + return strnatcasecmp($a['letter'],$b['letter']); +} + +/** @access private */ +function HTMLSmarty_outputfilter($src, &$smarty) +{ + return str_replace('{$subdir}',$smarty->_tpl_vars['subdir'],$src); +} +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/options.ini b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/options.ini new file mode 100755 index 00000000..32ea2088 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/options.ini @@ -0,0 +1,577 @@ +preservedocbooktags = false + +;; used to highlight the {@source} inline tag, @filesource tag, and @example tag +[highlightSourceTokens] +;; format: +;; T_CONSTANTNAME = open +;; /T_CONSTANTNAME = close + +T_INCLUDE = <span class="src-inc"> +/T_INCLUDE = </span> +T_INCLUDE_ONCE = <span class="src-inc"> +/T_INCLUDE_ONCE = </span> +T_REQUIRE_ONCE = <span class="src-inc"> +/T_REQUIRE_ONCE = </span> +T_REQUIRE_ONCE = <span class="src-inc"> +/T_REQUIRE_ONCE = </span> + +T_CONSTANT_ENCAPSED_STRING = <span class="src-str"> +/T_CONSTANT_ENCAPSED_STRING = </span> +T_STRING_VARNAME = <span class="src-str"> +/T_STRING_VARNAME = </span> + +T_STRING = <span class="src-id"> +/T_STRING = </span> + +T_DNUMBER = <span class="src-num"> +/T_DNUMBER = </span> +T_LNUMBER = <span class="src-num"> +/T_LNUMBER = </span> + +T_VARIABLE = <span class="src-var"> +/T_VARIABLE = </span> + +T_COMMENT = <span class="src-comm"> +/T_COMMENT = </span> +T_ML_COMMENT = <span class="src-comm"> +/T_ML_COMMENT = </span> + +T_OBJECT_OPERATOR = <span class="src-sym"> +/T_OBJECT_OPERATOR = </span> + +T_ABSTRACT = <span class="src-key"> +/T_ABSTRACT = </span> +T_CLONE = <span class="src-key"> +/T_CLONE = </span> +T_HALT_COMPILER = <span class="src-key"> +/T_HALT_COMPILER = </span> +T_ARRAY = <span class="src-key"> +/T_ARRAY = </span> +T_AS = <span class="src-key"> +/T_AS = </span> +T_BREAK = <span class="src-key"> +/T_BREAK = </span> +T_CLASS = <span class="src-key"> +/T_CLASS = </span> +T_CASE = <span class="src-key"> +/T_CASE = </span> +T_CONST = <span class="src-key"> +/T_CONST = </span> +T_CONTINUE = <span class="src-key"> +/T_CONTINUE = </span> +T_DECLARE = <span class="src-key"> +/T_DECLARE = </span> +T_DEFAULT = <span class="src-key"> +/T_DEFAULT = </span> +T_ELSE = <span class="src-key"> +/T_ELSE = </span> +T_ELSEIF = <span class="src-key"> +/T_ELSEIF = </span> +T_EMPTY = <span class="src-key"> +/T_EMPTY = </span> +T_ENDDECLARE = <span class="src-key"> +/T_ENDDECLARE = </span> +T_ENDFOR = <span class="src-key"> +/T_ENDFOR = </span> +T_ENDSWITCH = <span class="src-key"> +/T_ENDSWITCH = </span> +T_ENDFOREACH = <span class="src-key"> +/T_ENDFOREACH = </span> +T_ENDIF = <span class="src-key"> +/T_ENDIF = </span> +T_ENDWHILE = <span class="src-key"> +/T_ENDWHILE = </span> +T_EXIT = <span class="src-key"> +/T_EXIT = </span> +T_EXTENDS = <span class="src-key"> +/T_EXTENDS = </span> +T_FINAL = <span class="src-key"> +/T_FINAL = </span> +T_FOR = <span class="src-key"> +/T_FOR = </span> +T_FOREACH = <span class="src-key"> +/T_FOREACH = </span> +T_FUNCTION = <span class="src-key"> +/T_FUNCTION = </span> +T_GLOBAL = <span class="src-key"> +/T_GLOBAL = </span> +T_IF = <span class="src-key"> +/T_IF = </span> +T_IMPLEMENTS = <span class="src-key"> +/T_IMPLEMENTS = </span> +T_INTERFACE = <span class="src-key"> +/T_INTERFACE = </span> +T_LOGICAL_AND = <span class="src-key"> +/T_LOGICAL_AND = </span> +T_LOGICAL_OR = <span class="src-key"> +/T_LOGICAL_OR = </span> +T_LOGICAL_XOR = <span class="src-key"> +/T_LOGICAL_XOR = </span> +T_NEW = <span class="src-key"> +/T_NEW = </span> +T_PRIVATE = <span class="src-key"> +/T_PRIVATE = </span> +T_PROTECTED = <span class="src-key"> +/T_PROTECTED = </span> +T_PUBLIC = <span class="src-key"> +/T_PUBLIC = </span> +T_RETURN = <span class="src-key"> +/T_RETURN = </span> +T_STATIC = <span class="src-key"> +/T_STATIC = </span> +T_SWITCH = <span class="src-key"> +/T_SWITCH = </span> +T_VAR = <span class="src-key"> +/T_VAR = </span> +T_WHILE = <span class="src-key"> +/T_WHILE = </span> + +T_DOUBLE_COLON = <span class="src-sym"> +/T_DOUBLE_COLON = </span> + +T_OPEN_TAG = <span class="src-php"> +/T_OPEN_TAG = </span> +T_OPEN_TAG_WITH_ECHO = <span class="src-php"> +/T_OPEN_TAG_WITH_ECHO = </span> +T_CLOSE_TAG = <span class="src-php"> +/T_CLOSE_TAG = </span> + + +[highlightSource] +;; this is for highlighting things that aren't tokens like "&" +;; format: +;; word = open +;; /word = close +@ = <span class="src-sym"> +/@ = </span> +& = <span class="src-sym"> +/& = </span> +[ = <span class="src-sym"> +/[ = </span> +] = <span class="src-sym"> +/] = </span> +! = <span class="src-sym"> +/! = </span> +";" = <span class="src-sym"> +/; = </span> +( = <span class="src-sym"> +/( = </span> +) = <span class="src-sym"> +/) = </span> +, = <span class="src-sym"> +/, = </span> +{ = <span class="src-sym"> +/{ = </span> +} = <span class="src-sym"> +/} = </span> +""" = <span class="src-str"> +/" = </span> + +[highlightDocBlockSourceTokens] +;; this is for docblock tokens, highlighted by phpDocumentor_HighlightParser +;; tagphptype is for "string" in @param string description, for example +docblock = <span class="src-doc"> +/docblock = </span> +tagphptype = <span class="src-doc-type"> +/tagphptype = </span> +tagvarname = <span class="src-doc-var"> +/tagvarname = </span> +coretag = <span class="src-doc-coretag"> +/coretag = </span> +tag = <span class="src-doc-tag"> +/tag = </span> +inlinetag = <span class="src-doc-inlinetag"> +/inlinetag = </span> +internal = <span class="src-doc-internal"> +/internal = </span> +closetemplate = <span class="src-doc-close-template"> +/closetemplate = </span> +docblocktemplate = <span class="src-doc-template"> +/docblocktemplate = </span> + +[highlightTutorialSourceTokens] +;; this is for XML DocBook-based tutorials, highlighted by phpDocumentor_TutorialHighlightParser +;; <tag> +opentag = <span class="tute-tag"> +/opentag = </span> +;; </tag> +closetag = <span class="tute-tag"> +/closetag = </span> +;; <tag attribute="value"> +attribute = <span class="tute-attribute-name"> +/attribute = </span> +;; <tag attribute="value"> +attributevalue = <span class="tute-attribute-value"> +/attributevalue = </span> +;; &entity; +entity = <span class="tute-entity"> +/entity = </span> +;; <!-- comment --> +comment = <span class="tute-comment"> +/comment = </span> +;; {@inline tag} +itag = <span class="tute-inline-tag"> +/itag = </span> + +;; used for translation of html in DocBlocks +[desctranslate] +ul = <ul> +/ul = </ul> +ol = <ol> +/ol = </ol> +li = <li> +/li = </li> +code = +/code = +var = <var> +/var = </var> +samp = <samp> +/samp = </samp> +kbd = <kbd> +/kbd = </kbd> +pre = <pre> +/pre = </pre> +p = <p> +/p = </p> +b = <strong> +/b = </strong> +i = <em> +/i = </em> +br = <br /> + +[ppage] +;; this is the DocBook package page translation section. All DocBook tags +;; that have a corresponding html tag must be listed here. Entities should +;; also be listed here +;; +;; examples: +;; 1) +;; tagname = newtagname +;; +;; This is the simplest case, where all attributes will be added into the +;; starting tag and the ending tag will be html/xml style </tranlatedtagname> +;; <tagname></tagname> becomes <newtagname></newtagname> and +;; <tagname attr="value"></tagname> becomes +;; <newtagname attr="value"></newtagname> +;; +;; 2) +;; tagname = newtagname +;; tagname->attr = newattrname +;; +;; in this case, everything will be like the first case, except tags like: +;; <tagname attr="value"></tagname> will become +;; <newtagname newattrname="value"></newtagname> +;; +;; 3) +;; tagname = newtagname +;; tagname->attr = newattrname +;; tagname->attr+value = newvalue +;; +;; in this case, the value is also translated to another. This can be useful +;; for instances such as focus="middle" changing to align="center" or something +;; of that nature. +;; <tagname attr="value"></tagname> will become +;; <newtagname newattrname="newvalue"></newtagname> +;; +;; 4) +;; tagname = newtagname +;; tagname->attr1 = newattrname +;; tagname->attr2 = newattrname +;; tagname->attr1+value|attr2+value = newvalue +;; +;; in this case, two attributes combine to make one new attribute, and the combined +;; value is translated into a new value +;; <tagname attr1="value1" attr2="value2"></tagname> will become +;; <newtagname newattrname="newvalue"></newtagname> +;; +;; 5) +;; tagname = newtagname +;; tagname!attr = dummy +;; +;; here, the attribute will be ignored. dummy is not used and may be any value +;; <tagname attr="value"></tagname> will become +;; <newtagname></newtagname> +;; +;; 6) +;; tagname = newtagname +;; tagname! = dummy +;; +;; here, all attributes will be ignored. dummy is not used and may be any value +;; <tagname attr1="value" attr2="foo"></tagname> will become +;; <newtagname></newtagname> +;; +;; 7) +;; tagname = newtagname +;; tagname/ = 1 +;; +;; here, the tag will be translated as a single tag with no closing tag, and all +;; attributes +;; <tagname attr="val">{text text}</tagname> will become +;; <newtagname attr="val" /> +;; +;; 8) +;; tagname = <starttaginfo /> +;; /tagname = closetagtext +;; +;; in this case, the text <starttaginfo> will be inserted exactly as entered for +;; <tagname> and closetagtext for </tagname> +;; <tagname attr="val"></tagname> will become +;; <starttaginfo />closetagtext +;; +;; 9) +;; $attr$my_attribute = newattrname +;; +;; tagname = newtagname +;; +;; in this case, all occurences of my_attribute in any tag will be changed to +;; newattrname. This is useful for changing things like role="php" to +;; class="php," for example. Note that the text "$attr$" MUST be on the line +;; start for phpDocumentor to recognize it. +;; +;; 10) +;; &entity; = translation text +;; " = " +;; " = """ +;; < = < +;; +;; Use this to control translation of entities to their appropriate values + + = +" = " +” = ” +“ = “ +& = & +< = < +> = > +© = © + +$attr$role = class + +abbrev = abbr + +blockquote = blockquote + +arg = span +arg->choice = class + +author = <strong>by <span class="author"> +/author = </span></strong> +author! = 0 + +authorblurb = <div class="author-blurb"> +/authorblurb = </div> + +authorgroup = <div class="authors"><h2 class="title">Authors</h2> +/authorgroup = </div> +authorgroup! = 0 + +caution = <span class="warning"> +/caution = </span> +caution! = 0 + +cmdsynopsis = <div class="cmd-synopsis"> +/cmdsynopsis = </div> + +command = <span class="cmd-title"> +/command = </span> + +copyright = <div class="notes"> +/copyright = </div> + +emphasis = strong + +example = <div class="src-code"> +/example = </div> +example! = 0 + +function = +/function = () + +formalpara = p + +graphic = img +graphic->fileref = src +graphic/ = + +important = strong + +informalequation = blockquote + +informalexample = div + +inlineequation = em + +itemizedlist = ul + +listitem = li + +literal = code + +literallayout = span + +option = " " +/option = + +orderedlist = ol + +para = p + +programlisting = <div class="src-code"> +/programlisting = </div> +programlisting! = 0 + +refentry = div + +refnamediv = <div class="ref-title-box"> +/refnamediv = </div> +refnamediv! = 0 + +refname = <h1 class="ref-title"> +/refname = </h1> + +refpurpose = <h2 class="ref-purpose"> +/refpurpose = </h2> + +refsynopsisdiv = <div class="ref-synopsis"> +/refsynopsisdiv = </div> +refsynopsisdiv! = 0 + +refsect1 = span + +refsect2 = +/refsect2 = <hr /> + +refsect3 = +/refsect3 = <br /> + +releaseinfo = <div class="release-info">( +/releaseinfo = )</div> + +simpara = +/simpara = <br /> +simpara! = 0 + +subscript = sub + +superscript = super + +table = table + +table->colsep = rules +table->rowsep = rules +table->colsep+1|rowsep+1 = all +table->colsep+1|rowsep+0 = cols +table->colsep+0|rowsep+1 = rows + +table->frame = frame +table->frame+all = border +table->frame+none = void +table->frame+sides = vsides +table->frame+top = above +table->frame+topbot = hsides + +thead = thead + +tfoot = tfoot + +tbody = tbody + +colspec = col + +tgroup = colgroup +tgroup/ = 1 +tgroup->cols = span + +row = tr + +entry = td +entry->morerows = colspan +entry->morerows+1 = 2 +entry->morerows+2 = 3 +entry->morerows+3 = 4 +entry->morerows+4 = 5 +entry->morerows+5 = 6 +entry->morerows+6 = 7 +entry->morerows+7 = 8 +entry->morerows+8 = 9 +entry->morerows+9 = 10 +entry->morerows+10 = 11 +;; add more if you need more colspans + +warning = <span class="warning"> +/warning = </span> +warning! = 0 + +;; now begins the attributes that should be tags in cdata +[$attr$id] +open = a +;close = /a +cdata! = true +quotevalues = true +separator = "=" +;separateall = true +$id = name + +;; now begins the sections that deal with <title> +[refsynopsisdiv_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h1 class="title"> +close = </h1> + +[refsect1_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h2 class="title"> +close = </h2> + +[refsect2_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h3 class="title"> +close = </h3> + +[refsect3_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h4 class="title"> +close = </h4> + +[para_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <div class="title"> +close = </div> + +[formalpara_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <div class="title"> +close = </div> + +[example_title] +;tag_attr = true +;attr_name = title +;cdata_start = true +cdata_end = true +open = </td></tr><tr><td><strong> +close = </strong> + +[table_title] +;tag_attr = true +;attr_name = true +cdata_start = true +open = <caption> +close = </caption> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/basicindex.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/basicindex.tpl new file mode 100755 index 00000000..02da5c40 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/basicindex.tpl @@ -0,0 +1,21 @@ +{section name=letter loop=$letters} + [ <a href="{$indexname}.html#{$letters[letter].letter}">{$letters[letter].letter}</a> ] +{/section} +<br /><br /> +{section name=index loop=$index} + <a name="{$index[index].letter}"></a> + <div class="index-letter-section"> + <div style="float: left" class="index-letter-title">{$index[index].letter}</div> + <div style="float: right"><a href="#top">[Top]</a></div> + <div style="clear: both"></div> + </div> + <div> + <h2>{$index[index].letter}</h2> + <dl> + {section name=contents loop=$index[index].index} + <dt><b>{$index[index].index[contents].name}</b></dt> + <dd>{$index[index].index[contents].listing}</dd> + {/section} + </dl> + </div> +{/section} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/blank.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/blank.tpl new file mode 100755 index 00000000..a7f6308f --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/blank.tpl @@ -0,0 +1,6 @@ +<div align="center"><h1>{$maintitle}</h1></div> +<strong>Welcome to {$package}!</strong><br /> +<br /> +This documentation was generated by <a href="{$phpdocwebsite}">phpDocumentor v{$phpdocversion}</a> +<br /> + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/class.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/class.tpl new file mode 100755 index 00000000..fe930904 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/class.tpl @@ -0,0 +1,541 @@ +{include file="header.tpl" eltype="class" hasel=true contents=$classcontents} + +<h2 class="class-name">{if $is_interface}Interface{else}Class{/if} {$class_name}</h2> + +<a name="sec-description"></a> +<div class="info-box"> + <div class="info-box-title">{if $is_interface}Interface{else}Class{/if} Overview</div> + <div class="nav-bar"> + {if $children || $vars || $ivars || $methods || $imethods || $consts || $iconsts} + <span class="disabled">{if $is_interface}Interface{else}Class{/if} Overview</span> + {/if} + {if $children} + | <a href="#sec-descendants">Descendants</a> + {/if} + + {if $ivars || $imethods} + | <a href="#sec-inherited">Inherited Properties, Constants, and Methods</a> + {/if} + {if $vars || $ivars} + {if $vars} + | <a href="#sec-var-summary">Property Summary</a> | <a href="#sec-vars">Properties Detail</a> + {else} + | <a href="#sec-vars">Properties</a> + {/if} + {/if} + {if $methods || $imethods} + {if $methods} + | <a href="#sec-method-summary">Method Summary</a> | <a href="#sec-methods">Methods Detail</a> + {else} + | <a href="#sec-methods">Methods</a> + {/if} + {/if} + {if $consts || $iconsts} + {if $consts} + | <a href="#sec-const-summary">Constants Summary</a> | <a href="#sec-consts">Constants Detail</a> + {else} + | <a href="#sec-consts">Constants</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + <table width="100%" border="0"> + <tr><td valign="top" width="60%" class="class-overview"> + + {if $implements} + <p class="implements"> + Implements interfaces: + <ul> + {foreach item="int" from=$implements}<li>{$int}</li>{/foreach} + </ul> + </p> + {/if} + {include file="docblock.tpl" type="class" sdesc=$sdesc desc=$desc} + + <p class="notes"> + Located in <a class="field" href="{$page_link}">{$source_location}</a> [<span class="field">line {if $class_slink}{$class_slink}{else}{$line_number}{/if}</span>] + </p> + + {if $tutorial} + <hr class="separator" /> + <div class="notes">Tutorial: <span class="tutorial">{$tutorial}</div> + {/if} + + <pre>{section name=tree loop=$class_tree.classes}{$class_tree.classes[tree]}{$class_tree.distance[tree]}{/section}</pre> + + {if $conflicts.conflict_type} + <hr class="separator" /> + <div><span class="warning">Conflicts with classes:</span><br /> + {section name=me loop=$conflicts.conflicts} + {$conflicts.conflicts[me]}<br /> + {/section} + </div> + {/if} + + {if count($tags) > 0} + <strong>Author(s):</strong> + <ul> + {section name=tag loop=$tags} + {if $tags[tag].keyword eq "author"} + <li>{$tags[tag].data}</li> + {/if} + {/section} + </ul> + {/if} + + {include file="classtags.tpl" tags=$tags} + </td> + + {if count($contents.var) > 0} + <td valign="top" width="20%" class="class-overview"> + <p align="center" class="short-description"><strong><a href="#sec_vars">Properties</a></strong></p> + <ul> + {section name=contents loop=$contents.var} + <li>{$contents.var[contents]}</li> + {/section} + </ul> + </td> + {/if} + + {if count($contents.method) > 0} + <td valign="top" width="20%" class="class-overview"> + <p align="center" class="short-description"><strong><a href="#sec_methods">Methods</a></strong></p> + <ul> + {section name=contents loop=$contents.method} + <li>{$contents.method[contents]}</li> + {/section} + </ul> + </td> + {/if} + + </tr></table> + <div class="top">[ <a href="#top">Top</a> ]</div> + </div> +</div> + +{if $children} + <a name="sec-descendants"></a> + <div class="info-box"> + <div class="info-box-title">Descendants</div> + <div class="nav-bar"> + <a href="#sec-description">Class Overview</a> + {if $children} + | <span class="disabled">Descendants</span> + {/if} + {if $ivars || $imethods} + | <a href="#sec-inherited">Inherited Properties and Methods</a> + {/if} + {if $vars || $ivars} + {if $vars} + | <a href="#sec-var-summary">Property Summary</a> | <a href="#sec-vars">Properties Detail</a> + {else} + | <a href="#sec-vars">Properties</a> + {/if} + {/if} + {if $methods || $imethods} + {if $methods} + | <a href="#sec-method-summary">Method Summary</a> | <a href="#sec-methods">Methods Detail</a> + {else} + | <a href="#sec-methods">Methods</a> + {/if} + {/if} + {if $consts || $iconsts} + {if $consts} + | <a href="#sec-const-summary">Constants Summary</a> | <a href="#sec-consts">Constants Detail</a> + {else} + | <a href="#sec-consts">Constants</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + <table cellpadding="2" cellspacing="0" class="class-table"> + <tr> + <th class="class-table-header">Child Class</th> + <th class="class-table-header">Description</th> + </tr> + {section name=kids loop=$children} + <tr> + <td style="padding-right: 2em">{$children[kids].link}</td> + <td> + {if $children[kids].sdesc} + {$children[kids].sdesc} + {else} + {$children[kids].desc} + {/if} + </td> + </tr> + {/section} + </table> + <br /><div class="top">[ <a href="#top">Top</a> ]</div> + </div> + </div> +{/if} + +{if $ivars || $imethods || $iconsts} + <a name="sec-inherited"></a> + <div class="info-box"> + <div class="info-box-title">Inherited Properties, Constants, and Methods</div> + <div class="nav-bar"> + <a href="#sec-description">Class Overview</a> + {if $children} + | <a href="#sec-descendants">Descendants</a> + {/if} + | <span class="disabled">Inherited Properties, Constants, and Methods</span> + {if $vars || $ivars} + {if $vars} + | <a href="#sec-var-summary">Property Summary</a> | <a href="#sec-vars">Properties Detail</a> + {else} + | <a href="#sec-vars">Properties</a> + {/if} + {/if} + {if $methods || $imethods} + {if $methods} + | <a href="#sec-method-summary">Method Summary</a> | <a href="#sec-methods">Methods Detail</a> + {else} + | <a href="#sec-methods">Methods</a> + {/if} + {/if} + {if $consts || $iconsts} + {if $consts} + | <a href="#sec-const-summary">Constants Summary</a> | <a href="#sec-consts">Constants Detail</a> + {else} + | <a href="#sec-consts">Constants</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + <table cellpadding="2" cellspacing="0" class="class-table"> + <tr> + <th class="class-table-header" width="30%">Inherited Properties</th> + <th class="class-table-header" width="40%">Inherited Methods</th> + <th class="class-table-header" width="30%">Inherited Constants</th> + </tr> + <tr> + <td width="30%"> + {section name=ivars loop=$ivars} + <p>Inherited From <span class="classname">{$ivars[ivars].parent_class}</span></p> + <blockquote> + <dl> + {section name=ivars2 loop=$ivars[ivars].ivars} + <dt> + <span class="method-definition">{$ivars[ivars].ivars[ivars2].link}</span> + </dt> + <dd> + <span class="method-definition">{$ivars[ivars].ivars[ivars2].ivars_sdesc}</span> + </dd> + {/section} + </dl> + </blockquote> + {/section} + </td> + <td width="40%"> + {section name=imethods loop=$imethods} + <p>Inherited From <span class="classname">{$imethods[imethods].parent_class}</span></p> + <blockquote> + <dl> + {section name=im2 loop=$imethods[imethods].imethods} + <dt> + <span class="method-definition">{$imethods[imethods].imethods[im2].link}</span> + </dt> + <dd> + <span class="method-definition">{$imethods[imethods].imethods[im2].sdesc}</span> + </dd> + {/section} + </dl> + </blockquote> + {/section} + </td> + <td width="30%"> + {section name=iconsts loop=$iconsts} + <p>Inherited From <span class="classname">{$iconsts[iconsts].parent_class}</span></p> + <blockquote> + <dl> + {section name=iconsts2 loop=$iconsts[iconsts].iconsts} + <dt> + <span class="method-definition">{$iconsts[iconsts].iconsts[iconsts2].link}</span> + </dt> + <dd> + <span class="method-definition">{$iconsts[iconsts].iconsts[iconsts2].iconsts_sdesc}</span> + </dd> + {/section} + </dl> + </blockquote> + {/section} + </td> + </tr> + </table> + <br /><div class="top">[ <a href="#top">Top</a> ]</div> + </div> + </div> +{/if} + +{if $consts} + <a name="sec-const-summary"></a> + <div class="info-box"> + <div class="info-box-title">Constant Summary</span></div> + <div class="nav-bar"> + <a href="#sec-description">Class Overview</a> + {if $children} + | <a href="#sec-descendants">Descendants</a> + {/if} + {if $ivars || $imethods || $iconsts} + | <a href="#sec-inherited">Inherited Properties, Constants, and Methods</a> + {/if} + | <span class="disabled">Constants Summary</span> | <a href="#sec-consts">Constants Detail</a> + {if $vars || $ivars} + {if $vars} + | <a href="#sec-var-summary">Property Summary</a> | <a href="#sec-vars">Properties Detail</a> + {else} + | <a href="#sec-vars">Properties</a> + {/if} + {/if} + {if $methods || $imethods} + {if $methods} + | <a href="#sec-method-summary">Method Summary</a> | <a href="#sec-methods">Methods Detail</a> + {else} + | <a href="#sec-methods">Methods</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + <div class="const-summary"> + <table border="0" cellspacing="0" cellpadding="0" class="var-summary"> + {section name=consts loop=$consts} + <div class="var-title"> + <tr> + <td class="var-title"><a href="#{$consts[consts].const_dest}" title="details" class="const-name-summary">{$consts[consts].const_name}</a> </td> + <td class="const-summary-description">{$consts[consts].sdesc}</td></tr> + </div> + {/section} + </table> + </div> + <br /><div class="top">[ <a href="#top">Top</a> ]</div> + </div> + </div> +{/if} + +{if $vars} + <a name="sec-var-summary"></a> + <div class="info-box"> + <div class="info-box-title">Property Summary</span></div> + <div class="nav-bar"> + <a href="#sec-description">Class Overview</a> + {if $children} + | <a href="#sec-descendants">Descendants</a> + {/if} + {if $ivars || $imethods || $iconsts} + | <a href="#sec-inherited">Inherited Properties and Methods</a> + {/if} + | <span class="disabled">Property Summary</span> | <a href="#sec-vars">Properties Detail</a> + {if $methods || $imethods} + {if $methods} + | <a href="#sec-method-summary">Method Summary</a> | <a href="#sec-methods">Methods Detail</a> + {else} + | <a href="#sec-methods">Methods</a> + {/if} + {/if} + {if $consts || $iconsts} + {if $consts} + | <a href="#sec-const-summary">Constants Summary</a> | <a href="#sec-consts">Constants Detail</a> + {else} + | <a href="#sec-consts">Constants</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + <div class="var-summary"> + <table border="0" cellspacing="0" cellpadding="0" class="var-summary"> + {section name=vars loop=$vars} + {if $vars[vars].static} + <div class="var-title"> + <tr><td class="var-title">static <span class="var-type-summary">{$vars[vars].var_type}</span> </td> + <td class="var-title"><a href="#{$vars[vars].var_name}" title="details" class="var-name-summary">{$vars[vars].var_name}</a> </td> + <td class="var-summary-description">{$vars[vars].sdesc}</td></tr> + </div> + {/if} + {/section} + {section name=vars loop=$vars} + {if !$vars[vars].static} + <div class="var-title"> + <tr><td class="var-title"><span class="var-type-summary">{$vars[vars].var_type}</span> </td> + <td class="var-title"><a href="#{$vars[vars].var_name}" title="details" class="var-name-summary">{$vars[vars].var_name}</a> </td> + <td class="var-summary-description">{$vars[vars].sdesc}</td></tr> + </div> + {/if} + {/section} + </table> + </div> + <br /><div class="top">[ <a href="#top">Top</a> ]</div> + </div> + </div> +{/if} + +{if $methods} + <a name="sec-method-summary"></a> + <div class="info-box"> + <div class="info-box-title">Method Summary</span></div> + <div class="nav-bar"> + <a href="#sec-description">Class Overview</a> + {if $children} + | <a href="#sec-descendants">Descendants</a> + {/if} + {if $ivars || $imethods || $iconsts} + | <a href="#sec-inherited">Inherited Properties and Methods</a> + {/if} + {if $vars || $ivars} + {if $vars} + | <a href="#sec-var-summary">Property Summary</a> | <a href="#sec-vars">Properties Detail</a> + {else} + | <a href="#sec-vars">Properties</a> + {/if} + {/if} + {if $consts || $iconsts} + {if $consts} + | <a href="#sec-const-summary">Constants Summary</a> | <a href="#sec-consts">Constants Detail</a> + {else} + | <a href="#sec-consts">Constants</a> + {/if} + {/if} + | <span class="disabled">Method Summary</span> | <a href="#sec-methods">Methods Detail</a> + </div> + <div class="info-box-body"> + <div class="method-summary"> + <table border="0" cellspacing="0" cellpadding="0" class="method-summary"> + {section name=methods loop=$methods} + {if $methods[methods].static} + <div class="method-definition"> + <tr><td class="method-definition">static + {if $methods[methods].function_return} + <span class="method-result">{$methods[methods].function_return}</span> + {/if}</td> + <td class="method-definition"><a href="#{$methods[methods].function_name}" title="details" class="method-name">{if $methods[methods].ifunction_call.returnsref}&{/if}{$methods[methods].function_name}</a>() </td> + <td class="method-definition">{$methods[methods].sdesc}</td></tr> + </div> + {/if} + {/section} + {section name=methods loop=$methods} + {if !$methods[methods].static} + <div class="method-definition"> + {if $methods[methods].function_return} + <tr><td class="method-definition"><span class="method-result">{$methods[methods].function_return}</span> </td> + {/if} + <td class="method-definition"><a href="#{$methods[methods].function_name}" title="details" class="method-name">{if $methods[methods].ifunction_call.returnsref}&{/if}{$methods[methods].function_name}</a>() </td> + <td class="method-definition">{$methods[methods].sdesc}</td></tr> + </div> + {/if} + {/section} + </table> + </div> + <br /><div class="top">[ <a href="#top">Top</a> ]</div> + </div> + </div> +{/if} + +{if $vars || $ivars} + <a name="sec-vars"></a> + <div class="info-box"> + <div class="info-box-title">Properties</div> + <div class="nav-bar"> + <a href="#sec-description">Class Overview</a> + {if $children} + | <a href="#sec-descendants">Descendants</a> + {/if} + {if $ivars || $imethods || $iconsts} + | <a href="#sec-inherited">Inherited Properties and Methods</a> + {/if} + {if $methods} + | <a href="#sec-var-summary">Property Summary</a> | <span class="disabled">Properties Detail</span> + {else} + | <span class="disabled">Properties</span> + {/if} + {if $methods || $imethods} + {if $methods} + | <a href="#sec-method-summary">Method Summary</a> | <a href="#sec-methods">Methods Detail</a> + {else} + | <a href="#sec-methods">Methods</a> + {/if} + {/if} + {if $consts || $iconsts} + {if $consts} + | <a href="#sec-const-summary">Constants Summary</a> | <a href="#sec-consts">Constants Detail</a> + {else} + | <a href="#sec-consts">Constants</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + {include file="var.tpl"} + </div> + </div> +{/if} + +{if $methods || $imethods} + <a name="sec-methods"></a> + <div class="info-box"> + <div class="info-box-title">Methods</div> + <div class="nav-bar"> + <a href="#sec-description">Class Overview</a> + {if $children} + | <a href="#sec-descendants">Descendants</a> + {/if} + {if $ivars || $imethods || $iconsts} + | <a href="#sec-inherited">Inherited Properties and Methods</a> + {/if} + {if $vars || $ivars} + {if $vars} + | <a href="#sec-var-summary">Property Summary</a> | <a href="#sec-vars">Properties Detail</a> + {else} + | <a href="#sec-vars">Properties</a> + {/if} + {/if} + {if $consts || $iconsts} + {if $consts} + | <a href="#sec-const-summary">Constants Summary</a> | <a href="#sec-consts">Constants Detail</a> + {else} + | <a href="#sec-consts">Constants</a> + {/if} + {/if} + {if $methods} + | <a href="#sec-method-summary">Method Summary</a> | <span class="disabled">Methods Detail</span> + {else} + | <span class="disabled">Methods</span> + {/if} + </div> + <div class="info-box-body"> + {include file="method.tpl"} + </div> + </div> +{/if} + +{if $consts || $consts} + <a name="sec-consts"></a> + <div class="info-box"> + <div class="info-box-title">Constants</div> + <div class="nav-bar"> + <a href="#sec-description">Class Overview</a> + {if $children} + | <a href="#sec-descendants">Descendants</a> + {/if} + {if $consts} + | <a href="#sec-const-summary">Constants Summary</a> | <span class="disabled">Constants Detail</span> + {else} + | <span class="disabled">Constants</span> + {/if} + {if $ivars || $imethods || $iconsts} + | <a href="#sec-inherited">Inherited Properties, Constants, and Methods</a> + {/if} + {if $methods || $imethods} + {if $methods} + | <a href="#sec-method-summary">Method Summary</a> | <a href="#sec-methods">Methods Detail</a> + {else} + | <a href="#sec-methods">Methods</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + {include file="const.tpl"} + </div> + </div> +{/if} + +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/classleft.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/classleft.tpl new file mode 100755 index 00000000..3bae1684 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/classleft.tpl @@ -0,0 +1,11 @@ +{foreach key=subpackage item=files from=$classleftindex} + <div class="package"> + {if $subpackage != ""}{$subpackage}<br />{/if} + {section name=files loop=$files} + {if $subpackage != ""}<span style="padding-left: 1em;">{/if} + {if $files[files].link != ''}<a href="{$files[files].link}">{/if}{$files[files].title}{if $files[files].link != ''}</a>{/if} + {if $subpackage != ""}</span>{/if} + <br /> + {/section} + </div> +{/foreach} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/classtags.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/classtags.tpl new file mode 100755 index 00000000..b810ecf8 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/classtags.tpl @@ -0,0 +1,22 @@ +{if count($api_tags) > 0} +<strong>API Tags:</strong><br /> +<table border="0" cellspacing="0" cellpadding="0"> +{section name=tag loop=$api_tags} + <tr> + <td class="indent"><strong>{$api_tags[tag].keyword|capitalize}:</strong> </td><td>{$api_tags[tag].data}</td> + </tr> +{/section} +</table> +<br /> +{/if} + +{if count($info_tags) > 0} +<strong>Information Tags:</strong><br /> +<table border="0" cellspacing="0" cellpadding="0"> +{section name=tag loop=$info_tags} + {if $info_tags[tag].keyword ne "author"} + <tr><td><strong>{$info_tags[tag].keyword|capitalize}:</strong> </td><td>{$info_tags[tag].data}</td></tr> + {/if} +{/section} +</table> +{/if} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/classtrees.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/classtrees.tpl new file mode 100755 index 00000000..0c0e974a --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/classtrees.tpl @@ -0,0 +1,17 @@ +{include file="header.tpl" noleftindex=true} +<h1>{$title}</h1> +{if $interfaces} +{section name=classtrees loop=$interfaces} +<hr /> +<div class="classtree">Root interface {$interfaces[classtrees].class}</div><br /> +{$interfaces[classtrees].class_tree} +{/section} +{/if} +{if $classtrees} +{section name=classtrees loop=$classtrees} +<hr /> +<div class="classtree">Root class {$classtrees[classtrees].class}</div><br /> +{$classtrees[classtrees].class_tree} +{/section} +{/if} +{include file="footer.tpl"} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/const.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/const.tpl new file mode 100644 index 00000000..2e3270e0 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/const.tpl @@ -0,0 +1,19 @@ +{section name=consts loop=$consts} +<a name="const{$consts[consts].const_name}" id="{$consts[consts].const_name}"><!-- --></A> +<div class="{cycle values="evenrow,oddrow"}"> + + <div class="var-header"> + <span class="var-title"> + <span class="var-name">{$consts[consts].const_name}</span> + = <span class="var-default">{$consts[consts].const_value|replace:"\n":"<br />"}</span> + <span class="smalllinenumber">[line {if $consts[consts].slink}{$consts[consts].slink}{else}{$consts[consts].line_number}{/if}]</span> + </span> + </div> + + {include file="docblock.tpl" sdesc=$consts[consts].sdesc desc=$consts[consts].desc} + {include file="tags.tpl" api_tags=$consts[consts].api_tags info_tags=$consts[consts].info_tags} + + <br /> + <div class="top">[ <a href="#top">Top</a> ]</div> +</div> +{/section} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/define.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/define.tpl new file mode 100755 index 00000000..9b3809df --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/define.tpl @@ -0,0 +1,34 @@ +{if count($defines) > 0} +{section name=def loop=$defines} +<a name="{$defines[def].define_link}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div> + <span class="const-title"> + <span class="const-name">{$defines[def].define_name}</span> <span class="smalllinenumber">[line {if $defines[def].slink}{$defines[def].slink}{else}{$defines[def].line_number}{/if}]</span> + </span> + </div> +<br /> + <table width="90%" border="0" cellspacing="0" cellpadding="1"><tr><td class="code-border"> + <table width="100%" border="0" cellspacing="0" cellpadding="2"><tr><td class="code"> + <code>{$defines[def].define_name} = {$defines[def].define_value}</code> + </td></tr></table> + </td></tr></table> + + {include file="docblock.tpl" sdesc=$defines[def].sdesc desc=$defines[def].desc} + {include file="tags.tpl" api_tags=$defines[def].api_tags info_tags=$defines[def].info_tags} + <br /> + + {if $globals[glob].global_conflicts.conflict_type} + <hr class="separator" /> + <div><span class="warning">Conflicts with constants:</span><br /> + {section name=me loop=$defines[def].define_conflicts.conflicts} + {$defines[def].define_conflicts.conflicts[me]}<br /> + {/section} + </div><br /> + {/if} + <div class="top">[ <a href="#top">Top</a> ]</div> + <br /> +</div> +{/section} +{/if}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/docblock.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/docblock.tpl new file mode 100755 index 00000000..20bda10b --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/docblock.tpl @@ -0,0 +1,5 @@ +{if $sdesc != ''} +<p align="center" class="short-description"><strong>{$sdesc|default:''} +</strong></p> +{/if} +{if $desc != ''}<span class="description">{$desc|default:''}</span>{/if} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/elementindex.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/elementindex.tpl new file mode 100755 index 00000000..0bb2be85 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/elementindex.tpl @@ -0,0 +1,12 @@ +{include file="header.tpl" noleftindex=true} +<a name="top"></a> +<h1>Index of All Elements</h1> +<h3>Package Indexes</h3> +<ul> +{section name=p loop=$packageindex} + <li><a href="elementindex_{$packageindex[p].title}.html">{$packageindex[p].title}</a></li> +{/section} +</ul> +<br /> +{include file="basicindex.tpl" indexname="elementindex"} +{include file="footer.tpl"} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/errors.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/errors.tpl new file mode 100755 index 00000000..0f526584 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/errors.tpl @@ -0,0 +1,21 @@ +{include file="header.tpl" noleftindex=true} +{section name=files loop=$files} +<a href="#{$files[files].file}">{$files[files].file}</a><br> +{/section} +{foreach key=file item=issues from=$all} +<a name="{$file}"></a> +<h1>{$file}</h1> +{if count($issues.warnings)} +<h2>Warnings:</h2><br> +{section name=warnings loop=$issues.warnings} +<b>{$issues.warnings[warnings].name}</b> - {$issues.warnings[warnings].listing}<br> +{/section} +{/if} +{if count($issues.errors)} +<h2>Errors:</h2><br> +{section name=errors loop=$issues.errors} +<b>{$issues.errors[errors].name}</b> - {$issues.errors[errors].listing}<br> +{/section} +{/if} +{/foreach} +{include file="footer.tpl"} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/examplesource.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/examplesource.tpl new file mode 100755 index 00000000..8b8c94fc --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/examplesource.tpl @@ -0,0 +1,6 @@ +{include file="header.tpl" title=$title} +<h1 align="center">{$title}</h1> +<div class="src-code"><span class="php"> +{$source} +</span></div> +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/fileleft.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/fileleft.tpl new file mode 100755 index 00000000..44d254e1 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/fileleft.tpl @@ -0,0 +1,8 @@ +{foreach key=subpackage item=files from=$fileleftindex} + <div class="package"> + {if $subpackage != ""}<strong>{$subpackage}</strong><br />{/if} + {section name=files loop=$files} + <span style="padding-left: 1em;">{if $files[files].link != ''}<a href="{$files[files].link}">{/if}{$files[files].title}{if $files[files].link != ''}</a>{/if}</span><br /> + {/section} + </div> +{/foreach} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/filesource.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/filesource.tpl new file mode 100755 index 00000000..73074863 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/filesource.tpl @@ -0,0 +1,8 @@ +{capture name="tutle"}File Source for {$name}{/capture} +{include file="header.tpl" title=$smarty.capture.tutle} +<h1 align="center">Source for file {$name}</h1> +<p>Documentation is available at {$docs}</p> +<div class="src-code"><span class="php"> +{$source} +</span></div> +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/filetags.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/filetags.tpl new file mode 100755 index 00000000..77427b0e --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/filetags.tpl @@ -0,0 +1,7 @@ +{if count($tags) > 0} +<table border="0" cellspacing="0" cellpadding="0"> + {section name=tag loop=$tags} + <tr><td><strong>{$tags[tag].keyword|capitalize}:</strong> </td><td>{$tags[tag].data}</td></tr> + {/section} +</table> +{/if} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/footer.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/footer.tpl new file mode 100755 index 00000000..32b09c11 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/footer.tpl @@ -0,0 +1,11 @@ + <div class="credit"> + <hr class="separator" /> + Documentation generated on {$date} by <a href="{$phpdocwebsite}">phpDocumentor {$phpdocversion}</a> + </div> + </td></tr></table> + </td> + </tr> +</table> + +</body> +</html>
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/function.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/function.tpl new file mode 100755 index 00000000..417bbf76 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/function.tpl @@ -0,0 +1,54 @@ +{section name=func loop=$functions} +<a name="{$functions[func].function_dest}" id="{$functions[func].function_dest}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div> + <span class="method-title">{$functions[func].function_name}</span> <span class="smalllinenumber">[line {if $functions[func].slink}{$functions[func].slink}{else}{$functions[func].line_number}{/if}]</span> + </div> +<br /> + <div class="function"> + <table width="90%" border="0" cellspacing="0" cellpadding="1"><tr><td class="code-border"> + <table width="100%" border="0" cellspacing="0" cellpadding="2"><tr><td class="code"> + <code>{$functions[func].function_return} {if $functions[func].ifunction_call.returnsref}&{/if}{$functions[func].function_name}( +{if count($functions[func].ifunction_call.params)} +{section name=params loop=$functions[func].ifunction_call.params} +{if $smarty.section.params.iteration != 1}, {/if}{if $functions[func].ifunction_call.params[params].hasdefault}[{/if}{$functions[func].ifunction_call.params[params].type} {$functions[func].ifunction_call.params[params].name}{if $functions[func].ifunction_call.params[params].hasdefault} = {$functions[func].ifunction_call.params[params].default|escape:"html"}]{/if} +{/section} + +{/if})</code> + </td></tr></table> + </td></tr></table> + + {include file="docblock.tpl" sdesc=$functions[func].sdesc desc=$functions[func].desc} + + {if count($functions[func].params) > 0} + <strong>Parameters:</strong><br /> + <table border="0" cellspacing="0" cellpadding="0"> + {section name=params loop=$functions[func].params} + <tr><td class="indent"> + <span class="var-type">{$functions[func].params[params].datatype}</span> </td> + <td> + <span class="var-name">{$functions[func].params[params].var}: </span></td> + <td> + {if $functions[func].params[params].data}<span class="var-description"> {$functions[func].params[params].data}</span>{/if} + </td></tr> + {/section} + </table> + {/if} + +<br /> + {include file="tags.tpl" api_tags=$functions[func].api_tags info_tags=$functions[func].info_tags} + + {if $functions[func].function_conflicts.conflict_type} + <hr class="separator" /> + <div><span class="warning">Conflicts with functions:</span><br /> + {section name=me loop=$functions[func].function_conflicts.conflicts} + {$functions[func].function_conflicts.conflicts[me]}<br /> + {/section} + </div> + {/if} + <br /> + <div class="top">[ <a href="#top">Top</a> ]</div> + </div> + </div> +{/section} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/global.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/global.tpl new file mode 100755 index 00000000..f616349b --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/global.tpl @@ -0,0 +1,35 @@ +{if count($globals) > 0} +{section name=glob loop=$globals} +<a name="{$globals[glob].global_link}" id="{$globals[glob].global_link}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div> + <span class="var-title"> + <span class="var-type">{$globals[glob].global_type}</span> + <span class="var-name">{$globals[glob].global_name}</span> + <span class="smalllinenumber">[line {if $globals[glob].slink}{$globals[glob].slink}{else}{$globals[glob].line_number}{/if}]</span> + </span> + </div> + + {if $globals[glob].sdesc != ""} + {include file="docblock.tpl" sdesc=$globals[glob].sdesc desc=$globals[glob].desc} + {/if} + + <b>Default value:</b> <span class="var-default">{$globals[glob].global_value|replace:" ":" "|replace:"\n":"<br />\n"|replace:"\t":" "}</span> +<br /> + {include file="tags.tpl" api_tags=$globals[glob].api_tags info_tags=$globals[glob].info_tags} + + {if $globals[glob].global_conflicts.conflict_type} + <hr class="separator" /> + <div><span class="warning">Conflicts with global variables:</span><br /> + {section name=me loop=$globals[glob].global_conflicts.conflicts} + {$globals[glob].global_conflicts.conflicts[me]}<br /> + {/section} + </div> + {/if} + <br /> + <div class="top">[ <a href="#top">Top</a> ]</div> + <br /> +</div> +{/section} +{/if} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/header.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/header.tpl new file mode 100755 index 00000000..b57cbdb6 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/header.tpl @@ -0,0 +1,110 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> + <html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <title>{$title}</title> + <link rel="stylesheet" type="text/css" href="{$subdir}media/style.css"> + <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/> +</head> +<body> + +<table border="0" cellspacing="0" cellpadding="0" height="48" width="100%"> + <tr> + <td class="header-top-left"><img src="{$subdir}media/logo.png" border="0" alt="phpDocumentor {$phpdocver}" /></td> + <td class="header-top-right">{$package}<br /><div class="header-top-right-subpackage">{$subpackage}</div></td> + </tr> + <tr><td colspan="2" class="header-line"><img src="{$subdir}media/empty.png" width="1" height="1" border="0" alt="" /></td></tr> + <tr> + <td colspan="2" class="header-menu"> + {assign var="packagehaselements" value=false} + {foreach from=$packageindex item=thispackage} + {if in_array($package, $thispackage)} + {assign var="packagehaselements" value=true} + {/if} + {/foreach} + {if $packagehaselements} + [ <a href="{$subdir}classtrees_{$package}.html" class="menu">class tree: {$package}</a> ] + [ <a href="{$subdir}elementindex_{$package}.html" class="menu">index: {$package}</a> ] + {/if} + [ <a href="{$subdir}elementindex.html" class="menu">all elements</a> ] + </td> + </tr> + <tr><td colspan="2" class="header-line"><img src="{$subdir}media/empty.png" width="1" height="1" border="0" alt="" /></td></tr> +</table> + +<table width="100%" border="0" cellpadding="0" cellspacing="0"> + <tr valign="top"> + <td width="195" class="menu"> + <div class="package-title">{$package}</div> +{if count($ric) >= 1} + <div class="package"> + <div id="ric"> + {section name=ric loop=$ric} + <p><a href="{$subdir}{$ric[ric].file}">{$ric[ric].name}</a></p> + {/section} + </div> + </div> +{/if} +{if $hastodos} + <div class="package"> + <div id="todolist"> + <p><a href="{$subdir}{$todolink}">Todo List</a></p> + </div> + </div> +{/if} + <b>Packages:</b><br /> + <div class="package"> + {section name=packagelist loop=$packageindex} + <a href="{$subdir}{$packageindex[packagelist].link}">{$packageindex[packagelist].title}</a><br /> + {/section} + </div> + <br /> +{if $tutorials} + <b>Tutorials/Manuals:</b><br /> + <div class="package"> + {if $tutorials.pkg} + <strong>Package-level:</strong> + {section name=ext loop=$tutorials.pkg} + {$tutorials.pkg[ext]} + {/section} + {/if} + {if $tutorials.cls} + <strong>Class-level:</strong> + {section name=ext loop=$tutorials.cls} + {$tutorials.cls[ext]} + {/section} + {/if} + {if $tutorials.proc} + <strong>Procedural-level:</strong> + {section name=ext loop=$tutorials.proc} + {$tutorials.proc[ext]} + {/section} + </div> + {/if} +{/if} + {if !$noleftindex}{assign var="noleftindex" value=false}{/if} + {if !$noleftindex} + {if $compiledfileindex} + <b>Files:</b><br /> + {eval var=$compiledfileindex} + {/if} + <br /> + {if $compiledinterfaceindex} + <b>Interfaces:</b><br /> + {eval var=$compiledinterfaceindex} + {/if} + {if $compiledclassindex} + <b>Classes:</b><br /> + {eval var=$compiledclassindex} + {/if} + {/if} + </td> + <td> + <table cellpadding="10" cellspacing="0" width="100%" border="0"><tr><td valign="top"> + +{if !$hasel}{assign var="hasel" value=false}{/if} +{if $eltype == 'class' && $is_interface}{assign var="eltype" value="interface"}{/if} +{if $hasel} +<h1>{$eltype|capitalize}: {$class_name}</h1> +Source Location: {$source_location}<br /><br /> +{/if}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/include.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/include.tpl new file mode 100755 index 00000000..ffab8eff --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/include.tpl @@ -0,0 +1,18 @@ +{section name=includes loop=$includes} +<a name="{$includes[includes].include_file}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div> + <span class="include-title"> + <span class="include-type">{$includes[includes].include_name}</span> + (<span class="include-name">{$includes[includes].include_value}</span>) + <span class="smalllinenumber">[line {if $includes[includes].slink}{$includes[includes].slink}{else}{$includes[includes].line_number}{/if}]</span> + </span> + </div> + + {include file="docblock.tpl" sdesc=$includes[includes].sdesc desc=$includes[includes].desc tags=$includes[includes].tags} + {include file="tags.tpl" api_tags=$includes[includes].api_tags info_tags=$includes[includes].info_tags} + <div class="top">[ <a href="#top">Top</a> ]</div> + <br /> +</div> +{/section}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/index.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/index.tpl new file mode 100755 index 00000000..a493f70e --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/index.tpl @@ -0,0 +1,7 @@ +{include file="header.tpl"} +{if $contents} +{$contents} +{else} +{include file="blank.tpl"} +{/if} +{include file="footer.tpl"} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/media/background.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/media/background.png Binary files differnew file mode 100755 index 00000000..8c4ff464 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/media/background.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/media/empty.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/media/empty.png Binary files differnew file mode 100755 index 00000000..a9f29bb1 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/media/empty.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/media/logo.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/media/logo.png Binary files differnew file mode 100644 index 00000000..10fe5d61 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/media/logo.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/media/style.css b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/media/style.css new file mode 100755 index 00000000..a06eee2f --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/media/style.css @@ -0,0 +1,135 @@ +a{ background-color: transparent; color: #636331; text-decoration: none; } +a:hover{ text-decoration: underline; } +a.menu{ background-color: transparent; color: #636331; } +body{ background-color: #ffffff; background-image: url("background.png"); background-repeat: repeat-y; color: #000000; font-family: tahoma,verdana,arial,sans-serif; font-size: 10pt; margin: 0; padding: 0; } +dd { margin-left: 0px; padding-left: 1em; } +div.credit{ font-size: 8pt; text-align: center; } +div.description,div.tags,div.function{ padding-left: 15px; } +div.header-top-right-subpackage{ background-color: #fdfcf2; color: #636331; font-size: 12pt; font-weight: bold; padding: 10px; text-align: right; } +div.package{ padding-left: 5px; } +div.warning{ background-color: transparent; color: #ff0000; } +hr{ border-color: #ccc9a4; border-style: solid; height: 1px; margin-bottom: 10px; margin-top: 10px; } +li { list-style-type: square; } +td{ font-size: 10pt; vertical-align: top; } +td.class-overview{ padding: 2px; padding-left: 1em; } +td.code{ background-color: #ccc9a4; color: #000000; padding-left: 3em; padding-right: 1em; text-indent: -2em; } +td.code-border{ background-color: #636331; color: #000000; } +td.header-line{ background-color: #636331; color: #ffffff; } +td.header-menu{ background-color: #ccc9a4; color: #636331; font-size: 8pt; padding: 2px; padding-right: 5px; text-align: right; } +td.header-top-left{ background-color: #fdfcf2; color: #636331; font-size: 16pt; font-weight: bold; padding: 10px; text-align: left; } +td.header-top-right{ background-color: #fdfcf2; color: #636331; font-size: 16pt; font-weight: bold; padding: 10px; text-align: right; } +td.indent { padding-left: 1em; } +td.menu{ padding: 2px; padding-left: 5px; } +td.type,.folder-title,.method-result,.include-type{ font-style: italic; } +ul{ margin-left: 0px; padding-left: 8px; vertical-align: top; } +.class-name { color: #000000; font-weight: bold; } +.class-table { width: 100%; } +.class-table-header { border-bottom: 1px dotted #666666; text-align: left; } +.const-title { } +.description{ color: #000000; } +.detail,div.top,span.smalllinenumber{ font-size: 8pt; } +.disabled{ color: #ccc9a4; font-style: italic; } +.evenrow{ border: 1px solid #ccc9a4; color: #000000; margin-bottom: 1em; padding: .5em; } +.include-title{ } +.index-item-body { margin-bottom: .5em; margin-top: .5em; } +.index-item-description { margin-top: .25em; } +.index-item-details { font-size: 8pt; font-style: italic; font-weight: normal; } +.index-letter { font-size: 12pt; } +.index-letter-menu { margin: 1em; text-align: center; } +.index-letter-section { background-color: #ccc9a4; border: 1px dotted #636331; margin-bottom: 1em; padding: .5em; } +.index-letter-title { font-size: 12pt; font-weight: bold; } +.info-box{ } +.info-box-body{ border: 1px solid #ccc9a4; padding: .5em; } +.info-box-title{ background-color: #ccc9a4; border: 1px solid #636331; color: #636331; font-size: 14pt; font-weight: normal; margin: 1em 0em 0em 0em; padding: .25em; } +.line-number, .var-name-summary { font-size: 8pt; font-weight: bold; } +.method-definition { font-size: 8pt; margin-bottom: .3em; padding-left: 1em; } +.method-definition{ font-size: 8pt; margin-bottom: .3em; } +.method-header{ } +.method-result { color: #636331; font-size: 8pt; font-style: italic; } +.method-signature{ color: #ccc9a4; font-size: 85%; margin: .5em 0em; } +.nav-bar{ font-size: 8pt; margin: 0em 0em 1em 0em; padding: .2em; text-align: right; white-space: nowrap; } +.nav-button:active, +.nav-button:focus, +.nav-button:hover{ background-color: #dddddd; outline: 1px solid #999999; text-decoration: none; } +.nav-button-disabled{ color: #999999; } +.notes{ font-size: 8pt; font-style: italic; } +.oddrow{ background-color: #fdfcf2; border: 1px solid #ccc9a4; color: #000000; margin-bottom: 1em; padding: .5em; } +.package{ padding-left : 2em; font-size : 9pt; } +.package-details{ font-size: 85%; } +.package-title{ border-bottom: 1px solid #000000; font-size: 14pt; font-weight: bold; } +.page-body{ margin: auto; max-width: 800px; } +.parameters{ list-style-type: square; margin-bottom: 0em; margin-left: 3em; margin-right: 1em; margin-top: 0em; padding-left: 0em; vertical-align: top; } +.redefinitions{ font-size: 8pt; margin-left: 2em; padding-left: 0em; } +.separator{ background-color: #ccc9a4; height: 1px; } +.short-description{ color: #636331; font-weight: bold; } +.src-code li, .php-src li, .php li, .listing li { list-style-type: decimal } +/* This will not be executed by IE, so now we have a fix! */ +.php-src { font-family: 'Courier New', Courier, monospace; font-weight: normal; } +.sub-package{ font-size: 120%; font-weight: bold; } +.tags{ color: #636331; list-style-type: square; margin-bottom: 0em; margin-left: 3em; margin-right: 1em; margin-top: 0em; padding-left: 0em; vertical-align: top; } +.tree dl { margin: 0px; } +.tutorial{ border-color: #0066ff; border-width: thin; } +.tutorial-nav-box{ background-color: #fdfcf2; border: 1px solid #999999; width: 100%; } +.var-default{ } +.var-summary-description { font-size: 8pt; font-weight: normal; color: #000000; } +.var-description{ color: #000000; font-weight: normal; } +.var-header{ } +.var-name, .const-name, .method-title,.method-name,.include-name,.var-name,.field { font-weight: bold; } +.var-summary,.method-summary{ font-size: 8pt;} +.var-title{ margin-bottom: .3em; } +.var-type{ color: #636331; font-style: italic; } +.var-type-summary{ color: #636331; font-size: 8pt; font-style: italic; padding-left: 1em; } +.warning{ color: #ff6600; } + +/* Syntax highlighting */ + +.src-code { background-color: #f5f5f5; border: 1px solid #ccc9a4; padding: 1em; margin : 0px; + font-family: 'Courier New', Courier, monospace; font-weight: normal; } +.src-line { font-family: 'Courier New', Courier, monospace; font-weight: normal; } + +.src-comm { color: green; } +.src-id { } +.src-inc { color: #0000FF; } +.src-key { color: #0000FF; } +.src-num { color: #CC0000; } +.src-str { color: #66cccc; } +.src-sym { font-weight: bold; } +.src-var { } + +.src-php { font-weight: bold; } + +.src-doc { color: #009999 } +.src-doc-close-template { color: #0000FF } +.src-doc-coretag { color: #0099FF; font-weight: bold } +.src-doc-inlinetag { color: #0099FF } +.src-doc-internal { color: #6699cc } +.src-doc-tag { color: #0080CC } +.src-doc-template { color: #0000FF } +.src-doc-type { font-style: italic } +.src-doc-var { font-style: italic } + +.tute-tag { color: #009999 } +.tute-attribute-name { color: #0000FF } +.tute-attribute-value { color: #0099FF } +.tute-entity { font-weight: bold; } +.tute-comment { font-style: italic } +.tute-inline-tag { color: #636311; font-weight: bold } + +/* tutorial */ + +.authors { } +.author { font-style: italic; font-weight: bold } +.author-blurb { margin: .5em 0em .5em 2em; font-size: 85%; font-weight: normal; font-style: normal } +.example { border: 1px dashed #999999; background-color: #EEEEEE; padding: .5em; } +.listing { border: 1px dashed #999999; background-color: #EEEEEE; padding: .5em; white-space: nowrap; } +.release-info { font-size: 85%; font-style: italic; margin: 1em 0em } +.ref-title-box { } +.ref-title { } +.ref-purpose { font-style: italic; color: #666666 } +.ref-synopsis { } +.title { font-weight: bold; margin: 1em 0em 0em 0em; padding: .25em; border: 2px solid #999999; background-color: #fdfcf2; + color: #636331; } +.cmd-synopsis { margin: 1em 0em } +.cmd-title { font-weight: bold } +.toc { margin-left: 2em; padding-left: 0em } + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/method.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/method.tpl new file mode 100755 index 00000000..8ea3853c --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/method.tpl @@ -0,0 +1,176 @@ +<a name='method_detail'></a> +{section name=methods loop=$methods} +{if $methods[methods].static} +<a name="method{$methods[methods].function_name}" id="{$methods[methods].function_name}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + +<div class="method-header"> + <span class="method-title">static method {$methods[methods].function_name}</span> <span class="smalllinenumber">[line {if $methods[methods].slink}{$methods[methods].slink}{else}{$methods[methods].line_number}{/if}]</span> +</div> +<br /> + + <div class="function"> + <table width="90%" border="0" cellspacing="0" cellpadding="1"><tr><td class="code-border"> + <table width="100%" border="0" cellspacing="0" cellpadding="2"><tr><td class="code"> + <code>static {$methods[methods].function_return} {if $methods[methods].ifunction_call.returnsref}&{/if}{$methods[methods].function_name}( +{if count($methods[methods].ifunction_call.params)} +{section name=params loop=$methods[methods].ifunction_call.params} +{if $smarty.section.params.iteration != 1}, {/if} +{if $methods[methods].ifunction_call.params[params].hasdefault}[{/if}{$methods[methods].ifunction_call.params[params].type} +{$methods[methods].ifunction_call.params[params].name}{if $methods[methods].ifunction_call.params[params].hasdefault} = {$methods[methods].ifunction_call.params[params].default}]{/if} +{/section} + +{/if})</code> + </td></tr></table> + </td></tr></table><br /></div> + + {include file="docblock.tpl" sdesc=$methods[methods].sdesc desc=$methods[methods].desc} + + {if $methods[methods].params} + <strong>Parameters:</strong><br /> + <table border="0" cellspacing="0" cellpadding="0"> + {section name=params loop=$methods[methods].params} + <tr><td class="indent"> + <span class="var-type">{$methods[methods].params[params].datatype}</span> </td> + <td> + <span class="var-name">{$methods[methods].params[params].var}: </span></td> + <td> + {if $methods[methods].params[params].data}<span class="var-description"> {$methods[methods].params[params].data}</span>{/if} + </td></tr> + {/section} + </table> + + {/if} +<br /> + {include file="tags.tpl" api_tags=$methods[methods].api_tags info_tags=$methods[methods].info_tags} + + {if $methods[methods].method_overrides} + <hr class="separator" /> + <div class="notes">Redefinition of:</div> + <dl> + <dt>{$methods[methods].method_overrides.link}</dt> + {if $methods[methods].method_overrides.sdesc} + <dd>{$methods[methods].method_overrides.sdesc}</dd> + {/if} + </dl> + {/if} + {if $methods[methods].method_implements} + <hr class="separator" /> + <div class="notes">Implementation of:</div> + {section name=imp loop=$methods[methods].method_implements} + <dl> + <dt>{$methods[methods].method_implements[imp].link}</dt> + {if $methods[methods].method_implements[imp].sdesc} + <dd>{$methods[methods].method_implements[imp].sdesc}</dd> + {/if} + </dl> + {/section} + {/if} + + {if $methods[methods].descmethod} + <hr class="separator" /> + <div class="notes">Redefined in descendants as:</div> + <ul class="redefinitions"> + {section name=dm loop=$methods[methods].descmethod} + <li> + {$methods[methods].descmethod[dm].link} + {if $methods[methods].descmethod[dm].sdesc} + : {$methods[methods].descmethod[dm].sdesc} + {/if} + </li> + {/section} + </ul> + {/if} + <br /> + <div class="top">[ <a href="#top">Top</a> ]</div> +</div> +{/if} +{/section} + +{section name=methods loop=$methods} +{if !$methods[methods].static} +<a name="method{$methods[methods].function_name}" id="{$methods[methods].function_name}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + +<div class="method-header"> + <span class="method-title">{if $methods[methods].ifunction_call.constructor}Constructor {elseif $methods[methods].ifunction_call.destructor}Destructor {/if}{$methods[methods].function_name}</span> <span class="smalllinenumber">[line {if $methods[methods].slink}{$methods[methods].slink}{else}{$methods[methods].line_number}{/if}]</span> +</div> +<br /> + + <div class="function"> + <table width="90%" border="0" cellspacing="0" cellpadding="1"><tr><td class="code-border"> + <table width="100%" border="0" cellspacing="0" cellpadding="2"><tr><td class="code"> + <code>{$methods[methods].function_return} {if $methods[methods].ifunction_call.returnsref}&{/if}{$methods[methods].function_name}( +{if count($methods[methods].ifunction_call.params)} +{section name=params loop=$methods[methods].ifunction_call.params} +{if $smarty.section.params.iteration != 1}, {/if} +{if $methods[methods].ifunction_call.params[params].hasdefault}[{/if}{$methods[methods].ifunction_call.params[params].type} +{$methods[methods].ifunction_call.params[params].name}{if $methods[methods].ifunction_call.params[params].hasdefault} = {$methods[methods].ifunction_call.params[params].default}]{/if} +{/section} + +{/if})</code> + </td></tr></table> + </td></tr></table><br /></div> + + {include file="docblock.tpl" sdesc=$methods[methods].sdesc desc=$methods[methods].desc} + + {if $methods[methods].params} + <strong>Parameters:</strong><br /> + <table border="0" cellspacing="0" cellpadding="0"> + {section name=params loop=$methods[methods].params} + <tr><td class="indent"> + <span class="var-type">{$methods[methods].params[params].datatype}</span> </td> + <td> + <span class="var-name">{$methods[methods].params[params].var}: </span></td> + <td> + {if $methods[methods].params[params].data}<span class="var-description"> {$methods[methods].params[params].data}</span>{/if} + </td></tr> + {/section} + </table> + + {/if} +<br /> + {include file="tags.tpl" api_tags=$methods[methods].api_tags info_tags=$methods[methods].info_tags} + + {if $methods[methods].method_overrides} + <hr class="separator" /> + <div class="notes">Redefinition of:</div> + <dl> + <dt>{$methods[methods].method_overrides.link}</dt> + {if $methods[methods].method_overrides.sdesc} + <dd>{$methods[methods].method_overrides.sdesc}</dd> + {/if} + </dl> + {/if} + {if $methods[methods].method_implements} + <hr class="separator" /> + <div class="notes">Implementation of:</div> + {section name=imp loop=$methods[methods].method_implements} + <dl> + <dt>{$methods[methods].method_implements[imp].link}</dt> + {if $methods[methods].method_implements[imp].sdesc} + <dd>{$methods[methods].method_implements[imp].sdesc}</dd> + {/if} + </dl> + {/section} + {/if} + + {if $methods[methods].descmethod} + <hr class="separator" /> + <div class="notes">Redefined in descendants as:</div> + <ul class="redefinitions"> + {section name=dm loop=$methods[methods].descmethod} + <li> + {$methods[methods].descmethod[dm].link} + {if $methods[methods].descmethod[dm].sdesc} + : {$methods[methods].descmethod[dm].sdesc} + {/if} + </li> + {/section} + </ul> + {/if} + <br /> + <div class="top">[ <a href="#top">Top</a> ]</div> +</div> +{/if} +{/section} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/packages.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/packages.tpl new file mode 100755 index 00000000..0967e6e7 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/packages.tpl @@ -0,0 +1,3 @@ +{section name=packages loop=$packages} +<a href="{$packages[packages].link}">{$packages[packages].title}</a> +{/section}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/page.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/page.tpl new file mode 100755 index 00000000..83cfc582 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/page.tpl @@ -0,0 +1,210 @@ +{include file="header.tpl" eltype="Procedural file" class_name=$name hasel=true contents=$pagecontents} + +<a name="sec-description"></a> +<div class="info-box"> + <div class="info-box-title">Page Details</div> + <div class="nav-bar"> + {if $classes || $includes || $defines || $globals || $functions} + <span class="disabled">Page Details</span> | + {/if} + {if $classes} + <a href="#sec-classes">Classes</a> + {if $includes || $defines || $globals || $functions}|{/if} + {/if} + {if $includes} + <a href="#sec-includes">Includes</a> + {if $defines || $globals || $functions}|{/if} + {/if} + {if $defines} + <a href="#sec-constants">Constants</a> + {if $globals || $functions}|{/if} + {/if} + {if $globals} + <a href="#sec-variables">Globals</a> + {if $functions}|{/if} + {/if} + {if $functions} + <a href="#sec-functions">Functions</a> + {/if} + </div> + <div class="info-box-body"> + {include file="docblock.tpl" type="page" desc=$desc sdesc=$sdesc} + {include file="filetags.tpl" tags=$tags} + + {if $tutorial} + <hr class="separator" /> + <div class="notes">Tutorial: <span class="tutorial">{$tutorial}</div> + {/if} + </div> +</div> + +{if $classes} + <a name="sec-classes"></a> + <div class="info-box"> + <div class="info-box-title">Classes</div> + <div class="nav-bar"> + <a href="#sec-description">Page Details</a> | + <span class="disabled">Classes</span> + {if $includes || $defines || $globals || $functions}|{/if} + {if $includes} + <a href="#sec-includes">Includes</a> + {if $defines || $globals || $functions}|{/if} + {/if} + {if $defines} + <a href="#sec-constants">Constants</a> + {if $globals || $functions}|{/if} + {/if} + {if $globals} + <a href="#sec-variables">Globals</a> + {if $functions}|{/if} + {/if} + {if $functions} + <a href="#sec-functions">Functions</a> + {/if} + </div> + <div class="info-box-body"> + <table cellpadding="2" cellspacing="0" class="class-table"> + <tr> + <th class="class-table-header">Class</th> + <th class="class-table-header">Description</th> + </tr> + {section name=classes loop=$classes} + <tr> + <td style="padding-right: 2em; vertical-align: top"> + {$classes[classes].link} + </td> + <td> + {if $classes[classes].sdesc} + {$classes[classes].sdesc} + {else} + {$classes[classes].desc} + {/if} + </td> + </tr> + {/section} + </table> + </div> + </div> +{/if} + +{if $includes} + <a name="sec-includes"></a> + <div class="info-box"> + <div class="info-box-title">Includes</div> + <div class="nav-bar"> + <a href="#sec-description">Page Details</a> | + {if $classes} + <a href="#sec-classes">Classes</a> + {if $includes || $defines || $globals || $functions}|{/if} + {/if} + <span class="disabled">Includes</span> + {if $defines || $globals || $functions}|{/if} + {if $defines} + <a href="#sec-constants">Constants</a> + {if $globals || $functions}|{/if} + {/if} + {if $globals} + <a href="#sec-variables">Globals</a> + {if $functions}|{/if} + {/if} + {if $functions} + <a href="#sec-functions">Functions</a> + {/if} + </div> + <div class="info-box-body"> + {include file="include.tpl"} + </div> + </div><br /> +{/if} + +{if $defines} + <a name="sec-constants"></a> + <div class="info-box"> + <div class="info-box-title">Constants</div> + <div class="nav-bar"> + <a href="#sec-description">Page Details</a> | + {if $classes} + <a href="#sec-classes">Classes</a> + {if $includes || $defines || $globals || $functions}|{/if} + {/if} + {if $includes} + <a href="#sec-includes">Includes</a> + {if $defines || $globals || $functions}|{/if} + {/if} + <span class="disabled">Constants</span> + {if $globals || $functions}|{/if} + {if $globals} + <a href="#sec-variables">Globals</a> + {if $functions}|{/if} + {/if} + {if $functions} + <a href="#sec-functions">Functions</a> + {/if} + </div> + <div class="info-box-body"> + {include file="define.tpl"} + </div> + </div><br /> +{/if} + +{if $globals} + <a name="sec-variables"></a> + <div class="info-box"> + <div class="info-box-title">Globals</div> + <div class="nav-bar"> + <a href="#sec-description">Page Details</a> | + {if $classes} + <a href="#sec-classes">Classes</a> + {if $includes || $defines || $globals || $functions}|{/if} + {/if} + {if $includes} + <a href="#sec-includes">Includes</a> + {if $defines || $globals || $functions}|{/if} + {/if} + {if $defines} + <a href="#sec-constants">Constants</a> + {if $globals || $functions}|{/if} + {/if} + <span class="disabled">Globals</span> + {if $functions}|{/if} + {if $globals} + <a href="#sec-functions">Functions</a> + {/if} + </div> + <div class="info-box-body"> + {include file="global.tpl"} + </div> + </div><br /> +{/if} + +{if $functions} + <a name="sec-functions"></a> + <div class="info-box"> + <div class="info-box-title">Functions</div> + <div class="nav-bar"> + <a href="#sec-description">Page Details</a> | + {if $classes} + <a href="#sec-classes">Classes</a> + {if $includes || $defines || $globals || $functions}|{/if} + {/if} + {if $includes} + <a href="#sec-includes">Includes</a> + {if $defines || $globals || $functions}|{/if} + {/if} + {if $defines} + <a href="#sec-constants">Constants</a> + {if $globals || $functions}|{/if} + {/if} + {if $globals} + <a href="#sec-variables">Globals</a> + {if $functions}|{/if} + {/if} + <span class="disabled">Functions</span> + </div> + <div class="info-box-body"> + {include file="function.tpl"} + </div> + </div><br /> +{/if} + +{include file="footer.tpl" top3=true} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/pkgelementindex.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/pkgelementindex.tpl new file mode 100755 index 00000000..7f12c6c5 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/pkgelementindex.tpl @@ -0,0 +1,15 @@ +{include file="header.tpl"} +<a name="top"></a> +<h1>Element index for package {$package}</h1> +{if count($packageindex) > 1} + <h3>Package indexes</h3> + <ul> + {section name=p loop=$packageindex} + {if $packageindex[p].title != $package} + <li><a href="elementindex_{$packageindex[p].title}.html">{$packageindex[p].title}</a></li> + {/if} + {/section} + </ul> +{/if} +{include file="basicindex.tpl" indexname=elementindex_$package} +{include file="footer.tpl"} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/ric.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/ric.tpl new file mode 100755 index 00000000..eff734c1 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/ric.tpl @@ -0,0 +1,6 @@ +{include file="header.tpl"} +<h1 align="center">{$name}</h1> +<pre> +{$contents|htmlentities} +</pre> +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/tags.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/tags.tpl new file mode 100755 index 00000000..9f965d88 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/tags.tpl @@ -0,0 +1,22 @@ +{if count($api_tags) > 0} +<strong>API Tags:</strong><br /> +<table border="0" cellspacing="0" cellpadding="0"> +{section name=tag loop=$api_tags} + <tr> + <td class="indent"><strong>{$api_tags[tag].keyword|capitalize}:</strong> </td><td>{$api_tags[tag].data}</td> + </tr> +{/section} +</table> +<br /> +{/if} + +{if count($info_tags) > 0} +<strong>Information Tags:</strong><br /> +<table border="0" cellspacing="0" cellpadding="0"> +{section name=tag loop=$info_tags} + <tr> + <td class="indent"><strong>{$info_tags[tag].keyword|capitalize}:</strong> </td><td>{$info_tags[tag].data}</td> + </tr> +{/section} +</table> +{/if} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/todolist.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/todolist.tpl new file mode 100755 index 00000000..f929ccdb --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/todolist.tpl @@ -0,0 +1,14 @@ +{include file="header.tpl" title="Todo List"} +<div align="center"><h1>Todo List</h1></div> +{foreach from=$todos key=todopackage item=todo} +<h2>{$todopackage}</h2> +{section name=todo loop=$todo} +<h3>{$todo[todo].link}</h3> +<ul> +{section name=t loop=$todo[todo].todos} + <li>{$todo[todo].todos[t]}</li> +{/section} +</ul> +{/section} +{/foreach} +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/tutorial.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/tutorial.tpl new file mode 100755 index 00000000..a943522c --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/tutorial.tpl @@ -0,0 +1,32 @@ +{include file="header.tpl" title=$title} +{if $nav} +<table width="100%" border="0" cellpadding="0" cellspacing="0"> +<tr> +<td width="10%" align="left" valign="bottom">{if $prev}<a href= +"{$prev}">{/if}Prev{if $prev}</a>{/if}</td> +<td width="80%" align="center" valign="bottom"></td> +<td width="10%" align="right" valign="bottom">{if $next}<a href= +"{$next}">{/if}Next{if $next}</a>{/if}</td> +</tr> +</table> +{/if} +{$contents} +{if $nav} +<table width="100%" border="0" cellpadding="0" cellspacing="0"> +<tr> +<td width="33%" align="left" valign="top">{if $prev}<a href="{$prev}">{/if} +Prev{if $prev}</a>{/if}</td> +<td width="34%" align="center" valign="top">{if $up}<a href= +"{$up}">Up</a>{else} {/if}</td> +<td width="33%" align="right" valign="top">{if $next}<a href= +"{$next}">{/if}Next{if $next}</a>{/if}</td> +</tr> + +<tr> +<td width="33%" align="left" valign="top">{if $prevtitle}{$prevtitle}{/if}</td> +<td width="34%" align="center" valign="top">{if $uptitle}{$uptitle}{/if}</td> +<td width="33%" align="right" valign="top">{if $nexttitle}{$nexttitle}{/if}</td> +</tr> +</table> +{/if} +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/tutorial_toc.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/tutorial_toc.tpl new file mode 100755 index 00000000..3d22d403 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/tutorial_toc.tpl @@ -0,0 +1,29 @@ +{if count($toc)} +<h1 align="center">Table of Contents</h1> +<ul> +{section name=toc loop=$toc} +{if $toc[toc].tagname == 'refsect1'} +{assign var="context" value="refsect1"} +{$toc[toc].link}<br /> +{/if} +{if $toc[toc].tagname == 'refsect2'} +{assign var="context" value="refsect2"} + {$toc[toc].link}<br /> +{/if} +{if $toc[toc].tagname == 'refsect3'} +{assign var="context" value="refsect3"} + {$toc[toc].link}<br /> +{/if} +{if $toc[toc].tagname == 'table'} +{if $context == 'refsect2'} {/if} +{if $context == 'refsect3'} {/if} +Table: {$toc[toc].link} +{/if} +{if $toc[toc].tagname == 'example'} +{if $context == 'refsect2'} {/if} +{if $context == 'refsect3'} {/if} +Table: {$toc[toc].link} +{/if} +{/section} +</ul> +{/if}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/tutorial_tree.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/tutorial_tree.tpl new file mode 100755 index 00000000..dd2e5811 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/tutorial_tree.tpl @@ -0,0 +1,5 @@ +<ul> + <li type="square"><a href="{$main.link}">{$main.title|strip_tags}</a> +{if $kids}{$kids}</li>{/if} +</ul> + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/var.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/var.tpl new file mode 100755 index 00000000..45aba195 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/var.tpl @@ -0,0 +1,94 @@ +{section name=vars loop=$vars} +{if $vars[vars].static} +<a name="var{$vars[vars].var_name}" id="{$vars[vars].var_name}"><!-- --></A> +<div class="{cycle values="evenrow,oddrow"}"> + + <div class="var-header"> + <span class="var-title"> + static <span class="var-type">{$vars[vars].var_type}</span> + <span class="var-name">{$vars[vars].var_name}</span> + {if $vars[vars].var_default} = <span class="var-default">{$vars[vars].var_default|replace:"\n":"<br />"}</span>{/if} + <span class="smalllinenumber">[line {if $vars[vars].slink}{$vars[vars].slink}{else}{$vars[vars].line_number}{/if}]</span> + </span> + </div> + + {include file="docblock.tpl" sdesc=$vars[vars].sdesc desc=$vars[vars].desc} + {include file="tags.tpl" api_tags=$vars[vars].api_tags info_tags=$vars[vars].info_tags} + + {if $vars[vars].var_overrides} + <hr class="separator" /> + <div class="notes">Redefinition of:</div> + <dl> + <dt>{$vars[vars].var_overrides.link}</dt> + {if $vars[vars].var_overrides.sdesc} + <dd>{$vars[vars].var_overrides.sdesc}</dd> + {/if} + </dl> + {/if} + + {if $vars[vars].descvar} + <hr class="separator" /> + <div class="notes">Redefined in descendants as:</div> + <ul class="redefinitions"> + {section name=vm loop=$vars[vars].descvar} + <li> + {$vars[vars].descvar[vm].link} + {if $vars[vars].descvar[vm].sdesc} + : {$vars[vars].descvar[vm].sdesc} + {/if} + </li> + {/section} + </ul> + {/if} + <br /> + <div class="top">[ <a href="#top">Top</a> ]</div> +</div> +{/if} +{/section} +{section name=vars loop=$vars} +{if !$vars[vars].static} +<a name="var{$vars[vars].var_name}" id="{$vars[vars].var_name}"><!-- --></A> +<div class="{cycle values="evenrow,oddrow"}"> + + <div class="var-header"> + <span class="var-title"> + <span class="var-type">{$vars[vars].var_type}</span> + <span class="var-name">{$vars[vars].var_name}</span> + {if $vars[vars].var_default} = <span class="var-default">{$vars[vars].var_default|replace:"\n":"<br />"}</span>{/if} + <span class="smalllinenumber">[line {if $vars[vars].slink}{$vars[vars].slink}{else}{$vars[vars].line_number}{/if}]</span> + </span> + </div> + + {include file="docblock.tpl" sdesc=$vars[vars].sdesc desc=$vars[vars].desc} + {include file="tags.tpl" api_tags=$vars[vars].api_tags info_tags=$vars[vars].info_tags} + + {if $vars[vars].var_overrides} + <hr class="separator" /> + <div class="notes">Redefinition of:</div> + <dl> + <dt>{$vars[vars].var_overrides.link}</dt> + {if $vars[vars].var_overrides.sdesc} + <dd>{$vars[vars].var_overrides.sdesc}</dd> + {/if} + </dl> + {/if} + + {if $vars[vars].descvar} + <hr class="separator" /> + <div class="notes">Redefined in descendants as:</div> + <ul class="redefinitions"> + {section name=vm loop=$vars[vars].descvar} + <li> + {$vars[vars].descvar[vm].link} + {if $vars[vars].descvar[vm].sdesc} + : {$vars[vars].descvar[vm].sdesc} + {/if} + </li> + {/section} + </ul> + {/if} + <br /> + <div class="top">[ <a href="#top">Top</a> ]</div> +</div> +{/if} +{/section} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/options.ini b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/options.ini new file mode 100755 index 00000000..73479c5f --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/options.ini @@ -0,0 +1,577 @@ +preservedocbooktags = false + +;; used to highlight the {@source} inline tag, @filesource tag, and @example tag +[highlightSourceTokens] +;; format: +;; T_CONSTANTNAME = open +;; /T_CONSTANTNAME = close + +T_INCLUDE = <span class="src-inc"> +/T_INCLUDE = </span> +T_INCLUDE_ONCE = <span class="src-inc"> +/T_INCLUDE_ONCE = </span> +T_REQUIRE_ONCE = <span class="src-inc"> +/T_REQUIRE_ONCE = </span> +T_REQUIRE_ONCE = <span class="src-inc"> +/T_REQUIRE_ONCE = </span> + +T_CONSTANT_ENCAPSED_STRING = <span class="src-str"> +/T_CONSTANT_ENCAPSED_STRING = </span> +T_STRING_VARNAME = <span class="src-str"> +/T_STRING_VARNAME = </span> + +T_STRING = <span class="src-id"> +/T_STRING = </span> + +T_DNUMBER = <span class="src-num"> +/T_DNUMBER = </span> +T_LNUMBER = <span class="src-num"> +/T_LNUMBER = </span> + +T_VARIABLE = <span class="src-var"> +/T_VARIABLE = </span> + +T_COMMENT = <span class="src-comm"> +/T_COMMENT = </span> +T_ML_COMMENT = <span class="src-comm"> +/T_ML_COMMENT = </span> + +T_OBJECT_OPERATOR = <span class="src-sym"> +/T_OBJECT_OPERATOR = </span> + +T_ABSTRACT = <span class="src-key"> +/T_ABSTRACT = </span> +T_CLONE = <span class="src-key"> +/T_CLONE = </span> +T_HALT_COMPILER = <span class="src-key"> +/T_HALT_COMPILER = </span> +T_ARRAY = <span class="src-key"> +/T_ARRAY = </span> +T_AS = <span class="src-key"> +/T_AS = </span> +T_BREAK = <span class="src-key"> +/T_BREAK = </span> +T_CLASS = <span class="src-key"> +/T_CLASS = </span> +T_CASE = <span class="src-key"> +/T_CASE = </span> +T_CONST = <span class="src-key"> +/T_CONST = </span> +T_CONTINUE = <span class="src-key"> +/T_CONTINUE = </span> +T_DECLARE = <span class="src-key"> +/T_DECLARE = </span> +T_DEFAULT = <span class="src-key"> +/T_DEFAULT = </span> +T_ELSE = <span class="src-key"> +/T_ELSE = </span> +T_ELSEIF = <span class="src-key"> +/T_ELSEIF = </span> +T_EMPTY = <span class="src-key"> +/T_EMPTY = </span> +T_ENDDECLARE = <span class="src-key"> +/T_ENDDECLARE = </span> +T_ENDFOR = <span class="src-key"> +/T_ENDFOR = </span> +T_ENDSWITCH = <span class="src-key"> +/T_ENDSWITCH = </span> +T_ENDFOREACH = <span class="src-key"> +/T_ENDFOREACH = </span> +T_ENDIF = <span class="src-key"> +/T_ENDIF = </span> +T_ENDWHILE = <span class="src-key"> +/T_ENDWHILE = </span> +T_EXIT = <span class="src-key"> +/T_EXIT = </span> +T_EXTENDS = <span class="src-key"> +/T_EXTENDS = </span> +T_FINAL = <span class="src-key"> +/T_FINAL = </span> +T_FOR = <span class="src-key"> +/T_FOR = </span> +T_FOREACH = <span class="src-key"> +/T_FOREACH = </span> +T_FUNCTION = <span class="src-key"> +/T_FUNCTION = </span> +T_GLOBAL = <span class="src-key"> +/T_GLOBAL = </span> +T_IF = <span class="src-key"> +/T_IF = </span> +T_IMPLEMENTS = <span class="src-key"> +/T_IMPLEMENTS = </span> +T_INTERFACE = <span class="src-key"> +/T_INTERFACE = </span> +T_LOGICAL_AND = <span class="src-key"> +/T_LOGICAL_AND = </span> +T_LOGICAL_OR = <span class="src-key"> +/T_LOGICAL_OR = </span> +T_LOGICAL_XOR = <span class="src-key"> +/T_LOGICAL_XOR = </span> +T_NEW = <span class="src-key"> +/T_NEW = </span> +T_PRIVATE = <span class="src-key"> +/T_PRIVATE = </span> +T_PROTECTED = <span class="src-key"> +/T_PROTECTED = </span> +T_PUBLIC = <span class="src-key"> +/T_PUBLIC = </span> +T_RETURN = <span class="src-key"> +/T_RETURN = </span> +T_STATIC = <span class="src-key"> +/T_STATIC = </span> +T_SWITCH = <span class="src-key"> +/T_SWITCH = </span> +T_VAR = <span class="src-key"> +/T_VAR = </span> +T_WHILE = <span class="src-key"> +/T_WHILE = </span> + +T_DOUBLE_COLON = <span class="src-sym"> +/T_DOUBLE_COLON = </span> + +T_OPEN_TAG = <span class="src-php"> +/T_OPEN_TAG = </span> +T_OPEN_TAG_WITH_ECHO = <span class="src-php"> +/T_OPEN_TAG_WITH_ECHO = </span> +T_CLOSE_TAG = <span class="src-php"> +/T_CLOSE_TAG = </span> + + +[highlightSource] +;; this is for highlighting things that aren't tokens like "&" +;; format: +;; word = open +;; /word = close +@ = <span class="src-sym"> +/@ = </span> +& = <span class="src-sym"> +/& = </span> +[ = <span class="src-sym"> +/[ = </span> +] = <span class="src-sym"> +/] = </span> +! = <span class="src-sym"> +/! = </span> +";" = <span class="src-sym"> +/; = </span> +( = <span class="src-sym"> +/( = </span> +) = <span class="src-sym"> +/) = </span> +, = <span class="src-sym"> +/, = </span> +{ = <span class="src-sym"> +/{ = </span> +} = <span class="src-sym"> +/} = </span> +""" = <span class="src-str"> +/" = </span> + +[highlightDocBlockSourceTokens] +;; this is for docblock tokens, using by phpDocumentor_HighlightParser +;; tagphptype is for "string" in @param string description, for example +docblock = <span class="src-doc"> +/docblock = </span> +tagphptype = <span class="src-doc-type"> +/tagphptype = </span> +tagvarname = <span class="src-doc-var"> +/tagvarname = </span> +coretag = <span class="src-doc-coretag"> +/coretag = </span> +tag = <span class="src-doc-tag"> +/tag = </span> +inlinetag = <span class="src-doc-inlinetag"> +/inlinetag = </span> +internal = <span class="src-doc-internal"> +/internal = </span> +closetemplate = <span class="src-doc-close-template"> +/closetemplate = </span> +docblocktemplate = <span class="src-doc-template"> +/docblocktemplate = </span> + +[highlightTutorialSourceTokens] +;; this is for XML DocBook-based tutorials, highlighted by phpDocumentor_TutorialHighlightParser +;; <tag> +opentag = <span class="tute-tag"> +/opentag = </span> +;; </tag> +closetag = <span class="tute-tag"> +/closetag = </span> +;; <tag attribute="value"> +attribute = <span class="tute-attribute-name"> +/attribute = </span> +;; <tag attribute="value"> +attributevalue = <span class="tute-attribute-value"> +/attributevalue = </span> +;; &entity; +entity = <span class="tute-entity"> +/entity = </span> +;; <!-- comment --> +comment = <span class="tute-comment"> +/comment = </span> +;; {@inline tag} +itag = <span class="tute-inline-tag"> +/itag = </span> + +;; used for translation of html in DocBlocks +[desctranslate] +ul = <ul> +/ul = </ul> +ol = <ol> +/ol = </ol> +li = <li> +/li = </li> +code = +/code = +var = <var> +/var = </var> +samp = <samp> +/samp = </samp> +kbd = <kbd> +/kbd = </kbd> +pre = <pre> +/pre = </pre> +p = <p> +/p = </p> +b = <strong> +/b = </strong> +i = <em> +/i = </em> +br = <br /> + +[ppage] +;; this is the DocBook package page translation section. All DocBook tags +;; that have a corresponding html tag must be listed here. Entities should +;; also be listed here +;; +;; examples: +;; 1) +;; tagname = newtagname +;; +;; This is the simplest case, where all attributes will be added into the +;; starting tag and the ending tag will be html/xml style </tranlatedtagname> +;; <tagname></tagname> becomes <newtagname></newtagname> and +;; <tagname attr="value"></tagname> becomes +;; <newtagname attr="value"></newtagname> +;; +;; 2) +;; tagname = newtagname +;; tagname->attr = newattrname +;; +;; in this case, everything will be like the first case, except tags like: +;; <tagname attr="value"></tagname> will become +;; <newtagname newattrname="value"></newtagname> +;; +;; 3) +;; tagname = newtagname +;; tagname->attr = newattrname +;; tagname->attr+value = newvalue +;; +;; in this case, the value is also translated to another. This can be useful +;; for instances such as focus="middle" changing to align="center" or something +;; of that nature. +;; <tagname attr="value"></tagname> will become +;; <newtagname newattrname="newvalue"></newtagname> +;; +;; 4) +;; tagname = newtagname +;; tagname->attr1 = newattrname +;; tagname->attr2 = newattrname +;; tagname->attr1+value|attr2+value = newvalue +;; +;; in this case, two attributes combine to make one new attribute, and the combined +;; value is translated into a new value +;; <tagname attr1="value1" attr2="value2"></tagname> will become +;; <newtagname newattrname="newvalue"></newtagname> +;; +;; 5) +;; tagname = newtagname +;; tagname!attr = dummy +;; +;; here, the attribute will be ignored. dummy is not used and may be any value +;; <tagname attr="value"></tagname> will become +;; <newtagname></newtagname> +;; +;; 6) +;; tagname = newtagname +;; tagname! = dummy +;; +;; here, all attributes will be ignored. dummy is not used and may be any value +;; <tagname attr1="value" attr2="foo"></tagname> will become +;; <newtagname></newtagname> +;; +;; 7) +;; tagname = newtagname +;; tagname/ = 1 +;; +;; here, the tag will be translated as a single tag with no closing tag, and all +;; attributes +;; <tagname attr="val">{text text}</tagname> will become +;; <newtagname attr="val" /> +;; +;; 8) +;; tagname = <starttaginfo /> +;; /tagname = closetagtext +;; +;; in this case, the text <starttaginfo> will be inserted exactly as entered for +;; <tagname> and closetagtext for </tagname> +;; <tagname attr="val"></tagname> will become +;; <starttaginfo />closetagtext +;; +;; 9) +;; $attr$my_attribute = newattrname +;; +;; tagname = newtagname +;; +;; in this case, all occurences of my_attribute in any tag will be changed to +;; newattrname. This is useful for changing things like role="php" to +;; class="php," for example. Note that the text "$attr$" MUST be on the line +;; start for phpDocumentor to recognize it. +;; +;; 10) +;; &entity; = translation text +;; " = " +;; " = """ +;; < = < +;; +;; Use this to control translation of entities to their appropriate values + + = +" = " +” = ” +“ = “ +& = & +< = < +> = > +© = © + +$attr$role = class + +abbrev = abbr + +blockquote = blockquote + +arg = span +arg->choice = class + +author = <span class="author"> +/author = </span> +author! = 0 + +authorblurb = <div class="author-blurb"> +/authorblurb = </div> + +authorgroup = <div class="authors"><h2 class="title">Authors</h2> +/authorgroup = </div> +authorgroup! = 0 + +caution = <span class="warning"> +/caution = </span> +caution! = 0 + +cmdsynopsis = <div class="cmd-synopsis"> +/cmdsynopsis = </div> + +command = <span class="cmd-title"> +/command = </span> + +copyright = <div class="notes"> +/copyright = </div> + +emphasis = strong + +example = <div class="src-code"> +/example = </div> +example! = 0 + +function = +/function = () + +formalpara = p + +graphic = img +graphic->fileref = src +graphic/ = + +important = strong + +informalequation = blockquote + +informalexample = div + +inlineequation = em + +itemizedlist = ul + +listitem = li + +literal = code + +literallayout = span + +option = " " +/option = + +orderedlist = ol + +para = p + +programlisting = <div class="src-code"> +/programlisting = </div> +programlisting! = 0 + +refentry = div + +refnamediv = <div class="ref-title-box"> +/refnamediv = </div> +refnamediv! = 0 + +refname = <h1 class="ref-title"> +/refname = </h1> + +refpurpose = <h2 class="ref-purpose"> +/refpurpose = </h2> + +refsynopsisdiv = <div class="ref-synopsis"> +/refsynopsisdiv = </div> +refsynopsisdiv! = 0 + +refsect1 = span + +refsect2 = +/refsect2 = <hr /> + +refsect3 = +/refsect3 = <br /> + +releaseinfo = <div class="release-info">( +/releaseinfo = )</div> + +simpara = +/simpara = <br /> +simpara! = 0 + +subscript = sub + +superscript = super + +table = table + +table->colsep = rules +table->rowsep = rules +table->colsep+1|rowsep+1 = all +table->colsep+1|rowsep+0 = cols +table->colsep+0|rowsep+1 = rows + +table->frame = frame +table->frame+all = border +table->frame+none = void +table->frame+sides = vsides +table->frame+top = above +table->frame+topbot = hsides + +thead = thead + +tfoot = tfoot + +tbody = tbody + +colspec = col + +tgroup = colgroup +tgroup/ = 1 +tgroup->cols = span + +row = tr + +entry = td +entry->morerows = colspan +entry->morerows+1 = 2 +entry->morerows+2 = 3 +entry->morerows+3 = 4 +entry->morerows+4 = 5 +entry->morerows+5 = 6 +entry->morerows+6 = 7 +entry->morerows+7 = 8 +entry->morerows+8 = 9 +entry->morerows+9 = 10 +entry->morerows+10 = 11 +;; add more if you need more colspans + +warning = <span class="warning"> +/warning = </span> +warning! = 0 + +;; now begins the attributes that should be tags in cdata +[$attr$id] +open = a +;close = /a +cdata! = true +quotevalues = true +separator = "=" +;separateall = true +$id = name + +;; now begins the sections that deal with <title> +[refsynopsisdiv_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h1 class="title"> +close = </h1> + +[refsect1_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h2 class="title"> +close = </h2> + +[refsect2_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h3 class="title"> +close = </h3> + +[refsect3_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h4 class="title"> +close = </h4> + +[para_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <div class="title"> +close = </div> + +[formalpara_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <div class="title"> +close = </div> + +[example_title] +;tag_attr = true +;attr_name = title +;cdata_start = true +cdata_end = true +open = </td></tr><tr><td><strong> +close = </strong> + +[table_title] +;tag_attr = true +;attr_name = true +cdata_start = true +open = <caption> +close = </caption> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/basicindex.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/basicindex.tpl new file mode 100755 index 00000000..36cf9b4f --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/basicindex.tpl @@ -0,0 +1,18 @@ +{section name=letter loop=$letters} + [ <a href="{$indexname}.html#{$letters[letter].letter}">{$letters[letter].letter}</a> ] +{/section} + +{section name=index loop=$index} + <hr /> + <a name="{$index[index].letter}"></a> + <div> + <h2>{$index[index].letter}</h2> + <dl> + {section name=contents loop=$index[index].index} + <dt><b>{$index[index].index[contents].name}</b></dt> + <dd>{$index[index].index[contents].listing}</dd> + {/section} + </dl> + </div> + <a href="{$indexname}.html#top">top</a><br> +{/section} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/blank.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/blank.tpl new file mode 100755 index 00000000..aae59975 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/blank.tpl @@ -0,0 +1,5 @@ +<div align="center"><h1>{$maintitle}</h1></div> +<b>Welcome to {$package}!</b><br /> +<br /> +This documentation was generated by <a href="{$phpdocwebsite}">phpDocumentor v{$phpdocversion}</a><br /> + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/class.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/class.tpl new file mode 100755 index 00000000..860707eb --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/class.tpl @@ -0,0 +1,231 @@ +{include file="header.tpl" eltype="class" hasel=true contents=$classcontents} + +{if $conflicts.conflict_type}<div class="warning">Conflicts with classes:<br /> + {section name=me loop=$conflicts.conflicts} + {$conflicts.conflicts[me]}<br /> + {/section} +</div> + {/if} +{* original <div class="warning">{$conflicts</div> *} + +<table width="100%" border="0"> +<tr><td valign="top"> + +<h3><a href="#class_details">{if $is_interface}Interface{else}Class{/if} Overview</a></h3> +<pre>{section name=tree loop=$class_tree.classes}{$class_tree.classes[tree]}{$class_tree.distance[tree]}{/section}</pre><br /> +<div class="description">{$sdesc|default:''}</div><br /><br /> +{if $tutorial} +<h4 class="classtutorial">{if $is_interface}Interface{else}Class{/if} Tutorial:</h4> +<ul> + <li>{$tutorial}</li> +</ul> +{/if} +{if count($tags) > 0} +<h4>Author(s):</h4> +<ul> + {section name=tag loop=$tags} + {if $tags[tag].keyword eq "author"} + <li>{$tags[tag].data}</li> + {/if} + {/section} +</ul> +{/if} + +{assign var="version" value=""} +{assign var="copyright" value=""} + +{section name=tag loop=$tags} + {if $tags[tag].keyword eq "version"} + {assign var="version" value=$tags[tag].data} + {/if} + {if $tags[tag].keyword eq "copyright"} + {assign var="copyright" value=$tags[tag].data} + {/if} +{/section} + +{if $version} +<h4>Version:</h4> +<ul> + <li>{$version}</li> +</ul> +{/if} + +{if $copyright} +<h4>Copyright:</h4> +<ul> + <li>{$copyright}</li> +</ul> +{/if} + {if $implements} + <p class="implements"> + Implements interfaces: + <ul> + {foreach item="int" from=$implements}<li>{$int}</li>{/foreach} + </ul> + </p> + {/if} + +</td> + +{if count($contents.var) > 0} +<td valign="top"> +<h3><a href="#class_vars">Variables</a></h3> +<ul> + {section name=contents loop=$contents.var} + <li>{$contents.var[contents]}</li> + {/section} +</ul> +</td> +{/if} + +{if count($contents.const) > 0} +<td valign="top"> +<h3><a href="#class_consts">Constants</a></h3> +<ul> + {section name=contents loop=$contents.const} + <li>{$contents.const[contents]}</li> + {/section} +</ul> +</td> +{/if} + +{if count($contents.method) > 0} +<td valign="top"> +<h3><a href="#class_methods">Methods</a></h3> +<ul> + {section name=contents loop=$contents.method} + <li>{$contents.method[contents]}</li> + {/section} +</ul> +</td> +{/if} + +</tr></table> +<hr /> + +<table width="100%" border="0"><tr> + +{* original {if $children != "" +<td valign="top"> +<h3>Child classes:</h3> +<div class="tags"> +{$children *} + +{if $children} +<td valign="top"> +<h3>Child classes:</h3> +<div class="tags"> +{section name=kids loop=$children} +<dl> +<dt>{$children[kids].link}</dt> + <dd>{$children[kids].sdesc}</dd> +</dl> +{/section} +</div> +</td> +{/if} + +{if $iconsts && count($iconsts) > 0} +<td valign="top"> +<h3>Inherited Constants</h3> +{section name=iconsts loop=$iconsts} +<div class="tags"> +<h4>Class: {$iconsts[iconsts].parent_class}</h4> +<dl> +{section name=iconsts2 loop=$iconsts[iconsts].iconsts} +<dt> + {$iconsts[iconsts].iconsts[iconsts2].link} +</dt> +<dd> + {$iconsts[iconsts].iconsts[iconsts2].iconsts_sdesc} +</dd> +{/section} +</dl> +</div> +{/section} +</td> +{/if} + +{if $ivars && count($ivars) > 0} +<td valign="top"> +<h3>Inherited Variables</h3> +{section name=ivars loop=$ivars} +<div class="tags"> +<h4>Class: {$ivars[ivars].parent_class}</h4> +<dl> +{section name=ivars2 loop=$ivars[ivars].ivars} +<dt> + {$ivars[ivars].ivars[ivars2].link} + {* original <a href="{$ivars[ivars].ivars[ivars2].ipath #{$ivars[ivars].ivars[ivars2].ivar_name ">{$ivars[ivars].ivars[ivars2].ivar_name </a> *} +</dt> +<dd> + {$ivars[ivars].ivars[ivars2].ivars_sdesc} +</dd> +{/section} +</dl> +</div> +{/section} +</td> +{/if} + +{if $imethods && count($imethods) > 0} +<td valign="top"> +<h3>Inherited Methods</h3> +<div class="tags"> +{section name=imethods loop=$imethods} +<h4>Class: {$imethods[imethods].parent_class}</h4> +<dl> + {section name=im2 loop=$imethods[imethods].imethods} + <dt> + {$imethods[imethods].imethods[im2].link} +{* original <a href="{$imethods[imethods].imethods[im2].ipath#{$imethods[imethods].imethods[im2].ifunction_name">{$imethods[imethods].imethods[im2].ifunction_call</a> *} + </dt> + <dd> + {$imethods[imethods].imethods[im2].sdesc} + </dd> + {/section} +</dl> +{/section} +</div> +</td> +{/if} + +</tr></table> +<hr /> + +<a name="class_details"></a> +<h3>Class Details</h3> +<div class="tags"> +[line {if $class_slink}{$class_slink}{else}{$line_number}{/if}]<br /> +{include file="docblock.tpl" type="class" sdesc=$sdesc desc=$desc} +</div><br /><br /> +<div class="top">[ <a href="#top">Top</a> ]</div><br /> + +{if $vars && count($vars) > 0} +<hr /> +<a name="class_vars"></a> +<h3>Class Variables</h3> +<div class="tags"> +{include file="var.tpl"} +</div><br /> +{/if} + +{if $methods & count($methods) > 0} +<hr /> +<a name="class_methods"></a> +<h3>Class Methods</h3> +<div class="tags"> +{include file="method.tpl"} +</div><br /> +{/if} + +{if $consts && count($consts) > 0} +<hr /> +<a name="class_consts"></a> +<h3>Class Constants</h3> +<div class="tags"> +{include file="const.tpl"} +</div><br /> +{/if} + +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/classleft.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/classleft.tpl new file mode 100755 index 00000000..b847f409 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/classleft.tpl @@ -0,0 +1,9 @@ +{foreach key=subpackage item=files from=$classleftindex} + <div class="package"> + {if $subpackage != ""}{$subpackage}<br />{/if} + {section name=files loop=$files} + {if $subpackage != ""} {/if} + {if $files[files].link != ''}<a href="{$files[files].link}">{/if}{$files[files].title}{if $files[files].link != ''}</a>{/if}<br /> + {/section} + </div> +{/foreach} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/classtrees.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/classtrees.tpl new file mode 100755 index 00000000..0c0e974a --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/classtrees.tpl @@ -0,0 +1,17 @@ +{include file="header.tpl" noleftindex=true} +<h1>{$title}</h1> +{if $interfaces} +{section name=classtrees loop=$interfaces} +<hr /> +<div class="classtree">Root interface {$interfaces[classtrees].class}</div><br /> +{$interfaces[classtrees].class_tree} +{/section} +{/if} +{if $classtrees} +{section name=classtrees loop=$classtrees} +<hr /> +<div class="classtree">Root class {$classtrees[classtrees].class}</div><br /> +{$classtrees[classtrees].class_tree} +{/section} +{/if} +{include file="footer.tpl"} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/const.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/const.tpl new file mode 100644 index 00000000..9ad36e01 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/const.tpl @@ -0,0 +1,14 @@ +{section name=consts loop=$consts} +{if $show == 'summary'} + var {$consts[consts].const_name}, {$consts[consts].sdesc}<br> +{else} + <a name="{$consts[consts].const_dest}"></a> + <p></p> + <h4>{$consts[consts].const_name} = <span class="value">{$consts[consts].const_value|replace:"\n":"<br>\n"|replace:" ":" "|replace:"\t":" "}</span></h4> + <p>[line {if $consts[consts].slink}{$consts[consts].slink}{else}{$consts[consts].line_number}{/if}]</p> + {include file="docblock.tpl" sdesc=$consts[consts].sdesc desc=$consts[consts].desc tags=$consts[consts].tags} + + <br /> + <div class="top">[ <a href="#top">Top</a> ]</div><br /> +{/if} +{/section} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/define.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/define.tpl new file mode 100755 index 00000000..3cc84da3 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/define.tpl @@ -0,0 +1,32 @@ +{if count($defines) > 0} +{section name=def loop=$defines} +{if $show == 'summary'} +define constant <a href="{$defines[def].id}">{$defines[def].define_name}</a> = {$defines[def].define_value}, {$defines[def].sdesc}<br> +{else} + <hr /> + <a name="{$defines[def].define_link}"></a> + <h3>{$defines[def].define_name} <span class="smalllinenumber">[line {if $defines[def].slink}{$defines[def].slink}{else}{$defines[def].line_number}{/if}]</span></h3> + <div class="tags"> + <table width="90%" border="0" cellspacing="0" cellpadding="1"><tr><td class="code_border"> + <table width="100%" border="0" cellspacing="0" cellpadding="2"><tr><td class="code"> + <code>{$defines[def].define_name} = {$defines[def].define_value}</code> + </td></tr></table> + </td></tr></table> + + {include file="docblock.tpl" sdesc=$defines[def].sdesc desc=$defines[def].desc tags=$defines[def].tags} + <br /> + {if $defines[def].define_conflicts.conflict_type} + <p><b>Conflicts with defines:</b> + {section name=me loop=$defines[def].define_conflicts.conflicts} + {$defines[def].define_conflicts.conflicts[me]}<br /> + {/section} + </p> + {/if} +{* original {if $defines[def].define_conflicts != "" + <b>Conflicts:</b> {$defines[def].define_conflicts<br /><br /> + {/if *} + </div> + <div class="top">[ <a href="#top">Top</a> ]</div><br /><br /> +{/if} +{/section} +{/if}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/docblock.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/docblock.tpl new file mode 100755 index 00000000..2ddfa0be --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/docblock.tpl @@ -0,0 +1,15 @@ +{if $sdesc != ''}{$sdesc|default:''}<br /><br />{/if} +{if $desc != ''}{$desc|default:''}<br />{/if} +{if count($tags) > 0} +<br /><br /> +<h4>Tags:</h4> +<div class="tags"> +<table border="0" cellspacing="0" cellpadding="0"> +{section name=tag loop=$tags} + <tr> + <td><b>{$tags[tag].keyword}:</b> </td><td>{$tags[tag].data}</td> + </tr> +{/section} +</table> +</div> +{/if}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/elementindex.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/elementindex.tpl new file mode 100755 index 00000000..adb7b136 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/elementindex.tpl @@ -0,0 +1,5 @@ +{include file="header.tpl" noleftindex=true} +<a name="top"></a> +<h1>Index of all elements</h1> +{include file="basicindex.tpl" indexname="elementindex"} +{include file="footer.tpl"} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/errors.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/errors.tpl new file mode 100755 index 00000000..0f526584 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/errors.tpl @@ -0,0 +1,21 @@ +{include file="header.tpl" noleftindex=true} +{section name=files loop=$files} +<a href="#{$files[files].file}">{$files[files].file}</a><br> +{/section} +{foreach key=file item=issues from=$all} +<a name="{$file}"></a> +<h1>{$file}</h1> +{if count($issues.warnings)} +<h2>Warnings:</h2><br> +{section name=warnings loop=$issues.warnings} +<b>{$issues.warnings[warnings].name}</b> - {$issues.warnings[warnings].listing}<br> +{/section} +{/if} +{if count($issues.errors)} +<h2>Errors:</h2><br> +{section name=errors loop=$issues.errors} +<b>{$issues.errors[errors].name}</b> - {$issues.errors[errors].listing}<br> +{/section} +{/if} +{/foreach} +{include file="footer.tpl"} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/examplesource.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/examplesource.tpl new file mode 100755 index 00000000..c9ed8b86 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/examplesource.tpl @@ -0,0 +1,6 @@ +{include file="header.tpl" title=$title} +<h1 align="center">{$title}</h1> +<div class="php"> +{$source} +</div> +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/fileleft.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/fileleft.tpl new file mode 100755 index 00000000..9af5e1cf --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/fileleft.tpl @@ -0,0 +1,10 @@ +{foreach key=subpackage item=files from=$fileleftindex} + {if $subpackage != ""}subpackage <b>{$subpackage}</b><br>{/if} + <div class="package"> + {section name=files loop=$files} + {if $files[files].link != ''}<a href="{$files[files].link}">{/if} + {$files[files].title} + {if $files[files].link != ''}</a>{/if}<br> + {/section} + </div><br /> +{/foreach} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/filesource.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/filesource.tpl new file mode 100755 index 00000000..3d93199e --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/filesource.tpl @@ -0,0 +1,8 @@ +{capture name="tutle"}File Source for {$name}{/capture} +{include file="header.tpl" title=$smarty.capture.tutle} +<h1 align="center">Source for file {$name}</h1> +<p>Documentation is available at {$docs}</p> +<div class="src-code"> +{$source} +</div> +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/footer.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/footer.tpl new file mode 100755 index 00000000..57097ba5 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/footer.tpl @@ -0,0 +1,11 @@ + <div class="credit"> + <hr /> + Documentation generated on {$date} by <a href="{$phpdocwebsite}">phpDocumentor {$phpdocversion}</a> + </div> + </td></tr></table> + </td> + </tr> +</table> + +</body> +</html>
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/function.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/function.tpl new file mode 100755 index 00000000..204c582f --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/function.tpl @@ -0,0 +1,48 @@ +{section name=func loop=$functions} +{if $show == 'summary'} +function {$functions[func].id}, {$functions[func].sdesc}<br /> +{else} + <hr /> + <a name="{$functions[func].function_dest}"></a> + <h3>{$functions[func].function_name} <span class="smalllinenumber">[line {if $functions[func].slink}{$functions[func].slink}{else}{$functions[func].line_number}{/if}]</span></h3> + <div class="function"> + <table width="90%" border="0" cellspacing="0" cellpadding="1"><tr><td class="code_border"> + <table width="100%" border="0" cellspacing="0" cellpadding="2"><tr><td class="code"> + <code>{$functions[func].function_return} {if $functions[func].ifunction_call.returnsref}&{/if}{$functions[func].function_name}( +{if count($functions[func].ifunction_call.params)} +{section name=params loop=$functions[func].ifunction_call.params} +{if $smarty.section.params.iteration != 1}, {/if}{if $functions[func].ifunction_call.params[params].hasdefault}[{/if}{$functions[func].ifunction_call.params[params].type} {$functions[func].ifunction_call.params[params].name}{if $functions[func].ifunction_call.params[params].hasdefault} = {$functions[func].ifunction_call.params[params].default|escape:"html"}]{/if} +{/section} +{/if})</code> + </td></tr></table> + </td></tr></table><br /> + + {include file="docblock.tpl" sdesc=$functions[func].sdesc desc=$functions[func].desc tags=$functions[func].tags} + <br /><br /> + {if $functions[func].function_conflicts.conflict_type} + <p><b>Conflicts with functions:</b> + {section name=me loop=$functions[func].function_conflicts.conflicts} + {$functions[func].function_conflicts.conflicts[me]}<br /> + {/section} + </p> + {/if} +{* original {if $functions[func].function_conflicts != "" + <b>Conflicts:</b> {$functions[func].function_conflicts<br /><br /> + {/if *} + + {if count($functions[func].params) > 0} + <h4>Parameters</h4> + <table border="0" cellspacing="0" cellpadding="0"> + {section name=params loop=$functions[func].params} + <tr> + <td class="type">{$functions[func].params[params].datatype} </td> + <td><b>{$functions[func].params[params].var}</b> </td> + <td>{$functions[func].params[params].data}</td> + </tr> + {/section} + </table> + {/if} + <div class="top">[ <a href="#top">Top</a> ]</div><br /><br /> + </div> +{/if} +{/section} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/global.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/global.tpl new file mode 100755 index 00000000..51ba0855 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/global.tpl @@ -0,0 +1,40 @@ +{if count($globals) > 0} +{section name=glob loop=$globals} +{if $show == 'summary'} +global variable <a href="{$globals[glob].id}">{$globals[glob].global_name}</a> = {$globals[glob].global_value}, {$globals[glob].sdesc}<br> +{else} + <hr /> + <a name="{$globals[glob].global_link}"></a> + <h4><i>{$globals[glob].global_type}</i> {$globals[glob].global_name} <span class="smalllinenumber">[line {if $globals[glob].slink}{$globals[glob].slink}{else}{$globals[glob].line_number}{/if}]</span></h4> + <div class="tags"> + {if $globals[glob].sdesc != ""} + {include file="docblock.tpl" sdesc=$globals[glob].sdesc desc=$globals[glob].desc tags=$globals[glob].tags} + {/if} + + <table border="0" cellspacing="0" cellpadding="0"> + <tr> + <td><b>Default value:</b> </td> + <td>{$globals[glob].global_value|replace:" ":" "|replace:"\n":"<br />\n"|replace:"\t":" "}</td> + </tr> + {if $globals[glob].global_conflicts.conflict_type} + <tr> + <td><b>Conflicts with globals:</b> </td> + <td> + {section name=me loop=$globals[glob].global_conflicts.conflicts} + {$globals[glob].global_conflicts.conflicts[me]}<br /> + {/section} + </td> + </tr> + {/if} +{* original {if $globals[glob].global_conflicts != "" + <tr> + <td><b>Conflicts:</b> </td> + <td>{$globals[glob].global_conflicts</td> + </tr> + {/if *} + </table> + </div><br /><br /> + <div class="top">[ <a href="#top">Top</a> ]</div><br /><br /> +{/if} +{/section} +{/if}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/header.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/header.tpl new file mode 100755 index 00000000..7d3e8f7d --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/header.tpl @@ -0,0 +1,97 @@ +<html> +<head> +<title>{$title}</title> +<link rel="stylesheet" type="text/css" href="{$subdir}media/style.css"> +</head> +<body> + +<table border="0" cellspacing="0" cellpadding="0" height="48" width="100%"> + <tr> + <td class="header_top">{$package}</td> + </tr> + <tr><td class="header_line"><img src="{$subdir}media/empty.png" width="1" height="1" border="0" alt="" /></td></tr> + <tr> + <td class="header_menu"> + {assign var="packagehaselements" value=false} + {foreach from=$packageindex item=thispackage} + {if in_array($package, $thispackage)} + {assign var="packagehaselements" value=true} + {/if} + {/foreach} + {if $packagehaselements} + [ <a href="{$subdir}classtrees_{$package}.html" class="menu">class tree: {$package}</a> ] + [ <a href="{$subdir}elementindex_{$package}.html" class="menu">index: {$package}</a> ] + {/if} + [ <a href="{$subdir}elementindex.html" class="menu">all elements</a> ] + </td> + </tr> + <tr><td class="header_line"><img src="{$subdir}media/empty.png" width="1" height="1" border="0" alt="" /></td></tr> +</table> + +<table width="100%" border="0" cellpadding="0" cellspacing="0"> + <tr valign="top"> + <td width="200" class="menu"> +{if count($ric) >= 1} + <div id="ric"> + {section name=ric loop=$ric} + <p><a href="{$subdir}{$ric[ric].file}">{$ric[ric].name}</a></p> + {/section} + </div> +{/if} +{if $hastodos} + <div id="todolist"> + <p><a href="{$subdir}{$todolink}">Todo List</a></p> + </div> +{/if} + <b>Packages:</b><br /> + {section name=packagelist loop=$packageindex} + <a href="{$subdir}{$packageindex[packagelist].link}">{$packageindex[packagelist].title}</a><br /> + {/section} + <br /><br /> +{if $tutorials} + <b>Tutorials/Manuals:</b><br /> + {if $tutorials.pkg} + <strong>Package-level:</strong> + {section name=ext loop=$tutorials.pkg} + {$tutorials.pkg[ext]} + {/section} + {/if} + {if $tutorials.cls} + <strong>Class-level:</strong> + {section name=ext loop=$tutorials.cls} + {$tutorials.cls[ext]} + {/section} + {/if} + {if $tutorials.proc} + <strong>Procedural-level:</strong> + {section name=ext loop=$tutorials.proc} + {$tutorials.proc[ext]} + {/section} + {/if} +{/if} + {if !$noleftindex}{assign var="noleftindex" value=false}{/if} + {if !$noleftindex} + {if $compiledfileindex} + <b>Files:</b><br /> + {eval var=$compiledfileindex} + {/if} + + {if $compiledinterfaceindex} + <b>Interfaces:</b><br /> + {eval var=$compiledinterfaceindex} + {/if} + + {if $compiledclassindex} + <b>Classes:</b><br /> + {eval var=$compiledclassindex} + {/if} + {/if} + </td> + <td> + <table cellpadding="10" cellspacing="0" width="100%" border="0"><tr><td valign="top"> + +{if !$hasel}{assign var="hasel" value=false}{/if} +{if $hasel} +<h1>{$eltype|capitalize}: {$class_name}</h1> +Source Location: {$source_location}<br /><br /> +{/if}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/include.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/include.tpl new file mode 100755 index 00000000..68b80081 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/include.tpl @@ -0,0 +1,9 @@ +{if count($includes) > 0} +<h4>Includes:</h4> +<div class="tags"> +{section name=includes loop=$includes} +{$includes[includes].include_name}({$includes[includes].include_value}) [line {if $includes[includes].slink}{$includes[includes].slink}{else}{$includes[includes].line_number}{/if}]<br /> +{include file="docblock.tpl" sdesc=$includes[includes].sdesc desc=$includes[includes].desc tags=$includes[includes].tags} +{/section} +</div> +{/if}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/index.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/index.tpl new file mode 100755 index 00000000..a493f70e --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/index.tpl @@ -0,0 +1,7 @@ +{include file="header.tpl"} +{if $contents} +{$contents} +{else} +{include file="blank.tpl"} +{/if} +{include file="footer.tpl"} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/media/background.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/media/background.png Binary files differnew file mode 100755 index 00000000..d6f36f60 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/media/background.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/media/empty.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/media/empty.png Binary files differnew file mode 100755 index 00000000..a9f29bb1 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/media/empty.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/media/style.css b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/media/style.css new file mode 100755 index 00000000..bc65d896 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/media/style.css @@ -0,0 +1,195 @@ +.php { + padding: 1em; +} +.php-src { font-family: 'Courier New', Courier, monospace; font-weight: normal; } + +body +{ + color: #000000; + background-color: #ffffff; + background-image: url("background.png"); + background-repeat: repeat-y; + font-family: tahoma, verdana, arial, sans-serif; + font-size: 10pt; + margin: 0; + padding: 0; +} + +a +{ + color: #000099; + background-color: transparent; + text-decoration: none; +} + +a:hover +{ + text-decoration: underline; +} + +a.menu +{ + color: #ffffff; + background-color: transparent; +} + +td +{ + font-size: 10pt; +} + +td.header_top +{ + color: #ffffff; + background-color: #9999cc; + font-size: 16pt; + font-weight: bold; + text-align: right; + padding: 10px; +} + +td.header_line +{ + color: #ffffff; + background-color: #333366; +} + +td.header_menu +{ + color: #ffffff; + background-color: #666699; + font-size: 8pt; + text-align: right; + padding: 2px; + padding-right: 5px; +} + +td.menu +{ + padding: 2px; + padding-left: 5px; +} + +td.code_border +{ + color: #000000; + background-color: #c0c0c0; +} + +td.code +{ + color: #000000; + background-color: #f0f0f0; +} + +td.type +{ + font-style: italic; +} + +div.credit +{ + font-size: 8pt; + text-align: center; +} + +div.package +{ + padding-left: 5px; +} + +div.tags +{ + padding-left: 15px; +} + +div.function +{ + padding-left: 15px; +} + +div.top +{ + font-size: 8pt; +} + +div.warning +{ + color: #ff0000; + background-color: transparent; +} + +div.description +{ + padding-left: 15px; +} + +hr +{ + height: 1px; + border-style: solid; + border-color: #c0c0c0; + margin-top: 10px; + margin-bottom: 10px; +} + +span.smalllinenumber +{ + font-size: 8pt; +} + +ul { + margin-left: 0px; + padding-left: 8px; +} +/* Syntax highlighting */ + +.src-code { background-color: #f5f5f5; border: 1px solid #ccc9a4; padding: 0 0 0 1em; margin : 0px; + font-family: 'Courier New', Courier, monospace; font-weight: normal; } +.src-line { font-family: 'Courier New', Courier, monospace; font-weight: normal; } + +.src-comm { color: green; } +.src-id { } +.src-inc { color: #0000FF; } +.src-key { color: #0000FF; } +.src-num { color: #CC0000; } +.src-str { color: #66cccc; } +.src-sym { font-weight: bold; } +.src-var { } + +.src-php { font-weight: bold; } + +.src-doc { color: #009999 } +.src-doc-close-template { color: #0000FF } +.src-doc-coretag { color: #0099FF; font-weight: bold } +.src-doc-inlinetag { color: #0099FF } +.src-doc-internal { color: #6699cc } +.src-doc-tag { color: #0080CC } +.src-doc-template { color: #0000FF } +.src-doc-type { font-style: italic } +.src-doc-var { font-style: italic } + +.tute-tag { color: #009999 } +.tute-attribute-name { color: #0000FF } +.tute-attribute-value { color: #0099FF } +.tute-entity { font-weight: bold; } +.tute-comment { font-style: italic } +.tute-inline-tag { color: #636311; font-weight: bold } + +/* tutorial */ + +.authors { } +.author { font-style: italic; font-weight: bold } +.author-blurb { margin: .5em 0em .5em 2em; font-size: 85%; font-weight: normal; font-style: normal } +.example { border: 1px dashed #999999; background-color: #EEEEEE; padding: .5em; } +.listing { border: 1px dashed #999999; background-color: #EEEEEE; padding: .5em; white-space: nowrap; } +.release-info { font-size: 85%; font-style: italic; margin: 1em 0em } +.ref-title-box { } +.ref-title { } +.ref-purpose { font-style: italic; color: #666666 } +.ref-synopsis { } +.title { font-weight: bold; margin: 1em 0em 0em 0em; padding: .25em; border: 2px solid #999999; background-color: #9999CC } +.cmd-synopsis { margin: 1em 0em } +.cmd-title { font-weight: bold } +.toc { margin-left: 2em; padding-left: 0em } + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/method.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/method.tpl new file mode 100755 index 00000000..bcc4dcee --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/method.tpl @@ -0,0 +1,145 @@ +{section name=methods loop=$methods} +{if $methods[methods].static} +{if $show == 'summary'} +static method {$methods[methods].function_call}, {$methods[methods].sdesc}<br /> +{else} + <hr /> + <a name="{$methods[methods].method_dest}"></a> + <h3>static method {$methods[methods].function_name} <span class="smalllinenumber">[line {if $methods[methods].slink}{$methods[methods].slink}{else}{$methods[methods].line_number}{/if}]</span></h3> + <div class="function"> + <table width="90%" border="0" cellspacing="0" cellpadding="1"><tr><td class="code_border"> + <table width="100%" border="0" cellspacing="0" cellpadding="2"><tr><td class="code"> + <code>static {$methods[methods].function_return} {if $methods[methods].ifunction_call.returnsref}&{/if}{$methods[methods].function_name}( +{if count($methods[methods].ifunction_call.params)} +{section name=params loop=$methods[methods].ifunction_call.params} +{if $smarty.section.params.iteration != 1}, {/if} +{if $methods[methods].ifunction_call.params[params].hasdefault}[{/if}{$methods[methods].ifunction_call.params[params].type} +{$methods[methods].ifunction_call.params[params].name}{if $methods[methods].ifunction_call.params[params].hasdefault} = {$methods[methods].ifunction_call.params[params].default}]{/if} +{/section} +{/if})</code> + </td></tr></table> + </td></tr></table><br /> + + {include file="docblock.tpl" sdesc=$methods[methods].sdesc desc=$methods[methods].desc tags=$methods[methods].tags}<br /><br /> + +{if $methods[methods].descmethod} + <p>Overridden in child classes as:<br /> + {section name=dm loop=$methods[methods].descmethod} + <dl> + <dt>{$methods[methods].descmethod[dm].link}</dt> + <dd>{$methods[methods].descmethod[dm].sdesc}</dd> + </dl> + {/section}</p> +{/if} + {if $methods[methods].method_implements} + <hr class="separator" /> + <div class="notes">Implementation of:</div> + {section name=imp loop=$methods[methods].method_implements} + <dl> + <dt>{$methods[methods].method_implements[imp].link}</dt> + {if $methods[methods].method_implements[imp].sdesc} + <dd>{$methods[methods].method_implements[imp].sdesc}</dd> + {/if} + </dl> + {/section} + {/if} +{* original {if $methods[methods].descmethod != "" + {$methods[methods].descmethod<br /><br /> + {/if *} +{if $methods[methods].method_overrides}Overrides {$methods[methods].method_overrides.link} ({$methods[methods].method_overrides.sdesc|default:"parent method not documented"})<br /><br />{/if} +{* original {if $methods[methods].method_overrides != "" + {$methods[methods].method_overrides<br /><br /> + {/if *} + + {if count($methods[methods].params) > 0} + <h4>Parameters:</h4> + <div class="tags"> + <table border="0" cellspacing="0" cellpadding="0"> + {section name=params loop=$methods[methods].params} + <tr> + <td class="type">{$methods[methods].params[params].datatype} </td> + <td><b>{$methods[methods].params[params].var}</b> </td> + <td>{$methods[methods].params[params].data}</td> + </tr> + {/section} + </table> + </div><br /> + {/if} + <div class="top">[ <a href="#top">Top</a> ]</div> + </div> +{/if} +{/if} +{/section} + +{section name=methods loop=$methods} +{if !$methods[methods].static} +{if $show == 'summary'} +method {$methods[methods].function_call}, {$methods[methods].sdesc}<br /> +{else} + <hr /> + <a name="{$methods[methods].method_dest}"></a> + <h3>{if $methods[methods].ifunction_call.constructor}constructor {elseif $methods[methods].ifunction_call.destructor}destructor {else}method {/if}{$methods[methods].function_name} <span class="smalllinenumber">[line {if $methods[methods].slink}{$methods[methods].slink}{else}{$methods[methods].line_number}{/if}]</span></h3> + <div class="function"> + <table width="90%" border="0" cellspacing="0" cellpadding="1"><tr><td class="code_border"> + <table width="100%" border="0" cellspacing="0" cellpadding="2"><tr><td class="code"> + <code>{$methods[methods].function_return} {if $methods[methods].ifunction_call.returnsref}&{/if}{$methods[methods].function_name}( +{if count($methods[methods].ifunction_call.params)} +{section name=params loop=$methods[methods].ifunction_call.params} +{if $smarty.section.params.iteration != 1}, {/if} +{if $methods[methods].ifunction_call.params[params].hasdefault}[{/if}{$methods[methods].ifunction_call.params[params].type} +{$methods[methods].ifunction_call.params[params].name}{if $methods[methods].ifunction_call.params[params].hasdefault} = {$methods[methods].ifunction_call.params[params].default}]{/if} +{/section} +{/if})</code> + </td></tr></table> + </td></tr></table><br /> + + {include file="docblock.tpl" sdesc=$methods[methods].sdesc desc=$methods[methods].desc tags=$methods[methods].tags}<br /><br /> + +{if $methods[methods].descmethod} + <p>Overridden in child classes as:<br /> + {section name=dm loop=$methods[methods].descmethod} + <dl> + <dt>{$methods[methods].descmethod[dm].link}</dt> + <dd>{$methods[methods].descmethod[dm].sdesc}</dd> + </dl> + {/section}</p> +{/if} + {if $methods[methods].method_implements} + <hr class="separator" /> + <div class="notes">Implementation of:</div> + {section name=imp loop=$methods[methods].method_implements} + <dl> + <dt>{$methods[methods].method_implements[imp].link}</dt> + {if $methods[methods].method_implements[imp].sdesc} + <dd>{$methods[methods].method_implements[imp].sdesc}</dd> + {/if} + </dl> + {/section} + {/if} +{* original {if $methods[methods].descmethod != "" + {$methods[methods].descmethod<br /><br /> + {/if *} +{if $methods[methods].method_overrides}Overrides {$methods[methods].method_overrides.link} ({$methods[methods].method_overrides.sdesc|default:"parent method not documented"})<br /><br />{/if} +{* original {if $methods[methods].method_overrides != "" + {$methods[methods].method_overrides<br /><br /> + {/if *} + + {if count($methods[methods].params) > 0} + <h4>Parameters:</h4> + <div class="tags"> + <table border="0" cellspacing="0" cellpadding="0"> + {section name=params loop=$methods[methods].params} + <tr> + <td class="type">{$methods[methods].params[params].datatype} </td> + <td><b>{$methods[methods].params[params].var}</b> </td> + <td>{$methods[methods].params[params].data}</td> + </tr> + {/section} + </table> + </div><br /> + {/if} + <div class="top">[ <a href="#top">Top</a> ]</div> + </div> +{/if} +{/if} +{/section} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/packages.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/packages.tpl new file mode 100755 index 00000000..0967e6e7 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/packages.tpl @@ -0,0 +1,3 @@ +{section name=packages loop=$packages} +<a href="{$packages[packages].link}">{$packages[packages].title}</a> +{/section}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/page.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/page.tpl new file mode 100755 index 00000000..db2cd607 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/page.tpl @@ -0,0 +1,31 @@ +{include file="header.tpl" eltype="Procedural file" class_name=$name hasel=true contents=$pagecontents} + +<br> +<br> + +{if $classes} +<div class="contents"> +{if $tutorial} +<span class="maintutorial">Main Tutorial: {$tutorial}</span> +{/if} +<h2>Classes:</h2> +{section name=classes loop=$classes} +<dt>{$classes[classes].link}</dt> + <dd>{$classes[classes].sdesc}</dd> +{/section} +</div><br /><br /> +{/if} + +<h2>Page Details:</h2> +{include file="docblock.tpl" type="page"} +<br /><br /> +{include file="include.tpl"} +<br /><br /> +{include file="global.tpl"} +<br /><br /> +{include file="define.tpl"} +<br /> +{include file="function.tpl"} + +{include file="footer.tpl"} + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/pkgelementindex.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/pkgelementindex.tpl new file mode 100755 index 00000000..0dabfdb7 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/pkgelementindex.tpl @@ -0,0 +1,5 @@ +{include file="header.tpl"} +<a name="top"></a> +<h1>Element index for package {$package}</h1> +{include file="basicindex.tpl" indexname=elementindex_$package} +{include file="footer.tpl"} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/ric.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/ric.tpl new file mode 100755 index 00000000..eff734c1 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/ric.tpl @@ -0,0 +1,6 @@ +{include file="header.tpl"} +<h1 align="center">{$name}</h1> +<pre> +{$contents|htmlentities} +</pre> +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/todolist.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/todolist.tpl new file mode 100755 index 00000000..f929ccdb --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/todolist.tpl @@ -0,0 +1,14 @@ +{include file="header.tpl" title="Todo List"} +<div align="center"><h1>Todo List</h1></div> +{foreach from=$todos key=todopackage item=todo} +<h2>{$todopackage}</h2> +{section name=todo loop=$todo} +<h3>{$todo[todo].link}</h3> +<ul> +{section name=t loop=$todo[todo].todos} + <li>{$todo[todo].todos[t]}</li> +{/section} +</ul> +{/section} +{/foreach} +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/tutorial.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/tutorial.tpl new file mode 100755 index 00000000..a943522c --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/tutorial.tpl @@ -0,0 +1,32 @@ +{include file="header.tpl" title=$title} +{if $nav} +<table width="100%" border="0" cellpadding="0" cellspacing="0"> +<tr> +<td width="10%" align="left" valign="bottom">{if $prev}<a href= +"{$prev}">{/if}Prev{if $prev}</a>{/if}</td> +<td width="80%" align="center" valign="bottom"></td> +<td width="10%" align="right" valign="bottom">{if $next}<a href= +"{$next}">{/if}Next{if $next}</a>{/if}</td> +</tr> +</table> +{/if} +{$contents} +{if $nav} +<table width="100%" border="0" cellpadding="0" cellspacing="0"> +<tr> +<td width="33%" align="left" valign="top">{if $prev}<a href="{$prev}">{/if} +Prev{if $prev}</a>{/if}</td> +<td width="34%" align="center" valign="top">{if $up}<a href= +"{$up}">Up</a>{else} {/if}</td> +<td width="33%" align="right" valign="top">{if $next}<a href= +"{$next}">{/if}Next{if $next}</a>{/if}</td> +</tr> + +<tr> +<td width="33%" align="left" valign="top">{if $prevtitle}{$prevtitle}{/if}</td> +<td width="34%" align="center" valign="top">{if $uptitle}{$uptitle}{/if}</td> +<td width="33%" align="right" valign="top">{if $nexttitle}{$nexttitle}{/if}</td> +</tr> +</table> +{/if} +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/tutorial_toc.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/tutorial_toc.tpl new file mode 100755 index 00000000..3d22d403 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/tutorial_toc.tpl @@ -0,0 +1,29 @@ +{if count($toc)} +<h1 align="center">Table of Contents</h1> +<ul> +{section name=toc loop=$toc} +{if $toc[toc].tagname == 'refsect1'} +{assign var="context" value="refsect1"} +{$toc[toc].link}<br /> +{/if} +{if $toc[toc].tagname == 'refsect2'} +{assign var="context" value="refsect2"} + {$toc[toc].link}<br /> +{/if} +{if $toc[toc].tagname == 'refsect3'} +{assign var="context" value="refsect3"} + {$toc[toc].link}<br /> +{/if} +{if $toc[toc].tagname == 'table'} +{if $context == 'refsect2'} {/if} +{if $context == 'refsect3'} {/if} +Table: {$toc[toc].link} +{/if} +{if $toc[toc].tagname == 'example'} +{if $context == 'refsect2'} {/if} +{if $context == 'refsect3'} {/if} +Table: {$toc[toc].link} +{/if} +{/section} +</ul> +{/if}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/tutorial_tree.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/tutorial_tree.tpl new file mode 100755 index 00000000..dd2e5811 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/tutorial_tree.tpl @@ -0,0 +1,5 @@ +<ul> + <li type="square"><a href="{$main.link}">{$main.title|strip_tags}</a> +{if $kids}{$kids}</li>{/if} +</ul> + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/var.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/var.tpl new file mode 100755 index 00000000..e36c61fd --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/var.tpl @@ -0,0 +1,60 @@ +{section name=vars loop=$vars} +{if $vars[vars].static} +{if $show == 'summary'} + static var {$vars[vars].var_name}, {$vars[vars].sdesc}<br> +{else} + <a name="{$vars[vars].var_dest}"></a> + <p></p> + <h4>static {$vars[vars].var_name} = <span class="value">{$vars[vars].var_default|replace:"\n":"<br>\n"|replace:" ":" "|replace:"\t":" "}</span></h4> + <p>[line {if $vars[vars].slink}{$vars[vars].slink}{else}{$vars[vars].line_number}{/if}]</p> + {include file="docblock.tpl" sdesc=$vars[vars].sdesc desc=$vars[vars].desc tags=$vars[vars].tags} + + <br /> + <div class="tags"> + <table border="0" cellspacing="0" cellpadding="0"> + <tr> + <td><b>Type:</b> </td> + <td>{$vars[vars].var_type}</td> + </tr> + {if $vars[vars].var_overrides != ""} + <tr> + <td><b>Overrides:</b> </td> + <td>{$vars[vars].var_overrides}</td> + </tr> + {/if} + </table> + </div><br /><br /> + <div class="top">[ <a href="#top">Top</a> ]</div><br /> +{/if} +{/if} +{/section} +{section name=vars loop=$vars} +{if !$vars[vars].static} +{if $show == 'summary'} + var {$vars[vars].var_name}, {$vars[vars].sdesc}<br> +{else} + <a name="{$vars[vars].var_dest}"></a> + <p></p> + <h4>{$vars[vars].var_name} = <span class="value">{$vars[vars].var_default|replace:"\n":"<br>\n"|replace:" ":" "|replace:"\t":" "}</span></h4> + <p>[line {if $vars[vars].slink}{$vars[vars].slink}{else}{$vars[vars].line_number}{/if}]</p> + {include file="docblock.tpl" sdesc=$vars[vars].sdesc desc=$vars[vars].desc tags=$vars[vars].tags} + + <br /> + <div class="tags"> + <table border="0" cellspacing="0" cellpadding="0"> + <tr> + <td><b>Type:</b> </td> + <td>{$vars[vars].var_type}</td> + </tr> + {if $vars[vars].var_overrides != ""} + <tr> + <td><b>Overrides:</b> </td> + <td>{$vars[vars].var_overrides}</td> + </tr> + {/if} + </table> + </div><br /><br /> + <div class="top">[ <a href="#top">Top</a> ]</div><br /> +{/if} +{/if} +{/section} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/options.ini b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/options.ini new file mode 100644 index 00000000..4566db60 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/options.ini @@ -0,0 +1,577 @@ +preservedocbooktags = false
+
+;; used to highlight the {@source} inline tag, @filesource tag, and @example tag
+[highlightSourceTokens]
+;; format:
+;; T_CONSTANTNAME = open
+;; /T_CONSTANTNAME = close
+
+T_INCLUDE = <span class="src-inc">
+/T_INCLUDE = </span>
+T_INCLUDE_ONCE = <span class="src-inc">
+/T_INCLUDE_ONCE = </span>
+T_REQUIRE_ONCE = <span class="src-inc">
+/T_REQUIRE_ONCE = </span>
+T_REQUIRE_ONCE = <span class="src-inc">
+/T_REQUIRE_ONCE = </span>
+
+T_CONSTANT_ENCAPSED_STRING = <span class="src-str">
+/T_CONSTANT_ENCAPSED_STRING = </span>
+T_STRING_VARNAME = <span class="src-str">
+/T_STRING_VARNAME = </span>
+
+T_STRING = <span class="src-id">
+/T_STRING = </span>
+
+T_DNUMBER = <span class="src-num">
+/T_DNUMBER = </span>
+T_LNUMBER = <span class="src-num">
+/T_LNUMBER = </span>
+
+T_VARIABLE = <span class="src-var">
+/T_VARIABLE = </span>
+
+T_COMMENT = <span class="src-comm">
+/T_COMMENT = </span>
+T_ML_COMMENT = <span class="src-comm">
+/T_ML_COMMENT = </span>
+
+T_OBJECT_OPERATOR = <span class="src-sym">
+/T_OBJECT_OPERATOR = </span>
+
+T_ABSTRACT = <span class="src-key">
+/T_ABSTRACT = </span>
+T_CLONE = <span class="src-key">
+/T_CLONE = </span>
+T_HALT_COMPILER = <span class="src-key">
+/T_HALT_COMPILER = </span>
+T_ARRAY = <span class="src-key">
+/T_ARRAY = </span>
+T_AS = <span class="src-key">
+/T_AS = </span>
+T_BREAK = <span class="src-key">
+/T_BREAK = </span>
+T_CLASS = <span class="src-key">
+/T_CLASS = </span>
+T_CASE = <span class="src-key">
+/T_CASE = </span>
+T_CONST = <span class="src-key">
+/T_CONST = </span>
+T_CONTINUE = <span class="src-key">
+/T_CONTINUE = </span>
+T_DECLARE = <span class="src-key">
+/T_DECLARE = </span>
+T_DEFAULT = <span class="src-key">
+/T_DEFAULT = </span>
+T_ELSE = <span class="src-key">
+/T_ELSE = </span>
+T_ELSEIF = <span class="src-key">
+/T_ELSEIF = </span>
+T_EMPTY = <span class="src-key">
+/T_EMPTY = </span>
+T_ENDDECLARE = <span class="src-key">
+/T_ENDDECLARE = </span>
+T_ENDFOR = <span class="src-key">
+/T_ENDFOR = </span>
+T_ENDSWITCH = <span class="src-key">
+/T_ENDSWITCH = </span>
+T_ENDFOREACH = <span class="src-key">
+/T_ENDFOREACH = </span>
+T_ENDIF = <span class="src-key">
+/T_ENDIF = </span>
+T_ENDWHILE = <span class="src-key">
+/T_ENDWHILE = </span>
+T_EXIT = <span class="src-key">
+/T_EXIT = </span>
+T_EXTENDS = <span class="src-key">
+/T_EXTENDS = </span>
+T_FINAL = <span class="src-key">
+/T_FINAL = </span>
+T_FOR = <span class="src-key">
+/T_FOR = </span>
+T_FOREACH = <span class="src-key">
+/T_FOREACH = </span>
+T_FUNCTION = <span class="src-key">
+/T_FUNCTION = </span>
+T_GLOBAL = <span class="src-key">
+/T_GLOBAL = </span>
+T_IF = <span class="src-key">
+/T_IF = </span>
+T_IMPLEMENTS = <span class="src-key">
+/T_IMPLEMENTS = </span>
+T_INTERFACE = <span class="src-key">
+/T_INTERFACE = </span>
+T_LOGICAL_AND = <span class="src-key">
+/T_LOGICAL_AND = </span>
+T_LOGICAL_OR = <span class="src-key">
+/T_LOGICAL_OR = </span>
+T_LOGICAL_XOR = <span class="src-key">
+/T_LOGICAL_XOR = </span>
+T_NEW = <span class="src-key">
+/T_NEW = </span>
+T_PRIVATE = <span class="src-key">
+/T_PRIVATE = </span>
+T_PROTECTED = <span class="src-key">
+/T_PROTECTED = </span>
+T_PUBLIC = <span class="src-key">
+/T_PUBLIC = </span>
+T_RETURN = <span class="src-key">
+/T_RETURN = </span>
+T_STATIC = <span class="src-key">
+/T_STATIC = </span>
+T_SWITCH = <span class="src-key">
+/T_SWITCH = </span>
+T_VAR = <span class="src-key">
+/T_VAR = </span>
+T_WHILE = <span class="src-key">
+/T_WHILE = </span>
+
+T_DOUBLE_COLON = <span class="src-sym">
+/T_DOUBLE_COLON = </span>
+
+T_OPEN_TAG = <span class="src-php">
+/T_OPEN_TAG = </span>
+T_OPEN_TAG_WITH_ECHO = <span class="src-php">
+/T_OPEN_TAG_WITH_ECHO = </span>
+T_CLOSE_TAG = <span class="src-php">
+/T_CLOSE_TAG = </span>
+
+
+[highlightSource]
+;; this is for highlighting things that aren't tokens like "&"
+;; format:
+;; word = open
+;; /word = close
+@ = <span class="src-sym">
+/@ = </span>
+& = <span class="src-sym">
+/& = </span>
+[ = <span class="src-sym">
+/[ = </span>
+] = <span class="src-sym">
+/] = </span>
+! = <span class="src-sym">
+/! = </span>
+";" = <span class="src-sym">
+/; = </span>
+( = <span class="src-sym">
+/( = </span>
+) = <span class="src-sym">
+/) = </span>
+, = <span class="src-sym">
+/, = </span>
+{ = <span class="src-sym">
+/{ = </span>
+} = <span class="src-sym">
+/} = </span>
+""" = <span class="src-str">
+/" = </span>
+
+[highlightDocBlockSourceTokens]
+;; this is for docblock tokens, using by phpDocumentor_HighlightParser
+;; tagphptype is for "string" in @param string description, for example
+docblock = <span class="src-doc">
+/docblock = </span>
+tagphptype = <span class="src-doc-type">
+/tagphptype = </span>
+tagvarname = <span class="src-doc-var">
+/tagvarname = </span>
+coretag = <span class="src-doc-coretag">
+/coretag = </span>
+tag = <span class="src-doc-tag">
+/tag = </span>
+inlinetag = <span class="src-doc-inlinetag">
+/inlinetag = </span>
+internal = <span class="src-doc-internal">
+/internal = </span>
+closetemplate = <span class="src-doc-close-template">
+/closetemplate = </span>
+docblocktemplate = <span class="src-doc-template">
+/docblocktemplate = </span>
+
+[highlightTutorialSourceTokens]
+;; this is for XML DocBook-based tutorials, highlighted by phpDocumentor_TutorialHighlightParser
+;; <tag>
+opentag = <span class="tute-tag">
+/opentag = </span>
+;; </tag>
+closetag = <span class="tute-tag">
+/closetag = </span>
+;; <tag attribute="value">
+attribute = <span class="tute-attribute-name">
+/attribute = </span>
+;; <tag attribute="value">
+attributevalue = <span class="tute-attribute-value">
+/attributevalue = </span>
+;; &entity;
+entity = <span class="tute-entity">
+/entity = </span>
+;; <!-- comment -->
+comment = <span class="tute-comment">
+/comment = </span>
+;; {@inline tag}
+itag = <span class="tute-inline-tag">
+/itag = </span>
+
+;; used for translation of html in DocBlocks
+[desctranslate]
+ul = <ul>
+/ul = </ul>
+ol = <ol>
+/ol = </ol>
+li = <li>
+/li = </li>
+code = <div class="listing"><pre>
+/code = </pre></div>
+var = <var>
+/var = </var>
+samp = <samp>
+/samp = </samp>
+kbd = <kbd>
+/kbd = </kbd>
+pre = <pre>
+/pre = </pre>
+p = <p>
+/p = </p>
+b = <strong>
+/b = </strong>
+i = <em>
+/i = </em>
+br = <br />
+
+[ppage]
+;; this is the DocBook package page translation section. All DocBook tags
+;; that have a corresponding html tag must be listed here. Entities should
+;; also be listed here
+;;
+;; examples:
+;; 1)
+;; tagname = newtagname
+;;
+;; This is the simplest case, where all attributes will be added into the
+;; starting tag and the ending tag will be html/xml style </tranlatedtagname>
+;; <tagname></tagname> becomes <newtagname></newtagname> and
+;; <tagname attr="value"></tagname> becomes
+;; <newtagname attr="value"></newtagname>
+;;
+;; 2)
+;; tagname = newtagname
+;; tagname->attr = newattrname
+;;
+;; in this case, everything will be like the first case, except tags like:
+;; <tagname attr="value"></tagname> will become
+;; <newtagname newattrname="value"></newtagname>
+;;
+;; 3)
+;; tagname = newtagname
+;; tagname->attr = newattrname
+;; tagname->attr+value = newvalue
+;;
+;; in this case, the value is also translated to another. This can be useful
+;; for instances such as focus="middle" changing to align="center" or something
+;; of that nature.
+;; <tagname attr="value"></tagname> will become
+;; <newtagname newattrname="newvalue"></newtagname>
+;;
+;; 4)
+;; tagname = newtagname
+;; tagname->attr1 = newattrname
+;; tagname->attr2 = newattrname
+;; tagname->attr1+value|attr2+value = newvalue
+;;
+;; in this case, two attributes combine to make one new attribute, and the combined
+;; value is translated into a new value
+;; <tagname attr1="value1" attr2="value2"></tagname> will become
+;; <newtagname newattrname="newvalue"></newtagname>
+;;
+;; 5)
+;; tagname = newtagname
+;; tagname!attr = dummy
+;;
+;; here, the attribute will be ignored. dummy is not used and may be any value
+;; <tagname attr="value"></tagname> will become
+;; <newtagname></newtagname>
+;;
+;; 6)
+;; tagname = newtagname
+;; tagname! = dummy
+;;
+;; here, all attributes will be ignored. dummy is not used and may be any value
+;; <tagname attr1="value" attr2="foo"></tagname> will become
+;; <newtagname></newtagname>
+;;
+;; 7)
+;; tagname = newtagname
+;; tagname/ = 1
+;;
+;; here, the tag will be translated as a single tag with no closing tag, and all
+;; attributes
+;; <tagname attr="val">{text text}</tagname> will become
+;; <newtagname attr="val" />
+;;
+;; 8)
+;; tagname = <starttaginfo />
+;; /tagname = closetagtext
+;;
+;; in this case, the text <starttaginfo> will be inserted exactly as entered for
+;; <tagname> and closetagtext for </tagname>
+;; <tagname attr="val"></tagname> will become
+;; <starttaginfo />closetagtext
+;;
+;; 9)
+;; $attr$my_attribute = newattrname
+;;
+;; tagname = newtagname
+;;
+;; in this case, all occurences of my_attribute in any tag will be changed to
+;; newattrname. This is useful for changing things like role="php" to
+;; class="php," for example. Note that the text "$attr$" MUST be on the line
+;; start for phpDocumentor to recognize it.
+;;
+;; 10)
+;; &entity; = translation text
+;; " = "
+;; " = """
+;; < = <
+;;
+;; Use this to control translation of entities to their appropriate values
+
+ =
+" = "
+” = ”
+“ = “
+& = &
+< = <
+> = >
+© = ©
+
+$attr$role = class
+
+abbrev = abbr
+
+blockquote = blockquote
+
+arg = span
+arg->choice = class
+
+author = <span class="author">
+/author = </span>
+author! = 0
+
+authorblurb = <div class="author-blurb">
+/authorblurb = </div>
+
+authorgroup = <div class="authors"><h2 class="title">Authors</h2>
+/authorgroup = </div>
+authorgroup! = 0
+
+caution = <span class="warning">
+/caution = </span>
+caution! = 0
+
+cmdsynopsis = <div class="cmd-synopsis">
+/cmdsynopsis = </div>
+
+command = <span class="cmd-title">
+/command = </span>
+
+copyright = <div class="notes">
+/copyright = </div>
+
+emphasis = strong
+
+example = <pre class="example">
+/example = </pre>
+example! = 0
+
+function =
+/function = ()
+
+formalpara = p
+
+graphic = img
+graphic->fileref = src
+graphic/ =
+
+important = strong
+
+informalequation = blockquote
+
+informalexample = div
+
+inlineequation = em
+
+itemizedlist = ul
+
+listitem = li
+
+literal = code
+
+literallayout = span
+
+option = " "
+/option =
+
+orderedlist = ol
+
+para = p
+
+programlisting = <pre class="listing">
+/programlisting = </pre>
+programlisting! = 0
+
+refentry = div
+
+refnamediv = <div class="ref-title-box">
+/refnamediv = </div>
+refnamediv! = 0
+
+refname = <h1 class="ref-title">
+/refname = </h1>
+
+refpurpose = <h2 class="ref-purpose">
+/refpurpose = </h2>
+
+refsynopsisdiv = <div class="ref-synopsis">
+/refsynopsisdiv = </div>
+refsynopsisdiv! = 0
+
+refsect1 = span
+
+refsect2 =
+/refsect2 = <hr />
+
+refsect3 =
+/refsect3 = <br />
+
+releaseinfo = <div class="release-info">(
+/releaseinfo = )</div>
+
+simpara =
+/simpara = <br />
+simpara! = 0
+
+subscript = sub
+
+superscript = super
+
+table = table
+
+table->colsep = rules
+table->rowsep = rules
+table->colsep+1|rowsep+1 = all
+table->colsep+1|rowsep+0 = cols
+table->colsep+0|rowsep+1 = rows
+
+table->frame = frame
+table->frame+all = border
+table->frame+none = void
+table->frame+sides = vsides
+table->frame+top = above
+table->frame+topbot = hsides
+
+thead = thead
+
+tfoot = tfoot
+
+tbody = tbody
+
+colspec = col
+
+tgroup = colgroup
+tgroup/ = 1
+tgroup->cols = span
+
+row = tr
+
+entry = td
+entry->morerows = colspan
+entry->morerows+1 = 2
+entry->morerows+2 = 3
+entry->morerows+3 = 4
+entry->morerows+4 = 5
+entry->morerows+5 = 6
+entry->morerows+6 = 7
+entry->morerows+7 = 8
+entry->morerows+8 = 9
+entry->morerows+9 = 10
+entry->morerows+10 = 11
+;; add more if you need more colspans
+
+warning = <span class="warning">
+/warning = </span>
+warning! = 0
+
+;; now begins the attributes that should be tags in cdata
+[$attr$id]
+open = a
+;close = /a
+cdata! = true
+quotevalues = true
+separator = "="
+;separateall = true
+$id = name
+
+;; now begins the sections that deal with <title>
+[refsynopsisdiv_title]
+;tag_attr = true
+;attr_name = title
+cdata_start = true
+;cdata_end = true
+open = <h1 class="title">
+close = </h1>
+
+[refsect1_title]
+;tag_attr = true
+;attr_name = title
+cdata_start = true
+;cdata_end = true
+open = <h2 class="title">
+close = </h2>
+
+[refsect2_title]
+;tag_attr = true
+;attr_name = title
+cdata_start = true
+;cdata_end = true
+open = <h3 class="title">
+close = </h3>
+
+[refsect3_title]
+;tag_attr = true
+;attr_name = title
+cdata_start = true
+;cdata_end = true
+open = <h4 class="title">
+close = </h4>
+
+[para_title]
+;tag_attr = true
+;attr_name = title
+cdata_start = true
+;cdata_end = true
+open = <div class="title">
+close = </div>
+
+[formalpara_title]
+;tag_attr = true
+;attr_name = title
+cdata_start = true
+;cdata_end = true
+open = <div class="title">
+close = </div>
+
+[example_title]
+;tag_attr = true
+;attr_name = title
+;cdata_start = true
+cdata_end = true
+open = </td></tr><tr><td><strong>
+close = </strong>
+
+[table_title]
+;tag_attr = true
+;attr_name = true
+cdata_start = true
+open = <caption>
+close = </caption>
diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/__tags.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/__tags.tpl new file mode 100644 index 00000000..221830c4 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/__tags.tpl @@ -0,0 +1,13 @@ +<div class="tag-list">
+ {section name=tag loop=$tags}
+ {if $tags[tag].keyword != "abstract" &&
+ $tags[tag].keyword != "access" &&
+ $tags[tag].keyword != "static" &&
+ $tags[tag].keyword != "version"
+ }
+
+ <strong>{$tags[tag].keyword|capitalize}:</strong>
+ {$tags[tag].data}<br />
+ {/if}
+ {/section}
+</div>
diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_class_declaration.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_class_declaration.tpl new file mode 100644 index 00000000..d7fe2f82 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_class_declaration.tpl @@ -0,0 +1,38 @@ +<hr size="1" noshade="noshade"/>
+<div class="class-declaration">
+ {if count($tags) > 0}
+ {section name=tag loop=$tags}
+ {if $tags[tag].keyword == "abstract"}
+ abstract
+ {/if}
+ {/section}
+ {/if}
+
+ {if $is_interface}
+ interface
+ {else}
+ class
+ {/if}
+
+ <strong>{$class_name}</strong>
+
+ {if count($class_tree) > 1}
+ {section name=tree loop=$class_tree.classes}
+ {if $smarty.section.tree.last}
+ extends {$class_tree.classes[$smarty.section.tree.index_prev]}
+ {/if}
+ {/section}
+ {/if}
+
+ {if $implements}
+ <br/>
+ implements
+ {foreach item="interface" from=$implements}
+ {if !$smarty.foreach.interface.first}
+ , {$interface}
+ {else}
+ {$interface}
+ {/if}
+ {/foreach}
+ {/if}
+</div>
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_class_description.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_class_description.tpl new file mode 100644 index 00000000..12025c1c --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_class_description.tpl @@ -0,0 +1,7 @@ +<div class="class-description">
+ <p>{$sdesc}</p>
+
+ {if $desc != ""}{$desc}{/if}
+</div>
+
+{include file="_tags.tpl" tags=$tags}
diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_class_list.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_class_list.tpl new file mode 100644 index 00000000..d6a1d398 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_class_list.tpl @@ -0,0 +1 @@ +{eval var=$compiledclassindex}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_constant_details.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_constant_details.tpl new file mode 100644 index 00000000..bca71e17 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_constant_details.tpl @@ -0,0 +1,33 @@ +{if $consts}
+ <hr size="1" noshade="noshade"/>
+ <a name="constant-details"></a>
+ <table class="constant-details" cellspacing="1">
+ <tr>
+ <th>Constant Details</th>
+ </tr>
+ {section name=const loop=$consts}
+ <tr>
+ <td>
+ <a name="{$consts[const].const_dest}"></a>
+
+ <h3>{$consts[const].const_name}</h3>
+
+ <p>{$consts[const].sdesc}</p>
+
+ {if $consts[const].desc}
+ {$consts[const].desc}
+ {/if}
+
+ <div class="tag-list">
+ <h4 class="tag">Type:</h4>
+ <div class="tag-data">{include file="_get_constant_type.tpl" const=$consts[const].const_value}</div>
+ <h4 class="tag">Value:</h4>
+ <div class="tag-data">{$consts[const].const_value}</div>
+ </div>
+ {include file="_tags.tpl" tags=$consts[const].tags}
+ <p/>
+ </td>
+ </tr>
+ {/section}
+ </table>
+{/if}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_constant_summary.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_constant_summary.tpl new file mode 100644 index 00000000..8049c4b0 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_constant_summary.tpl @@ -0,0 +1,22 @@ +{if $consts || $iconsts}
+ <hr size="1" noshade="noshade"/>
+ <a name="constant-summary"></a>
+ <table class="constant-summary" cellspacing="1">
+ <tr>
+ <th colspan="3">Constant Summary</th>
+ </tr>
+ {section name=const loop=$consts}
+ <tr>
+ <td class="type" nowrap="nowrap">{strip}{include file="_get_constant_type.tpl" const=$consts[const].const_value}{/strip}</td>
+ <td class="name"><a href="{$consts[const].id}">{$consts[const].const_name}</a></td>
+ <td class="description" width="100%">
+ {$consts[const].sdesc}
+
+ {if $consts[const].desc}
+ {$consts[const].desc}
+ {/if}
+ </td>
+ </tr>
+ {/section}
+ </table>
+{/if}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_constructor_details.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_constructor_details.tpl new file mode 100644 index 00000000..ec4fd0a2 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_constructor_details.tpl @@ -0,0 +1,55 @@ +{if $methods}
+ {section name=method loop=$methods}
+ {if $methods[method].function_name == "__construct"}
+ <hr size="1" noshade="noshade"/>
+ <a name="sec-method"></a>
+ <table class="method-details" cellspacing="1">
+ <tr>
+ <th colspan="3">Constructor Details</th>
+ </tr>
+ <tr>
+ <td class="method-data">
+ <a name="{$methods[method].method_dest}"></a>
+
+ <h2>{$methods[method].function_name}</h2>
+
+ <table class="method-detail" cellspacing="0">
+ <tr>
+ <td nowrap="nowrap">{strip}
+ {if $methods[method].access == "protected"}
+ protected
+ {/if}
+
+ {if $methods[method].access == "public"}
+ public
+ {/if}
+
+ {if $methods[method].abstract == "1"}
+ abstract
+ {/if}
+
+ {if $methods[method].static == "1"}
+ static
+ {/if}
+
+ <strong>{$methods[method].function_name}</strong>
+ {/strip}</td>
+ <td nowrap="nowrap">{strip}
+ {$methods[method].ifunction_call.params}
+ {/strip}</td>
+ </tr>
+ </table>
+
+ <p>{$methods[method].sdesc}</p>
+
+ {if $methods[method].desc}
+ {$methods[method].desc}
+ {/if}
+
+ {include file="_tags.tpl" tags=$methods[method].tags}
+ </td>
+ </tr>
+ </table>
+ {/if}
+ {/section}
+{/if}
diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_constructor_summary.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_constructor_summary.tpl new file mode 100644 index 00000000..8819f63e --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_constructor_summary.tpl @@ -0,0 +1,25 @@ +{if $methods}
+ {section name=method loop=$methods}
+ {if $methods[method].function_name == "__construct"}
+ <hr size="1" noshade="noshade"/>
+ <a name="constructor-summary"></a>
+ <table class="method-summary" cellspacing="1">
+ <tr>
+ <th colspan="2">Constructor Summary</th>
+ </tr>
+ <tr>
+ <td class="type" nowrap="nowrap" width="1%">{$methods[method].access}</td>
+ <td>
+ <div class="declaration">
+ <a href="{$methods[method].id}">{$methods[method].function_name}</a>
+ {$methods[method].ifunction_call.params}
+ </div>
+ <div class="description">
+ {$methods[method].sdesc}
+ </div>
+ </td>
+ </tr>
+ </table>
+ {/if}
+ {/section}
+{/if}
diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_destructor_details.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_destructor_details.tpl new file mode 100644 index 00000000..3cb5534a --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_destructor_details.tpl @@ -0,0 +1,55 @@ +{if $methods}
+ {section name=method loop=$methods}
+ {if $methods[method].function_name == "__destruct"}
+ <hr size="1" noshade="noshade"/>
+ <a name="sec-method"></a>
+ <table class="method-details" cellspacing="1">
+ <tr>
+ <th colspan="3">Destructor Details</th>
+ </tr>
+ <tr>
+ <td class="method-data">
+ <a name="{$methods[method].method_dest}"></a>
+
+ <h2>{$methods[method].function_name}</h2>
+
+ <table class="method-detail" cellspacing="0">
+ <tr>
+ <td nowrap="nowrap">{strip}
+ {if $methods[method].access == "protected"}
+ protected
+ {/if}
+
+ {if $methods[method].access == "public"}
+ public
+ {/if}
+
+ {if $methods[method].abstract == "1"}
+ abstract
+ {/if}
+
+ {if $methods[method].static == "1"}
+ static
+ {/if}
+
+ <strong>{$methods[method].function_name}</strong>
+ {/strip}</td>
+ <td nowrap="nowrap">{strip}
+ {build_argument_list args=$methods[method].ifunction_call.params style="vertical"}
+ {/strip}</td>
+ </tr>
+ </table>
+
+ <p>{$methods[method].sdesc}</p>
+
+ {if $methods[method].desc}
+ {$methods[method].desc}
+ {/if}
+
+ {include file="_tags.tpl" tags=$methods[method].tags}
+ </td>
+ </tr>
+ </table>
+ {/if}
+ {/section}
+{/if}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_destructor_summary.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_destructor_summary.tpl new file mode 100644 index 00000000..53e8f1d2 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_destructor_summary.tpl @@ -0,0 +1,27 @@ +{if $methods}
+ {section name=method loop=$methods}
+ {if $methods[method].function_name == "__destruct"}
+ <hr size="1" noshade="noshade"/>
+ <a name="desructor-summary"></a>
+ <table class="method-summary" cellspacing="1">
+ <tr>
+ <th colspan="2">Destructor Summary</th>
+ </tr>
+ <tr>
+ <td class="type" nowrap="nowrap" width="1%">{strip}
+ {$methods[method].access}
+ {/strip}</td>
+ <td>
+ <div class="declaration">{strip}
+ <a href="{$methods[method].id}">{$methods[method].function_name}</a>
+ {$methods[method].ifunction_call.params}
+ {/strip}</div>
+ <div class="description">
+ {$methods[method].sdesc}
+ </div>
+ </td>
+ </tr>
+ </table>
+ {/if}
+ {/section}
+{/if}
diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_footer.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_footer.tpl new file mode 100644 index 00000000..0c2eddc2 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_footer.tpl @@ -0,0 +1 @@ +</div>
diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_get_constant_type.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_get_constant_type.tpl new file mode 100644 index 00000000..48301da4 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_get_constant_type.tpl @@ -0,0 +1,10 @@ +{if is_numeric(strtolower(trim($const)))}
+ int
+{elseif strtolower(trim($const)) == "true" ||
+ strtolower(trim($const)) == "false"}
+ bool
+{elseif strtolower(trim($const)) == "null"}
+ null
+{else}
+ string
+{/if}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_header.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_header.tpl new file mode 100644 index 00000000..f92571a4 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_header.tpl @@ -0,0 +1,4 @@ +<div id="bar" nowrap="nowrap">
+ {include file="_class_list.tpl"}
+</div>
+<div id="content1">
diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_inherited_constants.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_inherited_constants.tpl new file mode 100644 index 00000000..66c37633 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_inherited_constants.tpl @@ -0,0 +1,34 @@ +{if $iconsts}
+ {section name=iconst loop=$iconsts}
+ <table class="inherited-constants" cellspacing="1">
+ <tr>
+ <th>Constants Inherited From {$iconsts[iconst].parent_class}</th>
+ </tr>
+ <tr>
+ <td>
+ {assign var="_consts" value=""}
+
+ {section name=_const loop=$iconsts[iconst].iconsts}
+ {if $_consts != ""},
+ {* append var="_consts" value=", "*}
+ {/if}
+ <a href="{$href}">{$iconsts[iconst].iconsts[_const].name}</a>{if !$smarty.section.name.last},{/if}
+ {*
+ {extract_attribute attribute="href"
+ element=$iconsts[iconst].iconsts[_const].link
+ var="href" append="no"}
+
+ {append var="_consts" value="<a href=\""}
+ {append var="_consts" value=$href}
+ {append var="_consts" value="\">"}
+ {append var="_consts" value=$iconsts[iconst].iconsts[_const].name}
+ {append var="_consts" value="</a>"}
+ *}
+{/section}
+
+ {*$_consts*}
+ </td>
+ </tr>
+ </table>
+ {/section}
+{/if}
diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_inherited_methods.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_inherited_methods.tpl new file mode 100644 index 00000000..55aafb17 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_inherited_methods.tpl @@ -0,0 +1,42 @@ +{if $imethods}
+ {section name=imethod loop=$imethods}
+ {if count($imethods[imethod].imethods) > 1 ||
+ ($imethods[imethod].imethods[0].name != "__construct" &&
+ $imethods[imethod].imethods[0].name != "__destruct" &&
+ $imethods[imethod].imethods[0].abstract != "1")}
+ <table class="inherited-methods" cellspacing="1">
+ <tr>
+ <th>Methods Inherited From {$imethods[imethod].parent_class}</th>
+ </tr>
+ <tr>
+ <td>
+ {* assign var="_methods" value="" *}
+
+ {section name=_method loop=$imethods[imethod].imethods}
+ {if $imethods[imethod].imethods[_method].name != "__construct" &&
+ $imethods[imethod].imethods[_method].abstract != "1"}
+ {*
+ {if $_methods != ""}
+ {append var="_methods" value=", "}
+ {/if}
+
+ {extract_attribute attribute="href"
+ element=$imethods[imethod].imethods[_method].link
+ var="href" append="no"}
+
+ {append var="_methods" value="<a href=\""}
+ {append var="_methods" value=$href}
+ {append var="_methods" value="\">"}
+ {append var="_methods" value=$imethods[imethod].imethods[_method].name}
+ {append var="_methods" value="</a>"}
+ *}
+ {$imethods[imethod].imethods[_method].link}{if !$smarty.section._method.last},{/if}
+ {/if}
+ {/section}
+
+ </td>
+ </tr>
+ </table>
+ {/if}
+ {/section}
+{/if}
diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_inheritence_tree.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_inheritence_tree.tpl new file mode 100644 index 00000000..471c7972 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_inheritence_tree.tpl @@ -0,0 +1,3 @@ +<div class="inheritence-tree">
+ <pre>{section name=tree loop=$class_tree.classes}{if $smarty.section.tree.last}<strong>{$class_tree.classes[tree]}</strong>{else}{$class_tree.classes[tree]}{/if}{$class_tree.distance[tree]}{/section}</pre>
+</div>
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_method_details.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_method_details.tpl new file mode 100644 index 00000000..b5ddfb10 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_method_details.tpl @@ -0,0 +1,101 @@ +{if $methods && (count($methods) > 1 ||
+ ($methods[0].function_name != "__construct" &&
+ $methods[0].function_name != "__destruct"))}
+
+ <hr size="1" noshade="noshade"/>
+ <a name="method-details"></a>
+ <table class="method-details" cellspacing="1">
+ <tr>
+ <th>Method Details</th>
+ </tr>
+ {section name=method loop=$methods}
+ {if $methods[method].function_name != "__construct" &&
+ $methods[method].function_name != "__destruct"}
+
+ <tr>
+ <td class="method-data">
+
+ <a name="{$methods[method].method_dest}"></a>
+
+ <h2>{$methods[method].function_name}</h2>
+
+ <table class="method-detail" cellspacing="0">
+ <tr>
+ <td nowrap="nowrap">{strip}
+ {if $methods[method].access == "protected"}
+ protected
+ {/if}
+
+ {if $methods[method].access == "public"}
+ public
+ {/if}
+
+ {if $methods[method].abstract == 1}
+ abstract
+ {/if}
+
+ {if $methods[method].static == 1}
+ static
+ {/if}
+
+ {$methods[method].function_return}
+
+
+ <strong>{$methods[method].function_name}</strong>
+ {/strip}</td>
+ <td width="100%">{strip}
+ (
+ {if $methods[method].ifunction_call.params}
+ {foreach item=param name="method" from=$methods[method].ifunction_call.params}
+ {$param.type} {$param.name} {if !$smarty.foreach.method.last}, {/if}
+ {/foreach}
+
+ {/if}
+ )
+ {/strip}</td>
+ </tr>
+ </table>
+
+ <p>{$methods[method].sdesc}</p>
+
+ {if $methods[method].desc}
+ {$methods[method].desc}
+ {/if}
+ {* $methods[method]|print_r *}
+ <div class="tag-list"><table class="method-summary" cellspacing="1">
+ {if $methods[method].ifunction_call.params}
+ <tr><th colspan="3" class="small">Input</th></tr>
+ {foreach item=param name="method" from=$methods[method].ifunction_call.params}
+ <tr><td valign="top">{$param.type}</td><td valign="top"><strong>{$param.name}</strong><td valign="top">{$param.description}</td></tr>
+ {/foreach}
+ {/if}
+ {if $methods[method].tags}
+ <tr><th colspan="3" class="small">Output</th></tr>
+
+ {foreach item=param name="method" from=$methods[method].tags}
+ {if $param.keyword == "return"}
+ <tr><td valign="top">
+ {$methods[method].function_return}
+ </td><td valign="top" colspan="2">{$param.data}</td></tr>
+ {/if}
+ {/foreach}
+ {/if}
+ {if $methods[method].tags}
+ <tr><th colspan="3" class="small">Exception</th></tr>
+
+ {foreach item=param name="method" from=$methods[method].tags}
+ {if $param.keyword == "throws"}
+ <tr><td valign="top">{$param.keyword}</td><td valign="top" colspan="2">{$param.data}</td></tr>
+ {/if}
+ {/foreach}
+ {/if}
+ </table></div>
+
+ {* include file="_tags.tpl" tags=$methods[method].tags *}
+ <p/>
+ </td>
+ </tr>
+ {/if}
+ {/section}
+ </table>
+{/if}
diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_method_summary.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_method_summary.tpl new file mode 100644 index 00000000..8fefd671 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_method_summary.tpl @@ -0,0 +1,61 @@ +{if $methods || $imethods}
+ <hr size="1" noshade="noshade"/>
+ <a name="method-summary"></a>
+ <table class="method-summary" cellspacing="1">
+ <tr>
+ <th colspan="2">Method Summary</th>
+ </tr>
+ {section name=method loop=$methods}
+ {if $methods[method].function_name != "__construct" &&
+ $methods[method].function_name != "__destruct"}
+ {*
+ {if trim(substr($methods[method].function_call, 0, 1)) == "&"}
+ {assign var="ref" value="true"}
+ {assign var="css" value=" class=\"reference\""}
+ {else}
+ {assign var="ref" value="false"}
+ {assign var="css" value=""}
+ {/if}
+ *}
+ <tr>
+ <td class="type" nowrap="nowrap" width="1%">
+ {if $methods[method].access == "protected"}
+ protected
+ {/if}
+
+ {if $methods[method].abstract == 1}
+ abstract
+ {/if}
+
+ {if $methods[method].static == 1}
+ static
+ {/if}
+
+ {$methods[method].function_return}
+{*
+ {if $ref == "true"}
+ &
+ {/if}
+*}
+ </td>
+ <td>
+ <div class="declaration">
+ <a href="{$methods[method].id}">{$methods[method].function_name}</a>
+ ({strip}
+ {if $methods[method].ifunction_call.params}
+ {foreach item=param name="method" from=$methods[method].ifunction_call.params}
+ {$param.type} {$param.name}{if !$smarty.foreach.method.last}, {/if}
+ {/foreach}
+
+ {/if}
+ {/strip})
+ </div>
+ <div class="description">
+ {$methods[method].sdesc}
+ </div>
+ </td>
+ </tr>
+ {/if}
+ {/section}
+ </table>
+{/if}
diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_sub_classes.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_sub_classes.tpl new file mode 100644 index 00000000..e605b314 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_sub_classes.tpl @@ -0,0 +1,19 @@ +{if $children}
+ <div class="sub-classes">
+ {if $is_interface}
+ <h4>Direct Known Sub-interfaces:</h4>
+ {else}
+ <h4>Direct Known Sub-classes:</h4>
+ {/if}
+
+ <div><small>
+ {section name=child loop=$children}
+ {if !$smarty.section.child.first}
+ , {$children[child].link}
+ {else}
+ {$children[child].link}
+ {/if}
+ {/section}
+ </small></div>
+ </div>
+{/if}
diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_tags.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_tags.tpl new file mode 100644 index 00000000..221830c4 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_tags.tpl @@ -0,0 +1,13 @@ +<div class="tag-list">
+ {section name=tag loop=$tags}
+ {if $tags[tag].keyword != "abstract" &&
+ $tags[tag].keyword != "access" &&
+ $tags[tag].keyword != "static" &&
+ $tags[tag].keyword != "version"
+ }
+
+ <strong>{$tags[tag].keyword|capitalize}:</strong>
+ {$tags[tag].data}<br />
+ {/if}
+ {/section}
+</div>
diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/basicindex.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/basicindex.tpl new file mode 100644 index 00000000..37e94343 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/basicindex.tpl @@ -0,0 +1,18 @@ +{section name=letter loop=$letters}
+ [ <a href="{$indexname}.html#{$letters[letter].letter}">{$letters[letter].letter}</a> ]
+{/section}
+
+{section name=index loop=$index}
+ <hr />
+ <a name="{$index[index].letter}"></a>
+ <div>
+ <h2>{$index[index].letter}</h2>
+ <dl>
+ {section name=contents loop=$index[index].index}
+ <dt><b>{$index[index].index[contents].name}</b></dt>
+ <dd>{$index[index].index[contents].listing}</dd>
+ {/section}
+ </dl>
+ </div>
+ <a href="{$indexname}.html#top">top</a><br>
+{/section}
diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/blank.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/blank.tpl new file mode 100644 index 00000000..b503c142 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/blank.tpl @@ -0,0 +1,5 @@ +<div align="center"><h1>{$maintitle}</h1></div>
+<b>Welcome to {$package}!</b><br />
+<br />
+This documentation was generated by <a href="{$phpdocwebsite}">phpDocumentor v{$phpdocversion}</a><br />
+
diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/class.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/class.tpl new file mode 100644 index 00000000..e791bbba --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/class.tpl @@ -0,0 +1,29 @@ +{include file="header.tpl" eltype="class" hasel=true contents=$classcontents}
+
+<h1>{if $is_interface}Interface{else}Class{/if} {$class_name}</h1>
+
+{*inheritence tree*}
+<div class="inheritence-tree">
+ <pre>{section name=tree loop=$class_tree.classes}{if $smarty.section.tree.last}<strong>{$class_tree.classes[tree]}</strong>{else}{$class_tree.classes[tree]}{/if}{$class_tree.distance[tree]}{/section}</pre>
+</div>
+
+{include file="_sub_classes.tpl"}
+{include file="_class_description.tpl"}
+{include file="_inherited_constants.tpl"}
+
+{include file="_constructor_summary.tpl"}
+{* include file="_destructor_summary.tpl" *}
+
+{include file="_method_summary.tpl"}
+
+{include file="_inherited_methods.tpl"}
+{include file="_constant_summary.tpl"}
+{include file="_constructor_details.tpl"}
+
+{* include file="_destructor_details.tpl" *}
+
+{include file="_method_details.tpl"}
+
+{include file="_constant_details.tpl"}
+
+{include file="footer.tpl"}
diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/classleft.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/classleft.tpl new file mode 100644 index 00000000..c07fc33a --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/classleft.tpl @@ -0,0 +1,9 @@ +{foreach key=subpackage item=files from=$classleftindex}
+ <div class="package">
+ {if $subpackage != ""}{$subpackage}<br />{/if}
+ {section name=files loop=$files}
+ {if $subpackage != ""} {/if}
+ {if $files[files].link != ''}<a href="{$files[files].link}">{/if}{$files[files].title}{if $files[files].link != ''}</a>{/if}<br />
+ {/section}
+ </div>
+{/foreach}
diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/classtrees.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/classtrees.tpl new file mode 100644 index 00000000..4020e3a8 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/classtrees.tpl @@ -0,0 +1,8 @@ +{include file="header.tpl" noleftindex=true}
+<h1>{$title}</h1>
+{section name=classtrees loop=$classtrees}
+<hr />
+<div class="classtree">Root class {$classtrees[classtrees].class}</div><br>
+{$classtrees[classtrees].class_tree}
+{/section}
+{include file="footer.tpl"}
diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/const.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/const.tpl new file mode 100644 index 00000000..88856c4b --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/const.tpl @@ -0,0 +1,14 @@ +{section name=consts loop=$consts}
+{if $show == 'summary'}
+ var {$consts[consts].const_name}, {$consts[consts].sdesc}<br>
+{else}
+ <a name="{$consts[consts].const_dest}"></a>
+ <p></p>
+ <h4>{$consts[consts].const_name} = <span class="value">{$consts[consts].const_value|replace:"\n":"<br>\n"|replace:" ":" "|replace:"\t":" "}</span></h4>
+ <p>[line {if $consts[consts].slink}{$consts[consts].slink}{else}{$consts[consts].line_number}{/if}]</p>
+ {include file="docblock.tpl" sdesc=$consts[consts].sdesc desc=$consts[consts].desc tags=$consts[consts].tags}
+
+ <br />
+ <div class="top">[ <a href="#top">Top</a> ]</div><br />
+{/if}
+{/section}
diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/define.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/define.tpl new file mode 100644 index 00000000..04ce5b48 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/define.tpl @@ -0,0 +1,32 @@ +{if count($defines) > 0}
+{section name=def loop=$defines}
+{if $show == 'summary'}
+define constant <a href="{$defines[def].id}">{$defines[def].define_name}</a> = {$defines[def].define_value}, {$defines[def].sdesc}<br>
+{else}
+ <hr />
+ <a name="{$defines[def].define_link}"></a>
+ <h3>{$defines[def].define_name} <span class="smalllinenumber">[line {if $defines[def].slink}{$defines[def].slink}{else}{$defines[def].line_number}{/if}]</span></h3>
+ <div class="tags">
+ <table width="90%" border="0" cellspacing="0" cellpadding="1"><tr><td class="code_border">
+ <table width="100%" border="0" cellspacing="0" cellpadding="2"><tr><td class="code">
+ <code>{$defines[def].define_name} = {$defines[def].define_value}</code>
+ </td></tr></table>
+ </td></tr></table>
+
+ {include file="docblock.tpl" sdesc=$defines[def].sdesc desc=$defines[def].desc tags=$defines[def].tags}
+ <br />
+ {if $defines[def].define_conflicts.conflict_type}
+ <p><b>Conflicts with defines:</b>
+ {section name=me loop=$defines[def].define_conflicts.conflicts}
+ {$defines[def].define_conflicts.conflicts[me]}<br />
+ {/section}
+ </p>
+ {/if}
+{* original {if $defines[def].define_conflicts != ""
+ <b>Conflicts:</b> {$defines[def].define_conflicts<br /><br />
+ {/if *}
+ </div>
+ <div class="top">[ <a href="#top">Top</a> ]</div><br /><br />
+{/if}
+{/section}
+{/if}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/docblock.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/docblock.tpl new file mode 100644 index 00000000..09a603f8 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/docblock.tpl @@ -0,0 +1,15 @@ +{if $sdesc != ''}{$sdesc|default:''}<br /><br />{/if}
+{if $desc != ''}{$desc|default:''}<br />{/if}
+{if count($tags) > 0}
+<br /><br />
+<h4>Tags:</h4>
+<div class="tags">
+<table border="0" cellspacing="0" cellpadding="0">
+{section name=tag loop=$tags}
+ <tr>
+ <td><b>{$tags[tag].keyword}:</b> </td><td>{$tags[tag].data}</td>
+ </tr>
+{/section}
+</table>
+</div>
+{/if}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/elementindex.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/elementindex.tpl new file mode 100644 index 00000000..175a5136 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/elementindex.tpl @@ -0,0 +1,5 @@ +{include file="header.tpl" noleftindex=true}
+<a name="top"></a>
+<h1>Index of all elements</h1>
+{include file="basicindex.tpl" indexname="elementindex"}
+{include file="footer.tpl"}
diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/errors.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/errors.tpl new file mode 100644 index 00000000..1576a822 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/errors.tpl @@ -0,0 +1,21 @@ +{include file="header.tpl" noleftindex=true}
+{section name=files loop=$files}
+<a href="#{$files[files].file}">{$files[files].file}</a><br>
+{/section}
+{foreach key=file item=issues from=$all}
+<a name="{$file}"></a>
+<h1>{$file}</h1>
+{if count($issues.warnings)}
+<h2>Warnings:</h2><br>
+{section name=warnings loop=$issues.warnings}
+<b>{$issues.warnings[warnings].name}</b> - {$issues.warnings[warnings].listing}<br>
+{/section}
+{/if}
+{if count($issues.errors)}
+<h2>Errors:</h2><br>
+{section name=errors loop=$issues.errors}
+<b>{$issues.errors[errors].name}</b> - {$issues.errors[errors].listing}<br>
+{/section}
+{/if}
+{/foreach}
+{include file="footer.tpl"}
diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/examplesource.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/examplesource.tpl new file mode 100644 index 00000000..fb85654b --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/examplesource.tpl @@ -0,0 +1,6 @@ +{include file="header.tpl" title=$title}
+<h1 align="center">{$title}</h1>
+<div class="php">
+{$source}
+</div>
+{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/fileleft.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/fileleft.tpl new file mode 100644 index 00000000..50f108d7 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/fileleft.tpl @@ -0,0 +1,10 @@ +{foreach key=subpackage item=files from=$fileleftindex}
+ {if $subpackage != ""}subpackage <b>{$subpackage}</b><br>{/if}
+ <div class="package">
+ {section name=files loop=$files}
+ {if $files[files].link != ''}<a href="{$files[files].link}">{/if}
+ {$files[files].title}
+ {if $files[files].link != ''}</a>{/if}<br>
+ {/section}
+ </div><br />
+{/foreach}
diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/filesource.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/filesource.tpl new file mode 100644 index 00000000..b23076a0 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/filesource.tpl @@ -0,0 +1,8 @@ +{capture name="tutle"}File Source for {$name}{/capture}
+{include file="header.tpl" title=$smarty.capture.tutle}
+<h1 align="center">Source for file {$name}</h1>
+<p>Documentation is available at {$docs}</p>
+<div class="php">
+{$source}
+</div>
+{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/footer.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/footer.tpl new file mode 100644 index 00000000..68135cd6 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/footer.tpl @@ -0,0 +1,25 @@ + <!-- content end --></td></tr></table>
+ </td>
+ </tr>
+</table>
+
+</div><!-- main -->
+
+<div id="footer">
+ <a href="/tos/">Terms of Service</a> |
+ <a href="/support/">Contact Us</a>
+ <br/>
+ Copyright © 2006-2007 by the PRADO Group.<br/>
+ <a title="Powered by PRADO" href="http://www.pradosoft.com/"><img src="http://www.pradosoft.com/images/powered2.gif" style="border-width:0px;" alt="Powered by PRADO" /></a>
+</div>
+
+</div><!-- page -->
+<script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+_uacct = "UA-186303-3";
+urchinTracker();
+</script>
+
+</body>
+</html>
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/function.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/function.tpl new file mode 100644 index 00000000..098aeb17 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/function.tpl @@ -0,0 +1,48 @@ +{section name=func loop=$functions}
+{if $show == 'summary'}
+function {$functions[func].id}, {$functions[func].sdesc}<br />
+{else}
+ <hr />
+ <a name="{$functions[func].function_dest}"></a>
+ <h3>{$functions[func].function_name} <span class="smalllinenumber">[line {if $functions[func].slink}{$functions[func].slink}{else}{$functions[func].line_number}{/if}]</span></h3>
+ <div class="function">
+ <table width="90%" border="0" cellspacing="0" cellpadding="1"><tr><td class="code_border">
+ <table width="100%" border="0" cellspacing="0" cellpadding="2"><tr><td class="code">
+ <code>{$functions[func].function_return} {if $functions[func].ifunction_call.returnsref}&{/if}{$functions[func].function_name}(
+{if count($functions[func].ifunction_call.params)}
+{section name=params loop=$functions[func].ifunction_call.params}
+{if $smarty.section.params.iteration != 1}, {/if}{if $functions[func].ifunction_call.params[params].default != ''}[{/if}{$functions[func].ifunction_call.params[params].type} {$functions[func].ifunction_call.params[params].name}{if $functions[func].ifunction_call.params[params].default != ''} = {$functions[func].ifunction_call.params[params].default|escape:"html"}]{/if}
+{/section}
+{/if})</code>
+ </td></tr></table>
+ </td></tr></table><br />
+
+ {include file="docblock.tpl" sdesc=$functions[func].sdesc desc=$functions[func].desc tags=$functions[func].tags}
+ <br /><br />
+ {if $functions[func].function_conflicts.conflict_type}
+ <p><b>Conflicts with functions:</b>
+ {section name=me loop=$functions[func].function_conflicts.conflicts}
+ {$functions[func].function_conflicts.conflicts[me]}<br />
+ {/section}
+ </p>
+ {/if}
+{* original {if $functions[func].function_conflicts != ""
+ <b>Conflicts:</b> {$functions[func].function_conflicts<br /><br />
+ {/if *}
+
+ {if count($functions[func].params) > 0}
+ <h4>Parameters</h4>
+ <table border="0" cellspacing="0" cellpadding="0">
+ {section name=params loop=$functions[func].params}
+ <tr>
+ <td class="type">{$functions[func].params[params].datatype} </td>
+ <td><b>{$functions[func].params[params].var}</b> </td>
+ <td>{$functions[func].params[params].data}</td>
+ </tr>
+ {/section}
+ </table>
+ {/if}
+ <div class="top">[ <a href="#top">Top</a> ]</div><br /><br />
+ </div>
+{/if}
+{/section}
diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/global.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/global.tpl new file mode 100644 index 00000000..1053f748 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/global.tpl @@ -0,0 +1,40 @@ +{if count($globals) > 0}
+{section name=glob loop=$globals}
+{if $show == 'summary'}
+global variable <a href="{$globals[glob].id}">{$globals[glob].global_name}</a> = {$globals[glob].global_value}, {$globals[glob].sdesc}<br>
+{else}
+ <hr />
+ <a name="{$globals[glob].global_link}"></a>
+ <h4><i>{$globals[glob].global_type}</i> {$globals[glob].global_name} <span class="smalllinenumber">[line {if $globals[glob].slink}{$globals[glob].slink}{else}{$globals[glob].line_number}{/if}]</span></h4>
+ <div class="tags">
+ {if $globals[glob].sdesc != ""}
+ {include file="docblock.tpl" sdesc=$globals[glob].sdesc desc=$globals[glob].desc tags=$globals[glob].tags}
+ {/if}
+
+ <table border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td><b>Default value:</b> </td>
+ <td>{$globals[glob].global_value|replace:" ":" "|replace:"\n":"<br />\n"|replace:"\t":" "}</td>
+ </tr>
+ {if $globals[glob].global_conflicts.conflict_type}
+ <tr>
+ <td><b>Conflicts with globals:</b> </td>
+ <td>
+ {section name=me loop=$globals[glob].global_conflicts.conflicts}
+ {$globals[glob].global_conflicts.conflicts[me]}<br />
+ {/section}
+ </td>
+ </tr>
+ {/if}
+{* original {if $globals[glob].global_conflicts != ""
+ <tr>
+ <td><b>Conflicts:</b> </td>
+ <td>{$globals[glob].global_conflicts</td>
+ </tr>
+ {/if *}
+ </table>
+ </div><br /><br />
+ <div class="top">[ <a href="#top">Top</a> ]</div><br /><br />
+{/if}
+{/section}
+{/if}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/header.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/header.tpl new file mode 100644 index 00000000..659168cf --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/header.tpl @@ -0,0 +1,113 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" > + <head> + <title>PRADO API Manual: {$title}</title> + <meta http-equiv="Expires" content="Fri, Jan 01 1900 00:00:00 GMT"/> + <meta http-equiv="Pragma" content="no-cache"/> + <meta http-equiv="Cache-Control" content="no-cache"/> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> + <meta http-equiv="content-language" content="en"/> + <meta name="Keywords" content="PRADO PHP framework component template delphi asp.net event property OOP PHP5 object oriented programming Web programming development" /> + <meta name="Description" content="PRADO is a component-based and event-driven framework for Web application development in PHP 5." /> + <meta name="Author" content="Qiang Xue" /> + <meta name="Subject" content="Web programming, PHP framework" /> + <meta name="Language" content="en" /> + <link rel="Shortcut Icon" href="/favicon.ico" /> + <link rel="stylesheet" type="text/css" href="/css/style.css" /> + <link rel="stylesheet" type="text/css" href="/css/manual.css" /> + </head> + <body> + <div id="page"> + <div id="header"> + <div id="logo"><img src="/css/pradoheader.gif" alt="PRADO Component Framework for PHP 5" /></div> + <div id="mainmenu"> + <ul> + <li><a href="/">Home</a></li> + <li><a href="/about/" >About</a></li> + <li><a href="/testimonials/" >Testimonials</a></li> + <li><a href="/demos/" >Demos</a></li> + <li><a href="/download/" >Download</a></li> + <li><a href="/documentation/" class="active">Documentation</a></li> + <li><a href="/forum/" >Forum</a></li> + <li><a href="http://code.google.com/p/prado3/updates/list">Development</a></li> + </ul> + </div><!-- mainmenu --> + </div><!-- header --> + <div id="main"> + <div id="navbar"> + <ul> + <li><a href="/tutorials/">Tutorials</a></li> + <li><a href="/docs/classdoc/">Class Docs</a></li> + <li><a href="/docs/manual/" class="active">API Manual</a></li> + <li><a href="/wiki/">Wiki</a></li> + </ul> + </div> + <table width="100%" border="0" cellpadding="0" cellspacing="0"> + <tr valign="top"> + <td width="200" id="infobar"> +{if count($ric) >= 1} + <div id="ric"> +{section name=ric loop=$ric} + <p><a href="{$subdir}{$ric[ric].file}">{$ric[ric].name}</a></p> +{/section} + </div> +{/if} + <b>Packages:</b><br /> +{section name=packagelist loop=$packageindex} + <a href="{$subdir}{$packageindex[packagelist].link}">{$packageindex[packagelist].title}</a><br /> +{/section} + <br /><br /> +{if $tutorials} + <b>Tutorials/Manuals:</b><br /> +{if $tutorials.pkg} + <strong>Package-level:</strong> +{section name=ext loop=$tutorials.pkg} + {$tutorials.pkg[ext]} +{/section} +{/if} +{if $tutorials.cls} + <strong>Class-level:</strong> +{section name=ext loop=$tutorials.cls} + {$tutorials.cls[ext]} +{/section} +{/if} +{if $tutorials.proc} + <strong>Procedural-level:</strong> +{section name=ext loop=$tutorials.proc} + {$tutorials.proc[ext]} +{/section} +{/if} +{/if} +{if !$noleftindex}{assign var="noleftindex" value=false}{/if} +{if !$noleftindex} +{* +{if $compiledfileindex} + <b>Files:</b><br /> + {eval var=$compiledfileindex} +{/if} +*} +{if $compiledclassindex} + <b>Classes:</b><br /> + {eval var=$compiledclassindex} +{/if} +{/if} + </td> + <td> + <table cellpadding="10" cellspacing="0" width="100%" border="0"> + <tr> + <td valign="top" align="center"> + <form type="get" action="/docs/manual/search.php"> + Keyword <input type="text" name="keyword" size="50" /> + <input type="submit" value="Search" /> + </form> + </td> + </tr> + <tr> + <td valign="top"><!-- content begin --> +{* +{if !$hasel}{assign var="hasel" value=false}{/if} +{if $hasel} + <h1>{$eltype|capitalize}: {$class_name}</h1> + Source Location: {$source_location}<br /><br /> +{/if} +*} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/include.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/include.tpl new file mode 100644 index 00000000..cff067db --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/include.tpl @@ -0,0 +1,9 @@ +{if count($includes) > 0}
+<h4>Includes:</h4>
+<div class="tags">
+{section name=includes loop=$includes}
+{$includes[includes].include_name}({$includes[includes].include_value}) [line {if $includes[includes].slink}{$includes[includes].slink}{else}{$includes[includes].line_number}{/if}]<br />
+{include file="docblock.tpl" sdesc=$includes[includes].sdesc desc=$includes[includes].desc tags=$includes[includes].tags}
+{/section}
+</div>
+{/if}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/index.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/index.tpl new file mode 100644 index 00000000..60c74b47 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/index.tpl @@ -0,0 +1,7 @@ +{include file="header.tpl"}
+{if $contents}
+{$contents}
+{else}
+{include file="blank.tpl"}
+{/if}
+{include file="footer.tpl"}
diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/media/background.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/media/background.png Binary files differnew file mode 100644 index 00000000..d6f36f60 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/media/background.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/media/bg_left.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/media/bg_left.png Binary files differnew file mode 100644 index 00000000..19fdf05d --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/media/bg_left.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/media/empty.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/media/empty.png Binary files differnew file mode 100644 index 00000000..a9f29bb1 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/media/empty.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/media/manual.css b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/media/manual.css new file mode 100644 index 00000000..8aaa937d --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/media/manual.css @@ -0,0 +1,260 @@ +/* thanks to symfony for a great base template for phpdoc */
+/* symfony-project.com */
+
+#page
+{
+ width: 99%;
+}
+
+div.credit
+{
+ font-size: 10px;
+ color: #888;
+}
+
+.inherited-methods
+{
+ background-color: #ddd;
+ font-size: 1.0em;
+ margin-top: 10px;
+ width: 100%;
+}
+
+.inherited-methods td
+{
+ background-color: #FFFFFF;
+ font-family: "courier new", courier;
+ font-size: 1.1em;
+ padding: 5px;
+}
+
+.inherited-methods th
+{
+ background-color: #F0F0F0;
+ font-weight: bold;
+ padding: 5px;
+ text-align: left;
+}
+
+.method-detail
+{
+ font-size: 1.0em;
+}
+
+.method-detail a
+{
+ font-weight: bold;
+}
+
+.method-detail td
+{
+ font-family: "courier new", courier;
+ font-size: 1.1em;
+ padding-top: 10px;
+ vertical-align: top;
+}
+
+.method-details
+{
+ background-color: #ddd;
+ font-size: 1.0em;
+ width: 100%;
+}
+
+.method-details td
+{
+ background-color: #FFFFFF;
+}
+
+.method-details td.method-data
+{
+ padding: 5px;
+}
+
+.method-details h2
+{
+ color: #750000;
+}
+
+.method-details th
+{
+ background-color: #F0F0F0;
+ font-weight: bold;
+ font-size: 1.2em;
+ padding: 5px;
+ text-align: left;
+}
+
+.method-summary
+{
+ background-color: #aaa;
+ font-size: 1.0em;
+ width: 100%;
+}
+
+.method-summary td
+{
+ background-color: #FFFFFF;
+ padding: 5px;
+}
+
+.method-summary td a
+{
+ font-weight: bold;
+}
+
+.method-summary td.type
+{
+ font-family: "courier new", courier;
+ font-size: 1.0em;
+ text-align: right;
+ vertical-align: top;
+}
+
+.method-summary div.declaration
+{
+ font-family: "courier new", courier;
+ font-size: 1.1em;
+}
+
+.method-summary th
+{
+ background-color: #F0F0F0;
+ font-weight: bold;
+ font-size: 1.2em;
+ padding: 5px;
+ text-align: left;
+}
+
+.method-summary th.small
+{
+ font-size: 1.0em;
+}
+
+.method-summary tr.reference td {
+ background-color: #FFEDED;
+}
+
+
+.constant-details
+{
+ background-color: #ddd;
+ font-size: 1.0em;
+ width: 100%;
+}
+
+.constant-details h3
+{
+ color: #750000;
+}
+
+.constant-details td
+{
+ background-color: #FFFFFF;
+ padding: 5px;
+}
+
+.constant-details th
+{
+ background-color: #F0F0F0;
+ font-weight: bold;
+ font-size: 1.2em;
+ padding: 5px;
+ text-align: left;
+}
+
+.constant-summary
+{
+ background-color: #ddd;
+ font-size: 1.0em;
+ width: 100%;
+}
+
+.constant-summary td
+{
+ background-color: #FFFFFF;
+ padding: 5px;
+}
+
+.constant-summary td.name a
+{
+ font-family: "courier new", courier;
+ font-size: 1.0em;
+ font-weight: bold;
+}
+
+.constant-summary td.type
+{
+ font-family: "courier new", courier;
+ font-size: 1.0em;
+}
+
+.constant-summary th
+{
+ background-color: #F0F0F0;
+ font-weight: bold;
+ font-size: 1.2em;
+ padding: 5px;
+ text-align: left;
+}
+
+.inherited-constants
+{
+ background-color: #eee;
+ font-size: 1.0em;
+ margin-top: 10px;
+ width: 100%;
+}
+
+.inherited-constants td
+{
+ background-color: #FFFFFF;
+ font-family: "courier new", courier;
+ font-size: 1.1em;
+ padding: 5px;
+}
+
+.inherited-constants th
+{
+ background-color: #F0F0F0;
+ font-weight: bold;
+ padding: 5px;
+ text-align: left;
+}
+
+.class-declaration
+{
+ font-family: "courier new", courier;
+ font-size: 1.1em;
+}
+
+.class-description
+{
+ background-color: #F0F0F0;
+ margin-top: 10px;
+ padding: 1px 8px 1px 8px;
+ margin-bottom: 5px;
+}
+
+.inheritence-tree pre
+{
+ margin-bottom: 0;
+}
+
+.sub-classes h4
+{
+ margin: 10px 0 0 0;
+}
+
+.sub-classes div
+{
+ font-family: "courier new", courier;
+ font-size: 1.1em;
+ margin: 5px 0 0 40px;
+}
+
+.sub-classes div small
+{
+ font-size: 1.0em;
+}
+
diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/media/style.css b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/media/style.css new file mode 100644 index 00000000..918d43e4 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/media/style.css @@ -0,0 +1,598 @@ +/**
+ * PradoSoft profile by Carl G. Mathisen and Stefan A. Petrov
+ * http://decart.no
+ */
+
+body
+{
+ text-align: center;
+}
+
+body, div, span, p, input
+{
+ font-family: Verdana, sans-serif, Arial;
+ font-size: 10pt;
+ color: #333333;
+}
+
+h1, h2, h3, h4
+{
+ font-family: Verdana, Helvetica, Arial, Lucida Grande, Trebuchet MS;
+ padding: 0px;
+ margin: 0px;
+ margin-bottom: 10px;
+ color: #821B18;
+ font-weight: normal;
+}
+
+h2
+{
+ font-size: 18px;
+}
+
+h3
+{
+ font-size: 16px;
+}
+
+div
+{
+ text-align: left;
+}
+
+.instructions
+{
+ background-color: #EEEEEE;
+}
+
+img
+{
+ border: none;
+}
+
+a
+{
+ color: #CD2C27;
+ text-decoration: none;
+}
+
+a:hover
+{
+ color: #821B18;
+ text-decoration: underline;
+}
+
+#page
+{
+ margin: 0 auto;
+ padding: 0;
+ position: relative;
+}
+
+#header
+{
+ position: relative;
+ height: 98px;
+}
+
+#logo
+{
+ height: 99px;
+}
+
+/* main page */
+
+div.intro
+{
+ height: 190px;
+ background-image: url('bigmantis.jpg');
+ background-repeat: no-repeat;
+ background-position: top right;
+ background-color: #fff;
+}
+
+div.statements
+{
+ height: 135px;
+ background-image: url('statementsbg.gif');
+ background-repeat: repeat-x;
+ position: relative;
+ border-bottom : 1px solid #EEE;
+}
+
+div.statements div
+{
+ position: absolute;
+ width: 250px;
+ top: 20px;
+}
+
+div.statements div p
+{
+ font-size: 13px;
+ color: #818181;
+}
+
+div.statements div.whatis
+{
+ left: 20px;
+}
+
+div.statements div.whatreq
+{
+ left: 290px;
+}
+
+div.statements div.cani
+{
+ left: 600px;
+ width: 210px;
+}
+
+/* navbar */
+#navbar
+{
+ border-bottom: 2px solid #E9EEEF;
+ height: 30px;
+ margin-bottom: 20px;
+}
+
+#navbar ul
+{
+ margin-left: 0;
+ padding-left: 0;
+ display: inline;
+}
+
+#navbar ul li
+{
+ margin-left: 0px;
+ list-style: none;
+ display: inline;
+}
+
+#navbar ul li a
+{
+ display: block;
+ float: left;
+ font-size: 14px;
+ font-weight: bold;
+ padding-right: 14px;
+ padding-top: 5px;
+ color: #CD2B26;
+ text-decoration: none;
+ height: 29px;
+}
+
+#navbar ul li a.active, #navbar ul li a.hover
+{
+ color: #821B18;
+}
+
+/* infobar */
+div#infobar
+{
+ float: right;
+ width: 200px;
+ padding-left: 20px;
+ border-left: 2px solid #E9EEEF;
+}
+
+div#infobar div
+{
+ margin-bottom: 20px;
+}
+
+div#infobar div#featured img
+{
+ margin-top: 10px;
+}
+
+/* articles */
+
+div#articles
+{
+ width: 560px;
+ float: left;
+}
+
+/* article */
+
+div.article
+{
+ margin-bottom: 40px;
+}
+
+div.article .date
+{
+ color: #9F9291;
+}
+
+div.article .more
+{
+ margin-right: 10px;
+ display: block;
+ text-align: right;
+}
+
+.logo
+{
+ position: absolute;
+ margin-left: 15px;
+ margin-top: 0px;
+ z-index: 1;
+}
+
+#main
+{
+ padding: 20px;
+ padding-top: 20px;
+ background-color: #fff;
+}
+
+div.mantis
+{
+ height: 190px;
+ background-color: #fff;
+ border-bottom: 1px solid #DCDCDC;
+}
+
+div.releases
+{
+ float: left;
+ width: 240px;
+ height: 190px;
+}
+
+div.releases div.official
+{
+ width: 190px;
+ position: relative;
+ left: 52px;
+ top: 128px;
+ font-size: 8pt;
+ color: #6D6D6D;
+}
+
+div.releases div.official a
+{
+ display: block;
+}
+
+div.whyprado
+{
+ display: block;
+ float: left;
+}
+
+div.whyprado ul.list
+{
+ margin-top: 40px;
+ margin-left: 40px;
+}
+
+div.whyprado ul.list li
+{
+ display: block;
+ margin: 5px;
+ padding: 0px;
+ font-size: 18px;
+ background-repeat: no-repeat;
+ background-position: bottom left;
+ padding-left: 30px;
+ list-style: none;
+}
+
+
+#footer
+{
+ border-top: 1px solid #e9eeef;
+ background-color: #fff;
+ clear: both;
+ color: #A7A7A7;
+ font-size: 8pt;
+ text-align: center;
+ padding-top: 10px;
+ padding-bottom: 30px;
+ background-repeat: repeat-x;
+ background-position: bottom;
+}
+
+#features
+{
+ margin-left: 610px;
+ padding: 10px;
+ padding-left: 10px;
+ padding-right: 10px;
+ background-color: #BEDD75;
+ color: #344A1E;
+ font-size: 9pt;
+}
+
+#features ul
+{
+ margin: 10px;
+ padding: 0px;
+}
+
+#features ul li
+{
+ font-size: 8pt;
+ padding: 0px;
+ margin: 0px;
+ margin-top: 8px;
+}
+
+#features h3
+{
+ margin: 0px;
+ padding: 0px;
+ font-size: 10pt;
+ color: #292E1D;
+ text-align: center;
+ border-bottom: 1px solid silver;
+}
+
+#news
+{
+ float: left;
+ width: 590px;
+}
+
+.newstitle
+{
+ font-size: 12pt;
+ font-weight: bold;
+ color: #555;
+ margin-top: 10px;
+ margin-bottom: 0px;
+ border-bottom: 1px solid silver;
+}
+
+.newscontentmore
+{
+ margin-right: 10px;
+ display: block;
+ color: #50811A;
+ text-align: right;
+}
+
+.newscontentmore:hover
+{
+ color: red;
+}
+
+.newstime
+{
+ margin: 0px;
+ font-size:0.8em;
+ color:#aaa;
+ padding-left:10px;
+ text-align: right;
+}
+
+.newscontent
+{
+ margin-top: 5px;
+}
+
+#leftpanel
+{
+ float: left;
+ width: 550px;
+}
+
+#topics
+{
+ border: 1px solid #804040;
+ margin-left: 610px;
+ padding-bottom: 10px;
+}
+
+#topicsheader
+{
+ text-align:center;
+ font-weight:bold;
+ background-color:#804040;
+ color:#FFFFBC;
+ padding: 3px;
+ margin-bottom:0px;
+}
+
+.topicitem
+{
+ padding: 5px;
+}
+
+.topicitem a:hover
+{
+ text-decoration: underline;
+}
+
+.topicitem p
+{
+ margin: 0px;
+ font-size:0.8em;
+ color:#aaa;
+ padding-left:10px;
+ white-space:nowrap;
+}
+
+.reference
+{
+}
+
+.reference img
+{
+ margin: 10px;
+}
+
+.reference h3
+{
+}
+
+
+.download
+{
+ width: 100%;
+ background-color: #aaa;
+}
+
+.download td
+{
+ background-color: #FFFFFF;
+ padding: 5px;
+ font-size: 9pt;
+}
+
+.download td a
+{
+ font-weight: bold;
+}
+
+.download td.type
+{
+ font-family: "courier new", courier;
+ text-align: right;
+ vertical-align: top;
+}
+
+.download div.declaration
+{
+ font-family: "courier new", courier;
+}
+
+
+.download th
+{
+ background-color: #F0F0F0;
+ font-weight: bold;
+ padding: 5px;
+ text-align: left;
+}
+
+.download th.small
+{
+ font-size: 1.0em;
+}
+
+.download tr.reference td {
+ background-color: #FFEDED;
+}
+
+
+.doc-title
+{
+ font-size: 14pt;
+ font-weight: bold;
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+
+.doc-subtitle
+{
+ font-size: 11pt;
+ font-weight: bold;
+ background-color: #EEE;
+ padding: 5px;
+ margin-top: 20px;
+}
+
+.doc-namespace
+{
+ font-size: 8pt;
+}
+
+
+.doc-menu
+{
+}
+
+.doc-classes
+{
+}
+
+.doc-ancestors
+{
+ font-size: 8pt;
+}
+
+.doc-properties
+{
+ font-size: 9pt;
+}
+
+.doc-properties table
+{
+ border-collapse: collapse;
+ background-color: silver;
+ width: 100%;
+}
+
+.doc-properties td, .doc-properties th
+{
+ padding: 3px;
+ vertical-align: top;
+ background-color: white;
+ border: 1px solid silver;
+}
+
+.doc-events
+{
+ font-size: 9pt;
+}
+
+.doc-events table
+{
+ border-collapse: collapse;
+ background-color: silver;
+ width: 100%;
+}
+
+.doc-events td, .doc-events th
+{
+ padding: 3px;
+ vertical-align: top;
+ background-color: white;
+ border: 1px solid silver;
+}
+
+.doc-methods
+{
+ font-size: 9pt;
+}
+
+.doc-methods table
+{
+ border-collapse: collapse;
+ background-color: silver;
+ width: 100%;
+}
+
+.doc-methods td, .doc-methods th
+{
+ padding: 3px;
+ vertical-align: top;
+ background-color: white;
+ border: 1px solid silver;
+}
+
+.doc-derived
+{
+}
+
+.doc-inherited
+{
+}
+
+.doc-native td
+{
+ background-color: lightyellow;
+}
+
+.forum-topic
+{
+ padding: 10px;
+ border:1px solid silver;
+ margin-bottom: 10px;
+}
diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/media/stylesheet.css b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/media/stylesheet.css new file mode 100644 index 00000000..2c08f94f --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/media/stylesheet.css @@ -0,0 +1,129 @@ +BODY, DIV, SPAN, PRE, CODE, TD, TH {
+ line-height: 140%;
+ font-size: 10pt;
+ font-family: verdana,arial,sans-serif;
+}
+
+H1 {
+ font-size: 12pt;
+}
+
+H4 {
+ font-size: 10pt;
+ font-weight: bold;
+}
+
+P.label {
+ margin-bottom: 5px;
+}
+P.dt {
+ margin-top: 0px;
+ margin-bottom: 0px;
+}
+P.indent {
+ margin-top: 0px;
+ margin-left: 20px;
+ margin-bottom: 0px;
+}
+P.method {
+ background-color: #f0f0f0;
+ padding: 2px;
+ border: 1px #cccccc solid;
+}
+
+A {
+ text-decoration: none;
+}
+
+A:link{
+ color: #336699;
+}
+
+A:visited {
+ color: #003366;
+}
+
+A:active, A:hover {
+ color: #6699CC;
+}
+
+A:hover{
+ text-decoration: underline;
+}
+
+SPAN.type {
+ color: #336699;
+ font-size: xx-small;
+ font-weight: normal;
+ }
+
+PRE {
+ background-color: #EEEEEE;
+ padding: 10px;
+ border-width: 1px;
+ border-color: #336699;
+ border-style: solid;
+}
+
+HR {
+ color: #336699;
+ background-color: #336699;
+ border-width: 0px;
+ height: 1px;
+ filter: Alpha (opacity=100,finishopacity=0,style=1);
+}
+
+DIV.sdesc {
+ font-weight: bold;
+ background-color: #EEEEEE;
+ padding: 10px;
+ border-width: 1px;
+ border-color: #336699;
+ border-style: solid;
+}
+
+DIV.desc {
+ font-family: monospace;
+ background-color: #EEEEEE;
+ padding: 10px;
+ border-width: 1px;
+ border-color: #336699;
+ border-style: solid;
+}
+
+SPAN.code {
+ font-family: monospace;
+}
+
+CODE.varsummarydefault{
+ padding: 1px;
+ border-width: 1px;
+ border-style: dashed;
+ border-color: #336699;
+}
+
+UL.tute {
+ margin: 0px;
+ padding: 0px;
+ padding-left: 5px;
+ }
+
+LI.tute {
+ line-height: 140%;
+ font-size: 10pt;
+ text-indent: -15px;
+ padding-bottom: 2px;
+ padding-left: 14px;
+}
+
+.small{
+ font-size: 9pt;
+}
+
+
+.tute-tag { color: #009999 }
+.tute-attribute-name { color: #0000FF }
+.tute-attribute-value { color: #0099FF }
+.tute-entity { font-weight: bold; }
+.tute-comment { font-style: italic }
+.tute-inline-tag { color: #636311; font-weight: bold }
diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/method.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/method.tpl new file mode 100644 index 00000000..07cb76e5 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/method.tpl @@ -0,0 +1,58 @@ +{section name=methods loop=$methods}
+{if $show == 'summary'}
+method {$methods[methods].function_call}, {$methods[methods].sdesc}<br />
+{else}
+ <hr />
+ <a name="{$methods[methods].method_dest}"></a>
+ <h3>{if $methods[methods].ifunction_call.constructor}constructor {elseif $methods[methods].ifunction_call.destructor}destructor {else}method {/if}{$methods[methods].function_name} <span class="smalllinenumber">[line {if $methods[methods].slink}{$methods[methods].slink}{else}{$methods[methods].line_number}{/if}]</span></h3>
+ <div class="function">
+ <table width="90%" border="0" cellspacing="0" cellpadding="1"><tr><td class="code_border">
+ <table width="100%" border="0" cellspacing="0" cellpadding="2"><tr><td class="code">
+ <code>{$methods[methods].function_return} {if $methods[methods].ifunction_call.returnsref}&{/if}{$methods[methods].function_name}(
+{if count($methods[methods].ifunction_call.params)}
+{section name=params loop=$methods[methods].ifunction_call.params}
+{if $smarty.section.params.iteration != 1}, {/if}
+{if $methods[methods].ifunction_call.params[params].default != ''}[{/if}{$methods[methods].ifunction_call.params[params].type}
+{$methods[methods].ifunction_call.params[params].name}{if $methods[methods].ifunction_call.params[params].default != ''} = {$methods[methods].ifunction_call.params[params].default}]{/if}
+{/section}
+{/if})</code>
+ </td></tr></table>
+ </td></tr></table><br />
+
+ {include file="docblock.tpl" sdesc=$methods[methods].sdesc desc=$methods[methods].desc tags=$methods[methods].tags}<br /><br />
+
+{if $methods[methods].descmethod}
+ <p>Overridden in child classes as:<br />
+ {section name=dm loop=$methods[methods].descmethod}
+ <dl>
+ <dt>{$methods[methods].descmethod[dm].link}</dt>
+ <dd>{$methods[methods].descmethod[dm].sdesc}</dd>
+ </dl>
+ {/section}</p>
+{/if}
+{* original {if $methods[methods].descmethod != ""
+ {$methods[methods].descmethod<br /><br />
+ {/if *}
+{if $methods[methods].method_overrides}Overrides {$methods[methods].method_overrides.link} ({$methods[methods].method_overrides.sdesc|default:"parent method not documented"})<br /><br />{/if}
+{* original {if $methods[methods].method_overrides != ""
+ {$methods[methods].method_overrides<br /><br />
+ {/if *}
+
+ {if count($methods[methods].params) > 0}
+ <h4>Parameters:</h4>
+ <div class="tags">
+ <table border="0" cellspacing="0" cellpadding="0">
+ {section name=params loop=$methods[methods].params}
+ <tr>
+ <td class="type">{$methods[methods].params[params].datatype} </td>
+ <td><b>{$methods[methods].params[params].var}</b> </td>
+ <td>{$methods[methods].params[params].data}</td>
+ </tr>
+ {/section}
+ </table>
+ </div><br />
+ {/if}
+ <div class="top">[ <a href="#top">Top</a> ]</div>
+ </div>
+{/if}
+{/section}
diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/packages.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/packages.tpl new file mode 100644 index 00000000..b48b6719 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/packages.tpl @@ -0,0 +1,3 @@ +{section name=packages loop=$packages}
+<a href="{$packages[packages].link}">{$packages[packages].title}</a>
+{/section}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/page.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/page.tpl new file mode 100644 index 00000000..6dd8683d --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/page.tpl @@ -0,0 +1,31 @@ +{include file="header.tpl" eltype="Procedural file" class_name=$name hasel=true contents=$pagecontents}
+
+<br>
+<br>
+
+{if $classes}
+<div class="contents">
+{if $tutorial}
+<span class="maintutorial">Main Tutorial: {$tutorial}</span>
+{/if}
+<h2>Classes:</h2>
+{section name=classes loop=$classes}
+<dt>{$classes[classes].link}</dt>
+ <dd>{$classes[classes].sdesc}</dd>
+{/section}
+</div><br /><br />
+{/if}
+
+<h2>Page Details:</h2>
+{include file="docblock.tpl" type="page"}
+<br /><br />
+{include file="include.tpl"}
+<br /><br />
+{include file="global.tpl"}
+<br /><br />
+{include file="define.tpl"}
+<br />
+{include file="function.tpl"}
+
+{include file="footer.tpl"}
+
diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/pkgelementindex.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/pkgelementindex.tpl new file mode 100644 index 00000000..753ad7cf --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/pkgelementindex.tpl @@ -0,0 +1,5 @@ +{include file="header.tpl"}
+<a name="top"></a>
+<h1>Element index for package {$package}</h1>
+{include file="basicindex.tpl" indexname=elementindex_$package}
+{include file="footer.tpl"}
diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/ric.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/ric.tpl new file mode 100644 index 00000000..c4cb83f9 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/ric.tpl @@ -0,0 +1,6 @@ +{include file="header.tpl"}
+<h1 align="center">{$name}</h1>
+<pre>
+{$contents|htmlentities}
+</pre>
+{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/todolist.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/todolist.tpl new file mode 100644 index 00000000..5ab0bca2 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/todolist.tpl @@ -0,0 +1,14 @@ +{include file="header.tpl" title="Todo List"}
+<div align="center"><h1>Todo List</h1></div>
+{foreach from=$todos key=todopackage item=todo}
+<h2>{$todopackage}</h2>
+{section name=todo loop=$todo}
+<h3>{$todo[todo].link}</h3>
+<ul>
+{section name=t loop=$todo[todo].todos}
+ <li>{$todo[todo].todos[t]}</li>
+{/section}
+</ul>
+{/section}
+{/foreach}
+{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/tutorial.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/tutorial.tpl new file mode 100644 index 00000000..22c71c3b --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/tutorial.tpl @@ -0,0 +1,32 @@ +{include file="header.tpl" title=$title}
+{if $nav}
+<table width="100%" border="0" cellpadding="0" cellspacing="0">
+<tr>
+<td width="10%" align="left" valign="bottom">{if $prev}<a href=
+"{$prev}">{/if}Prev{if $prev}</a>{/if}</td>
+<td width="80%" align="center" valign="bottom"></td>
+<td width="10%" align="right" valign="bottom">{if $next}<a href=
+"{$next}">{/if}Next{if $next}</a>{/if}</td>
+</tr>
+</table>
+{/if}
+{$contents}
+{if $nav}
+<table width="100%" border="0" cellpadding="0" cellspacing="0">
+<tr>
+<td width="33%" align="left" valign="top">{if $prev}<a href="{$prev}">{/if}
+Prev{if $prev}</a>{/if}</td>
+<td width="34%" align="center" valign="top">{if $up}<a href=
+"{$up}">Up</a>{else} {/if}</td>
+<td width="33%" align="right" valign="top">{if $next}<a href=
+"{$next}">{/if}Next{if $next}</a>{/if}</td>
+</tr>
+
+<tr>
+<td width="33%" align="left" valign="top">{if $prevtitle}{$prevtitle}{/if}</td>
+<td width="34%" align="center" valign="top">{if $uptitle}{$uptitle}{/if}</td>
+<td width="33%" align="right" valign="top">{if $nexttitle}{$nexttitle}{/if}</td>
+</tr>
+</table>
+{/if}
+{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/tutorial_toc.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/tutorial_toc.tpl new file mode 100644 index 00000000..1db34438 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/tutorial_toc.tpl @@ -0,0 +1,29 @@ +{if count($toc)}
+<h1 align="center">Table of Contents</h1>
+<ul>
+{section name=toc loop=$toc}
+{if $toc[toc].tagname == 'refsect1'}
+{assign var="context" value="refsect1"}
+{$toc[toc].link}<br />
+{/if}
+{if $toc[toc].tagname == 'refsect2'}
+{assign var="context" value="refsect2"}
+ {$toc[toc].link}<br />
+{/if}
+{if $toc[toc].tagname == 'refsect3'}
+{assign var="context" value="refsect3"}
+ {$toc[toc].link}<br />
+{/if}
+{if $toc[toc].tagname == 'table'}
+{if $context == 'refsect2'} {/if}
+{if $context == 'refsect3'} {/if}
+Table: {$toc[toc].link}
+{/if}
+{if $toc[toc].tagname == 'example'}
+{if $context == 'refsect2'} {/if}
+{if $context == 'refsect3'} {/if}
+Table: {$toc[toc].link}
+{/if}
+{/section}
+</ul>
+{/if}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/tutorial_tree.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/tutorial_tree.tpl new file mode 100644 index 00000000..faf7bcef --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/tutorial_tree.tpl @@ -0,0 +1,5 @@ +<ul>
+ <li type="square"><a href="{$main.link}">{$main.title|strip_tags}</a>
+{if $kids}{$kids}</li>{/if}
+</ul>
+
diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/var.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/var.tpl new file mode 100644 index 00000000..c76929fe --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/var.tpl @@ -0,0 +1,28 @@ +{section name=vars loop=$vars}
+{if $show == 'summary'}
+ var {$vars[vars].var_name}, {$vars[vars].sdesc}<br>
+{else}
+ <a name="{$vars[vars].var_dest}"></a>
+ <p></p>
+ <h4>{$vars[vars].var_name} = <span class="value">{$vars[vars].var_default|replace:"\n":"<br>\n"|replace:" ":" "|replace:"\t":" "}</span></h4>
+ <p>[line {if $vars[vars].slink}{$vars[vars].slink}{else}{$vars[vars].line_number}{/if}]</p>
+ {include file="docblock.tpl" sdesc=$vars[vars].sdesc desc=$vars[vars].desc tags=$vars[vars].tags}
+
+ <br />
+ <div class="tags">
+ <table border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td><b>Type:</b> </td>
+ <td>{$vars[vars].var_type}</td>
+ </tr>
+ {if $vars[vars].var_overrides != ""}
+ <tr>
+ <td><b>Overrides:</b> </td>
+ <td>{$vars[vars].var_overrides}</td>
+ </tr>
+ {/if}
+ </table>
+ </div><br /><br />
+ <div class="top">[ <a href="#top">Top</a> ]</div><br />
+{/if}
+{/section}
diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/options.ini b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/options.ini new file mode 100755 index 00000000..e61aeba8 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/options.ini @@ -0,0 +1,577 @@ +preservedocbooktags = false + +;; used to highlight the {@source} inline tag, @filesource tag, and @example tag +[highlightSourceTokens] +;; format: +;; T_CONSTANTNAME = open +;; /T_CONSTANTNAME = close + +T_INCLUDE = <span class="src-inc"> +/T_INCLUDE = </span> +T_INCLUDE_ONCE = <span class="src-inc"> +/T_INCLUDE_ONCE = </span> +T_REQUIRE_ONCE = <span class="src-inc"> +/T_REQUIRE_ONCE = </span> +T_REQUIRE_ONCE = <span class="src-inc"> +/T_REQUIRE_ONCE = </span> + +T_CONSTANT_ENCAPSED_STRING = <span class="src-str"> +/T_CONSTANT_ENCAPSED_STRING = </span> +T_STRING_VARNAME = <span class="src-str"> +/T_STRING_VARNAME = </span> + +T_STRING = <span class="src-id"> +/T_STRING = </span> + +T_DNUMBER = <span class="src-num"> +/T_DNUMBER = </span> +T_LNUMBER = <span class="src-num"> +/T_LNUMBER = </span> + +T_VARIABLE = <span class="src-var"> +/T_VARIABLE = </span> + +T_COMMENT = <span class="src-comm"> +/T_COMMENT = </span> +T_ML_COMMENT = <span class="src-comm"> +/T_ML_COMMENT = </span> + +T_OBJECT_OPERATOR = <span class="src-sym"> +/T_OBJECT_OPERATOR = </span> + +T_ABSTRACT = <span class="src-key"> +/T_ABSTRACT = </span> +T_CLONE = <span class="src-key"> +/T_CLONE = </span> +T_HALT_COMPILER = <span class="src-key"> +/T_HALT_COMPILER = </span> +T_ARRAY = <span class="src-key"> +/T_ARRAY = </span> +T_AS = <span class="src-key"> +/T_AS = </span> +T_BREAK = <span class="src-key"> +/T_BREAK = </span> +T_CLASS = <span class="src-key"> +/T_CLASS = </span> +T_CASE = <span class="src-key"> +/T_CASE = </span> +T_CONST = <span class="src-key"> +/T_CONST = </span> +T_CONTINUE = <span class="src-key"> +/T_CONTINUE = </span> +T_DECLARE = <span class="src-key"> +/T_DECLARE = </span> +T_DEFAULT = <span class="src-key"> +/T_DEFAULT = </span> +T_ELSE = <span class="src-key"> +/T_ELSE = </span> +T_ELSEIF = <span class="src-key"> +/T_ELSEIF = </span> +T_EMPTY = <span class="src-key"> +/T_EMPTY = </span> +T_ENDDECLARE = <span class="src-key"> +/T_ENDDECLARE = </span> +T_ENDFOR = <span class="src-key"> +/T_ENDFOR = </span> +T_ENDSWITCH = <span class="src-key"> +/T_ENDSWITCH = </span> +T_ENDFOREACH = <span class="src-key"> +/T_ENDFOREACH = </span> +T_ENDIF = <span class="src-key"> +/T_ENDIF = </span> +T_ENDWHILE = <span class="src-key"> +/T_ENDWHILE = </span> +T_EXIT = <span class="src-key"> +/T_EXIT = </span> +T_EXTENDS = <span class="src-key"> +/T_EXTENDS = </span> +T_FINAL = <span class="src-key"> +/T_FINAL = </span> +T_FOR = <span class="src-key"> +/T_FOR = </span> +T_FOREACH = <span class="src-key"> +/T_FOREACH = </span> +T_FUNCTION = <span class="src-key"> +/T_FUNCTION = </span> +T_GLOBAL = <span class="src-key"> +/T_GLOBAL = </span> +T_IF = <span class="src-key"> +/T_IF = </span> +T_IMPLEMENTS = <span class="src-key"> +/T_IMPLEMENTS = </span> +T_INTERFACE = <span class="src-key"> +/T_INTERFACE = </span> +T_LOGICAL_AND = <span class="src-key"> +/T_LOGICAL_AND = </span> +T_LOGICAL_OR = <span class="src-key"> +/T_LOGICAL_OR = </span> +T_LOGICAL_XOR = <span class="src-key"> +/T_LOGICAL_XOR = </span> +T_NEW = <span class="src-key"> +/T_NEW = </span> +T_PRIVATE = <span class="src-key"> +/T_PRIVATE = </span> +T_PROTECTED = <span class="src-key"> +/T_PROTECTED = </span> +T_PUBLIC = <span class="src-key"> +/T_PUBLIC = </span> +T_RETURN = <span class="src-key"> +/T_RETURN = </span> +T_STATIC = <span class="src-key"> +/T_STATIC = </span> +T_SWITCH = <span class="src-key"> +/T_SWITCH = </span> +T_VAR = <span class="src-key"> +/T_VAR = </span> +T_WHILE = <span class="src-key"> +/T_WHILE = </span> + +T_DOUBLE_COLON = <span class="src-sym"> +/T_DOUBLE_COLON = </span> + +T_OPEN_TAG = <span class="src-php"> +/T_OPEN_TAG = </span> +T_OPEN_TAG_WITH_ECHO = <span class="src-php"> +/T_OPEN_TAG_WITH_ECHO = </span> +T_CLOSE_TAG = <span class="src-php"> +/T_CLOSE_TAG = </span> + + +[highlightSource] +;; this is for highlighting things that aren't tokens like "&" +;; format: +;; word = open +;; /word = close +@ = <span class="src-sym"> +/@ = </span> +& = <span class="src-sym"> +/& = </span> +[ = <span class="src-sym"> +/[ = </span> +] = <span class="src-sym"> +/] = </span> +! = <span class="src-sym"> +/! = </span> +";" = <span class="src-sym"> +/; = </span> +( = <span class="src-sym"> +/( = </span> +) = <span class="src-sym"> +/) = </span> +, = <span class="src-sym"> +/, = </span> +{ = <span class="src-sym"> +/{ = </span> +} = <span class="src-sym"> +/} = </span> +""" = <span class="src-str"> +/" = </span> + +[highlightDocBlockSourceTokens] +;; this is for docblock tokens, using by phpDocumentor_HighlightParser +;; tagphptype is for "string" in @param string description, for example +docblock = <span class="src-doc"> +/docblock = </span> +tagphptype = <span class="src-doc-type"> +/tagphptype = </span> +tagvarname = <span class="src-doc-var"> +/tagvarname = </span> +coretag = <span class="src-doc-coretag"> +/coretag = </span> +tag = <span class="src-doc-tag"> +/tag = </span> +inlinetag = <span class="src-doc-inlinetag"> +/inlinetag = </span> +internal = <span class="src-doc-internal"> +/internal = </span> +closetemplate = <span class="src-doc-close-template"> +/closetemplate = </span> +docblocktemplate = <span class="src-doc-template"> +/docblocktemplate = </span> + +[highlightTutorialSourceTokens] +;; this is for XML DocBook-based tutorials, highlighted by phpDocumentor_TutorialHighlightParser +;; <tag> +opentag = <span class="tute-tag"> +/opentag = </span> +;; </tag> +closetag = <span class="tute-tag"> +/closetag = </span> +;; <tag attribute="value"> +attribute = <span class="tute-attribute-name"> +/attribute = </span> +;; <tag attribute="value"> +attributevalue = <span class="tute-attribute-value"> +/attributevalue = </span> +;; &entity; +entity = <span class="tute-entity"> +/entity = </span> +;; <!-- comment --> +comment = <span class="tute-comment"> +/comment = </span> +;; {@inline tag} +itag = <span class="tute-inline-tag"> +/itag = </span> + +;; used for translation of html in DocBlocks +[desctranslate] +ul = <ul> +/ul = </ul> +ol = <ol> +/ol = </ol> +li = <li> +/li = </li> +code = +/code = +var = <var> +/var = </var> +samp = <samp> +/samp = </samp> +kbd = <kbd> +/kbd = </kbd> +pre = <pre> +/pre = </pre> +p = <p> +/p = </p> +b = <strong> +/b = </strong> +i = <em> +/i = </em> +br = <br /> + +[ppage] +;; this is the DocBook package page translation section. All DocBook tags +;; that have a corresponding html tag must be listed here. Entities should +;; also be listed here +;; +;; examples: +;; 1) +;; tagname = newtagname +;; +;; This is the simplest case, where all attributes will be added into the +;; starting tag and the ending tag will be html/xml style </tranlatedtagname> +;; <tagname></tagname> becomes <newtagname></newtagname> and +;; <tagname attr="value"></tagname> becomes +;; <newtagname attr="value"></newtagname> +;; +;; 2) +;; tagname = newtagname +;; tagname->attr = newattrname +;; +;; in this case, everything will be like the first case, except tags like: +;; <tagname attr="value"></tagname> will become +;; <newtagname newattrname="value"></newtagname> +;; +;; 3) +;; tagname = newtagname +;; tagname->attr = newattrname +;; tagname->attr+value = newvalue +;; +;; in this case, the value is also translated to another. This can be useful +;; for instances such as focus="middle" changing to align="center" or something +;; of that nature. +;; <tagname attr="value"></tagname> will become +;; <newtagname newattrname="newvalue"></newtagname> +;; +;; 4) +;; tagname = newtagname +;; tagname->attr1 = newattrname +;; tagname->attr2 = newattrname +;; tagname->attr1+value|attr2+value = newvalue +;; +;; in this case, two attributes combine to make one new attribute, and the combined +;; value is translated into a new value +;; <tagname attr1="value1" attr2="value2"></tagname> will become +;; <newtagname newattrname="newvalue"></newtagname> +;; +;; 5) +;; tagname = newtagname +;; tagname!attr = dummy +;; +;; here, the attribute will be ignored. dummy is not used and may be any value +;; <tagname attr="value"></tagname> will become +;; <newtagname></newtagname> +;; +;; 6) +;; tagname = newtagname +;; tagname! = dummy +;; +;; here, all attributes will be ignored. dummy is not used and may be any value +;; <tagname attr1="value" attr2="foo"></tagname> will become +;; <newtagname></newtagname> +;; +;; 7) +;; tagname = newtagname +;; tagname/ = 1 +;; +;; here, the tag will be translated as a single tag with no closing tag, and all +;; attributes +;; <tagname attr="val">{text text}</tagname> will become +;; <newtagname attr="val" /> +;; +;; 8) +;; tagname = <starttaginfo /> +;; /tagname = closetagtext +;; +;; in this case, the text <starttaginfo> will be inserted exactly as entered for +;; <tagname> and closetagtext for </tagname> +;; <tagname attr="val"></tagname> will become +;; <starttaginfo />closetagtext +;; +;; 9) +;; $attr$my_attribute = newattrname +;; +;; tagname = newtagname +;; +;; in this case, all occurences of my_attribute in any tag will be changed to +;; newattrname. This is useful for changing things like role="php" to +;; class="php," for example. Note that the text "$attr$" MUST be on the line +;; start for phpDocumentor to recognize it. +;; +;; 10) +;; &entity; = translation text +;; " = " +;; " = """ +;; < = < +;; +;; Use this to control translation of entities to their appropriate values + + = +" = " +” = ” +“ = “ +& = & +< = < +> = > +© = © + +$attr$role = class + +abbrev = abbr + +blockquote = blockquote + +arg = span +arg->choice = class + +author = <span class="author"> +/author = </span> +author! = 0 + +authorblurb = <div class="author-blurb"> +/authorblurb = </div> + +authorgroup = <div class="authors"><h2 class="title">Authors</h2> +/authorgroup = </div> +authorgroup! = 0 + +caution = <span class="warning"> +/caution = </span> +caution! = 0 + +cmdsynopsis = <div class="cmd-synopsis"> +/cmdsynopsis = </div> + +command = <span class="cmd-title"> +/command = </span> + +copyright = <div class="notes"> +/copyright = </div> + +emphasis = em + +example = <div class="src-code"> +/example = </div> +example! = 0 + +function = +/function = () + +formalpara = p + +graphic = img +graphic->fileref = src +graphic/ = + +important = strong + +informalequation = blockquote + +informalexample = div + +inlineequation = em + +itemizedlist = ul + +listitem = li + +literal = code + +literallayout = span + +option = " " +/option = + +orderedlist = ol + +para = p + +programlisting = <div class="src-code"> +/programlisting = </div> +programlisting! = 0 + +refentry = div + +refnamediv = <div class="ref-title-box"> +/refnamediv = </div> +refnamediv! = 0 + +refname = <h1 class="ref-title"> +/refname = </h1> + +refpurpose = <h2 class="ref-purpose"> +/refpurpose = </h2> + +refsynopsisdiv = <div class="ref-synopsis"> +/refsynopsisdiv = </div> +refsynopsisdiv! = 0 + +refsect1 = span + +refsect2 = +/refsect2 = <hr /> + +refsect3 = +/refsect3 = <br /> + +releaseinfo = <div class="release-info">( +/releaseinfo = )</div> + +simpara = +/simpara = <br /> +simpara! = 0 + +subscript = sub + +superscript = super + +table = table + +table->colsep = rules +table->rowsep = rules +table->colsep+1|rowsep+1 = all +table->colsep+1|rowsep+0 = cols +table->colsep+0|rowsep+1 = rows + +table->frame = frame +table->frame+all = border +table->frame+none = void +table->frame+sides = vsides +table->frame+top = above +table->frame+topbot = hsides + +thead = thead + +tfoot = tfoot + +tbody = tbody + +colspec = col + +tgroup = colgroup +tgroup/ = 1 +tgroup->cols = span + +row = tr + +entry = td +entry->morerows = colspan +entry->morerows+1 = 2 +entry->morerows+2 = 3 +entry->morerows+3 = 4 +entry->morerows+4 = 5 +entry->morerows+5 = 6 +entry->morerows+6 = 7 +entry->morerows+7 = 8 +entry->morerows+8 = 9 +entry->morerows+9 = 10 +entry->morerows+10 = 11 +;; add more if you need more colspans + +warning = <span class="warning"> +/warning = </span> +warning! = 0 + +;; now begins the attributes that should be tags in cdata +[$attr$id] +open = a +;close = /a +cdata! = true +quotevalues = true +separator = "=" +;separateall = true +$id = name + +;; now begins the sections that deal with <title> +[refsynopsisdiv_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h1 class="title" align="center"> +close = </h1> + +[refsect1_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h2 class="title"> +close = </h2> + +[refsect2_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h3 class="title"> +close = </h3> + +[refsect3_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h4 class="title"> +close = </h4> + +[para_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <div class="title"> +close = </div> + +[formalpara_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <div class="title"> +close = </div> + +[example_title] +;tag_attr = true +;attr_name = title +;cdata_start = true +cdata_end = true +open = </td></tr><tr><td><strong> +close = </strong> + +[table_title] +;tag_attr = true +;attr_name = true +cdata_start = true +open = <caption> +close = </caption> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/basicindex.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/basicindex.tpl new file mode 100755 index 00000000..b3f0c4a4 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/basicindex.tpl @@ -0,0 +1,17 @@ +{section name=letter loop=$letters} + <a href="{$indexname}.html#{$letters[letter].letter}">{$letters[letter].letter}</a> +{/section} + +{section name=index loop=$index} + <a name="{$index[index].letter}"></a> + <a href="{$indexname}.html#top">top</a><br> + <div> + <h2>{$index[index].letter}</h2> + <dl class="lettercontents"> + {section name=contents loop=$index[index].index} + <dt>{$index[index].index[contents].name}</dt> + <dd>{$index[index].index[contents].listing}</dd> + {/section} + </dl> + </div> +{/section} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/blank.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/blank.tpl new file mode 100755 index 00000000..aae59975 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/blank.tpl @@ -0,0 +1,5 @@ +<div align="center"><h1>{$maintitle}</h1></div> +<b>Welcome to {$package}!</b><br /> +<br /> +This documentation was generated by <a href="{$phpdocwebsite}">phpDocumentor v{$phpdocversion}</a><br /> + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/class.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/class.tpl new file mode 100755 index 00000000..399116ad --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/class.tpl @@ -0,0 +1,173 @@ +{include file="header.tpl" eltype="class" hasel=true contents=$classcontents} + +{if $conflicts.conflict_type}<p class="warning">Conflicts with classes:<br /> + {section name=me loop=$conflicts.conflicts} + {$conflicts.conflicts[me]}<br /> + {/section} +<p> + {/if} + +<div class="leftcol"> + <h3><a href="#class_details">{if $is_interface}Interface{else}Class{/if} Overview</a> <span class="smalllinenumber">[line {if $class_slink}{$class_slink}{else}{$line_number}{/if}]</span></h3> + <div id="classTree"><pre>{section name=tree loop=$class_tree.classes}{$class_tree.classes[tree]}{$class_tree.distance[tree]}{/section}</pre> +</div> + <div class="small"> + <p>{$sdesc|default:''}</p> + {if $tutorial} + <h4 class="classtutorial">{if $is_interface}Interface{else}Class{/if} Tutorial:</h4> + <ul> + <li>{$tutorial}</li> + </ul> + {/if} + <h4>Author(s):</h4> + <ul> + {section name=tag loop=$tags} + {if $tags[tag].keyword eq "author"} + <li>{$tags[tag].data}</li> + {/if} + {/section} + </ul> + <h4>Version:</h4> + <ul> + {section name=tag loop=$tags} + {if $tags[tag].keyword eq "version"} + <li>{$tags[tag].data}</li> + {/if} + {/section} + </ul> + + <h4>Copyright:</h4> + <ul> + {section name=tag loop=$tags} + {if $tags[tag].keyword eq "copyright"} + <li>{$tags[tag].data}</li> + {/if} + {/section} + </li> + </div> +</div> + +<div class="middlecol"> + <h3><a href="#class_vars">Variables</a></h3> + <ul class="small"> + {section name=contents loop=$contents.var} + <li>{$contents.var[contents]}</li> + {/section} + </ul> + <h3><a href="#class_consts">Constants</a></h3> + <ul class="small"> + {section name=contents loop=$contents.const} + <li>{$contents.const[contents]}</li> + {/section} + </ul> +</div> +<div class="rightcol"> + <h3><a href="#class_methods">Methods</a></h3> + <ul class="small"> + {section name=contents loop=$contents.method} + <li>{$contents.method[contents]}</li> + {/section} + </ul> +</div> + +<div id="content"> +<hr> + <div class="contents"> +{if $children} + <h2>Child classes:</h2> + {section name=kids loop=$children} + <dl> + <dt>{$children[kids].link}</dt> + <dd>{$children[kids].sdesc}</dd> + </dl> + {/section}</p> +{/if} + </div> + + <div class="leftCol"> + {if $implements} + <h2>Implements interfaces</h2> + <ul> + {foreach item="int" from=$implements}<li>{$int}</li>{/foreach} + </ul> + {/if} + <h2>Inherited Variables</h2> + {section name=ivars loop=$ivars} + <div class="indent"> + <h3>Class: {$ivars[ivars].parent_class}</h3> + <div class="small"> + <dl> + {section name=ivars2 loop=$ivars[ivars].ivars} + <dt> + {$ivars[ivars].ivars[ivars2].link} + </dt> + <dd> + {$ivars[ivars].ivars[ivars2].ivars_sdesc} + </dd> + {/section} + </dl> + </div> + </div> + {/section} + <h2>Inherited Constants</h2> + {section name=iconsts loop=$iconsts} + <div class="indent"> + <h3>Class: {$iconsts[iconsts].parent_class}</h3> + <div class="small"> + <dl> + {section name=iconsts2 loop=$iconsts[iconsts].iconsts} + <dt> + {$iconsts[iconsts].iconsts[iconsts2].link} + </dt> + <dd> + {$iconsts[iconsts].iconsts[iconsts2].iconsts_sdesc} + </dd> + {/section} + </dl> + </div> + </div> + {/section} + </div> + + <div class="rightCol"> + <h2>Inherited Methods</h2> + {section name=imethods loop=$imethods} + <div class="indent"> + <h3>Class: {$imethods[imethods].parent_class}</h3> + <dl class="small"> + {section name=im2 loop=$imethods[imethods].imethods} + <dt> + {$imethods[imethods].imethods[im2].link} + </dt> + <dd> + {$imethods[imethods].imethods[im2].sdesc} + </dd> + {/section} + </dl> + </div> + {/section} + </div> + <br clear="all"> + <hr> + + <a name="class_details"></a> + <h2>Class Details</h2> + {include file="docblock.tpl" type="class" sdesc=$sdesc desc=$desc} + <p class="small" style="color: #334B66;">[ <a href="#top">Top</a> ]</p> + + <hr> + <a name="class_vars"></a> + <h2>Class Variables</h2> + {include file="var.tpl"} + + <hr> + <a name="class_methods"></a> + <h2>Class Methods</h2> + {include file="method.tpl"} + + <hr> + <a name="class_consts"></a> + <h2>Class Constants</h2> + {include file="const.tpl"} +</div> +{include file="footer.tpl"} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/classleft.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/classleft.tpl new file mode 100755 index 00000000..7d7de89a --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/classleft.tpl @@ -0,0 +1,8 @@ +{foreach key=subpackage item=files from=$classleftindex} + {if $subpackage != ""}<b>{$subpackage}</b><br>{/if} + {section name=files loop=$files} + {if $files[files].link != ''}<a href="{$files[files].link}">{/if} + {$files[files].title} + {if $files[files].link != ''}</a>{/if}<br> + {/section} +{/foreach} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/classtrees.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/classtrees.tpl new file mode 100755 index 00000000..0c0e974a --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/classtrees.tpl @@ -0,0 +1,17 @@ +{include file="header.tpl" noleftindex=true} +<h1>{$title}</h1> +{if $interfaces} +{section name=classtrees loop=$interfaces} +<hr /> +<div class="classtree">Root interface {$interfaces[classtrees].class}</div><br /> +{$interfaces[classtrees].class_tree} +{/section} +{/if} +{if $classtrees} +{section name=classtrees loop=$classtrees} +<hr /> +<div class="classtree">Root class {$classtrees[classtrees].class}</div><br /> +{$classtrees[classtrees].class_tree} +{/section} +{/if} +{include file="footer.tpl"} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/const.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/const.tpl new file mode 100644 index 00000000..aeab7293 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/const.tpl @@ -0,0 +1,14 @@ +{section name=consts loop=$consts} +{if $show == 'summary'} + var {$consts[consts].const_name}, {$consts[consts].sdesc}<br> +{else} + <a name="{$consts[consts].const_dest}"></a> + <p></p> + <h4>{$consts[consts].const_name} = <span class="value">{$consts[consts].const_value|replace:"\n":"<br>\n"|replace:" ":" "|replace:"\t":" "}</span></h4> + <div class="indent"> + <p class="linenumber">[line {if $consts[consts].slink}{$consts[consts].slink}{else}{$consts[consts].line_number}{/if}]</p> + {include file="docblock.tpl" sdesc=$consts[consts].sdesc desc=$consts[consts].desc tags=$consts[consts].tags} + </div> + <p class="top">[ <a href="#top">Top</a> ]</p> +{/if} +{/section} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/define.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/define.tpl new file mode 100755 index 00000000..0aa7ef76 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/define.tpl @@ -0,0 +1,23 @@ +<div id="define{if $show == 'summary'}_summary{/if}"> +{section name=def loop=$defines} +{if $show == 'summary'} +define constant <a href="{$defines[def].id}">{$defines[def].define_name}</a> = {$defines[def].define_value}, {$defines[def].sdesc}<br> +{else} + <a name="{$defines[def].define_link}"></a> + <h3>{$defines[def].define_name}</h3> + <div class="indent"> + <p class="linenumber">[line {if $defines[def].slink}{$defines[def].slink}{else}{$defines[def].line_number}{/if}]</p> + <p><code>{$defines[def].define_name} = {$defines[def].define_value}</code></p> + {include file="docblock.tpl" sdesc=$defines[def].sdesc desc=$defines[def].desc tags=$defines[def].tags} + {if $defines[def].define_conflicts.conflict_type} + <p><b>Conflicts with defines:</b> + {section name=me loop=$defines[def].define_conflicts.conflicts} + {$defines[def].define_conflicts.conflicts[me]}<br /> + {/section} + </p> + {/if} + </div> + <p class="top">[ <a href="#top">Top</a> ]</p> +{/if} +{/section} +</div> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/docblock.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/docblock.tpl new file mode 100755 index 00000000..9ea60cf2 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/docblock.tpl @@ -0,0 +1,13 @@ +{if $sdesc != ''} +<p align="center"><strong>{$sdesc|default:''} +</strong></p> +{/if} +{if $desc != ''}{$desc|default:''}{/if} +{if count($tags)} +<h4>Tags:</h4> +<ul> +{section name=tag loop=$tags} + <li><b>{$tags[tag].keyword}</b> - {$tags[tag].data}</li> +{/section} +</ul> +{/if} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/elementindex.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/elementindex.tpl new file mode 100755 index 00000000..0ff4a79e --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/elementindex.tpl @@ -0,0 +1,5 @@ +{include file="header.tpl" noleftindex=true} +<a name="top"></a> +<h1>Index of All Elements</h1> +{include file="basicindex.tpl" indexname="elementindex"} +{include file="footer.tpl"} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/errors.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/errors.tpl new file mode 100755 index 00000000..0f526584 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/errors.tpl @@ -0,0 +1,21 @@ +{include file="header.tpl" noleftindex=true} +{section name=files loop=$files} +<a href="#{$files[files].file}">{$files[files].file}</a><br> +{/section} +{foreach key=file item=issues from=$all} +<a name="{$file}"></a> +<h1>{$file}</h1> +{if count($issues.warnings)} +<h2>Warnings:</h2><br> +{section name=warnings loop=$issues.warnings} +<b>{$issues.warnings[warnings].name}</b> - {$issues.warnings[warnings].listing}<br> +{/section} +{/if} +{if count($issues.errors)} +<h2>Errors:</h2><br> +{section name=errors loop=$issues.errors} +<b>{$issues.errors[errors].name}</b> - {$issues.errors[errors].listing}<br> +{/section} +{/if} +{/foreach} +{include file="footer.tpl"} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/examplesource.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/examplesource.tpl new file mode 100755 index 00000000..1bf1f882 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/examplesource.tpl @@ -0,0 +1,6 @@ +{include file="header.tpl" title=$title} +<h1 align="center">{$title}</h1> +<div class="php-src"> +{$source} +</div> +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/fileleft.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/fileleft.tpl new file mode 100755 index 00000000..9e141dc5 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/fileleft.tpl @@ -0,0 +1,8 @@ +{foreach key=subpackage item=files from=$fileleftindex} + {if $subpackage != ""}subpackage <b>{$subpackage}</b><br>{/if} + {section name=files loop=$files} + {if $files[files].link != ''}<a href="{$files[files].link}">{/if} + {$files[files].title} + {if $files[files].link != ''}</a>{/if}<br> + {/section} +{/foreach} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/filesource.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/filesource.tpl new file mode 100755 index 00000000..15f7fbfe --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/filesource.tpl @@ -0,0 +1,8 @@ +{capture name="tutle"}File Source for {$name}{/capture} +{include file="header.tpl" title=$smarty.capture.tutle} +<h1 align="center">Source for file {$name}</h1> +<p>Documentation is available at {$docs}</p> +<div class="php-src"> +{$source} +</div> +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/footer.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/footer.tpl new file mode 100755 index 00000000..0bdda65c --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/footer.tpl @@ -0,0 +1,7 @@ + <div id="credit"> + <hr> + Documentation generated on {$date} by <a href="{$phpdocwebsite}">phpDocumentor {$phpdocversion}</a> + </div> +</div> +</body> +</html> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/function.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/function.tpl new file mode 100755 index 00000000..14fd78eb --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/function.tpl @@ -0,0 +1,39 @@ +<div id="function{if $show == 'summary'}_summary{/if}"> +{section name=func loop=$functions} +{if $show == 'summary'} +function {$functions[func].id}, {$functions[func].sdesc}<br> +{else} + <a name="{$functions[func].function_dest}"></a> + <h3>{$functions[func].function_name}</h3> + <div class="indent"> + <code>{$functions[func].function_return} {if $functions[func].ifunction_call.returnsref}&{/if}{$functions[func].function_name}( +{if count($functions[func].ifunction_call.params)} +{section name=params loop=$functions[func].ifunction_call.params} +{if $smarty.section.params.iteration != 1}, {/if}{if $functions[func].ifunction_call.params[params].hasdefault}[{/if}{$functions[func].ifunction_call.params[params].type} {$functions[func].ifunction_call.params[params].name}{if $functions[func].ifunction_call.params[params].hasdefault} = {$functions[func].ifunction_call.params[params].default|escape:"html"}]{/if} +{/section} +{/if})</code> + <p class="linenumber">[line {if $functions[func].slink}{$functions[func].slink}{else}{$functions[func].line_number}{/if}]</p> + {include file="docblock.tpl" sdesc=$functions[func].sdesc desc=$functions[func].desc tags=$functions[func].tags} + {if $functions[func].function_conflicts.conflict_type} + <p><b>Conflicts with functions:</b> + {section name=me loop=$functions[func].function_conflicts.conflicts} + {$functions[func].function_conflicts.conflicts[me]}<br /> + {/section} + </p> + {/if} + + <h4>Parameters</h4> + <ul> + {section name=params loop=$functions[func].params} + <li> + <span class="type">{$functions[func].params[params].datatype}</span> + <b>{$functions[func].params[params].var}</b> + - + {$functions[func].params[params].data}</li> + {/section} + </ul> + </div> + <p class="top">[ <a href="#top">Top</a> ]</p> +{/if} +{/section} +</div> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/global.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/global.tpl new file mode 100755 index 00000000..9fa52bce --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/global.tpl @@ -0,0 +1,24 @@ +<div id="global{if $show == 'summary'}_summary{/if}"> +{section name=glob loop=$globals} +{if $show == 'summary'} +global variable <a href="{$globals[glob].id}">{$globals[glob].global_name}</a> = {$globals[glob].global_value}, {$globals[glob].sdesc}<br> +{else} + <a name="{$globals[glob].global_link}"></a> + <h3><i>{$globals[glob].global_type}</i> {$globals[glob].global_name}</h3> + <div class="indent"> + <p class="linenumber">[line {if $globals[glob].slink}{$globals[glob].slink}{else}{$globals[glob].line_number}{/if}]</p> + {include file="docblock.tpl" sdesc=$globals[glob].sdesc desc=$globals[glob].desc tags=$globals[glob].tags} + + <p><b>Default Value:</b>{$globals[glob].global_value|replace:"\n":"<br>\n"|replace:" ":" "|replace:"\t":" "}</p> + {if $globals[glob].global_conflicts.conflict_type} + <p><b>Conflicts with globals:</b> + {section name=me loop=$globals[glob].global_conflicts.conflicts} + {$globals[glob].global_conflicts.conflicts[me]}<br /> + {/section} + </p> + {/if} + </div> + <p class="top">[ <a href="#top">Top</a> ]</p> +{/if} +{/section} +</div> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/header.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/header.tpl new file mode 100755 index 00000000..f23687eb --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/header.tpl @@ -0,0 +1,101 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> + <title>{$title}</title> + <link rel="stylesheet" type="text/css" id="layout" href="{$subdir}media/layout.css" media="screen"> + <link rel="stylesheet" type="text/css" href="{$subdir}media/style.css" media="all"> + <link rel="stylesheet" type="text/css" href="{$subdir}media/print.css" media="print"> +</head> + +<body> +<div id="header"> + <div id="navLinks"> + {assign var="packagehaselements" value=false} + {foreach from=$packageindex item=thispackage} + {if in_array($package, $thispackage)} + {assign var="packagehaselements" value=true} + {/if} + {/foreach} + {if $packagehaselements} + [ <a href="{$subdir}classtrees_{$package}.html">Class Tree: {$package}</a> ] + [ <a href="{$subdir}elementindex_{$package}.html">Index: {$package}</a> ] + {/if} + [ <a href="{$subdir}elementindex.html">All elements</a> ] + </div> + <div id="packagePosition"> + <div id="packageTitle2">{$package}</div> + <div id="packageTitle">{$package}</div> + <div id="elementPath">{$subpackage} · {$current}</div> + </div> +</div> + +<div id="nav" class="small"> +{if count($ric) >= 1} + <div id="ric"> + {section name=ric loop=$ric} + <p><a href="{$subdir}{$ric[ric].file}">{$ric[ric].name}</a></p> + {/section} + </div> +{/if} +{if $hastodos} + <div id="todolist"> + <p><a href="{$subdir}{$todolink}">Todo List</a></p> + </div> +{/if} + <div id="packages"> + Packages: + {section name=packagelist loop=$packageindex} + <p><a href="{$subdir}{$packageindex[packagelist].link}">{$packageindex[packagelist].title}</a></p> + {/section} + </div> +{if $tutorials} + <div id="tutorials"> + Tutorials/Manuals:<br /> + {if $tutorials.pkg} + <strong>Package-level:</strong> + {section name=ext loop=$tutorials.pkg} + {$tutorials.pkg[ext]} + {/section} + {/if} + {if $tutorials.cls} + <strong>Class-level:</strong> + {section name=ext loop=$tutorials.cls} + {$tutorials.cls[ext]} + {/section} + {/if} + {if $tutorials.proc} + <strong>Procedural-level:</strong> + {section name=ext loop=$tutorials.proc} + {$tutorials.proc[ext]} + {/section} + {/if} + </div> +{/if} + + {if !$noleftindex}{assign var="noleftindex" value=false}{/if} + {if !$noleftindex} + <div id="index"> + <div id="files"> + {if $compiledfileindex} + Files:<br> + {eval var=$compiledfileindex}{/if} + </div> + <div id="interfaces"> + {if $compiledinterfaceindex}Interfaces:<br> + {eval var=$compiledinterfaceindex}{/if} + </div> + <div id="classes"> + {if $compiledclassindex}Classes:<br> + {eval var=$compiledclassindex}{/if} + </div> + </div> + {/if} +</div> + +<div id="body"> + {if !$hasel}{assign var="hasel" value=false}{/if} + {if $eltype == 'class' && $is_interface}{assign var="eltype" value="interface"}{/if} + {if $hasel} + <h1>{$eltype|capitalize}: {$class_name}</h1> + <p style="margin: 0px;">Source Location: {$source_location}</p> + {/if} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/include.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/include.tpl new file mode 100755 index 00000000..f2f5625d --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/include.tpl @@ -0,0 +1,8 @@ +{if count($includes) > 0} +Includes:<br> +{section name=includes loop=$includes} +{$includes[includes].include_name}({$includes[includes].include_value}) <span class="linenumber">[line {if $includes[includes].slink}{$includes[includes].slink}{else}{$includes[includes].line_number}{/if}]</span> +<br /> +{include file="docblock.tpl" sdesc=$includes[includes].sdesc desc=$includes[includes].desc tags=$includes[includes].tags} +{/section} +{/if}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/index.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/index.tpl new file mode 100755 index 00000000..a493f70e --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/index.tpl @@ -0,0 +1,7 @@ +{include file="header.tpl"} +{if $contents} +{$contents} +{else} +{include file="blank.tpl"} +{/if} +{include file="footer.tpl"} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/layout.css b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/layout.css new file mode 100755 index 00000000..1184cf1f --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/layout.css @@ -0,0 +1,81 @@ +#header { + z-index: 100; + position: absolute; + top: 0px; + left: 0px; + width: 100%; + height: 5%; +} +#nav { + z-index: 200; + position: absolute; + top: 5%; + left: 0px; + width: 15%; + height: 1600px; + clip: auto; + overflow: auto; +} +#body { + position: absolute; + top: 6%; + left: 17%; + width: 82%; +} +#content { + clear: both; + top: -1px; +} +#packagePosition { + position: absolute; + right: 5px; + top: 0px; + width: 35%; + height: 100%; +} +#packageTitle { + position: absolute; + right: 0px; +} +#packageTitle2 { + position: absolute; + right: -3px; + top: -2px; +} +#elementPath { + position: absolute; + right: 0px; + bottom: 0px; +} +#navLinks { + position: absolute; + top: 0px; + left: 10px; + height: 100%; + +} +.leftCol { + width: auto; + float: left; +} +.middleCol { + width: auto; + float: left; +} +.rightCol { + width: auto; + float: left; +} +#credit { + margin-top: 20px; + margin-bottom: 50px; +} + +/** Fixed layout for nav on mozilla */ +head:first-child+body div#header { + position: fixed; +} +head:first-child+body div#nav { + position: fixed; + height: 94% +} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/media/layout.css b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/media/layout.css new file mode 100755 index 00000000..1184cf1f --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/media/layout.css @@ -0,0 +1,81 @@ +#header { + z-index: 100; + position: absolute; + top: 0px; + left: 0px; + width: 100%; + height: 5%; +} +#nav { + z-index: 200; + position: absolute; + top: 5%; + left: 0px; + width: 15%; + height: 1600px; + clip: auto; + overflow: auto; +} +#body { + position: absolute; + top: 6%; + left: 17%; + width: 82%; +} +#content { + clear: both; + top: -1px; +} +#packagePosition { + position: absolute; + right: 5px; + top: 0px; + width: 35%; + height: 100%; +} +#packageTitle { + position: absolute; + right: 0px; +} +#packageTitle2 { + position: absolute; + right: -3px; + top: -2px; +} +#elementPath { + position: absolute; + right: 0px; + bottom: 0px; +} +#navLinks { + position: absolute; + top: 0px; + left: 10px; + height: 100%; + +} +.leftCol { + width: auto; + float: left; +} +.middleCol { + width: auto; + float: left; +} +.rightCol { + width: auto; + float: left; +} +#credit { + margin-top: 20px; + margin-bottom: 50px; +} + +/** Fixed layout for nav on mozilla */ +head:first-child+body div#header { + position: fixed; +} +head:first-child+body div#nav { + position: fixed; + height: 94% +} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/media/print.css b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/media/print.css new file mode 100755 index 00000000..3fcc2baa --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/media/print.css @@ -0,0 +1,25 @@ +BODY { + margin: 1em; +} +#header { +} +#nav { + display: none; +} +#packagePosition { + text-align: right; +} +#packageTitle { + display: inline; + margin: 5px; +} +#packageTitle2 { + display: none; +} +#elementPath { + display: inline; + margin: 5px; +} +#navLinks { + display: none; +} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/media/style.css b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/media/style.css new file mode 100755 index 00000000..041c489a --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/media/style.css @@ -0,0 +1,236 @@ +BODY { + background: #FFFFFF; + font-family: Arial; + margin: 0px; + padding: 0px; +} +A { + color: #CC4400; + font-weight: bold; +} +A:Hover { + color: white; + background-color: #334B66; + font-weight: bold; + text-decoration: none; +} + +#packageTitle { + font-size: 160%; + font-weight: bold; + text-align: right; + color: #CC6633; +} +#packageTitle2 { + font-size: 160%; + font-weight: bold; + text-align: right; + color: #334B66; + background-color: #6699CC; +} +#packageLinks { + background-color: #6699CC; +} +#header { + background-color: #6699CC; + border-bottom: solid #334B66 4px; +} +#nav { + background-color: #6699CC; + padding: 4px; + border-right: solid #334B66 4px; +} +#index { + padding: 18px; +} +hr { + width: 80%; + background-color: #6699CC; + color: #6699CC; + margin-top: 15px; + margin-bottom: 15px; + clear: both; +} +.links { + text-align: left; + width: 98%; + margin: auto; +} +UL { + margin: 0px; + padding: 0px; + padding-left: 5px; + list-style-type: none; +} +li { + text-indent: -15px; + padding-bottom: 2px; + padding-left: 14px; +} +dd { + margin-bottom: .5em; +} +.small { + font-size: 80%; +} +h3 { +} +.middleCol { + margin-left: -1px; + border-right: dotted gray 1px; + border-left: dotted gray 1px; + padding: 5px; +} +.leftCol { + border-right: dotted gray 1px; + padding: 5px; +} +.rightCol { + margin-left: -1px; + border-left: dotted gray 1px; + padding: 5px; +} +#elementPath { + font-size: 14px; + font-weight: bold; + color: #334B66; +} +.constructor { + /*border: dashed #334B66 1px;*/ + font-weight: bold; +} +#credit { + text-align: center; + color: #334B66; + font-weight: bold; +} +div.contents { + border: solid #334B66 1px; + padding: 3px; + margin-bottom: 5px; + clear: all; +} +H1 { + margin: 0px; +} +H2 { + margin: 0px; + margin-bottom: 2px; +} +H3 { + margin: 0px; +} +H4 { + margin: 0px; +} +#classTree { + padding: 0px; + margin: 0px; +} +div.indent { + margin-left: 15px; +} +.warning { + color: red; + background-color: #334B66; + font-weight: bold; +} +code { + font-family: fixed; + padding: 3px; + color: #334B66; + background-color: #dddddd; +} +.type { + color: #334B66; +} +.value { + color: #334B66; + border: dotted #334B66 1px; +} +.top { + color: #334B66; + border-bottom: dotted #334B66 1px; + padding-bottom: 4px; +} +.php-src, .php, .listing { + font-family: fixed; + padding: 3px; + color: #334B66; + background-color: #dddddd; + font-family: 'Courier New', Courier, monospace; font-weight: normal; +} +DIV#nav DL { + margin: 0px; + padding: 0px; + list-style-type: none; +} +div.classtree { + font-size: 130%; + font-weight: bold; + background-color: #CC6633; + border: dotted #334B66 2px; +} +span.linenumber,p.linenumber { + font-weight: bold,italic; +} +span.smalllinenumber { + font-weight: bold,italic; + font-size: 9pt; +} +ul { + margin-left: 0px; + padding-left: 8px; +} +/* Syntax highlighting */ + +.src-code { background-color: #f5f5f5; border: 1px solid #ccc9a4; padding: 0px; margin : 0px} +.src-line { font-family: 'Courier New', Courier, monospace; font-weight: normal; } +/*.src-code pre { }*/ + +.src-comm { color: green; } +.src-id { } +.src-inc { color: #0000FF; } +.src-key { color: #0000FF; } +.src-num { color: #CC0000; } +.src-str { color: #66cccc; } +.src-sym { font-weight: bold; } +.src-var { } + +.src-php { font-weight: bold; } + +.src-doc { color: #009999 } +.src-doc-close-template { color: #0000FF } +.src-doc-coretag { color: #0099FF; font-weight: bold } +.src-doc-inlinetag { color: #0099FF } +.src-doc-internal { color: #6699cc } +.src-doc-tag { color: #0080CC } +.src-doc-template { color: #0000FF } +.src-doc-type { font-style: italic } +.src-doc-var { font-style: italic } + +.tute-tag { color: #009999 } +.tute-attribute-name { color: #0000FF } +.tute-attribute-value { color: #0099FF } +.tute-entity { font-weight: bold; } +.tute-comment { font-style: italic } +.tute-inline-tag { color: #636311; font-weight: bold } + +/* tutorial */ + +.authors { } +.author { font-style: italic; font-weight: bold } +.author-blurb { margin: .5em 0em .5em 2em; font-size: 85%; font-weight: normal; font-style: normal } +.example { border: 1px dashed #999999; background-color: #EEEEEE; padding: .5em; } +.listing { border: 1px dashed #999999; background-color: #EEEEEE; padding: .5em; white-space: nowrap; } +.release-info { font-size: 85%; font-style: italic; margin: 1em 0em } +.ref-title-box { } +.ref-title { } +.ref-purpose { font-style: italic; color: #666666 } +.ref-synopsis { } +.title { font-weight: bold; margin: 1em 0em 0em 0em; padding: .25em; + border: 2px solid #CC6633; background-color: #6699CC } +.cmd-synopsis { margin: 1em 0em } +.cmd-title { font-weight: bold } +.toc { margin-left: 2em; padding-left: 0em } + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/method.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/method.tpl new file mode 100755 index 00000000..f9bcdd38 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/method.tpl @@ -0,0 +1,123 @@ +{section name=methods loop=$methods} +{if $methods[methods].static} +{if $show == 'summary'} + <p>static method {$methods[methods].function_call}, {$methods[methods].sdesc}</p> +{else} + <a name="{$methods[methods].method_dest}"></a> + <p></p> + <h3>static {$methods[methods].function_name}</h3> + <div class="indent"> + <p> + <code>static {$methods[methods].function_return} {if $methods[methods].ifunction_call.returnsref}&{/if}{$methods[methods].function_name}( +{if count($methods[methods].ifunction_call.params)} +{section name=params loop=$methods[methods].ifunction_call.params} +{if $smarty.section.params.iteration != 1}, {/if} +{if $methods[methods].ifunction_call.params[params].hasdefault}[{/if}{$methods[methods].ifunction_call.params[params].type} +{$methods[methods].ifunction_call.params[params].name}{if $methods[methods].ifunction_call.params[params].hasdefault} = {$methods[methods].ifunction_call.params[params].default}]{/if} +{/section} +{/if})</code> + </p> + + <p class="linenumber">[line {if $methods[methods].slink}{$methods[methods].slink}{else}{$methods[methods].line_number}{/if}]</p> + {include file="docblock.tpl" sdesc=$methods[methods].sdesc desc=$methods[methods].desc tags=$methods[methods].tags} + +{if $methods[methods].descmethod} + <p>Overridden in child classes as:<br /> + {section name=dm loop=$methods[methods].descmethod} + <dl> + <dt>{$methods[methods].descmethod[dm].link}</dt> + <dd>{$methods[methods].descmethod[dm].sdesc}</dd> + </dl> + {/section}</p> +{/if} +{if $methods[methods].method_overrides}<p>Overrides {$methods[methods].method_overrides.link} ({$methods[methods].method_overrides.sdesc|default:"parent method not documented"})</p>{/if} + {if $methods[methods].method_implements} + <hr class="separator" /> + <div class="notes">Implementation of:</div> + {section name=imp loop=$methods[methods].method_implements} + <dl> + <dt>{$methods[methods].method_implements[imp].link}</dt> + {if $methods[methods].method_implements[imp].sdesc} + <dd>{$methods[methods].method_implements[imp].sdesc}</dd> + {/if} + </dl> + {/section} + {/if} + + <h4>Parameters:</h4> + <ul> + {section name=params loop=$methods[methods].params} + <li> + <span class="type">{$methods[methods].params[params].datatype}</span> + <b>{$methods[methods].params[params].var}</b> + - + {$methods[methods].params[params].data}</li> + {/section} + </ul> + </div> + <p class="top">[ <a href="#top">Top</a> ]</p> +{/if} +{/if} +{/section} + +{section name=methods loop=$methods} +{if !$methods[methods].static} +{if $show == 'summary'} + <p>{if $methods[methods].ifunction_call.constructor}constructor {elseif $methods[methods].ifunction_call.destructor}destructor {else}method {/if}{$methods[methods].function_call}, {$methods[methods].sdesc}</p> +{else} + <a name="{$methods[methods].method_dest}"></a> + <p></p> + <h3>{$methods[methods].function_name}</h3> + <div class="indent"> + <p> + <code>{$methods[methods].function_return} {if $methods[methods].ifunction_call.returnsref}&{/if}{$methods[methods].function_name}( +{if count($methods[methods].ifunction_call.params)} +{section name=params loop=$methods[methods].ifunction_call.params} +{if $smarty.section.params.iteration != 1}, {/if} +{if $methods[methods].ifunction_call.params[params].hasdefault}[{/if}{$methods[methods].ifunction_call.params[params].type} +{$methods[methods].ifunction_call.params[params].name}{if $methods[methods].ifunction_call.params[params].hasdefault} = {$methods[methods].ifunction_call.params[params].default}]{/if} +{/section} +{/if})</code> + </p> + + <p class="linenumber">[line {if $methods[methods].slink}{$methods[methods].slink}{else}{$methods[methods].line_number}{/if}]</p> + {include file="docblock.tpl" sdesc=$methods[methods].sdesc desc=$methods[methods].desc tags=$methods[methods].tags} + +{if $methods[methods].descmethod} + <p>Overridden in child classes as:<br /> + {section name=dm loop=$methods[methods].descmethod} + <dl> + <dt>{$methods[methods].descmethod[dm].link}</dt> + <dd>{$methods[methods].descmethod[dm].sdesc}</dd> + </dl> + {/section}</p> +{/if} +{if $methods[methods].method_overrides}<p>Overrides {$methods[methods].method_overrides.link} ({$methods[methods].method_overrides.sdesc|default:"parent method not documented"})</p>{/if} + {if $methods[methods].method_implements} + <hr class="separator" /> + <div class="notes">Implementation of:</div> + {section name=imp loop=$methods[methods].method_implements} + <dl> + <dt>{$methods[methods].method_implements[imp].link}</dt> + {if $methods[methods].method_implements[imp].sdesc} + <dd>{$methods[methods].method_implements[imp].sdesc}</dd> + {/if} + </dl> + {/section} + {/if} + + <h4>Parameters:</h4> + <ul> + {section name=params loop=$methods[methods].params} + <li> + <span class="type">{$methods[methods].params[params].datatype}</span> + <b>{$methods[methods].params[params].var}</b> + - + {$methods[methods].params[params].data}</li> + {/section} + </ul> + </div> + <p class="top">[ <a href="#top">Top</a> ]</p> +{/if} +{/if} +{/section} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/packages.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/packages.tpl new file mode 100755 index 00000000..0967e6e7 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/packages.tpl @@ -0,0 +1,3 @@ +{section name=packages loop=$packages} +<a href="{$packages[packages].link}">{$packages[packages].title}</a> +{/section}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/page.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/page.tpl new file mode 100755 index 00000000..c3cb9fd1 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/page.tpl @@ -0,0 +1,31 @@ +{include file="header.tpl" eltype="Procedural file" class_name=$name hasel=true contents=$pagecontents} + +<br> +<br> + +<div class="contents"> +{if $tutorial} +<span class="maintutorial">Main Tutorial: {$tutorial}</span> +{/if} +<h2>Classes:</h2> +<dl> +{section name=classes loop=$classes} +<dt>{$classes[classes].link}</dt> + <dd>{$classes[classes].sdesc}</dd> +{/section} +</dl> +</div> + +<h2>Page Details:</h2> +{include file="docblock.tpl" type="page"} +<hr> +{include file="include.tpl"} +<hr> +{include file="global.tpl"} +<hr> +{include file="define.tpl"} +<hr> +{include file="function.tpl"} + +{include file="footer.tpl"} + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/pkgelementindex.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/pkgelementindex.tpl new file mode 100755 index 00000000..0dabfdb7 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/pkgelementindex.tpl @@ -0,0 +1,5 @@ +{include file="header.tpl"} +<a name="top"></a> +<h1>Element index for package {$package}</h1> +{include file="basicindex.tpl" indexname=elementindex_$package} +{include file="footer.tpl"} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/ric.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/ric.tpl new file mode 100755 index 00000000..eff734c1 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/ric.tpl @@ -0,0 +1,6 @@ +{include file="header.tpl"} +<h1 align="center">{$name}</h1> +<pre> +{$contents|htmlentities} +</pre> +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/style.css b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/style.css new file mode 100755 index 00000000..993997ae --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/style.css @@ -0,0 +1,172 @@ +BODY { + font-family: Arial; + margin: 0px; + padding: 0px; +} +A { + color: #CC4400; + font-weight: bold; +} +A:Hover { + color: white; + background-color: #334B66; + font-weight: bold; + text-decoration: none; +} + +#packageTitle { + font-size: 160%; + font-weight: bold; + text-align: right; + color: #CC6633; +} +#packageTitle2 { + font-size: 160%; + font-weight: bold; + text-align: right; + color: #334B66; + background-color: #6699CC; +} +#packageLinks { + background-color: #6699CC; +} +#header { + background-color: #6699CC; + border-bottom: solid #334B66 4px; +} +#nav { + background-color: #6699CC; + padding: 4px; + border-right: solid #334B66 4px; +} +#index { + padding: 18px; +} +hr { + width: 80%; + background-color: #6699CC; + color: #6699CC; + margin-top: 15px; + margin-bottom: 15px; + clear: both; +} +.links { + text-align: left; + width: 98%; + margin: auto; +} +UL { + margin: 0px; + padding: 0px; + padding-left: 5px; + list-style-type: none; +} +li { + text-indent: -15px; + padding-bottom: 2px; + padding-left: 14px; +} +dd { + margin-bottom: .5em; +} +.small { + font-size: 80%; +} +h3 { +} +.middleCol { + margin-left: -1px; + border-right: dotted gray 1px; + border-left: dotted gray 1px; + padding: 5px; +} +.leftCol { + border-right: dotted gray 1px; + padding: 5px; +} +.rightCol { + margin-left: -1px; + border-left: dotted gray 1px; + padding: 5px; +} +#elementPath { + font-size: 14px; + font-weight: bold; + color: #334B66; +} +.constructor { + /*border: dashed #334B66 1px;*/ + font-weight: bold; +} +#credit { + text-align: center; + color: #334B66; + font-weight: bold; +} +div.contents { + border: solid #334B66 1px; + padding: 3px; + margin-bottom: 5px; + clear: all; +} +H1 { + margin: 0px; +} +H2 { + margin: 0px; + margin-bottom: 2px; +} +H3 { + margin: 0px; +} +H4 { + margin: 0px; +} +#classTree { + padding: 0px; + margin: 0px; +} +div.indent { + margin-left: 15px; +} +.warning { + color: red; + background-color: #334B66; + font-weight: bold; +} +code { + font-family: fixed; + padding: 3px; + color: #334B66; + background-color: #dddddd; +} +.type { + color: #334B66; +} +.value { + color: #334B66; + border: dotted #334B66 1px; +} +.top { + color: #334B66; + border-bottom: dotted #334B66 1px; + padding-bottom: 4px; +} +DIV#nav DL { + margin: 0px; + padding: 0px; + list-style-type: none; +} +div.classtree { + font-size: 130%; + font-weight: bold; + background-color: #CC6633; + border: dotted #334B66 2px; +} +span.linenumber,p.linenumber { + font-weight: bold,italic; +} +span.smalllinenumber { + font-weight: bold,italic; + font-size: 9pt; +} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/todolist.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/todolist.tpl new file mode 100755 index 00000000..f929ccdb --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/todolist.tpl @@ -0,0 +1,14 @@ +{include file="header.tpl" title="Todo List"} +<div align="center"><h1>Todo List</h1></div> +{foreach from=$todos key=todopackage item=todo} +<h2>{$todopackage}</h2> +{section name=todo loop=$todo} +<h3>{$todo[todo].link}</h3> +<ul> +{section name=t loop=$todo[todo].todos} + <li>{$todo[todo].todos[t]}</li> +{/section} +</ul> +{/section} +{/foreach} +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/tutorial.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/tutorial.tpl new file mode 100755 index 00000000..71fbb4fe --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/tutorial.tpl @@ -0,0 +1,32 @@ +{include file="header.tpl" title=$title} +{if $nav} +<table width="100%" border="0" cellpadding="0" cellspacing="0"> +<tr> +<td width="10%" align="left" valign="bottom">{if $prev}<a href= +"{$prev}">{/if}Prev{if $prev}</a>{/if}</td> +<td width="80%" align="center" valign="bottom"></td> +<td width="10%" align="right" valign="bottom">{if $next}<a href= +"{$next}">{/if}Next{if $next}</a>{/if}</td> +</tr> +</table> +{/if} +{$contents} +{if $nav} +<table width="100%" border="0" cellpadding="0" cellspacing="0"> +<tr> +<td width="33%" align="left" valign="top">{if $prev}<a href="{$prev}">{/if} +Prev{if $prev}</a>{/if}</td> +<td width="34%" align="center" valign="top">{if $up}<a href= +"{$up}">Up</a>{else} {/if}</td> +<td width="33%" align="right" valign="top">{if $next}<a href= +"{$next}">{/if}Next{if $next}</a>{/if}</td> +</tr> + +<tr> +<td width="33%" align="left" valign="top">{if $prevtitle}{$prevtitle}{/if}</td> +<td width="34%" align="center" valign="top">{if $uptitle}{$uptitle}{/if}</td> +<td width="33%" align="right" valign="top">{if $nexttitle}{$nexttitle}{/if}</td> +</tr> +</table> +{/if} +{include file="footer.tpl"} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/tutorial_toc.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/tutorial_toc.tpl new file mode 100755 index 00000000..3d22d403 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/tutorial_toc.tpl @@ -0,0 +1,29 @@ +{if count($toc)} +<h1 align="center">Table of Contents</h1> +<ul> +{section name=toc loop=$toc} +{if $toc[toc].tagname == 'refsect1'} +{assign var="context" value="refsect1"} +{$toc[toc].link}<br /> +{/if} +{if $toc[toc].tagname == 'refsect2'} +{assign var="context" value="refsect2"} + {$toc[toc].link}<br /> +{/if} +{if $toc[toc].tagname == 'refsect3'} +{assign var="context" value="refsect3"} + {$toc[toc].link}<br /> +{/if} +{if $toc[toc].tagname == 'table'} +{if $context == 'refsect2'} {/if} +{if $context == 'refsect3'} {/if} +Table: {$toc[toc].link} +{/if} +{if $toc[toc].tagname == 'example'} +{if $context == 'refsect2'} {/if} +{if $context == 'refsect3'} {/if} +Table: {$toc[toc].link} +{/if} +{/section} +</ul> +{/if}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/tutorial_tree.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/tutorial_tree.tpl new file mode 100755 index 00000000..ccb0289e --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/tutorial_tree.tpl @@ -0,0 +1,5 @@ +<ul> + <li><a href="{$main.link}">{$main.title|strip_tags}</a> +{if $kids}{$kids}</li>{/if} +</ul> + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/var.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/var.tpl new file mode 100755 index 00000000..262f427a --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/var.tpl @@ -0,0 +1,36 @@ +{section name=vars loop=$vars} +{if $vars[vars].static} +{if $show == 'summary'} + static var {$vars[vars].var_name}, {$vars[vars].sdesc}<br> +{else} + <a name="{$vars[vars].var_dest}"></a> + <p></p> + <h4>static {$vars[vars].var_name}{if $vars[vars].has_default} = <span class="value">{$vars[vars].var_default|replace:"\n":"<br>\n"|replace:" ":" "|replace:"\t":" "}</span>{/if}</h4> + <div class="indent"> + <p class="linenumber">[line {if $vars[vars].slink}{$vars[vars].slink}{else}{$vars[vars].line_number}{/if}]</p> + {include file="docblock.tpl" sdesc=$vars[vars].sdesc desc=$vars[vars].desc tags=$vars[vars].tags} + <p><b>Type:</b> {$vars[vars].var_type}</p> + <p><b>Overrides:</b> {$vars[vars].var_overrides}</p> + </div> + <p class="top">[ <a href="#top">Top</a> ]</p> +{/if} +{/if} +{/section} +{section name=vars loop=$vars} +{if !$vars[vars].static} +{if $show == 'summary'} + var {$vars[vars].var_name}, {$vars[vars].sdesc}<br> +{else} + <a name="{$vars[vars].var_dest}"></a> + <p></p> + <h4>{$vars[vars].var_name}{if $vars[vars].has_default} = <span class="value">{$vars[vars].var_default|replace:"\n":"<br>\n"|replace:" ":" "|replace:"\t":" "}</span>{/if}</h4> + <div class="indent"> + <p class="linenumber">[line {if $vars[vars].slink}{$vars[vars].slink}{else}{$vars[vars].line_number}{/if}]</p> + {include file="docblock.tpl" sdesc=$vars[vars].sdesc desc=$vars[vars].desc tags=$vars[vars].tags} + <p><b>Type:</b> {$vars[vars].var_type}</p> + <p><b>Overrides:</b> {$vars[vars].var_overrides}</p> + </div> + <p class="top">[ <a href="#top">Top</a> ]</p> +{/if} +{/if} +{/section} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/HTMLframesConverter.inc b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/HTMLframesConverter.inc new file mode 100755 index 00000000..8bab7d99 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/HTMLframesConverter.inc @@ -0,0 +1,1914 @@ +<?php +/** + * HTML original framed output converter, modified to use Smarty Template. + * This Converter takes output from the {@link Parser} and converts it to HTML-ready output for use with {@link Smarty}. + * + * phpDocumentor :: automatic documentation generator + * + * PHP versions 4 and 5 + * + * Copyright (c) 2002-2006 Gregory Beaver + * + * LICENSE: + * + * This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General + * Public License as published by the Free Software Foundation; + * either version 2.1 of the License, or (at your option) any + * later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package Converters + * @subpackage HTMLframes + * @author Gregory Beaver <cellog@php.net> + * @copyright 2002-2006 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version CVS: $Id: HTMLframesConverter.inc 234145 2007-04-19 20:20:57Z ashnazg $ + * @filesource + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @see parserDocBlock, parserInclude, parserPage, parserClass + * @see parserDefine, parserFunction, parserMethod, parserVar + * @since 1.2 + */ +/** + * HTML output converter. + * This Converter takes output from the {@link Parser} and converts it to HTML-ready output for use with {@link Smarty}. + * + * @package Converters + * @subpackage HTMLframes + * @see parserDocBlock, parserInclude, parserPage, parserClass, parserDefine, parserFunction, parserMethod, parserVar + * @author Greg Beaver <cellog@php.net> + * @since 1.2 + * @version $Id: HTMLframesConverter.inc 234145 2007-04-19 20:20:57Z ashnazg $ + */ +class HTMLframesConverter extends Converter +{ + /** + * This converter knows about the new root tree processing + * In order to fix PEAR Bug #6389 + * @var boolean + */ + var $processSpecialRoots = true; + /** + * Smarty Converter wants elements sorted by type as well as alphabetically + * @see Converter::$sort_page_contents_by_type + * @var boolean + */ + var $sort_page_contents_by_type = true; + /** @var string */ + var $outputformat = 'HTML'; + /** @var string */ + var $name = 'frames'; + /** + * indexes of elements by package that need to be generated + * @var array + */ + var $leftindex = array('classes' => true, 'pages' => true, 'functions' => true, 'defines' => false, 'globals' => false); + + /** + * output directory for the current procedural page being processed + * @var string + */ + var $page_dir; + + /** + * target directory passed on the command-line. + * {@link $targetDir} is malleable, always adding package/ and package/subpackage/ subdirectories onto it. + * @var string + */ + var $base_dir; + + /** + * output directory for the current class being processed + * @var string + */ + var $class_dir; + + /** + * array of converted package page names. + * Used to link to the package page in the left index + * @var array Format: array(package => 1) + */ + var $package_pages = array(); + + /** + * controls formatting of parser informative output + * + * Converter prints: + * "Converting /path/to/file.php... Procedural Page Elements... Classes..." + * Since HTMLdefaultConverter outputs files while converting, it needs to send a \n to start a new line. However, if there + * is more than one class, output is messy, with multiple \n's just between class file output. This variable prevents that + * and is purely cosmetic + * @var boolean + */ + var $juststarted = false; + + /** + * contains all of the template procedural page element loop data needed for the current template + * @var array + */ + var $current; + + /** + * contains all of the template class element loop data needed for the current template + * @var array + */ + var $currentclass; + var $wrote = false; + var $ric_set = array(); + + /** + * sets {@link $base_dir} to $targetDir + * @see Converter() + */ + function HTMLframesConverter(&$allp, &$packp, &$classes, &$procpages, $po, $pp, $qm, $targetDir, $templateDir, $title) + { + Converter::Converter($allp, $packp, $classes, $procpages,$po, $pp, $qm, $targetDir, $templateDir, $title); + $this->base_dir = $targetDir; + } + + /** + * @deprecated in favor of PHP 4.3.0+ tokenizer-based source highlighting + */ + function unmangle($sourcecode) + { + $sourcecode = str_replace('<code>','<pre>',$sourcecode); + $sourcecode = str_replace('</code>','</pre>',$sourcecode); + $sourcecode = str_replace('<br />',"\n",$sourcecode); + $sourcecode = str_replace(' ',' ',$sourcecode); + $sourcecode = str_replace('<','<',$sourcecode); + $sourcecode = str_replace('>','>',$sourcecode); + $sourcecode = str_replace('&','&',$sourcecode); + return $sourcecode; + } + + /** + * @param string full path to the source file + * @param string fully highlighted source code + */ + function writeSource($path, $value) + { + $templ = &$this->newSmarty(); + $pathinfo = $this->proceduralpages->getPathInfo($path, $this); + $templ->assign('source',$value); + $templ->assign('package',$pathinfo['package']); + $templ->assign('subpackage',$pathinfo['subpackage']); + $templ->assign('name',$pathinfo['name']); + $templ->assign('source_loc',$pathinfo['source_loc']); + $templ->assign('docs',$pathinfo['docs']); + $templ->assign("subdir",'../'); + $templ->register_outputfilter('HTMLframes_outputfilter'); + $this->setTargetDir($this->getFileSourcePath($this->base_dir)); + phpDocumentor_out("\n"); + $this->setSourcePaths($path); + $this->writefile($this->getFileSourceName($path).'.html',$templ->fetch('filesource.tpl')); + } + + function writeExample($title, $path, $source) + { + $templ = &$this->newSmarty(); + $templ->assign('source',$source); + if (empty($title)) + { + $title = 'example'; + addWarning(PDERROR_EMPTY_EXAMPLE_TITLE, $path, $title); + } + $templ->assign('title',$title); + $templ->assign('file',$path); + $templ->assign("subdir",'../'); + $templ->register_outputfilter('HTMLframes_outputfilter'); + $this->setTargetDir($this->base_dir . PATH_DELIMITER . '__examplesource'); + phpDocumentor_out("\n"); + $this->writefile('exsource_'.$path.'.html',$templ->fetch('examplesource.tpl')); + } + + function getExampleLink($path, $title) + { + return $this->returnLink('{$subdir}__examplesource' . PATH_DELIMITER . 'exsource_'.$path.'.html',$title); + } + + function getSourceLink($path) + { + return $this->returnLink('{$subdir}__filesource/' . + $this->getFileSourceName($path).'.html','Source Code for this file'); + } + + /** + * Retrieve a Converter-specific anchor to a segment of a source code file + * parsed via a {@tutorial tags.filesource.pkg} tag. + * @param string full path to source file + * @param string name of anchor + * @param string link text, if this is a link + * @param boolean returns either a link or a destination based on this + * parameter + * @return string link to an anchor, or the anchor + */ + function getSourceAnchor($sourcefile,$anchor,$text = '',$link = false) + { + if ($link) { + return $this->returnLink('{$subdir}__filesource/' . + $this->getFileSourceName($sourcefile) . '.html#a' . $anchor, $text); + } else { + return '<a name="a'.$anchor.'"></a>'; + } + } + + /** + * Return a line of highlighted source code with formatted line number + * + * If the $path is a full path, then an anchor to the line number will be + * added as well + * @param integer line number + * @param string highlighted source code line + * @param false|string full path to @filesource file this line is a part of, + * if this is a single line from a complete file. + * @return string formatted source code line with line number + */ + function sourceLine($linenumber, $line, $path = false) + { + $extra = ''; + if (strlen(str_replace("\n", '', $line)) == 0) { + $extra = ' '; + } + if ($path) + { + return '<li><div class="src-line">' . $this->getSourceAnchor($path, $linenumber) . + str_replace("\n",'',$line) . $extra . + "</div></li>\n"; + } else + { + return '<li><div class="src-line">' . str_replace("\n",'',$line) . + "$extra</div></li>\n"; + } + } + + /** + * Used to convert the <<code>> tag in a docblock + * @param string + * @param boolean + * @return string + */ + function ProgramExample($example, $tutorial = false, $inlinesourceparse = null/*false*/, + $class = null/*false*/, $linenum = null/*false*/, $filesourcepath = null/*false*/) + { + return '<div class="src-code"><ol>' . parent::ProgramExample($example, $tutorial, $inlinesourceparse, $class, $linenum, $filesourcepath) + .'</ol></div>'; + } + + /** + * @param string + */ + function TutorialExample($example) + { + $trans = $this->template_options['desctranslate']; + $this->template_options['desctranslate'] = array(); + $example = '<ol>' . parent::TutorialExample($example) + .'</ol>'; + $this->template_options['desctranslate'] = $trans; + if (!isset($this->template_options['desctranslate'])) return $example; + if (!isset($this->template_options['desctranslate']['code'])) return $example; + $example = $this->template_options['desctranslate']['code'] . $example; + if (!isset($this->template_options['desctranslate']['/code'])) return $example; + return $example . $this->template_options['desctranslate']['/code']; + } + + function getCurrentPageLink() + { + return $this->curname . '.html'; + } + + /** + * Uses htmlspecialchars() on the input + */ + function postProcess($text) + { + if ($this->highlightingSource) { + return str_replace(array(' ',"\t"), array(' ', ' '), + htmlspecialchars($text)); + } + return htmlspecialchars($text); + } + + /** + * Use the template tutorial_toc.tpl to generate a table of contents for HTML + * @return string table of contents formatted for use in the current output format + * @param array format: array(array('tagname' => section, 'link' => returnsee link, 'id' => anchor name, 'title' => from title tag),...) + */ + function formatTutorialTOC($toc) + { + $template = &$this->newSmarty(); + $template->assign('toc',$toc); + return $template->fetch('tutorial_toc.tpl'); + } + + function &SmartyInit(&$templ) + { + if (!isset($this->package_index)) + foreach($this->all_packages as $key => $val) + { + if (isset($this->pkg_elements[$key])) + { + if (!isset($start)) $start = $key; + $this->package_index[] = array('link' => "li_$key.html", 'title' => $key); + } + } + $templ->assign("packageindex",$this->package_index); + $templ->assign("subdir",''); + return $templ; + } + + /** + * Writes out the template file of {@link $class_data} and unsets the template to save memory + * @see registerCurrentClass() + * @see parent::endClass() + */ + function endClass() + { + $a = '../'; + if (!empty($this->subpackage)) $a .= '../'; + if ($this->juststarted) + { + $this->juststarted = false; + phpDocumentor_out("\n"); + flush(); + } + $this->setTargetDir($this->base_dir . PATH_DELIMITER . $this->class_dir); + $this->class_data->assign("subdir",$a); + $this->class_data->register_outputfilter('HTMLframes_outputfilter'); + $this->writefile($this->class . '.html',$this->class_data->fetch('class.tpl')); + unset($this->class_data); + } + + /** + * Writes out the template file of {@link $page_data} and unsets the template to save memory + * @see registerCurrent() + * @see parent::endPage() + */ + function endPage() + { + $this->package = $this->curpage->package; + $this->subpackage = $this->curpage->subpackage; + $a = '../'; + if (!empty($this->subpackage)) $a .= '../'; + $this->setTargetDir($this->base_dir . PATH_DELIMITER . $this->page_dir); + $this->page_data->assign("package",$this->package); + $this->page_data->assign("subdir",$a); + $this->page_data->register_outputfilter('HTMLframes_outputfilter'); + $this->writefile($this->page . '.html',$this->page_data->fetch('page.tpl')); + unset($this->page_data); + } + + /** + * @param string + * @param string + * @return string <a href="'.$link.'">'.$text.'</a> + */ + function returnLink($link,$text) + { + return '<a href="'.$link.'">'.$text.'</a>'; + } + + function makeLeft() + { + foreach($this->page_elements as $package => $o1) + { + foreach($o1 as $subpackage => $links) + { + for($i=0;$i<count($links);$i++) + { + $left[$package][$subpackage]['files'][] = + array("link" => $this->getId($links[$i]), "title" => $links[$i]->name); + } + } + } + $interfaces = $classes = false; + foreach($this->class_elements as $package => $o1) + { + foreach($o1 as $subpackage => $links) + { + for($i=0;$i<count($links);$i++) + { + $class = $this->classes->getClassByPackage($links[$i]->name, $links[$i]->package); + $isinterface = $isclass = false; + if ($class->isInterface()) { + $isinterface = true; + $interfaces = true; + } else { + $isclass = true; + $classes = true; + } + if ($class && isset($class->docblock) && $class->docblock->hasaccess) { + $left[$package][$subpackage]['classes'][] = + array("link" => $this->getId($links[$i]), + "title" => $links[$i]->name, + 'is_interface' => $isinterface, + 'is_class' => $isclass, + "access" => $class->docblock->tags['access'][0]->value, + "abstract" => isset ($class->docblock->tags['abstract'][0])); + } else { + $left[$package][$subpackage]['classes'][] = + array("link" => $this->getId($links[$i]), + "title" => $links[$i]->name, + 'is_interface' => $isinterface, + 'is_class' => $isclass, + "access" => 'public', + "abstract" => isset ($class->docblock->tags['abstract'][0])); + } + } + } + } + foreach($this->function_elements as $package => $o1) + { + foreach($o1 as $subpackage => $links) + { + for($i=0;$i<count($links);$i++) + { + $left[$package][$subpackage]['functions'][] = + array("link" => $this->getId($links[$i]), "title" => $links[$i]->name); + } + } + } + $ret = array(); + foreach($left as $package => $r) + { + $pd = 'blank'; + if (isset($this->package_pages[$package])) $pd = $package.'/package_'.$package.'.html'; + if (!isset($r[''])) + { + $pt = false; + $ptnoa = false; + $ptt = $package; + if ($t = $this->hasTutorial('pkg',$package,$package,'')) + { + $pt = $t->getLink($this); + $ptnoa = $this->getId($t->getLink($this,true)); + $ptt = $t->getTitle($this); + } + $tutes = array(); + foreach($this->tutorial_tree as $root => $tr) + { + if ($tr['tutorial']->package == $package && $tr['tutorial']->subpackage == '') { + $tutes[$tr['tutorial']->tutorial_type][] = + $this->getTutorialTree($tr['tutorial']); + } + } + if (isset($this->childless_tutorials[$package][$subpackage])) + { + foreach($this->childless_tutorials[$package][$subpackage] as $ext => $other) + { + foreach($other as $tutorial) + { + $tutes[$tutorial->tutorial_type][] = $this->getTutorialTree($tutorial); + } + } + } + $ret[$package][] = + array( + 'package' => $package, + 'subpackage' => '', + 'packagedoc' => $pd, + 'packagetutorial' => $pt, + 'packagetutorialnoa' => $ptnoa, + 'packagetutorialtitle' => $ptt, + 'files' => array(), + 'functions' => array(), + 'classes' => array(), + 'tutorials' => $tutes, + ); + } + foreach($r as $subpackage => $info) + { + $my = array(); + $my['package'] = $package; + if (isset($this->package_pages[$package])) + $my['packagedoc'] = $pd; + else + $my['packagedoc'] = 'blank'; + $my['subpackage'] = $subpackage; + if (empty($subpackage)) + { + if ($t = $this->hasTutorial('pkg',$package,$package,$subpackage)) + { + $my['packagetutorial'] = $t->getLink($this); + $my['packagetutorialnoa'] = $this->getId($t->getLink($this,true)); + $my['packagetutorialtitle'] = $t->getTitle($this); + } else + { + $my['packagetutorial'] = '<a href="blank.html">No Package-Level Tutorial</a>'; + $my['packagetutorialnoa'] = 'blank.html'; + $my['packagetutorialtitle'] = $package; + } + } else + { + if ($t = $this->hasTutorial('pkg',$subpackage,$package,$subpackage)) + { + $my['subpackagetutorial'] = $this->returnSee($this->getTutorialLink($t)); + $my['subpackagetutorialnoa'] = $this->getId($t->getLink($this,true)); + $my['subpackagetutorialtitle'] = $t->getTitle($this); + } else + { + $my['subpackagetutorial'] = false; + $my['subpackagetutorialnoa'] = false; + $my['subpackagetutorialtitle'] = $subpackage; + } + } + $tutes = array(); + foreach($this->tutorial_tree as $root => $tr) + { + if ($tr['tutorial']->package == $package && $tr['tutorial']->subpackage == $subpackage) + { + $tutes[$tr['tutorial']->tutorial_type][] = $this->getTutorialTree($tr['tutorial']); + } + } + $my['tutorials'] = $tutes; + $my['files'] = $my['classes'] = $my['functions'] = array(); + if (isset($info['files'])) + $my['files'] = $info['files']; + if (isset($info['classes'])) + $my['classes'] = $info['classes']; + $my['hasclasses'] = $classes; + $my['hasinterfaces'] = $interfaces; + if (isset($info['functions'])) + $my['functions'] = $info['functions']; + $ret[$package][] = $my; + } + } + return $ret; + } + + function getTutorialTree($tutorial,$k = false) + { + $ret = ''; + if (is_object($tutorial)) $tree = parent::getTutorialTree($tutorial); else $tree = $tutorial; +// debug($this->vardump_tree($tree));exit; + if (!$tree) + { + $template = &$this->newSmarty(); + $template->assign('subtree',false); + $template->assign('name',str_replace('.','',$tutorial->name)); + $template->assign('parent',false); + $template->assign('haskids',false); + $template->assign('kids',''); + $link = new tutorialLink; + $t = $tutorial; + $link->addLink('',$t->path,$t->name,$t->package,$t->subpackage,$t->getTitle($this)); + $main = array('link' => $this->getId($link), 'title' => $link->title); + $template->assign('main',$main); + return $template->fetch('tutorial_tree.tpl'); + } + if (isset($tree['kids'])) + { + foreach($tree['kids'] as $subtree) + { + $ret .= $this->getTutorialTree($subtree, true); + } + } + $template = &$this->newSmarty(); + $template->assign('subtree',$k); + $template->assign('name',str_replace('.','',$tree['tutorial']->name)); + $template->assign('parent',($k ? str_replace('.','',$tree['tutorial']->parent->name) : false)); + $template->assign('haskids',strlen($ret)); + $template->assign('kids',$ret); + $link = new tutorialLink; + $t = $tree['tutorial']; + $link->addLink('',$t->path,$t->name,$t->package,$t->subpackage,$t->getTitle($this)); + $main = array('link' => $this->getId($link), 'title' => $link->title); + $template->assign('main',$main); + $ret = $template->fetch('tutorial_tree.tpl'); + return $ret; + } + + /** + * HTMLdefaultConverter chooses to format both package indexes and the complete index here + * + * This function formats output for the elementindex.html and pkgelementindex.html template files. It then + * writes them to the target directory + * @see generateElementIndex(), generatePkgElementIndex() + */ + function formatPkgIndex() + { + list($package_indexes,$packages,$mletters) = $this->generatePkgElementIndexes(); + for($i=0;$i<count($package_indexes);$i++) + { + $template = &$this->newSmarty(); + $this->package = $package_indexes[$i]['package']; + $this->subpackage = ''; + $template->assign("index",$package_indexes[$i]['pindex']); + $template->assign("package",$package_indexes[$i]['package']); + $template->assign("letters",$mletters[$package_indexes[$i]['package']]); + $template->register_outputfilter('HTMLframes_outputfilter'); + $this->setTargetDir($this->base_dir); + $this->writefile('elementindex_'.$package_indexes[$i]['package'].'.html',$template->fetch('pkgelementindex.tpl')); + } + phpDocumentor_out("\n"); + flush(); + } + + /** + * HTMLdefaultConverter uses this function to format template index.html and packages.html + * + * This function generates the package list from {@link $all_packages}, eliminating any + * packages that don't have any entries in their package index (no files at all, due to @ignore + * or other factors). Then it uses the default package name as the first package index to display. + * It sets the right pane to be either a blank file with instructions on making package-level docs, + * or the package-level docs for the default package. + * @global string Used to set the starting package to display + */ + function formatIndex() + { + global $phpDocumentor_DefaultPackageName; + list($elindex,$mletters) = $this->generateElementIndex(); + $template = &$this->newSmarty(); + $template->assign("index",$elindex); + $template->assign("letters",$mletters); + $template->register_outputfilter('HTMLframes_outputfilter'); + phpDocumentor_out("\n"); + flush(); + $this->setTargetDir($this->base_dir); + $this->writefile('elementindex.html',$template->fetch('elementindex.tpl')); + usort($this->package_index,"HTMLframes_pindexcmp"); + $index = &$this->newSmarty(); + foreach($this->all_packages as $key => $val) + { + if (isset($this->pkg_elements[$key])) + { + if (!isset($start)) $start = $key; + if (!isset($this->package_pages[$key])) $this->writeNewPPage($key); + } + } + // Created index.html + if (isset($this->pkg_elements[$phpDocumentor_DefaultPackageName])) $start = $phpDocumentor_DefaultPackageName; + $this->package = $start; + $this->subpackage = ''; + $index->assign("package_count",count($this->pkg_elements)); + if (count($this->ric_set)) + $index->assign("package_count",2); + $index->assign("date",date("r",time())); + $index->assign("title",$this->title); + $index->assign("start","li_$start.html"); + $index->register_outputfilter('HTMLframes_outputfilter'); + if (isset($this->tutorials[$start]['']['pkg'][$start . '.pkg'])) + { + $index->assign("blank",$start.'/tutorial_'.$start.'.pkg'); + } elseif (isset($this->package_pages[$start])) + { + $index->assign("blank",$start.'/package_'.$start); + } + else + { + $index->assign("blank","blank"); + $blank = &$this->newSmarty(); + $blank->assign('package',$this->package); + $this->setTargetDir($this->base_dir); + $this->writefile("blank.html",$blank->fetch('blank.tpl')); + } + phpDocumentor_out("\n"); + flush(); + $this->setTargetDir($this->base_dir); + $this->writefile("index.html",$index->fetch('index.tpl')); + + // Create package index + $package = &$this->newSmarty(); + $package->assign('ric',array()); + if (isset($this->ric_set)) + { + foreach($this->ric_set as $name => $u) + { + $package->append('ric',array('file' => 'ric_'.$name.'.html','name' => $name)); + } + } + $package->assign("packages",$this->package_index); + $package->register_outputfilter('HTMLframes_outputfilter'); + $this->writefile("packages.html",$package->fetch('top_frame.tpl')); + unset($index); + } + + function writeNewPPage($key) + { + return; + $template = &$this->newSmarty(); + $this->package = $key; + $this->subpackage = ''; + $template->assign("date",date("r",time())); + $template->assign("title",$this->title); + $template->assign("package",$key); + $template->register_outputfilter('HTMLframes_outputfilter'); + phpDocumentor_out("\n"); + flush(); + $this->setTargetDir($this->base_dir); + + $this->writefile("li_$key.html",$template->fetch('index.tpl')); + unset($template); + } + + /** + * Generate indexes for li_package.html and classtree output files + * + * This function generates the li_package.html files from the template file left.html. It does this by + * iterating through each of the $page_elements, $class_elements and $function_elements arrays to retrieve + * the pre-sorted {@link abstractLink} descendants needed for index generation. Conversion of these links to + * text is done by {@link returnSee()}. The {@link $local} parameter is set to false to ensure that paths are correct. + * + * Then it uses {@link generateFormattedClassTrees()} to create class trees from the template file classtrees.html. Output + * filename is classtrees_packagename.html. This function also unsets {@link $elements} and {@link $pkg_elements} to free + * up the considerable memory these two class vars use + * @see $page_elements, $class_elements, $function_elements + */ + function formatLeftIndex() + { + phpDocumentor_out("\n"); + flush(); + $this->setTargetDir($this->base_dir); + if (0)//!isset($this->left)) + { + debug("Nothing parsed, check the command-line"); + die(); + } + $x = $this->makeLeft(); + foreach($this->all_packages as $package => $rest) + { + if (!isset($this->pkg_elements[$package])) continue; + $template = &$this->newSmarty(); + $template->assign("info",$x[$package]); + $template->assign('package',$package); + $template->assign("hastutorials",isset($this->tutorials[$package])); + $template->assign('hastodos',count($this->todoList)); + $template->assign('todolink','todolist.html'); + $template->assign("classtreepage","classtrees_$package"); + $template->assign("elementindex","elementindex_$package"); + $template->register_outputfilter('HTMLframes_outputfilter'); + if (isset($this->package_pages[$package])) + { + $template->assign("packagedoc",$package.'/package_' . $package . '.html'); + } else + { + $template->assign("packagedoc",false); + } + $this->writefile("li_$package.html",$template->fetch('left_frame.tpl')); + + // Create class tree page + $template = &$this->newSmarty(); + $template->assign("classtrees",$this->generateFormattedClassTrees($package)); + $template->assign("interfaces",$this->generateFormattedInterfaceTrees($package)); + $template->assign("package",$package); + $template->register_outputfilter('HTMLframes_outputfilter'); + $this->writefile("classtrees_$package.html",$template->fetch('classtrees.tpl')); + phpDocumentor_out("\n"); + flush(); + } + // free up considerable memory + unset($this->elements); + unset($this->pkg_elements); + } + + /** + * This function takes an {@link abstractLink} descendant and returns an html link + * + * @param abstractLink a descendant of abstractlink should be passed, and never text + * @param string text to display in the link + * @param boolean this parameter is not used, and is deprecated + * @param boolean determines whether the returned text is enclosed in an <a> tag + */ + function returnSee(&$element, $eltext = false, $with_a = true) + { + if (!is_object($element) || !$element) return false; + if (!$with_a) return $this->getId($element, false); + if (!$eltext) + { + $eltext = ''; + switch($element->type) + { + case 'tutorial' : + $eltext = strip_tags($element->title); + break; + case 'method' : + case 'var' : + case 'const' : + $eltext .= $element->class.'::'; + case 'page' : + case 'define' : + case 'class' : + case 'function' : + case 'global' : + default : + $eltext .= $element->name; + if ($element->type == 'function' || $element->type == 'method') $eltext .= '()'; + break; + } + } + return '<a href="'.$this->getId($element).'">'.$eltext.'</a>'; + } + + function getId($element, $fullpath = true) + { + if (phpDocumentor_get_class($element) == 'parserdata') + { + $element = $this->addLink($element->parent); + $elp = $element->parent; + } elseif (is_a($element, 'parserbase')) + { + $elp = $element; + $element = $this->addLink($element); + } + $c = ''; + if (!empty($element->subpackage)) + { + $c = '/'.$element->subpackage; + } + $b = '{$subdir}'; + switch ($element->type) + { + case 'page' : + if ($fullpath) + return $b.$element->package.$c.'/'.$element->fileAlias.'.html'; + return 'top'; + break; + case 'define' : + case 'global' : + case 'function' : + if ($fullpath) + return $b.$element->package.$c.'/'.$element->fileAlias.'.html#'.$element->type.$element->name; + return $element->type.$element->name; + break; + case 'class' : + if ($fullpath) + return $b.$element->package.$c.'/'.$element->name.'.html'; + return 'top'; + break; + case 'method' : + case 'var' : + case 'const' : + if ($fullpath) + return $b.$element->package.$c.'/'.$element->class.'.html#'.$element->type.$element->name; + return $element->type.$element->name; + break; + case 'tutorial' : + $d = ''; + if ($element->section) + { + $d = '#'.$element->section; + } + return $b.$element->package.$c.'/tutorial_'.$element->name.'.html'.$d; + } + } + + /** + * Convert README/INSTALL/CHANGELOG file contents to output format + * @param README|INSTALL|CHANGELOG + * @param string contents of the file + */ + function Convert_RIC($name, $contents) + { + $template = &$this->newSmarty(); + $template->assign('contents',$contents); + $template->assign('name',$name); + $this->setTargetDir($this->base_dir); + $this->writefile('ric_'.$name . '.html',$template->fetch('ric.tpl')); + $this->ric_set[$name] = true; + } + + function ConvertTodoList() + { + $todolist = array(); + foreach($this->todoList as $package => $alltodos) + { + foreach($alltodos as $todos) + { + $converted = array(); + $converted['link'] = $this->returnSee($todos[0]); + if (!is_array($todos[1])) + { + $converted['todos'][] = $todos[1]->Convert($this); + } else + { + foreach($todos[1] as $todo) + { + $converted['todos'][] = $todo->Convert($this); + } + } + $todolist[$package][] = $converted; + } + } + $templ = &$this->newSmarty(); + $templ->assign('todos',$todolist); + $templ->register_outputfilter('HTMLframes_outputfilter'); + $this->setTargetDir($this->base_dir); + $this->writefile('todolist.html',$templ->fetch('todolist.tpl')); + } + + /** + * Create errors.html template file output + * + * This method takes all parsing errors and warnings and spits them out ordered by file and line number. + * @global ErrorTracker We'll be using it's output facility + */ + function ConvertErrorLog() + { + global $phpDocumentor_errors; + $allfiles = array(); + $files = array(); + $warnings = $phpDocumentor_errors->returnWarnings(); + $errors = $phpDocumentor_errors->returnErrors(); + $template = &$this->newSmarty(); + foreach($warnings as $warning) + { + $file = '##none'; + $linenum = 'Warning'; + if ($warning->file) + { + $file = $warning->file; + $allfiles[$file] = 1; + $linenum .= ' on line '.$warning->linenum; + } + $files[$file]['warnings'][] = array('name' => $linenum, 'listing' => $warning->data); + } + foreach($errors as $error) + { + $file = '##none'; + $linenum = 'Error'; + if ($error->file) + { + $file = $error->file; + $allfiles[$file] = 1; + $linenum .= ' on line '.$error->linenum; + } + $files[$file]['errors'][] = array('name' => $linenum, 'listing' => $error->data); + } + $i=1; + $af = array(); + foreach($allfiles as $file => $num) + { + $af[$i++] = $file; + } + $allfiles = $af; + usort($allfiles,'strnatcasecmp'); + $allfiles[0] = "Post-parsing"; + foreach($allfiles as $i => $a) + { + $allfiles[$i] = array('file' => $a); + } + $out = array(); + foreach($files as $file => $data) + { + if ($file == '##none') $file = 'Post-parsing'; + $out[$file] = $data; + } + $template->assign("files",$allfiles); + $template->assign("all",$out); + $template->assign("title","phpDocumentor Parser Errors and Warnings"); + $this->setTargetDir($this->base_dir); + $this->writefile("errors.html",$template->fetch('errors.tpl')); + unset($template); + phpDocumentor_out("\n\nTo view errors and warnings, look at ".$this->base_dir. PATH_DELIMITER . "errors.html\n"); + flush(); + } + + function getTutorialId($package,$subpackage,$tutorial,$id) + { + return $id; + } + + function getCData($value) + { + return '<pre>'.htmlentities($value).'</pre>'; + } + + /** + * Converts package page and sets its package as used in {@link $package_pages} + * @param parserPackagePage + */ + function convertPackagepage(&$element) + { + phpDocumentor_out("\n"); + flush(); + $this->package = $element->package; + $this->subpackage = ''; + $contents = $element->Convert($this); + $this->package_pages[$element->package] = str_replace('{$subdir}','../',$contents); + phpDocumentor_out("\n"); + flush(); + $this->setTargetDir($this->base_dir . PATH_DELIMITER . $element->package); + $this->writeFile('package_'.$element->package.'.html',str_replace('{$subdir}','../',$contents)); + } + + /** + * @param parserTutorial + */ + function convertTutorial(&$element) + { + phpDocumentor_out("\n"); + flush(); + $template = &parent::convertTutorial($element); + $a = '../'; + if ($element->subpackage) $a .= '../'; + $template->assign('subdir',$a); + $template->register_outputfilter('HTMLframes_outputfilter'); + $contents = $template->fetch('tutorial.tpl'); + $a = ''; + if ($element->subpackage) $a = PATH_DELIMITER . $element->subpackage; + phpDocumentor_out("\n"); + flush(); + $this->setTargetDir($this->base_dir . PATH_DELIMITER . $element->package . $a); + $this->writeFile('tutorial_'.$element->name.'.html',$contents); + } + + /** + * Converts class for template output + * @see prepareDocBlock(), generateChildClassList(), generateFormattedClassTree(), getFormattedConflicts() + * @see getFormattedInheritedMethods(), getFormattedInheritedVars() + * @param parserClass + */ + function convertClass(&$element) + { + parent::convertClass($element); + $this->class_dir = $element->docblock->package; + if (!empty($element->docblock->subpackage)) $this->class_dir .= PATH_DELIMITER . $element->docblock->subpackage; + $a = '../'; + if ($element->docblock->subpackage != '') $a = "../$a"; + + $this->class_data->assign('subdir',$a); + $this->class_data->assign("title","Docs For Class " . $element->getName()); + $this->class_data->assign("page",$element->getName() . '.html'); + } + + /** + * Converts class variables for template output + * @see prepareDocBlock(), getFormattedConflicts() + * @param parserDefine + */ + function convertVar(&$element) + { + parent::convertVar($element, array('var_dest' => $this->getId($element,false))); + } + + /** + * Converts class variables for template output + * @see prepareDocBlock(), getFormattedConflicts() + * @param parserDefine + */ + function convertConst(&$element) + { + parent::convertConst($element, array('const_dest' => $this->getId($element,false))); + } + + /** + * Converts class methods for template output + * @see prepareDocBlock(), getFormattedConflicts() + * @param parserDefine + */ + function convertMethod(&$element) + { + parent::convertMethod($element, array('method_dest' => $this->getId($element,false))); + } + + /** + * Converts function for template output + * @see prepareDocBlock(), parserFunction::getFunctionCall(), getFormattedConflicts() + * @param parserFunction + */ + function convertFunction(&$element) + { + $funcloc = $this->getId($this->addLink($element)); + parent::convertFunction($element,array('function_dest' => $this->getId($element,false))); + } + + /** + * Converts include elements for template output + * @see prepareDocBlock() + * @param parserInclude + */ + function convertInclude(&$element) + { + parent::convertInclude($element, array('include_file' => '_'.strtr($element->getValue(),array('"' => '', "'" => '','.' => '_')))); + } + + /** + * Converts defines for template output + * @see prepareDocBlock(), getFormattedConflicts() + * @param parserDefine + */ + function convertDefine(&$element) + { + parent::convertDefine($element, array('define_link' => $this->getId($element,false))); + } + + /** + * Converts global variables for template output + * @param parserGlobal + */ + function convertGlobal(&$element) + { + parent::convertGlobal($element, array('global_link' => $this->getId($element,false))); + } + + /** + * converts procedural pages for template output + * @see prepareDocBlock(), getClassesOnPage() + * @param parserData + */ + function convertPage(&$element) + { + parent::convertPage($element); + $this->juststarted = true; + $this->page_dir = $element->parent->package; + if (!empty($element->parent->subpackage)) $this->page_dir .= PATH_DELIMITER . $element->parent->subpackage; + // registering stuff on the template + $this->page_data->assign("page",$this->getPageName($element) . '.html'); + $this->page_data->assign("title","Docs for page ".$element->parent->getFile()); + } + + function getPageName(&$element) + { + if (phpDocumentor_get_class($element) == 'parserpage') return '_'.$element->getName(); + return '_'.$element->parent->getName(); + } + + /** + * returns an array containing the class inheritance tree from the root object to the class + * + * @param parserClass class variable + * @return array Format: array(root,child,child,child,...,$class) + * @uses parserClass::getParentClassTree() + */ + + function generateFormattedClassTree($class) + { + $tree = $class->getParentClassTree($this); + $out = ''; + if (count($tree) - 1) + { + $result = array($class->getName()); + $parent = $tree[$class->getName()]; + $distance[] = ''; + while ($parent) + { + $x = $parent; + if (is_object($parent)) + { + $subpackage = $parent->docblock->subpackage; + $package = $parent->docblock->package; + $x = $parent; + $x = $parent->getLink($this); + if (!$x) $x = $parent->getName(); + } + $result[] = + $x; + $distance[] = + "\n%s|\n" . + "%s--"; + if (is_object($parent)) + $parent = $tree[$parent->getName()]; + elseif (isset($tree[$parent])) + $parent = $tree[$parent]; + } + $nbsp = ' '; + for($i=count($result) - 1;$i>=0;$i--) + { + $my_nbsp = ''; + for($j=0;$j<count($result) - $i;$j++) $my_nbsp .= $nbsp; + $distance[$i] = sprintf($distance[$i],$my_nbsp,$my_nbsp); + } + return array('classes'=>array_reverse($result),'distance'=>array_reverse($distance)); + } else + { + return array('classes'=>$class->getName(),'distance'=>array('')); + } + } + + /** @access private */ + function sortVar($a, $b) + { + return strnatcasecmp($a->getName(),$b->getName()); + } + + /** @access private */ + function sortMethod($a, $b) + { + if ($a->isConstructor) return -1; + if ($b->isConstructor) return 1; + return strnatcasecmp($a->getName(),$b->getName()); + } + + /** + * returns a template-enabled array of class trees + * + * @param string $package package to generate a class tree for + * @see $roots, HTMLConverter::getRootTree() + */ + function generateFormattedClassTrees($package) + { + if (!isset($this->roots['normal'][$package]) && + !isset($this->roots['special'][$package])) { + return array(); + } + $trees = array(); + if (isset($this->roots['normal'][$package])) { + $roots = $this->roots['normal'][$package]; + for($i=0;$i<count($roots);$i++) + { + $root = $this->classes->getClassByPackage($roots[$i], $package); + if ($root && $root->isInterface()) { + continue; + } + $trees[] = array('class' => $roots[$i],'class_tree' => "<ul>\n".$this->getRootTree($this->getSortedClassTreeFromClass($roots[$i],$package,''),$package)."</ul>\n"); + } + } + if (isset($this->roots['special'][$package])) { + $roots = $this->roots['special'][$package]; + foreach ($roots as $parent => $classes) { + $thistree = ''; + foreach ($classes as $classinfo) { + $root = $this->classes->getClassByPackage($classinfo, $package); + if ($root && $root->isInterface()) { + continue; + } + $thistree .= + $this->getRootTree( + $this->getSortedClassTreeFromClass( + $classinfo, + $package, + ''), + $package, + true); + } + if (!$thistree) { + continue; + } + $trees[] = array( + 'class' => $parent, + 'class_tree' => "<ul>\n" . $thistree . "</ul>\n" + ); + } + } + return $trees; + } + + /** + * returns a template-enabled array of interface inheritance trees + * + * @param string $package package to generate a class tree for + * @see $roots, HTMLConverter::getRootTree() + */ + function generateFormattedInterfaceTrees($package) + { + if (!isset($this->roots['normal'][$package]) && + !isset($this->roots['special'][$package])) { + return array(); + } + $trees = array(); + if (isset($this->roots['normal'][$package])) { + $roots = $this->roots['normal'][$package]; + for($i=0;$i<count($roots);$i++) + { + $root = $this->classes->getClassByPackage($roots[$i], $package); + if ($root && !$root->isInterface()) { + continue; + } + $trees[] = array('class' => $roots[$i],'class_tree' => "<ul>\n".$this->getRootTree($this->getSortedClassTreeFromClass($roots[$i],$package,''),$package)."</ul>\n"); + } + } + if (isset($this->roots['special'][$package])) { + $roots = $this->roots['special'][$package]; + foreach ($roots as $parent => $classes) { + $thistree = ''; + foreach ($classes as $classinfo) { + $root = $this->classes->getClassByPackage($classinfo, $package); + if ($root && !$root->isInterface()) { + continue; + } + $thistree .= + $this->getRootTree( + $this->getSortedClassTreeFromClass( + $classinfo, + $package, + ''), + $package, + true); + } + if (!$thistree) { + continue; + } + $trees[] = array( + 'class' => $parent, + 'class_tree' => "<ul>\n" . $thistree . "</ul>\n" + ); + } + } + return $trees; + } + + /** + * return formatted class tree for the Class Trees page + * + * @param array $tree output from {@link getSortedClassTreeFromClass()} + * @param string $package package + * @param boolean $nounknownparent if true, an object's parent will not be checked + * @see Classes::$definitechild, generateFormattedClassTrees() + * @return string + */ + function getRootTree($tree, $package, $noparent = false) + { + if (!$tree) return ''; + $my_tree = ''; + $cur = '#root'; + $lastcur = array(false); + $kids = array(); + $dopar = false; + if (!$noparent && $tree[$cur]['parent']) + { + $dopar = true; + if (!is_object($tree[$cur]['parent'])) + { +// debug("parent ".$tree[$cur]['parent']." not found"); + $my_tree .= '<li>' . $tree[$cur]['parent'] .'<ul>'; + } + else + { +// debug("parent ".$this->returnSee($tree[$cur]['parent'])." in other package"); + $root = $this->classes->getClassByPackage($tree[$cur]['parent']->name, + $package); + $my_tree .= '<li>' . $this->returnSee($tree[$cur]['parent']); + if ($tree[$cur]['parent']->package != $package) $my_tree .= ' <b>(Different package)</b><ul>'; + } + } + do + { +// fancy_debug($cur,$lastcur,$kids); + if (count($tree[$cur]['children'])) + { +// debug("$cur has children"); + if (!isset($kids[$cur])) + { +// debug("set $cur kids"); + $kids[$cur] = 1; + $root = $this->classes->getClassByPackage( + $tree[$cur]['link']->name, + $tree[$cur]['link']->package); + if ($implements = $root->getImplements()) { + $my_tree .= '<li>'.$this->returnSee($tree[$cur]['link']) . + ' (implements '; + foreach ($implements as $i => $interface) { + if ($i && $i != count($implements) - 1) $my_tree .= ', '; + if ($link = $this->getLink('object ' . $interface)) { + $my_tree .= $this->returnSee($link); + } else { + $my_tree .= $interface; + } + } + $my_tree .= ')'; + } else { + $my_tree .= '<li>'.$this->returnSee($tree[$cur]['link']); + } + $my_tree .= '<ul>'."\n"; + } + array_push($lastcur,$cur); + list(,$cur) = each($tree[$cur]['children']); +// var_dump('listed',$cur); + if ($cur) + { + $cur = $cur['package'] . '#' . $cur['class']; +// debug("set cur to child $cur"); +// $my_tree .= '<li>'.$this->returnSee($tree[$cur]['link']); + continue; + } else + { +// debug("end of children for $cur"); + $cur = array_pop($lastcur); + $cur = array_pop($lastcur); + $my_tree .= '</ul></li>'."\n"; + if ($dopar && ($cur == '#root' || !$cur)) $my_tree .= '</ul></li>'; + } + } else + { +// debug("$cur has no children"); + $my_tree .= '<li>'.$this->returnSee($tree[$cur]['link'])."</li>"; + if ($dopar && $cur == '#root') $my_tree .= '</ul></li>'; + $cur = array_pop($lastcur); + } + } while ($cur); + return $my_tree; + } + + /** + * Generate indexing information for given element + * + * @param parserElement descendant of parserElement + * @see generateElementIndex() + * @return array + */ + function getIndexInformation($elt) + { + $Result['type'] = $elt->type; + $Result['file_name'] = $elt->file; + $Result['path'] = $elt->getPath(); + + if (isset($elt->docblock)) + { + $Result['description'] = $elt->docblock->getSDesc($this); + + if ($elt->docblock->hasaccess) + $Result['access'] = $elt->docblock->tags['access'][0]->value; + else + $Result['access'] = 'public'; + + $Result['abstract'] = isset ($elt->docblock->tags['abstract'][0]); + } + else + $Result['description'] = ''; + + $aa = $Result['description']; + if (!empty($aa)) $aa = "<br> $aa"; + + switch($elt->type) + { + case 'class': + $Result['name'] = $elt->getName(); + $Result['title'] = 'Class'; + $Result['link'] = $this->getClassLink($elt->getName(), + $elt->docblock->package, + $elt->getPath(), + $elt->getName()); + $Result['listing'] = 'in file '.$elt->file.', class '.$Result['link']."$aa"; + break; + case 'define': + $Result['name'] = $elt->getName(); + $Result['title'] = 'Constant'; + $Result['link'] = $this->getDefineLink($elt->getName(), + $elt->docblock->package, + $elt->getPath(), + $elt->getName()); + $Result['listing'] = 'in file '.$elt->file.', constant '.$Result['link']."$aa"; + break; + case 'global': + $Result['name'] = $elt->getName(); + $Result['title'] = 'Global'; + $Result['link'] = $this->getGlobalLink($elt->getName(), + $elt->docblock->package, + $elt->getPath(), + $elt->getName()); + $Result['listing'] = 'in file '.$elt->file.', global variable '.$Result['link']."$aa"; + break; + case 'function': + $Result['name'] = $elt->getName(); + $Result['title'] = 'Function'; + $Result['link'] = $this->getFunctionLink($elt->getName(), + $elt->docblock->package, + $elt->getPath(), + $elt->getName().'()'); + $Result['listing'] = 'in file '.$elt->file.', function '.$Result['link']."$aa"; + break; + case 'method': + $Result['name'] = $elt->getName(); + $Result['title'] = 'Method'; + $Result['link'] = $this->getMethodLink($elt->getName(), + $elt->class, + $elt->docblock->package, + $elt->getPath(), + $elt->class.'::'.$elt->getName().'()' + ); + if ($elt->isConstructor) $Result['constructor'] = 1; + $Result['listing'] = 'in file '.$elt->file.', method '.$Result['link']."$aa"; + break; + case 'var': + $Result['name'] = $elt->getName(); + $Result['title'] = 'Variable'; + $Result['link'] = $this->getVarLink($elt->getName(), + $elt->class, + $elt->docblock->package, + $elt->getPath(), + $elt->class.'::'.$elt->getName()); + $Result['listing'] = 'in file '.$elt->file.', variable '.$Result['link']."$aa"; + break; + case 'const': + $Result['name'] = $elt->getName(); + $Result['title'] = 'Class Constant'; + $Result['link'] = $this->getConstLink($elt->getName(), + $elt->class, + $elt->docblock->package, + $elt->getPath(), + $elt->class.'::'.$elt->getName()); + $Result['listing'] = 'in file '.$elt->file.', class constant '.$Result['link']."$aa"; + break; + case 'page': + $Result['name'] = $elt->getFile(); + $Result['title'] = 'Page'; + $Result['link'] = $this->getPageLink($elt->getFile(), + $elt->package, + $elt->getPath(), + $elt->getFile()); + $Result['listing'] = 'procedural page '.$Result['link']; + break; + case 'include': + $Result['name'] = $elt->getName(); + $Result['title'] = 'Include'; + $Result['link'] = $elt->getValue(); + $Result['listing'] = 'include '.$Result['name']; + break; + } + + return $Result; + } + /** + * Generate alphabetical index of all elements + * + * @see $elements, walk() + */ + function generateElementIndex() + { + $elementindex = array(); + $letters = array(); + $used = array(); + foreach($this->elements as $letter => $nutoh) + { + foreach($this->elements[$letter] as $i => $yuh) + { + if ($this->elements[$letter][$i]->type != 'include') + { + if (!isset($used[$letter])) + { + $letters[]['letter'] = $letter; + $elindex['letter'] = $letter; + $used[$letter] = 1; + } + + $elindex['index'][] = $this->getIndexInformation($this->elements[$letter][$i]); + } + } + if (isset($elindex['index'])) + { + $elementindex[] = $elindex; + } else + { + unset($letters[count($letters) - 1]); + } + $elindex = array(); + } + return array($elementindex,$letters); + } + + function copyMediaRecursively($media,$targetdir,$subdir = '') + { + $versionControlDirectories = array ('CVS', 'media/CVS', 'media\\CVS', '.svn', 'media/.svn', 'media\\.svn'); + if (!is_array($media)) { + return; + } + foreach($media as $dir => $files) + { + if ($dir === '/') + { + $this->copyMediaRecursively($files,$targetdir); + } else + { + if (!is_numeric($dir)) + { + if (in_array($dir, $versionControlDirectories)) + { + // skip it entirely + } + else + { + // create the subdir + phpDocumentor_out("creating $targetdir" . PATH_DELIMITER . "$dir\n"); + Converter::setTargetDir($targetdir . PATH_DELIMITER . $dir); + if (!empty($subdir)) + { + $subdir .= PATH_DELIMITER; + } + $this->copyMediaRecursively($files,"$targetdir/$dir",$subdir . $dir); + } + } + else + { + // copy the file + phpDocumentor_out("copying $targetdir" . PATH_DELIMITER . $files['file']."\n"); + $this->copyFile($files['file'],$subdir); + } + } + } + } + + /** + * calls the converter setTargetDir, and then copies any template images and the stylesheet if they haven't been copied + * @see Converter::setTargetDir() + */ + function setTargetDir($dir) + { + Converter::setTargetDir($dir); + if ($this->wrote) return; + $this->wrote = true; + $template_images = array(); + $stylesheets = array(); + $tdir = $dir; + $dir = $this->templateDir; + $this->templateDir = $this->templateDir.'templates/'; + $info = new Io; + $this->copyMediaRecursively($info->getDirTree($this->templateDir.'media',$this->templateDir),$tdir); + } + + /** + * Generate alphabetical index of all elements by package and subpackage + * + * @param string $package name of a package + * @see $pkg_elements, walk(), generatePkgElementIndexes() + */ + function generatePkgElementIndex($package) + { +// var_dump($this->pkg_elements[$package]); + $elementindex = array(); + $letters = array(); + $letterind = array(); + $used = array(); + $subp = ''; + foreach($this->pkg_elements[$package] as $subpackage => $els) + { + if (empty($els)) continue; + if (!empty($subpackage)) $subp = " (<b>subpackage:</b> $subpackage)"; else $subp = ''; + foreach($els as $letter => $yuh) + { + foreach($els[$letter] as $i => $yuh) + { + if ($els[$letter][$i]->type != 'include') + { + if (!isset($used[$letter])) + { + $letters[]['letter'] = $letter; + $letterind[$letter] = count($letters) - 1; + $used[$letter] = 1; + } + $elindex[$letter]['letter'] = $letter; + + $elindex[$letter]['index'][] = $this->getIndexInformation($els[$letter][$i]); + } + } + } + } + ksort($elindex); + usort($letters,'HTMLframes_lettersort'); + if (isset($elindex)) + { + while(list($letter,$tempel) = each($elindex)) + { + if (!isset($tempel)) + { + unset($letters[$letterind[$tempel['letter']]]); + } else + $elementindex[] = $tempel; + } + } else $letters = array(); + return array($elementindex,$letters); + } + + /** + * + * @see generatePkgElementIndex() + */ + function generatePkgElementIndexes() + { + $packages = array(); + $package_names = array(); + $pkg = array(); + $letters = array(); + foreach($this->pkg_elements as $package => $trash) + { + $pkgs['package'] = $package; + $pkg['package'] = $package; + list($pkg['pindex'],$letters[$package]) = $this->generatePkgElementIndex($package); + if (count($pkg['pindex'])) + { + $packages[] = $pkg; + $package_names[] = $pkgs; + } + unset($pkgs); + unset($pkg); + } + foreach($packages as $i => $package) + { + $pnames = array(); + for($j=0;$j<count($package_names);$j++) + { + if ($package_names[$j]['package'] != $package['package']) $pnames[] = $package_names[$j]; + } + $packages[$i]['packageindexes'] = $pnames; + } + return array($packages,$package_names,$letters); + } + + /** + * @param string name of class + * @param string package name + * @param string full path to look in (used in index generation) + * @param boolean deprecated + * @param boolean return just the URL, or enclose it in an html a tag + * @return mixed false if not found, or an html a link to the class's documentation + * @see parent::getClassLink() + */ + function getClassLink($expr,$package, $file = false,$text = false, $with_a = true) + { + $a = Converter::getClassLink($expr,$package,$file); + if (!$a) return false; + return $this->returnSee($a, $text, $with_a); + } + + /** + * @param string name of function + * @param string package name + * @param string full path to look in (used in index generation) + * @param boolean deprecated + * @param boolean return just the URL, or enclose it in an html a tag + * @return mixed false if not found, or an html a link to the function's documentation + * @see parent::getFunctionLink() + */ + function getFunctionLink($expr,$package, $file = false,$text = false) + { + $a = Converter::getFunctionLink($expr,$package,$file); + if (!$a) return false; + return $this->returnSee($a, $text); + } + + /** + * @param string name of define + * @param string package name + * @param string full path to look in (used in index generation) + * @param boolean deprecated + * @param boolean return just the URL, or enclose it in an html a tag + * @return mixed false if not found, or an html a link to the define's documentation + * @see parent::getDefineLink() + */ + function getDefineLink($expr,$package, $file = false,$text = false) + { + $a = Converter::getDefineLink($expr,$package,$file); + if (!$a) return false; + return $this->returnSee($a, $text); + } + + /** + * @param string name of global variable + * @param string package name + * @param string full path to look in (used in index generation) + * @param boolean deprecated + * @param boolean return just the URL, or enclose it in an html a tag + * @return mixed false if not found, or an html a link to the global variable's documentation + * @see parent::getGlobalLink() + */ + function getGlobalLink($expr,$package, $file = false,$text = false) + { + $a = Converter::getGlobalLink($expr,$package,$file); + if (!$a) return false; + return $this->returnSee($a, $text); + } + + /** + * @param string name of procedural page + * @param string package name + * @param string full path to look in (used in index generation) + * @param boolean deprecated + * @param boolean return just the URL, or enclose it in an html a tag + * @return mixed false if not found, or an html a link to the procedural page's documentation + * @see parent::getPageLink() + */ + function getPageLink($expr,$package, $path = false,$text = false) + { + $a = Converter::getPageLink($expr,$package,$path); + if (!$a) return false; + return $this->returnSee($a, $text); + } + + /** + * @param string name of method + * @param string class containing method + * @param string package name + * @param string full path to look in (used in index generation) + * @param boolean deprecated + * @param boolean return just the URL, or enclose it in an html a tag + * @return mixed false if not found, or an html a link to the method's documentation + * @see parent::getMethodLink() + */ + function getMethodLink($expr,$class,$package, $file = false,$text = false) + { + $a = Converter::getMethodLink($expr,$class,$package,$file); + if (!$a) return false; + return $this->returnSee($a, $text); + } + + /** + * @param string name of var + * @param string class containing var + * @param string package name + * @param string full path to look in (used in index generation) + * @param boolean deprecated + * @param boolean return just the URL, or enclose it in an html a tag + * @return mixed false if not found, or an html a link to the var's documentation + * @see parent::getVarLink() + */ + function getVarLink($expr,$class,$package, $file = false,$text = false) + { + $a = Converter::getVarLink($expr,$class,$package,$file); + if (!$a) return false; + return $this->returnSee($a, $text); + } + + /** + * @param string name of class constant + * @param string class containing class constant + * @param string package name + * @param string full path to look in (used in index generation) + * @param boolean deprecated + * @param boolean return just the URL, or enclose it in an html a tag + * @return mixed false if not found, or an html a link to the var's documentation + * @see parent::getVarLink() + */ + function getConstLink($expr,$class,$package, $file = false,$text = false) + { + $a = Converter::getConstLink($expr,$class,$package,$file); + if (!$a) return false; + return $this->returnSee($a, $text); + } + + /** + * does a nat case sort on the specified second level value of the array + * + * @param mixed $a + * @param mixed $b + * @return int + */ + function rcNatCmp ($a, $b) + { + $aa = strtoupper($a[$this->rcnatcmpkey]); + $bb = strtoupper($b[$this->rcnatcmpkey]); + + return strnatcasecmp($aa, $bb); + } + + /** + * does a nat case sort on the specified second level value of the array. + * this one puts constructors first + * + * @param mixed $a + * @param mixed $b + * @return int + */ + function rcNatCmp1 ($a, $b) + { + $aa = strtoupper($a[$this->rcnatcmpkey]); + $bb = strtoupper($b[$this->rcnatcmpkey]); + + if (strpos($aa,'CONSTRUCTOR') === 0) + { + return -1; + } + if (strpos($bb,'CONSTRUCTOR') === 0) + { + return 1; + } + if (strpos($aa,strtoupper($this->class)) === 0) + { + return -1; + } + if (strpos($bb,strtoupper($this->class)) === 0) + { + return -1; + } + return strnatcasecmp($aa, $bb); + } + + /** + * This function is not used by HTMLdefaultConverter, but is required by Converter + */ + function Output() + { + } +} + +/** + * @access private + * @global string name of the package to set as the first package + */ +function HTMLframes_pindexcmp($a, $b) +{ + global $phpDocumentor_DefaultPackageName; + if ($a['title'] == $phpDocumentor_DefaultPackageName) return -1; + if ($b['title'] == $phpDocumentor_DefaultPackageName) return 1; + return strnatcasecmp($a['title'],$b['title']); +} + +/** @access private */ +function HTMLframes_lettersort($a, $b) +{ + return strnatcasecmp($a['letter'],$b['letter']); +} + +/** @access private */ +function HTMLframes_outputfilter($src, &$smarty) +{ + return str_replace('{$subdir}',$smarty->_tpl_vars['subdir'],$src); +} +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/options.ini b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/options.ini new file mode 100755 index 00000000..084809be --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/options.ini @@ -0,0 +1,577 @@ +preservedocbooktags = false + +;; used to highlight the {@source} inline tag, @filesource tag, and @example tag +[highlightSourceTokens] +;; format: +;; T_CONSTANTNAME = open +;; /T_CONSTANTNAME = close + +T_INCLUDE = <span class="src-inc"> +/T_INCLUDE = </span> +T_INCLUDE_ONCE = <span class="src-inc"> +/T_INCLUDE_ONCE = </span> +T_REQUIRE_ONCE = <span class="src-inc"> +/T_REQUIRE_ONCE = </span> +T_REQUIRE_ONCE = <span class="src-inc"> +/T_REQUIRE_ONCE = </span> + +T_CONSTANT_ENCAPSED_STRING = <span class="src-str"> +/T_CONSTANT_ENCAPSED_STRING = </span> +T_STRING_VARNAME = <span class="src-str"> +/T_STRING_VARNAME = </span> + +T_STRING = <span class="src-id"> +/T_STRING = </span> + +T_DNUMBER = <span class="src-num"> +/T_DNUMBER = </span> +T_LNUMBER = <span class="src-num"> +/T_LNUMBER = </span> + +T_VARIABLE = <span class="src-var"> +/T_VARIABLE = </span> + +T_COMMENT = <span class="src-comm"> +/T_COMMENT = </span> +T_ML_COMMENT = <span class="src-comm"> +/T_ML_COMMENT = </span> + +T_OBJECT_OPERATOR = <span class="src-sym"> +/T_OBJECT_OPERATOR = </span> + +T_ABSTRACT = <span class="src-key"> +/T_ABSTRACT = </span> +T_CLONE = <span class="src-key"> +/T_CLONE = </span> +T_HALT_COMPILER = <span class="src-key"> +/T_HALT_COMPILER = </span> +T_ARRAY = <span class="src-key"> +/T_ARRAY = </span> +T_AS = <span class="src-key"> +/T_AS = </span> +T_BREAK = <span class="src-key"> +/T_BREAK = </span> +T_CLASS = <span class="src-key"> +/T_CLASS = </span> +T_CASE = <span class="src-key"> +/T_CASE = </span> +T_CONST = <span class="src-key"> +/T_CONST = </span> +T_CONTINUE = <span class="src-key"> +/T_CONTINUE = </span> +T_DECLARE = <span class="src-key"> +/T_DECLARE = </span> +T_DEFAULT = <span class="src-key"> +/T_DEFAULT = </span> +T_ELSE = <span class="src-key"> +/T_ELSE = </span> +T_ELSEIF = <span class="src-key"> +/T_ELSEIF = </span> +T_EMPTY = <span class="src-key"> +/T_EMPTY = </span> +T_ENDDECLARE = <span class="src-key"> +/T_ENDDECLARE = </span> +T_ENDFOR = <span class="src-key"> +/T_ENDFOR = </span> +T_ENDSWITCH = <span class="src-key"> +/T_ENDSWITCH = </span> +T_ENDFOREACH = <span class="src-key"> +/T_ENDFOREACH = </span> +T_ENDIF = <span class="src-key"> +/T_ENDIF = </span> +T_ENDWHILE = <span class="src-key"> +/T_ENDWHILE = </span> +T_EXIT = <span class="src-key"> +/T_EXIT = </span> +T_EXTENDS = <span class="src-key"> +/T_EXTENDS = </span> +T_FINAL = <span class="src-key"> +/T_FINAL = </span> +T_FOR = <span class="src-key"> +/T_FOR = </span> +T_FOREACH = <span class="src-key"> +/T_FOREACH = </span> +T_FUNCTION = <span class="src-key"> +/T_FUNCTION = </span> +T_GLOBAL = <span class="src-key"> +/T_GLOBAL = </span> +T_IF = <span class="src-key"> +/T_IF = </span> +T_IMPLEMENTS = <span class="src-key"> +/T_IMPLEMENTS = </span> +T_INTERFACE = <span class="src-key"> +/T_INTERFACE = </span> +T_LOGICAL_AND = <span class="src-key"> +/T_LOGICAL_AND = </span> +T_LOGICAL_OR = <span class="src-key"> +/T_LOGICAL_OR = </span> +T_LOGICAL_XOR = <span class="src-key"> +/T_LOGICAL_XOR = </span> +T_NEW = <span class="src-key"> +/T_NEW = </span> +T_PRIVATE = <span class="src-key"> +/T_PRIVATE = </span> +T_PROTECTED = <span class="src-key"> +/T_PROTECTED = </span> +T_PUBLIC = <span class="src-key"> +/T_PUBLIC = </span> +T_RETURN = <span class="src-key"> +/T_RETURN = </span> +T_STATIC = <span class="src-key"> +/T_STATIC = </span> +T_SWITCH = <span class="src-key"> +/T_SWITCH = </span> +T_VAR = <span class="src-key"> +/T_VAR = </span> +T_WHILE = <span class="src-key"> +/T_WHILE = </span> + +T_DOUBLE_COLON = <span class="src-sym"> +/T_DOUBLE_COLON = </span> + +T_OPEN_TAG = <span class="src-php"> +/T_OPEN_TAG = </span> +T_OPEN_TAG_WITH_ECHO = <span class="src-php"> +/T_OPEN_TAG_WITH_ECHO = </span> +T_CLOSE_TAG = <span class="src-php"> +/T_CLOSE_TAG = </span> + + +[highlightSource] +;; this is for highlighting things that aren't tokens like "&" +;; format: +;; word = open +;; /word = close +@ = <span class="src-sym"> +/@ = </span> +& = <span class="src-sym"> +/& = </span> +[ = <span class="src-sym"> +/[ = </span> +] = <span class="src-sym"> +/] = </span> +! = <span class="src-sym"> +/! = </span> +";" = <span class="src-sym"> +/; = </span> +( = <span class="src-sym"> +/( = </span> +) = <span class="src-sym"> +/) = </span> +, = <span class="src-sym"> +/, = </span> +{ = <span class="src-sym"> +/{ = </span> +} = <span class="src-sym"> +/} = </span> +""" = <span class="src-str"> +/" = </span> + +[highlightDocBlockSourceTokens] +;; this is for docblock tokens, using by phpDocumentor_HighlightParser +;; tagphptype is for "string" in @param string description, for example +docblock = <span class="src-doc"> +/docblock = </span> +tagphptype = <span class="src-doc-type"> +/tagphptype = </span> +tagvarname = <span class="src-doc-var"> +/tagvarname = </span> +coretag = <span class="src-doc-coretag"> +/coretag = </span> +tag = <span class="src-doc-tag"> +/tag = </span> +inlinetag = <span class="src-doc-inlinetag"> +/inlinetag = </span> +internal = <span class="src-doc-internal"> +/internal = </span> +closetemplate = <span class="src-doc-close-template"> +/closetemplate = </span> +docblocktemplate = <span class="src-doc-template"> +/docblocktemplate = </span> + +[highlightTutorialSourceTokens] +;; this is for XML DocBook-based tutorials, highlighted by phpDocumentor_TutorialHighlightParser +;; <tag> +opentag = <span class="tute-tag"> +/opentag = </span> +;; </tag> +closetag = <span class="tute-tag"> +/closetag = </span> +;; <tag attribute="value"> +attribute = <span class="tute-attribute-name"> +/attribute = </span> +;; <tag attribute="value"> +attributevalue = <span class="tute-attribute-value"> +/attributevalue = </span> +;; &entity; +entity = <span class="tute-entity"> +/entity = </span> +;; <!-- comment --> +comment = <span class="tute-comment"> +/comment = </span> +;; {@inline tag} +itag = <span class="tute-inline-tag"> +/itag = </span> + +;; used for translation of html in DocBlocks +[desctranslate] +ul = <ul> +/ul = </ul> +ol = <ol> +/ol = </ol> +li = <li> +/li = </li> +code = +/code = +var = <var> +/var = </var> +samp = <samp> +/samp = </samp> +kbd = <kbd> +/kbd = </kbd> +pre = <pre> +/pre = </pre> +p = <p> +/p = </p> +b = <strong> +/b = </strong> +i = <em> +/i = </em> +br = <br /> + +[ppage] +;; this is the DocBook package page translation section. All DocBook tags +;; that have a corresponding html tag must be listed here. Entities should +;; also be listed here +;; +;; examples: +;; 1) +;; tagname = newtagname +;; +;; This is the simplest case, where all attributes will be added into the +;; starting tag and the ending tag will be html/xml style </tranlatedtagname> +;; <tagname></tagname> becomes <newtagname></newtagname> and +;; <tagname attr="value"></tagname> becomes +;; <newtagname attr="value"></newtagname> +;; +;; 2) +;; tagname = newtagname +;; tagname->attr = newattrname +;; +;; in this case, everything will be like the first case, except tags like: +;; <tagname attr="value"></tagname> will become +;; <newtagname newattrname="value"></newtagname> +;; +;; 3) +;; tagname = newtagname +;; tagname->attr = newattrname +;; tagname->attr+value = newvalue +;; +;; in this case, the value is also translated to another. This can be useful +;; for instances such as focus="middle" changing to align="center" or something +;; of that nature. +;; <tagname attr="value"></tagname> will become +;; <newtagname newattrname="newvalue"></newtagname> +;; +;; 4) +;; tagname = newtagname +;; tagname->attr1 = newattrname +;; tagname->attr2 = newattrname +;; tagname->attr1+value|attr2+value = newvalue +;; +;; in this case, two attributes combine to make one new attribute, and the combined +;; value is translated into a new value +;; <tagname attr1="value1" attr2="value2"></tagname> will become +;; <newtagname newattrname="newvalue"></newtagname> +;; +;; 5) +;; tagname = newtagname +;; tagname!attr = dummy +;; +;; here, the attribute will be ignored. dummy is not used and may be any value +;; <tagname attr="value"></tagname> will become +;; <newtagname></newtagname> +;; +;; 6) +;; tagname = newtagname +;; tagname! = dummy +;; +;; here, all attributes will be ignored. dummy is not used and may be any value +;; <tagname attr1="value" attr2="foo"></tagname> will become +;; <newtagname></newtagname> +;; +;; 7) +;; tagname = newtagname +;; tagname/ = 1 +;; +;; here, the tag will be translated as a single tag with no closing tag, and all +;; attributes +;; <tagname attr="val">{text text}</tagname> will become +;; <newtagname attr="val" /> +;; +;; 8) +;; tagname = <starttaginfo /> +;; /tagname = closetagtext +;; +;; in this case, the text <starttaginfo> will be inserted exactly as entered for +;; <tagname> and closetagtext for </tagname> +;; <tagname attr="val"></tagname> will become +;; <starttaginfo />closetagtext +;; +;; 9) +;; $attr$my_attribute = newattrname +;; +;; tagname = newtagname +;; +;; in this case, all occurences of my_attribute in any tag will be changed to +;; newattrname. This is useful for changing things like role="php" to +;; class="php," for example. Note that the text "$attr$" MUST be on the line +;; start for phpDocumentor to recognize it. +;; +;; 10) +;; &entity; = translation text +;; " = " +;; " = """ +;; < = < +;; +;; Use this to control translation of entities to their appropriate values + + = +" = " +” = ” +“ = “ +& = & +< = < +> = > +© = © + + +$attr$role = class + +abbrev = abbr + +blockquote = blockquote + +arg = span +arg->choice = class + +author = <span class="author"> +/author = </span> +author! = 0 + +authorblurb = <div class="author-blurb"> +/authorblurb = </div> + +authorgroup = <div class="authors"><h2 class="title">Authors</h2> +/authorgroup = </div> +authorgroup! = 0 + +caution = <span class="warning"> +/caution = </span> +caution! = 0 + +cmdsynopsis = <div class="cmd-synopsis"> +/cmdsynopsis = </div> + +command = <span class="cmd-title"> +/command = </span> + +copyright = <div class="notes"> +/copyright = </div> + +emphasis = em + +example = <div class="src-code"> +/example = </div> +example! = 0 + +function = +/function = () + +formalpara = p + +graphic = img +graphic->fileref = src +graphic/ = + +important = strong + +informalequation = blockquote + +informalexample = div + +inlineequation = em + +itemizedlist = ul + +listitem = li + +literal = code + +literallayout = span + +option = " " +/option = + +orderedlist = ol + +para = p + +programlisting = <div class="src-code"> +/programlisting = </div> +programlisting! = 0 + +refentry = div + +refnamediv = <div class="ref-title-box"> +/refnamediv = </div> +refnamediv! = 0 + +refname = <h1 class="ref-title"> +/refname = </h1> + +refpurpose = <h2 class="ref-purpose"> +/refpurpose = </h2> + +refsynopsisdiv = <div class="ref-synopsis"> +/refsynopsisdiv = </div> +refsynopsisdiv! = 0 + +refsect1 = span + +refsect2 = span + +refsect3 = +/refsect3 = <br /> + +releaseinfo = <div class="release-info">( +/releaseinfo = )</div> + +simpara = +/simpara = <br /> +simpara! = 0 + +subscript = sub + +superscript = super + +table = table + +table->colsep = rules +table->rowsep = rules +table->colsep+1|rowsep+1 =all +table->colsep+1|rowsep+0 =cols +table->colsep+0|rowsep+1 =rows + +table->frame =frame +table->frame+all =border +table->frame+none =void +table->frame+sides =vsides +table->frame+top =above +table->frame+topbot =hsides + +thead = thead + +tfoot = tfoot + +tbody = tbody + +colspec = col + +tgroup = colgroup +tgroup/ = 1 +tgroup->cols = span + +row = tr + +entry = td +entry->morerows = colspan +entry->morerows+1 =2 +entry->morerows+2 =3 +entry->morerows+3 =4 +entry->morerows+4 =5 +entry->morerows+5 =6 +entry->morerows+6 =7 +entry->morerows+7 =8 +entry->morerows+8 =9 +entry->morerows+9 =10 +entry->morerows+10 =11 +;; add more if you need more colspans + +warning = <span class="warning"> +/warning = </span> +warning! = 0 + +;; now begins the attributes that should be tags in cdata +[$attr$id] +open = a +;close = /a +cdata! = true +quotevalues = true +separator = "=" +;separateall = true +$id = name + +;; now begins the sections that deal with <title> +[refsynopsisdiv_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h1 class="title"> +close = </h1> + +[refsect1_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h2 class="title"> +close = </h2> + +[refsect2_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h3 class="title"> +close = </h3> + +[refsect3_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h4 class="title"> +close = </h4> + +[para_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <div class="title"> +close = </div> + +[formalpara_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <div class="title"> +close = </div> + +[example_title] +;tag_attr = true +;attr_name = title +;cdata_start = true +cdata_end = true +open = </td></tr><tr><td><strong> +close = </strong> + +[table_title] +;tag_attr = true +;attr_name = true +cdata_start = true +open = <caption> +close = </caption> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/basicindex.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/basicindex.tpl new file mode 100755 index 00000000..951ee264 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/basicindex.tpl @@ -0,0 +1,47 @@ +<div class="index-letter-menu"> +{section name=letter loop=$letters} + <a class="index-letter" href="{$indexname}.html#{$letters[letter].letter}">{$letters[letter].letter}</a> +{/section} +</div> + +{section name=index loop=$index} + <a name="{$index[index].letter}"></a> + <div class="index-letter-section"> + <div style="float: left" class="index-letter-title">{$index[index].letter}</div> + <div style="float: right"><a href="#top">top</a></div> + <div style="clear: both"></div> + </div> + <dl> + {section name=contents loop=$index[index].index} + <dt class="field"> + {if ($index[index].index[contents].title == "Variable")} + <span class="var-title">{$index[index].index[contents].name}</span> + {elseif ($index[index].index[contents].title == "Global")} + <span class="var-title">{$index[index].index[contents].name}</span> + {elseif ($index[index].index[contents].title == "Method")} + <span class="method-title">{$index[index].index[contents].name}</span> + {elseif ($index[index].index[contents].title == "Function")} + <span class="method-title">{$index[index].index[contents].name}</span> + {elseif ($index[index].index[contents].title == "Constant")} + <span class="const-title">{$index[index].index[contents].name}</span> + {elseif ($index[index].index[contents].title == "Page") || ($index[index].index[contents].title == "Include")} + <span class="include-title">{$index[index].index[contents].name}</span> + {else} + {$index[index].index[contents].name} + {/if} + </dt> + <dd class="index-item-body"> + <div class="index-item-details">{$index[index].index[contents].link} in {$index[index].index[contents].file_name}</div> + {if $index[index].index[contents].description} + <div class="index-item-description">{$index[index].index[contents].description}</div> + {/if} + </dd> + {/section} + </dl> +{/section} + +<div class="index-letter-menu"> +{section name=letter loop=$letters} + <a class="index-letter" href="{$indexname}.html#{$letters[letter].letter}">{$letters[letter].letter}</a> +{/section} +</div> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/blank.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/blank.tpl new file mode 100755 index 00000000..6a05f27e --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/blank.tpl @@ -0,0 +1,13 @@ +<html> +<head> + <title>{$maintitle}</title> + <link rel="stylesheet" href="{$subdir}media/stylesheet.css" /> + <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/> +</head> +<body> +<div align="center"><h1>{$maintitle}</h1></div> +<b>Welcome to {$package}!</b><br /> +<br /> +This documentation was generated by <a href="{$phpdocwebsite}">phpDocumentor v{$phpdocversion}</a><br /> +</body> +</html>
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/class.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/class.tpl new file mode 100755 index 00000000..9ab7c455 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/class.tpl @@ -0,0 +1,429 @@ +{include file="header.tpl" top3=true} + +<h2 class="class-name">{if $is_interface}Interface{else}Class{/if} {$class_name}</h2> + +<a name="sec-description"></a> +<div class="info-box"> + <div class="info-box-title">Description</div> + <div class="nav-bar"> + {if $children || $vars || $ivars || $methods || $imethods || $consts || $iconsts } + <span class="disabled">Description</span> | + {/if} + {if $children} + <a href="#sec-descendents">Descendents</a> + {if $vars || $ivars || $methods || $imethods || $consts || $iconsts}|{/if} + {/if} + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + {if $methods || $imethods}|{/if} + {/if} + {if $methods || $imethods} + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + {if $implements} + <p class="implements"> + Implements interfaces: + <ul> + {foreach item="int" from=$implements}<li>{$int}</li>{/foreach} + </ul> + </p> + {/if} + {include file="docblock.tpl" type="class" sdesc=$sdesc desc=$desc} + <p class="notes"> + Located in <a class="field" href="{$page_link}">{$source_location}</a> (line <span class="field">{if $class_slink}{$class_slink}{else}{$line_number}{/if}</span>) + </p> + + {if $tutorial} + <hr class="separator" /> + <div class="notes">Tutorial: <span class="tutorial">{$tutorial}</span></div> + {/if} + + <pre>{section name=tree loop=$class_tree.classes}{$class_tree.classes[tree]}{$class_tree.distance[tree]}{/section}</pre> + + {if $conflicts.conflict_type} + <hr class="separator" /> + <div><span class="warning">Conflicts with classes:</span><br /> + {section name=me loop=$conflicts.conflicts} + {$conflicts.conflicts[me]}<br /> + {/section} + </div> + {/if} + </div> +</div> + +{if $children} + <a name="sec-descendents"></a> + <div class="info-box"> + <div class="info-box-title">Direct descendents</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + <span class="disabled">Descendents</span> + {if $vars || $ivars || $methods || $imethods}|{/if} + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + {if $methods || $imethods}|{/if} + {/if} + {if $methods || $imethods} + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + <table cellpadding="2" cellspacing="0" class="class-table"> + <tr> + <th class="class-table-header">Class</th> + <th class="class-table-header">Description</th> + </tr> + {section name=kids loop=$children} + <tr> + <td style="padding-right: 2em">{$children[kids].link}</td> + <td> + {if $children[kids].sdesc} + {$children[kids].sdesc} + {else} + {$children[kids].desc} + {/if} + </td> + </tr> + {/section} + </table> + </div> + </div> +{/if} + +{if $consts} + <a name="sec-const-summary"></a> + <div class="info-box"> + <div class="info-box-title">Class Constant Summary</span></div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendants</a> | + {/if} + <span class="disabled">Constants</span> (<a href="#sec-consts">details</a>) + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + | + {/if} + {if $methods || $imethods} + | + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + <div class="const-summary"> + {section name=consts loop=$consts} + <div class="const-title"> + <img src="{$subdir}media/images/Constant.png" alt=" " /> + <a href="#{$consts[consts].const_name}" title="details" class="const-name">{$consts[consts].const_name}</a> = <span class="var-type">{$consts[consts].const_value}</span> + + </div> + {/section} + </div> + </div> + </div> +{/if} + +{if $vars} + <a name="sec-var-summary"></a> + <div class="info-box"> + <div class="info-box-title">Variable Summary</span></div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendents</a> | + {/if} + <span class="disabled">Vars</span> (<a href="#sec-vars">details</a>) + {if $methods || $imethods} + | + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + <div class="var-summary"> + {section name=vars loop=$vars} + {if $vars[vars].static} + <div class="var-title"> + static <span class="var-type">{$vars[vars].var_type}</span> + <a href="#{$vars[vars].var_name}" title="details" class="var-name">{$vars[vars].var_name}</a> + </div> + {/if} + {/section} + {section name=vars loop=$vars} + {if !$vars[vars].static} + <div class="var-title"> + <span class="var-type">{$vars[vars].var_type}</span> + <a href="#{$vars[vars].var_name}" title="details" class="var-name">{$vars[vars].var_name}</a> + </div> + {/if} + {/section} + </div> + </div> + </div> +{/if} + +{if $methods} + <a name="sec-method-summary"></a> + <div class="info-box"> + <div class="info-box-title">Method Summary</span></div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendents</a> | + {/if} + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + | + {/if} + <span class="disabled">Methods</span> (<a href="#sec-methods">details</a>) + </div> + <div class="info-box-body"> + <div class="method-summary"> + {section name=methods loop=$methods} + {if $methods[methods].static} + <div class="method-definition"> + static {if $methods[methods].function_return} + <span class="method-result">{$methods[methods].function_return}</span> + {/if} + <a href="#{$methods[methods].function_name}" title="details" class="method-name">{if $methods[methods].ifunction_call.returnsref}&{/if}{$methods[methods].function_name}</a> + {if count($methods[methods].ifunction_call.params)} + ({section name=params loop=$methods[methods].ifunction_call.params}{if $smarty.section.params.iteration != 1}, {/if}{if $methods[methods].ifunction_call.params[params].hasdefault}[{/if}<span class="var-type">{$methods[methods].ifunction_call.params[params].type}</span> <span class="var-name">{$methods[methods].ifunction_call.params[params].name}</span>{if $methods[methods].ifunction_call.params[params].hasdefault} = <span class="var-default">{$methods[methods].ifunction_call.params[params].default}</span>]{/if}{/section}) + {else} + () + {/if} + </div> + {/if} + {/section} + {section name=methods loop=$methods} + {if !$methods[methods].static} + <div class="method-definition"> + {if $methods[methods].function_return} + <span class="method-result">{$methods[methods].function_return}</span> + {/if} + <a href="#{$methods[methods].function_name}" title="details" class="method-name">{if $methods[methods].ifunction_call.returnsref}&{/if}{$methods[methods].function_name}</a> + {if count($methods[methods].ifunction_call.params)} + ({section name=params loop=$methods[methods].ifunction_call.params}{if $smarty.section.params.iteration != 1}, {/if}{if $methods[methods].ifunction_call.params[params].hasdefault}[{/if}<span class="var-type">{$methods[methods].ifunction_call.params[params].type}</span> <span class="var-name">{$methods[methods].ifunction_call.params[params].name}</span>{if $methods[methods].ifunction_call.params[params].hasdefault} = <span class="var-default">{$methods[methods].ifunction_call.params[params].default}</span>]{/if}{/section}) + {else} + () + {/if} + </div> + {/if} + {/section} + </div> + </div> + </div> +{/if} + +{if $vars || $ivars} + <a name="sec-vars"></a> + <div class="info-box"> + <div class="info-box-title">Variables</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendents</a> | + {/if} + {if $methods} + <a href="#sec-var-summary">Vars</a> (<span class="disabled">details</span>) + {else} + <span class="disabled">Vars</span> + {/if} + + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + {if $methods || $imethods} + | + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + {include file="var.tpl"} + {if $ivars} + <h4>Inherited Variables</h4> + <A NAME='inherited_vars'><!-- --></A> + {section name=ivars loop=$ivars} + <p>Inherited from <span class="classname">{$ivars[ivars].parent_class}</span></p> + <blockquote> + {section name=ivars2 loop=$ivars[ivars].ivars} + <span class="var-title"> + <span class="var-name">{$ivars[ivars].ivars[ivars2].link}</span>{if $ivars[ivars].ivars[ivars2].ivar_sdesc}: {$ivars[ivars].ivars[ivars2].ivar_sdesc}{/if}<br> + </span> + {/section} + </blockquote> + {/section} + {/if} + </div> + </div> +{/if} + +{if $methods || $imethods} + <a name="sec-methods"></a> + <div class="info-box"> + <div class="info-box-title">Methods</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendents</a> | + {/if} + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + {/if} + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + {if $methods} + <a href="#sec-method-summary">Methods</a> (<span class="disabled">details</span>) + {else} + <span class="disabled">Methods</span> + {/if} + </div> + <div class="info-box-body"> + {include file="method.tpl"} + {if $imethods} + <h4>Inherited Methods</h4> + <a name='inherited_methods'><!-- --></a> + {section name=imethods loop=$imethods} + <!-- =========== Summary =========== --> + <p>Inherited From <span class="classname">{$imethods[imethods].parent_class}</span></p> + <blockquote> + {section name=im2 loop=$imethods[imethods].imethods} + <span class="method-name">{$imethods[imethods].imethods[im2].link}</span>{if $imethods[imethods].imethods[im2].ifunction_sdesc}: {$imethods[imethods].imethods[im2].ifunction_sdesc}{/if}<br> + {/section} + </blockquote> + {/section} + {/if} + </div> + </div> +{/if} + +{if $consts || $iconsts} + <a name="sec-consts"></a> + <div class="info-box"> + <div class="info-box-title">Class Constants</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendants</a> | + {/if} + {if $methods} + <a href="#sec-var-summary">Constants</a> (<span class="disabled">details</span>) + {else} + <span class="disabled">Constants</span> + {/if} + + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + {/if} + {if $methods || $imethods} + | + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + {include file="const.tpl"} + {if $iconsts} + <h4>Inherited Constants</h4> + <A NAME='inherited_vars'><!-- --></A> + {section name=iconsts loop=$iconsts} + <p>Inherited from <span class="classname">{$iconsts[iconsts].parent_class}</span></p> + <blockquote> + {section name=iconsts2 loop=$iconsts[iconsts].iconsts} + <img src="{$subdir}media/images/{if $iconsts[iconsts].iconsts[iconsts2].access == 'private'}PrivateVariable{else}Variable{/if}.png" /> + <span class="const-title"> + <span class="const-name">{$iconsts[iconsts].iconsts[iconsts2].link}</span>{if $iconsts[iconsts].iconsts[iconsts2].iconst_sdesc}: {$iconsts[iconsts].iconsts[iconsts2].iconst_sdesc}{/if}<br> + </span> + {/section} + </blockquote> + {/section} + {/if} + </div> + </div> +{/if} + +{include file="footer.tpl" top3=true} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/classtrees.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/classtrees.tpl new file mode 100755 index 00000000..952e6d50 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/classtrees.tpl @@ -0,0 +1,19 @@ +{include file="header.tpl" top1=true} + +<!-- Start of Class Data --> +<H2> + {$smarty.capture.title} +</H2> +{if $interfaces} +{section name=classtrees loop=$interfaces} +<h2>Root interface {$interfaces[classtrees].class}</h2> +{$interfaces[classtrees].class_tree} +{/section} +{/if} +{if $classtrees} +{section name=classtrees loop=$classtrees} +<h2>Root class {$classtrees[classtrees].class}</h2> +{$classtrees[classtrees].class_tree} +{/section} +{/if} +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/const.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/const.tpl new file mode 100644 index 00000000..c26ff92d --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/const.tpl @@ -0,0 +1,18 @@ +{section name=consts loop=$consts} +<a name="const{$consts[consts].const_name}" id="{$consts[consts].const_name}"><!-- --></A> +<div class="{cycle values="evenrow,oddrow"}"> + + <div class="const-header"> + <img src="{$subdir}media/images/{if $consts[consts].access == 'private'}PrivateVariable{else}Variable{/if}.png" /> + <span class="const-title"> + <span class="const-name">{$consts[consts].const_name}</span> + = <span class="const-default">{$consts[consts].const_value|replace:"\n":"<br />"}</span> + (line <span class="line-number">{if $consts[consts].slink}{$consts[consts].slink}{else}{$consts[consts].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$consts[consts].sdesc desc=$consts[consts].desc tags=$consts[consts].tags} + +</div> +{/section} + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/define.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/define.tpl new file mode 100755 index 00000000..0da5d864 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/define.tpl @@ -0,0 +1,24 @@ +{section name=def loop=$defines} +<a name="{$defines[def].define_link}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div> + <span class="const-title"> + <span class="const-name">{$defines[def].define_name}</span> = {$defines[def].define_value|replace:"\n":"<br />"} + (line <span class="line-number">{if $defines[def].slink}{$defines[def].slink}{else}{$defines[def].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$defines[def].sdesc desc=$defines[def].desc tags=$defines[def].tags} + + {if $globals[glob].global_conflicts.conflict_type} + <hr class="separator" /> + <div><span class="warning">Conflicts with constants:</span><br /> + {section name=me loop=$defines[def].define_conflicts.conflicts} + {$defines[def].define_conflicts.conflicts[me]}<br /> + {/section} + </div> + {/if} + +</div> +{/section}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/docblock.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/docblock.tpl new file mode 100755 index 00000000..783d5271 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/docblock.tpl @@ -0,0 +1,14 @@ +<!-- ========== Info from phpDoc block ========= --> +{if $sdesc} +<p class="short-description">{$sdesc}</p> +{/if} +{if $desc} +<p class="description">{$desc}</p> +{/if} +{if $tags} + <ul class="tags"> + {section name=tags loop=$tags} + <li><span class="field">{$tags[tags].keyword}:</span> {$tags[tags].data}</li> + {/section} + </ul> +{/if} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/elementindex.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/elementindex.tpl new file mode 100755 index 00000000..d5964f99 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/elementindex.tpl @@ -0,0 +1,12 @@ +{include file="header.tpl" noleftindex=true} +<a name="top"></a> +<h2>Full index</h2> +<h3>Package indexes</h3> +<ul> +{section name=p loop=$packageindex} + <li><a href="elementindex_{$packageindex[p].title}.html">{$packageindex[p].title}</a></li> +{/section} +</ul> +<br /> +{include file="basicindex.tpl" indexname="elementindex"} +{include file="footer.tpl"} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/errors.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/errors.tpl new file mode 100755 index 00000000..0f526584 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/errors.tpl @@ -0,0 +1,21 @@ +{include file="header.tpl" noleftindex=true} +{section name=files loop=$files} +<a href="#{$files[files].file}">{$files[files].file}</a><br> +{/section} +{foreach key=file item=issues from=$all} +<a name="{$file}"></a> +<h1>{$file}</h1> +{if count($issues.warnings)} +<h2>Warnings:</h2><br> +{section name=warnings loop=$issues.warnings} +<b>{$issues.warnings[warnings].name}</b> - {$issues.warnings[warnings].listing}<br> +{/section} +{/if} +{if count($issues.errors)} +<h2>Errors:</h2><br> +{section name=errors loop=$issues.errors} +<b>{$issues.errors[errors].name}</b> - {$issues.errors[errors].listing}<br> +{/section} +{/if} +{/foreach} +{include file="footer.tpl"} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/examplesource.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/examplesource.tpl new file mode 100755 index 00000000..8abf74ce --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/examplesource.tpl @@ -0,0 +1,6 @@ +{include file="header.tpl" title=$title} +<h1>{$title}</h1> +<div class="listing"> +{$source} +</div> +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/filesource.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/filesource.tpl new file mode 100755 index 00000000..239f7b41 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/filesource.tpl @@ -0,0 +1,8 @@ +{capture name="tutle"}File Source for {$name}{/capture} +{include file="header.tpl" title=$smarty.capture.tutle} +<h1>Source for file {$name}</h1> +<p>Documentation is available at {$docs}</p> +<div class="src-code"> +{$source} +</div> +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/footer.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/footer.tpl new file mode 100755 index 00000000..8d0f79db --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/footer.tpl @@ -0,0 +1,8 @@ +{if !$index} + <p class="notes" id="credit"> + Documentation generated on {$date} by <a href="{$phpdocwebsite}" target="_blank">phpDocumentor {$phpdocversion}</a> + </p> +{/if} + {if $top3}</div>{/if} +</body> +</html> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/function.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/function.tpl new file mode 100755 index 00000000..b6880059 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/function.tpl @@ -0,0 +1,44 @@ +{section name=func loop=$functions} +<a name="{$functions[func].function_dest}" id="{$functions[func].function_dest}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div> + <span class="method-title">{$functions[func].function_name}</span> (line <span class="line-number">{if $functions[func].slink}{$functions[func].slink}{else}{$functions[func].line_number}{/if}</span>) + </div> + + {include file="docblock.tpl" sdesc=$functions[func].sdesc desc=$functions[func].desc tags=$functions[func].tags params=$functions[func].params function=false} + + <div class="method-signature"> + <span class="method-result">{$functions[func].function_return}</span> + <span class="method-name"> + {if $functions[func].ifunction_call.returnsref}&{/if}{$functions[func].function_name} + </span> + {if count($functions[func].ifunction_call.params)} + ({section name=params loop=$functions[func].ifunction_call.params}{if $smarty.section.params.iteration != 1}, {/if}{if $functions[func].ifunction_call.params[params].hasdefault}[{/if}<span class="var-type">{$functions[func].ifunction_call.params[params].type}</span> <span class="var-name">{$functions[func].ifunction_call.params[params].name}</span>{if $functions[func].ifunction_call.params[params].hasdefault} = <span class="var-default">{$functions[func].ifunction_call.params[params].default|escape:"html"}</span>]{/if}{/section}) + {else} + () + {/if} + </div> + + {if $functions[func].params} + <ul class="parameters"> + {section name=params loop=$functions[func].params} + <li> + <span class="var-type">{$functions[func].params[params].datatype}</span> + <span class="var-name">{$functions[func].params[params].var}</span>{if $functions[func].params[params].data}<span class="var-description">: {$functions[func].params[params].data}</span>{/if} + </li> + {/section} + </ul> + {/if} + + {if $functions[func].function_conflicts.conflict_type} + <hr class="separator" /> + <div><span class="warning">Conflicts with functions:</span><br /> + {section name=me loop=$functions[func].function_conflicts.conflicts} + {$functions[func].function_conflicts.conflicts[me]}<br /> + {/section} + </div> + {/if} + +</div> +{/section} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/global.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/global.tpl new file mode 100755 index 00000000..eab7e0b0 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/global.tpl @@ -0,0 +1,26 @@ +{section name=glob loop=$globals} +<a name="{$globals[glob].global_link}" id="{$globals[glob].global_link}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div> + <span class="var-title"> + <span class="var-type">{$globals[glob].global_type}</span> + <span class="var-name">{$globals[glob].global_name}</span> + {if $vars[vars].var_default} = <span class="var-default">{$globals[glob].global_value|replace:"\n":"<br />"}</span>{/if} + (line <span class="line-number">{if $globals[glob].slink}{$globals[glob].slink}{else}{$globals[glob].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$globals[glob].sdesc desc=$globals[glob].desc tags=$globals[glob].tags} + + {if $globals[glob].global_conflicts.conflict_type} + <hr class="separator" /> + <div><span class="warning">Conflicts with global variables:</span><br /> + {section name=me loop=$globals[glob].global_conflicts.conflicts} + {$globals[glob].global_conflicts.conflicts[me]}<br /> + {/section} + </div> + {/if} + +</div> +{/section}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/header.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/header.tpl new file mode 100755 index 00000000..0d626190 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/header.tpl @@ -0,0 +1,95 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> + <html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <!-- template designed by Marco Von Ballmoos --> + <title>{$title}</title> + <link rel="stylesheet" href="{$subdir}media/stylesheet.css" /> + {if $top2 || $top3} + <script src="{$subdir}media/lib/classTree.js"></script> + {/if} + {if $top2} + <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/> + {/if} + {if $top3 || $top2} + <script language="javascript" type="text/javascript"> + var imgPlus = new Image(); + var imgMinus = new Image(); + imgPlus.src = "{$subdir}media/images/plus.png"; + imgMinus.src = "{$subdir}media/images/minus.png"; + + function showNode(Node){ldelim} + switch(navigator.family){ldelim} + case 'nn4': + // Nav 4.x code fork... + var oTable = document.layers["span" + Node]; + var oImg = document.layers["img" + Node]; + break; + case 'ie4': + // IE 4/5 code fork... + var oTable = document.all["span" + Node]; + var oImg = document.all["img" + Node]; + break; + case 'gecko': + // Standards Compliant code fork... + var oTable = document.getElementById("span" + Node); + var oImg = document.getElementById("img" + Node); + break; + {rdelim} + oImg.src = imgMinus.src; + oTable.style.display = "block"; + {rdelim} + + function hideNode(Node){ldelim} + switch(navigator.family){ldelim} + case 'nn4': + // Nav 4.x code fork... + var oTable = document.layers["span" + Node]; + var oImg = document.layers["img" + Node]; + break; + case 'ie4': + // IE 4/5 code fork... + var oTable = document.all["span" + Node]; + var oImg = document.all["img" + Node]; + break; + case 'gecko': + // Standards Compliant code fork... + var oTable = document.getElementById("span" + Node); + var oImg = document.getElementById("img" + Node); + break; + {rdelim} + oImg.src = imgPlus.src; + oTable.style.display = "none"; + {rdelim} + + function nodeIsVisible(Node){ldelim} + switch(navigator.family){ldelim} + case 'nn4': + // Nav 4.x code fork... + var oTable = document.layers["span" + Node]; + break; + case 'ie4': + // IE 4/5 code fork... + var oTable = document.all["span" + Node]; + break; + case 'gecko': + // Standards Compliant code fork... + var oTable = document.getElementById("span" + Node); + break; + {rdelim} + return (oTable && oTable.style.display == "block"); + {rdelim} + + function toggleNodeVisibility(Node){ldelim} + if (nodeIsVisible(Node)){ldelim} + hideNode(Node); + {rdelim}else{ldelim} + showNode(Node); + {rdelim} + {rdelim} + </script> + {/if} + </head> + <body> + {if $top3}<div class="page-body">{/if} + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/include.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/include.tpl new file mode 100755 index 00000000..c2419e5f --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/include.tpl @@ -0,0 +1,16 @@ +{section name=includes loop=$includes} +<a name="{$includes[includes].include_file}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div> + <span class="include-title"> + <span class="include-type">{$includes[includes].include_name}</span> + (<span class="include-name">{$includes[includes].include_value}</span>) + (line <span class="line-number">{if $includes[includes].slink}{$includes[includes].slink}{else}{$includes[includes].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$includes[includes].sdesc desc=$includes[includes].desc tags=$includes[includes].tags} + +</div> +{/section}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/index.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/index.tpl new file mode 100755 index 00000000..7cd61094 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/index.tpl @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE html + PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//FR" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"> + <html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <!-- Generated by phpDocumentor on {$date} --> + <title>{$title}</title> + <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/> +</head> + +<FRAMESET rows='120,*'> + <FRAME src='packages.html' name='left_top' frameborder="1" bordercolor="#999999"> + <FRAMESET cols='25%,*'> + <FRAME src='{$start}' name='left_bottom' frameborder="1" bordercolor="#999999"> + <FRAME src='{$blank}.html' name='right' frameborder="1" bordercolor="#999999"> + </FRAMESET> + <NOFRAMES> + <H2>Frame Alert</H2> + <P>This document is designed to be viewed using the frames feature. + If you see this message, you are using a non-frame-capable web client.</P> + </NOFRAMES> +</FRAMESET> +</HTML> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/left_frame.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/left_frame.tpl new file mode 100755 index 00000000..35178d87 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/left_frame.tpl @@ -0,0 +1,197 @@ +{include file="header.tpl" top2=true} +<h3 class="package-title">{$info.0.package}</h3> +<div class="tree"> +<script language="Javascript"> +if (document.getElementById) {ldelim} +{section name=p loop=$info} + {if $info[p].subpackage == ""} + var tree = new WebFXTree('<span class="package">{$info.0.package|escape:"quotes"}</span>'); + tree.setBehavior('classic'); + + {if $hastodos} + var todos = new WebFXTreeItem('To-do List', '{$todolink}'); + tree.add(todos); + {/if} + + var class_trees = new WebFXTreeItem('Class trees', '{$classtreepage}.html'); + tree.add(class_trees); + + var elements = new WebFXTreeItem('Index of elements', '{$elementindex}.html'); + tree.add(elements); + + var parent_node; + + {if $info[p].tutorials} + var tree_tutorial = new WebFXTreeItem('Tutorial(s)/Manual(s)', ''); + tree.add(tree_tutorial); + + {if $info[p].tutorials.pkg} + var tree_inner_tutorial = new WebFXTreeItem('Package-level', ''); + tree_tutorial.add(tree_inner_tutorial); + + parent_node = tree_inner_tutorial; + {section name=ext loop=$info[p].tutorials.pkg} + {$info[p].tutorials.pkg[ext]} + {/section} + {/if} + + {if $info[p].tutorials.cls} + var tree_inner_tutorial = new WebFXTreeItem('Class-level', ''); + tree_tutorial.add(tree_inner_tutorial); + + parent_node = tree_inner_tutorial; + {section name=ext loop=$info[p].tutorials.cls} + {$info[p].tutorials.cls[ext]} + {/section} + {/if} + + {if $info[p].tutorials.proc} + var tree_inner_tutorial = new WebFXTreeItem('Function-level', ''); + tree_tutorial.add(tree_inner_tutorial); + + parent_node = tree_inner_tutorial; + {section name=ext loop=$info[p].tutorials.proc} + {$info[p].tutorials.proc[ext]} + {/section} + {/if} + {/if} + {if $info[p].hasinterfaces} + {if $info[p].classes} + var tree_classe = new WebFXTreeItem('Interface(s)', '{$packagedoc}'); + + {section name=class loop=$info[p].classes} + {if $info[p].classes[class].is_interface} + var classe = new WebFXTreeItem('{$info[p].classes[class].title|escape:"quotes"}', '{$info[p].classes[class].link|escape:"quotes"}'); + tree_classe.add(classe); + {/if} + {/section} + + tree.add(tree_classe); + {/if} + {/if} + {if $info[p].hasclasses} + {if $info[p].classes} + var tree_classe = new WebFXTreeItem('Class(es)', '{$packagedoc}'); + + {section name=class loop=$info[p].classes} + {if $info[p].classes[class].is_class} + var classe = new WebFXTreeItem('{$info[p].classes[class].title|escape:"quotes"}', '{$info[p].classes[class].link|escape:"quotes"}'); + tree_classe.add(classe); + {/if} + {/section} + + tree.add(tree_classe); + {/if} + {/if} + + {if $info[p].functions} + var tree_function = new WebFXTreeItem('Function(s)', '{$packagedoc|escape:"quotes"}'); + + {section name=nonclass loop=$info[p].functions} + var fic = new WebFXTreeItem('{$info[p].functions[nonclass].title|escape:"quotes"}', '{$info[p].functions[nonclass].link}'); + tree_function.add(fic); + {/section} + + tree.add(tree_function); + {/if} + + {if $info[p].files} + var tree_file = new WebFXTreeItem('File(s)', '{$packagedoc|escape:"quotes"}'); + + {section name=nonclass loop=$info[p].files} + var file = new WebFXTreeItem('{$info[p].files[nonclass].title|escape:"quotes"}', '{$info[p].files[nonclass].link|escape:"quotes"}'); + tree_file.add(file); + {/section} + + tree.add(tree_file); + {/if} + + {else} + {if $info[p].subpackagetutorial} + var subpackagetree = new WebFXTreeItem('<span class="sub-package">{$info[p].subpackagetutorialtitle|strip_tags|escape:"quotes"}</span>', '{$info[p].subpackagetutorialnoa|escape:"quotes"}'); + {else} + var subpackagetree = new WebFXTreeItem('<span class="sub-package">{$info[p].subpackage|escape:"quotes"}</span>', '{$packagedoc|escape:"quotes"}'); + {/if} + + {if $info[p].tutorials} + var tree_tutorial = new WebFXTreeItem('Tutorial(s)/Manual(s)', ''); + tree.add(tree_tutorial); + + {if $info[p].tutorials.pkg} + var tree_inner_tutorial = new WebFXTreeItem('Package-level', ''); + tree_tutorial.add(tree_inner_tutorial); + + parent_node = tree_inner_tutorial; + {section name=ext loop=$info[p].tutorials.pkg} + {$info[p].tutorials.pkg[ext]} + {/section} + {/if} + + {if $info[p].tutorials.cls} + var tree_inner_tutorial = new WebFXTreeItem('Class-level', ''); + tree_tutorial.add(tree_inner_tutorial); + + parent_node = tree_inner_tutorial; + {section name=ext loop=$info[p].tutorials.cls} + {$info[p].tutorials.cls[ext]} + {/section} + {/if} + + {if $info[p].tutorials.proc} + var tree_inner_tutorial = new WebFXTreeItem('Function-level', ''); + tree_tutorial.add(tree_inner_tutorial); + + parent_node = tree_inner_tutorial; + {section name=ext loop=$info[p].tutorials.proc} + {$info[p].tutorials.proc[ext]} + {/section} + {/if} + {/if} + + {if $info[p].classes} + var subpackagetree_classe = new WebFXTreeItem('Class(es)', '{$packagedoc|escape:"quotes"}'); + + {section name=class loop=$info[p].classes} + var classe = new WebFXTreeItem('{$info[p].classes[class].title|escape:"quotes"}', '{$info[p].classes[class].link|escape:"quotes"}'); + subpackagetree_classe.add(classe); + {/section} + + subpackagetree.add(subpackagetree_classe); + {/if} + + {if $info[p].functions} + var subpackagetree_function = new WebFXTreeItem('Function(s)', '{$packagedoc}'); + + {section name=nonclass loop=$info[p].functions} + var fic = new WebFXTreeItem('{$info[p].functions[nonclass].title|escape:"quotes"}', '{$info[p].functions[nonclass].link|escape:"quotes"}'); + subpackagetree_function.add(fic); + {/section} + + subpackagetree.add(subpackagetree_function); + {/if} + + {if $info[p].files} + var subpackagetree_file = new WebFXTreeItem('File(s)', '{$packagedoc|escape:"quotes"}'); + + {section name=nonclass loop=$info[p].files} + var file = new WebFXTreeItem('{$info[p].files[nonclass].title|escape:"quotes"}', '{$info[p].files[nonclass].link|escape:"quotes"}'); + subpackagetree_file.add(file); + {/section} + + subpackagetree.add(subpackagetree_file); + {/if} + + tree.add(subpackagetree); + {/if} +{/section} + +document.write(tree); +{rdelim} +</script> +</div> +<p class="notes"> + Generated by + <a href="{$phpdocwebsite}" target="_blank">phpDocumentor <span class="field">{$phpdocversion}</span></a> +</p> +</body> +</html> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/banner.css b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/banner.css new file mode 100755 index 00000000..f2149ebb --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/banner.css @@ -0,0 +1,32 @@ +body +{ + background-color: #CCCCFF; + margin: 0px; + padding: 0px; +} + +/* Banner (top bar) classes */ + +.banner { } + +.banner-menu +{ + clear: both; + padding: .5em; + border-top: 2px solid #6666AA; +} + +.banner-title +{ + text-align: right; + font-size: 20pt; + font-weight: bold; + margin: .2em; +} + +.package-selector +{ + background-color: #AAAADD; + border: 1px solid black; + color: yellow; +} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/images/I.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/images/I.png Binary files differnew file mode 100755 index 00000000..e8512fb9 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/images/I.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/images/L.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/images/L.png Binary files differnew file mode 100755 index 00000000..eb334eda --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/images/L.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/images/Lminus.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/images/Lminus.png Binary files differnew file mode 100755 index 00000000..f7c43c0a --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/images/Lminus.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/images/Lplus.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/images/Lplus.png Binary files differnew file mode 100755 index 00000000..848ec2fc --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/images/Lplus.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/images/T.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/images/T.png Binary files differnew file mode 100755 index 00000000..30173254 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/images/T.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/images/Tminus.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/images/Tminus.png Binary files differnew file mode 100755 index 00000000..2260e424 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/images/Tminus.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/images/Tplus.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/images/Tplus.png Binary files differnew file mode 100755 index 00000000..2c8d8f4f --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/images/Tplus.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/images/blank.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/images/blank.png Binary files differnew file mode 100755 index 00000000..cee9cd37 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/images/blank.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/images/empty.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/images/empty.png Binary files differnew file mode 100755 index 00000000..d5683865 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/images/empty.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/images/minus.gif b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/images/minus.gif Binary files differnew file mode 100644 index 00000000..f502662b --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/images/minus.gif diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/images/plus.gif b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/images/plus.gif Binary files differnew file mode 100644 index 00000000..eeca02ce --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/images/plus.gif diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/lib/classTree.js b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/lib/classTree.js new file mode 100755 index 00000000..ebb3fb4a --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/lib/classTree.js @@ -0,0 +1,454 @@ +/*----------------------------------------\ +| Cross Browser Tree Widget 1.1 | +|-----------------------------------------| +| Created by Emil A. Eklund (eae@eae.net) | +| For WebFX (http://webfx.eae.net/) | +|-----------------------------------------| +| This script is provided as is without | +| any warranty whatsoever. It may be used | +| free of charge for non commerical sites | +| For commerical use contact the author | +| of this script for further details. | +|-----------------------------------------| +| Created 2000-12-11 | Updated 2001-09-06 | +\----------------------------------------*/ + +var webFXTreeConfig = { + rootIcon : 'media/images/empty.png', + openRootIcon : 'media/images/empty.png', + folderIcon : 'media/images/empty.png', + openFolderIcon : 'media/images/empty.png', + fileIcon : 'media/images/empty.png', + iIcon : 'media/images/I.png', + lIcon : 'media/images/L.png', + lMinusIcon : 'media/images/Lminus.png', + lPlusIcon : 'media/images/Lplus.png', + tIcon : 'media/images/T.png', + tMinusIcon : 'media/images/Tminus.png', + tPlusIcon : 'media/images/Tplus.png', + blankIcon : 'media/images/blank.png', + defaultText : 'Tree Item', + defaultAction : 'javascript:void(0);', + defaultTarget : 'right', + defaultBehavior : 'classic' +}; + +var webFXTreeHandler = { + idCounter : 0, + idPrefix : "webfx-tree-object-", + all : {}, + behavior : null, + selected : null, + getId : function() { return this.idPrefix + this.idCounter++; }, + toggle : function (oItem) { this.all[oItem.id.replace('-plus','')].toggle(); }, + select : function (oItem) { this.all[oItem.id.replace('-icon','')].select(); }, + focus : function (oItem) { this.all[oItem.id.replace('-anchor','')].focus(); }, + blur : function (oItem) { this.all[oItem.id.replace('-anchor','')].blur(); }, + keydown : function (oItem) { return this.all[oItem.id].keydown(window.event.keyCode); }, + cookies : new WebFXCookie() +}; + +/* + * WebFXCookie class + */ + +function WebFXCookie() { + if (document.cookie.length) { this.cookies = ' ' + document.cookie; } +} + +WebFXCookie.prototype.setCookie = function (key, value) { + document.cookie = key + "=" + escape(value); +} + +WebFXCookie.prototype.getCookie = function (key) { + if (this.cookies) { + var start = this.cookies.indexOf(' ' + key + '='); + if (start == -1) { return null; } + var end = this.cookies.indexOf(";", start); + if (end == -1) { end = this.cookies.length; } + end -= start; + var cookie = this.cookies.substr(start,end); + return unescape(cookie.substr(cookie.indexOf('=') + 1, cookie.length - cookie.indexOf('=') + 1)); + } + else { return null; } +} + +/* + * WebFXTreeAbstractNode class + */ + +function WebFXTreeAbstractNode(sText, sAction, sTarget) { + this.childNodes = []; + this.id = webFXTreeHandler.getId(); + this.text = sText || webFXTreeConfig.defaultText; + this.action = sAction || webFXTreeConfig.defaultAction; + this.targetWindow = sTarget || webFXTreeConfig.defaultTarget; + this._last = false; + webFXTreeHandler.all[this.id] = this; +} + +WebFXTreeAbstractNode.prototype.add = function (node) { + node.parentNode = this; + this.childNodes[this.childNodes.length] = node; + var root = this; + if (this.childNodes.length >=2) { + this.childNodes[this.childNodes.length -2]._last = false; + } + while (root.parentNode) { root = root.parentNode; } + if (root.rendered) { + if (this.childNodes.length >= 2) { + document.getElementById(this.childNodes[this.childNodes.length -2].id + '-plus').src = ((this.childNodes[this.childNodes.length -2].folder)?webFXTreeConfig.tMinusIcon:webFXTreeConfig.tIcon); + if (this.childNodes[this.childNodes.length -2].folder) { + this.childNodes[this.childNodes.length -2].plusIcon = webFXTreeConfig.tPlusIcon; + this.childNodes[this.childNodes.length -2].minusIcon = webFXTreeConfig.tMinusIcon; + } + this.childNodes[this.childNodes.length -2]._last = false; + } + this._last = true; + var foo = this; + while (foo.parentNode) { + for (var i = 0; i < foo.parentNode.childNodes.length; i++) { + if (foo.id == foo.parentNode.childNodes[i].id) { break; } + } + if (++i == foo.parentNode.childNodes.length) { foo.parentNode._last = true; } + else { foo.parentNode._last = false; } + foo = foo.parentNode; + } + document.getElementById(this.id + '-cont').insertAdjacentHTML("beforeEnd", node.toString()); + if ((!this.folder) && (!this.openIcon)) { + this.icon = webFXTreeConfig.folderIcon; + this.openIcon = webFXTreeConfig.openFolderIcon; + } + this.folder = true; + this.indent(); + this.expand(); + } + return node; +} + +WebFXTreeAbstractNode.prototype.toggle = function() { + if (this.folder) { + if (this.open) { this.collapse(); } + else { this.expand(); } + } +} + +WebFXTreeAbstractNode.prototype.select = function() { + document.getElementById(this.id + '-anchor').focus(); +} + +WebFXTreeAbstractNode.prototype.focus = function() { + webFXTreeHandler.selected = this; + if ((this.openIcon) && (webFXTreeHandler.behavior != 'classic')) { document.getElementById(this.id + '-icon').src = this.openIcon; } + document.getElementById(this.id + '-anchor').style.backgroundColor = 'highlight'; + document.getElementById(this.id + '-anchor').style.color = 'highlighttext'; + document.getElementById(this.id + '-anchor').focus(); +} + +WebFXTreeAbstractNode.prototype.blur = function() { + if ((this.openIcon) && (webFXTreeHandler.behavior != 'classic')) { document.getElementById(this.id + '-icon').src = this.icon; } + document.getElementById(this.id + '-anchor').style.backgroundColor = 'transparent'; + document.getElementById(this.id + '-anchor').style.color = 'menutext'; +} + +WebFXTreeAbstractNode.prototype.doExpand = function() { + if (webFXTreeHandler.behavior == 'classic') { document.getElementById(this.id + '-icon').src = this.openIcon; } + if (this.childNodes.length) { document.getElementById(this.id + '-cont').style.display = 'block'; } + this.open = true; + webFXTreeHandler.cookies.setCookie(this.id.substr(18,this.id.length - 18), '1'); +} + +WebFXTreeAbstractNode.prototype.doCollapse = function() { + if (webFXTreeHandler.behavior == 'classic') { document.getElementById(this.id + '-icon').src = this.icon; } + if (this.childNodes.length) { document.getElementById(this.id + '-cont').style.display = 'none'; } + this.open = false; + webFXTreeHandler.cookies.setCookie(this.id.substr(18,this.id.length - 18), '0'); +} + +WebFXTreeAbstractNode.prototype.expandAll = function() { + this.expandChildren(); + if ((this.folder) && (!this.open)) { this.expand(); } +} + +WebFXTreeAbstractNode.prototype.expandChildren = function() { + for (var i = 0; i < this.childNodes.length; i++) { + this.childNodes[i].expandAll(); +} } + +WebFXTreeAbstractNode.prototype.collapseAll = function() { + if ((this.folder) && (this.open)) { this.collapse(); } + this.collapseChildren(); +} + +WebFXTreeAbstractNode.prototype.collapseChildren = function() { + for (var i = 0; i < this.childNodes.length; i++) { + this.childNodes[i].collapseAll(); +} } + +WebFXTreeAbstractNode.prototype.indent = function(lvl, del, last, level) { + /* + * Since we only want to modify items one level below ourself, + * and since the rightmost indentation position is occupied by + * the plus icon we set this to -2 + */ + if (lvl == null) { lvl = -2; } + var state = 0; + for (var i = this.childNodes.length - 1; i >= 0 ; i--) { + state = this.childNodes[i].indent(lvl + 1, del, last, level); + if (state) { return; } + } + if (del) { + if (level >= this._level) { + if (this.folder) { + document.getElementById(this.id + '-plus').src = (this.open)?webFXTreeConfig.lMinusIcon:webFXTreeConfig.lPlusIcon; + this.plusIcon = webFXTreeConfig.lPlusIcon; + this.minusIcon = webFXTreeConfig.lMinusIcon; + } + else { document.getElementById(this.id + '-plus').src = webFXTreeConfig.lIcon; } + return 1; + } + } + var foo = document.getElementById(this.id + '-indent-' + lvl); + if (foo) { + if ((del) && (last)) { foo._last = true; } + if (foo._last) { foo.src = webFXTreeConfig.blankIcon; } + else { foo.src = webFXTreeConfig.iIcon; } + } + return 0; +} + +/* + * WebFXTree class + */ + +function WebFXTree(sText, sAction, sBehavior, sIcon, sOpenIcon) { + this.base = WebFXTreeAbstractNode; + this.base(sText, sAction); + this.icon = sIcon || webFXTreeConfig.rootIcon; + this.openIcon = sOpenIcon || webFXTreeConfig.openRootIcon; + /* Defaults to open */ + this.open = (webFXTreeHandler.cookies.getCookie(this.id.substr(18,this.id.length - 18)) == '0')?false:true; + this.folder = true; + this.rendered = false; + if (!webFXTreeHandler.behavior) { webFXTreeHandler.behavior = sBehavior || webFXTreeConfig.defaultBehavior; } + this.targetWindow = 'right'; +} + +WebFXTree.prototype = new WebFXTreeAbstractNode; + +WebFXTree.prototype.setBehavior = function (sBehavior) { + webFXTreeHandler.behavior = sBehavior; +}; + +WebFXTree.prototype.getBehavior = function (sBehavior) { + return webFXTreeHandler.behavior; +}; + +WebFXTree.prototype.getSelected = function() { + if (webFXTreeHandler.selected) { return webFXTreeHandler.selected; } + else { return null; } +} + +WebFXTree.prototype.remove = function() { } + +WebFXTree.prototype.expand = function() { + this.doExpand(); +} + +WebFXTree.prototype.collapse = function() { + this.focus(); + this.doCollapse(); +} + +WebFXTree.prototype.getFirst = function() { + return null; +} + +WebFXTree.prototype.getLast = function() { + return null; +} + +WebFXTree.prototype.getNextSibling = function() { + return null; +} + +WebFXTree.prototype.getPreviousSibling = function() { + return null; +} + +WebFXTree.prototype.keydown = function(key) { + if (key == 39) { this.expand(); return false; } + if (key == 37) { this.collapse(); return false; } + if ((key == 40) && (this.open)) { this.childNodes[0].select(); return false; } + return true; +} + +WebFXTree.prototype.toString = function() { + var str = "<div id=\"" + this.id + "\" ondblclick=\"webFXTreeHandler.toggle(this);\" class=\"webfx-tree-item\" onkeydown=\"return webFXTreeHandler.keydown(this)\">"; + str += "<img id=\"" + this.id + "-icon\" class=\"webfx-tree-icon\" src=\"" + ((webFXTreeHandler.behavior == 'classic' && this.open)?this.openIcon:this.icon) + "\" onclick=\"webFXTreeHandler.select(this);\"><a href=\"" + this.action + "\" id=\"" + this.id + "-anchor\" target=\"" + this.targetWindow + "\" onfocus=\"webFXTreeHandler.focus(this);\" onblur=\"webFXTreeHandler.blur(this);\">" + this.text + "</a></div>"; + str += "<div id=\"" + this.id + "-cont\" class=\"webfx-tree-container\" style=\"display: " + ((this.open)?'block':'none') + ";\">"; + for (var i = 0; i < this.childNodes.length; i++) { + str += this.childNodes[i].toString(i, this.childNodes.length); + } + str += "</div>"; + this.rendered = true; + return str; +}; + +/* + * WebFXTreeItem class + */ + +function WebFXTreeItem(sText, sAction, eParent, sIcon, sOpenIcon) { + this.base = WebFXTreeAbstractNode; + this.base(sText, sAction); + /* Defaults to close */ + this.open = (webFXTreeHandler.cookies.getCookie(this.id.substr(18,this.id.length - 18)) == '1')?true:false; + if (eParent) { eParent.add(this); } + if (sIcon) { this.icon = sIcon; } + if (sOpenIcon) { this.openIcon = sOpenIcon; } +} + +WebFXTreeItem.prototype = new WebFXTreeAbstractNode; + +WebFXTreeItem.prototype.remove = function() { + var parentNode = this.parentNode; + var prevSibling = this.getPreviousSibling(true); + var nextSibling = this.getNextSibling(true); + var folder = this.parentNode.folder; + var last = ((nextSibling) && (nextSibling.parentNode) && (nextSibling.parentNode.id == parentNode.id))?false:true; + this.getPreviousSibling().focus(); + this._remove(); + if (parentNode.childNodes.length == 0) { + parentNode.folder = false; + parentNode.open = false; + } + if (last) { + if (parentNode.id == prevSibling.id) { + document.getElementById(parentNode.id + '-icon').src = webFXTreeConfig.fileIcon; + } + else { } + } + if ((!prevSibling.parentNode) || (prevSibling.parentNode != parentNode)) { + parentNode.indent(null, true, last, this._level); + } + if (document.getElementById(prevSibling.id + '-plus')) { + if (nextSibling) { + if ((parentNode == prevSibling) && (parentNode.getNextSibling)) { document.getElementById(prevSibling.id + '-plus').src = webFXTreeConfig.tIcon; } + else if (nextSibling.parentNode != prevSibling) { document.getElementById(prevSibling.id + '-plus').src = webFXTreeConfig.lIcon; } + } + else { document.getElementById(prevSibling.id + '-plus').src = webFXTreeConfig.lIcon; } + } +} + +WebFXTreeItem.prototype._remove = function() { + for (var i = this.childNodes.length - 1; i >= 0; i--) { + this.childNodes[i]._remove(); + } + for (var i = 0; i < this.parentNode.childNodes.length; i++) { + if (this.id == this.parentNode.childNodes[i].id) { + for (var j = i; j < this.parentNode.childNodes.length; j++) { + this.parentNode.childNodes[i] = this.parentNode.childNodes[i+1] + } + this.parentNode.childNodes.length = this.parentNode.childNodes.length - 1; + if (i + 1 == this.parentNode.childNodes.length) { this.parentNode._last = true; } + } + } + webFXTreeHandler.all[this.id] = null; + if (document.getElementById(this.id)) { + document.getElementById(this.id).innerHTML = ""; + document.getElementById(this.id).removeNode(); + } +} + +WebFXTreeItem.prototype.expand = function() { + this.doExpand(); + document.getElementById(this.id + '-plus').src = this.minusIcon; +} + +WebFXTreeItem.prototype.collapse = function() { + this.focus(); + this.doCollapse(); + document.getElementById(this.id + '-plus').src = this.plusIcon; +} + +WebFXTreeItem.prototype.getFirst = function() { + return this.childNodes[0]; +} + +WebFXTreeItem.prototype.getLast = function() { + if (this.childNodes[this.childNodes.length - 1].open) { return this.childNodes[this.childNodes.length - 1].getLast(); } + else { return this.childNodes[this.childNodes.length - 1]; } +} + +WebFXTreeItem.prototype.getNextSibling = function() { + for (var i = 0; i < this.parentNode.childNodes.length; i++) { + if (this == this.parentNode.childNodes[i]) { break; } + } + if (++i == this.parentNode.childNodes.length) { return this.parentNode.getNextSibling(); } + else { return this.parentNode.childNodes[i]; } +} + +WebFXTreeItem.prototype.getPreviousSibling = function(b) { + for (var i = 0; i < this.parentNode.childNodes.length; i++) { + if (this == this.parentNode.childNodes[i]) { break; } + } + if (i == 0) { return this.parentNode; } + else { + if ((this.parentNode.childNodes[--i].open) || (b && this.parentNode.childNodes[i].folder)) { return this.parentNode.childNodes[i].getLast(); } + else { return this.parentNode.childNodes[i]; } +} } + +WebFXTreeItem.prototype.keydown = function(key) { + if ((key == 39) && (this.folder)) { + if (!this.open) { this.expand(); return false; } + else { this.getFirst().select(); return false; } + } + else if (key == 37) { + if (this.open) { this.collapse(); return false; } + else { this.parentNode.select(); return false; } + } + else if (key == 40) { + if (this.open) { this.getFirst().select(); return false; } + else { + var sib = this.getNextSibling(); + if (sib) { sib.select(); return false; } + } } + else if (key == 38) { this.getPreviousSibling().select(); return false; } + return true; +} + +WebFXTreeItem.prototype.toString = function (nItem, nItemCount) { + var foo = this.parentNode; + var indent = ''; + if (nItem + 1 == nItemCount) { this.parentNode._last = true; } + var i = 0; + while (foo.parentNode) { + foo = foo.parentNode; + indent = "<img id=\"" + this.id + "-indent-" + i + "\" src=\"" + ((foo._last)?webFXTreeConfig.blankIcon:webFXTreeConfig.iIcon) + "\">" + indent; + i++; + } + this._level = i; + if (this.childNodes.length) { this.folder = 1; } + else { this.open = false; } + if ((this.folder) || (webFXTreeHandler.behavior != 'classic')) { + if (!this.icon) { this.icon = webFXTreeConfig.folderIcon; } + if (!this.openIcon) { this.openIcon = webFXTreeConfig.openFolderIcon; } + } + else if (!this.icon) { this.icon = webFXTreeConfig.fileIcon; } + var label = this.text; + label = label.replace('<', '<'); + label = label.replace('>', '>'); + var str = "<div id=\"" + this.id + "\" ondblclick=\"webFXTreeHandler.toggle(this);\" class=\"webfx-tree-item\" onkeydown=\"return webFXTreeHandler.keydown(this)\">"; + str += indent; + str += "<img id=\"" + this.id + "-plus\" src=\"" + ((this.folder)?((this.open)?((this.parentNode._last)?webFXTreeConfig.lMinusIcon:webFXTreeConfig.tMinusIcon):((this.parentNode._last)?webFXTreeConfig.lPlusIcon:webFXTreeConfig.tPlusIcon)):((this.parentNode._last)?webFXTreeConfig.lIcon:webFXTreeConfig.tIcon)) + "\" onclick=\"webFXTreeHandler.toggle(this);\">" + str += "<img id=\"" + this.id + "-icon\" src=\"" + ((webFXTreeHandler.behavior == 'classic' && this.open)?this.openIcon:this.icon) + "\" onclick=\"webFXTreeHandler.select(this);\"><a href=\"" + this.action + "\" id=\"" + this.id + "-anchor\" target=\"" + this.targetWindow + "\" onfocus=\"webFXTreeHandler.focus(this);\" onblur=\"webFXTreeHandler.blur(this);\">" + label + "</a></div>"; + str += "<div id=\"" + this.id + "-cont\" class=\"webfx-tree-container\" style=\"display: " + ((this.open)?'block':'none') + ";\">"; + for (var i = 0; i < this.childNodes.length; i++) { + str += this.childNodes[i].toString(i,this.childNodes.length); + } + str += "</div>"; + this.plusIcon = ((this.parentNode._last)?webFXTreeConfig.lPlusIcon:webFXTreeConfig.tPlusIcon); + this.minusIcon = ((this.parentNode._last)?webFXTreeConfig.lMinusIcon:webFXTreeConfig.tMinusIcon); + return str; +}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/stylesheet.css b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/stylesheet.css new file mode 100755 index 00000000..72d3141d --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/stylesheet.css @@ -0,0 +1,184 @@ +a { color: #336699; text-decoration: none; } +a:hover { color: #6699CC; text-decoration: underline; } +a:active { color: #6699CC; text-decoration: underline; } + +body { background : #FFFFFF; } +body, table { font-family: Georgia, Times New Roman, Times, serif; font-size: 10pt } +p, li { line-height: 140% } +a img { border: 0px; } +dd { margin-left: 0px; padding-left: 1em; } + +/* Page layout/boxes */ + +.info-box {} +.info-box-title { margin: 1em 0em 0em 0em; padding: .25em; font-weight: normal; font-size: 14pt; border: 2px solid #999999; background-color: #CCCCFF } +.info-box-body { border: 1px solid #999999; padding: .5em; } +.nav-bar { font-size: 8pt; white-space: nowrap; text-align: right; padding: .2em; margin: 0em 0em 1em 0em; } + +.oddrow { background-color: #F8F8F8; border: 1px solid #AAAAAA; padding: .5em; margin-bottom: 1em} +.evenrow { border: 1px solid #AAAAAA; padding: .5em; margin-bottom: 1em} + +.page-body { max-width: 800px; margin: auto; } +.tree { } + +/* Index formatting classes */ + +.index-item-body { margin-top: .5em; margin-bottom: .5em} +.index-item-description { margin-top: .25em } +.index-item-details { font-weight: normal; font-style: italic; font-size: 8pt } +.index-letter-section { background-color: #EEEEEE; border: 1px dotted #999999; padding: .5em; margin-bottom: 1em} +.index-letter-title { font-size: 12pt; font-weight: bold } +.index-letter-menu { text-align: center; margin: 1em } +.index-letter { font-size: 12pt } + +/* Docbook classes */ + +.description {} +.short-description { font-weight: bold; color: #666666; } +.tags { padding-left: 0em; margin-left: 3em; color: #666666; list-style-type: square; } +.parameters { padding-left: 0em; margin-left: 3em; font-style: italic; list-style-type: square; } +.redefinitions { font-size: 8pt; padding-left: 0em; margin-left: 2em; } +.package { } +.package-title { font-weight: bold; font-size: 14pt; border-bottom: 1px solid black } +.package-details { font-size: 85%; } +.sub-package { font-weight: bold; font-size: 120% } +.tutorial { border-width: thin; border-color: #0066ff } +.tutorial-nav-box { width: 100%; border: 1px solid #999999; background-color: #F8F8F8; } +.nav-button-disabled { color: #999999; } +.nav-button:active, +.nav-button:focus, +.nav-button:hover { background-color: #DDDDDD; outline: 1px solid #999999; text-decoration: none } +.folder-title { font-style: italic } + +/* Generic formatting */ + +.field { font-weight: bold; } +.detail { font-size: 8pt; } +.notes { font-style: italic; font-size: 8pt; } +.separator { background-color: #999999; height: 2px; } +.warning { color: #FF6600; } +.disabled { font-style: italic; color: #999999; } + +/* Code elements */ + +.line-number { } + +.class-table { width: 100%; } +.class-table-header { border-bottom: 1px dotted #666666; text-align: left} +.class-name { color: #000000; font-weight: bold; } + +.method-summary { padding-left: 1em; font-size: 8pt } +.method-header { } +.method-definition { margin-bottom: .3em } +.method-title { font-weight: bold; } +.method-name { font-weight: bold; } +.method-signature { font-size: 85%; color: #666666; margin: .5em 0em } +.method-result { font-style: italic; } + +.var-summary { padding-left: 1em; font-size: 8pt; } +.var-header { } +.var-title { margin-bottom: .3em } +.var-type { font-style: italic; } +.var-name { font-weight: bold; } +.var-default {} +.var-description { font-weight: normal; color: #000000; } + +.include-title { } +.include-type { font-style: italic; } +.include-name { font-weight: bold; } + +.const-title { } +.const-name { font-weight: bold; } + +/* Syntax highlighting */ + +.src-code { border: 1px solid #336699; padding: 1em; background-color: #EEEEEE; } +.src-line { font-family: 'Courier New', Courier, monospace; font-weight: normal; } + +.src-comm { color: green; } +.src-id { } +.src-inc { color: #0000FF; } +.src-key { color: #0000FF; } +.src-num { color: #CC0000; } +.src-str { color: #66cccc; } +.src-sym { font-weight: bold; } +.src-var { } + +.src-php { font-weight: bold; } + +.src-doc { color: #009999 } +.src-doc-close-template { color: #0000FF } +.src-doc-coretag { color: #0099FF; font-weight: bold } +.src-doc-inlinetag { color: #0099FF } +.src-doc-internal { color: #6699cc } +.src-doc-tag { color: #0080CC } +.src-doc-template { color: #0000FF } +.src-doc-type { font-style: italic } +.src-doc-var { font-style: italic } + +.tute-tag { color: #009999 } +.tute-attribute-name { color: #0000FF } +.tute-attribute-value { color: #0099FF } +.tute-entity { font-weight: bold; } +.tute-comment { font-style: italic } +.tute-inline-tag { color: #636311; font-weight: bold } + +/* tutorial */ + +.authors { } +.author { font-style: italic; font-weight: bold } +.author-blurb { margin: .5em 0em .5em 2em; font-size: 85%; font-weight: normal; font-style: normal } +.example { border: 1px dashed #999999; background-color: #EEEEEE; padding: .5em; } +.listing { border: 1px dashed #999999; background-color: #EEEEEE; padding: .5em; white-space: nowrap; } +.release-info { font-size: 85%; font-style: italic; margin: 1em 0em } +.ref-title-box { } +.ref-title { } +.ref-purpose { font-style: italic; color: #666666 } +.ref-synopsis { } +.title { font-weight: bold; margin: 1em 0em 0em 0em; padding: .25em; border: 2px solid #999999; background-color: #CCCCFF } +.cmd-synopsis { margin: 1em 0em } +.cmd-title { font-weight: bold } +.toc { margin-left: 2em; padding-left: 0em } + +/*------------------------------------------------------------------------------ + webfx-tree +------------------------------------------------------------------------------*/ + +.webfx-tree-container { + margin: 0px; + padding: 0px; + white-space: nowrap; + font: icon; +} + +.webfx-tree-item { + padding: 0px; + margin: 0px; + color: black; + white-space: nowrap; + font: icon; +} + +.webfx-tree-item a { + margin-left: 3px; + padding: 1px 2px 1px 2px; + color: black; + text-decoration: none; +} + +.webfx-tree-item a:hover, .webfx-tree-item a:active, .webfx-tree-item a:focus { + color: black; + background: #CCCCFF; + text-decoration: none +} + +.webfx-tree-item img { + vertical-align: middle; + border: 0px; +} + +.webfx-tree-icon { + width: 16px; + height: 16px; +} + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/method.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/method.tpl new file mode 100755 index 00000000..06d57a12 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/method.tpl @@ -0,0 +1,149 @@ +<A NAME='method_detail'></A> +{section name=methods loop=$methods} +{if $methods[methods].static} +<a name="method{$methods[methods].function_name}" id="{$methods[methods].function_name}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div class="method-header"> + <span class="method-title">static {$methods[methods].function_name}</span> (line <span class="line-number">{if $methods[methods].slink}{$methods[methods].slink}{else}{$methods[methods].line_number}{/if}</span>) + </div> + + {include file="docblock.tpl" sdesc=$methods[methods].sdesc desc=$methods[methods].desc tags=$methods[methods].tags params=$methods[methods].params function=false} + + <div class="method-signature"> + static <span class="method-result">{$methods[methods].function_return}</span> + <span class="method-name"> + {if $methods[methods].ifunction_call.returnsref}&{/if}{$methods[methods].function_name} + </span> + {if count($methods[methods].ifunction_call.params)} + ({section name=params loop=$methods[methods].ifunction_call.params}{if $smarty.section.params.iteration != 1}, {/if}{if $methods[methods].ifunction_call.params[params].hasdefault}[{/if}<span class="var-type">{$methods[methods].ifunction_call.params[params].type}</span> <span class="var-name">{$methods[methods].ifunction_call.params[params].name}</span>{if $methods[methods].ifunction_call.params[params].hasdefault} = <span class="var-default">{$methods[methods].ifunction_call.params[params].default}</span>]{/if}{/section}) + {else} + () + {/if} + </div> + + {if $methods[methods].params} + <ul class="parameters"> + {section name=params loop=$methods[methods].params} + <li> + <span class="var-type">{$methods[methods].params[params].datatype}</span> + <span class="var-name">{$methods[methods].params[params].var}</span>{if $methods[methods].params[params].data}<span class="var-description">: {$methods[methods].params[params].data}</span>{/if} + </li> + {/section} + </ul> + {/if} + + {if $methods[methods].method_overrides} + <hr class="separator" /> + <div class="notes">Redefinition of:</div> + <dl> + <dt>{$methods[methods].method_overrides.link}</dt> + {if $methods[methods].method_overrides.sdesc} + <dd>{$methods[methods].method_overrides.sdesc}</dd> + {/if} + </dl> + {/if} + {if $methods[methods].method_implements} + <hr class="separator" /> + <div class="notes">Implementation of:</div> + {section name=imp loop=$methods[methods].method_implements} + <dl> + <dt>{$methods[methods].method_implements[imp].link}</dt> + {if $methods[methods].method_implements[imp].sdesc} + <dd>{$methods[methods].method_implements[imp].sdesc}</dd> + {/if} + </dl> + {/section} + {/if} + + {if $methods[methods].descmethod} + <hr class="separator" /> + <div class="notes">Redefined in descendants as:</div> + <ul class="redefinitions"> + {section name=dm loop=$methods[methods].descmethod} + <li> + {$methods[methods].descmethod[dm].link} + {if $methods[methods].descmethod[dm].sdesc} + : {$methods[methods].descmethod[dm].sdesc} + {/if} + </li> + {/section} + </ul> + {/if} +</div> +{/if} +{/section} +{section name=methods loop=$methods} +{if !$methods[methods].static} +<a name="method{$methods[methods].function_name}" id="{$methods[methods].function_name}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div class="method-header"> + <span class="method-title">{if $methods[methods].ifunction_call.constructor}Constructor {elseif $methods[methods].ifunction_call.destructor}Destructor {/if}{$methods[methods].function_name}</span> (line <span class="line-number">{if $methods[methods].slink}{$methods[methods].slink}{else}{$methods[methods].line_number}{/if}</span>) + </div> + + {include file="docblock.tpl" sdesc=$methods[methods].sdesc desc=$methods[methods].desc tags=$methods[methods].tags params=$methods[methods].params function=false} + + <div class="method-signature"> + <span class="method-result">{$methods[methods].function_return}</span> + <span class="method-name"> + {if $methods[methods].ifunction_call.returnsref}&{/if}{$methods[methods].function_name} + </span> + {if count($methods[methods].ifunction_call.params)} + ({section name=params loop=$methods[methods].ifunction_call.params}{if $smarty.section.params.iteration != 1}, {/if}{if $methods[methods].ifunction_call.params[params].hasdefault}[{/if}<span class="var-type">{$methods[methods].ifunction_call.params[params].type}</span> <span class="var-name">{$methods[methods].ifunction_call.params[params].name}</span>{if $methods[methods].ifunction_call.params[params].hasdefault} = <span class="var-default">{$methods[methods].ifunction_call.params[params].default}</span>]{/if}{/section}) + {else} + () + {/if} + </div> + + {if $methods[methods].params} + <ul class="parameters"> + {section name=params loop=$methods[methods].params} + <li> + <span class="var-type">{$methods[methods].params[params].datatype}</span> + <span class="var-name">{$methods[methods].params[params].var}</span>{if $methods[methods].params[params].data}<span class="var-description">: {$methods[methods].params[params].data}</span>{/if} + </li> + {/section} + </ul> + {/if} + + {if $methods[methods].method_overrides} + <hr class="separator" /> + <div class="notes">Redefinition of:</div> + <dl> + <dt>{$methods[methods].method_overrides.link}</dt> + {if $methods[methods].method_overrides.sdesc} + <dd>{$methods[methods].method_overrides.sdesc}</dd> + {/if} + </dl> + {/if} + {if $methods[methods].method_implements} + <hr class="separator" /> + <div class="notes">Implementation of:</div> + {section name=imp loop=$methods[methods].method_implements} + <dl> + <dt>{$methods[methods].method_implements[imp].link}</dt> + {if $methods[methods].method_implements[imp].sdesc} + <dd>{$methods[methods].method_implements[imp].sdesc}</dd> + {/if} + </dl> + {/section} + {/if} + + {if $methods[methods].descmethod} + <hr class="separator" /> + <div class="notes">Redefined in descendants as:</div> + <ul class="redefinitions"> + {section name=dm loop=$methods[methods].descmethod} + <li> + {$methods[methods].descmethod[dm].link} + {if $methods[methods].descmethod[dm].sdesc} + : {$methods[methods].descmethod[dm].sdesc} + {/if} + </li> + {/section} + </ul> + {/if} +</div> +{/if} +{/section} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/page.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/page.tpl new file mode 100755 index 00000000..b5980236 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/page.tpl @@ -0,0 +1,211 @@ +{include file="header.tpl" top3=true} + +<h2 class="file-name">{$source_location}</h2> + +<a name="sec-description"></a> +<div class="info-box"> + <div class="info-box-title">Description</div> + <div class="nav-bar"> + {if $classes || $includes || $defines || $globals || $functions} + <span class="disabled">Description</span> | + {/if} + {if $classes} + <a href="#sec-classes">Classes</a> + {if $includes || $defines || $globals || $functions}|{/if} + {/if} + {if $includes} + <a href="#sec-includes">Includes</a> + {if $defines || $globals || $functions}|{/if} + {/if} + {if $defines} + <a href="#sec-constants">Constants</a> + {if $globals || $functions}|{/if} + {/if} + {if $globals} + <a href="#sec-variables">Variables</a> + {if $functions}|{/if} + {/if} + {if $functions} + <a href="#sec-functions">Functions</a> + {/if} + </div> + <div class="info-box-body"> + {include file="docblock.tpl" desc=$desc sdesc=$sdesc tags=$tags} + + {if $tutorial} + <hr class="separator" /> + <div class="notes">Tutorial: <span class="tutorial">{$tutorial}</div> + {/if} + </div> +</div> + +{if $classes} + <a name="sec-classes"></a> + <div class="info-box"> + <div class="info-box-title">Classes</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + <span class="disabled">Classes</span> + {if $includes || $defines || $globals || $functions}|{/if} + {if $includes} + <a href="#sec-includes">Includes</a> + {if $defines || $globals || $functions}|{/if} + {/if} + {if $defines} + <a href="#sec-constants">Constants</a> + {if $globals || $functions}|{/if} + {/if} + {if $globals} + <a href="#sec-variables">Variables</a> + {if $functions}|{/if} + {/if} + {if $functions} + <a href="#sec-functions">Functions</a> + {/if} + </div> + <div class="info-box-body"> + <table cellpadding="2" cellspacing="0" class="class-table"> + <tr> + <th class="class-table-header">Class</th> + <th class="class-table-header">Description</th> + </tr> + {section name=classes loop=$classes} + <tr> + <td style="padding-right: 2em; vertical-align: top"> + {$classes[classes].link} + </td> + <td> + {if $classes[classes].sdesc} + {$classes[classes].sdesc} + {else} + {$classes[classes].desc} + {/if} + </td> + </tr> + {/section} + </table> + </div> + </div> +{/if} + +{if $includes} + <a name="sec-includes"></a> + <div class="info-box"> + <div class="info-box-title">Includes</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $classes} + <a href="#sec-classes">Classes</a> + {if $includes || $defines || $globals || $functions}|{/if} + {/if} + <span class="disabled">Includes</span> + {if $defines || $globals || $functions}|{/if} + {if $defines} + <a href="#sec-constants">Constants</a> + {if $globals || $functions}|{/if} + {/if} + {if $globals} + <a href="#sec-variables">Variables</a> + {if $functions}|{/if} + {/if} + {if $functions} + <a href="#sec-functions">Functions</a> + {/if} + </div> + <div class="info-box-body"> + {include file="include.tpl"} + </div> + </div> +{/if} + +{if $defines} + <a name="sec-constants"></a> + <div class="info-box"> + <div class="info-box-title">Constants</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $classes} + <a href="#sec-classes">Classes</a> + {if $includes || $defines || $globals || $functions}|{/if} + {/if} + {if $includes} + <a href="#sec-includes">Includes</a> + {if $defines || $globals || $functions}|{/if} + {/if} + <span class="disabled">Constants</span> + {if $globals || $functions}|{/if} + {if $globals} + <a href="#sec-variables">Variables</a> + {if $functions}|{/if} + {/if} + {if $functions} + <a href="#sec-functions">Functions</a> + {/if} + </div> + <div class="info-box-body"> + {include file="define.tpl"} + </div> + </div> +{/if} + +{if $globals} + <a name="sec-variables"></a> + <div class="info-box"> + <div class="info-box-title">Variables</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $classes} + <a href="#sec-classes">Classes</a> + {if $includes || $defines || $globals || $functions}|{/if} + {/if} + {if $includes} + <a href="#sec-includes">Includes</a> + {if $defines || $globals || $functions}|{/if} + {/if} + {if $defines} + <a href="#sec-constants">Constants</a> + {if $globals || $functions}|{/if} + {/if} + <span class="disabled">Variables</span> + {if $functions}|{/if} + {if $functions} + <a href="#sec-functions">Functions</a> + {/if} + </div> + <div class="info-box-body"> + {include file="global.tpl"} + </div> + </div> +{/if} + +{if $functions} + <a name="sec-functions"></a> + <div class="info-box"> + <div class="info-box-title">Functions</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $classes} + <a href="#sec-classes">Classes</a> + {if $includes || $defines || $globals || $functions}|{/if} + {/if} + {if $includes} + <a href="#sec-includes">Includes</a> + {if $defines || $globals || $functions}|{/if} + {/if} + {if $defines} + <a href="#sec-constants">Constants</a> + {if $globals || $functions}|{/if} + {/if} + {if $globals} + <a href="#sec-variables">Variables</a> + {if $functions}|{/if} + {/if} + <span class="disabled">Functions</span> + </div> + <div class="info-box-body"> + {include file="function.tpl"} + </div> + </div> +{/if} + +{include file="footer.tpl" top3=true} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/pkgelementindex.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/pkgelementindex.tpl new file mode 100755 index 00000000..dc283ad0 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/pkgelementindex.tpl @@ -0,0 +1,17 @@ +{include file="header.tpl"} +<a name="top"></a> +<h2>[{$package}] element index</h2> +{if count($packageindex) > 1} + <h3>Package indexes</h3> + <ul> + {section name=p loop=$packageindex} + {if $packageindex[p].title != $package} + <li><a href="elementindex_{$packageindex[p].title}.html">{$packageindex[p].title}</a></li> + {/if} + {/section} + </ul> +{/if} +<a href="elementindex.html">All elements</a> +<br /> +{include file="basicindex.tpl" indexname=elementindex_$package} +{include file="footer.tpl"} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/ric.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/ric.tpl new file mode 100755 index 00000000..ad792475 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/ric.tpl @@ -0,0 +1,6 @@ +{include file="header.tpl"} +<div align="center"><h1>{$name}</h1></div> +<pre> +{$contents|htmlentities} +</pre> +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/todolist.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/todolist.tpl new file mode 100755 index 00000000..f929ccdb --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/todolist.tpl @@ -0,0 +1,14 @@ +{include file="header.tpl" title="Todo List"} +<div align="center"><h1>Todo List</h1></div> +{foreach from=$todos key=todopackage item=todo} +<h2>{$todopackage}</h2> +{section name=todo loop=$todo} +<h3>{$todo[todo].link}</h3> +<ul> +{section name=t loop=$todo[todo].todos} + <li>{$todo[todo].todos[t]}</li> +{/section} +</ul> +{/section} +{/foreach} +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/top_frame.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/top_frame.tpl new file mode 100755 index 00000000..36d1e5a1 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/top_frame.tpl @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> + <html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <!-- template designed by Marco Von Ballmoos --> + <title>{$title}</title> + <link rel="stylesheet" href="{$subdir}media/stylesheet.css" /> + <link rel="stylesheet" href="{$subdir}media/banner.css" /> + <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/> + </head> + <body> + <div class="banner"> + <div class="banner-title">{$package}</div> + <div class="banner-menu"> + <form> + <table cellpadding="0" cellspacing="0" style="width: 100%"> + <tr> + <td> + {if count($ric) >= 1} + {assign var="last_ric_name" value=""} + {section name=ric loop=$ric} + {if $last_ric_name != ""} | {/if} + <a href="{$ric[ric].file}" target="right">{$ric[ric].name}</a> + {assign var="last_ric_name" value=$ric[ric].name} + {/section} + {/if} + </td> + <td style="width: 2em"> </td> + <td style="text-align: right"> + {if count($packages) > 1} + <span class="field">Packages</span> + <select class="package-selector" onchange="window.parent.left_bottom.location=this[selectedIndex].value"> + {section name=p loop=$packages} + <option value="{$packages[p].link}">{$packages[p].title}</option> + {/section} + </select> + {/if} + </td> + </tr> + </table> + </form> + </div> + </div> + </body> + </html> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/tutorial.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/tutorial.tpl new file mode 100755 index 00000000..3b9109d1 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/tutorial.tpl @@ -0,0 +1,13 @@ +{include file="header.tpl" title=$title top3=true} + +{if $nav} + {include file="tutorial_nav.tpl" prev=$prev next=$next up=$up prevtitle=$prevtitle nexttitle=$nexttitle uptitle=$uptitle} +{/if} + +{$contents} + +{if $nav} + {include file="tutorial_nav.tpl" prev=$prev next=$next up=$up prevtitle=$prevtitle nexttitle=$nexttitle uptitle=$uptitle} +{/if} + +{include file="footer.tpl" top3=true}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/tutorial_nav.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/tutorial_nav.tpl new file mode 100755 index 00000000..89952301 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/tutorial_nav.tpl @@ -0,0 +1,41 @@ +<table class="tutorial-nav-box"> + <tr> + <td style="width: 30%"> + {if $prev} + <a href="{$prev}" class="nav-button">Previous</a> + {else} + <span class="nav-button-disabled">Previous</span> + {/if} + </td> + <td style="text-align: center"> + {if $up} + <a href="{$up}" class="nav-button">Up</a> + {/if} + </td> + <td style="text-align: right; width: 30%"> + {if $next} + <a href="{$next}" class="nav-button">Next</a> + {else} + <span class="nav-button-disabled">Next</span> + {/if} + </td> + </tr> + <tr> + <td style="width: 30%"> + {if $prevtitle} + <span class="detail">{$prevtitle}</span> + {/if} + </td> + <td style="text-align: center"> + {if $uptitle} + <span class="detail">{$uptitle}</span> + {/if} + </td> + <td style="text-align: right; width: 30%"> + {if $nexttitle} + <span class="detail">{$nexttitle}</span> + {/if} + </td> + </tr> +</table> +
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/tutorial_toc.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/tutorial_toc.tpl new file mode 100755 index 00000000..3482249b --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/tutorial_toc.tpl @@ -0,0 +1,40 @@ +{if count($toc)} +<h1 class="title">Table of Contents</h1> +<ul class="toc"> + {assign var="lastcontext" value='refsect1'} + {section name=toc loop=$toc} + + {if $toc[toc].tagname != $lastcontext} + {if $lastcontext == 'refsect1'} + <ul class="toc"> + <li>{$toc[toc].link}</li> + {else} + {if $lastcontext == 'refsect2'} + {if $toc[toc].tagname == 'refsect1'} + </ul> + <li>{$toc[toc].link}</li> + {/if} + {if $toc[toc].tagname == 'refsect3'} + <ul class="toc"> + <li>{$toc[toc].link}</li> + {/if} + {else} + </ul> + </ul> + <li>{$toc[toc].link}</li> + {/if} + {/if} + {assign var="lastcontext" value=$toc[toc].tagname} + {else} + <li>{$toc[toc].link}</li> + {/if} + {/section} + {if $lastcontext == 'refsect2'} + </ul> + {/if} + {if $lastcontext == 'refsect3'} + </ul> + </ul> + {/if} +</ul> +{/if} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/tutorial_tree.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/tutorial_tree.tpl new file mode 100755 index 00000000..40d9a4ff --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/tutorial_tree.tpl @@ -0,0 +1,8 @@ + var a{$name|replace:"-":"_"}node = new WebFXTreeItem('{$main.title|strip_tags|escape:"quotes"}','{$main.link}', parent_node); + +{if $haskids} + var a{$name|replace:"-":"_"}_old_parent_node = parent_node; + parent_node = a{$name|replace:"-":"_"}node; + {$kids} + parent_node = a{$name|replace:"-":"_"}_old_parent_node; +{/if} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/var.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/var.tpl new file mode 100755 index 00000000..1b3ca2ff --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/var.tpl @@ -0,0 +1,90 @@ +{section name=vars loop=$vars} +{if $vars[vars].static} +<a name="var{$vars[vars].var_name}" id="{$vars[vars].var_name}"><!-- --></A> +<div class="{cycle values="evenrow,oddrow"}"> + + <div class="var-header"> + <span class="var-title"> + static <span class="var-type">{$vars[vars].var_type}</span> + <span class="var-name">{$vars[vars].var_name}</span> + {if $vars[vars].var_default} = <span class="var-default">{$vars[vars].var_default|replace:"\n":"<br />"}</span>{/if} + (line <span class="line-number">{if $vars[vars].slink}{$vars[vars].slink}{else}{$vars[vars].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$vars[vars].sdesc desc=$vars[vars].desc tags=$vars[vars].tags} + + {if $vars[vars].var_overrides} + <hr class="separator" /> + <div class="notes">Redefinition of:</div> + <dl> + <dt>{$vars[vars].var_overrides.link}</dt> + {if $vars[vars].var_overrides.sdesc} + <dd>{$vars[vars].var_overrides.sdesc}</dd> + {/if} + </dl> + {/if} + + {if $vars[vars].descvar} + <hr class="separator" /> + <div class="notes">Redefined in descendants as:</div> + <ul class="redefinitions"> + {section name=vm loop=$vars[vars].descvar} + <li> + {$vars[vars].descvar[vm].link} + {if $vars[vars].descvar[vm].sdesc} + : {$vars[vars].descvar[vm].sdesc} + {/if} + </li> + {/section} + </ul> + {/if} + +</div> +{/if} +{/section} +{section name=vars loop=$vars} +{if !$vars[vars].static} +<a name="var{$vars[vars].var_name}" id="{$vars[vars].var_name}"><!-- --></A> +<div class="{cycle values="evenrow,oddrow"}"> + + <div class="var-header"> + <span class="var-title"> + <span class="var-type">{$vars[vars].var_type}</span> + <span class="var-name">{$vars[vars].var_name}</span> + {if $vars[vars].var_default} = <span class="var-default">{$vars[vars].var_default|replace:"\n":"<br />"}</span>{/if} + (line <span class="line-number">{if $vars[vars].slink}{$vars[vars].slink}{else}{$vars[vars].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$vars[vars].sdesc desc=$vars[vars].desc tags=$vars[vars].tags} + + {if $vars[vars].var_overrides} + <hr class="separator" /> + <div class="notes">Redefinition of:</div> + <dl> + <dt>{$vars[vars].var_overrides.link}</dt> + {if $vars[vars].var_overrides.sdesc} + <dd>{$vars[vars].var_overrides.sdesc}</dd> + {/if} + </dl> + {/if} + + {if $vars[vars].descvar} + <hr class="separator" /> + <div class="notes">Redefined in descendants as:</div> + <ul class="redefinitions"> + {section name=vm loop=$vars[vars].descvar} + <li> + {$vars[vars].descvar[vm].link} + {if $vars[vars].descvar[vm].sdesc} + : {$vars[vars].descvar[vm].sdesc} + {/if} + </li> + {/section} + </ul> + {/if} + +</div> +{/if} +{/section} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/options.ini b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/options.ini new file mode 100755 index 00000000..084809be --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/options.ini @@ -0,0 +1,577 @@ +preservedocbooktags = false + +;; used to highlight the {@source} inline tag, @filesource tag, and @example tag +[highlightSourceTokens] +;; format: +;; T_CONSTANTNAME = open +;; /T_CONSTANTNAME = close + +T_INCLUDE = <span class="src-inc"> +/T_INCLUDE = </span> +T_INCLUDE_ONCE = <span class="src-inc"> +/T_INCLUDE_ONCE = </span> +T_REQUIRE_ONCE = <span class="src-inc"> +/T_REQUIRE_ONCE = </span> +T_REQUIRE_ONCE = <span class="src-inc"> +/T_REQUIRE_ONCE = </span> + +T_CONSTANT_ENCAPSED_STRING = <span class="src-str"> +/T_CONSTANT_ENCAPSED_STRING = </span> +T_STRING_VARNAME = <span class="src-str"> +/T_STRING_VARNAME = </span> + +T_STRING = <span class="src-id"> +/T_STRING = </span> + +T_DNUMBER = <span class="src-num"> +/T_DNUMBER = </span> +T_LNUMBER = <span class="src-num"> +/T_LNUMBER = </span> + +T_VARIABLE = <span class="src-var"> +/T_VARIABLE = </span> + +T_COMMENT = <span class="src-comm"> +/T_COMMENT = </span> +T_ML_COMMENT = <span class="src-comm"> +/T_ML_COMMENT = </span> + +T_OBJECT_OPERATOR = <span class="src-sym"> +/T_OBJECT_OPERATOR = </span> + +T_ABSTRACT = <span class="src-key"> +/T_ABSTRACT = </span> +T_CLONE = <span class="src-key"> +/T_CLONE = </span> +T_HALT_COMPILER = <span class="src-key"> +/T_HALT_COMPILER = </span> +T_ARRAY = <span class="src-key"> +/T_ARRAY = </span> +T_AS = <span class="src-key"> +/T_AS = </span> +T_BREAK = <span class="src-key"> +/T_BREAK = </span> +T_CLASS = <span class="src-key"> +/T_CLASS = </span> +T_CASE = <span class="src-key"> +/T_CASE = </span> +T_CONST = <span class="src-key"> +/T_CONST = </span> +T_CONTINUE = <span class="src-key"> +/T_CONTINUE = </span> +T_DECLARE = <span class="src-key"> +/T_DECLARE = </span> +T_DEFAULT = <span class="src-key"> +/T_DEFAULT = </span> +T_ELSE = <span class="src-key"> +/T_ELSE = </span> +T_ELSEIF = <span class="src-key"> +/T_ELSEIF = </span> +T_EMPTY = <span class="src-key"> +/T_EMPTY = </span> +T_ENDDECLARE = <span class="src-key"> +/T_ENDDECLARE = </span> +T_ENDFOR = <span class="src-key"> +/T_ENDFOR = </span> +T_ENDSWITCH = <span class="src-key"> +/T_ENDSWITCH = </span> +T_ENDFOREACH = <span class="src-key"> +/T_ENDFOREACH = </span> +T_ENDIF = <span class="src-key"> +/T_ENDIF = </span> +T_ENDWHILE = <span class="src-key"> +/T_ENDWHILE = </span> +T_EXIT = <span class="src-key"> +/T_EXIT = </span> +T_EXTENDS = <span class="src-key"> +/T_EXTENDS = </span> +T_FINAL = <span class="src-key"> +/T_FINAL = </span> +T_FOR = <span class="src-key"> +/T_FOR = </span> +T_FOREACH = <span class="src-key"> +/T_FOREACH = </span> +T_FUNCTION = <span class="src-key"> +/T_FUNCTION = </span> +T_GLOBAL = <span class="src-key"> +/T_GLOBAL = </span> +T_IF = <span class="src-key"> +/T_IF = </span> +T_IMPLEMENTS = <span class="src-key"> +/T_IMPLEMENTS = </span> +T_INTERFACE = <span class="src-key"> +/T_INTERFACE = </span> +T_LOGICAL_AND = <span class="src-key"> +/T_LOGICAL_AND = </span> +T_LOGICAL_OR = <span class="src-key"> +/T_LOGICAL_OR = </span> +T_LOGICAL_XOR = <span class="src-key"> +/T_LOGICAL_XOR = </span> +T_NEW = <span class="src-key"> +/T_NEW = </span> +T_PRIVATE = <span class="src-key"> +/T_PRIVATE = </span> +T_PROTECTED = <span class="src-key"> +/T_PROTECTED = </span> +T_PUBLIC = <span class="src-key"> +/T_PUBLIC = </span> +T_RETURN = <span class="src-key"> +/T_RETURN = </span> +T_STATIC = <span class="src-key"> +/T_STATIC = </span> +T_SWITCH = <span class="src-key"> +/T_SWITCH = </span> +T_VAR = <span class="src-key"> +/T_VAR = </span> +T_WHILE = <span class="src-key"> +/T_WHILE = </span> + +T_DOUBLE_COLON = <span class="src-sym"> +/T_DOUBLE_COLON = </span> + +T_OPEN_TAG = <span class="src-php"> +/T_OPEN_TAG = </span> +T_OPEN_TAG_WITH_ECHO = <span class="src-php"> +/T_OPEN_TAG_WITH_ECHO = </span> +T_CLOSE_TAG = <span class="src-php"> +/T_CLOSE_TAG = </span> + + +[highlightSource] +;; this is for highlighting things that aren't tokens like "&" +;; format: +;; word = open +;; /word = close +@ = <span class="src-sym"> +/@ = </span> +& = <span class="src-sym"> +/& = </span> +[ = <span class="src-sym"> +/[ = </span> +] = <span class="src-sym"> +/] = </span> +! = <span class="src-sym"> +/! = </span> +";" = <span class="src-sym"> +/; = </span> +( = <span class="src-sym"> +/( = </span> +) = <span class="src-sym"> +/) = </span> +, = <span class="src-sym"> +/, = </span> +{ = <span class="src-sym"> +/{ = </span> +} = <span class="src-sym"> +/} = </span> +""" = <span class="src-str"> +/" = </span> + +[highlightDocBlockSourceTokens] +;; this is for docblock tokens, using by phpDocumentor_HighlightParser +;; tagphptype is for "string" in @param string description, for example +docblock = <span class="src-doc"> +/docblock = </span> +tagphptype = <span class="src-doc-type"> +/tagphptype = </span> +tagvarname = <span class="src-doc-var"> +/tagvarname = </span> +coretag = <span class="src-doc-coretag"> +/coretag = </span> +tag = <span class="src-doc-tag"> +/tag = </span> +inlinetag = <span class="src-doc-inlinetag"> +/inlinetag = </span> +internal = <span class="src-doc-internal"> +/internal = </span> +closetemplate = <span class="src-doc-close-template"> +/closetemplate = </span> +docblocktemplate = <span class="src-doc-template"> +/docblocktemplate = </span> + +[highlightTutorialSourceTokens] +;; this is for XML DocBook-based tutorials, highlighted by phpDocumentor_TutorialHighlightParser +;; <tag> +opentag = <span class="tute-tag"> +/opentag = </span> +;; </tag> +closetag = <span class="tute-tag"> +/closetag = </span> +;; <tag attribute="value"> +attribute = <span class="tute-attribute-name"> +/attribute = </span> +;; <tag attribute="value"> +attributevalue = <span class="tute-attribute-value"> +/attributevalue = </span> +;; &entity; +entity = <span class="tute-entity"> +/entity = </span> +;; <!-- comment --> +comment = <span class="tute-comment"> +/comment = </span> +;; {@inline tag} +itag = <span class="tute-inline-tag"> +/itag = </span> + +;; used for translation of html in DocBlocks +[desctranslate] +ul = <ul> +/ul = </ul> +ol = <ol> +/ol = </ol> +li = <li> +/li = </li> +code = +/code = +var = <var> +/var = </var> +samp = <samp> +/samp = </samp> +kbd = <kbd> +/kbd = </kbd> +pre = <pre> +/pre = </pre> +p = <p> +/p = </p> +b = <strong> +/b = </strong> +i = <em> +/i = </em> +br = <br /> + +[ppage] +;; this is the DocBook package page translation section. All DocBook tags +;; that have a corresponding html tag must be listed here. Entities should +;; also be listed here +;; +;; examples: +;; 1) +;; tagname = newtagname +;; +;; This is the simplest case, where all attributes will be added into the +;; starting tag and the ending tag will be html/xml style </tranlatedtagname> +;; <tagname></tagname> becomes <newtagname></newtagname> and +;; <tagname attr="value"></tagname> becomes +;; <newtagname attr="value"></newtagname> +;; +;; 2) +;; tagname = newtagname +;; tagname->attr = newattrname +;; +;; in this case, everything will be like the first case, except tags like: +;; <tagname attr="value"></tagname> will become +;; <newtagname newattrname="value"></newtagname> +;; +;; 3) +;; tagname = newtagname +;; tagname->attr = newattrname +;; tagname->attr+value = newvalue +;; +;; in this case, the value is also translated to another. This can be useful +;; for instances such as focus="middle" changing to align="center" or something +;; of that nature. +;; <tagname attr="value"></tagname> will become +;; <newtagname newattrname="newvalue"></newtagname> +;; +;; 4) +;; tagname = newtagname +;; tagname->attr1 = newattrname +;; tagname->attr2 = newattrname +;; tagname->attr1+value|attr2+value = newvalue +;; +;; in this case, two attributes combine to make one new attribute, and the combined +;; value is translated into a new value +;; <tagname attr1="value1" attr2="value2"></tagname> will become +;; <newtagname newattrname="newvalue"></newtagname> +;; +;; 5) +;; tagname = newtagname +;; tagname!attr = dummy +;; +;; here, the attribute will be ignored. dummy is not used and may be any value +;; <tagname attr="value"></tagname> will become +;; <newtagname></newtagname> +;; +;; 6) +;; tagname = newtagname +;; tagname! = dummy +;; +;; here, all attributes will be ignored. dummy is not used and may be any value +;; <tagname attr1="value" attr2="foo"></tagname> will become +;; <newtagname></newtagname> +;; +;; 7) +;; tagname = newtagname +;; tagname/ = 1 +;; +;; here, the tag will be translated as a single tag with no closing tag, and all +;; attributes +;; <tagname attr="val">{text text}</tagname> will become +;; <newtagname attr="val" /> +;; +;; 8) +;; tagname = <starttaginfo /> +;; /tagname = closetagtext +;; +;; in this case, the text <starttaginfo> will be inserted exactly as entered for +;; <tagname> and closetagtext for </tagname> +;; <tagname attr="val"></tagname> will become +;; <starttaginfo />closetagtext +;; +;; 9) +;; $attr$my_attribute = newattrname +;; +;; tagname = newtagname +;; +;; in this case, all occurences of my_attribute in any tag will be changed to +;; newattrname. This is useful for changing things like role="php" to +;; class="php," for example. Note that the text "$attr$" MUST be on the line +;; start for phpDocumentor to recognize it. +;; +;; 10) +;; &entity; = translation text +;; " = " +;; " = """ +;; < = < +;; +;; Use this to control translation of entities to their appropriate values + + = +" = " +” = ” +“ = “ +& = & +< = < +> = > +© = © + + +$attr$role = class + +abbrev = abbr + +blockquote = blockquote + +arg = span +arg->choice = class + +author = <span class="author"> +/author = </span> +author! = 0 + +authorblurb = <div class="author-blurb"> +/authorblurb = </div> + +authorgroup = <div class="authors"><h2 class="title">Authors</h2> +/authorgroup = </div> +authorgroup! = 0 + +caution = <span class="warning"> +/caution = </span> +caution! = 0 + +cmdsynopsis = <div class="cmd-synopsis"> +/cmdsynopsis = </div> + +command = <span class="cmd-title"> +/command = </span> + +copyright = <div class="notes"> +/copyright = </div> + +emphasis = em + +example = <div class="src-code"> +/example = </div> +example! = 0 + +function = +/function = () + +formalpara = p + +graphic = img +graphic->fileref = src +graphic/ = + +important = strong + +informalequation = blockquote + +informalexample = div + +inlineequation = em + +itemizedlist = ul + +listitem = li + +literal = code + +literallayout = span + +option = " " +/option = + +orderedlist = ol + +para = p + +programlisting = <div class="src-code"> +/programlisting = </div> +programlisting! = 0 + +refentry = div + +refnamediv = <div class="ref-title-box"> +/refnamediv = </div> +refnamediv! = 0 + +refname = <h1 class="ref-title"> +/refname = </h1> + +refpurpose = <h2 class="ref-purpose"> +/refpurpose = </h2> + +refsynopsisdiv = <div class="ref-synopsis"> +/refsynopsisdiv = </div> +refsynopsisdiv! = 0 + +refsect1 = span + +refsect2 = span + +refsect3 = +/refsect3 = <br /> + +releaseinfo = <div class="release-info">( +/releaseinfo = )</div> + +simpara = +/simpara = <br /> +simpara! = 0 + +subscript = sub + +superscript = super + +table = table + +table->colsep = rules +table->rowsep = rules +table->colsep+1|rowsep+1 =all +table->colsep+1|rowsep+0 =cols +table->colsep+0|rowsep+1 =rows + +table->frame =frame +table->frame+all =border +table->frame+none =void +table->frame+sides =vsides +table->frame+top =above +table->frame+topbot =hsides + +thead = thead + +tfoot = tfoot + +tbody = tbody + +colspec = col + +tgroup = colgroup +tgroup/ = 1 +tgroup->cols = span + +row = tr + +entry = td +entry->morerows = colspan +entry->morerows+1 =2 +entry->morerows+2 =3 +entry->morerows+3 =4 +entry->morerows+4 =5 +entry->morerows+5 =6 +entry->morerows+6 =7 +entry->morerows+7 =8 +entry->morerows+8 =9 +entry->morerows+9 =10 +entry->morerows+10 =11 +;; add more if you need more colspans + +warning = <span class="warning"> +/warning = </span> +warning! = 0 + +;; now begins the attributes that should be tags in cdata +[$attr$id] +open = a +;close = /a +cdata! = true +quotevalues = true +separator = "=" +;separateall = true +$id = name + +;; now begins the sections that deal with <title> +[refsynopsisdiv_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h1 class="title"> +close = </h1> + +[refsect1_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h2 class="title"> +close = </h2> + +[refsect2_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h3 class="title"> +close = </h3> + +[refsect3_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h4 class="title"> +close = </h4> + +[para_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <div class="title"> +close = </div> + +[formalpara_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <div class="title"> +close = </div> + +[example_title] +;tag_attr = true +;attr_name = title +;cdata_start = true +cdata_end = true +open = </td></tr><tr><td><strong> +close = </strong> + +[table_title] +;tag_attr = true +;attr_name = true +cdata_start = true +open = <caption> +close = </caption> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/basicindex.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/basicindex.tpl new file mode 100755 index 00000000..f90100b4 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/basicindex.tpl @@ -0,0 +1,57 @@ +<div class="index-letter-menu"> +{section name=letter loop=$letters} + <a class="index-letter" href="{$indexname}.html#{$letters[letter].letter}">{$letters[letter].letter}</a> +{/section} +</div> + +{section name=index loop=$index} + <a name="{$index[index].letter}"></a> + <div class="index-letter-section"> + <div style="float: left" class="index-letter-title">{$index[index].letter}</div> + <div style="float: right"><a href="#top">top</a></div> + <div style="clear: both"></div> + </div> + <dl> + {section name=contents loop=$index[index].index} + <dt class="field"> + {if ($index[index].index[contents].title == "Variable")} + <img src="{$subdir}media/images/{if $index[index].index[contents].access == 'private'}Private{/if}{$index[index].index[contents].title}.png" alt="{$index[index].index[contents].title}" title="{$index[index].index[contents].title}" /> + <span class="var-title">{$index[index].index[contents].name}</span> + {elseif ($index[index].index[contents].title == "Global")} + <img src="{$subdir}media/images/{$index[index].index[contents].title}.png" alt="{$index[index].index[contents].title}" title="{$index[index].index[contents].title}" /> + <span class="var-title">{$index[index].index[contents].name}</span> + {elseif ($index[index].index[contents].title == "Method")} + <img src="{$subdir}media/images/{if $index[index].index[contents].constructor}Constructor{elseif $index[index].index[contents].destructor}Destructor{else}{if $index[index].index[contents].abstract}Abstract{/if}{if $index[index].index[contents].access == 'private'}Private{/if}{$index[index].index[contents].title}{/if}.png" alt="{$index[index].index[contents].title}" title="{$index[index].index[contents].title}" /> + <span class="method-title">{$index[index].index[contents].name}</span> + {elseif ($index[index].index[contents].title == "Function")} + <img src="{$subdir}media/images/{$index[index].index[contents].title}.png" alt="{$index[index].index[contents].title}" title="{$index[index].index[contents].title}" /> + <span class="method-title">{$index[index].index[contents].name}</span> + {elseif ($index[index].index[contents].title == "Constant")} + <img src="{$subdir}media/images/{$index[index].index[contents].title}.png" alt="{$index[index].index[contents].title}" title="{$index[index].index[contents].title}" /> + <span class="const-title">{$index[index].index[contents].name}</span> + {elseif ($index[index].index[contents].title == "Page") || ($index[index].index[contents].title == "Include")} + <img src="{$subdir}media/images/{$index[index].index[contents].title}.png" alt="{$index[index].index[contents].title}" title="{$index[index].index[contents].title}" /> + <span class="include-title">{$index[index].index[contents].name}</span> + {elseif ($index[index].index[contents].title == "Class")} + <img src="{$subdir}media/images/{if $index[index].index[contents].abstract}Abstract{/if}{if $index[index].index[contents].access == 'private'}Private{/if}{$index[index].index[contents].title}.png" alt="{$index[index].index[contents].title}" title="{$index[index].index[contents].title}" /> + {$index[index].index[contents].name} + {else} + <img src="{$subdir}media/images/{$index[index].index[contents].title}.png" alt="{$index[index].index[contents].title}" title="{$index[index].index[contents].title}" /> + {$index[index].index[contents].name} + {/if} + </dt> + <dd class="index-item-body"> + <div class="index-item-details">{$index[index].index[contents].link} in {$index[index].index[contents].file_name}</div> + {if $index[index].index[contents].description} + <div class="index-item-description">{$index[index].index[contents].description}</div> + {/if} + </dd> + {/section} + </dl> +{/section} + +<div class="index-letter-menu"> +{section name=letter loop=$letters} + <a class="index-letter" href="{$indexname}.html#{$letters[letter].letter}">{$letters[letter].letter}</a> +{/section} +</div> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/blank.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/blank.tpl new file mode 100755 index 00000000..6a05f27e --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/blank.tpl @@ -0,0 +1,13 @@ +<html> +<head> + <title>{$maintitle}</title> + <link rel="stylesheet" href="{$subdir}media/stylesheet.css" /> + <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/> +</head> +<body> +<div align="center"><h1>{$maintitle}</h1></div> +<b>Welcome to {$package}!</b><br /> +<br /> +This documentation was generated by <a href="{$phpdocwebsite}">phpDocumentor v{$phpdocversion}</a><br /> +</body> +</html>
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/class.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/class.tpl new file mode 100755 index 00000000..1999d25d --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/class.tpl @@ -0,0 +1,444 @@ +{include file="header.tpl" top3=true} + +<h2 class="class-name"><img src="{$subdir}media/images/{if $abstract}{if $access == 'private'}AbstractPrivate{else}Abstract{/if}{else}{if $access == 'private'}Private{/if}{/if}Class_logo.png" + alt="{if $abstract}{if $access == 'private'}AbstractPrivate{else}Abstract{/if}{else}{if $access == 'private'}Private{/if}{/if} Class" + title="{if $abstract}{if $access == 'private'}AbstractPrivate{else}Abstract{/if}{else}{if $access == 'private'}Private{/if}{/if} Class" + style="vertical-align: middle">{if $is_interface}Interface{/if} {$class_name}</h2> + +<a name="sec-description"></a> +<div class="info-box"> + <div class="info-box-title">Description</div> + <div class="nav-bar"> + {if $children || $vars || $ivars || $methods || $imethods || $consts || $iconsts} + <span class="disabled">Description</span> | + {/if} + {if $children} + <a href="#sec-descendents">Descendents</a> + {if $vars || $ivars || $methods || $imethods || $consts || $iconsts}|{/if} + {/if} + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + {if $methods || $imethods}|{/if} + {/if} + {if $methods || $imethods} + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + {if $implements} + <p class="implements"> + Implements interfaces: + <ul> + {foreach item="int" from=$implements}<li>{$int}</li>{/foreach} + </ul> + </p> + {/if} + {include file="docblock.tpl" type="class" sdesc=$sdesc desc=$desc} + <p class="notes"> + Located in <a class="field" href="{$page_link}">{$source_location}</a> (line <span class="field">{if $class_slink}{$class_slink}{else}{$line_number}{/if}</span>) + </p> + + {if $tutorial} + <hr class="separator" /> + <div class="notes">Tutorial: <span class="tutorial">{$tutorial}</span></div> + {/if} + + <pre>{section name=tree loop=$class_tree.classes}{$class_tree.classes[tree]}{$class_tree.distance[tree]}{/section}</pre> + + {if $conflicts.conflict_type} + <hr class="separator" /> + <div><span class="warning">Conflicts with classes:</span><br /> + {section name=me loop=$conflicts.conflicts} + {$conflicts.conflicts[me]}<br /> + {/section} + </div> + {/if} + </div> +</div> + +{if $children} + <a name="sec-descendents"></a> + <div class="info-box"> + <div class="info-box-title">Direct descendents</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + <span class="disabled">Descendents</span> + {if $vars || $ivars || $methods || $imethods || $consts || $iconsts}|{/if} + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + {if $methods || $imethods}|{/if} + {/if} + {if $methods || $imethods} + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + <table cellpadding="2" cellspacing="0" class="class-table"> + <tr> + <th class="class-table-header">Class</th> + <th class="class-table-header">Description</th> + </tr> + {section name=kids loop=$children} + <tr> + <td style="padding-right: 2em; white-space: nowrap"> + <img src="{$subdir}media/images/{if $children[kids].abstract}Abstract{/if}{if $children[kids].access == 'private'}Private{/if}Class.png" + alt="{if $children[kids].abstract}Abstract{/if}{if $children[kids].access == 'private'}Private{/if} class" + title="{if $children[kids].abstract}Abstract{/if}{if $children[kids].access == 'private'}Private{/if} class" + style="vertical-align: center"/> + {$children[kids].link} + </td> + <td> + {if $children[kids].sdesc} + {$children[kids].sdesc} + {else} + {$children[kids].desc} + {/if} + </td> + </tr> + {/section} + </table> + </div> + </div> +{/if} + +{if $consts} + <a name="sec-const-summary"></a> + <div class="info-box"> + <div class="info-box-title">Class Constant Summary</span></div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendants</a> | + {/if} + <span class="disabled">Constants</span> (<a href="#sec-consts">details</a>) + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + | + {/if} + {if $methods || $imethods} + | + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + <div class="const-summary"> + {section name=consts loop=$consts} + <div class="const-title"> + <img src="{$subdir}media/images/Constant.png" alt=" " /> + <a href="#{$consts[consts].const_name}" title="details" class="const-name">{$consts[consts].const_name}</a> = <span class="var-type">{$consts[consts].const_value}</span> + + </div> + {/section} + </div> + </div> + </div> +{/if} + +{if $vars} + <a name="sec-var-summary"></a> + <div class="info-box"> + <div class="info-box-title">Variable Summary</span></div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendants</a> | + {/if} + <span class="disabled">Vars</span> (<a href="#sec-vars">details</a>) + {if $methods || $imethods} + | + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + <div class="var-summary"> + {section name=vars loop=$vars} + {if $vars[vars].static} + <div class="var-title"> + <img src="{$subdir}media/images/StaticVariable.png" alt=" " /> + static <span class="var-type">{$vars[vars].var_type}</span> + <a href="#{$vars[vars].var_name}" title="details" class="var-name">{$vars[vars].var_name}</a> + </div> + {/if} + {/section} + {section name=vars loop=$vars} + {if !$vars[vars].static} + <div class="var-title"> + <img src="{$subdir}media/images/{if $vars[vars].access == 'private'}PrivateVariable{else}Variable{/if}.png" alt=" " /> + <span class="var-type">{$vars[vars].var_type}</span> + <a href="#{$vars[vars].var_name}" title="details" class="var-name">{$vars[vars].var_name}</a> + </div> + {/if} + {/section} + </div> + </div> + </div> +{/if} + +{if $methods} + <a name="sec-method-summary"></a> + <div class="info-box"> + <div class="info-box-title">Method Summary</span></div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendants</a> | + {/if} + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + | + {/if} + <span class="disabled">Methods</span> (<a href="#sec-methods">details</a>) + </div> + <div class="info-box-body"> + <div class="method-summary"> + {section name=methods loop=$methods} + {if $methods[methods].static} + <div class="method-definition"> + <img src="{$subdir}media/images/StaticMethod.png" alt=" "/> + static {if $methods[methods].function_return} + <span class="method-result">{$methods[methods].function_return}</span> + {/if} + <a href="#{$methods[methods].function_name}" title="details" class="method-name">{if $methods[methods].ifunction_call.returnsref}&{/if}{$methods[methods].function_name}</a> + {if count($methods[methods].ifunction_call.params)} + ({section name=params loop=$methods[methods].ifunction_call.params}{if $smarty.section.params.iteration != 1}, {/if}{if $methods[methods].ifunction_call.params[params].hasdefault}[{/if}<span class="var-type">{$methods[methods].ifunction_call.params[params].type}</span> <span class="var-name">{$methods[methods].ifunction_call.params[params].name}</span>{if $methods[methods].ifunction_call.params[params].hasdefault} = <span class="var-default">{$methods[methods].ifunction_call.params[params].default}</span>]{/if}{/section}) + {else} + () + {/if} + </div> + {/if} + {/section} + {section name=methods loop=$methods} + {if !$methods[methods].static} + <div class="method-definition"> + <img src="{$subdir}media/images/{if $methods[methods].ifunction_call.constructor}Constructor{elseif $methods[methods].ifunction_call.destructor}Destructor{elseif $methods[methods].access == 'private'}{if $methods[methods].abstract}Abstract{/if}PrivateMethod{else}{if $methods[methods].abstract}Abstract{/if}Method{/if}.png" alt=" "/> + {if $methods[methods].function_return} + <span class="method-result">{$methods[methods].function_return}</span> + {/if} + <a href="#{$methods[methods].function_name}" title="details" class="method-name">{if $methods[methods].ifunction_call.returnsref}&{/if}{$methods[methods].function_name}</a> + {if count($methods[methods].ifunction_call.params)} + ({section name=params loop=$methods[methods].ifunction_call.params}{if $smarty.section.params.iteration != 1}, {/if}{if $methods[methods].ifunction_call.params[params].hasdefault}[{/if}<span class="var-type">{$methods[methods].ifunction_call.params[params].type}</span> <span class="var-name">{$methods[methods].ifunction_call.params[params].name}</span>{if $methods[methods].ifunction_call.params[params].hasdefault} = <span class="var-default">{$methods[methods].ifunction_call.params[params].default}</span>]{/if}{/section}) + {else} + () + {/if} + </div> + {/if} + {/section} + </div> + </div> + </div> +{/if} + +{if $vars || $ivars} + <a name="sec-vars"></a> + <div class="info-box"> + <div class="info-box-title">Variables</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendents</a> | + {/if} + {if $methods} + <a href="#sec-var-summary">Vars</a> (<span class="disabled">details</span>) + {else} + <span class="disabled">Vars</span> + {/if} + + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + {if $methods || $imethods} + | + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + {include file="var.tpl"} + {if $ivars} + <h4>Inherited Variables</h4> + <A NAME='inherited_vars'><!-- --></A> + {section name=ivars loop=$ivars} + <p>Inherited from <span class="classname">{$ivars[ivars].parent_class}</span></p> + <blockquote> + {section name=ivars2 loop=$ivars[ivars].ivars} + <img src="{$subdir}media/images/{if $ivars[ivars].ivars[ivars2].access == 'private'}PrivateVariable{else}Variable{/if}.png" /> + <span class="var-title"> + <span class="var-name">{$ivars[ivars].ivars[ivars2].link}</span>{if $ivars[ivars].ivars[ivars2].ivar_sdesc}: {$ivars[ivars].ivars[ivars2].ivar_sdesc}{/if}<br> + </span> + {/section} + </blockquote> + {/section} + {/if} + </div> + </div> +{/if} + +{if $methods || $imethods} + <a name="sec-methods"></a> + <div class="info-box"> + <div class="info-box-title">Methods</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendents</a> | + {/if} + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + {/if} + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + {if $methods} + <a href="#sec-method-summary">Methods</a> (<span class="disabled">details</span>) + {else} + <span class="disabled">Methods</span> + {/if} + </div> + <div class="info-box-body"> + {include file="method.tpl"} + {if $imethods} + <h4>Inherited Methods</h4> + <a name='inherited_methods'><!-- --></a> + {section name=imethods loop=$imethods} + <!-- =========== Summary =========== --> + <p>Inherited From <span class="classname">{$imethods[imethods].parent_class}</span></p> + <blockquote> + {section name=im2 loop=$imethods[imethods].imethods} + <img src="{$subdir}media/images/{if $imethods[imethods].imethods[im2].constructor}Constructor{elseif $imethods[imethods].imethods[im2].destructor}Destructor{elseif $imethods[imethods].imethods[im2].access == 'private'}{if $imethods[imethods].imethods[im2].abstract}Abstract{/if}PrivateMethod{else}{if $imethods[imethods].imethods[im2].abstract}Abstract{/if}Method{/if}.png" alt=" "/> + <span class="method-name">{$imethods[imethods].imethods[im2].link}</span>{if $imethods[imethods].imethods[im2].ifunction_sdesc}: {$imethods[imethods].imethods[im2].ifunction_sdesc}{/if}<br> + {/section} + </blockquote> + {/section} + {/if} + </div> + </div> +{/if} + +{if $consts || $iconsts} + <a name="sec-consts"></a> + <div class="info-box"> + <div class="info-box-title">Class Constants</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendants</a> | + {/if} + {if $methods} + <a href="#sec-var-summary">Constants</a> (<span class="disabled">details</span>) + {else} + <span class="disabled">Constants</span> + {/if} + + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + {/if} + {if $methods || $imethods} + | + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + {include file="const.tpl"} + {if $iconsts} + <h4>Inherited Constants</h4> + <A NAME='inherited_vars'><!-- --></A> + {section name=iconsts loop=$iconsts} + <p>Inherited from <span class="classname">{$iconsts[iconsts].parent_class}</span></p> + <blockquote> + {section name=iconsts2 loop=$iconsts[iconsts].iconsts} + <img src="{$subdir}media/images/{if $iconsts[iconsts].iconsts[iconsts2].access == 'private'}PrivateVariable{else}Variable{/if}.png" /> + <span class="const-title"> + <span class="const-name">{$iconsts[iconsts].iconsts[iconsts2].link}</span>{if $iconsts[iconsts].iconsts[iconsts2].iconst_sdesc}: {$iconsts[iconsts].iconsts[iconsts2].iconst_sdesc}{/if}<br> + </span> + {/section} + </blockquote> + {/section} + {/if} + </div> + </div> +{/if} + +{include file="footer.tpl" top3=true} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/classtrees.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/classtrees.tpl new file mode 100755 index 00000000..952e6d50 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/classtrees.tpl @@ -0,0 +1,19 @@ +{include file="header.tpl" top1=true} + +<!-- Start of Class Data --> +<H2> + {$smarty.capture.title} +</H2> +{if $interfaces} +{section name=classtrees loop=$interfaces} +<h2>Root interface {$interfaces[classtrees].class}</h2> +{$interfaces[classtrees].class_tree} +{/section} +{/if} +{if $classtrees} +{section name=classtrees loop=$classtrees} +<h2>Root class {$classtrees[classtrees].class}</h2> +{$classtrees[classtrees].class_tree} +{/section} +{/if} +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/const.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/const.tpl new file mode 100644 index 00000000..c26ff92d --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/const.tpl @@ -0,0 +1,18 @@ +{section name=consts loop=$consts} +<a name="const{$consts[consts].const_name}" id="{$consts[consts].const_name}"><!-- --></A> +<div class="{cycle values="evenrow,oddrow"}"> + + <div class="const-header"> + <img src="{$subdir}media/images/{if $consts[consts].access == 'private'}PrivateVariable{else}Variable{/if}.png" /> + <span class="const-title"> + <span class="const-name">{$consts[consts].const_name}</span> + = <span class="const-default">{$consts[consts].const_value|replace:"\n":"<br />"}</span> + (line <span class="line-number">{if $consts[consts].slink}{$consts[consts].slink}{else}{$consts[consts].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$consts[consts].sdesc desc=$consts[consts].desc tags=$consts[consts].tags} + +</div> +{/section} + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/define.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/define.tpl new file mode 100755 index 00000000..94078960 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/define.tpl @@ -0,0 +1,25 @@ +{section name=def loop=$defines} +<a name="{$defines[def].define_link}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div> + <img src="{$subdir}media/images/Constant.png" /> + <span class="const-title"> + <span class="const-name">{$defines[def].define_name}</span> = {$defines[def].define_value|replace:"\n":"<br />"} + (line <span class="line-number">{if $defines[def].slink}{$defines[def].slink}{else}{$defines[def].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$defines[def].sdesc desc=$defines[def].desc tags=$defines[def].tags} + + {if $globals[glob].global_conflicts.conflict_type} + <hr class="separator" /> + <div><span class="warning">Conflicts with constants:</span><br /> + {section name=me loop=$defines[def].define_conflicts.conflicts} + {$defines[def].define_conflicts.conflicts[me]}<br /> + {/section} + </div> + {/if} + +</div> +{/section}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/docblock.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/docblock.tpl new file mode 100755 index 00000000..783d5271 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/docblock.tpl @@ -0,0 +1,14 @@ +<!-- ========== Info from phpDoc block ========= --> +{if $sdesc} +<p class="short-description">{$sdesc}</p> +{/if} +{if $desc} +<p class="description">{$desc}</p> +{/if} +{if $tags} + <ul class="tags"> + {section name=tags loop=$tags} + <li><span class="field">{$tags[tags].keyword}:</span> {$tags[tags].data}</li> + {/section} + </ul> +{/if} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/elementindex.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/elementindex.tpl new file mode 100755 index 00000000..d5964f99 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/elementindex.tpl @@ -0,0 +1,12 @@ +{include file="header.tpl" noleftindex=true} +<a name="top"></a> +<h2>Full index</h2> +<h3>Package indexes</h3> +<ul> +{section name=p loop=$packageindex} + <li><a href="elementindex_{$packageindex[p].title}.html">{$packageindex[p].title}</a></li> +{/section} +</ul> +<br /> +{include file="basicindex.tpl" indexname="elementindex"} +{include file="footer.tpl"} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/errors.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/errors.tpl new file mode 100755 index 00000000..0f526584 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/errors.tpl @@ -0,0 +1,21 @@ +{include file="header.tpl" noleftindex=true} +{section name=files loop=$files} +<a href="#{$files[files].file}">{$files[files].file}</a><br> +{/section} +{foreach key=file item=issues from=$all} +<a name="{$file}"></a> +<h1>{$file}</h1> +{if count($issues.warnings)} +<h2>Warnings:</h2><br> +{section name=warnings loop=$issues.warnings} +<b>{$issues.warnings[warnings].name}</b> - {$issues.warnings[warnings].listing}<br> +{/section} +{/if} +{if count($issues.errors)} +<h2>Errors:</h2><br> +{section name=errors loop=$issues.errors} +<b>{$issues.errors[errors].name}</b> - {$issues.errors[errors].listing}<br> +{/section} +{/if} +{/foreach} +{include file="footer.tpl"} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/examplesource.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/examplesource.tpl new file mode 100755 index 00000000..8abf74ce --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/examplesource.tpl @@ -0,0 +1,6 @@ +{include file="header.tpl" title=$title} +<h1>{$title}</h1> +<div class="listing"> +{$source} +</div> +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/filesource.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/filesource.tpl new file mode 100755 index 00000000..239f7b41 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/filesource.tpl @@ -0,0 +1,8 @@ +{capture name="tutle"}File Source for {$name}{/capture} +{include file="header.tpl" title=$smarty.capture.tutle} +<h1>Source for file {$name}</h1> +<p>Documentation is available at {$docs}</p> +<div class="src-code"> +{$source} +</div> +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/footer.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/footer.tpl new file mode 100755 index 00000000..8d0f79db --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/footer.tpl @@ -0,0 +1,8 @@ +{if !$index} + <p class="notes" id="credit"> + Documentation generated on {$date} by <a href="{$phpdocwebsite}" target="_blank">phpDocumentor {$phpdocversion}</a> + </p> +{/if} + {if $top3}</div>{/if} +</body> +</html> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/function.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/function.tpl new file mode 100755 index 00000000..e62a98ae --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/function.tpl @@ -0,0 +1,44 @@ +{section name=func loop=$functions} +<a name="{$functions[func].function_dest}" id="{$functions[func].function_dest}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div> + <img src="{$subdir}media/images/Function.png" /> + <span class="method-title">{$functions[func].function_name}</span> (line <span class="line-number">{if $functions[func].slink}{$functions[func].slink}{else}{$functions[func].line_number}{/if}</span>) + </div> + + {include file="docblock.tpl" sdesc=$functions[func].sdesc desc=$functions[func].desc tags=$functions[func].tags params=$functions[func].params function=false} + <div class="method-signature"> + <span class="method-result">{$functions[func].function_return}</span> + <span class="method-name"> + {if $functions[func].ifunction_call.returnsref}&{/if}{$functions[func].function_name} + </span> + {if count($functions[func].ifunction_call.params)} + ({section name=params loop=$functions[func].ifunction_call.params}{if $smarty.section.params.iteration != 1}, {/if}{if $functions[func].ifunction_call.params[params].hasdefault}[{/if}<span class="var-type">{$functions[func].ifunction_call.params[params].type}</span> <span class="var-name">{$functions[func].ifunction_call.params[params].name}</span>{if $functions[func].ifunction_call.params[params].hasdefault} = <span class="var-default">{$functions[func].ifunction_call.params[params].default|escape:"html"}</span>]{/if}{/section}) + {else} + () + {/if} + </div> + + {if $functions[func].params} + <ul class="parameters"> + {section name=params loop=$functions[func].params} + <li> + <span class="var-type">{$functions[func].params[params].datatype}</span> + <span class="var-name">{$functions[func].params[params].var}</span>{if $functions[func].params[params].data}<span class="var-description">: {$functions[func].params[params].data}</span>{/if} + </li> + {/section} + </ul> + {/if} + + {if $functions[func].function_conflicts.conflict_type} + <hr class="separator" /> + <div><span class="warning">Conflicts with functions:</span><br /> + {section name=me loop=$functions[func].function_conflicts.conflicts} + {$functions[func].function_conflicts.conflicts[me]}<br /> + {/section} + </div> + {/if} + +</div> +{/section} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/global.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/global.tpl new file mode 100755 index 00000000..d37bda37 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/global.tpl @@ -0,0 +1,27 @@ +{section name=glob loop=$globals} +<a name="{$globals[glob].global_link}" id="{$globals[glob].global_link}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div> + <img src="{$subdir}media/images/Global.png" /> + <span class="var-title"> + <span class="var-type">{$globals[glob].global_type}</span> + <span class="var-name">{$globals[glob].global_name}</span> + {if $vars[vars].var_default} = <span class="var-default">{$globals[glob].global_value|replace:"\n":"<br />"}</span>{/if} + (line <span class="line-number">{if $globals[glob].slink}{$globals[glob].slink}{else}{$globals[glob].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$globals[glob].sdesc desc=$globals[glob].desc tags=$globals[glob].tags} + + {if $globals[glob].global_conflicts.conflict_type} + <hr class="separator" /> + <div><span class="warning">Conflicts with global variables:</span><br /> + {section name=me loop=$globals[glob].global_conflicts.conflicts} + {$globals[glob].global_conflicts.conflicts[me]}<br /> + {/section} + </div> + {/if} + +</div> +{/section}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/header.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/header.tpl new file mode 100755 index 00000000..0d626190 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/header.tpl @@ -0,0 +1,95 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> + <html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <!-- template designed by Marco Von Ballmoos --> + <title>{$title}</title> + <link rel="stylesheet" href="{$subdir}media/stylesheet.css" /> + {if $top2 || $top3} + <script src="{$subdir}media/lib/classTree.js"></script> + {/if} + {if $top2} + <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/> + {/if} + {if $top3 || $top2} + <script language="javascript" type="text/javascript"> + var imgPlus = new Image(); + var imgMinus = new Image(); + imgPlus.src = "{$subdir}media/images/plus.png"; + imgMinus.src = "{$subdir}media/images/minus.png"; + + function showNode(Node){ldelim} + switch(navigator.family){ldelim} + case 'nn4': + // Nav 4.x code fork... + var oTable = document.layers["span" + Node]; + var oImg = document.layers["img" + Node]; + break; + case 'ie4': + // IE 4/5 code fork... + var oTable = document.all["span" + Node]; + var oImg = document.all["img" + Node]; + break; + case 'gecko': + // Standards Compliant code fork... + var oTable = document.getElementById("span" + Node); + var oImg = document.getElementById("img" + Node); + break; + {rdelim} + oImg.src = imgMinus.src; + oTable.style.display = "block"; + {rdelim} + + function hideNode(Node){ldelim} + switch(navigator.family){ldelim} + case 'nn4': + // Nav 4.x code fork... + var oTable = document.layers["span" + Node]; + var oImg = document.layers["img" + Node]; + break; + case 'ie4': + // IE 4/5 code fork... + var oTable = document.all["span" + Node]; + var oImg = document.all["img" + Node]; + break; + case 'gecko': + // Standards Compliant code fork... + var oTable = document.getElementById("span" + Node); + var oImg = document.getElementById("img" + Node); + break; + {rdelim} + oImg.src = imgPlus.src; + oTable.style.display = "none"; + {rdelim} + + function nodeIsVisible(Node){ldelim} + switch(navigator.family){ldelim} + case 'nn4': + // Nav 4.x code fork... + var oTable = document.layers["span" + Node]; + break; + case 'ie4': + // IE 4/5 code fork... + var oTable = document.all["span" + Node]; + break; + case 'gecko': + // Standards Compliant code fork... + var oTable = document.getElementById("span" + Node); + break; + {rdelim} + return (oTable && oTable.style.display == "block"); + {rdelim} + + function toggleNodeVisibility(Node){ldelim} + if (nodeIsVisible(Node)){ldelim} + hideNode(Node); + {rdelim}else{ldelim} + showNode(Node); + {rdelim} + {rdelim} + </script> + {/if} + </head> + <body> + {if $top3}<div class="page-body">{/if} + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/include.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/include.tpl new file mode 100755 index 00000000..f264afd3 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/include.tpl @@ -0,0 +1,17 @@ +{section name=includes loop=$includes} +<a name="{$includes[includes].include_file}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div> + <img src="{$subdir}media/images/Page.png" alt=" " /> + <span class="include-title"> + <span class="include-type">{$includes[includes].include_name}</span> + (<span class="include-name">{$includes[includes].include_value}</span>) + (line <span class="line-number">{if $includes[includes].slink}{$includes[includes].slink}{else}{$includes[includes].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$includes[includes].sdesc desc=$includes[includes].desc tags=$includes[includes].tags} + +</div> +{/section}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/index.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/index.tpl new file mode 100755 index 00000000..7cd61094 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/index.tpl @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE html + PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//FR" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"> + <html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <!-- Generated by phpDocumentor on {$date} --> + <title>{$title}</title> + <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/> +</head> + +<FRAMESET rows='120,*'> + <FRAME src='packages.html' name='left_top' frameborder="1" bordercolor="#999999"> + <FRAMESET cols='25%,*'> + <FRAME src='{$start}' name='left_bottom' frameborder="1" bordercolor="#999999"> + <FRAME src='{$blank}.html' name='right' frameborder="1" bordercolor="#999999"> + </FRAMESET> + <NOFRAMES> + <H2>Frame Alert</H2> + <P>This document is designed to be viewed using the frames feature. + If you see this message, you are using a non-frame-capable web client.</P> + </NOFRAMES> +</FRAMESET> +</HTML> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/left_frame.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/left_frame.tpl new file mode 100755 index 00000000..a38cb29f --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/left_frame.tpl @@ -0,0 +1,250 @@ +{include file="header.tpl" top2=true} +<h3 class="package-title">{$info.0.package}</h3> +<div class="tree"> +<script language="Javascript"> +if (document.getElementById) {ldelim} +{section name=p loop=$info} + {if $info[p].subpackage == ""} + var tree = new WebFXTree('<span class="package">{$info.0.package}</span>'); + tree.setBehavior('classic'); + tree.openIcon = 'media/images/package.png'; + tree.icon = 'media/images/package.png'; + + {if $hastodos} + var todos = new WebFXTreeItem('To-do List', '{$todolink}'); + todos.openIcon = 'media/images/Index.png'; + todos.icon = 'media/images/Index.png'; + tree.add(todos); + {/if} + + var class_trees = new WebFXTreeItem('Class trees', '{$classtreepage}.html'); + class_trees.openIcon = 'media/images/Index.png'; + class_trees.icon = 'media/images/Index.png'; + tree.add(class_trees); + + var elements = new WebFXTreeItem('Index of elements', '{$elementindex}.html'); + elements.openIcon = 'media/images/Index.png'; + elements.icon = 'media/images/Index.png'; + tree.add(elements); + + var parent_node; + + {if $info[p].tutorials} + var tree_tutorial = new WebFXTreeItem('Tutorial(s)/Manual(s)', ''); + tree_tutorial.openIcon = 'media/images/tutorial_folder.png'; + tree_tutorial.icon = 'media/images/tutorial_folder.png'; + tree.add(tree_tutorial); + + {if $info[p].tutorials.pkg} + var tree_inner_tutorial = new WebFXTreeItem('Package-level', ''); + tree_inner_tutorial.openIcon = 'media/images/package_folder.png'; + tree_inner_tutorial.icon = 'media/images/package_folder.png'; + tree_tutorial.add(tree_inner_tutorial); + + parent_node = tree_inner_tutorial; + {section name=ext loop=$info[p].tutorials.pkg} + {$info[p].tutorials.pkg[ext]} + {/section} + {/if} + + {if $info[p].tutorials.cls} + var tree_inner_tutorial = new WebFXTreeItem('Class-level', ''); + tree_inner_tutorial.openIcon = 'media/images/class_folder.png'; + tree_inner_tutorial.icon = 'media/images/class_folder.png'; + tree_tutorial.add(tree_inner_tutorial); + + parent_node = tree_inner_tutorial; + {section name=ext loop=$info[p].tutorials.cls} + {$info[p].tutorials.cls[ext]} + {/section} + {/if} + + {if $info[p].tutorials.proc} + var tree_inner_tutorial = new WebFXTreeItem('Function-level', ''); + tree_inner_tutorial.openIcon = 'media/images/function_folder.png'; + tree_inner_tutorial.icon = 'media/images/function_folder.png'; + tree_tutorial.add(tree_inner_tutorial); + + parent_node = tree_inner_tutorial; + {section name=ext loop=$info[p].tutorials.proc} + {$info[p].tutorials.proc[ext]} + {/section} + {/if} + {/if} + + {if $info[p].hasinterfaces} + var tree_classe = new WebFXTreeItem('Interface(s)', '{$packagedoc|escape:"quotes"}'); + tree_classe.openIcon = 'media/images/class_folder.png'; + tree_classe.icon = 'media/images/class_folder.png'; + + {section name=class loop=$info[p].classes} + {if $info[p].classes[class].is_interface} + var classe = new WebFXTreeItem('{$info[p].classes[class].title|escape:"quotes"}', '{$info[p].classes[class].link|escape:"quotes"}'); + classe.openIcon = 'media/images/Interface.png'; + classe.icon = 'media/images/Interface.png'; + tree_classe.add(classe); + {/if} + {/section} + + tree.add(tree_classe); + {/if} + + {if $info[p].hasclasses} + var tree_classe = new WebFXTreeItem('Class(es)', '{$packagedoc|escape:"quotes"}'); + tree_classe.openIcon = 'media/images/class_folder.png'; + tree_classe.icon = 'media/images/class_folder.png'; + + {section name=class loop=$info[p].classes} + {if $info[p].classes[class].is_class} + var classe = new WebFXTreeItem('{$info[p].classes[class].title|escape:"quotes"}', '{$info[p].classes[class].link|escape:"quotes"}'); + classe.openIcon = 'media/images/{if $info[p].classes[class].abstract}Abstract{/if}{if $info[p].classes[class].access == 'private'}Private{/if}Class.png'; + classe.icon = 'media/images/{if $info[p].classes[class].abstract}Abstract{/if}{if $info[p].classes[class].access == 'private'}Private{/if}Class.png'; + tree_classe.add(classe); + {/if} + {/section} + + tree.add(tree_classe); + {/if} + + {if $info[p].functions} + var tree_function = new WebFXTreeItem('Function(s)', '{$packagedoc|escape:"quotes"}'); + tree_function.openIcon = 'media/images/function_folder.png'; + tree_function.icon = 'media/images/function_folder.png'; + + {section name=nonclass loop=$info[p].functions} + var fic = new WebFXTreeItem('{$info[p].functions[nonclass].title|escape:"quotes"}', '{$info[p].functions[nonclass].link|escape:"quotes"}'); + fic.openIcon = 'media/images/Function.png'; + fic.icon = 'media/images/Function.png'; + tree_function.add(fic); + {/section} + + tree.add(tree_function); + {/if} + + {if $info[p].files} + var tree_file = new WebFXTreeItem('File(s)', '{$packagedoc|escape:"quotes"}'); + tree_file.openIcon = 'media/images/folder.png'; + tree_file.icon = 'media/images/folder.png'; + + {section name=nonclass loop=$info[p].files} + var file = new WebFXTreeItem('{$info[p].files[nonclass].title|escape:"quotes"}', '{$info[p].files[nonclass].link|escape:"quotes"}'); + file.openIcon = 'media/images/Page.png'; + file.icon = 'media/images/Page.png'; + tree_file.add(file); + {/section} + + tree.add(tree_file); + {/if} + + {else} + {if $info[p].subpackagetutorial} + var subpackagetree = new WebFXTreeItem('<span class="sub-package">{$info[p].subpackagetutorialtitle|strip_tags|escape:"quotes"}</span>', '{$info[p].subpackagetutorialnoa}'); + {else} + var subpackagetree = new WebFXTreeItem('<span class="sub-package">{$info[p].subpackage}</span>', '{$packagedoc|escape:"quotes"}'); + {/if} + + subpackagetree.openIcon = 'media/images/package.png'; + subpackagetree.icon = 'media/images/package.png'; + + {if $info[p].tutorials} + var tree_tutorial = new WebFXTreeItem('Tutorial(s)/Manual(s)', ''); + tree_tutorial.openIcon = 'media/images/tutorial_folder.png'; + tree_tutorial.icon = 'media/images/tutorial_folder.png'; + tree.add(tree_tutorial); + + {if $info[p].tutorials.pkg} + var tree_inner_tutorial = new WebFXTreeItem('Package-level', ''); + tree_inner_tutorial.openIcon = 'media/images/package_folder.png'; + tree_inner_tutorial.icon = 'media/images/package_folder.png'; + tree_tutorial.add(tree_inner_tutorial); + + parent_node = tree_inner_tutorial; + {section name=ext loop=$info[p].tutorials.pkg} + {$info[p].tutorials.pkg[ext]} + {/section} + {/if} + + {if $info[p].tutorials.cls} + var tree_inner_tutorial = new WebFXTreeItem('Class-level', ''); + tree_inner_tutorial.openIcon = 'media/images/class_folder.png'; + tree_inner_tutorial.icon = 'media/images/class_folder.png'; + tree_tutorial.add(tree_inner_tutorial); + + parent_node = tree_inner_tutorial; + {section name=ext loop=$info[p].tutorials.cls} + {$info[p].tutorials.cls[ext]} + {/section} + {/if} + + {if $info[p].tutorials.proc} + var tree_inner_tutorial = new WebFXTreeItem('Function-level', ''); + tree_inner_tutorial.openIcon = 'media/images/function_folder.png'; + tree_inner_tutorial.icon = 'media/images/function_folder.png'; + tree_tutorial.add(tree_inner_tutorial); + + parent_node = tree_inner_tutorial; + {section name=ext loop=$info[p].tutorials.proc} + {$info[p].tutorials.proc[ext]} + {/section} + {/if} + {/if} + + {if $info[p].classes} + var subpackagetree_classe = new WebFXTreeItem('Class(es)', '{$packagedoc|escape:"quotes"}'); + subpackagetree_classe.openIcon = 'media/images/class_folder.png'; + subpackagetree_classe.icon = 'media/images/class_folder.png'; + + {section name=class loop=$info[p].classes} + var classe = new WebFXTreeItem('{$info[p].classes[class].title|escape:"quotes"}', '{$info[p].classes[class].link|escape:"quotes"}'); + classe.openIcon = 'media/images/{if $info[p].classes[class].abstract}Abstract{/if}{if $info[p].classes[class].access == 'private'}Private{/if}Class.png'; + classe.icon = 'media/images/{if $info[p].classes[class].abstract}Abstract{/if}{if $info[p].classes[class].access == 'private'}Private{/if}Class.png'; + subpackagetree_classe.add(classe); + {/section} + + subpackagetree.add(subpackagetree_classe); + {/if} + + {if $info[p].functions} + var subpackagetree_function = new WebFXTreeItem('Function(s)', '{$packagedoc|escape:"quotes"}'); + subpackagetree_function.openIcon = 'media/images/function_folder.png'; + subpackagetree_function.icon = 'media/images/function_folder.png'; + + {section name=nonclass loop=$info[p].functions} + var fic = new WebFXTreeItem('{$info[p].functions[nonclass].title|escape:"quotes"}', '{$info[p].functions[nonclass].link|escape:"quotes"}'); + fic.openIcon = 'media/images/Function.png'; + fic.icon = 'media/images/Function.png'; + subpackagetree_function.add(fic); + {/section} + + subpackagetree.add(subpackagetree_function); + {/if} + + {if $info[p].files} + var subpackagetree_file = new WebFXTreeItem('File(s)', '{$packagedoc|escape:"quotes"}'); + subpackagetree_file.openIcon = 'media/images/folder.png'; + subpackagetree_file.icon = 'media/images/folder.png'; + + {section name=nonclass loop=$info[p].files} + var file = new WebFXTreeItem('{$info[p].files[nonclass].title|escape:"quotes"}', '{$info[p].files[nonclass].link|escape:"quotes"}'); + file.openIcon = 'media/images/Page.png'; + file.icon = 'media/images/Page.png'; + subpackagetree_file.add(file); + {/section} + + subpackagetree.add(subpackagetree_file); + {/if} + + tree.add(subpackagetree); + {/if} +{/section} + +document.write(tree); +{rdelim} +</script> +</div> +<p class="notes"> + Generated by + <a href="{$phpdocwebsite}" target="_blank">phpDocumentor <span class="field">{$phpdocversion}</span></a> +</p> +</body> +</html> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/banner.css b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/banner.css new file mode 100755 index 00000000..19a383c3 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/banner.css @@ -0,0 +1,32 @@ +body +{ + background-color: #EEEEEE; + margin: 0px; + padding: 0px; +} + +/* Banner (top bar) classes */ + +.banner { } + +.banner-menu +{ + clear: both; + padding: .5em; + border-top: 2px solid #AAAAAA; +} + +.banner-title +{ + text-align: right; + font-size: 20pt; + font-weight: bold; + margin: .2em; +} + +.package-selector +{ + background-color: #DDDDDD; + border: 1px solid #AAAAAA; + color: #000090; +} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/AbstractClass.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/AbstractClass.png Binary files differnew file mode 100644 index 00000000..afa9d1d9 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/AbstractClass.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/AbstractClass_logo.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/AbstractClass_logo.png Binary files differnew file mode 100644 index 00000000..8f65c390 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/AbstractClass_logo.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/AbstractMethod.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/AbstractMethod.png Binary files differnew file mode 100644 index 00000000..605ccbe5 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/AbstractMethod.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/AbstractPrivateClass.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/AbstractPrivateClass.png Binary files differnew file mode 100644 index 00000000..53d76c63 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/AbstractPrivateClass.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/AbstractPrivateClass_logo.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/AbstractPrivateClass_logo.png Binary files differnew file mode 100644 index 00000000..4e68f570 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/AbstractPrivateClass_logo.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/AbstractPrivateMethod.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/AbstractPrivateMethod.png Binary files differnew file mode 100644 index 00000000..41cc9f02 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/AbstractPrivateMethod.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Class.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Class.png Binary files differnew file mode 100755 index 00000000..cf548d27 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Class.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Class_logo.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Class_logo.png Binary files differnew file mode 100644 index 00000000..6f223c47 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Class_logo.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Constant.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Constant.png Binary files differnew file mode 100755 index 00000000..a9c6f28b --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Constant.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Constructor.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Constructor.png Binary files differnew file mode 100755 index 00000000..3f16222b --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Constructor.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Destructor.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Destructor.png Binary files differnew file mode 100755 index 00000000..f28528f0 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Destructor.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Function.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Function.png Binary files differnew file mode 100755 index 00000000..902fe258 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Function.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Global.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Global.png Binary files differnew file mode 100755 index 00000000..7281bd2a --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Global.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/I.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/I.png Binary files differnew file mode 100755 index 00000000..e8512fb9 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/I.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Index.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Index.png Binary files differnew file mode 100755 index 00000000..6558ec39 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Index.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Interface.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Interface.png Binary files differnew file mode 100644 index 00000000..e6cd51ed --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Interface.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Interface_logo.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Interface_logo.png Binary files differnew file mode 100644 index 00000000..6f223c47 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Interface_logo.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/L.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/L.png Binary files differnew file mode 100755 index 00000000..eb334eda --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/L.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Lminus.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Lminus.png Binary files differnew file mode 100755 index 00000000..f7c43c0a --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Lminus.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Lplus.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Lplus.png Binary files differnew file mode 100755 index 00000000..848ec2fc --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Lplus.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Method.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Method.png Binary files differnew file mode 100755 index 00000000..9b215784 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Method.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Page.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Page.png Binary files differnew file mode 100755 index 00000000..ffe7986e --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Page.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Page_logo.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Page_logo.png Binary files differnew file mode 100644 index 00000000..44ce0b3c --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Page_logo.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/PrivateClass.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/PrivateClass.png Binary files differnew file mode 100755 index 00000000..470e6d56 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/PrivateClass.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/PrivateClass_logo.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/PrivateClass_logo.png Binary files differnew file mode 100644 index 00000000..590e0064 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/PrivateClass_logo.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/PrivateMethod.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/PrivateMethod.png Binary files differnew file mode 100755 index 00000000..d01f2b31 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/PrivateMethod.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/PrivateVariable.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/PrivateVariable.png Binary files differnew file mode 100755 index 00000000..d76b21d4 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/PrivateVariable.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/StaticMethod.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/StaticMethod.png Binary files differnew file mode 100755 index 00000000..9b215784 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/StaticMethod.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/StaticVariable.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/StaticVariable.png Binary files differnew file mode 100755 index 00000000..8e820193 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/StaticVariable.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/T.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/T.png Binary files differnew file mode 100755 index 00000000..30173254 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/T.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Tminus.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Tminus.png Binary files differnew file mode 100755 index 00000000..2260e424 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Tminus.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Tplus.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Tplus.png Binary files differnew file mode 100755 index 00000000..2c8d8f4f --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Tplus.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Variable.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Variable.png Binary files differnew file mode 100755 index 00000000..8e820193 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Variable.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/blank.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/blank.png Binary files differnew file mode 100755 index 00000000..cee9cd37 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/blank.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/class_folder.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/class_folder.png Binary files differnew file mode 100755 index 00000000..84e9587a --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/class_folder.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/empty.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/empty.png Binary files differnew file mode 100755 index 00000000..d5683865 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/empty.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/file.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/file.png Binary files differnew file mode 100755 index 00000000..0bb2427f --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/file.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/folder.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/folder.png Binary files differnew file mode 100755 index 00000000..a2d79f8d --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/folder.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/function_folder.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/function_folder.png Binary files differnew file mode 100755 index 00000000..8b3d6e3b --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/function_folder.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/minus.gif b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/minus.gif Binary files differnew file mode 100644 index 00000000..f502662b --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/minus.gif diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/next_button.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/next_button.png Binary files differnew file mode 100755 index 00000000..cdbc615d --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/next_button.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/next_button_disabled.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/next_button_disabled.png Binary files differnew file mode 100755 index 00000000..4a11780f --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/next_button_disabled.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/package.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/package.png Binary files differnew file mode 100755 index 00000000..b04cf566 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/package.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/package_folder.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/package_folder.png Binary files differnew file mode 100755 index 00000000..6162bafd --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/package_folder.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/plus.gif b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/plus.gif Binary files differnew file mode 100644 index 00000000..eeca02ce --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/plus.gif diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/previous_button.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/previous_button.png Binary files differnew file mode 100755 index 00000000..327fdbc2 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/previous_button.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/previous_button_disabled.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/previous_button_disabled.png Binary files differnew file mode 100755 index 00000000..c02ff64b --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/previous_button_disabled.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/private_class_logo.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/private_class_logo.png Binary files differnew file mode 100644 index 00000000..590e0064 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/private_class_logo.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/tutorial.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/tutorial.png Binary files differnew file mode 100755 index 00000000..bc197375 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/tutorial.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/tutorial_folder.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/tutorial_folder.png Binary files differnew file mode 100755 index 00000000..2a468b2a --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/tutorial_folder.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/up_button.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/up_button.png Binary files differnew file mode 100755 index 00000000..ff36c593 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/up_button.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/lib/classTree.js b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/lib/classTree.js new file mode 100755 index 00000000..ebb3fb4a --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/lib/classTree.js @@ -0,0 +1,454 @@ +/*----------------------------------------\ +| Cross Browser Tree Widget 1.1 | +|-----------------------------------------| +| Created by Emil A. Eklund (eae@eae.net) | +| For WebFX (http://webfx.eae.net/) | +|-----------------------------------------| +| This script is provided as is without | +| any warranty whatsoever. It may be used | +| free of charge for non commerical sites | +| For commerical use contact the author | +| of this script for further details. | +|-----------------------------------------| +| Created 2000-12-11 | Updated 2001-09-06 | +\----------------------------------------*/ + +var webFXTreeConfig = { + rootIcon : 'media/images/empty.png', + openRootIcon : 'media/images/empty.png', + folderIcon : 'media/images/empty.png', + openFolderIcon : 'media/images/empty.png', + fileIcon : 'media/images/empty.png', + iIcon : 'media/images/I.png', + lIcon : 'media/images/L.png', + lMinusIcon : 'media/images/Lminus.png', + lPlusIcon : 'media/images/Lplus.png', + tIcon : 'media/images/T.png', + tMinusIcon : 'media/images/Tminus.png', + tPlusIcon : 'media/images/Tplus.png', + blankIcon : 'media/images/blank.png', + defaultText : 'Tree Item', + defaultAction : 'javascript:void(0);', + defaultTarget : 'right', + defaultBehavior : 'classic' +}; + +var webFXTreeHandler = { + idCounter : 0, + idPrefix : "webfx-tree-object-", + all : {}, + behavior : null, + selected : null, + getId : function() { return this.idPrefix + this.idCounter++; }, + toggle : function (oItem) { this.all[oItem.id.replace('-plus','')].toggle(); }, + select : function (oItem) { this.all[oItem.id.replace('-icon','')].select(); }, + focus : function (oItem) { this.all[oItem.id.replace('-anchor','')].focus(); }, + blur : function (oItem) { this.all[oItem.id.replace('-anchor','')].blur(); }, + keydown : function (oItem) { return this.all[oItem.id].keydown(window.event.keyCode); }, + cookies : new WebFXCookie() +}; + +/* + * WebFXCookie class + */ + +function WebFXCookie() { + if (document.cookie.length) { this.cookies = ' ' + document.cookie; } +} + +WebFXCookie.prototype.setCookie = function (key, value) { + document.cookie = key + "=" + escape(value); +} + +WebFXCookie.prototype.getCookie = function (key) { + if (this.cookies) { + var start = this.cookies.indexOf(' ' + key + '='); + if (start == -1) { return null; } + var end = this.cookies.indexOf(";", start); + if (end == -1) { end = this.cookies.length; } + end -= start; + var cookie = this.cookies.substr(start,end); + return unescape(cookie.substr(cookie.indexOf('=') + 1, cookie.length - cookie.indexOf('=') + 1)); + } + else { return null; } +} + +/* + * WebFXTreeAbstractNode class + */ + +function WebFXTreeAbstractNode(sText, sAction, sTarget) { + this.childNodes = []; + this.id = webFXTreeHandler.getId(); + this.text = sText || webFXTreeConfig.defaultText; + this.action = sAction || webFXTreeConfig.defaultAction; + this.targetWindow = sTarget || webFXTreeConfig.defaultTarget; + this._last = false; + webFXTreeHandler.all[this.id] = this; +} + +WebFXTreeAbstractNode.prototype.add = function (node) { + node.parentNode = this; + this.childNodes[this.childNodes.length] = node; + var root = this; + if (this.childNodes.length >=2) { + this.childNodes[this.childNodes.length -2]._last = false; + } + while (root.parentNode) { root = root.parentNode; } + if (root.rendered) { + if (this.childNodes.length >= 2) { + document.getElementById(this.childNodes[this.childNodes.length -2].id + '-plus').src = ((this.childNodes[this.childNodes.length -2].folder)?webFXTreeConfig.tMinusIcon:webFXTreeConfig.tIcon); + if (this.childNodes[this.childNodes.length -2].folder) { + this.childNodes[this.childNodes.length -2].plusIcon = webFXTreeConfig.tPlusIcon; + this.childNodes[this.childNodes.length -2].minusIcon = webFXTreeConfig.tMinusIcon; + } + this.childNodes[this.childNodes.length -2]._last = false; + } + this._last = true; + var foo = this; + while (foo.parentNode) { + for (var i = 0; i < foo.parentNode.childNodes.length; i++) { + if (foo.id == foo.parentNode.childNodes[i].id) { break; } + } + if (++i == foo.parentNode.childNodes.length) { foo.parentNode._last = true; } + else { foo.parentNode._last = false; } + foo = foo.parentNode; + } + document.getElementById(this.id + '-cont').insertAdjacentHTML("beforeEnd", node.toString()); + if ((!this.folder) && (!this.openIcon)) { + this.icon = webFXTreeConfig.folderIcon; + this.openIcon = webFXTreeConfig.openFolderIcon; + } + this.folder = true; + this.indent(); + this.expand(); + } + return node; +} + +WebFXTreeAbstractNode.prototype.toggle = function() { + if (this.folder) { + if (this.open) { this.collapse(); } + else { this.expand(); } + } +} + +WebFXTreeAbstractNode.prototype.select = function() { + document.getElementById(this.id + '-anchor').focus(); +} + +WebFXTreeAbstractNode.prototype.focus = function() { + webFXTreeHandler.selected = this; + if ((this.openIcon) && (webFXTreeHandler.behavior != 'classic')) { document.getElementById(this.id + '-icon').src = this.openIcon; } + document.getElementById(this.id + '-anchor').style.backgroundColor = 'highlight'; + document.getElementById(this.id + '-anchor').style.color = 'highlighttext'; + document.getElementById(this.id + '-anchor').focus(); +} + +WebFXTreeAbstractNode.prototype.blur = function() { + if ((this.openIcon) && (webFXTreeHandler.behavior != 'classic')) { document.getElementById(this.id + '-icon').src = this.icon; } + document.getElementById(this.id + '-anchor').style.backgroundColor = 'transparent'; + document.getElementById(this.id + '-anchor').style.color = 'menutext'; +} + +WebFXTreeAbstractNode.prototype.doExpand = function() { + if (webFXTreeHandler.behavior == 'classic') { document.getElementById(this.id + '-icon').src = this.openIcon; } + if (this.childNodes.length) { document.getElementById(this.id + '-cont').style.display = 'block'; } + this.open = true; + webFXTreeHandler.cookies.setCookie(this.id.substr(18,this.id.length - 18), '1'); +} + +WebFXTreeAbstractNode.prototype.doCollapse = function() { + if (webFXTreeHandler.behavior == 'classic') { document.getElementById(this.id + '-icon').src = this.icon; } + if (this.childNodes.length) { document.getElementById(this.id + '-cont').style.display = 'none'; } + this.open = false; + webFXTreeHandler.cookies.setCookie(this.id.substr(18,this.id.length - 18), '0'); +} + +WebFXTreeAbstractNode.prototype.expandAll = function() { + this.expandChildren(); + if ((this.folder) && (!this.open)) { this.expand(); } +} + +WebFXTreeAbstractNode.prototype.expandChildren = function() { + for (var i = 0; i < this.childNodes.length; i++) { + this.childNodes[i].expandAll(); +} } + +WebFXTreeAbstractNode.prototype.collapseAll = function() { + if ((this.folder) && (this.open)) { this.collapse(); } + this.collapseChildren(); +} + +WebFXTreeAbstractNode.prototype.collapseChildren = function() { + for (var i = 0; i < this.childNodes.length; i++) { + this.childNodes[i].collapseAll(); +} } + +WebFXTreeAbstractNode.prototype.indent = function(lvl, del, last, level) { + /* + * Since we only want to modify items one level below ourself, + * and since the rightmost indentation position is occupied by + * the plus icon we set this to -2 + */ + if (lvl == null) { lvl = -2; } + var state = 0; + for (var i = this.childNodes.length - 1; i >= 0 ; i--) { + state = this.childNodes[i].indent(lvl + 1, del, last, level); + if (state) { return; } + } + if (del) { + if (level >= this._level) { + if (this.folder) { + document.getElementById(this.id + '-plus').src = (this.open)?webFXTreeConfig.lMinusIcon:webFXTreeConfig.lPlusIcon; + this.plusIcon = webFXTreeConfig.lPlusIcon; + this.minusIcon = webFXTreeConfig.lMinusIcon; + } + else { document.getElementById(this.id + '-plus').src = webFXTreeConfig.lIcon; } + return 1; + } + } + var foo = document.getElementById(this.id + '-indent-' + lvl); + if (foo) { + if ((del) && (last)) { foo._last = true; } + if (foo._last) { foo.src = webFXTreeConfig.blankIcon; } + else { foo.src = webFXTreeConfig.iIcon; } + } + return 0; +} + +/* + * WebFXTree class + */ + +function WebFXTree(sText, sAction, sBehavior, sIcon, sOpenIcon) { + this.base = WebFXTreeAbstractNode; + this.base(sText, sAction); + this.icon = sIcon || webFXTreeConfig.rootIcon; + this.openIcon = sOpenIcon || webFXTreeConfig.openRootIcon; + /* Defaults to open */ + this.open = (webFXTreeHandler.cookies.getCookie(this.id.substr(18,this.id.length - 18)) == '0')?false:true; + this.folder = true; + this.rendered = false; + if (!webFXTreeHandler.behavior) { webFXTreeHandler.behavior = sBehavior || webFXTreeConfig.defaultBehavior; } + this.targetWindow = 'right'; +} + +WebFXTree.prototype = new WebFXTreeAbstractNode; + +WebFXTree.prototype.setBehavior = function (sBehavior) { + webFXTreeHandler.behavior = sBehavior; +}; + +WebFXTree.prototype.getBehavior = function (sBehavior) { + return webFXTreeHandler.behavior; +}; + +WebFXTree.prototype.getSelected = function() { + if (webFXTreeHandler.selected) { return webFXTreeHandler.selected; } + else { return null; } +} + +WebFXTree.prototype.remove = function() { } + +WebFXTree.prototype.expand = function() { + this.doExpand(); +} + +WebFXTree.prototype.collapse = function() { + this.focus(); + this.doCollapse(); +} + +WebFXTree.prototype.getFirst = function() { + return null; +} + +WebFXTree.prototype.getLast = function() { + return null; +} + +WebFXTree.prototype.getNextSibling = function() { + return null; +} + +WebFXTree.prototype.getPreviousSibling = function() { + return null; +} + +WebFXTree.prototype.keydown = function(key) { + if (key == 39) { this.expand(); return false; } + if (key == 37) { this.collapse(); return false; } + if ((key == 40) && (this.open)) { this.childNodes[0].select(); return false; } + return true; +} + +WebFXTree.prototype.toString = function() { + var str = "<div id=\"" + this.id + "\" ondblclick=\"webFXTreeHandler.toggle(this);\" class=\"webfx-tree-item\" onkeydown=\"return webFXTreeHandler.keydown(this)\">"; + str += "<img id=\"" + this.id + "-icon\" class=\"webfx-tree-icon\" src=\"" + ((webFXTreeHandler.behavior == 'classic' && this.open)?this.openIcon:this.icon) + "\" onclick=\"webFXTreeHandler.select(this);\"><a href=\"" + this.action + "\" id=\"" + this.id + "-anchor\" target=\"" + this.targetWindow + "\" onfocus=\"webFXTreeHandler.focus(this);\" onblur=\"webFXTreeHandler.blur(this);\">" + this.text + "</a></div>"; + str += "<div id=\"" + this.id + "-cont\" class=\"webfx-tree-container\" style=\"display: " + ((this.open)?'block':'none') + ";\">"; + for (var i = 0; i < this.childNodes.length; i++) { + str += this.childNodes[i].toString(i, this.childNodes.length); + } + str += "</div>"; + this.rendered = true; + return str; +}; + +/* + * WebFXTreeItem class + */ + +function WebFXTreeItem(sText, sAction, eParent, sIcon, sOpenIcon) { + this.base = WebFXTreeAbstractNode; + this.base(sText, sAction); + /* Defaults to close */ + this.open = (webFXTreeHandler.cookies.getCookie(this.id.substr(18,this.id.length - 18)) == '1')?true:false; + if (eParent) { eParent.add(this); } + if (sIcon) { this.icon = sIcon; } + if (sOpenIcon) { this.openIcon = sOpenIcon; } +} + +WebFXTreeItem.prototype = new WebFXTreeAbstractNode; + +WebFXTreeItem.prototype.remove = function() { + var parentNode = this.parentNode; + var prevSibling = this.getPreviousSibling(true); + var nextSibling = this.getNextSibling(true); + var folder = this.parentNode.folder; + var last = ((nextSibling) && (nextSibling.parentNode) && (nextSibling.parentNode.id == parentNode.id))?false:true; + this.getPreviousSibling().focus(); + this._remove(); + if (parentNode.childNodes.length == 0) { + parentNode.folder = false; + parentNode.open = false; + } + if (last) { + if (parentNode.id == prevSibling.id) { + document.getElementById(parentNode.id + '-icon').src = webFXTreeConfig.fileIcon; + } + else { } + } + if ((!prevSibling.parentNode) || (prevSibling.parentNode != parentNode)) { + parentNode.indent(null, true, last, this._level); + } + if (document.getElementById(prevSibling.id + '-plus')) { + if (nextSibling) { + if ((parentNode == prevSibling) && (parentNode.getNextSibling)) { document.getElementById(prevSibling.id + '-plus').src = webFXTreeConfig.tIcon; } + else if (nextSibling.parentNode != prevSibling) { document.getElementById(prevSibling.id + '-plus').src = webFXTreeConfig.lIcon; } + } + else { document.getElementById(prevSibling.id + '-plus').src = webFXTreeConfig.lIcon; } + } +} + +WebFXTreeItem.prototype._remove = function() { + for (var i = this.childNodes.length - 1; i >= 0; i--) { + this.childNodes[i]._remove(); + } + for (var i = 0; i < this.parentNode.childNodes.length; i++) { + if (this.id == this.parentNode.childNodes[i].id) { + for (var j = i; j < this.parentNode.childNodes.length; j++) { + this.parentNode.childNodes[i] = this.parentNode.childNodes[i+1] + } + this.parentNode.childNodes.length = this.parentNode.childNodes.length - 1; + if (i + 1 == this.parentNode.childNodes.length) { this.parentNode._last = true; } + } + } + webFXTreeHandler.all[this.id] = null; + if (document.getElementById(this.id)) { + document.getElementById(this.id).innerHTML = ""; + document.getElementById(this.id).removeNode(); + } +} + +WebFXTreeItem.prototype.expand = function() { + this.doExpand(); + document.getElementById(this.id + '-plus').src = this.minusIcon; +} + +WebFXTreeItem.prototype.collapse = function() { + this.focus(); + this.doCollapse(); + document.getElementById(this.id + '-plus').src = this.plusIcon; +} + +WebFXTreeItem.prototype.getFirst = function() { + return this.childNodes[0]; +} + +WebFXTreeItem.prototype.getLast = function() { + if (this.childNodes[this.childNodes.length - 1].open) { return this.childNodes[this.childNodes.length - 1].getLast(); } + else { return this.childNodes[this.childNodes.length - 1]; } +} + +WebFXTreeItem.prototype.getNextSibling = function() { + for (var i = 0; i < this.parentNode.childNodes.length; i++) { + if (this == this.parentNode.childNodes[i]) { break; } + } + if (++i == this.parentNode.childNodes.length) { return this.parentNode.getNextSibling(); } + else { return this.parentNode.childNodes[i]; } +} + +WebFXTreeItem.prototype.getPreviousSibling = function(b) { + for (var i = 0; i < this.parentNode.childNodes.length; i++) { + if (this == this.parentNode.childNodes[i]) { break; } + } + if (i == 0) { return this.parentNode; } + else { + if ((this.parentNode.childNodes[--i].open) || (b && this.parentNode.childNodes[i].folder)) { return this.parentNode.childNodes[i].getLast(); } + else { return this.parentNode.childNodes[i]; } +} } + +WebFXTreeItem.prototype.keydown = function(key) { + if ((key == 39) && (this.folder)) { + if (!this.open) { this.expand(); return false; } + else { this.getFirst().select(); return false; } + } + else if (key == 37) { + if (this.open) { this.collapse(); return false; } + else { this.parentNode.select(); return false; } + } + else if (key == 40) { + if (this.open) { this.getFirst().select(); return false; } + else { + var sib = this.getNextSibling(); + if (sib) { sib.select(); return false; } + } } + else if (key == 38) { this.getPreviousSibling().select(); return false; } + return true; +} + +WebFXTreeItem.prototype.toString = function (nItem, nItemCount) { + var foo = this.parentNode; + var indent = ''; + if (nItem + 1 == nItemCount) { this.parentNode._last = true; } + var i = 0; + while (foo.parentNode) { + foo = foo.parentNode; + indent = "<img id=\"" + this.id + "-indent-" + i + "\" src=\"" + ((foo._last)?webFXTreeConfig.blankIcon:webFXTreeConfig.iIcon) + "\">" + indent; + i++; + } + this._level = i; + if (this.childNodes.length) { this.folder = 1; } + else { this.open = false; } + if ((this.folder) || (webFXTreeHandler.behavior != 'classic')) { + if (!this.icon) { this.icon = webFXTreeConfig.folderIcon; } + if (!this.openIcon) { this.openIcon = webFXTreeConfig.openFolderIcon; } + } + else if (!this.icon) { this.icon = webFXTreeConfig.fileIcon; } + var label = this.text; + label = label.replace('<', '<'); + label = label.replace('>', '>'); + var str = "<div id=\"" + this.id + "\" ondblclick=\"webFXTreeHandler.toggle(this);\" class=\"webfx-tree-item\" onkeydown=\"return webFXTreeHandler.keydown(this)\">"; + str += indent; + str += "<img id=\"" + this.id + "-plus\" src=\"" + ((this.folder)?((this.open)?((this.parentNode._last)?webFXTreeConfig.lMinusIcon:webFXTreeConfig.tMinusIcon):((this.parentNode._last)?webFXTreeConfig.lPlusIcon:webFXTreeConfig.tPlusIcon)):((this.parentNode._last)?webFXTreeConfig.lIcon:webFXTreeConfig.tIcon)) + "\" onclick=\"webFXTreeHandler.toggle(this);\">" + str += "<img id=\"" + this.id + "-icon\" src=\"" + ((webFXTreeHandler.behavior == 'classic' && this.open)?this.openIcon:this.icon) + "\" onclick=\"webFXTreeHandler.select(this);\"><a href=\"" + this.action + "\" id=\"" + this.id + "-anchor\" target=\"" + this.targetWindow + "\" onfocus=\"webFXTreeHandler.focus(this);\" onblur=\"webFXTreeHandler.blur(this);\">" + label + "</a></div>"; + str += "<div id=\"" + this.id + "-cont\" class=\"webfx-tree-container\" style=\"display: " + ((this.open)?'block':'none') + ";\">"; + for (var i = 0; i < this.childNodes.length; i++) { + str += this.childNodes[i].toString(i,this.childNodes.length); + } + str += "</div>"; + this.plusIcon = ((this.parentNode._last)?webFXTreeConfig.lPlusIcon:webFXTreeConfig.tPlusIcon); + this.minusIcon = ((this.parentNode._last)?webFXTreeConfig.lMinusIcon:webFXTreeConfig.tMinusIcon); + return str; +}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/stylesheet.css b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/stylesheet.css new file mode 100755 index 00000000..5b025a93 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/stylesheet.css @@ -0,0 +1,181 @@ +a { color: #000090; text-decoration: none; } +a:hover, a:active, a:focus { color: highlighttext; background-color: highlight; text-decoration: none; } + +body { background : #FFFFFF; } +body, table { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10pt; } + +a img { border: 0px; } + +/* Page layout/boxes */ + +.info-box { } +.info-box-title { margin: 1em 0em 0em 0em; font-weight: normal; font-size: 14pt; color: #999999; border-bottom: 2px solid #999999; } +.info-box-body { border: 1px solid #999999; padding: .5em; } +.nav-bar { font-size: 8pt; white-space: nowrap; text-align: right; padding: .2em; margin: 0em 0em 1em 0em; } + +.oddrow { background-color: #F8F8F8; border: 1px solid #AAAAAA; padding: .5em; margin-bottom: 1em} +.evenrow { border: 1px solid #AAAAAA; padding: .5em; margin-bottom: 1em} + +.page-body { max-width: 800px; margin: auto; } +.tree { } + +/* Index formatting classes */ + +.index-item-body { margin-top: .5em; margin-bottom: .5em} +.index-item-description { margin-top: .25em } +.index-item-details { font-weight: normal; font-style: italic; font-size: 8pt } +.index-letter-section { background-color: #EEEEEE; border: 1px dotted #999999; padding: .5em; margin-bottom: 1em} +.index-letter-title { font-size: 12pt; font-weight: bold } +.index-letter-menu { text-align: center; margin: 1em } +.index-letter { font-size: 12pt } + +/* Docbook classes */ + +.description {} +.short-description { font-weight: bold; color: #666666; } +.tags { padding-left: 0em; margin-left: 3em; color: #666666; list-style-type: square; } +.parameters { padding-left: 0em; margin-left: 3em; color: #014fbe; list-style-type: square; } +.redefinitions { font-size: 8pt; padding-left: 0em; margin-left: 2em; } +.package { font-weight: bold; } +.package-title { font-weight: bold; font-size: 14pt; border-bottom: 1px solid black } +.sub-package { font-weight: bold; } +.tutorial { border-width: thin; border-color: #0066ff; } +.tutorial-nav-box { width: 100%; border: 1px solid #999999; background-color: #F8F8F8; } + +/* Generic formatting */ + +.field { font-weight: bold; } +.detail { font-size: 8pt; } +.notes { font-style: italic; font-size: 8pt; } +.separator { background-color: #999999; height: 2px; } +.warning { color: #FF6600; } +.disabled { font-style: italic; color: #999999; } + +/* Code elements */ + +.line-number { } + +.class-table { width: 100%; } +.class-table-header { border-bottom: 1px dotted #666666; text-align: left} +.class-name { color: #0000AA; font-weight: bold; } + +.method-summary { color: #009000; padding-left: 1em; font-size: 8pt; } +.method-header { } +.method-definition { margin-bottom: .2em } +.method-title { color: #009000; font-weight: bold; } +.method-name { font-weight: bold; } +.method-signature { font-size: 85%; color: #666666; margin: .5em 0em } +.method-result { font-style: italic; } + +.var-summary { padding-left: 1em; font-size: 8pt; } +.var-header { } +.var-title { color: #014fbe; margin-bottom: .3em } +.var-type { font-style: italic; } +.var-name { font-weight: bold; } +.var-default {} +.var-description { font-weight: normal; color: #000000; } + +.include-title { color: #014fbe;} +.include-type { font-style: italic; } +.include-name { font-weight: bold; } + +.const-title { color: #FF6600; } +.const-name { font-weight: bold; } + +/* Syntax highlighting */ + +.src-code { font-family: 'Courier New', Courier, monospace; font-weight: normal; } +.src-line { font-family: 'Courier New', Courier, monospace; font-weight: normal; } + +.src-code a:link { padding: 1px; text-decoration: underline; color: #0000DD; } +.src-code a:visited { text-decoration: underline; color: #0000DD; } +.src-code a:active { background-color: #FFFF66; color: #008000; } +.src-code a:hover { background-color: #FFFF66; text-decoration: overline underline; color: #008000; } + +.src-comm { color: #666666; } +.src-id { color: #FF6600; font-style: italic; } +.src-inc { color: #0000AA; font-weight: bold; } +.src-key { color: #0000AA; font-weight: bold; } +.src-num { color: #CC0000; } +.src-str { color: #CC0000; } +.src-sym { } +.src-var { } + +.src-php { font-weight: bold; } + +.src-doc { color: #666666; } +.src-doc-close-template { color: #666666 } +.src-doc-coretag { color: #008000; } +.src-doc-inlinetag {} +.src-doc-internal {} +.src-doc-tag { color: #0080CC; } +.src-doc-template { color: #666666 } +.src-doc-type { font-style: italic; color: #444444 } +.src-doc-var { color: #444444 } + +.tute-tag { color: #009999 } +.tute-attribute-name { color: #0000FF } +.tute-attribute-value { color: #0099FF } +.tute-entity { font-weight: bold; } +.tute-comment { font-style: italic } +.tute-inline-tag { color: #636311; font-weight: bold } + +/* tutorial */ + +.authors { } +.author { font-style: italic; font-weight: bold } +.author-blurb { margin: .5em 0em .5em 2em; font-size: 85%; font-weight: normal; font-style: normal } +.example { border: 1px dashed #999999; background-color: #EEEEEE; padding: .5em; } +.listing { border: 1px dashed #999999; background-color: #EEEEEE; padding: .5em; white-space: nowrap; } +.release-info { font-size: 85%; font-style: italic; margin: 1em 0em } +.ref-title-box { } +.ref-title { } +.ref-purpose { font-style: italic; color: #666666 } +.ref-synopsis { } +.title { font-weight: bold; border-bottom: 1px solid #999999; color: #999999; } +.cmd-synopsis { margin: 1em 0em } +.cmd-title { font-weight: bold } +.toc { margin-left: 2em; padding-left: 0em } + +/*------------------------------------------------------------------------------ + webfx-tree +------------------------------------------------------------------------------*/ + +.webfx-tree-container { + margin: 0px; + padding: 0px; + white-space: nowrap; + font: icon; +} + +.webfx-tree-item { + padding: 0px; + margin: 0px; + color: black; + white-space: nowrap; + font: icon; +} + +.webfx-tree-item a { + margin-left: 3px; + padding: 1px 2px 1px 2px; + color: black; + text-decoration: none; +} + +.webfx-tree-item a:hover, .webfx-tree-item a:active { + color: highlighttext; + background: highlight; + text-decoration: none +} + +.webfx-tree-item img { + vertical-align: middle; + border: 0px; +} + +.webfx-tree-icon { + width: 16px; + height: 16px; +} + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/method.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/method.tpl new file mode 100755 index 00000000..547e261d --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/method.tpl @@ -0,0 +1,151 @@ +<A NAME='method_detail'></A> +{section name=methods loop=$methods} +{if $methods[methods].static} +<a name="method{$methods[methods].function_name}" id="{$methods[methods].function_name}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div class="method-header"> + <img src="{$subdir}media/images/StaticMethod.png" /> + <span class="method-title">static {$methods[methods].function_name}</span> (line <span class="line-number">{if $methods[methods].slink}{$methods[methods].slink}{else}{$methods[methods].line_number}{/if}</span>) + </div> + + {include file="docblock.tpl" sdesc=$methods[methods].sdesc desc=$methods[methods].desc tags=$methods[methods].tags params=$methods[methods].params function=false} + + <div class="method-signature"> + static <span class="method-result">{$methods[methods].function_return}</span> + <span class="method-name"> + {if $methods[methods].ifunction_call.returnsref}&{/if}{$methods[methods].function_name} + </span> + {if count($methods[methods].ifunction_call.params)} + ({section name=params loop=$methods[methods].ifunction_call.params}{if $smarty.section.params.iteration != 1}, {/if}{if $methods[methods].ifunction_call.params[params].hasdefault}[{/if}<span class="var-type">{$methods[methods].ifunction_call.params[params].type}</span> <span class="var-name">{$methods[methods].ifunction_call.params[params].name}</span>{if $methods[methods].ifunction_call.params[params].hasdefault} = <span class="var-default">{$methods[methods].ifunction_call.params[params].default}</span>]{/if}{/section}) + {else} + () + {/if} + </div> + + {if $methods[methods].params} + <ul class="parameters"> + {section name=params loop=$methods[methods].params} + <li> + <span class="var-type">{$methods[methods].params[params].datatype}</span> + <span class="var-name">{$methods[methods].params[params].var}</span>{if $methods[methods].params[params].data}<span class="var-description">: {$methods[methods].params[params].data}</span>{/if} + </li> + {/section} + </ul> + {/if} + + {if $methods[methods].method_overrides} + <hr class="separator" /> + <div class="notes">Redefinition of:</div> + <dl> + <dt>{$methods[methods].method_overrides.link}</dt> + {if $methods[methods].method_overrides.sdesc} + <dd>{$methods[methods].method_overrides.sdesc}</dd> + {/if} + </dl> + {/if} + {if $methods[methods].method_implements} + <hr class="separator" /> + <div class="notes">Implementation of:</div> + {section name=imp loop=$methods[methods].method_implements} + <dl> + <dt>{$methods[methods].method_implements[imp].link}</dt> + {if $methods[methods].method_implements[imp].sdesc} + <dd>{$methods[methods].method_implements[imp].sdesc}</dd> + {/if} + </dl> + {/section} + {/if} + + {if $methods[methods].descmethod} + <hr class="separator" /> + <div class="notes">Redefined in descendants as:</div> + <ul class="redefinitions"> + {section name=dm loop=$methods[methods].descmethod} + <li> + {$methods[methods].descmethod[dm].link} + {if $methods[methods].descmethod[dm].sdesc} + : {$methods[methods].descmethod[dm].sdesc} + {/if} + </li> + {/section} + </ul> + {/if} +</div> +{/if} +{/section} +{section name=methods loop=$methods} +{if !$methods[methods].static} +<a name="method{$methods[methods].function_name}" id="{$methods[methods].function_name}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div class="method-header"> + <img src="{$subdir}media/images/{if $methods[methods].ifunction_call.constructor}Constructor{elseif $methods[methods].ifunction_call.destructor}Destructor{else}{if $methods[methods].abstract}Abstract{/if}{if $methods[methods].access == 'private'}Private{/if}Method{/if}.png" /> + <span class="method-title">{if $methods[methods].ifunction_call.constructor}Constructor {elseif $methods[methods].ifunction_call.destructor}Destructor {/if}{$methods[methods].function_name}</span> (line <span class="line-number">{if $methods[methods].slink}{$methods[methods].slink}{else}{$methods[methods].line_number}{/if}</span>) + </div> + + {include file="docblock.tpl" sdesc=$methods[methods].sdesc desc=$methods[methods].desc tags=$methods[methods].tags params=$methods[methods].params function=false} + + <div class="method-signature"> + <span class="method-result">{$methods[methods].function_return}</span> + <span class="method-name"> + {if $methods[methods].ifunction_call.returnsref}&{/if}{$methods[methods].function_name} + </span> + {if count($methods[methods].ifunction_call.params)} + ({section name=params loop=$methods[methods].ifunction_call.params}{if $smarty.section.params.iteration != 1}, {/if}{if $methods[methods].ifunction_call.params[params].hasdefault}[{/if}<span class="var-type">{$methods[methods].ifunction_call.params[params].type}</span> <span class="var-name">{$methods[methods].ifunction_call.params[params].name}</span>{if $methods[methods].ifunction_call.params[params].hasdefault} = <span class="var-default">{$methods[methods].ifunction_call.params[params].default}</span>]{/if}{/section}) + {else} + () + {/if} + </div> + + {if $methods[methods].params} + <ul class="parameters"> + {section name=params loop=$methods[methods].params} + <li> + <span class="var-type">{$methods[methods].params[params].datatype}</span> + <span class="var-name">{$methods[methods].params[params].var}</span>{if $methods[methods].params[params].data}<span class="var-description">: {$methods[methods].params[params].data}</span>{/if} + </li> + {/section} + </ul> + {/if} + + {if $methods[methods].method_overrides} + <hr class="separator" /> + <div class="notes">Redefinition of:</div> + <dl> + <dt>{$methods[methods].method_overrides.link}</dt> + {if $methods[methods].method_overrides.sdesc} + <dd>{$methods[methods].method_overrides.sdesc}</dd> + {/if} + </dl> + {/if} + {if $methods[methods].method_implements} + <hr class="separator" /> + <div class="notes">Implementation of:</div> + {section name=imp loop=$methods[methods].method_implements} + <dl> + <dt>{$methods[methods].method_implements[imp].link}</dt> + {if $methods[methods].method_implements[imp].sdesc} + <dd>{$methods[methods].method_implements[imp].sdesc}</dd> + {/if} + </dl> + {/section} + {/if} + + {if $methods[methods].descmethod} + <hr class="separator" /> + <div class="notes">Redefined in descendants as:</div> + <ul class="redefinitions"> + {section name=dm loop=$methods[methods].descmethod} + <li> + {$methods[methods].descmethod[dm].link} + {if $methods[methods].descmethod[dm].sdesc} + : {$methods[methods].descmethod[dm].sdesc} + {/if} + </li> + {/section} + </ul> + {/if} +</div> +{/if} +{/section} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/page.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/page.tpl new file mode 100755 index 00000000..2cffc22d --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/page.tpl @@ -0,0 +1,214 @@ +{include file="header.tpl" top3=true} + +<h2 class="file-name"><img src="{$subdir}media/images/Page_logo.png" alt="File" style="vertical-align: middle">{$source_location}</h2> + +<a name="sec-description"></a> +<div class="info-box"> + <div class="info-box-title">Description</div> + <div class="nav-bar"> + {if $classes || $includes || $defines || $globals || $functions} + <span class="disabled">Description</span> | + {/if} + {if $classes} + <a href="#sec-classes">Classes</a> + {if $includes || $defines || $globals || $functions}|{/if} + {/if} + {if $includes} + <a href="#sec-includes">Includes</a> + {if $defines || $globals || $functions}|{/if} + {/if} + {if $defines} + <a href="#sec-constants">Constants</a> + {if $globals || $functions}|{/if} + {/if} + {if $globals} + <a href="#sec-variables">Variables</a> + {if $functions}|{/if} + {/if} + {if $functions} + <a href="#sec-functions">Functions</a> + {/if} + </div> + <div class="info-box-body"> + {include file="docblock.tpl" desc=$desc sdesc=$sdesc tags=$tags} + + {if $tutorial} + <hr class="separator" /> + <div class="notes">Tutorial: <span class="tutorial">{$tutorial}</div> + {/if} + </div> +</div> + +{if $classes} + <a name="sec-classes"></a> + <div class="info-box"> + <div class="info-box-title">Classes</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + <span class="disabled">Classes</span> + {if $includes || $defines || $globals || $functions}|{/if} + {if $includes} + <a href="#sec-includes">Includes</a> + {if $defines || $globals || $functions}|{/if} + {/if} + {if $defines} + <a href="#sec-constants">Constants</a> + {if $globals || $functions}|{/if} + {/if} + {if $globals} + <a href="#sec-variables">Variables</a> + {if $functions}|{/if} + {/if} + {if $functions} + <a href="#sec-functions">Functions</a> + {/if} + </div> + <div class="info-box-body"> + <table cellpadding="2" cellspacing="0" class="class-table"> + <tr> + <th class="class-table-header">Class</th> + <th class="class-table-header">Description</th> + </tr> + {section name=classes loop=$classes} + <tr> + <td style="padding-right: 2em; vertical-align: top; white-space: nowrap"> + <img src="{$subdir}media/images/{if $classes[classes].abstract}Abstract{/if}{if $classes[classes].access == 'private'}Private{/if}Class.png" + alt="{if $classes[classes].abstract}Abstract{/if}{if $classes[classes].access == 'private'}Private{/if} class" + title="{if $classes[classes].abstract}Abstract{/if}{if $classes[classes].access == 'private'}Private{/if} class"/> + {$classes[classes].link} + </td> + <td> + {if $classes[classes].sdesc} + {$classes[classes].sdesc} + {else} + {$classes[classes].desc} + {/if} + </td> + </tr> + {/section} + </table> + </div> + </div> +{/if} + +{if $includes} + <a name="sec-includes"></a> + <div class="info-box"> + <div class="info-box-title">Includes</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $classes} + <a href="#sec-classes">Classes</a> + {if $includes || $defines || $globals || $functions}|{/if} + {/if} + <span class="disabled">Includes</span> + {if $defines || $globals || $functions}|{/if} + {if $defines} + <a href="#sec-constants">Constants</a> + {if $globals || $functions}|{/if} + {/if} + {if $globals} + <a href="#sec-variables">Variables</a> + {if $functions}|{/if} + {/if} + {if $functions} + <a href="#sec-functions">Functions</a> + {/if} + </div> + <div class="info-box-body"> + {include file="include.tpl"} + </div> + </div> +{/if} + +{if $defines} + <a name="sec-constants"></a> + <div class="info-box"> + <div class="info-box-title">Constants</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $classes} + <a href="#sec-classes">Classes</a> + {if $includes || $defines || $globals || $functions}|{/if} + {/if} + {if $includes} + <a href="#sec-includes">Includes</a> + {if $defines || $globals || $functions}|{/if} + {/if} + <span class="disabled">Constants</span> + {if $globals || $functions}|{/if} + {if $globals} + <a href="#sec-variables">Variables</a> + {if $functions}|{/if} + {/if} + {if $functions} + <a href="#sec-functions">Functions</a> + {/if} + </div> + <div class="info-box-body"> + {include file="define.tpl"} + </div> + </div> +{/if} + +{if $globals} + <a name="sec-variables"></a> + <div class="info-box"> + <div class="info-box-title">Variables</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $classes} + <a href="#sec-classes">Classes</a> + {if $includes || $defines || $globals || $functions}|{/if} + {/if} + {if $includes} + <a href="#sec-includes">Includes</a> + {if $defines || $globals || $functions}|{/if} + {/if} + {if $defines} + <a href="#sec-constants">Constants</a> + {if $globals || $functions}|{/if} + {/if} + <span class="disabled">Variables</span> + {if $functions}|{/if} + {if $functions} + <a href="#sec-functions">Functions</a> + {/if} + </div> + <div class="info-box-body"> + {include file="global.tpl"} + </div> + </div> +{/if} + +{if $functions} + <a name="sec-functions"></a> + <div class="info-box"> + <div class="info-box-title">Functions</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $classes} + <a href="#sec-classes">Classes</a> + {if $includes || $defines || $globals || $functions}|{/if} + {/if} + {if $includes} + <a href="#sec-includes">Includes</a> + {if $defines || $globals || $functions}|{/if} + {/if} + {if $defines} + <a href="#sec-constants">Constants</a> + {if $globals || $functions}|{/if} + {/if} + {if $globals} + <a href="#sec-variables">Variables</a> + {if $functions}|{/if} + {/if} + <span class="disabled">Functions</span> + </div> + <div class="info-box-body"> + {include file="function.tpl"} + </div> + </div> +{/if} + +{include file="footer.tpl" top3=true} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/pkgelementindex.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/pkgelementindex.tpl new file mode 100755 index 00000000..dc283ad0 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/pkgelementindex.tpl @@ -0,0 +1,17 @@ +{include file="header.tpl"} +<a name="top"></a> +<h2>[{$package}] element index</h2> +{if count($packageindex) > 1} + <h3>Package indexes</h3> + <ul> + {section name=p loop=$packageindex} + {if $packageindex[p].title != $package} + <li><a href="elementindex_{$packageindex[p].title}.html">{$packageindex[p].title}</a></li> + {/if} + {/section} + </ul> +{/if} +<a href="elementindex.html">All elements</a> +<br /> +{include file="basicindex.tpl" indexname=elementindex_$package} +{include file="footer.tpl"} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/ric.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/ric.tpl new file mode 100755 index 00000000..ad792475 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/ric.tpl @@ -0,0 +1,6 @@ +{include file="header.tpl"} +<div align="center"><h1>{$name}</h1></div> +<pre> +{$contents|htmlentities} +</pre> +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/todolist.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/todolist.tpl new file mode 100755 index 00000000..f929ccdb --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/todolist.tpl @@ -0,0 +1,14 @@ +{include file="header.tpl" title="Todo List"} +<div align="center"><h1>Todo List</h1></div> +{foreach from=$todos key=todopackage item=todo} +<h2>{$todopackage}</h2> +{section name=todo loop=$todo} +<h3>{$todo[todo].link}</h3> +<ul> +{section name=t loop=$todo[todo].todos} + <li>{$todo[todo].todos[t]}</li> +{/section} +</ul> +{/section} +{/foreach} +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/top_frame.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/top_frame.tpl new file mode 100755 index 00000000..36d1e5a1 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/top_frame.tpl @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> + <html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <!-- template designed by Marco Von Ballmoos --> + <title>{$title}</title> + <link rel="stylesheet" href="{$subdir}media/stylesheet.css" /> + <link rel="stylesheet" href="{$subdir}media/banner.css" /> + <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/> + </head> + <body> + <div class="banner"> + <div class="banner-title">{$package}</div> + <div class="banner-menu"> + <form> + <table cellpadding="0" cellspacing="0" style="width: 100%"> + <tr> + <td> + {if count($ric) >= 1} + {assign var="last_ric_name" value=""} + {section name=ric loop=$ric} + {if $last_ric_name != ""} | {/if} + <a href="{$ric[ric].file}" target="right">{$ric[ric].name}</a> + {assign var="last_ric_name" value=$ric[ric].name} + {/section} + {/if} + </td> + <td style="width: 2em"> </td> + <td style="text-align: right"> + {if count($packages) > 1} + <span class="field">Packages</span> + <select class="package-selector" onchange="window.parent.left_bottom.location=this[selectedIndex].value"> + {section name=p loop=$packages} + <option value="{$packages[p].link}">{$packages[p].title}</option> + {/section} + </select> + {/if} + </td> + </tr> + </table> + </form> + </div> + </div> + </body> + </html> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/tutorial.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/tutorial.tpl new file mode 100755 index 00000000..3b9109d1 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/tutorial.tpl @@ -0,0 +1,13 @@ +{include file="header.tpl" title=$title top3=true} + +{if $nav} + {include file="tutorial_nav.tpl" prev=$prev next=$next up=$up prevtitle=$prevtitle nexttitle=$nexttitle uptitle=$uptitle} +{/if} + +{$contents} + +{if $nav} + {include file="tutorial_nav.tpl" prev=$prev next=$next up=$up prevtitle=$prevtitle nexttitle=$nexttitle uptitle=$uptitle} +{/if} + +{include file="footer.tpl" top3=true}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/tutorial_nav.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/tutorial_nav.tpl new file mode 100755 index 00000000..3cd7893d --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/tutorial_nav.tpl @@ -0,0 +1,41 @@ +<table class="tutorial-nav-box"> + <tr> + <td style="width: 30%"> + {if $prev} + <a href="{$prev}"><img src="{$subdir}media/images/previous_button.png" alt="Previous"></a> + {else} + <span class="disabled"><img src="{$subdir}media/images/previous_button_disabled.png" alt="Previous"></span> + {/if} + </td> + <td style="text-align: center"> + {if $up} + <a href="{$up}"><img src="{$subdir}media/images/up_button.png" alt="Up"></a> + {/if} + </td> + <td style="text-align: right; width: 30%"> + {if $next} + <a href="{$next}"><img src="{$subdir}media/images/next_button.png" alt="Next"></a> + {else} + <span class="disabled"><img src="{$subdir}media/images/next_button_disabled.png" alt="Next"></span> + {/if} + </td> + </tr> + <tr> + <td style="width: 30%"> + {if $prevtitle} + <span class="detail">{$prevtitle}</span> + {/if} + </td> + <td style="text-align: center"> + {if $uptitle} + <span class="detail">{$uptitle}</span> + {/if} + </td> + <td style="text-align: right; width: 30%"> + {if $nexttitle} + <span class="detail">{$nexttitle}</span> + {/if} + </td> + </tr> +</table> +
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/tutorial_toc.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/tutorial_toc.tpl new file mode 100755 index 00000000..3482249b --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/tutorial_toc.tpl @@ -0,0 +1,40 @@ +{if count($toc)} +<h1 class="title">Table of Contents</h1> +<ul class="toc"> + {assign var="lastcontext" value='refsect1'} + {section name=toc loop=$toc} + + {if $toc[toc].tagname != $lastcontext} + {if $lastcontext == 'refsect1'} + <ul class="toc"> + <li>{$toc[toc].link}</li> + {else} + {if $lastcontext == 'refsect2'} + {if $toc[toc].tagname == 'refsect1'} + </ul> + <li>{$toc[toc].link}</li> + {/if} + {if $toc[toc].tagname == 'refsect3'} + <ul class="toc"> + <li>{$toc[toc].link}</li> + {/if} + {else} + </ul> + </ul> + <li>{$toc[toc].link}</li> + {/if} + {/if} + {assign var="lastcontext" value=$toc[toc].tagname} + {else} + <li>{$toc[toc].link}</li> + {/if} + {/section} + {if $lastcontext == 'refsect2'} + </ul> + {/if} + {if $lastcontext == 'refsect3'} + </ul> + </ul> + {/if} +</ul> +{/if} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/tutorial_tree.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/tutorial_tree.tpl new file mode 100755 index 00000000..8b10e9db --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/tutorial_tree.tpl @@ -0,0 +1,9 @@ + var a{$name|replace:"-":"_"}node = new WebFXTreeItem('{$main.title|strip_tags|escape:"quotes"}','{$main.link}', parent_node, + 'media/images/tutorial.png', 'media/images/tutorial.png'); + +{if $haskids} + var a{$name|replace:"-":"_"}_old_parent_node = parent_node; + parent_node = a{$name|replace:"-":"_"}node; + {$kids} + parent_node = a{$name|replace:"-":"_"}_old_parent_node; +{/if} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/var.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/var.tpl new file mode 100755 index 00000000..a82d1bfa --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/var.tpl @@ -0,0 +1,94 @@ +{section name=vars loop=$vars} +{if $vars[vars].static} +<a name="var{$vars[vars].var_name}" id="{$vars[vars].var_name}"><!-- --></A> +<div class="{cycle values="evenrow,oddrow"}"> + + <div class="var-header"> + <img src="{$subdir}media/images/StaticVariable.png" /> + <span class="var-title"> + static <span class="var-type">{$vars[vars].var_type}</span> + <span class="var-name">{$vars[vars].var_name}</span> + {if $vars[vars].var_default} = <span class="var-default">{$vars[vars].var_default|replace:"\n":"<br />"}</span>{/if} + (line <span class="line-number">{if $vars[vars].slink}{$vars[vars].slink}{else}{$vars[vars].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$vars[vars].sdesc desc=$vars[vars].desc tags=$vars[vars].tags} + + {if $vars[vars].var_overrides} + <hr class="separator" /> + <div class="notes">Redefinition of:</div> + <dl> + <dt>{$vars[vars].var_overrides.link}</dt> + {if $vars[vars].var_overrides.sdesc} + <dd>{$vars[vars].var_overrides.sdesc}</dd> + {/if} + </dl> + {/if} + + {if $vars[vars].descvar} + <hr class="separator" /> + <div class="notes">Redefined in descendants as:</div> + <ul class="redefinitions"> + {section name=vm loop=$vars[vars].descvar} + <li> + {$vars[vars].descvar[vm].link} + {if $vars[vars].descvar[vm].sdesc} + : {$vars[vars].descvar[vm].sdesc} + {/if} + </li> + {/section} + </ul> + {/if} + +</div> +{/if} +{/section} + +{section name=vars loop=$vars} +{if !$vars[vars].static} +<a name="var{$vars[vars].var_name}" id="{$vars[vars].var_name}"><!-- --></A> +<div class="{cycle values="evenrow,oddrow"}"> + + <div class="var-header"> + <img src="{$subdir}media/images/{if $vars[vars].access == 'private'}PrivateVariable{else}Variable{/if}.png" /> + <span class="var-title"> + <span class="var-type">{$vars[vars].var_type}</span> + <span class="var-name">{$vars[vars].var_name}</span> + {if $vars[vars].var_default} = <span class="var-default">{$vars[vars].var_default|replace:"\n":"<br />"}</span>{/if} + (line <span class="line-number">{if $vars[vars].slink}{$vars[vars].slink}{else}{$vars[vars].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$vars[vars].sdesc desc=$vars[vars].desc tags=$vars[vars].tags} + + {if $vars[vars].var_overrides} + <hr class="separator" /> + <div class="notes">Redefinition of:</div> + <dl> + <dt>{$vars[vars].var_overrides.link}</dt> + {if $vars[vars].var_overrides.sdesc} + <dd>{$vars[vars].var_overrides.sdesc}</dd> + {/if} + </dl> + {/if} + + {if $vars[vars].descvar} + <hr class="separator" /> + <div class="notes">Redefined in descendants as:</div> + <ul class="redefinitions"> + {section name=vm loop=$vars[vars].descvar} + <li> + {$vars[vars].descvar[vm].link} + {if $vars[vars].descvar[vm].sdesc} + : {$vars[vars].descvar[vm].sdesc} + {/if} + </li> + {/section} + </ul> + {/if} + +</div> +{/if} +{/section} + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/options.ini b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/options.ini new file mode 100755 index 00000000..084809be --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/options.ini @@ -0,0 +1,577 @@ +preservedocbooktags = false + +;; used to highlight the {@source} inline tag, @filesource tag, and @example tag +[highlightSourceTokens] +;; format: +;; T_CONSTANTNAME = open +;; /T_CONSTANTNAME = close + +T_INCLUDE = <span class="src-inc"> +/T_INCLUDE = </span> +T_INCLUDE_ONCE = <span class="src-inc"> +/T_INCLUDE_ONCE = </span> +T_REQUIRE_ONCE = <span class="src-inc"> +/T_REQUIRE_ONCE = </span> +T_REQUIRE_ONCE = <span class="src-inc"> +/T_REQUIRE_ONCE = </span> + +T_CONSTANT_ENCAPSED_STRING = <span class="src-str"> +/T_CONSTANT_ENCAPSED_STRING = </span> +T_STRING_VARNAME = <span class="src-str"> +/T_STRING_VARNAME = </span> + +T_STRING = <span class="src-id"> +/T_STRING = </span> + +T_DNUMBER = <span class="src-num"> +/T_DNUMBER = </span> +T_LNUMBER = <span class="src-num"> +/T_LNUMBER = </span> + +T_VARIABLE = <span class="src-var"> +/T_VARIABLE = </span> + +T_COMMENT = <span class="src-comm"> +/T_COMMENT = </span> +T_ML_COMMENT = <span class="src-comm"> +/T_ML_COMMENT = </span> + +T_OBJECT_OPERATOR = <span class="src-sym"> +/T_OBJECT_OPERATOR = </span> + +T_ABSTRACT = <span class="src-key"> +/T_ABSTRACT = </span> +T_CLONE = <span class="src-key"> +/T_CLONE = </span> +T_HALT_COMPILER = <span class="src-key"> +/T_HALT_COMPILER = </span> +T_ARRAY = <span class="src-key"> +/T_ARRAY = </span> +T_AS = <span class="src-key"> +/T_AS = </span> +T_BREAK = <span class="src-key"> +/T_BREAK = </span> +T_CLASS = <span class="src-key"> +/T_CLASS = </span> +T_CASE = <span class="src-key"> +/T_CASE = </span> +T_CONST = <span class="src-key"> +/T_CONST = </span> +T_CONTINUE = <span class="src-key"> +/T_CONTINUE = </span> +T_DECLARE = <span class="src-key"> +/T_DECLARE = </span> +T_DEFAULT = <span class="src-key"> +/T_DEFAULT = </span> +T_ELSE = <span class="src-key"> +/T_ELSE = </span> +T_ELSEIF = <span class="src-key"> +/T_ELSEIF = </span> +T_EMPTY = <span class="src-key"> +/T_EMPTY = </span> +T_ENDDECLARE = <span class="src-key"> +/T_ENDDECLARE = </span> +T_ENDFOR = <span class="src-key"> +/T_ENDFOR = </span> +T_ENDSWITCH = <span class="src-key"> +/T_ENDSWITCH = </span> +T_ENDFOREACH = <span class="src-key"> +/T_ENDFOREACH = </span> +T_ENDIF = <span class="src-key"> +/T_ENDIF = </span> +T_ENDWHILE = <span class="src-key"> +/T_ENDWHILE = </span> +T_EXIT = <span class="src-key"> +/T_EXIT = </span> +T_EXTENDS = <span class="src-key"> +/T_EXTENDS = </span> +T_FINAL = <span class="src-key"> +/T_FINAL = </span> +T_FOR = <span class="src-key"> +/T_FOR = </span> +T_FOREACH = <span class="src-key"> +/T_FOREACH = </span> +T_FUNCTION = <span class="src-key"> +/T_FUNCTION = </span> +T_GLOBAL = <span class="src-key"> +/T_GLOBAL = </span> +T_IF = <span class="src-key"> +/T_IF = </span> +T_IMPLEMENTS = <span class="src-key"> +/T_IMPLEMENTS = </span> +T_INTERFACE = <span class="src-key"> +/T_INTERFACE = </span> +T_LOGICAL_AND = <span class="src-key"> +/T_LOGICAL_AND = </span> +T_LOGICAL_OR = <span class="src-key"> +/T_LOGICAL_OR = </span> +T_LOGICAL_XOR = <span class="src-key"> +/T_LOGICAL_XOR = </span> +T_NEW = <span class="src-key"> +/T_NEW = </span> +T_PRIVATE = <span class="src-key"> +/T_PRIVATE = </span> +T_PROTECTED = <span class="src-key"> +/T_PROTECTED = </span> +T_PUBLIC = <span class="src-key"> +/T_PUBLIC = </span> +T_RETURN = <span class="src-key"> +/T_RETURN = </span> +T_STATIC = <span class="src-key"> +/T_STATIC = </span> +T_SWITCH = <span class="src-key"> +/T_SWITCH = </span> +T_VAR = <span class="src-key"> +/T_VAR = </span> +T_WHILE = <span class="src-key"> +/T_WHILE = </span> + +T_DOUBLE_COLON = <span class="src-sym"> +/T_DOUBLE_COLON = </span> + +T_OPEN_TAG = <span class="src-php"> +/T_OPEN_TAG = </span> +T_OPEN_TAG_WITH_ECHO = <span class="src-php"> +/T_OPEN_TAG_WITH_ECHO = </span> +T_CLOSE_TAG = <span class="src-php"> +/T_CLOSE_TAG = </span> + + +[highlightSource] +;; this is for highlighting things that aren't tokens like "&" +;; format: +;; word = open +;; /word = close +@ = <span class="src-sym"> +/@ = </span> +& = <span class="src-sym"> +/& = </span> +[ = <span class="src-sym"> +/[ = </span> +] = <span class="src-sym"> +/] = </span> +! = <span class="src-sym"> +/! = </span> +";" = <span class="src-sym"> +/; = </span> +( = <span class="src-sym"> +/( = </span> +) = <span class="src-sym"> +/) = </span> +, = <span class="src-sym"> +/, = </span> +{ = <span class="src-sym"> +/{ = </span> +} = <span class="src-sym"> +/} = </span> +""" = <span class="src-str"> +/" = </span> + +[highlightDocBlockSourceTokens] +;; this is for docblock tokens, using by phpDocumentor_HighlightParser +;; tagphptype is for "string" in @param string description, for example +docblock = <span class="src-doc"> +/docblock = </span> +tagphptype = <span class="src-doc-type"> +/tagphptype = </span> +tagvarname = <span class="src-doc-var"> +/tagvarname = </span> +coretag = <span class="src-doc-coretag"> +/coretag = </span> +tag = <span class="src-doc-tag"> +/tag = </span> +inlinetag = <span class="src-doc-inlinetag"> +/inlinetag = </span> +internal = <span class="src-doc-internal"> +/internal = </span> +closetemplate = <span class="src-doc-close-template"> +/closetemplate = </span> +docblocktemplate = <span class="src-doc-template"> +/docblocktemplate = </span> + +[highlightTutorialSourceTokens] +;; this is for XML DocBook-based tutorials, highlighted by phpDocumentor_TutorialHighlightParser +;; <tag> +opentag = <span class="tute-tag"> +/opentag = </span> +;; </tag> +closetag = <span class="tute-tag"> +/closetag = </span> +;; <tag attribute="value"> +attribute = <span class="tute-attribute-name"> +/attribute = </span> +;; <tag attribute="value"> +attributevalue = <span class="tute-attribute-value"> +/attributevalue = </span> +;; &entity; +entity = <span class="tute-entity"> +/entity = </span> +;; <!-- comment --> +comment = <span class="tute-comment"> +/comment = </span> +;; {@inline tag} +itag = <span class="tute-inline-tag"> +/itag = </span> + +;; used for translation of html in DocBlocks +[desctranslate] +ul = <ul> +/ul = </ul> +ol = <ol> +/ol = </ol> +li = <li> +/li = </li> +code = +/code = +var = <var> +/var = </var> +samp = <samp> +/samp = </samp> +kbd = <kbd> +/kbd = </kbd> +pre = <pre> +/pre = </pre> +p = <p> +/p = </p> +b = <strong> +/b = </strong> +i = <em> +/i = </em> +br = <br /> + +[ppage] +;; this is the DocBook package page translation section. All DocBook tags +;; that have a corresponding html tag must be listed here. Entities should +;; also be listed here +;; +;; examples: +;; 1) +;; tagname = newtagname +;; +;; This is the simplest case, where all attributes will be added into the +;; starting tag and the ending tag will be html/xml style </tranlatedtagname> +;; <tagname></tagname> becomes <newtagname></newtagname> and +;; <tagname attr="value"></tagname> becomes +;; <newtagname attr="value"></newtagname> +;; +;; 2) +;; tagname = newtagname +;; tagname->attr = newattrname +;; +;; in this case, everything will be like the first case, except tags like: +;; <tagname attr="value"></tagname> will become +;; <newtagname newattrname="value"></newtagname> +;; +;; 3) +;; tagname = newtagname +;; tagname->attr = newattrname +;; tagname->attr+value = newvalue +;; +;; in this case, the value is also translated to another. This can be useful +;; for instances such as focus="middle" changing to align="center" or something +;; of that nature. +;; <tagname attr="value"></tagname> will become +;; <newtagname newattrname="newvalue"></newtagname> +;; +;; 4) +;; tagname = newtagname +;; tagname->attr1 = newattrname +;; tagname->attr2 = newattrname +;; tagname->attr1+value|attr2+value = newvalue +;; +;; in this case, two attributes combine to make one new attribute, and the combined +;; value is translated into a new value +;; <tagname attr1="value1" attr2="value2"></tagname> will become +;; <newtagname newattrname="newvalue"></newtagname> +;; +;; 5) +;; tagname = newtagname +;; tagname!attr = dummy +;; +;; here, the attribute will be ignored. dummy is not used and may be any value +;; <tagname attr="value"></tagname> will become +;; <newtagname></newtagname> +;; +;; 6) +;; tagname = newtagname +;; tagname! = dummy +;; +;; here, all attributes will be ignored. dummy is not used and may be any value +;; <tagname attr1="value" attr2="foo"></tagname> will become +;; <newtagname></newtagname> +;; +;; 7) +;; tagname = newtagname +;; tagname/ = 1 +;; +;; here, the tag will be translated as a single tag with no closing tag, and all +;; attributes +;; <tagname attr="val">{text text}</tagname> will become +;; <newtagname attr="val" /> +;; +;; 8) +;; tagname = <starttaginfo /> +;; /tagname = closetagtext +;; +;; in this case, the text <starttaginfo> will be inserted exactly as entered for +;; <tagname> and closetagtext for </tagname> +;; <tagname attr="val"></tagname> will become +;; <starttaginfo />closetagtext +;; +;; 9) +;; $attr$my_attribute = newattrname +;; +;; tagname = newtagname +;; +;; in this case, all occurences of my_attribute in any tag will be changed to +;; newattrname. This is useful for changing things like role="php" to +;; class="php," for example. Note that the text "$attr$" MUST be on the line +;; start for phpDocumentor to recognize it. +;; +;; 10) +;; &entity; = translation text +;; " = " +;; " = """ +;; < = < +;; +;; Use this to control translation of entities to their appropriate values + + = +" = " +” = ” +“ = “ +& = & +< = < +> = > +© = © + + +$attr$role = class + +abbrev = abbr + +blockquote = blockquote + +arg = span +arg->choice = class + +author = <span class="author"> +/author = </span> +author! = 0 + +authorblurb = <div class="author-blurb"> +/authorblurb = </div> + +authorgroup = <div class="authors"><h2 class="title">Authors</h2> +/authorgroup = </div> +authorgroup! = 0 + +caution = <span class="warning"> +/caution = </span> +caution! = 0 + +cmdsynopsis = <div class="cmd-synopsis"> +/cmdsynopsis = </div> + +command = <span class="cmd-title"> +/command = </span> + +copyright = <div class="notes"> +/copyright = </div> + +emphasis = em + +example = <div class="src-code"> +/example = </div> +example! = 0 + +function = +/function = () + +formalpara = p + +graphic = img +graphic->fileref = src +graphic/ = + +important = strong + +informalequation = blockquote + +informalexample = div + +inlineequation = em + +itemizedlist = ul + +listitem = li + +literal = code + +literallayout = span + +option = " " +/option = + +orderedlist = ol + +para = p + +programlisting = <div class="src-code"> +/programlisting = </div> +programlisting! = 0 + +refentry = div + +refnamediv = <div class="ref-title-box"> +/refnamediv = </div> +refnamediv! = 0 + +refname = <h1 class="ref-title"> +/refname = </h1> + +refpurpose = <h2 class="ref-purpose"> +/refpurpose = </h2> + +refsynopsisdiv = <div class="ref-synopsis"> +/refsynopsisdiv = </div> +refsynopsisdiv! = 0 + +refsect1 = span + +refsect2 = span + +refsect3 = +/refsect3 = <br /> + +releaseinfo = <div class="release-info">( +/releaseinfo = )</div> + +simpara = +/simpara = <br /> +simpara! = 0 + +subscript = sub + +superscript = super + +table = table + +table->colsep = rules +table->rowsep = rules +table->colsep+1|rowsep+1 =all +table->colsep+1|rowsep+0 =cols +table->colsep+0|rowsep+1 =rows + +table->frame =frame +table->frame+all =border +table->frame+none =void +table->frame+sides =vsides +table->frame+top =above +table->frame+topbot =hsides + +thead = thead + +tfoot = tfoot + +tbody = tbody + +colspec = col + +tgroup = colgroup +tgroup/ = 1 +tgroup->cols = span + +row = tr + +entry = td +entry->morerows = colspan +entry->morerows+1 =2 +entry->morerows+2 =3 +entry->morerows+3 =4 +entry->morerows+4 =5 +entry->morerows+5 =6 +entry->morerows+6 =7 +entry->morerows+7 =8 +entry->morerows+8 =9 +entry->morerows+9 =10 +entry->morerows+10 =11 +;; add more if you need more colspans + +warning = <span class="warning"> +/warning = </span> +warning! = 0 + +;; now begins the attributes that should be tags in cdata +[$attr$id] +open = a +;close = /a +cdata! = true +quotevalues = true +separator = "=" +;separateall = true +$id = name + +;; now begins the sections that deal with <title> +[refsynopsisdiv_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h1 class="title"> +close = </h1> + +[refsect1_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h2 class="title"> +close = </h2> + +[refsect2_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h3 class="title"> +close = </h3> + +[refsect3_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h4 class="title"> +close = </h4> + +[para_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <div class="title"> +close = </div> + +[formalpara_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <div class="title"> +close = </div> + +[example_title] +;tag_attr = true +;attr_name = title +;cdata_start = true +cdata_end = true +open = </td></tr><tr><td><strong> +close = </strong> + +[table_title] +;tag_attr = true +;attr_name = true +cdata_start = true +open = <caption> +close = </caption> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/basicindex.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/basicindex.tpl new file mode 100755 index 00000000..951ee264 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/basicindex.tpl @@ -0,0 +1,47 @@ +<div class="index-letter-menu"> +{section name=letter loop=$letters} + <a class="index-letter" href="{$indexname}.html#{$letters[letter].letter}">{$letters[letter].letter}</a> +{/section} +</div> + +{section name=index loop=$index} + <a name="{$index[index].letter}"></a> + <div class="index-letter-section"> + <div style="float: left" class="index-letter-title">{$index[index].letter}</div> + <div style="float: right"><a href="#top">top</a></div> + <div style="clear: both"></div> + </div> + <dl> + {section name=contents loop=$index[index].index} + <dt class="field"> + {if ($index[index].index[contents].title == "Variable")} + <span class="var-title">{$index[index].index[contents].name}</span> + {elseif ($index[index].index[contents].title == "Global")} + <span class="var-title">{$index[index].index[contents].name}</span> + {elseif ($index[index].index[contents].title == "Method")} + <span class="method-title">{$index[index].index[contents].name}</span> + {elseif ($index[index].index[contents].title == "Function")} + <span class="method-title">{$index[index].index[contents].name}</span> + {elseif ($index[index].index[contents].title == "Constant")} + <span class="const-title">{$index[index].index[contents].name}</span> + {elseif ($index[index].index[contents].title == "Page") || ($index[index].index[contents].title == "Include")} + <span class="include-title">{$index[index].index[contents].name}</span> + {else} + {$index[index].index[contents].name} + {/if} + </dt> + <dd class="index-item-body"> + <div class="index-item-details">{$index[index].index[contents].link} in {$index[index].index[contents].file_name}</div> + {if $index[index].index[contents].description} + <div class="index-item-description">{$index[index].index[contents].description}</div> + {/if} + </dd> + {/section} + </dl> +{/section} + +<div class="index-letter-menu"> +{section name=letter loop=$letters} + <a class="index-letter" href="{$indexname}.html#{$letters[letter].letter}">{$letters[letter].letter}</a> +{/section} +</div> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/blank.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/blank.tpl new file mode 100755 index 00000000..6a05f27e --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/blank.tpl @@ -0,0 +1,13 @@ +<html> +<head> + <title>{$maintitle}</title> + <link rel="stylesheet" href="{$subdir}media/stylesheet.css" /> + <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/> +</head> +<body> +<div align="center"><h1>{$maintitle}</h1></div> +<b>Welcome to {$package}!</b><br /> +<br /> +This documentation was generated by <a href="{$phpdocwebsite}">phpDocumentor v{$phpdocversion}</a><br /> +</body> +</html>
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/class.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/class.tpl new file mode 100755 index 00000000..9ab7c455 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/class.tpl @@ -0,0 +1,429 @@ +{include file="header.tpl" top3=true} + +<h2 class="class-name">{if $is_interface}Interface{else}Class{/if} {$class_name}</h2> + +<a name="sec-description"></a> +<div class="info-box"> + <div class="info-box-title">Description</div> + <div class="nav-bar"> + {if $children || $vars || $ivars || $methods || $imethods || $consts || $iconsts } + <span class="disabled">Description</span> | + {/if} + {if $children} + <a href="#sec-descendents">Descendents</a> + {if $vars || $ivars || $methods || $imethods || $consts || $iconsts}|{/if} + {/if} + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + {if $methods || $imethods}|{/if} + {/if} + {if $methods || $imethods} + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + {if $implements} + <p class="implements"> + Implements interfaces: + <ul> + {foreach item="int" from=$implements}<li>{$int}</li>{/foreach} + </ul> + </p> + {/if} + {include file="docblock.tpl" type="class" sdesc=$sdesc desc=$desc} + <p class="notes"> + Located in <a class="field" href="{$page_link}">{$source_location}</a> (line <span class="field">{if $class_slink}{$class_slink}{else}{$line_number}{/if}</span>) + </p> + + {if $tutorial} + <hr class="separator" /> + <div class="notes">Tutorial: <span class="tutorial">{$tutorial}</span></div> + {/if} + + <pre>{section name=tree loop=$class_tree.classes}{$class_tree.classes[tree]}{$class_tree.distance[tree]}{/section}</pre> + + {if $conflicts.conflict_type} + <hr class="separator" /> + <div><span class="warning">Conflicts with classes:</span><br /> + {section name=me loop=$conflicts.conflicts} + {$conflicts.conflicts[me]}<br /> + {/section} + </div> + {/if} + </div> +</div> + +{if $children} + <a name="sec-descendents"></a> + <div class="info-box"> + <div class="info-box-title">Direct descendents</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + <span class="disabled">Descendents</span> + {if $vars || $ivars || $methods || $imethods}|{/if} + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + {if $methods || $imethods}|{/if} + {/if} + {if $methods || $imethods} + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + <table cellpadding="2" cellspacing="0" class="class-table"> + <tr> + <th class="class-table-header">Class</th> + <th class="class-table-header">Description</th> + </tr> + {section name=kids loop=$children} + <tr> + <td style="padding-right: 2em">{$children[kids].link}</td> + <td> + {if $children[kids].sdesc} + {$children[kids].sdesc} + {else} + {$children[kids].desc} + {/if} + </td> + </tr> + {/section} + </table> + </div> + </div> +{/if} + +{if $consts} + <a name="sec-const-summary"></a> + <div class="info-box"> + <div class="info-box-title">Class Constant Summary</span></div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendants</a> | + {/if} + <span class="disabled">Constants</span> (<a href="#sec-consts">details</a>) + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + | + {/if} + {if $methods || $imethods} + | + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + <div class="const-summary"> + {section name=consts loop=$consts} + <div class="const-title"> + <img src="{$subdir}media/images/Constant.png" alt=" " /> + <a href="#{$consts[consts].const_name}" title="details" class="const-name">{$consts[consts].const_name}</a> = <span class="var-type">{$consts[consts].const_value}</span> + + </div> + {/section} + </div> + </div> + </div> +{/if} + +{if $vars} + <a name="sec-var-summary"></a> + <div class="info-box"> + <div class="info-box-title">Variable Summary</span></div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendents</a> | + {/if} + <span class="disabled">Vars</span> (<a href="#sec-vars">details</a>) + {if $methods || $imethods} + | + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + <div class="var-summary"> + {section name=vars loop=$vars} + {if $vars[vars].static} + <div class="var-title"> + static <span class="var-type">{$vars[vars].var_type}</span> + <a href="#{$vars[vars].var_name}" title="details" class="var-name">{$vars[vars].var_name}</a> + </div> + {/if} + {/section} + {section name=vars loop=$vars} + {if !$vars[vars].static} + <div class="var-title"> + <span class="var-type">{$vars[vars].var_type}</span> + <a href="#{$vars[vars].var_name}" title="details" class="var-name">{$vars[vars].var_name}</a> + </div> + {/if} + {/section} + </div> + </div> + </div> +{/if} + +{if $methods} + <a name="sec-method-summary"></a> + <div class="info-box"> + <div class="info-box-title">Method Summary</span></div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendents</a> | + {/if} + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + | + {/if} + <span class="disabled">Methods</span> (<a href="#sec-methods">details</a>) + </div> + <div class="info-box-body"> + <div class="method-summary"> + {section name=methods loop=$methods} + {if $methods[methods].static} + <div class="method-definition"> + static {if $methods[methods].function_return} + <span class="method-result">{$methods[methods].function_return}</span> + {/if} + <a href="#{$methods[methods].function_name}" title="details" class="method-name">{if $methods[methods].ifunction_call.returnsref}&{/if}{$methods[methods].function_name}</a> + {if count($methods[methods].ifunction_call.params)} + ({section name=params loop=$methods[methods].ifunction_call.params}{if $smarty.section.params.iteration != 1}, {/if}{if $methods[methods].ifunction_call.params[params].hasdefault}[{/if}<span class="var-type">{$methods[methods].ifunction_call.params[params].type}</span> <span class="var-name">{$methods[methods].ifunction_call.params[params].name}</span>{if $methods[methods].ifunction_call.params[params].hasdefault} = <span class="var-default">{$methods[methods].ifunction_call.params[params].default}</span>]{/if}{/section}) + {else} + () + {/if} + </div> + {/if} + {/section} + {section name=methods loop=$methods} + {if !$methods[methods].static} + <div class="method-definition"> + {if $methods[methods].function_return} + <span class="method-result">{$methods[methods].function_return}</span> + {/if} + <a href="#{$methods[methods].function_name}" title="details" class="method-name">{if $methods[methods].ifunction_call.returnsref}&{/if}{$methods[methods].function_name}</a> + {if count($methods[methods].ifunction_call.params)} + ({section name=params loop=$methods[methods].ifunction_call.params}{if $smarty.section.params.iteration != 1}, {/if}{if $methods[methods].ifunction_call.params[params].hasdefault}[{/if}<span class="var-type">{$methods[methods].ifunction_call.params[params].type}</span> <span class="var-name">{$methods[methods].ifunction_call.params[params].name}</span>{if $methods[methods].ifunction_call.params[params].hasdefault} = <span class="var-default">{$methods[methods].ifunction_call.params[params].default}</span>]{/if}{/section}) + {else} + () + {/if} + </div> + {/if} + {/section} + </div> + </div> + </div> +{/if} + +{if $vars || $ivars} + <a name="sec-vars"></a> + <div class="info-box"> + <div class="info-box-title">Variables</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendents</a> | + {/if} + {if $methods} + <a href="#sec-var-summary">Vars</a> (<span class="disabled">details</span>) + {else} + <span class="disabled">Vars</span> + {/if} + + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + {if $methods || $imethods} + | + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + {include file="var.tpl"} + {if $ivars} + <h4>Inherited Variables</h4> + <A NAME='inherited_vars'><!-- --></A> + {section name=ivars loop=$ivars} + <p>Inherited from <span class="classname">{$ivars[ivars].parent_class}</span></p> + <blockquote> + {section name=ivars2 loop=$ivars[ivars].ivars} + <span class="var-title"> + <span class="var-name">{$ivars[ivars].ivars[ivars2].link}</span>{if $ivars[ivars].ivars[ivars2].ivar_sdesc}: {$ivars[ivars].ivars[ivars2].ivar_sdesc}{/if}<br> + </span> + {/section} + </blockquote> + {/section} + {/if} + </div> + </div> +{/if} + +{if $methods || $imethods} + <a name="sec-methods"></a> + <div class="info-box"> + <div class="info-box-title">Methods</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendents</a> | + {/if} + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + {/if} + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + {if $methods} + <a href="#sec-method-summary">Methods</a> (<span class="disabled">details</span>) + {else} + <span class="disabled">Methods</span> + {/if} + </div> + <div class="info-box-body"> + {include file="method.tpl"} + {if $imethods} + <h4>Inherited Methods</h4> + <a name='inherited_methods'><!-- --></a> + {section name=imethods loop=$imethods} + <!-- =========== Summary =========== --> + <p>Inherited From <span class="classname">{$imethods[imethods].parent_class}</span></p> + <blockquote> + {section name=im2 loop=$imethods[imethods].imethods} + <span class="method-name">{$imethods[imethods].imethods[im2].link}</span>{if $imethods[imethods].imethods[im2].ifunction_sdesc}: {$imethods[imethods].imethods[im2].ifunction_sdesc}{/if}<br> + {/section} + </blockquote> + {/section} + {/if} + </div> + </div> +{/if} + +{if $consts || $iconsts} + <a name="sec-consts"></a> + <div class="info-box"> + <div class="info-box-title">Class Constants</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendants</a> | + {/if} + {if $methods} + <a href="#sec-var-summary">Constants</a> (<span class="disabled">details</span>) + {else} + <span class="disabled">Constants</span> + {/if} + + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + {/if} + {if $methods || $imethods} + | + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + {include file="const.tpl"} + {if $iconsts} + <h4>Inherited Constants</h4> + <A NAME='inherited_vars'><!-- --></A> + {section name=iconsts loop=$iconsts} + <p>Inherited from <span class="classname">{$iconsts[iconsts].parent_class}</span></p> + <blockquote> + {section name=iconsts2 loop=$iconsts[iconsts].iconsts} + <img src="{$subdir}media/images/{if $iconsts[iconsts].iconsts[iconsts2].access == 'private'}PrivateVariable{else}Variable{/if}.png" /> + <span class="const-title"> + <span class="const-name">{$iconsts[iconsts].iconsts[iconsts2].link}</span>{if $iconsts[iconsts].iconsts[iconsts2].iconst_sdesc}: {$iconsts[iconsts].iconsts[iconsts2].iconst_sdesc}{/if}<br> + </span> + {/section} + </blockquote> + {/section} + {/if} + </div> + </div> +{/if} + +{include file="footer.tpl" top3=true} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/classtrees.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/classtrees.tpl new file mode 100755 index 00000000..952e6d50 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/classtrees.tpl @@ -0,0 +1,19 @@ +{include file="header.tpl" top1=true} + +<!-- Start of Class Data --> +<H2> + {$smarty.capture.title} +</H2> +{if $interfaces} +{section name=classtrees loop=$interfaces} +<h2>Root interface {$interfaces[classtrees].class}</h2> +{$interfaces[classtrees].class_tree} +{/section} +{/if} +{if $classtrees} +{section name=classtrees loop=$classtrees} +<h2>Root class {$classtrees[classtrees].class}</h2> +{$classtrees[classtrees].class_tree} +{/section} +{/if} +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/const.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/const.tpl new file mode 100644 index 00000000..c26ff92d --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/const.tpl @@ -0,0 +1,18 @@ +{section name=consts loop=$consts} +<a name="const{$consts[consts].const_name}" id="{$consts[consts].const_name}"><!-- --></A> +<div class="{cycle values="evenrow,oddrow"}"> + + <div class="const-header"> + <img src="{$subdir}media/images/{if $consts[consts].access == 'private'}PrivateVariable{else}Variable{/if}.png" /> + <span class="const-title"> + <span class="const-name">{$consts[consts].const_name}</span> + = <span class="const-default">{$consts[consts].const_value|replace:"\n":"<br />"}</span> + (line <span class="line-number">{if $consts[consts].slink}{$consts[consts].slink}{else}{$consts[consts].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$consts[consts].sdesc desc=$consts[consts].desc tags=$consts[consts].tags} + +</div> +{/section} + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/define.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/define.tpl new file mode 100755 index 00000000..0da5d864 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/define.tpl @@ -0,0 +1,24 @@ +{section name=def loop=$defines} +<a name="{$defines[def].define_link}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div> + <span class="const-title"> + <span class="const-name">{$defines[def].define_name}</span> = {$defines[def].define_value|replace:"\n":"<br />"} + (line <span class="line-number">{if $defines[def].slink}{$defines[def].slink}{else}{$defines[def].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$defines[def].sdesc desc=$defines[def].desc tags=$defines[def].tags} + + {if $globals[glob].global_conflicts.conflict_type} + <hr class="separator" /> + <div><span class="warning">Conflicts with constants:</span><br /> + {section name=me loop=$defines[def].define_conflicts.conflicts} + {$defines[def].define_conflicts.conflicts[me]}<br /> + {/section} + </div> + {/if} + +</div> +{/section}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/docblock.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/docblock.tpl new file mode 100755 index 00000000..783d5271 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/docblock.tpl @@ -0,0 +1,14 @@ +<!-- ========== Info from phpDoc block ========= --> +{if $sdesc} +<p class="short-description">{$sdesc}</p> +{/if} +{if $desc} +<p class="description">{$desc}</p> +{/if} +{if $tags} + <ul class="tags"> + {section name=tags loop=$tags} + <li><span class="field">{$tags[tags].keyword}:</span> {$tags[tags].data}</li> + {/section} + </ul> +{/if} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/elementindex.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/elementindex.tpl new file mode 100755 index 00000000..d5964f99 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/elementindex.tpl @@ -0,0 +1,12 @@ +{include file="header.tpl" noleftindex=true} +<a name="top"></a> +<h2>Full index</h2> +<h3>Package indexes</h3> +<ul> +{section name=p loop=$packageindex} + <li><a href="elementindex_{$packageindex[p].title}.html">{$packageindex[p].title}</a></li> +{/section} +</ul> +<br /> +{include file="basicindex.tpl" indexname="elementindex"} +{include file="footer.tpl"} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/errors.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/errors.tpl new file mode 100755 index 00000000..0f526584 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/errors.tpl @@ -0,0 +1,21 @@ +{include file="header.tpl" noleftindex=true} +{section name=files loop=$files} +<a href="#{$files[files].file}">{$files[files].file}</a><br> +{/section} +{foreach key=file item=issues from=$all} +<a name="{$file}"></a> +<h1>{$file}</h1> +{if count($issues.warnings)} +<h2>Warnings:</h2><br> +{section name=warnings loop=$issues.warnings} +<b>{$issues.warnings[warnings].name}</b> - {$issues.warnings[warnings].listing}<br> +{/section} +{/if} +{if count($issues.errors)} +<h2>Errors:</h2><br> +{section name=errors loop=$issues.errors} +<b>{$issues.errors[errors].name}</b> - {$issues.errors[errors].listing}<br> +{/section} +{/if} +{/foreach} +{include file="footer.tpl"} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/examplesource.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/examplesource.tpl new file mode 100755 index 00000000..8abf74ce --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/examplesource.tpl @@ -0,0 +1,6 @@ +{include file="header.tpl" title=$title} +<h1>{$title}</h1> +<div class="listing"> +{$source} +</div> +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/filesource.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/filesource.tpl new file mode 100755 index 00000000..239f7b41 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/filesource.tpl @@ -0,0 +1,8 @@ +{capture name="tutle"}File Source for {$name}{/capture} +{include file="header.tpl" title=$smarty.capture.tutle} +<h1>Source for file {$name}</h1> +<p>Documentation is available at {$docs}</p> +<div class="src-code"> +{$source} +</div> +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/footer.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/footer.tpl new file mode 100755 index 00000000..8d0f79db --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/footer.tpl @@ -0,0 +1,8 @@ +{if !$index} + <p class="notes" id="credit"> + Documentation generated on {$date} by <a href="{$phpdocwebsite}" target="_blank">phpDocumentor {$phpdocversion}</a> + </p> +{/if} + {if $top3}</div>{/if} +</body> +</html> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/function.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/function.tpl new file mode 100755 index 00000000..b6880059 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/function.tpl @@ -0,0 +1,44 @@ +{section name=func loop=$functions} +<a name="{$functions[func].function_dest}" id="{$functions[func].function_dest}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div> + <span class="method-title">{$functions[func].function_name}</span> (line <span class="line-number">{if $functions[func].slink}{$functions[func].slink}{else}{$functions[func].line_number}{/if}</span>) + </div> + + {include file="docblock.tpl" sdesc=$functions[func].sdesc desc=$functions[func].desc tags=$functions[func].tags params=$functions[func].params function=false} + + <div class="method-signature"> + <span class="method-result">{$functions[func].function_return}</span> + <span class="method-name"> + {if $functions[func].ifunction_call.returnsref}&{/if}{$functions[func].function_name} + </span> + {if count($functions[func].ifunction_call.params)} + ({section name=params loop=$functions[func].ifunction_call.params}{if $smarty.section.params.iteration != 1}, {/if}{if $functions[func].ifunction_call.params[params].hasdefault}[{/if}<span class="var-type">{$functions[func].ifunction_call.params[params].type}</span> <span class="var-name">{$functions[func].ifunction_call.params[params].name}</span>{if $functions[func].ifunction_call.params[params].hasdefault} = <span class="var-default">{$functions[func].ifunction_call.params[params].default|escape:"html"}</span>]{/if}{/section}) + {else} + () + {/if} + </div> + + {if $functions[func].params} + <ul class="parameters"> + {section name=params loop=$functions[func].params} + <li> + <span class="var-type">{$functions[func].params[params].datatype}</span> + <span class="var-name">{$functions[func].params[params].var}</span>{if $functions[func].params[params].data}<span class="var-description">: {$functions[func].params[params].data}</span>{/if} + </li> + {/section} + </ul> + {/if} + + {if $functions[func].function_conflicts.conflict_type} + <hr class="separator" /> + <div><span class="warning">Conflicts with functions:</span><br /> + {section name=me loop=$functions[func].function_conflicts.conflicts} + {$functions[func].function_conflicts.conflicts[me]}<br /> + {/section} + </div> + {/if} + +</div> +{/section} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/global.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/global.tpl new file mode 100755 index 00000000..eab7e0b0 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/global.tpl @@ -0,0 +1,26 @@ +{section name=glob loop=$globals} +<a name="{$globals[glob].global_link}" id="{$globals[glob].global_link}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div> + <span class="var-title"> + <span class="var-type">{$globals[glob].global_type}</span> + <span class="var-name">{$globals[glob].global_name}</span> + {if $vars[vars].var_default} = <span class="var-default">{$globals[glob].global_value|replace:"\n":"<br />"}</span>{/if} + (line <span class="line-number">{if $globals[glob].slink}{$globals[glob].slink}{else}{$globals[glob].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$globals[glob].sdesc desc=$globals[glob].desc tags=$globals[glob].tags} + + {if $globals[glob].global_conflicts.conflict_type} + <hr class="separator" /> + <div><span class="warning">Conflicts with global variables:</span><br /> + {section name=me loop=$globals[glob].global_conflicts.conflicts} + {$globals[glob].global_conflicts.conflicts[me]}<br /> + {/section} + </div> + {/if} + +</div> +{/section}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/header.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/header.tpl new file mode 100755 index 00000000..cd34cf9f --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/header.tpl @@ -0,0 +1,99 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> + <html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <!-- template designed by Marco Von Ballmoos --> + <title>{$title}</title> + <link rel="stylesheet" href="{$subdir}media/stylesheet.css" /> + {if $top2 || $top3} + <script src="{$subdir}media/lib/classTree.js"></script> + {/if} + {if $top2} + <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/> + <link rel="stylesheet" href="{$subdir}media/banner.css" /> + <style> + body {ldelim} padding: 1em {rdelim} + </style> + {/if} + {if $top3 || $top2} + <script language="javascript" type="text/javascript"> + var imgPlus = new Image(); + var imgMinus = new Image(); + imgPlus.src = "{$subdir}media/images/plus.png"; + imgMinus.src = "{$subdir}media/images/minus.png"; + + function showNode(Node){ldelim} + switch(navigator.family){ldelim} + case 'nn4': + // Nav 4.x code fork... + var oTable = document.layers["span" + Node]; + var oImg = document.layers["img" + Node]; + break; + case 'ie4': + // IE 4/5 code fork... + var oTable = document.all["span" + Node]; + var oImg = document.all["img" + Node]; + break; + case 'gecko': + // Standards Compliant code fork... + var oTable = document.getElementById("span" + Node); + var oImg = document.getElementById("img" + Node); + break; + {rdelim} + oImg.src = imgMinus.src; + oTable.style.display = "block"; + {rdelim} + + function hideNode(Node){ldelim} + switch(navigator.family){ldelim} + case 'nn4': + // Nav 4.x code fork... + var oTable = document.layers["span" + Node]; + var oImg = document.layers["img" + Node]; + break; + case 'ie4': + // IE 4/5 code fork... + var oTable = document.all["span" + Node]; + var oImg = document.all["img" + Node]; + break; + case 'gecko': + // Standards Compliant code fork... + var oTable = document.getElementById("span" + Node); + var oImg = document.getElementById("img" + Node); + break; + {rdelim} + oImg.src = imgPlus.src; + oTable.style.display = "none"; + {rdelim} + + function nodeIsVisible(Node){ldelim} + switch(navigator.family){ldelim} + case 'nn4': + // Nav 4.x code fork... + var oTable = document.layers["span" + Node]; + break; + case 'ie4': + // IE 4/5 code fork... + var oTable = document.all["span" + Node]; + break; + case 'gecko': + // Standards Compliant code fork... + var oTable = document.getElementById("span" + Node); + break; + {rdelim} + return (oTable && oTable.style.display == "block"); + {rdelim} + + function toggleNodeVisibility(Node){ldelim} + if (nodeIsVisible(Node)){ldelim} + hideNode(Node); + {rdelim}else{ldelim} + showNode(Node); + {rdelim} + {rdelim} + </script> + {/if} + </head> + <body> + {if $top3}<div class="page-body">{/if} + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/include.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/include.tpl new file mode 100755 index 00000000..c2419e5f --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/include.tpl @@ -0,0 +1,16 @@ +{section name=includes loop=$includes} +<a name="{$includes[includes].include_file}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div> + <span class="include-title"> + <span class="include-type">{$includes[includes].include_name}</span> + (<span class="include-name">{$includes[includes].include_value}</span>) + (line <span class="line-number">{if $includes[includes].slink}{$includes[includes].slink}{else}{$includes[includes].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$includes[includes].sdesc desc=$includes[includes].desc tags=$includes[includes].tags} + +</div> +{/section}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/index.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/index.tpl new file mode 100755 index 00000000..7cd61094 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/index.tpl @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE html + PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//FR" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"> + <html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <!-- Generated by phpDocumentor on {$date} --> + <title>{$title}</title> + <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/> +</head> + +<FRAMESET rows='120,*'> + <FRAME src='packages.html' name='left_top' frameborder="1" bordercolor="#999999"> + <FRAMESET cols='25%,*'> + <FRAME src='{$start}' name='left_bottom' frameborder="1" bordercolor="#999999"> + <FRAME src='{$blank}.html' name='right' frameborder="1" bordercolor="#999999"> + </FRAMESET> + <NOFRAMES> + <H2>Frame Alert</H2> + <P>This document is designed to be viewed using the frames feature. + If you see this message, you are using a non-frame-capable web client.</P> + </NOFRAMES> +</FRAMESET> +</HTML> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/left_frame.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/left_frame.tpl new file mode 100755 index 00000000..2072566d --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/left_frame.tpl @@ -0,0 +1,198 @@ +{include file="header.tpl" top2=true} +<h3 class="package-title">{$info.0.package}</h3> +<div class="tree"> +<script language="Javascript"> +if (document.getElementById) {ldelim} +{section name=p loop=$info} + {if $info[p].subpackage == ""} + var tree = new WebFXTree('<span class="package">{$info.0.package}</span>'); + tree.setBehavior('classic'); + + {if $hastodos} + var todos = new WebFXTreeItem('To-do List', '{$todolink}'); + tree.add(todos); + {/if} + + var class_trees = new WebFXTreeItem('Class trees', '{$classtreepage}.html'); + tree.add(class_trees); + + var elements = new WebFXTreeItem('Index of elements', '{$elementindex}.html'); + tree.add(elements); + + var parent_node; + + {if $info[p].tutorials} + var tree_tutorial = new WebFXTreeItem('Tutorial(s)/Manual(s)', ''); + tree.add(tree_tutorial); + + {if $info[p].tutorials.pkg} + var tree_inner_tutorial = new WebFXTreeItem('Package-level', ''); + tree_tutorial.add(tree_inner_tutorial); + + parent_node = tree_inner_tutorial; + {section name=ext loop=$info[p].tutorials.pkg} + {$info[p].tutorials.pkg[ext]} + {/section} + {/if} + + {if $info[p].tutorials.cls} + var tree_inner_tutorial = new WebFXTreeItem('Class-level', ''); + tree_tutorial.add(tree_inner_tutorial); + + parent_node = tree_inner_tutorial; + {section name=ext loop=$info[p].tutorials.cls} + {$info[p].tutorials.cls[ext]} + {/section} + {/if} + + {if $info[p].tutorials.proc} + var tree_inner_tutorial = new WebFXTreeItem('Function-level', ''); + tree_tutorial.add(tree_inner_tutorial); + + parent_node = tree_inner_tutorial; + {section name=ext loop=$info[p].tutorials.proc} + {$info[p].tutorials.proc[ext]} + {/section} + {/if} + {/if} + + {if $info[p].hasinterfaces} + {if $info[p].classes} + var tree_classe = new WebFXTreeItem('Interface(s)', '{$packagedoc}'); + + {section name=class loop=$info[p].classes} + {if $info[p].classes[class].is_interface} + var classe = new WebFXTreeItem('{$info[p].classes[class].title|escape:"quotes"}', '{$info[p].classes[class].link|escape:"quotes"}'); + tree_classe.add(classe); + {/if} + {/section} + + tree.add(tree_classe); + {/if} + {/if} + {if $info[p].hasclasses} + {if $info[p].classes} + var tree_classe = new WebFXTreeItem('Class(es)', '{$packagedoc}'); + + {section name=class loop=$info[p].classes} + {if $info[p].classes[class].is_class} + var classe = new WebFXTreeItem('{$info[p].classes[class].title|escape:"quotes"}', '{$info[p].classes[class].link|escape:"quotes"}'); + tree_classe.add(classe); + {/if} + {/section} + + tree.add(tree_classe); + {/if} + {/if} + + {if $info[p].functions} + var tree_function = new WebFXTreeItem('Function(s)', '{$packagedoc}'); + + {section name=nonclass loop=$info[p].functions} + var fic = new WebFXTreeItem('{$info[p].functions[nonclass].title|escape:"quotes"}', '{$info[p].functions[nonclass].link|escape:"quotes"}'); + tree_function.add(fic); + {/section} + + tree.add(tree_function); + {/if} + + {if $info[p].files} + var tree_file = new WebFXTreeItem('File(s)', '{$packagedoc|escape:"quotes"}'); + + {section name=nonclass loop=$info[p].files} + var file = new WebFXTreeItem('{$info[p].files[nonclass].title|escape:"quotes"}', '{$info[p].files[nonclass].link|escape:"quotes"}'); + tree_file.add(file); + {/section} + + tree.add(tree_file); + {/if} + + {else} + {if $info[p].subpackagetutorial} + var subpackagetree = new WebFXTreeItem('<span class="sub-package">{$info[p].subpackagetutorialtitle|strip_tags|escape:"quotes"}</span>', '{$info[p].subpackagetutorialnoa}'); + {else} + var subpackagetree = new WebFXTreeItem('<span class="sub-package">{$info[p].subpackage}</span>', '{$packagedoc|escape:"quotes"}'); + {/if} + + {if $info[p].tutorials} + var tree_tutorial = new WebFXTreeItem('Tutorial(s)/Manual(s)', ''); + tree.add(tree_tutorial); + + {if $info[p].tutorials.pkg} + var tree_inner_tutorial = new WebFXTreeItem('Package-level', ''); + tree_tutorial.add(tree_inner_tutorial); + + parent_node = tree_inner_tutorial; + {section name=ext loop=$info[p].tutorials.pkg} + {$info[p].tutorials.pkg[ext]} + {/section} + {/if} + + {if $info[p].tutorials.cls} + var tree_inner_tutorial = new WebFXTreeItem('Class-level', ''); + tree_tutorial.add(tree_inner_tutorial); + + parent_node = tree_inner_tutorial; + {section name=ext loop=$info[p].tutorials.cls} + {$info[p].tutorials.cls[ext]} + {/section} + {/if} + + {if $info[p].tutorials.proc} + var tree_inner_tutorial = new WebFXTreeItem('Function-level', ''); + tree_tutorial.add(tree_inner_tutorial); + + parent_node = tree_inner_tutorial; + {section name=ext loop=$info[p].tutorials.proc} + {$info[p].tutorials.proc[ext]} + {/section} + {/if} + {/if} + + {if $info[p].classes} + var subpackagetree_classe = new WebFXTreeItem('Class(es)', '{$packagedoc|escape:"quotes"}'); + + {section name=class loop=$info[p].classes} + var classe = new WebFXTreeItem('{$info[p].classes[class].title|escape:"quotes"}', '{$info[p].classes[class].link|escape:"quotes"}'); + subpackagetree_classe.add(classe); + {/section} + + subpackagetree.add(subpackagetree_classe); + {/if} + + {if $info[p].functions} + var subpackagetree_function = new WebFXTreeItem('Function(s)', '{$packagedoc}'); + + {section name=nonclass loop=$info[p].functions} + var fic = new WebFXTreeItem('{$info[p].functions[nonclass].title|escape:"quotes"}', '{$info[p].functions[nonclass].link|escape:"quotes"}'); + subpackagetree_function.add(fic); + {/section} + + subpackagetree.add(subpackagetree_function); + {/if} + + {if $info[p].files} + var subpackagetree_file = new WebFXTreeItem('File(s)', '{$packagedoc|escape:"quotes"}'); + + {section name=nonclass loop=$info[p].files} + var file = new WebFXTreeItem('{$info[p].files[nonclass].title|escape:"quotes"}', '{$info[p].files[nonclass].link|escape:"quotes"}'); + subpackagetree_file.add(file); + {/section} + + subpackagetree.add(subpackagetree_file); + {/if} + + tree.add(subpackagetree); + {/if} +{/section} + +document.write(tree); +{rdelim} +</script> +</div> +<p class="notes"> + Generated by + <a href="{$phpdocwebsite}" target="_blank">phpDocumentor <span class="field">{$phpdocversion}</span></a> +</p> +</body> +</html> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/banner.css b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/banner.css new file mode 100755 index 00000000..4f7db5da --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/banner.css @@ -0,0 +1,32 @@ +body +{ + background: #EEEEEE url(bg_left.png) repeat; + margin: 0px; + padding: 0px; +} + +/* Banner (top bar) classes */ + +.banner { } + +.banner-menu +{ + clear: both; + padding: .5em; + border-top: 2px solid #999999; +} + +.banner-title +{ + text-align: right; + font-size: 20pt; + font-weight: bold; + margin: .2em; +} + +.package-selector +{ + background-color: #EEEEEE; + border: 1px solid black; + color: #0000C0; +} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/bg_left.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/bg_left.png Binary files differnew file mode 100755 index 00000000..1c331f09 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/bg_left.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/images/I.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/images/I.png Binary files differnew file mode 100755 index 00000000..e8512fb9 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/images/I.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/images/L.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/images/L.png Binary files differnew file mode 100755 index 00000000..eb334eda --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/images/L.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/images/Lminus.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/images/Lminus.png Binary files differnew file mode 100755 index 00000000..f7c43c0a --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/images/Lminus.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/images/Lplus.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/images/Lplus.png Binary files differnew file mode 100755 index 00000000..848ec2fc --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/images/Lplus.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/images/T.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/images/T.png Binary files differnew file mode 100755 index 00000000..30173254 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/images/T.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/images/Tminus.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/images/Tminus.png Binary files differnew file mode 100755 index 00000000..2260e424 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/images/Tminus.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/images/Tplus.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/images/Tplus.png Binary files differnew file mode 100755 index 00000000..2c8d8f4f --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/images/Tplus.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/images/blank.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/images/blank.png Binary files differnew file mode 100755 index 00000000..cee9cd37 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/images/blank.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/images/empty.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/images/empty.png Binary files differnew file mode 100755 index 00000000..d5683865 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/images/empty.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/lib/classTree.js b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/lib/classTree.js new file mode 100755 index 00000000..ebb3fb4a --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/lib/classTree.js @@ -0,0 +1,454 @@ +/*----------------------------------------\ +| Cross Browser Tree Widget 1.1 | +|-----------------------------------------| +| Created by Emil A. Eklund (eae@eae.net) | +| For WebFX (http://webfx.eae.net/) | +|-----------------------------------------| +| This script is provided as is without | +| any warranty whatsoever. It may be used | +| free of charge for non commerical sites | +| For commerical use contact the author | +| of this script for further details. | +|-----------------------------------------| +| Created 2000-12-11 | Updated 2001-09-06 | +\----------------------------------------*/ + +var webFXTreeConfig = { + rootIcon : 'media/images/empty.png', + openRootIcon : 'media/images/empty.png', + folderIcon : 'media/images/empty.png', + openFolderIcon : 'media/images/empty.png', + fileIcon : 'media/images/empty.png', + iIcon : 'media/images/I.png', + lIcon : 'media/images/L.png', + lMinusIcon : 'media/images/Lminus.png', + lPlusIcon : 'media/images/Lplus.png', + tIcon : 'media/images/T.png', + tMinusIcon : 'media/images/Tminus.png', + tPlusIcon : 'media/images/Tplus.png', + blankIcon : 'media/images/blank.png', + defaultText : 'Tree Item', + defaultAction : 'javascript:void(0);', + defaultTarget : 'right', + defaultBehavior : 'classic' +}; + +var webFXTreeHandler = { + idCounter : 0, + idPrefix : "webfx-tree-object-", + all : {}, + behavior : null, + selected : null, + getId : function() { return this.idPrefix + this.idCounter++; }, + toggle : function (oItem) { this.all[oItem.id.replace('-plus','')].toggle(); }, + select : function (oItem) { this.all[oItem.id.replace('-icon','')].select(); }, + focus : function (oItem) { this.all[oItem.id.replace('-anchor','')].focus(); }, + blur : function (oItem) { this.all[oItem.id.replace('-anchor','')].blur(); }, + keydown : function (oItem) { return this.all[oItem.id].keydown(window.event.keyCode); }, + cookies : new WebFXCookie() +}; + +/* + * WebFXCookie class + */ + +function WebFXCookie() { + if (document.cookie.length) { this.cookies = ' ' + document.cookie; } +} + +WebFXCookie.prototype.setCookie = function (key, value) { + document.cookie = key + "=" + escape(value); +} + +WebFXCookie.prototype.getCookie = function (key) { + if (this.cookies) { + var start = this.cookies.indexOf(' ' + key + '='); + if (start == -1) { return null; } + var end = this.cookies.indexOf(";", start); + if (end == -1) { end = this.cookies.length; } + end -= start; + var cookie = this.cookies.substr(start,end); + return unescape(cookie.substr(cookie.indexOf('=') + 1, cookie.length - cookie.indexOf('=') + 1)); + } + else { return null; } +} + +/* + * WebFXTreeAbstractNode class + */ + +function WebFXTreeAbstractNode(sText, sAction, sTarget) { + this.childNodes = []; + this.id = webFXTreeHandler.getId(); + this.text = sText || webFXTreeConfig.defaultText; + this.action = sAction || webFXTreeConfig.defaultAction; + this.targetWindow = sTarget || webFXTreeConfig.defaultTarget; + this._last = false; + webFXTreeHandler.all[this.id] = this; +} + +WebFXTreeAbstractNode.prototype.add = function (node) { + node.parentNode = this; + this.childNodes[this.childNodes.length] = node; + var root = this; + if (this.childNodes.length >=2) { + this.childNodes[this.childNodes.length -2]._last = false; + } + while (root.parentNode) { root = root.parentNode; } + if (root.rendered) { + if (this.childNodes.length >= 2) { + document.getElementById(this.childNodes[this.childNodes.length -2].id + '-plus').src = ((this.childNodes[this.childNodes.length -2].folder)?webFXTreeConfig.tMinusIcon:webFXTreeConfig.tIcon); + if (this.childNodes[this.childNodes.length -2].folder) { + this.childNodes[this.childNodes.length -2].plusIcon = webFXTreeConfig.tPlusIcon; + this.childNodes[this.childNodes.length -2].minusIcon = webFXTreeConfig.tMinusIcon; + } + this.childNodes[this.childNodes.length -2]._last = false; + } + this._last = true; + var foo = this; + while (foo.parentNode) { + for (var i = 0; i < foo.parentNode.childNodes.length; i++) { + if (foo.id == foo.parentNode.childNodes[i].id) { break; } + } + if (++i == foo.parentNode.childNodes.length) { foo.parentNode._last = true; } + else { foo.parentNode._last = false; } + foo = foo.parentNode; + } + document.getElementById(this.id + '-cont').insertAdjacentHTML("beforeEnd", node.toString()); + if ((!this.folder) && (!this.openIcon)) { + this.icon = webFXTreeConfig.folderIcon; + this.openIcon = webFXTreeConfig.openFolderIcon; + } + this.folder = true; + this.indent(); + this.expand(); + } + return node; +} + +WebFXTreeAbstractNode.prototype.toggle = function() { + if (this.folder) { + if (this.open) { this.collapse(); } + else { this.expand(); } + } +} + +WebFXTreeAbstractNode.prototype.select = function() { + document.getElementById(this.id + '-anchor').focus(); +} + +WebFXTreeAbstractNode.prototype.focus = function() { + webFXTreeHandler.selected = this; + if ((this.openIcon) && (webFXTreeHandler.behavior != 'classic')) { document.getElementById(this.id + '-icon').src = this.openIcon; } + document.getElementById(this.id + '-anchor').style.backgroundColor = 'highlight'; + document.getElementById(this.id + '-anchor').style.color = 'highlighttext'; + document.getElementById(this.id + '-anchor').focus(); +} + +WebFXTreeAbstractNode.prototype.blur = function() { + if ((this.openIcon) && (webFXTreeHandler.behavior != 'classic')) { document.getElementById(this.id + '-icon').src = this.icon; } + document.getElementById(this.id + '-anchor').style.backgroundColor = 'transparent'; + document.getElementById(this.id + '-anchor').style.color = 'menutext'; +} + +WebFXTreeAbstractNode.prototype.doExpand = function() { + if (webFXTreeHandler.behavior == 'classic') { document.getElementById(this.id + '-icon').src = this.openIcon; } + if (this.childNodes.length) { document.getElementById(this.id + '-cont').style.display = 'block'; } + this.open = true; + webFXTreeHandler.cookies.setCookie(this.id.substr(18,this.id.length - 18), '1'); +} + +WebFXTreeAbstractNode.prototype.doCollapse = function() { + if (webFXTreeHandler.behavior == 'classic') { document.getElementById(this.id + '-icon').src = this.icon; } + if (this.childNodes.length) { document.getElementById(this.id + '-cont').style.display = 'none'; } + this.open = false; + webFXTreeHandler.cookies.setCookie(this.id.substr(18,this.id.length - 18), '0'); +} + +WebFXTreeAbstractNode.prototype.expandAll = function() { + this.expandChildren(); + if ((this.folder) && (!this.open)) { this.expand(); } +} + +WebFXTreeAbstractNode.prototype.expandChildren = function() { + for (var i = 0; i < this.childNodes.length; i++) { + this.childNodes[i].expandAll(); +} } + +WebFXTreeAbstractNode.prototype.collapseAll = function() { + if ((this.folder) && (this.open)) { this.collapse(); } + this.collapseChildren(); +} + +WebFXTreeAbstractNode.prototype.collapseChildren = function() { + for (var i = 0; i < this.childNodes.length; i++) { + this.childNodes[i].collapseAll(); +} } + +WebFXTreeAbstractNode.prototype.indent = function(lvl, del, last, level) { + /* + * Since we only want to modify items one level below ourself, + * and since the rightmost indentation position is occupied by + * the plus icon we set this to -2 + */ + if (lvl == null) { lvl = -2; } + var state = 0; + for (var i = this.childNodes.length - 1; i >= 0 ; i--) { + state = this.childNodes[i].indent(lvl + 1, del, last, level); + if (state) { return; } + } + if (del) { + if (level >= this._level) { + if (this.folder) { + document.getElementById(this.id + '-plus').src = (this.open)?webFXTreeConfig.lMinusIcon:webFXTreeConfig.lPlusIcon; + this.plusIcon = webFXTreeConfig.lPlusIcon; + this.minusIcon = webFXTreeConfig.lMinusIcon; + } + else { document.getElementById(this.id + '-plus').src = webFXTreeConfig.lIcon; } + return 1; + } + } + var foo = document.getElementById(this.id + '-indent-' + lvl); + if (foo) { + if ((del) && (last)) { foo._last = true; } + if (foo._last) { foo.src = webFXTreeConfig.blankIcon; } + else { foo.src = webFXTreeConfig.iIcon; } + } + return 0; +} + +/* + * WebFXTree class + */ + +function WebFXTree(sText, sAction, sBehavior, sIcon, sOpenIcon) { + this.base = WebFXTreeAbstractNode; + this.base(sText, sAction); + this.icon = sIcon || webFXTreeConfig.rootIcon; + this.openIcon = sOpenIcon || webFXTreeConfig.openRootIcon; + /* Defaults to open */ + this.open = (webFXTreeHandler.cookies.getCookie(this.id.substr(18,this.id.length - 18)) == '0')?false:true; + this.folder = true; + this.rendered = false; + if (!webFXTreeHandler.behavior) { webFXTreeHandler.behavior = sBehavior || webFXTreeConfig.defaultBehavior; } + this.targetWindow = 'right'; +} + +WebFXTree.prototype = new WebFXTreeAbstractNode; + +WebFXTree.prototype.setBehavior = function (sBehavior) { + webFXTreeHandler.behavior = sBehavior; +}; + +WebFXTree.prototype.getBehavior = function (sBehavior) { + return webFXTreeHandler.behavior; +}; + +WebFXTree.prototype.getSelected = function() { + if (webFXTreeHandler.selected) { return webFXTreeHandler.selected; } + else { return null; } +} + +WebFXTree.prototype.remove = function() { } + +WebFXTree.prototype.expand = function() { + this.doExpand(); +} + +WebFXTree.prototype.collapse = function() { + this.focus(); + this.doCollapse(); +} + +WebFXTree.prototype.getFirst = function() { + return null; +} + +WebFXTree.prototype.getLast = function() { + return null; +} + +WebFXTree.prototype.getNextSibling = function() { + return null; +} + +WebFXTree.prototype.getPreviousSibling = function() { + return null; +} + +WebFXTree.prototype.keydown = function(key) { + if (key == 39) { this.expand(); return false; } + if (key == 37) { this.collapse(); return false; } + if ((key == 40) && (this.open)) { this.childNodes[0].select(); return false; } + return true; +} + +WebFXTree.prototype.toString = function() { + var str = "<div id=\"" + this.id + "\" ondblclick=\"webFXTreeHandler.toggle(this);\" class=\"webfx-tree-item\" onkeydown=\"return webFXTreeHandler.keydown(this)\">"; + str += "<img id=\"" + this.id + "-icon\" class=\"webfx-tree-icon\" src=\"" + ((webFXTreeHandler.behavior == 'classic' && this.open)?this.openIcon:this.icon) + "\" onclick=\"webFXTreeHandler.select(this);\"><a href=\"" + this.action + "\" id=\"" + this.id + "-anchor\" target=\"" + this.targetWindow + "\" onfocus=\"webFXTreeHandler.focus(this);\" onblur=\"webFXTreeHandler.blur(this);\">" + this.text + "</a></div>"; + str += "<div id=\"" + this.id + "-cont\" class=\"webfx-tree-container\" style=\"display: " + ((this.open)?'block':'none') + ";\">"; + for (var i = 0; i < this.childNodes.length; i++) { + str += this.childNodes[i].toString(i, this.childNodes.length); + } + str += "</div>"; + this.rendered = true; + return str; +}; + +/* + * WebFXTreeItem class + */ + +function WebFXTreeItem(sText, sAction, eParent, sIcon, sOpenIcon) { + this.base = WebFXTreeAbstractNode; + this.base(sText, sAction); + /* Defaults to close */ + this.open = (webFXTreeHandler.cookies.getCookie(this.id.substr(18,this.id.length - 18)) == '1')?true:false; + if (eParent) { eParent.add(this); } + if (sIcon) { this.icon = sIcon; } + if (sOpenIcon) { this.openIcon = sOpenIcon; } +} + +WebFXTreeItem.prototype = new WebFXTreeAbstractNode; + +WebFXTreeItem.prototype.remove = function() { + var parentNode = this.parentNode; + var prevSibling = this.getPreviousSibling(true); + var nextSibling = this.getNextSibling(true); + var folder = this.parentNode.folder; + var last = ((nextSibling) && (nextSibling.parentNode) && (nextSibling.parentNode.id == parentNode.id))?false:true; + this.getPreviousSibling().focus(); + this._remove(); + if (parentNode.childNodes.length == 0) { + parentNode.folder = false; + parentNode.open = false; + } + if (last) { + if (parentNode.id == prevSibling.id) { + document.getElementById(parentNode.id + '-icon').src = webFXTreeConfig.fileIcon; + } + else { } + } + if ((!prevSibling.parentNode) || (prevSibling.parentNode != parentNode)) { + parentNode.indent(null, true, last, this._level); + } + if (document.getElementById(prevSibling.id + '-plus')) { + if (nextSibling) { + if ((parentNode == prevSibling) && (parentNode.getNextSibling)) { document.getElementById(prevSibling.id + '-plus').src = webFXTreeConfig.tIcon; } + else if (nextSibling.parentNode != prevSibling) { document.getElementById(prevSibling.id + '-plus').src = webFXTreeConfig.lIcon; } + } + else { document.getElementById(prevSibling.id + '-plus').src = webFXTreeConfig.lIcon; } + } +} + +WebFXTreeItem.prototype._remove = function() { + for (var i = this.childNodes.length - 1; i >= 0; i--) { + this.childNodes[i]._remove(); + } + for (var i = 0; i < this.parentNode.childNodes.length; i++) { + if (this.id == this.parentNode.childNodes[i].id) { + for (var j = i; j < this.parentNode.childNodes.length; j++) { + this.parentNode.childNodes[i] = this.parentNode.childNodes[i+1] + } + this.parentNode.childNodes.length = this.parentNode.childNodes.length - 1; + if (i + 1 == this.parentNode.childNodes.length) { this.parentNode._last = true; } + } + } + webFXTreeHandler.all[this.id] = null; + if (document.getElementById(this.id)) { + document.getElementById(this.id).innerHTML = ""; + document.getElementById(this.id).removeNode(); + } +} + +WebFXTreeItem.prototype.expand = function() { + this.doExpand(); + document.getElementById(this.id + '-plus').src = this.minusIcon; +} + +WebFXTreeItem.prototype.collapse = function() { + this.focus(); + this.doCollapse(); + document.getElementById(this.id + '-plus').src = this.plusIcon; +} + +WebFXTreeItem.prototype.getFirst = function() { + return this.childNodes[0]; +} + +WebFXTreeItem.prototype.getLast = function() { + if (this.childNodes[this.childNodes.length - 1].open) { return this.childNodes[this.childNodes.length - 1].getLast(); } + else { return this.childNodes[this.childNodes.length - 1]; } +} + +WebFXTreeItem.prototype.getNextSibling = function() { + for (var i = 0; i < this.parentNode.childNodes.length; i++) { + if (this == this.parentNode.childNodes[i]) { break; } + } + if (++i == this.parentNode.childNodes.length) { return this.parentNode.getNextSibling(); } + else { return this.parentNode.childNodes[i]; } +} + +WebFXTreeItem.prototype.getPreviousSibling = function(b) { + for (var i = 0; i < this.parentNode.childNodes.length; i++) { + if (this == this.parentNode.childNodes[i]) { break; } + } + if (i == 0) { return this.parentNode; } + else { + if ((this.parentNode.childNodes[--i].open) || (b && this.parentNode.childNodes[i].folder)) { return this.parentNode.childNodes[i].getLast(); } + else { return this.parentNode.childNodes[i]; } +} } + +WebFXTreeItem.prototype.keydown = function(key) { + if ((key == 39) && (this.folder)) { + if (!this.open) { this.expand(); return false; } + else { this.getFirst().select(); return false; } + } + else if (key == 37) { + if (this.open) { this.collapse(); return false; } + else { this.parentNode.select(); return false; } + } + else if (key == 40) { + if (this.open) { this.getFirst().select(); return false; } + else { + var sib = this.getNextSibling(); + if (sib) { sib.select(); return false; } + } } + else if (key == 38) { this.getPreviousSibling().select(); return false; } + return true; +} + +WebFXTreeItem.prototype.toString = function (nItem, nItemCount) { + var foo = this.parentNode; + var indent = ''; + if (nItem + 1 == nItemCount) { this.parentNode._last = true; } + var i = 0; + while (foo.parentNode) { + foo = foo.parentNode; + indent = "<img id=\"" + this.id + "-indent-" + i + "\" src=\"" + ((foo._last)?webFXTreeConfig.blankIcon:webFXTreeConfig.iIcon) + "\">" + indent; + i++; + } + this._level = i; + if (this.childNodes.length) { this.folder = 1; } + else { this.open = false; } + if ((this.folder) || (webFXTreeHandler.behavior != 'classic')) { + if (!this.icon) { this.icon = webFXTreeConfig.folderIcon; } + if (!this.openIcon) { this.openIcon = webFXTreeConfig.openFolderIcon; } + } + else if (!this.icon) { this.icon = webFXTreeConfig.fileIcon; } + var label = this.text; + label = label.replace('<', '<'); + label = label.replace('>', '>'); + var str = "<div id=\"" + this.id + "\" ondblclick=\"webFXTreeHandler.toggle(this);\" class=\"webfx-tree-item\" onkeydown=\"return webFXTreeHandler.keydown(this)\">"; + str += indent; + str += "<img id=\"" + this.id + "-plus\" src=\"" + ((this.folder)?((this.open)?((this.parentNode._last)?webFXTreeConfig.lMinusIcon:webFXTreeConfig.tMinusIcon):((this.parentNode._last)?webFXTreeConfig.lPlusIcon:webFXTreeConfig.tPlusIcon)):((this.parentNode._last)?webFXTreeConfig.lIcon:webFXTreeConfig.tIcon)) + "\" onclick=\"webFXTreeHandler.toggle(this);\">" + str += "<img id=\"" + this.id + "-icon\" src=\"" + ((webFXTreeHandler.behavior == 'classic' && this.open)?this.openIcon:this.icon) + "\" onclick=\"webFXTreeHandler.select(this);\"><a href=\"" + this.action + "\" id=\"" + this.id + "-anchor\" target=\"" + this.targetWindow + "\" onfocus=\"webFXTreeHandler.focus(this);\" onblur=\"webFXTreeHandler.blur(this);\">" + label + "</a></div>"; + str += "<div id=\"" + this.id + "-cont\" class=\"webfx-tree-container\" style=\"display: " + ((this.open)?'block':'none') + ";\">"; + for (var i = 0; i < this.childNodes.length; i++) { + str += this.childNodes[i].toString(i,this.childNodes.length); + } + str += "</div>"; + this.plusIcon = ((this.parentNode._last)?webFXTreeConfig.lPlusIcon:webFXTreeConfig.tPlusIcon); + this.minusIcon = ((this.parentNode._last)?webFXTreeConfig.lMinusIcon:webFXTreeConfig.tMinusIcon); + return str; +}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/minus.gif b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/minus.gif Binary files differnew file mode 100755 index 00000000..f502662b --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/minus.gif diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/plus.gif b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/plus.gif Binary files differnew file mode 100755 index 00000000..eeca02ce --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/plus.gif diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/stylesheet.css b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/stylesheet.css new file mode 100755 index 00000000..3552b78f --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/stylesheet.css @@ -0,0 +1,196 @@ +a +{ + color: #336699; + text-decoration: underline; +} + +a:hover, a:active, a:focus +{ + text-decoration: underline; + color: #6699CC +} + +body { background : #FFFFFF; font-family: "Courier New", Courier, fixed; font-size: 10pt } +table { font-size: 10pt } +p, li { line-height: 140% } +a img { border: 0px; } +dd { margin-left: 0px; padding-left: 1em; } + +/* Page layout/boxes */ + +.info-box {} +.info-box-title { margin: 1em 0em 0em 0em; padding: .25em; font-weight: normal; font-size: 14pt; border: 1px solid #336699; background-color: #EEEEEE } +.info-box-body { border: 1px solid #999999; padding: .5em; } +.nav-bar { font-size: 8pt; white-space: nowrap; text-align: right; padding: .2em; margin: 0em 0em 1em 0em; } + +.oddrow { background-color: #F4F4F4; border: 1px solid #AAAAAA; padding: .5em; margin-bottom: 1em} +.evenrow { border: 1px solid #AAAAAA; padding: .5em; margin-bottom: 1em} + +.page-body { max-width: 800px; margin: auto; } +.menu-body { background: #EEEEEE url(bg_left.css) repeat } +.tree dl { margin: 0px } +.tree a { text-decoration: none } +.tree a:hover, .tree a:active, .tree a:focus { text-decoration: underline } + +/* Index formatting classes */ + +.index-item-body { margin-top: .5em; margin-bottom: .5em} +.index-item-description { margin-top: .25em } +.index-item-details { font-weight: normal; font-style: italic; font-size: 8pt } +.index-letter-section { background-color: #EEEEEE; border: 1px dotted #999999; padding: .5em; margin-bottom: 1em} +.index-letter-title { font-size: 12pt; font-weight: bold } +.index-letter-menu { text-align: center; margin: 1em } +.index-letter { font-size: 12pt } + +/* Docbook classes */ + +.description {} +.short-description { font-weight: bold; color: #666666; } +.tags { padding-left: 0em; margin-left: 3em; color: #666666; list-style-type: square; } +.parameters { padding-left: 0em; margin-left: 3em; font-style: italic; list-style-type: square; } +.redefinitions { font-size: 8pt; padding-left: 0em; margin-left: 2em; } +.package { } +.package-title { font-weight: bold; font-size: 14pt; border-bottom: 1px solid black } +.package-details { font-size: 85%; } +.sub-package { font-weight: bold; font-size: 120% } +.tutorial { border-width: thin; border-color: #0066ff } +.tutorial-nav-box { width: 100%; border: 1px solid #AAAAAA; background: #EEEEEE url(bg_left.png) repeat; } +.nav-button-disabled { color: #AAAAAA; } +.nav-button:active, +.nav-button:focus, +.nav-button:hover { background-color: #CCCCCC; outline: 1px solid #999999; text-decoration: none } +.folder-title { font-style: italic } + +/* Generic formatting */ + +.field { font-weight: bold; } +.detail { font-size: 8pt; } +.notes { font-style: italic; font-size: 8pt; } +.separator { background-color: #999999; height: 2px; } +.warning { color: #CC0000; } +.disabled { font-style: italic; color: #999999; } + +/* Code elements */ + +.line-number { } + +.class-table { width: 100%; } +.class-table-header { border-bottom: 1px dotted #666666; text-align: left; background-color: DDDDFF } +.class-name { color: #000000; font-weight: bold; } + +.method-summary { padding-left: 1em; font-size: 8pt } +.method-header { } +.method-definition { margin-bottom: .3em } +.method-title { font-weight: bold } +.method-name { font-weight: bold; } +.method-signature { font-size: 85%; color: #666666; margin: .5em 0em } +.method-result { font-style: italic; } + +.var-summary { padding-left: 1em; font-size: 8pt; } +.var-header { } +.var-title { margin-bottom: .3em } +.var-type { font-style: italic; border: 1px dashed #336699 } +.var-name { font-weight: bold; } +.var-default { border: 1px dashed #336699 } +.var-description { font-weight: normal; color: #000000; } + +.include-title { } +.include-type { font-style: italic; } +.include-name { font-weight: bold; } + +.const-title { } +.const-name { font-weight: bold; } + +/* Syntax highlighting */ + +.src-code { border: 1px solid #336699; padding: 1em; + font-family: 'Courier New', Courier, monospace; font-weight: normal; } +.src-line { font-family: 'Courier New', Courier, monospace; font-weight: normal; } + +.src-comm { color: green; } +.src-id { } +.src-inc { color: #0000FF; } +.src-key { color: #0000FF; } +.src-num { color: #CC0000; } +.src-str { color: #66cccc; } +.src-sym { font-weight: bold; } +.src-var { } + +.src-php { font-weight: bold; } + +.src-doc { color: #009999 } +.src-doc-close-template { color: #0000FF } +.src-doc-coretag { color: #0099FF; font-weight: bold } +.src-doc-inlinetag { color: #0099FF } +.src-doc-internal { color: #6699cc } +.src-doc-tag { color: #0080CC } +.src-doc-template { color: #0000FF } +.src-doc-type { font-style: italic } +.src-doc-var { font-style: italic } + +.tute-tag { color: #009999 } +.tute-attribute-name { color: #0000FF } +.tute-attribute-value { color: #0099FF } +.tute-entity { font-weight: bold; } +.tute-comment { font-style: italic } +.tute-inline-tag { color: #636311; font-weight: bold } + +/* tutorial */ + +.authors { } +.author { font-style: italic; font-weight: bold } +.author-blurb { margin: .5em 0em .5em 2em; font-size: 85%; font-weight: normal; font-style: normal } +.example { border: 1px solid #336699; background-color: #F4F4F4; padding: .5em; } +.listing { border: 1px solid #336699; background-color: #F4F4F4; padding: .5em; white-space: nowrap; } +.release-info { font-size: 85%; font-style: italic; margin: 1em 0em } +.ref-title-box { } +.ref-title { } +.ref-purpose { font-style: italic; color: #666666 } +.ref-synopsis { } +.title { font-weight: bold; border-bottom: 1px solid #336699; padding: 2px } +.cmd-synopsis { margin: 1em 0em } +.cmd-title { font-weight: bold } +.toc { margin-left: 2em; padding-left: 0em } + +/*------------------------------------------------------------------------------ + webfx-tree +------------------------------------------------------------------------------*/ + +.webfx-tree-container { + margin: 0px; + padding: 0px; + white-space: nowrap; + font: icon; +} + +.webfx-tree-item { + padding: 0px; + margin: 0px; + color: black; + white-space: nowrap; + font: icon; +} + +.webfx-tree-item a { + margin-left: 3px; + padding: 1px 2px 1px 2px; + color: black; + text-decoration: none; +} + +.webfx-tree-item a:hover, .webfx-tree-item a:active, .webfx-tree-item a:focus { + color: white; + background: #6699CC; + text-decoration: none +} + +.webfx-tree-item img { + vertical-align: middle; + border: 0px; +} + +.webfx-tree-icon { + width: 16px; + height: 16px; +} + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/method.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/method.tpl new file mode 100755 index 00000000..06d57a12 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/method.tpl @@ -0,0 +1,149 @@ +<A NAME='method_detail'></A> +{section name=methods loop=$methods} +{if $methods[methods].static} +<a name="method{$methods[methods].function_name}" id="{$methods[methods].function_name}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div class="method-header"> + <span class="method-title">static {$methods[methods].function_name}</span> (line <span class="line-number">{if $methods[methods].slink}{$methods[methods].slink}{else}{$methods[methods].line_number}{/if}</span>) + </div> + + {include file="docblock.tpl" sdesc=$methods[methods].sdesc desc=$methods[methods].desc tags=$methods[methods].tags params=$methods[methods].params function=false} + + <div class="method-signature"> + static <span class="method-result">{$methods[methods].function_return}</span> + <span class="method-name"> + {if $methods[methods].ifunction_call.returnsref}&{/if}{$methods[methods].function_name} + </span> + {if count($methods[methods].ifunction_call.params)} + ({section name=params loop=$methods[methods].ifunction_call.params}{if $smarty.section.params.iteration != 1}, {/if}{if $methods[methods].ifunction_call.params[params].hasdefault}[{/if}<span class="var-type">{$methods[methods].ifunction_call.params[params].type}</span> <span class="var-name">{$methods[methods].ifunction_call.params[params].name}</span>{if $methods[methods].ifunction_call.params[params].hasdefault} = <span class="var-default">{$methods[methods].ifunction_call.params[params].default}</span>]{/if}{/section}) + {else} + () + {/if} + </div> + + {if $methods[methods].params} + <ul class="parameters"> + {section name=params loop=$methods[methods].params} + <li> + <span class="var-type">{$methods[methods].params[params].datatype}</span> + <span class="var-name">{$methods[methods].params[params].var}</span>{if $methods[methods].params[params].data}<span class="var-description">: {$methods[methods].params[params].data}</span>{/if} + </li> + {/section} + </ul> + {/if} + + {if $methods[methods].method_overrides} + <hr class="separator" /> + <div class="notes">Redefinition of:</div> + <dl> + <dt>{$methods[methods].method_overrides.link}</dt> + {if $methods[methods].method_overrides.sdesc} + <dd>{$methods[methods].method_overrides.sdesc}</dd> + {/if} + </dl> + {/if} + {if $methods[methods].method_implements} + <hr class="separator" /> + <div class="notes">Implementation of:</div> + {section name=imp loop=$methods[methods].method_implements} + <dl> + <dt>{$methods[methods].method_implements[imp].link}</dt> + {if $methods[methods].method_implements[imp].sdesc} + <dd>{$methods[methods].method_implements[imp].sdesc}</dd> + {/if} + </dl> + {/section} + {/if} + + {if $methods[methods].descmethod} + <hr class="separator" /> + <div class="notes">Redefined in descendants as:</div> + <ul class="redefinitions"> + {section name=dm loop=$methods[methods].descmethod} + <li> + {$methods[methods].descmethod[dm].link} + {if $methods[methods].descmethod[dm].sdesc} + : {$methods[methods].descmethod[dm].sdesc} + {/if} + </li> + {/section} + </ul> + {/if} +</div> +{/if} +{/section} +{section name=methods loop=$methods} +{if !$methods[methods].static} +<a name="method{$methods[methods].function_name}" id="{$methods[methods].function_name}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div class="method-header"> + <span class="method-title">{if $methods[methods].ifunction_call.constructor}Constructor {elseif $methods[methods].ifunction_call.destructor}Destructor {/if}{$methods[methods].function_name}</span> (line <span class="line-number">{if $methods[methods].slink}{$methods[methods].slink}{else}{$methods[methods].line_number}{/if}</span>) + </div> + + {include file="docblock.tpl" sdesc=$methods[methods].sdesc desc=$methods[methods].desc tags=$methods[methods].tags params=$methods[methods].params function=false} + + <div class="method-signature"> + <span class="method-result">{$methods[methods].function_return}</span> + <span class="method-name"> + {if $methods[methods].ifunction_call.returnsref}&{/if}{$methods[methods].function_name} + </span> + {if count($methods[methods].ifunction_call.params)} + ({section name=params loop=$methods[methods].ifunction_call.params}{if $smarty.section.params.iteration != 1}, {/if}{if $methods[methods].ifunction_call.params[params].hasdefault}[{/if}<span class="var-type">{$methods[methods].ifunction_call.params[params].type}</span> <span class="var-name">{$methods[methods].ifunction_call.params[params].name}</span>{if $methods[methods].ifunction_call.params[params].hasdefault} = <span class="var-default">{$methods[methods].ifunction_call.params[params].default}</span>]{/if}{/section}) + {else} + () + {/if} + </div> + + {if $methods[methods].params} + <ul class="parameters"> + {section name=params loop=$methods[methods].params} + <li> + <span class="var-type">{$methods[methods].params[params].datatype}</span> + <span class="var-name">{$methods[methods].params[params].var}</span>{if $methods[methods].params[params].data}<span class="var-description">: {$methods[methods].params[params].data}</span>{/if} + </li> + {/section} + </ul> + {/if} + + {if $methods[methods].method_overrides} + <hr class="separator" /> + <div class="notes">Redefinition of:</div> + <dl> + <dt>{$methods[methods].method_overrides.link}</dt> + {if $methods[methods].method_overrides.sdesc} + <dd>{$methods[methods].method_overrides.sdesc}</dd> + {/if} + </dl> + {/if} + {if $methods[methods].method_implements} + <hr class="separator" /> + <div class="notes">Implementation of:</div> + {section name=imp loop=$methods[methods].method_implements} + <dl> + <dt>{$methods[methods].method_implements[imp].link}</dt> + {if $methods[methods].method_implements[imp].sdesc} + <dd>{$methods[methods].method_implements[imp].sdesc}</dd> + {/if} + </dl> + {/section} + {/if} + + {if $methods[methods].descmethod} + <hr class="separator" /> + <div class="notes">Redefined in descendants as:</div> + <ul class="redefinitions"> + {section name=dm loop=$methods[methods].descmethod} + <li> + {$methods[methods].descmethod[dm].link} + {if $methods[methods].descmethod[dm].sdesc} + : {$methods[methods].descmethod[dm].sdesc} + {/if} + </li> + {/section} + </ul> + {/if} +</div> +{/if} +{/section} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/page.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/page.tpl new file mode 100755 index 00000000..b5980236 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/page.tpl @@ -0,0 +1,211 @@ +{include file="header.tpl" top3=true} + +<h2 class="file-name">{$source_location}</h2> + +<a name="sec-description"></a> +<div class="info-box"> + <div class="info-box-title">Description</div> + <div class="nav-bar"> + {if $classes || $includes || $defines || $globals || $functions} + <span class="disabled">Description</span> | + {/if} + {if $classes} + <a href="#sec-classes">Classes</a> + {if $includes || $defines || $globals || $functions}|{/if} + {/if} + {if $includes} + <a href="#sec-includes">Includes</a> + {if $defines || $globals || $functions}|{/if} + {/if} + {if $defines} + <a href="#sec-constants">Constants</a> + {if $globals || $functions}|{/if} + {/if} + {if $globals} + <a href="#sec-variables">Variables</a> + {if $functions}|{/if} + {/if} + {if $functions} + <a href="#sec-functions">Functions</a> + {/if} + </div> + <div class="info-box-body"> + {include file="docblock.tpl" desc=$desc sdesc=$sdesc tags=$tags} + + {if $tutorial} + <hr class="separator" /> + <div class="notes">Tutorial: <span class="tutorial">{$tutorial}</div> + {/if} + </div> +</div> + +{if $classes} + <a name="sec-classes"></a> + <div class="info-box"> + <div class="info-box-title">Classes</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + <span class="disabled">Classes</span> + {if $includes || $defines || $globals || $functions}|{/if} + {if $includes} + <a href="#sec-includes">Includes</a> + {if $defines || $globals || $functions}|{/if} + {/if} + {if $defines} + <a href="#sec-constants">Constants</a> + {if $globals || $functions}|{/if} + {/if} + {if $globals} + <a href="#sec-variables">Variables</a> + {if $functions}|{/if} + {/if} + {if $functions} + <a href="#sec-functions">Functions</a> + {/if} + </div> + <div class="info-box-body"> + <table cellpadding="2" cellspacing="0" class="class-table"> + <tr> + <th class="class-table-header">Class</th> + <th class="class-table-header">Description</th> + </tr> + {section name=classes loop=$classes} + <tr> + <td style="padding-right: 2em; vertical-align: top"> + {$classes[classes].link} + </td> + <td> + {if $classes[classes].sdesc} + {$classes[classes].sdesc} + {else} + {$classes[classes].desc} + {/if} + </td> + </tr> + {/section} + </table> + </div> + </div> +{/if} + +{if $includes} + <a name="sec-includes"></a> + <div class="info-box"> + <div class="info-box-title">Includes</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $classes} + <a href="#sec-classes">Classes</a> + {if $includes || $defines || $globals || $functions}|{/if} + {/if} + <span class="disabled">Includes</span> + {if $defines || $globals || $functions}|{/if} + {if $defines} + <a href="#sec-constants">Constants</a> + {if $globals || $functions}|{/if} + {/if} + {if $globals} + <a href="#sec-variables">Variables</a> + {if $functions}|{/if} + {/if} + {if $functions} + <a href="#sec-functions">Functions</a> + {/if} + </div> + <div class="info-box-body"> + {include file="include.tpl"} + </div> + </div> +{/if} + +{if $defines} + <a name="sec-constants"></a> + <div class="info-box"> + <div class="info-box-title">Constants</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $classes} + <a href="#sec-classes">Classes</a> + {if $includes || $defines || $globals || $functions}|{/if} + {/if} + {if $includes} + <a href="#sec-includes">Includes</a> + {if $defines || $globals || $functions}|{/if} + {/if} + <span class="disabled">Constants</span> + {if $globals || $functions}|{/if} + {if $globals} + <a href="#sec-variables">Variables</a> + {if $functions}|{/if} + {/if} + {if $functions} + <a href="#sec-functions">Functions</a> + {/if} + </div> + <div class="info-box-body"> + {include file="define.tpl"} + </div> + </div> +{/if} + +{if $globals} + <a name="sec-variables"></a> + <div class="info-box"> + <div class="info-box-title">Variables</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $classes} + <a href="#sec-classes">Classes</a> + {if $includes || $defines || $globals || $functions}|{/if} + {/if} + {if $includes} + <a href="#sec-includes">Includes</a> + {if $defines || $globals || $functions}|{/if} + {/if} + {if $defines} + <a href="#sec-constants">Constants</a> + {if $globals || $functions}|{/if} + {/if} + <span class="disabled">Variables</span> + {if $functions}|{/if} + {if $functions} + <a href="#sec-functions">Functions</a> + {/if} + </div> + <div class="info-box-body"> + {include file="global.tpl"} + </div> + </div> +{/if} + +{if $functions} + <a name="sec-functions"></a> + <div class="info-box"> + <div class="info-box-title">Functions</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $classes} + <a href="#sec-classes">Classes</a> + {if $includes || $defines || $globals || $functions}|{/if} + {/if} + {if $includes} + <a href="#sec-includes">Includes</a> + {if $defines || $globals || $functions}|{/if} + {/if} + {if $defines} + <a href="#sec-constants">Constants</a> + {if $globals || $functions}|{/if} + {/if} + {if $globals} + <a href="#sec-variables">Variables</a> + {if $functions}|{/if} + {/if} + <span class="disabled">Functions</span> + </div> + <div class="info-box-body"> + {include file="function.tpl"} + </div> + </div> +{/if} + +{include file="footer.tpl" top3=true} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/pkgelementindex.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/pkgelementindex.tpl new file mode 100755 index 00000000..dc283ad0 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/pkgelementindex.tpl @@ -0,0 +1,17 @@ +{include file="header.tpl"} +<a name="top"></a> +<h2>[{$package}] element index</h2> +{if count($packageindex) > 1} + <h3>Package indexes</h3> + <ul> + {section name=p loop=$packageindex} + {if $packageindex[p].title != $package} + <li><a href="elementindex_{$packageindex[p].title}.html">{$packageindex[p].title}</a></li> + {/if} + {/section} + </ul> +{/if} +<a href="elementindex.html">All elements</a> +<br /> +{include file="basicindex.tpl" indexname=elementindex_$package} +{include file="footer.tpl"} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/ric.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/ric.tpl new file mode 100755 index 00000000..ad792475 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/ric.tpl @@ -0,0 +1,6 @@ +{include file="header.tpl"} +<div align="center"><h1>{$name}</h1></div> +<pre> +{$contents|htmlentities} +</pre> +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/todolist.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/todolist.tpl new file mode 100755 index 00000000..f929ccdb --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/todolist.tpl @@ -0,0 +1,14 @@ +{include file="header.tpl" title="Todo List"} +<div align="center"><h1>Todo List</h1></div> +{foreach from=$todos key=todopackage item=todo} +<h2>{$todopackage}</h2> +{section name=todo loop=$todo} +<h3>{$todo[todo].link}</h3> +<ul> +{section name=t loop=$todo[todo].todos} + <li>{$todo[todo].todos[t]}</li> +{/section} +</ul> +{/section} +{/foreach} +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/top_frame.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/top_frame.tpl new file mode 100755 index 00000000..36d1e5a1 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/top_frame.tpl @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> + <html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <!-- template designed by Marco Von Ballmoos --> + <title>{$title}</title> + <link rel="stylesheet" href="{$subdir}media/stylesheet.css" /> + <link rel="stylesheet" href="{$subdir}media/banner.css" /> + <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/> + </head> + <body> + <div class="banner"> + <div class="banner-title">{$package}</div> + <div class="banner-menu"> + <form> + <table cellpadding="0" cellspacing="0" style="width: 100%"> + <tr> + <td> + {if count($ric) >= 1} + {assign var="last_ric_name" value=""} + {section name=ric loop=$ric} + {if $last_ric_name != ""} | {/if} + <a href="{$ric[ric].file}" target="right">{$ric[ric].name}</a> + {assign var="last_ric_name" value=$ric[ric].name} + {/section} + {/if} + </td> + <td style="width: 2em"> </td> + <td style="text-align: right"> + {if count($packages) > 1} + <span class="field">Packages</span> + <select class="package-selector" onchange="window.parent.left_bottom.location=this[selectedIndex].value"> + {section name=p loop=$packages} + <option value="{$packages[p].link}">{$packages[p].title}</option> + {/section} + </select> + {/if} + </td> + </tr> + </table> + </form> + </div> + </div> + </body> + </html> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/tutorial.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/tutorial.tpl new file mode 100755 index 00000000..3b9109d1 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/tutorial.tpl @@ -0,0 +1,13 @@ +{include file="header.tpl" title=$title top3=true} + +{if $nav} + {include file="tutorial_nav.tpl" prev=$prev next=$next up=$up prevtitle=$prevtitle nexttitle=$nexttitle uptitle=$uptitle} +{/if} + +{$contents} + +{if $nav} + {include file="tutorial_nav.tpl" prev=$prev next=$next up=$up prevtitle=$prevtitle nexttitle=$nexttitle uptitle=$uptitle} +{/if} + +{include file="footer.tpl" top3=true}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/tutorial_nav.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/tutorial_nav.tpl new file mode 100755 index 00000000..89952301 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/tutorial_nav.tpl @@ -0,0 +1,41 @@ +<table class="tutorial-nav-box"> + <tr> + <td style="width: 30%"> + {if $prev} + <a href="{$prev}" class="nav-button">Previous</a> + {else} + <span class="nav-button-disabled">Previous</span> + {/if} + </td> + <td style="text-align: center"> + {if $up} + <a href="{$up}" class="nav-button">Up</a> + {/if} + </td> + <td style="text-align: right; width: 30%"> + {if $next} + <a href="{$next}" class="nav-button">Next</a> + {else} + <span class="nav-button-disabled">Next</span> + {/if} + </td> + </tr> + <tr> + <td style="width: 30%"> + {if $prevtitle} + <span class="detail">{$prevtitle}</span> + {/if} + </td> + <td style="text-align: center"> + {if $uptitle} + <span class="detail">{$uptitle}</span> + {/if} + </td> + <td style="text-align: right; width: 30%"> + {if $nexttitle} + <span class="detail">{$nexttitle}</span> + {/if} + </td> + </tr> +</table> +
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/tutorial_toc.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/tutorial_toc.tpl new file mode 100755 index 00000000..3482249b --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/tutorial_toc.tpl @@ -0,0 +1,40 @@ +{if count($toc)} +<h1 class="title">Table of Contents</h1> +<ul class="toc"> + {assign var="lastcontext" value='refsect1'} + {section name=toc loop=$toc} + + {if $toc[toc].tagname != $lastcontext} + {if $lastcontext == 'refsect1'} + <ul class="toc"> + <li>{$toc[toc].link}</li> + {else} + {if $lastcontext == 'refsect2'} + {if $toc[toc].tagname == 'refsect1'} + </ul> + <li>{$toc[toc].link}</li> + {/if} + {if $toc[toc].tagname == 'refsect3'} + <ul class="toc"> + <li>{$toc[toc].link}</li> + {/if} + {else} + </ul> + </ul> + <li>{$toc[toc].link}</li> + {/if} + {/if} + {assign var="lastcontext" value=$toc[toc].tagname} + {else} + <li>{$toc[toc].link}</li> + {/if} + {/section} + {if $lastcontext == 'refsect2'} + </ul> + {/if} + {if $lastcontext == 'refsect3'} + </ul> + </ul> + {/if} +</ul> +{/if} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/tutorial_tree.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/tutorial_tree.tpl new file mode 100755 index 00000000..40d9a4ff --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/tutorial_tree.tpl @@ -0,0 +1,8 @@ + var a{$name|replace:"-":"_"}node = new WebFXTreeItem('{$main.title|strip_tags|escape:"quotes"}','{$main.link}', parent_node); + +{if $haskids} + var a{$name|replace:"-":"_"}_old_parent_node = parent_node; + parent_node = a{$name|replace:"-":"_"}node; + {$kids} + parent_node = a{$name|replace:"-":"_"}_old_parent_node; +{/if} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/var.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/var.tpl new file mode 100755 index 00000000..fccf6892 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/var.tpl @@ -0,0 +1,92 @@ +{section name=vars loop=$vars} +{if $vars[vars].static} +<a name="var{$vars[vars].var_name}" id="{$vars[vars].var_name}"><!-- --></A> +<div class="{cycle values="evenrow,oddrow"}"> + + <div class="var-header"> + <span class="var-title"> + static <span class="var-type">{$vars[vars].var_type}</span> + <span class="var-name">{$vars[vars].var_name}</span> + {if $vars[vars].var_default} = <span class="var-default">{$vars[vars].var_default|replace:"\n":"<br />"}</span>{/if} + (line <span class="line-number">{if $vars[vars].slink}{$vars[vars].slink}{else}{$vars[vars].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$vars[vars].sdesc desc=$vars[vars].desc tags=$vars[vars].tags} + + {if $vars[vars].var_overrides} + <hr class="separator" /> + <div class="notes">Redefinition of:</div> + <dl> + <dt>{$vars[vars].var_overrides.link}</dt> + {if $vars[vars].var_overrides.sdesc} + <dd>{$vars[vars].var_overrides.sdesc}</dd> + {/if} + </dl> + {/if} + + {if $vars[vars].descvar} + <hr class="separator" /> + <div class="notes">Redefined in descendants as:</div> + <ul class="redefinitions"> + {section name=vm loop=$vars[vars].descvar} + <li> + {$vars[vars].descvar[vm].link} + {if $vars[vars].descvar[vm].sdesc} + : {$vars[vars].descvar[vm].sdesc} + {/if} + </li> + {/section} + </ul> + {/if} + +</div> +{/if} +{/section} + +{section name=vars loop=$vars} +{if !$vars[vars].static} +<a name="var{$vars[vars].var_name}" id="{$vars[vars].var_name}"><!-- --></A> +<div class="{cycle values="evenrow,oddrow"}"> + + <div class="var-header"> + <span class="var-title"> + <span class="var-type">{$vars[vars].var_type}</span> + <span class="var-name">{$vars[vars].var_name}</span> + {if $vars[vars].var_default} = <span class="var-default">{$vars[vars].var_default|replace:"\n":"<br />"}</span>{/if} + (line <span class="line-number">{if $vars[vars].slink}{$vars[vars].slink}{else}{$vars[vars].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$vars[vars].sdesc desc=$vars[vars].desc tags=$vars[vars].tags} + + {if $vars[vars].var_overrides} + <hr class="separator" /> + <div class="notes">Redefinition of:</div> + <dl> + <dt>{$vars[vars].var_overrides.link}</dt> + {if $vars[vars].var_overrides.sdesc} + <dd>{$vars[vars].var_overrides.sdesc}</dd> + {/if} + </dl> + {/if} + + {if $vars[vars].descvar} + <hr class="separator" /> + <div class="notes">Redefined in descendants as:</div> + <ul class="redefinitions"> + {section name=vm loop=$vars[vars].descvar} + <li> + {$vars[vars].descvar[vm].link} + {if $vars[vars].descvar[vm].sdesc} + : {$vars[vars].descvar[vm].sdesc} + {/if} + </li> + {/section} + </ul> + {/if} + +</div> +{/if} +{/section} + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/options.ini b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/options.ini new file mode 100755 index 00000000..084809be --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/options.ini @@ -0,0 +1,577 @@ +preservedocbooktags = false + +;; used to highlight the {@source} inline tag, @filesource tag, and @example tag +[highlightSourceTokens] +;; format: +;; T_CONSTANTNAME = open +;; /T_CONSTANTNAME = close + +T_INCLUDE = <span class="src-inc"> +/T_INCLUDE = </span> +T_INCLUDE_ONCE = <span class="src-inc"> +/T_INCLUDE_ONCE = </span> +T_REQUIRE_ONCE = <span class="src-inc"> +/T_REQUIRE_ONCE = </span> +T_REQUIRE_ONCE = <span class="src-inc"> +/T_REQUIRE_ONCE = </span> + +T_CONSTANT_ENCAPSED_STRING = <span class="src-str"> +/T_CONSTANT_ENCAPSED_STRING = </span> +T_STRING_VARNAME = <span class="src-str"> +/T_STRING_VARNAME = </span> + +T_STRING = <span class="src-id"> +/T_STRING = </span> + +T_DNUMBER = <span class="src-num"> +/T_DNUMBER = </span> +T_LNUMBER = <span class="src-num"> +/T_LNUMBER = </span> + +T_VARIABLE = <span class="src-var"> +/T_VARIABLE = </span> + +T_COMMENT = <span class="src-comm"> +/T_COMMENT = </span> +T_ML_COMMENT = <span class="src-comm"> +/T_ML_COMMENT = </span> + +T_OBJECT_OPERATOR = <span class="src-sym"> +/T_OBJECT_OPERATOR = </span> + +T_ABSTRACT = <span class="src-key"> +/T_ABSTRACT = </span> +T_CLONE = <span class="src-key"> +/T_CLONE = </span> +T_HALT_COMPILER = <span class="src-key"> +/T_HALT_COMPILER = </span> +T_ARRAY = <span class="src-key"> +/T_ARRAY = </span> +T_AS = <span class="src-key"> +/T_AS = </span> +T_BREAK = <span class="src-key"> +/T_BREAK = </span> +T_CLASS = <span class="src-key"> +/T_CLASS = </span> +T_CASE = <span class="src-key"> +/T_CASE = </span> +T_CONST = <span class="src-key"> +/T_CONST = </span> +T_CONTINUE = <span class="src-key"> +/T_CONTINUE = </span> +T_DECLARE = <span class="src-key"> +/T_DECLARE = </span> +T_DEFAULT = <span class="src-key"> +/T_DEFAULT = </span> +T_ELSE = <span class="src-key"> +/T_ELSE = </span> +T_ELSEIF = <span class="src-key"> +/T_ELSEIF = </span> +T_EMPTY = <span class="src-key"> +/T_EMPTY = </span> +T_ENDDECLARE = <span class="src-key"> +/T_ENDDECLARE = </span> +T_ENDFOR = <span class="src-key"> +/T_ENDFOR = </span> +T_ENDSWITCH = <span class="src-key"> +/T_ENDSWITCH = </span> +T_ENDFOREACH = <span class="src-key"> +/T_ENDFOREACH = </span> +T_ENDIF = <span class="src-key"> +/T_ENDIF = </span> +T_ENDWHILE = <span class="src-key"> +/T_ENDWHILE = </span> +T_EXIT = <span class="src-key"> +/T_EXIT = </span> +T_EXTENDS = <span class="src-key"> +/T_EXTENDS = </span> +T_FINAL = <span class="src-key"> +/T_FINAL = </span> +T_FOR = <span class="src-key"> +/T_FOR = </span> +T_FOREACH = <span class="src-key"> +/T_FOREACH = </span> +T_FUNCTION = <span class="src-key"> +/T_FUNCTION = </span> +T_GLOBAL = <span class="src-key"> +/T_GLOBAL = </span> +T_IF = <span class="src-key"> +/T_IF = </span> +T_IMPLEMENTS = <span class="src-key"> +/T_IMPLEMENTS = </span> +T_INTERFACE = <span class="src-key"> +/T_INTERFACE = </span> +T_LOGICAL_AND = <span class="src-key"> +/T_LOGICAL_AND = </span> +T_LOGICAL_OR = <span class="src-key"> +/T_LOGICAL_OR = </span> +T_LOGICAL_XOR = <span class="src-key"> +/T_LOGICAL_XOR = </span> +T_NEW = <span class="src-key"> +/T_NEW = </span> +T_PRIVATE = <span class="src-key"> +/T_PRIVATE = </span> +T_PROTECTED = <span class="src-key"> +/T_PROTECTED = </span> +T_PUBLIC = <span class="src-key"> +/T_PUBLIC = </span> +T_RETURN = <span class="src-key"> +/T_RETURN = </span> +T_STATIC = <span class="src-key"> +/T_STATIC = </span> +T_SWITCH = <span class="src-key"> +/T_SWITCH = </span> +T_VAR = <span class="src-key"> +/T_VAR = </span> +T_WHILE = <span class="src-key"> +/T_WHILE = </span> + +T_DOUBLE_COLON = <span class="src-sym"> +/T_DOUBLE_COLON = </span> + +T_OPEN_TAG = <span class="src-php"> +/T_OPEN_TAG = </span> +T_OPEN_TAG_WITH_ECHO = <span class="src-php"> +/T_OPEN_TAG_WITH_ECHO = </span> +T_CLOSE_TAG = <span class="src-php"> +/T_CLOSE_TAG = </span> + + +[highlightSource] +;; this is for highlighting things that aren't tokens like "&" +;; format: +;; word = open +;; /word = close +@ = <span class="src-sym"> +/@ = </span> +& = <span class="src-sym"> +/& = </span> +[ = <span class="src-sym"> +/[ = </span> +] = <span class="src-sym"> +/] = </span> +! = <span class="src-sym"> +/! = </span> +";" = <span class="src-sym"> +/; = </span> +( = <span class="src-sym"> +/( = </span> +) = <span class="src-sym"> +/) = </span> +, = <span class="src-sym"> +/, = </span> +{ = <span class="src-sym"> +/{ = </span> +} = <span class="src-sym"> +/} = </span> +""" = <span class="src-str"> +/" = </span> + +[highlightDocBlockSourceTokens] +;; this is for docblock tokens, using by phpDocumentor_HighlightParser +;; tagphptype is for "string" in @param string description, for example +docblock = <span class="src-doc"> +/docblock = </span> +tagphptype = <span class="src-doc-type"> +/tagphptype = </span> +tagvarname = <span class="src-doc-var"> +/tagvarname = </span> +coretag = <span class="src-doc-coretag"> +/coretag = </span> +tag = <span class="src-doc-tag"> +/tag = </span> +inlinetag = <span class="src-doc-inlinetag"> +/inlinetag = </span> +internal = <span class="src-doc-internal"> +/internal = </span> +closetemplate = <span class="src-doc-close-template"> +/closetemplate = </span> +docblocktemplate = <span class="src-doc-template"> +/docblocktemplate = </span> + +[highlightTutorialSourceTokens] +;; this is for XML DocBook-based tutorials, highlighted by phpDocumentor_TutorialHighlightParser +;; <tag> +opentag = <span class="tute-tag"> +/opentag = </span> +;; </tag> +closetag = <span class="tute-tag"> +/closetag = </span> +;; <tag attribute="value"> +attribute = <span class="tute-attribute-name"> +/attribute = </span> +;; <tag attribute="value"> +attributevalue = <span class="tute-attribute-value"> +/attributevalue = </span> +;; &entity; +entity = <span class="tute-entity"> +/entity = </span> +;; <!-- comment --> +comment = <span class="tute-comment"> +/comment = </span> +;; {@inline tag} +itag = <span class="tute-inline-tag"> +/itag = </span> + +;; used for translation of html in DocBlocks +[desctranslate] +ul = <ul> +/ul = </ul> +ol = <ol> +/ol = </ol> +li = <li> +/li = </li> +code = +/code = +var = <var> +/var = </var> +samp = <samp> +/samp = </samp> +kbd = <kbd> +/kbd = </kbd> +pre = <pre> +/pre = </pre> +p = <p> +/p = </p> +b = <strong> +/b = </strong> +i = <em> +/i = </em> +br = <br /> + +[ppage] +;; this is the DocBook package page translation section. All DocBook tags +;; that have a corresponding html tag must be listed here. Entities should +;; also be listed here +;; +;; examples: +;; 1) +;; tagname = newtagname +;; +;; This is the simplest case, where all attributes will be added into the +;; starting tag and the ending tag will be html/xml style </tranlatedtagname> +;; <tagname></tagname> becomes <newtagname></newtagname> and +;; <tagname attr="value"></tagname> becomes +;; <newtagname attr="value"></newtagname> +;; +;; 2) +;; tagname = newtagname +;; tagname->attr = newattrname +;; +;; in this case, everything will be like the first case, except tags like: +;; <tagname attr="value"></tagname> will become +;; <newtagname newattrname="value"></newtagname> +;; +;; 3) +;; tagname = newtagname +;; tagname->attr = newattrname +;; tagname->attr+value = newvalue +;; +;; in this case, the value is also translated to another. This can be useful +;; for instances such as focus="middle" changing to align="center" or something +;; of that nature. +;; <tagname attr="value"></tagname> will become +;; <newtagname newattrname="newvalue"></newtagname> +;; +;; 4) +;; tagname = newtagname +;; tagname->attr1 = newattrname +;; tagname->attr2 = newattrname +;; tagname->attr1+value|attr2+value = newvalue +;; +;; in this case, two attributes combine to make one new attribute, and the combined +;; value is translated into a new value +;; <tagname attr1="value1" attr2="value2"></tagname> will become +;; <newtagname newattrname="newvalue"></newtagname> +;; +;; 5) +;; tagname = newtagname +;; tagname!attr = dummy +;; +;; here, the attribute will be ignored. dummy is not used and may be any value +;; <tagname attr="value"></tagname> will become +;; <newtagname></newtagname> +;; +;; 6) +;; tagname = newtagname +;; tagname! = dummy +;; +;; here, all attributes will be ignored. dummy is not used and may be any value +;; <tagname attr1="value" attr2="foo"></tagname> will become +;; <newtagname></newtagname> +;; +;; 7) +;; tagname = newtagname +;; tagname/ = 1 +;; +;; here, the tag will be translated as a single tag with no closing tag, and all +;; attributes +;; <tagname attr="val">{text text}</tagname> will become +;; <newtagname attr="val" /> +;; +;; 8) +;; tagname = <starttaginfo /> +;; /tagname = closetagtext +;; +;; in this case, the text <starttaginfo> will be inserted exactly as entered for +;; <tagname> and closetagtext for </tagname> +;; <tagname attr="val"></tagname> will become +;; <starttaginfo />closetagtext +;; +;; 9) +;; $attr$my_attribute = newattrname +;; +;; tagname = newtagname +;; +;; in this case, all occurences of my_attribute in any tag will be changed to +;; newattrname. This is useful for changing things like role="php" to +;; class="php," for example. Note that the text "$attr$" MUST be on the line +;; start for phpDocumentor to recognize it. +;; +;; 10) +;; &entity; = translation text +;; " = " +;; " = """ +;; < = < +;; +;; Use this to control translation of entities to their appropriate values + + = +" = " +” = ” +“ = “ +& = & +< = < +> = > +© = © + + +$attr$role = class + +abbrev = abbr + +blockquote = blockquote + +arg = span +arg->choice = class + +author = <span class="author"> +/author = </span> +author! = 0 + +authorblurb = <div class="author-blurb"> +/authorblurb = </div> + +authorgroup = <div class="authors"><h2 class="title">Authors</h2> +/authorgroup = </div> +authorgroup! = 0 + +caution = <span class="warning"> +/caution = </span> +caution! = 0 + +cmdsynopsis = <div class="cmd-synopsis"> +/cmdsynopsis = </div> + +command = <span class="cmd-title"> +/command = </span> + +copyright = <div class="notes"> +/copyright = </div> + +emphasis = em + +example = <div class="src-code"> +/example = </div> +example! = 0 + +function = +/function = () + +formalpara = p + +graphic = img +graphic->fileref = src +graphic/ = + +important = strong + +informalequation = blockquote + +informalexample = div + +inlineequation = em + +itemizedlist = ul + +listitem = li + +literal = code + +literallayout = span + +option = " " +/option = + +orderedlist = ol + +para = p + +programlisting = <div class="src-code"> +/programlisting = </div> +programlisting! = 0 + +refentry = div + +refnamediv = <div class="ref-title-box"> +/refnamediv = </div> +refnamediv! = 0 + +refname = <h1 class="ref-title"> +/refname = </h1> + +refpurpose = <h2 class="ref-purpose"> +/refpurpose = </h2> + +refsynopsisdiv = <div class="ref-synopsis"> +/refsynopsisdiv = </div> +refsynopsisdiv! = 0 + +refsect1 = span + +refsect2 = span + +refsect3 = +/refsect3 = <br /> + +releaseinfo = <div class="release-info">( +/releaseinfo = )</div> + +simpara = +/simpara = <br /> +simpara! = 0 + +subscript = sub + +superscript = super + +table = table + +table->colsep = rules +table->rowsep = rules +table->colsep+1|rowsep+1 =all +table->colsep+1|rowsep+0 =cols +table->colsep+0|rowsep+1 =rows + +table->frame =frame +table->frame+all =border +table->frame+none =void +table->frame+sides =vsides +table->frame+top =above +table->frame+topbot =hsides + +thead = thead + +tfoot = tfoot + +tbody = tbody + +colspec = col + +tgroup = colgroup +tgroup/ = 1 +tgroup->cols = span + +row = tr + +entry = td +entry->morerows = colspan +entry->morerows+1 =2 +entry->morerows+2 =3 +entry->morerows+3 =4 +entry->morerows+4 =5 +entry->morerows+5 =6 +entry->morerows+6 =7 +entry->morerows+7 =8 +entry->morerows+8 =9 +entry->morerows+9 =10 +entry->morerows+10 =11 +;; add more if you need more colspans + +warning = <span class="warning"> +/warning = </span> +warning! = 0 + +;; now begins the attributes that should be tags in cdata +[$attr$id] +open = a +;close = /a +cdata! = true +quotevalues = true +separator = "=" +;separateall = true +$id = name + +;; now begins the sections that deal with <title> +[refsynopsisdiv_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h1 class="title"> +close = </h1> + +[refsect1_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h2 class="title"> +close = </h2> + +[refsect2_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h3 class="title"> +close = </h3> + +[refsect3_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h4 class="title"> +close = </h4> + +[para_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <div class="title"> +close = </div> + +[formalpara_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <div class="title"> +close = </div> + +[example_title] +;tag_attr = true +;attr_name = title +;cdata_start = true +cdata_end = true +open = </td></tr><tr><td><strong> +close = </strong> + +[table_title] +;tag_attr = true +;attr_name = true +cdata_start = true +open = <caption> +close = </caption> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/basicindex.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/basicindex.tpl new file mode 100755 index 00000000..951ee264 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/basicindex.tpl @@ -0,0 +1,47 @@ +<div class="index-letter-menu"> +{section name=letter loop=$letters} + <a class="index-letter" href="{$indexname}.html#{$letters[letter].letter}">{$letters[letter].letter}</a> +{/section} +</div> + +{section name=index loop=$index} + <a name="{$index[index].letter}"></a> + <div class="index-letter-section"> + <div style="float: left" class="index-letter-title">{$index[index].letter}</div> + <div style="float: right"><a href="#top">top</a></div> + <div style="clear: both"></div> + </div> + <dl> + {section name=contents loop=$index[index].index} + <dt class="field"> + {if ($index[index].index[contents].title == "Variable")} + <span class="var-title">{$index[index].index[contents].name}</span> + {elseif ($index[index].index[contents].title == "Global")} + <span class="var-title">{$index[index].index[contents].name}</span> + {elseif ($index[index].index[contents].title == "Method")} + <span class="method-title">{$index[index].index[contents].name}</span> + {elseif ($index[index].index[contents].title == "Function")} + <span class="method-title">{$index[index].index[contents].name}</span> + {elseif ($index[index].index[contents].title == "Constant")} + <span class="const-title">{$index[index].index[contents].name}</span> + {elseif ($index[index].index[contents].title == "Page") || ($index[index].index[contents].title == "Include")} + <span class="include-title">{$index[index].index[contents].name}</span> + {else} + {$index[index].index[contents].name} + {/if} + </dt> + <dd class="index-item-body"> + <div class="index-item-details">{$index[index].index[contents].link} in {$index[index].index[contents].file_name}</div> + {if $index[index].index[contents].description} + <div class="index-item-description">{$index[index].index[contents].description}</div> + {/if} + </dd> + {/section} + </dl> +{/section} + +<div class="index-letter-menu"> +{section name=letter loop=$letters} + <a class="index-letter" href="{$indexname}.html#{$letters[letter].letter}">{$letters[letter].letter}</a> +{/section} +</div> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/blank.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/blank.tpl new file mode 100755 index 00000000..6a05f27e --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/blank.tpl @@ -0,0 +1,13 @@ +<html> +<head> + <title>{$maintitle}</title> + <link rel="stylesheet" href="{$subdir}media/stylesheet.css" /> + <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/> +</head> +<body> +<div align="center"><h1>{$maintitle}</h1></div> +<b>Welcome to {$package}!</b><br /> +<br /> +This documentation was generated by <a href="{$phpdocwebsite}">phpDocumentor v{$phpdocversion}</a><br /> +</body> +</html>
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/class.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/class.tpl new file mode 100755 index 00000000..9ab7c455 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/class.tpl @@ -0,0 +1,429 @@ +{include file="header.tpl" top3=true} + +<h2 class="class-name">{if $is_interface}Interface{else}Class{/if} {$class_name}</h2> + +<a name="sec-description"></a> +<div class="info-box"> + <div class="info-box-title">Description</div> + <div class="nav-bar"> + {if $children || $vars || $ivars || $methods || $imethods || $consts || $iconsts } + <span class="disabled">Description</span> | + {/if} + {if $children} + <a href="#sec-descendents">Descendents</a> + {if $vars || $ivars || $methods || $imethods || $consts || $iconsts}|{/if} + {/if} + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + {if $methods || $imethods}|{/if} + {/if} + {if $methods || $imethods} + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + {if $implements} + <p class="implements"> + Implements interfaces: + <ul> + {foreach item="int" from=$implements}<li>{$int}</li>{/foreach} + </ul> + </p> + {/if} + {include file="docblock.tpl" type="class" sdesc=$sdesc desc=$desc} + <p class="notes"> + Located in <a class="field" href="{$page_link}">{$source_location}</a> (line <span class="field">{if $class_slink}{$class_slink}{else}{$line_number}{/if}</span>) + </p> + + {if $tutorial} + <hr class="separator" /> + <div class="notes">Tutorial: <span class="tutorial">{$tutorial}</span></div> + {/if} + + <pre>{section name=tree loop=$class_tree.classes}{$class_tree.classes[tree]}{$class_tree.distance[tree]}{/section}</pre> + + {if $conflicts.conflict_type} + <hr class="separator" /> + <div><span class="warning">Conflicts with classes:</span><br /> + {section name=me loop=$conflicts.conflicts} + {$conflicts.conflicts[me]}<br /> + {/section} + </div> + {/if} + </div> +</div> + +{if $children} + <a name="sec-descendents"></a> + <div class="info-box"> + <div class="info-box-title">Direct descendents</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + <span class="disabled">Descendents</span> + {if $vars || $ivars || $methods || $imethods}|{/if} + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + {if $methods || $imethods}|{/if} + {/if} + {if $methods || $imethods} + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + <table cellpadding="2" cellspacing="0" class="class-table"> + <tr> + <th class="class-table-header">Class</th> + <th class="class-table-header">Description</th> + </tr> + {section name=kids loop=$children} + <tr> + <td style="padding-right: 2em">{$children[kids].link}</td> + <td> + {if $children[kids].sdesc} + {$children[kids].sdesc} + {else} + {$children[kids].desc} + {/if} + </td> + </tr> + {/section} + </table> + </div> + </div> +{/if} + +{if $consts} + <a name="sec-const-summary"></a> + <div class="info-box"> + <div class="info-box-title">Class Constant Summary</span></div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendants</a> | + {/if} + <span class="disabled">Constants</span> (<a href="#sec-consts">details</a>) + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + | + {/if} + {if $methods || $imethods} + | + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + <div class="const-summary"> + {section name=consts loop=$consts} + <div class="const-title"> + <img src="{$subdir}media/images/Constant.png" alt=" " /> + <a href="#{$consts[consts].const_name}" title="details" class="const-name">{$consts[consts].const_name}</a> = <span class="var-type">{$consts[consts].const_value}</span> + + </div> + {/section} + </div> + </div> + </div> +{/if} + +{if $vars} + <a name="sec-var-summary"></a> + <div class="info-box"> + <div class="info-box-title">Variable Summary</span></div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendents</a> | + {/if} + <span class="disabled">Vars</span> (<a href="#sec-vars">details</a>) + {if $methods || $imethods} + | + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + <div class="var-summary"> + {section name=vars loop=$vars} + {if $vars[vars].static} + <div class="var-title"> + static <span class="var-type">{$vars[vars].var_type}</span> + <a href="#{$vars[vars].var_name}" title="details" class="var-name">{$vars[vars].var_name}</a> + </div> + {/if} + {/section} + {section name=vars loop=$vars} + {if !$vars[vars].static} + <div class="var-title"> + <span class="var-type">{$vars[vars].var_type}</span> + <a href="#{$vars[vars].var_name}" title="details" class="var-name">{$vars[vars].var_name}</a> + </div> + {/if} + {/section} + </div> + </div> + </div> +{/if} + +{if $methods} + <a name="sec-method-summary"></a> + <div class="info-box"> + <div class="info-box-title">Method Summary</span></div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendents</a> | + {/if} + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + | + {/if} + <span class="disabled">Methods</span> (<a href="#sec-methods">details</a>) + </div> + <div class="info-box-body"> + <div class="method-summary"> + {section name=methods loop=$methods} + {if $methods[methods].static} + <div class="method-definition"> + static {if $methods[methods].function_return} + <span class="method-result">{$methods[methods].function_return}</span> + {/if} + <a href="#{$methods[methods].function_name}" title="details" class="method-name">{if $methods[methods].ifunction_call.returnsref}&{/if}{$methods[methods].function_name}</a> + {if count($methods[methods].ifunction_call.params)} + ({section name=params loop=$methods[methods].ifunction_call.params}{if $smarty.section.params.iteration != 1}, {/if}{if $methods[methods].ifunction_call.params[params].hasdefault}[{/if}<span class="var-type">{$methods[methods].ifunction_call.params[params].type}</span> <span class="var-name">{$methods[methods].ifunction_call.params[params].name}</span>{if $methods[methods].ifunction_call.params[params].hasdefault} = <span class="var-default">{$methods[methods].ifunction_call.params[params].default}</span>]{/if}{/section}) + {else} + () + {/if} + </div> + {/if} + {/section} + {section name=methods loop=$methods} + {if !$methods[methods].static} + <div class="method-definition"> + {if $methods[methods].function_return} + <span class="method-result">{$methods[methods].function_return}</span> + {/if} + <a href="#{$methods[methods].function_name}" title="details" class="method-name">{if $methods[methods].ifunction_call.returnsref}&{/if}{$methods[methods].function_name}</a> + {if count($methods[methods].ifunction_call.params)} + ({section name=params loop=$methods[methods].ifunction_call.params}{if $smarty.section.params.iteration != 1}, {/if}{if $methods[methods].ifunction_call.params[params].hasdefault}[{/if}<span class="var-type">{$methods[methods].ifunction_call.params[params].type}</span> <span class="var-name">{$methods[methods].ifunction_call.params[params].name}</span>{if $methods[methods].ifunction_call.params[params].hasdefault} = <span class="var-default">{$methods[methods].ifunction_call.params[params].default}</span>]{/if}{/section}) + {else} + () + {/if} + </div> + {/if} + {/section} + </div> + </div> + </div> +{/if} + +{if $vars || $ivars} + <a name="sec-vars"></a> + <div class="info-box"> + <div class="info-box-title">Variables</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendents</a> | + {/if} + {if $methods} + <a href="#sec-var-summary">Vars</a> (<span class="disabled">details</span>) + {else} + <span class="disabled">Vars</span> + {/if} + + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + {if $methods || $imethods} + | + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + {include file="var.tpl"} + {if $ivars} + <h4>Inherited Variables</h4> + <A NAME='inherited_vars'><!-- --></A> + {section name=ivars loop=$ivars} + <p>Inherited from <span class="classname">{$ivars[ivars].parent_class}</span></p> + <blockquote> + {section name=ivars2 loop=$ivars[ivars].ivars} + <span class="var-title"> + <span class="var-name">{$ivars[ivars].ivars[ivars2].link}</span>{if $ivars[ivars].ivars[ivars2].ivar_sdesc}: {$ivars[ivars].ivars[ivars2].ivar_sdesc}{/if}<br> + </span> + {/section} + </blockquote> + {/section} + {/if} + </div> + </div> +{/if} + +{if $methods || $imethods} + <a name="sec-methods"></a> + <div class="info-box"> + <div class="info-box-title">Methods</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendents</a> | + {/if} + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + {/if} + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + {if $methods} + <a href="#sec-method-summary">Methods</a> (<span class="disabled">details</span>) + {else} + <span class="disabled">Methods</span> + {/if} + </div> + <div class="info-box-body"> + {include file="method.tpl"} + {if $imethods} + <h4>Inherited Methods</h4> + <a name='inherited_methods'><!-- --></a> + {section name=imethods loop=$imethods} + <!-- =========== Summary =========== --> + <p>Inherited From <span class="classname">{$imethods[imethods].parent_class}</span></p> + <blockquote> + {section name=im2 loop=$imethods[imethods].imethods} + <span class="method-name">{$imethods[imethods].imethods[im2].link}</span>{if $imethods[imethods].imethods[im2].ifunction_sdesc}: {$imethods[imethods].imethods[im2].ifunction_sdesc}{/if}<br> + {/section} + </blockquote> + {/section} + {/if} + </div> + </div> +{/if} + +{if $consts || $iconsts} + <a name="sec-consts"></a> + <div class="info-box"> + <div class="info-box-title">Class Constants</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendants</a> | + {/if} + {if $methods} + <a href="#sec-var-summary">Constants</a> (<span class="disabled">details</span>) + {else} + <span class="disabled">Constants</span> + {/if} + + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + {/if} + {if $methods || $imethods} + | + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + {include file="const.tpl"} + {if $iconsts} + <h4>Inherited Constants</h4> + <A NAME='inherited_vars'><!-- --></A> + {section name=iconsts loop=$iconsts} + <p>Inherited from <span class="classname">{$iconsts[iconsts].parent_class}</span></p> + <blockquote> + {section name=iconsts2 loop=$iconsts[iconsts].iconsts} + <img src="{$subdir}media/images/{if $iconsts[iconsts].iconsts[iconsts2].access == 'private'}PrivateVariable{else}Variable{/if}.png" /> + <span class="const-title"> + <span class="const-name">{$iconsts[iconsts].iconsts[iconsts2].link}</span>{if $iconsts[iconsts].iconsts[iconsts2].iconst_sdesc}: {$iconsts[iconsts].iconsts[iconsts2].iconst_sdesc}{/if}<br> + </span> + {/section} + </blockquote> + {/section} + {/if} + </div> + </div> +{/if} + +{include file="footer.tpl" top3=true} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/classtrees.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/classtrees.tpl new file mode 100755 index 00000000..952e6d50 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/classtrees.tpl @@ -0,0 +1,19 @@ +{include file="header.tpl" top1=true} + +<!-- Start of Class Data --> +<H2> + {$smarty.capture.title} +</H2> +{if $interfaces} +{section name=classtrees loop=$interfaces} +<h2>Root interface {$interfaces[classtrees].class}</h2> +{$interfaces[classtrees].class_tree} +{/section} +{/if} +{if $classtrees} +{section name=classtrees loop=$classtrees} +<h2>Root class {$classtrees[classtrees].class}</h2> +{$classtrees[classtrees].class_tree} +{/section} +{/if} +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/const.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/const.tpl new file mode 100644 index 00000000..c26ff92d --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/const.tpl @@ -0,0 +1,18 @@ +{section name=consts loop=$consts} +<a name="const{$consts[consts].const_name}" id="{$consts[consts].const_name}"><!-- --></A> +<div class="{cycle values="evenrow,oddrow"}"> + + <div class="const-header"> + <img src="{$subdir}media/images/{if $consts[consts].access == 'private'}PrivateVariable{else}Variable{/if}.png" /> + <span class="const-title"> + <span class="const-name">{$consts[consts].const_name}</span> + = <span class="const-default">{$consts[consts].const_value|replace:"\n":"<br />"}</span> + (line <span class="line-number">{if $consts[consts].slink}{$consts[consts].slink}{else}{$consts[consts].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$consts[consts].sdesc desc=$consts[consts].desc tags=$consts[consts].tags} + +</div> +{/section} + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/define.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/define.tpl new file mode 100755 index 00000000..0da5d864 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/define.tpl @@ -0,0 +1,24 @@ +{section name=def loop=$defines} +<a name="{$defines[def].define_link}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div> + <span class="const-title"> + <span class="const-name">{$defines[def].define_name}</span> = {$defines[def].define_value|replace:"\n":"<br />"} + (line <span class="line-number">{if $defines[def].slink}{$defines[def].slink}{else}{$defines[def].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$defines[def].sdesc desc=$defines[def].desc tags=$defines[def].tags} + + {if $globals[glob].global_conflicts.conflict_type} + <hr class="separator" /> + <div><span class="warning">Conflicts with constants:</span><br /> + {section name=me loop=$defines[def].define_conflicts.conflicts} + {$defines[def].define_conflicts.conflicts[me]}<br /> + {/section} + </div> + {/if} + +</div> +{/section}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/docblock.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/docblock.tpl new file mode 100755 index 00000000..783d5271 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/docblock.tpl @@ -0,0 +1,14 @@ +<!-- ========== Info from phpDoc block ========= --> +{if $sdesc} +<p class="short-description">{$sdesc}</p> +{/if} +{if $desc} +<p class="description">{$desc}</p> +{/if} +{if $tags} + <ul class="tags"> + {section name=tags loop=$tags} + <li><span class="field">{$tags[tags].keyword}:</span> {$tags[tags].data}</li> + {/section} + </ul> +{/if} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/elementindex.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/elementindex.tpl new file mode 100755 index 00000000..d5964f99 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/elementindex.tpl @@ -0,0 +1,12 @@ +{include file="header.tpl" noleftindex=true} +<a name="top"></a> +<h2>Full index</h2> +<h3>Package indexes</h3> +<ul> +{section name=p loop=$packageindex} + <li><a href="elementindex_{$packageindex[p].title}.html">{$packageindex[p].title}</a></li> +{/section} +</ul> +<br /> +{include file="basicindex.tpl" indexname="elementindex"} +{include file="footer.tpl"} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/errors.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/errors.tpl new file mode 100755 index 00000000..0f526584 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/errors.tpl @@ -0,0 +1,21 @@ +{include file="header.tpl" noleftindex=true} +{section name=files loop=$files} +<a href="#{$files[files].file}">{$files[files].file}</a><br> +{/section} +{foreach key=file item=issues from=$all} +<a name="{$file}"></a> +<h1>{$file}</h1> +{if count($issues.warnings)} +<h2>Warnings:</h2><br> +{section name=warnings loop=$issues.warnings} +<b>{$issues.warnings[warnings].name}</b> - {$issues.warnings[warnings].listing}<br> +{/section} +{/if} +{if count($issues.errors)} +<h2>Errors:</h2><br> +{section name=errors loop=$issues.errors} +<b>{$issues.errors[errors].name}</b> - {$issues.errors[errors].listing}<br> +{/section} +{/if} +{/foreach} +{include file="footer.tpl"} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/examplesource.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/examplesource.tpl new file mode 100755 index 00000000..8abf74ce --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/examplesource.tpl @@ -0,0 +1,6 @@ +{include file="header.tpl" title=$title} +<h1>{$title}</h1> +<div class="listing"> +{$source} +</div> +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/filesource.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/filesource.tpl new file mode 100755 index 00000000..239f7b41 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/filesource.tpl @@ -0,0 +1,8 @@ +{capture name="tutle"}File Source for {$name}{/capture} +{include file="header.tpl" title=$smarty.capture.tutle} +<h1>Source for file {$name}</h1> +<p>Documentation is available at {$docs}</p> +<div class="src-code"> +{$source} +</div> +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/footer.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/footer.tpl new file mode 100755 index 00000000..8d0f79db --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/footer.tpl @@ -0,0 +1,8 @@ +{if !$index} + <p class="notes" id="credit"> + Documentation generated on {$date} by <a href="{$phpdocwebsite}" target="_blank">phpDocumentor {$phpdocversion}</a> + </p> +{/if} + {if $top3}</div>{/if} +</body> +</html> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/function.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/function.tpl new file mode 100755 index 00000000..b6880059 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/function.tpl @@ -0,0 +1,44 @@ +{section name=func loop=$functions} +<a name="{$functions[func].function_dest}" id="{$functions[func].function_dest}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div> + <span class="method-title">{$functions[func].function_name}</span> (line <span class="line-number">{if $functions[func].slink}{$functions[func].slink}{else}{$functions[func].line_number}{/if}</span>) + </div> + + {include file="docblock.tpl" sdesc=$functions[func].sdesc desc=$functions[func].desc tags=$functions[func].tags params=$functions[func].params function=false} + + <div class="method-signature"> + <span class="method-result">{$functions[func].function_return}</span> + <span class="method-name"> + {if $functions[func].ifunction_call.returnsref}&{/if}{$functions[func].function_name} + </span> + {if count($functions[func].ifunction_call.params)} + ({section name=params loop=$functions[func].ifunction_call.params}{if $smarty.section.params.iteration != 1}, {/if}{if $functions[func].ifunction_call.params[params].hasdefault}[{/if}<span class="var-type">{$functions[func].ifunction_call.params[params].type}</span> <span class="var-name">{$functions[func].ifunction_call.params[params].name}</span>{if $functions[func].ifunction_call.params[params].hasdefault} = <span class="var-default">{$functions[func].ifunction_call.params[params].default|escape:"html"}</span>]{/if}{/section}) + {else} + () + {/if} + </div> + + {if $functions[func].params} + <ul class="parameters"> + {section name=params loop=$functions[func].params} + <li> + <span class="var-type">{$functions[func].params[params].datatype}</span> + <span class="var-name">{$functions[func].params[params].var}</span>{if $functions[func].params[params].data}<span class="var-description">: {$functions[func].params[params].data}</span>{/if} + </li> + {/section} + </ul> + {/if} + + {if $functions[func].function_conflicts.conflict_type} + <hr class="separator" /> + <div><span class="warning">Conflicts with functions:</span><br /> + {section name=me loop=$functions[func].function_conflicts.conflicts} + {$functions[func].function_conflicts.conflicts[me]}<br /> + {/section} + </div> + {/if} + +</div> +{/section} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/global.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/global.tpl new file mode 100755 index 00000000..eab7e0b0 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/global.tpl @@ -0,0 +1,26 @@ +{section name=glob loop=$globals} +<a name="{$globals[glob].global_link}" id="{$globals[glob].global_link}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div> + <span class="var-title"> + <span class="var-type">{$globals[glob].global_type}</span> + <span class="var-name">{$globals[glob].global_name}</span> + {if $vars[vars].var_default} = <span class="var-default">{$globals[glob].global_value|replace:"\n":"<br />"}</span>{/if} + (line <span class="line-number">{if $globals[glob].slink}{$globals[glob].slink}{else}{$globals[glob].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$globals[glob].sdesc desc=$globals[glob].desc tags=$globals[glob].tags} + + {if $globals[glob].global_conflicts.conflict_type} + <hr class="separator" /> + <div><span class="warning">Conflicts with global variables:</span><br /> + {section name=me loop=$globals[glob].global_conflicts.conflicts} + {$globals[glob].global_conflicts.conflicts[me]}<br /> + {/section} + </div> + {/if} + +</div> +{/section}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/header.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/header.tpl new file mode 100755 index 00000000..0d626190 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/header.tpl @@ -0,0 +1,95 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> + <html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <!-- template designed by Marco Von Ballmoos --> + <title>{$title}</title> + <link rel="stylesheet" href="{$subdir}media/stylesheet.css" /> + {if $top2 || $top3} + <script src="{$subdir}media/lib/classTree.js"></script> + {/if} + {if $top2} + <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/> + {/if} + {if $top3 || $top2} + <script language="javascript" type="text/javascript"> + var imgPlus = new Image(); + var imgMinus = new Image(); + imgPlus.src = "{$subdir}media/images/plus.png"; + imgMinus.src = "{$subdir}media/images/minus.png"; + + function showNode(Node){ldelim} + switch(navigator.family){ldelim} + case 'nn4': + // Nav 4.x code fork... + var oTable = document.layers["span" + Node]; + var oImg = document.layers["img" + Node]; + break; + case 'ie4': + // IE 4/5 code fork... + var oTable = document.all["span" + Node]; + var oImg = document.all["img" + Node]; + break; + case 'gecko': + // Standards Compliant code fork... + var oTable = document.getElementById("span" + Node); + var oImg = document.getElementById("img" + Node); + break; + {rdelim} + oImg.src = imgMinus.src; + oTable.style.display = "block"; + {rdelim} + + function hideNode(Node){ldelim} + switch(navigator.family){ldelim} + case 'nn4': + // Nav 4.x code fork... + var oTable = document.layers["span" + Node]; + var oImg = document.layers["img" + Node]; + break; + case 'ie4': + // IE 4/5 code fork... + var oTable = document.all["span" + Node]; + var oImg = document.all["img" + Node]; + break; + case 'gecko': + // Standards Compliant code fork... + var oTable = document.getElementById("span" + Node); + var oImg = document.getElementById("img" + Node); + break; + {rdelim} + oImg.src = imgPlus.src; + oTable.style.display = "none"; + {rdelim} + + function nodeIsVisible(Node){ldelim} + switch(navigator.family){ldelim} + case 'nn4': + // Nav 4.x code fork... + var oTable = document.layers["span" + Node]; + break; + case 'ie4': + // IE 4/5 code fork... + var oTable = document.all["span" + Node]; + break; + case 'gecko': + // Standards Compliant code fork... + var oTable = document.getElementById("span" + Node); + break; + {rdelim} + return (oTable && oTable.style.display == "block"); + {rdelim} + + function toggleNodeVisibility(Node){ldelim} + if (nodeIsVisible(Node)){ldelim} + hideNode(Node); + {rdelim}else{ldelim} + showNode(Node); + {rdelim} + {rdelim} + </script> + {/if} + </head> + <body> + {if $top3}<div class="page-body">{/if} + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/include.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/include.tpl new file mode 100755 index 00000000..c2419e5f --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/include.tpl @@ -0,0 +1,16 @@ +{section name=includes loop=$includes} +<a name="{$includes[includes].include_file}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div> + <span class="include-title"> + <span class="include-type">{$includes[includes].include_name}</span> + (<span class="include-name">{$includes[includes].include_value}</span>) + (line <span class="line-number">{if $includes[includes].slink}{$includes[includes].slink}{else}{$includes[includes].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$includes[includes].sdesc desc=$includes[includes].desc tags=$includes[includes].tags} + +</div> +{/section}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/index.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/index.tpl new file mode 100755 index 00000000..7cd61094 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/index.tpl @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE html + PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//FR" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"> + <html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <!-- Generated by phpDocumentor on {$date} --> + <title>{$title}</title> + <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/> +</head> + +<FRAMESET rows='120,*'> + <FRAME src='packages.html' name='left_top' frameborder="1" bordercolor="#999999"> + <FRAMESET cols='25%,*'> + <FRAME src='{$start}' name='left_bottom' frameborder="1" bordercolor="#999999"> + <FRAME src='{$blank}.html' name='right' frameborder="1" bordercolor="#999999"> + </FRAMESET> + <NOFRAMES> + <H2>Frame Alert</H2> + <P>This document is designed to be viewed using the frames feature. + If you see this message, you are using a non-frame-capable web client.</P> + </NOFRAMES> +</FRAMESET> +</HTML> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/left_frame.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/left_frame.tpl new file mode 100755 index 00000000..98fc3135 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/left_frame.tpl @@ -0,0 +1,217 @@ +{include file="header.tpl" top2=true} +<h3 class="package-title">{$info.0.package}</h3> +<div class="tree"> +<script language="Javascript"> +if (document.getElementById) {ldelim} +{section name=p loop=$info} + {if $info[p].subpackage == ""} + var tree = new WebFXTree('<span class="package">{$info.0.package}</span>'); + tree.setBehavior('classic'); + + {if $hastodos} + var todos = new WebFXTreeItem('To-do List', '{$todolink}'); + tree.add(todos); + {/if} + + var class_trees = new WebFXTreeItem('Class trees', '{$classtreepage}.html'); + tree.add(class_trees); + + var elements = new WebFXTreeItem('Index of elements', '{$elementindex}.html'); + tree.add(elements); + + var parent_node; + + {if $info[p].tutorials} + var tree_tutorial = new WebFXTreeItem('Tutorial(s)/Manual(s)', ''); + tree.add(tree_tutorial); + + {if $info[p].tutorials.pkg} + var tree_inner_tutorial = new WebFXTreeItem('Package-level', ''); + tree_tutorial.add(tree_inner_tutorial); + + parent_node = tree_inner_tutorial; + {section name=ext loop=$info[p].tutorials.pkg} + {$info[p].tutorials.pkg[ext]} + {/section} + {/if} + + {if $info[p].tutorials.cls} + var tree_inner_tutorial = new WebFXTreeItem('Class-level', ''); + tree_tutorial.add(tree_inner_tutorial); + + parent_node = tree_inner_tutorial; + {section name=ext loop=$info[p].tutorials.cls} + {$info[p].tutorials.cls[ext]} + {/section} + {/if} + + {if $info[p].tutorials.proc} + var tree_inner_tutorial = new WebFXTreeItem('Function-level', ''); + tree_tutorial.add(tree_inner_tutorial); + + parent_node = tree_inner_tutorial; + {section name=ext loop=$info[p].tutorials.proc} + {$info[p].tutorials.proc[ext]} + {/section} + {/if} + {/if} + + {if $info[p].hasinterfaces} + {if $info[p].classes} + var tree_classe = new WebFXTreeItem('Interface(s)', '{$packagedoc}'); + + {section name=class loop=$info[p].classes} + {if $info[p].classes[class].is_interface} + var classe = new WebFXTreeItem('{$info[p].classes[class].title|escape:"quotes"}', '{$info[p].classes[class].link|escape:"quotes"}'); + tree_classe.add(classe); + {/if} + {/section} + + tree.add(tree_classe); + {/if} + {/if} + {if $info[p].hasclasses} + {if $info[p].classes} + var tree_classe = new WebFXTreeItem('Class(es)', '{$packagedoc}'); + + {section name=class loop=$info[p].classes} + {if $info[p].classes[class].is_class} + var classe = new WebFXTreeItem('{$info[p].classes[class].title|escape:"quotes"}', '{$info[p].classes[class].link|escape:"quotes"}'); + tree_classe.add(classe); + {/if} + {/section} + + tree.add(tree_classe); + {/if} + {/if} + + {if $info[p].functions} + var tree_function = new WebFXTreeItem('Function(s)', '{$packagedoc|escape:"quotes"}'); + + {section name=nonclass loop=$info[p].functions} + var fic = new WebFXTreeItem('{$info[p].functions[nonclass].title|escape:"quotes"}', '{$info[p].functions[nonclass].link|escape:"quotes"}'); + tree_function.add(fic); + {/section} + + tree.add(tree_function); + {/if} + + {if $info[p].files} + var tree_file = new WebFXTreeItem('File(s)', '{$packagedoc|escape:"quotes"}'); + + {section name=nonclass loop=$info[p].files} + var file = new WebFXTreeItem('{$info[p].files[nonclass].title|escape:"quotes"}', '{$info[p].files[nonclass].link|escape:"quotes"}'); + tree_file.add(file); + {/section} + + tree.add(tree_file); + {/if} + + {else} + {if $info[p].subpackagetutorial} + var subpackagetree = new WebFXTreeItem('<span class="sub-package">{$info[p].subpackagetutorialtitle|strip_tags|escape:"quotes"}</span>', '{$info[p].subpackagetutorialnoa}'); + {else} + var subpackagetree = new WebFXTreeItem('<span class="sub-package">{$info[p].subpackage}</span>', '{$packagedoc}'); + {/if} + + {if $info[p].tutorials} + var tree_tutorial = new WebFXTreeItem('Tutorial(s)/Manual(s)', ''); + tree.add(tree_tutorial); + + {if $info[p].tutorials.pkg} + var tree_inner_tutorial = new WebFXTreeItem('Package-level', ''); + tree_tutorial.add(tree_inner_tutorial); + + parent_node = tree_inner_tutorial; + {section name=ext loop=$info[p].tutorials.pkg} + {$info[p].tutorials.pkg[ext]} + {/section} + {/if} + + {if $info[p].tutorials.cls} + var tree_inner_tutorial = new WebFXTreeItem('Class-level', ''); + tree_tutorial.add(tree_inner_tutorial); + + parent_node = tree_inner_tutorial; + {section name=ext loop=$info[p].tutorials.cls} + {$info[p].tutorials.cls[ext]} + {/section} + {/if} + + {if $info[p].tutorials.proc} + var tree_inner_tutorial = new WebFXTreeItem('Function-level', ''); + tree_tutorial.add(tree_inner_tutorial); + + parent_node = tree_inner_tutorial; + {section name=ext loop=$info[p].tutorials.proc} + {$info[p].tutorials.proc[ext]} + {/section} + {/if} + {/if} + + {if $info[p].hasinterfaces} + {if $info[p].classes} + var subpackagetree_classe = new WebFXTreeItem('Interface(s)', '{$packagedoc}'); + + {section name=class loop=$info[p].classes} + {if $info[p].classes[class].is_interface} + var classe = new WebFXTreeItem('{$info[p].classes[class].title|escape:"quotes"}', '{$info[p].classes[class].link|escape:"quotes"}'); + subpackagetree_classe.add(classe); + {/if} + {/section} + + subpackagetree.add(subpackagetree_classe); + {/if} + {/if} + + {if $info[p].hasclasses} + {if $info[p].classes} + var subpackagetree_classe = new WebFXTreeItem('Class(es)', '{$packagedoc}'); + + {section name=class loop=$info[p].classes} + {if $info[p].classes[class].is_class} + var classe = new WebFXTreeItem('{$info[p].classes[class].title|escape:"quotes"}', '{$info[p].classes[class].link|escape:"quotes"}'); + subpackagetree_classe.add(classe); + {/if} + {/section} + + subpackagetree.add(subpackagetree_classe); + {/if} + {/if} + + {if $info[p].functions} + var subpackagetree_function = new WebFXTreeItem('Function(s)', '{$packagedoc|escape:"quotes"}'); + + {section name=nonclass loop=$info[p].functions} + var fic = new WebFXTreeItem('{$info[p].functions[nonclass].title|escape:"quotes"}', '{$info[p].functions[nonclass].link|escape:"quotes"}'); + subpackagetree_function.add(fic); + {/section} + + subpackagetree.add(subpackagetree_function); + {/if} + + {if $info[p].files} + var subpackagetree_file = new WebFXTreeItem('File(s)', '{$packagedoc|escape:"quotes"}'); + + {section name=nonclass loop=$info[p].files} + var file = new WebFXTreeItem('{$info[p].files[nonclass].title|escape:"quotes"}', '{$info[p].files[nonclass].link|escape:"quotes"}'); + subpackagetree_file.add(file); + {/section} + + subpackagetree.add(subpackagetree_file); + {/if} + + tree.add(subpackagetree); + {/if} +{/section} + +document.write(tree); +{rdelim} +</script> +</div> +<p class="notes"> + Generated by + <a href="{$phpdocwebsite}" target="_blank">phpDocumentor <span class="field">{$phpdocversion}</span></a> +</p> +</body> +</html> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/banner.css b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/banner.css new file mode 100755 index 00000000..065e76bc --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/banner.css @@ -0,0 +1,32 @@ +body +{ + background-color: #FFFFFF; + margin: 0px; + padding: 0px; +} + +/* Banner (top bar) classes */ + +.banner { } + +.banner-menu +{ + clear: both; + padding: .5em; + border-top: 2px solid #999999; +} + +.banner-title +{ + text-align: right; + font-size: 20pt; + font-weight: bold; + margin: .2em; +} + +.package-selector +{ + background-color: #EEEEEE; + border: 1px solid black; + color: #0000C0; +} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/images/I.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/images/I.png Binary files differnew file mode 100755 index 00000000..e8512fb9 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/images/I.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/images/L.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/images/L.png Binary files differnew file mode 100755 index 00000000..eb334eda --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/images/L.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/images/Lminus.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/images/Lminus.png Binary files differnew file mode 100755 index 00000000..f7c43c0a --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/images/Lminus.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/images/Lplus.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/images/Lplus.png Binary files differnew file mode 100755 index 00000000..848ec2fc --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/images/Lplus.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/images/T.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/images/T.png Binary files differnew file mode 100755 index 00000000..30173254 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/images/T.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/images/Tminus.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/images/Tminus.png Binary files differnew file mode 100755 index 00000000..2260e424 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/images/Tminus.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/images/Tplus.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/images/Tplus.png Binary files differnew file mode 100755 index 00000000..2c8d8f4f --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/images/Tplus.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/images/blank.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/images/blank.png Binary files differnew file mode 100755 index 00000000..cee9cd37 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/images/blank.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/images/empty.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/images/empty.png Binary files differnew file mode 100755 index 00000000..d5683865 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/images/empty.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/images/minus.gif b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/images/minus.gif Binary files differnew file mode 100644 index 00000000..f502662b --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/images/minus.gif diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/images/plus.gif b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/images/plus.gif Binary files differnew file mode 100644 index 00000000..eeca02ce --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/images/plus.gif diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/lib/classTree.js b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/lib/classTree.js new file mode 100755 index 00000000..ebb3fb4a --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/lib/classTree.js @@ -0,0 +1,454 @@ +/*----------------------------------------\ +| Cross Browser Tree Widget 1.1 | +|-----------------------------------------| +| Created by Emil A. Eklund (eae@eae.net) | +| For WebFX (http://webfx.eae.net/) | +|-----------------------------------------| +| This script is provided as is without | +| any warranty whatsoever. It may be used | +| free of charge for non commerical sites | +| For commerical use contact the author | +| of this script for further details. | +|-----------------------------------------| +| Created 2000-12-11 | Updated 2001-09-06 | +\----------------------------------------*/ + +var webFXTreeConfig = { + rootIcon : 'media/images/empty.png', + openRootIcon : 'media/images/empty.png', + folderIcon : 'media/images/empty.png', + openFolderIcon : 'media/images/empty.png', + fileIcon : 'media/images/empty.png', + iIcon : 'media/images/I.png', + lIcon : 'media/images/L.png', + lMinusIcon : 'media/images/Lminus.png', + lPlusIcon : 'media/images/Lplus.png', + tIcon : 'media/images/T.png', + tMinusIcon : 'media/images/Tminus.png', + tPlusIcon : 'media/images/Tplus.png', + blankIcon : 'media/images/blank.png', + defaultText : 'Tree Item', + defaultAction : 'javascript:void(0);', + defaultTarget : 'right', + defaultBehavior : 'classic' +}; + +var webFXTreeHandler = { + idCounter : 0, + idPrefix : "webfx-tree-object-", + all : {}, + behavior : null, + selected : null, + getId : function() { return this.idPrefix + this.idCounter++; }, + toggle : function (oItem) { this.all[oItem.id.replace('-plus','')].toggle(); }, + select : function (oItem) { this.all[oItem.id.replace('-icon','')].select(); }, + focus : function (oItem) { this.all[oItem.id.replace('-anchor','')].focus(); }, + blur : function (oItem) { this.all[oItem.id.replace('-anchor','')].blur(); }, + keydown : function (oItem) { return this.all[oItem.id].keydown(window.event.keyCode); }, + cookies : new WebFXCookie() +}; + +/* + * WebFXCookie class + */ + +function WebFXCookie() { + if (document.cookie.length) { this.cookies = ' ' + document.cookie; } +} + +WebFXCookie.prototype.setCookie = function (key, value) { + document.cookie = key + "=" + escape(value); +} + +WebFXCookie.prototype.getCookie = function (key) { + if (this.cookies) { + var start = this.cookies.indexOf(' ' + key + '='); + if (start == -1) { return null; } + var end = this.cookies.indexOf(";", start); + if (end == -1) { end = this.cookies.length; } + end -= start; + var cookie = this.cookies.substr(start,end); + return unescape(cookie.substr(cookie.indexOf('=') + 1, cookie.length - cookie.indexOf('=') + 1)); + } + else { return null; } +} + +/* + * WebFXTreeAbstractNode class + */ + +function WebFXTreeAbstractNode(sText, sAction, sTarget) { + this.childNodes = []; + this.id = webFXTreeHandler.getId(); + this.text = sText || webFXTreeConfig.defaultText; + this.action = sAction || webFXTreeConfig.defaultAction; + this.targetWindow = sTarget || webFXTreeConfig.defaultTarget; + this._last = false; + webFXTreeHandler.all[this.id] = this; +} + +WebFXTreeAbstractNode.prototype.add = function (node) { + node.parentNode = this; + this.childNodes[this.childNodes.length] = node; + var root = this; + if (this.childNodes.length >=2) { + this.childNodes[this.childNodes.length -2]._last = false; + } + while (root.parentNode) { root = root.parentNode; } + if (root.rendered) { + if (this.childNodes.length >= 2) { + document.getElementById(this.childNodes[this.childNodes.length -2].id + '-plus').src = ((this.childNodes[this.childNodes.length -2].folder)?webFXTreeConfig.tMinusIcon:webFXTreeConfig.tIcon); + if (this.childNodes[this.childNodes.length -2].folder) { + this.childNodes[this.childNodes.length -2].plusIcon = webFXTreeConfig.tPlusIcon; + this.childNodes[this.childNodes.length -2].minusIcon = webFXTreeConfig.tMinusIcon; + } + this.childNodes[this.childNodes.length -2]._last = false; + } + this._last = true; + var foo = this; + while (foo.parentNode) { + for (var i = 0; i < foo.parentNode.childNodes.length; i++) { + if (foo.id == foo.parentNode.childNodes[i].id) { break; } + } + if (++i == foo.parentNode.childNodes.length) { foo.parentNode._last = true; } + else { foo.parentNode._last = false; } + foo = foo.parentNode; + } + document.getElementById(this.id + '-cont').insertAdjacentHTML("beforeEnd", node.toString()); + if ((!this.folder) && (!this.openIcon)) { + this.icon = webFXTreeConfig.folderIcon; + this.openIcon = webFXTreeConfig.openFolderIcon; + } + this.folder = true; + this.indent(); + this.expand(); + } + return node; +} + +WebFXTreeAbstractNode.prototype.toggle = function() { + if (this.folder) { + if (this.open) { this.collapse(); } + else { this.expand(); } + } +} + +WebFXTreeAbstractNode.prototype.select = function() { + document.getElementById(this.id + '-anchor').focus(); +} + +WebFXTreeAbstractNode.prototype.focus = function() { + webFXTreeHandler.selected = this; + if ((this.openIcon) && (webFXTreeHandler.behavior != 'classic')) { document.getElementById(this.id + '-icon').src = this.openIcon; } + document.getElementById(this.id + '-anchor').style.backgroundColor = 'highlight'; + document.getElementById(this.id + '-anchor').style.color = 'highlighttext'; + document.getElementById(this.id + '-anchor').focus(); +} + +WebFXTreeAbstractNode.prototype.blur = function() { + if ((this.openIcon) && (webFXTreeHandler.behavior != 'classic')) { document.getElementById(this.id + '-icon').src = this.icon; } + document.getElementById(this.id + '-anchor').style.backgroundColor = 'transparent'; + document.getElementById(this.id + '-anchor').style.color = 'menutext'; +} + +WebFXTreeAbstractNode.prototype.doExpand = function() { + if (webFXTreeHandler.behavior == 'classic') { document.getElementById(this.id + '-icon').src = this.openIcon; } + if (this.childNodes.length) { document.getElementById(this.id + '-cont').style.display = 'block'; } + this.open = true; + webFXTreeHandler.cookies.setCookie(this.id.substr(18,this.id.length - 18), '1'); +} + +WebFXTreeAbstractNode.prototype.doCollapse = function() { + if (webFXTreeHandler.behavior == 'classic') { document.getElementById(this.id + '-icon').src = this.icon; } + if (this.childNodes.length) { document.getElementById(this.id + '-cont').style.display = 'none'; } + this.open = false; + webFXTreeHandler.cookies.setCookie(this.id.substr(18,this.id.length - 18), '0'); +} + +WebFXTreeAbstractNode.prototype.expandAll = function() { + this.expandChildren(); + if ((this.folder) && (!this.open)) { this.expand(); } +} + +WebFXTreeAbstractNode.prototype.expandChildren = function() { + for (var i = 0; i < this.childNodes.length; i++) { + this.childNodes[i].expandAll(); +} } + +WebFXTreeAbstractNode.prototype.collapseAll = function() { + if ((this.folder) && (this.open)) { this.collapse(); } + this.collapseChildren(); +} + +WebFXTreeAbstractNode.prototype.collapseChildren = function() { + for (var i = 0; i < this.childNodes.length; i++) { + this.childNodes[i].collapseAll(); +} } + +WebFXTreeAbstractNode.prototype.indent = function(lvl, del, last, level) { + /* + * Since we only want to modify items one level below ourself, + * and since the rightmost indentation position is occupied by + * the plus icon we set this to -2 + */ + if (lvl == null) { lvl = -2; } + var state = 0; + for (var i = this.childNodes.length - 1; i >= 0 ; i--) { + state = this.childNodes[i].indent(lvl + 1, del, last, level); + if (state) { return; } + } + if (del) { + if (level >= this._level) { + if (this.folder) { + document.getElementById(this.id + '-plus').src = (this.open)?webFXTreeConfig.lMinusIcon:webFXTreeConfig.lPlusIcon; + this.plusIcon = webFXTreeConfig.lPlusIcon; + this.minusIcon = webFXTreeConfig.lMinusIcon; + } + else { document.getElementById(this.id + '-plus').src = webFXTreeConfig.lIcon; } + return 1; + } + } + var foo = document.getElementById(this.id + '-indent-' + lvl); + if (foo) { + if ((del) && (last)) { foo._last = true; } + if (foo._last) { foo.src = webFXTreeConfig.blankIcon; } + else { foo.src = webFXTreeConfig.iIcon; } + } + return 0; +} + +/* + * WebFXTree class + */ + +function WebFXTree(sText, sAction, sBehavior, sIcon, sOpenIcon) { + this.base = WebFXTreeAbstractNode; + this.base(sText, sAction); + this.icon = sIcon || webFXTreeConfig.rootIcon; + this.openIcon = sOpenIcon || webFXTreeConfig.openRootIcon; + /* Defaults to open */ + this.open = (webFXTreeHandler.cookies.getCookie(this.id.substr(18,this.id.length - 18)) == '0')?false:true; + this.folder = true; + this.rendered = false; + if (!webFXTreeHandler.behavior) { webFXTreeHandler.behavior = sBehavior || webFXTreeConfig.defaultBehavior; } + this.targetWindow = 'right'; +} + +WebFXTree.prototype = new WebFXTreeAbstractNode; + +WebFXTree.prototype.setBehavior = function (sBehavior) { + webFXTreeHandler.behavior = sBehavior; +}; + +WebFXTree.prototype.getBehavior = function (sBehavior) { + return webFXTreeHandler.behavior; +}; + +WebFXTree.prototype.getSelected = function() { + if (webFXTreeHandler.selected) { return webFXTreeHandler.selected; } + else { return null; } +} + +WebFXTree.prototype.remove = function() { } + +WebFXTree.prototype.expand = function() { + this.doExpand(); +} + +WebFXTree.prototype.collapse = function() { + this.focus(); + this.doCollapse(); +} + +WebFXTree.prototype.getFirst = function() { + return null; +} + +WebFXTree.prototype.getLast = function() { + return null; +} + +WebFXTree.prototype.getNextSibling = function() { + return null; +} + +WebFXTree.prototype.getPreviousSibling = function() { + return null; +} + +WebFXTree.prototype.keydown = function(key) { + if (key == 39) { this.expand(); return false; } + if (key == 37) { this.collapse(); return false; } + if ((key == 40) && (this.open)) { this.childNodes[0].select(); return false; } + return true; +} + +WebFXTree.prototype.toString = function() { + var str = "<div id=\"" + this.id + "\" ondblclick=\"webFXTreeHandler.toggle(this);\" class=\"webfx-tree-item\" onkeydown=\"return webFXTreeHandler.keydown(this)\">"; + str += "<img id=\"" + this.id + "-icon\" class=\"webfx-tree-icon\" src=\"" + ((webFXTreeHandler.behavior == 'classic' && this.open)?this.openIcon:this.icon) + "\" onclick=\"webFXTreeHandler.select(this);\"><a href=\"" + this.action + "\" id=\"" + this.id + "-anchor\" target=\"" + this.targetWindow + "\" onfocus=\"webFXTreeHandler.focus(this);\" onblur=\"webFXTreeHandler.blur(this);\">" + this.text + "</a></div>"; + str += "<div id=\"" + this.id + "-cont\" class=\"webfx-tree-container\" style=\"display: " + ((this.open)?'block':'none') + ";\">"; + for (var i = 0; i < this.childNodes.length; i++) { + str += this.childNodes[i].toString(i, this.childNodes.length); + } + str += "</div>"; + this.rendered = true; + return str; +}; + +/* + * WebFXTreeItem class + */ + +function WebFXTreeItem(sText, sAction, eParent, sIcon, sOpenIcon) { + this.base = WebFXTreeAbstractNode; + this.base(sText, sAction); + /* Defaults to close */ + this.open = (webFXTreeHandler.cookies.getCookie(this.id.substr(18,this.id.length - 18)) == '1')?true:false; + if (eParent) { eParent.add(this); } + if (sIcon) { this.icon = sIcon; } + if (sOpenIcon) { this.openIcon = sOpenIcon; } +} + +WebFXTreeItem.prototype = new WebFXTreeAbstractNode; + +WebFXTreeItem.prototype.remove = function() { + var parentNode = this.parentNode; + var prevSibling = this.getPreviousSibling(true); + var nextSibling = this.getNextSibling(true); + var folder = this.parentNode.folder; + var last = ((nextSibling) && (nextSibling.parentNode) && (nextSibling.parentNode.id == parentNode.id))?false:true; + this.getPreviousSibling().focus(); + this._remove(); + if (parentNode.childNodes.length == 0) { + parentNode.folder = false; + parentNode.open = false; + } + if (last) { + if (parentNode.id == prevSibling.id) { + document.getElementById(parentNode.id + '-icon').src = webFXTreeConfig.fileIcon; + } + else { } + } + if ((!prevSibling.parentNode) || (prevSibling.parentNode != parentNode)) { + parentNode.indent(null, true, last, this._level); + } + if (document.getElementById(prevSibling.id + '-plus')) { + if (nextSibling) { + if ((parentNode == prevSibling) && (parentNode.getNextSibling)) { document.getElementById(prevSibling.id + '-plus').src = webFXTreeConfig.tIcon; } + else if (nextSibling.parentNode != prevSibling) { document.getElementById(prevSibling.id + '-plus').src = webFXTreeConfig.lIcon; } + } + else { document.getElementById(prevSibling.id + '-plus').src = webFXTreeConfig.lIcon; } + } +} + +WebFXTreeItem.prototype._remove = function() { + for (var i = this.childNodes.length - 1; i >= 0; i--) { + this.childNodes[i]._remove(); + } + for (var i = 0; i < this.parentNode.childNodes.length; i++) { + if (this.id == this.parentNode.childNodes[i].id) { + for (var j = i; j < this.parentNode.childNodes.length; j++) { + this.parentNode.childNodes[i] = this.parentNode.childNodes[i+1] + } + this.parentNode.childNodes.length = this.parentNode.childNodes.length - 1; + if (i + 1 == this.parentNode.childNodes.length) { this.parentNode._last = true; } + } + } + webFXTreeHandler.all[this.id] = null; + if (document.getElementById(this.id)) { + document.getElementById(this.id).innerHTML = ""; + document.getElementById(this.id).removeNode(); + } +} + +WebFXTreeItem.prototype.expand = function() { + this.doExpand(); + document.getElementById(this.id + '-plus').src = this.minusIcon; +} + +WebFXTreeItem.prototype.collapse = function() { + this.focus(); + this.doCollapse(); + document.getElementById(this.id + '-plus').src = this.plusIcon; +} + +WebFXTreeItem.prototype.getFirst = function() { + return this.childNodes[0]; +} + +WebFXTreeItem.prototype.getLast = function() { + if (this.childNodes[this.childNodes.length - 1].open) { return this.childNodes[this.childNodes.length - 1].getLast(); } + else { return this.childNodes[this.childNodes.length - 1]; } +} + +WebFXTreeItem.prototype.getNextSibling = function() { + for (var i = 0; i < this.parentNode.childNodes.length; i++) { + if (this == this.parentNode.childNodes[i]) { break; } + } + if (++i == this.parentNode.childNodes.length) { return this.parentNode.getNextSibling(); } + else { return this.parentNode.childNodes[i]; } +} + +WebFXTreeItem.prototype.getPreviousSibling = function(b) { + for (var i = 0; i < this.parentNode.childNodes.length; i++) { + if (this == this.parentNode.childNodes[i]) { break; } + } + if (i == 0) { return this.parentNode; } + else { + if ((this.parentNode.childNodes[--i].open) || (b && this.parentNode.childNodes[i].folder)) { return this.parentNode.childNodes[i].getLast(); } + else { return this.parentNode.childNodes[i]; } +} } + +WebFXTreeItem.prototype.keydown = function(key) { + if ((key == 39) && (this.folder)) { + if (!this.open) { this.expand(); return false; } + else { this.getFirst().select(); return false; } + } + else if (key == 37) { + if (this.open) { this.collapse(); return false; } + else { this.parentNode.select(); return false; } + } + else if (key == 40) { + if (this.open) { this.getFirst().select(); return false; } + else { + var sib = this.getNextSibling(); + if (sib) { sib.select(); return false; } + } } + else if (key == 38) { this.getPreviousSibling().select(); return false; } + return true; +} + +WebFXTreeItem.prototype.toString = function (nItem, nItemCount) { + var foo = this.parentNode; + var indent = ''; + if (nItem + 1 == nItemCount) { this.parentNode._last = true; } + var i = 0; + while (foo.parentNode) { + foo = foo.parentNode; + indent = "<img id=\"" + this.id + "-indent-" + i + "\" src=\"" + ((foo._last)?webFXTreeConfig.blankIcon:webFXTreeConfig.iIcon) + "\">" + indent; + i++; + } + this._level = i; + if (this.childNodes.length) { this.folder = 1; } + else { this.open = false; } + if ((this.folder) || (webFXTreeHandler.behavior != 'classic')) { + if (!this.icon) { this.icon = webFXTreeConfig.folderIcon; } + if (!this.openIcon) { this.openIcon = webFXTreeConfig.openFolderIcon; } + } + else if (!this.icon) { this.icon = webFXTreeConfig.fileIcon; } + var label = this.text; + label = label.replace('<', '<'); + label = label.replace('>', '>'); + var str = "<div id=\"" + this.id + "\" ondblclick=\"webFXTreeHandler.toggle(this);\" class=\"webfx-tree-item\" onkeydown=\"return webFXTreeHandler.keydown(this)\">"; + str += indent; + str += "<img id=\"" + this.id + "-plus\" src=\"" + ((this.folder)?((this.open)?((this.parentNode._last)?webFXTreeConfig.lMinusIcon:webFXTreeConfig.tMinusIcon):((this.parentNode._last)?webFXTreeConfig.lPlusIcon:webFXTreeConfig.tPlusIcon)):((this.parentNode._last)?webFXTreeConfig.lIcon:webFXTreeConfig.tIcon)) + "\" onclick=\"webFXTreeHandler.toggle(this);\">" + str += "<img id=\"" + this.id + "-icon\" src=\"" + ((webFXTreeHandler.behavior == 'classic' && this.open)?this.openIcon:this.icon) + "\" onclick=\"webFXTreeHandler.select(this);\"><a href=\"" + this.action + "\" id=\"" + this.id + "-anchor\" target=\"" + this.targetWindow + "\" onfocus=\"webFXTreeHandler.focus(this);\" onblur=\"webFXTreeHandler.blur(this);\">" + label + "</a></div>"; + str += "<div id=\"" + this.id + "-cont\" class=\"webfx-tree-container\" style=\"display: " + ((this.open)?'block':'none') + ";\">"; + for (var i = 0; i < this.childNodes.length; i++) { + str += this.childNodes[i].toString(i,this.childNodes.length); + } + str += "</div>"; + this.plusIcon = ((this.parentNode._last)?webFXTreeConfig.lPlusIcon:webFXTreeConfig.tPlusIcon); + this.minusIcon = ((this.parentNode._last)?webFXTreeConfig.lMinusIcon:webFXTreeConfig.tMinusIcon); + return str; +}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/stylesheet.css b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/stylesheet.css new file mode 100755 index 00000000..ccedc6a4 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/stylesheet.css @@ -0,0 +1,184 @@ +a { color: #0000C0; text-decoration: underline; } +a:hover { text-decoration: underline; background-color: #FFFFFF } +a:active { text-decoration: underline; background-color: #FFFFFF } + +body, table { background-color: #EEEEEE; font-family: Verdana, Arial, sans-serif; font-size: 10pt } +p, li { line-height: 140% } +a img { border: 0px; } +dd { margin-left: 0px; padding-left: 1em; } + +/* Page layout/boxes */ + +.info-box {} +.info-box-title { margin: 1em 0em 0em 0em; padding: .25em; font-weight: normal; font-size: 14pt; border: 2px solid #999999; background-color: #FFFFFF } +.info-box-body { border: 1px solid #999999; padding: .5em; } +.nav-bar { font-size: 8pt; white-space: nowrap; text-align: right; padding: .2em; margin: 0em 0em 1em 0em; } + +.oddrow { background-color: #F8F8F8; border: 1px solid #AAAAAA; padding: .5em; margin-bottom: 1em} +.evenrow { border: 1px solid #AAAAAA; padding: .5em; margin-bottom: 1em} + +.page-body { max-width: 800px; margin: auto; } +.tree { } + +/* Index formatting classes */ + +.index-item-body { margin-top: .5em; margin-bottom: .5em} +.index-item-description { margin-top: .25em } +.index-item-details { font-weight: normal; font-style: italic; font-size: 8pt } +.index-letter-section { background-color: #EEEEEE; border: 1px dotted #999999; padding: .5em; margin-bottom: 1em} +.index-letter-title { font-size: 12pt; font-weight: bold } +.index-letter-menu { text-align: center; margin: 1em } +.index-letter { font-size: 12pt } + +/* Docbook classes */ + +.description {} +.short-description { font-weight: bold; color: #666666; } +.tags { padding-left: 0em; margin-left: 3em; color: #666666; list-style-type: square; } +.parameters { padding-left: 0em; margin-left: 3em; font-style: italic; list-style-type: square; } +.redefinitions { font-size: 8pt; padding-left: 0em; margin-left: 2em; } +.package { } +.package-title { font-weight: bold; font-size: 14pt; border-bottom: 1px solid black } +.package-details { font-size: 85%; } +.sub-package { font-weight: bold; font-size: 120% } +.tutorial { border-width: thin; border-color: #0066ff } +.tutorial-nav-box { width: 100%; border: 1px solid #AAAAAA; background-color: #DDDDFF; } +.nav-button-disabled { color: #AAAAAA; } +.nav-button:active, +.nav-button:focus, +.nav-button:hover { background-color: #CCCCCC; outline: 1px solid #999999; text-decoration: none } +.folder-title { font-style: italic } + +/* Generic formatting */ + +.field { font-weight: bold; } +.detail { font-size: 8pt; } +.notes { font-style: italic; font-size: 8pt; } +.separator { background-color: #999999; height: 2px; } +.warning { color: #FF6600; } +.disabled { font-style: italic; color: #999999; } + +/* Code elements */ + +.line-number { } + +.class-table { width: 100%; } +.class-table-header { border-bottom: 1px dotted #666666; text-align: left; background-color: DDDDFF } +.class-name { color: #000000; font-weight: bold; } + +.method-summary { padding-left: 1em; font-size: 8pt } +.method-header { background-color: #DDDDFF; padding: 1px; } +.method-definition { margin-bottom: .3em } +.method-title { font-weight: bold } +.method-name { font-weight: bold; } +.method-signature { font-size: 85%; color: #666666; margin: .5em 0em } +.method-result { font-style: italic; } + +.var-summary { padding-left: 1em; font-size: 8pt; } +.var-header { background-color: #DDDDFF; padding: 1px; } +.var-title { margin-bottom: .3em } +.var-type { font-style: italic; } +.var-name { font-weight: bold; } +.var-default {} +.var-description { font-weight: normal; color: #000000; } + +.include-title { } +.include-type { font-style: italic; } +.include-name { font-weight: bold; } + +.const-title { } +.const-name { font-weight: bold; } + +/* Syntax highlighting */ + +.src-code { border: 1px solid #999999; padding: 1em; + font-family: 'Courier New', Courier, monospace; font-weight: normal; } +.src-line { font-family: 'Courier New', Courier, monospace; font-weight: normal; } + +.src-comm { color: green; } +.src-id { } +.src-inc { color: #0000FF; } +.src-key { color: #0000FF; } +.src-num { color: #CC0000; } +.src-str { color: #66cccc; } +.src-sym { font-weight: bold; } +.src-var { } + +.src-php { font-weight: bold; } + +.src-doc { color: #009999 } +.src-doc-close-template { color: #0000FF } +.src-doc-coretag { color: #0099FF; font-weight: bold } +.src-doc-inlinetag { color: #0099FF } +.src-doc-internal { color: #6699cc } +.src-doc-tag { color: #0080CC } +.src-doc-template { color: #0000FF } +.src-doc-type { font-style: italic } +.src-doc-var { font-style: italic } + +.tute-tag { color: #009999 } +.tute-attribute-name { color: #0000FF } +.tute-attribute-value { color: #0099FF } +.tute-entity { font-weight: bold; } +.tute-comment { font-style: italic } +.tute-inline-tag { color: #636311; font-weight: bold } + +/* tutorial */ + +.authors { } +.author { font-style: italic; font-weight: bold } +.author-blurb { margin: .5em 0em .5em 2em; font-size: 85%; font-weight: normal; font-style: normal } +.example { border: 1px dashed #999999; background-color: #EEEEEE; padding: .5em; } +.listing { border: 1px dashed #999999; background-color: #EEEEEE; padding: .5em; white-space: nowrap; } +.release-info { font-size: 85%; font-style: italic; margin: 1em 0em } +.ref-title-box { } +.ref-title { } +.ref-purpose { font-style: italic; color: #666666 } +.ref-synopsis { } +.title { font-weight: bold; border: 2px solid #999999; background-color: #FFFFFF; padding: 2px } +.cmd-synopsis { margin: 1em 0em } +.cmd-title { font-weight: bold } +.toc { margin-left: 2em; padding-left: 0em } + +/*------------------------------------------------------------------------------ + webfx-tree +------------------------------------------------------------------------------*/ + +.webfx-tree-container { + margin: 0px; + padding: 0px; + white-space: nowrap; + font: icon; +} + +.webfx-tree-item { + padding: 0px; + margin: 0px; + color: black; + white-space: nowrap; + font: icon; +} + +.webfx-tree-item a { + margin-left: 3px; + padding: 1px 2px 1px 2px; + color: black; + text-decoration: none; +} + +.webfx-tree-item a:hover, .webfx-tree-item a:active { + color: #666666; + background: white; + text-decoration: none +} + +.webfx-tree-item img { + vertical-align: middle; + border: 0px; +} + +.webfx-tree-icon { + width: 16px; + height: 16px; +} + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/method.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/method.tpl new file mode 100755 index 00000000..06d57a12 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/method.tpl @@ -0,0 +1,149 @@ +<A NAME='method_detail'></A> +{section name=methods loop=$methods} +{if $methods[methods].static} +<a name="method{$methods[methods].function_name}" id="{$methods[methods].function_name}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div class="method-header"> + <span class="method-title">static {$methods[methods].function_name}</span> (line <span class="line-number">{if $methods[methods].slink}{$methods[methods].slink}{else}{$methods[methods].line_number}{/if}</span>) + </div> + + {include file="docblock.tpl" sdesc=$methods[methods].sdesc desc=$methods[methods].desc tags=$methods[methods].tags params=$methods[methods].params function=false} + + <div class="method-signature"> + static <span class="method-result">{$methods[methods].function_return}</span> + <span class="method-name"> + {if $methods[methods].ifunction_call.returnsref}&{/if}{$methods[methods].function_name} + </span> + {if count($methods[methods].ifunction_call.params)} + ({section name=params loop=$methods[methods].ifunction_call.params}{if $smarty.section.params.iteration != 1}, {/if}{if $methods[methods].ifunction_call.params[params].hasdefault}[{/if}<span class="var-type">{$methods[methods].ifunction_call.params[params].type}</span> <span class="var-name">{$methods[methods].ifunction_call.params[params].name}</span>{if $methods[methods].ifunction_call.params[params].hasdefault} = <span class="var-default">{$methods[methods].ifunction_call.params[params].default}</span>]{/if}{/section}) + {else} + () + {/if} + </div> + + {if $methods[methods].params} + <ul class="parameters"> + {section name=params loop=$methods[methods].params} + <li> + <span class="var-type">{$methods[methods].params[params].datatype}</span> + <span class="var-name">{$methods[methods].params[params].var}</span>{if $methods[methods].params[params].data}<span class="var-description">: {$methods[methods].params[params].data}</span>{/if} + </li> + {/section} + </ul> + {/if} + + {if $methods[methods].method_overrides} + <hr class="separator" /> + <div class="notes">Redefinition of:</div> + <dl> + <dt>{$methods[methods].method_overrides.link}</dt> + {if $methods[methods].method_overrides.sdesc} + <dd>{$methods[methods].method_overrides.sdesc}</dd> + {/if} + </dl> + {/if} + {if $methods[methods].method_implements} + <hr class="separator" /> + <div class="notes">Implementation of:</div> + {section name=imp loop=$methods[methods].method_implements} + <dl> + <dt>{$methods[methods].method_implements[imp].link}</dt> + {if $methods[methods].method_implements[imp].sdesc} + <dd>{$methods[methods].method_implements[imp].sdesc}</dd> + {/if} + </dl> + {/section} + {/if} + + {if $methods[methods].descmethod} + <hr class="separator" /> + <div class="notes">Redefined in descendants as:</div> + <ul class="redefinitions"> + {section name=dm loop=$methods[methods].descmethod} + <li> + {$methods[methods].descmethod[dm].link} + {if $methods[methods].descmethod[dm].sdesc} + : {$methods[methods].descmethod[dm].sdesc} + {/if} + </li> + {/section} + </ul> + {/if} +</div> +{/if} +{/section} +{section name=methods loop=$methods} +{if !$methods[methods].static} +<a name="method{$methods[methods].function_name}" id="{$methods[methods].function_name}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div class="method-header"> + <span class="method-title">{if $methods[methods].ifunction_call.constructor}Constructor {elseif $methods[methods].ifunction_call.destructor}Destructor {/if}{$methods[methods].function_name}</span> (line <span class="line-number">{if $methods[methods].slink}{$methods[methods].slink}{else}{$methods[methods].line_number}{/if}</span>) + </div> + + {include file="docblock.tpl" sdesc=$methods[methods].sdesc desc=$methods[methods].desc tags=$methods[methods].tags params=$methods[methods].params function=false} + + <div class="method-signature"> + <span class="method-result">{$methods[methods].function_return}</span> + <span class="method-name"> + {if $methods[methods].ifunction_call.returnsref}&{/if}{$methods[methods].function_name} + </span> + {if count($methods[methods].ifunction_call.params)} + ({section name=params loop=$methods[methods].ifunction_call.params}{if $smarty.section.params.iteration != 1}, {/if}{if $methods[methods].ifunction_call.params[params].hasdefault}[{/if}<span class="var-type">{$methods[methods].ifunction_call.params[params].type}</span> <span class="var-name">{$methods[methods].ifunction_call.params[params].name}</span>{if $methods[methods].ifunction_call.params[params].hasdefault} = <span class="var-default">{$methods[methods].ifunction_call.params[params].default}</span>]{/if}{/section}) + {else} + () + {/if} + </div> + + {if $methods[methods].params} + <ul class="parameters"> + {section name=params loop=$methods[methods].params} + <li> + <span class="var-type">{$methods[methods].params[params].datatype}</span> + <span class="var-name">{$methods[methods].params[params].var}</span>{if $methods[methods].params[params].data}<span class="var-description">: {$methods[methods].params[params].data}</span>{/if} + </li> + {/section} + </ul> + {/if} + + {if $methods[methods].method_overrides} + <hr class="separator" /> + <div class="notes">Redefinition of:</div> + <dl> + <dt>{$methods[methods].method_overrides.link}</dt> + {if $methods[methods].method_overrides.sdesc} + <dd>{$methods[methods].method_overrides.sdesc}</dd> + {/if} + </dl> + {/if} + {if $methods[methods].method_implements} + <hr class="separator" /> + <div class="notes">Implementation of:</div> + {section name=imp loop=$methods[methods].method_implements} + <dl> + <dt>{$methods[methods].method_implements[imp].link}</dt> + {if $methods[methods].method_implements[imp].sdesc} + <dd>{$methods[methods].method_implements[imp].sdesc}</dd> + {/if} + </dl> + {/section} + {/if} + + {if $methods[methods].descmethod} + <hr class="separator" /> + <div class="notes">Redefined in descendants as:</div> + <ul class="redefinitions"> + {section name=dm loop=$methods[methods].descmethod} + <li> + {$methods[methods].descmethod[dm].link} + {if $methods[methods].descmethod[dm].sdesc} + : {$methods[methods].descmethod[dm].sdesc} + {/if} + </li> + {/section} + </ul> + {/if} +</div> +{/if} +{/section} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/page.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/page.tpl new file mode 100755 index 00000000..b5980236 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/page.tpl @@ -0,0 +1,211 @@ +{include file="header.tpl" top3=true} + +<h2 class="file-name">{$source_location}</h2> + +<a name="sec-description"></a> +<div class="info-box"> + <div class="info-box-title">Description</div> + <div class="nav-bar"> + {if $classes || $includes || $defines || $globals || $functions} + <span class="disabled">Description</span> | + {/if} + {if $classes} + <a href="#sec-classes">Classes</a> + {if $includes || $defines || $globals || $functions}|{/if} + {/if} + {if $includes} + <a href="#sec-includes">Includes</a> + {if $defines || $globals || $functions}|{/if} + {/if} + {if $defines} + <a href="#sec-constants">Constants</a> + {if $globals || $functions}|{/if} + {/if} + {if $globals} + <a href="#sec-variables">Variables</a> + {if $functions}|{/if} + {/if} + {if $functions} + <a href="#sec-functions">Functions</a> + {/if} + </div> + <div class="info-box-body"> + {include file="docblock.tpl" desc=$desc sdesc=$sdesc tags=$tags} + + {if $tutorial} + <hr class="separator" /> + <div class="notes">Tutorial: <span class="tutorial">{$tutorial}</div> + {/if} + </div> +</div> + +{if $classes} + <a name="sec-classes"></a> + <div class="info-box"> + <div class="info-box-title">Classes</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + <span class="disabled">Classes</span> + {if $includes || $defines || $globals || $functions}|{/if} + {if $includes} + <a href="#sec-includes">Includes</a> + {if $defines || $globals || $functions}|{/if} + {/if} + {if $defines} + <a href="#sec-constants">Constants</a> + {if $globals || $functions}|{/if} + {/if} + {if $globals} + <a href="#sec-variables">Variables</a> + {if $functions}|{/if} + {/if} + {if $functions} + <a href="#sec-functions">Functions</a> + {/if} + </div> + <div class="info-box-body"> + <table cellpadding="2" cellspacing="0" class="class-table"> + <tr> + <th class="class-table-header">Class</th> + <th class="class-table-header">Description</th> + </tr> + {section name=classes loop=$classes} + <tr> + <td style="padding-right: 2em; vertical-align: top"> + {$classes[classes].link} + </td> + <td> + {if $classes[classes].sdesc} + {$classes[classes].sdesc} + {else} + {$classes[classes].desc} + {/if} + </td> + </tr> + {/section} + </table> + </div> + </div> +{/if} + +{if $includes} + <a name="sec-includes"></a> + <div class="info-box"> + <div class="info-box-title">Includes</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $classes} + <a href="#sec-classes">Classes</a> + {if $includes || $defines || $globals || $functions}|{/if} + {/if} + <span class="disabled">Includes</span> + {if $defines || $globals || $functions}|{/if} + {if $defines} + <a href="#sec-constants">Constants</a> + {if $globals || $functions}|{/if} + {/if} + {if $globals} + <a href="#sec-variables">Variables</a> + {if $functions}|{/if} + {/if} + {if $functions} + <a href="#sec-functions">Functions</a> + {/if} + </div> + <div class="info-box-body"> + {include file="include.tpl"} + </div> + </div> +{/if} + +{if $defines} + <a name="sec-constants"></a> + <div class="info-box"> + <div class="info-box-title">Constants</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $classes} + <a href="#sec-classes">Classes</a> + {if $includes || $defines || $globals || $functions}|{/if} + {/if} + {if $includes} + <a href="#sec-includes">Includes</a> + {if $defines || $globals || $functions}|{/if} + {/if} + <span class="disabled">Constants</span> + {if $globals || $functions}|{/if} + {if $globals} + <a href="#sec-variables">Variables</a> + {if $functions}|{/if} + {/if} + {if $functions} + <a href="#sec-functions">Functions</a> + {/if} + </div> + <div class="info-box-body"> + {include file="define.tpl"} + </div> + </div> +{/if} + +{if $globals} + <a name="sec-variables"></a> + <div class="info-box"> + <div class="info-box-title">Variables</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $classes} + <a href="#sec-classes">Classes</a> + {if $includes || $defines || $globals || $functions}|{/if} + {/if} + {if $includes} + <a href="#sec-includes">Includes</a> + {if $defines || $globals || $functions}|{/if} + {/if} + {if $defines} + <a href="#sec-constants">Constants</a> + {if $globals || $functions}|{/if} + {/if} + <span class="disabled">Variables</span> + {if $functions}|{/if} + {if $functions} + <a href="#sec-functions">Functions</a> + {/if} + </div> + <div class="info-box-body"> + {include file="global.tpl"} + </div> + </div> +{/if} + +{if $functions} + <a name="sec-functions"></a> + <div class="info-box"> + <div class="info-box-title">Functions</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $classes} + <a href="#sec-classes">Classes</a> + {if $includes || $defines || $globals || $functions}|{/if} + {/if} + {if $includes} + <a href="#sec-includes">Includes</a> + {if $defines || $globals || $functions}|{/if} + {/if} + {if $defines} + <a href="#sec-constants">Constants</a> + {if $globals || $functions}|{/if} + {/if} + {if $globals} + <a href="#sec-variables">Variables</a> + {if $functions}|{/if} + {/if} + <span class="disabled">Functions</span> + </div> + <div class="info-box-body"> + {include file="function.tpl"} + </div> + </div> +{/if} + +{include file="footer.tpl" top3=true} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/pkgelementindex.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/pkgelementindex.tpl new file mode 100755 index 00000000..dc283ad0 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/pkgelementindex.tpl @@ -0,0 +1,17 @@ +{include file="header.tpl"} +<a name="top"></a> +<h2>[{$package}] element index</h2> +{if count($packageindex) > 1} + <h3>Package indexes</h3> + <ul> + {section name=p loop=$packageindex} + {if $packageindex[p].title != $package} + <li><a href="elementindex_{$packageindex[p].title}.html">{$packageindex[p].title}</a></li> + {/if} + {/section} + </ul> +{/if} +<a href="elementindex.html">All elements</a> +<br /> +{include file="basicindex.tpl" indexname=elementindex_$package} +{include file="footer.tpl"} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/ric.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/ric.tpl new file mode 100755 index 00000000..ad792475 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/ric.tpl @@ -0,0 +1,6 @@ +{include file="header.tpl"} +<div align="center"><h1>{$name}</h1></div> +<pre> +{$contents|htmlentities} +</pre> +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/todolist.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/todolist.tpl new file mode 100755 index 00000000..f929ccdb --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/todolist.tpl @@ -0,0 +1,14 @@ +{include file="header.tpl" title="Todo List"} +<div align="center"><h1>Todo List</h1></div> +{foreach from=$todos key=todopackage item=todo} +<h2>{$todopackage}</h2> +{section name=todo loop=$todo} +<h3>{$todo[todo].link}</h3> +<ul> +{section name=t loop=$todo[todo].todos} + <li>{$todo[todo].todos[t]}</li> +{/section} +</ul> +{/section} +{/foreach} +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/top_frame.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/top_frame.tpl new file mode 100755 index 00000000..36d1e5a1 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/top_frame.tpl @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> + <html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <!-- template designed by Marco Von Ballmoos --> + <title>{$title}</title> + <link rel="stylesheet" href="{$subdir}media/stylesheet.css" /> + <link rel="stylesheet" href="{$subdir}media/banner.css" /> + <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/> + </head> + <body> + <div class="banner"> + <div class="banner-title">{$package}</div> + <div class="banner-menu"> + <form> + <table cellpadding="0" cellspacing="0" style="width: 100%"> + <tr> + <td> + {if count($ric) >= 1} + {assign var="last_ric_name" value=""} + {section name=ric loop=$ric} + {if $last_ric_name != ""} | {/if} + <a href="{$ric[ric].file}" target="right">{$ric[ric].name}</a> + {assign var="last_ric_name" value=$ric[ric].name} + {/section} + {/if} + </td> + <td style="width: 2em"> </td> + <td style="text-align: right"> + {if count($packages) > 1} + <span class="field">Packages</span> + <select class="package-selector" onchange="window.parent.left_bottom.location=this[selectedIndex].value"> + {section name=p loop=$packages} + <option value="{$packages[p].link}">{$packages[p].title}</option> + {/section} + </select> + {/if} + </td> + </tr> + </table> + </form> + </div> + </div> + </body> + </html> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/tutorial.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/tutorial.tpl new file mode 100755 index 00000000..3b9109d1 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/tutorial.tpl @@ -0,0 +1,13 @@ +{include file="header.tpl" title=$title top3=true} + +{if $nav} + {include file="tutorial_nav.tpl" prev=$prev next=$next up=$up prevtitle=$prevtitle nexttitle=$nexttitle uptitle=$uptitle} +{/if} + +{$contents} + +{if $nav} + {include file="tutorial_nav.tpl" prev=$prev next=$next up=$up prevtitle=$prevtitle nexttitle=$nexttitle uptitle=$uptitle} +{/if} + +{include file="footer.tpl" top3=true}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/tutorial_nav.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/tutorial_nav.tpl new file mode 100755 index 00000000..89952301 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/tutorial_nav.tpl @@ -0,0 +1,41 @@ +<table class="tutorial-nav-box"> + <tr> + <td style="width: 30%"> + {if $prev} + <a href="{$prev}" class="nav-button">Previous</a> + {else} + <span class="nav-button-disabled">Previous</span> + {/if} + </td> + <td style="text-align: center"> + {if $up} + <a href="{$up}" class="nav-button">Up</a> + {/if} + </td> + <td style="text-align: right; width: 30%"> + {if $next} + <a href="{$next}" class="nav-button">Next</a> + {else} + <span class="nav-button-disabled">Next</span> + {/if} + </td> + </tr> + <tr> + <td style="width: 30%"> + {if $prevtitle} + <span class="detail">{$prevtitle}</span> + {/if} + </td> + <td style="text-align: center"> + {if $uptitle} + <span class="detail">{$uptitle}</span> + {/if} + </td> + <td style="text-align: right; width: 30%"> + {if $nexttitle} + <span class="detail">{$nexttitle}</span> + {/if} + </td> + </tr> +</table> +
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/tutorial_toc.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/tutorial_toc.tpl new file mode 100755 index 00000000..3482249b --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/tutorial_toc.tpl @@ -0,0 +1,40 @@ +{if count($toc)} +<h1 class="title">Table of Contents</h1> +<ul class="toc"> + {assign var="lastcontext" value='refsect1'} + {section name=toc loop=$toc} + + {if $toc[toc].tagname != $lastcontext} + {if $lastcontext == 'refsect1'} + <ul class="toc"> + <li>{$toc[toc].link}</li> + {else} + {if $lastcontext == 'refsect2'} + {if $toc[toc].tagname == 'refsect1'} + </ul> + <li>{$toc[toc].link}</li> + {/if} + {if $toc[toc].tagname == 'refsect3'} + <ul class="toc"> + <li>{$toc[toc].link}</li> + {/if} + {else} + </ul> + </ul> + <li>{$toc[toc].link}</li> + {/if} + {/if} + {assign var="lastcontext" value=$toc[toc].tagname} + {else} + <li>{$toc[toc].link}</li> + {/if} + {/section} + {if $lastcontext == 'refsect2'} + </ul> + {/if} + {if $lastcontext == 'refsect3'} + </ul> + </ul> + {/if} +</ul> +{/if} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/tutorial_tree.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/tutorial_tree.tpl new file mode 100755 index 00000000..40d9a4ff --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/tutorial_tree.tpl @@ -0,0 +1,8 @@ + var a{$name|replace:"-":"_"}node = new WebFXTreeItem('{$main.title|strip_tags|escape:"quotes"}','{$main.link}', parent_node); + +{if $haskids} + var a{$name|replace:"-":"_"}_old_parent_node = parent_node; + parent_node = a{$name|replace:"-":"_"}node; + {$kids} + parent_node = a{$name|replace:"-":"_"}_old_parent_node; +{/if} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/var.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/var.tpl new file mode 100755 index 00000000..fccf6892 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/var.tpl @@ -0,0 +1,92 @@ +{section name=vars loop=$vars} +{if $vars[vars].static} +<a name="var{$vars[vars].var_name}" id="{$vars[vars].var_name}"><!-- --></A> +<div class="{cycle values="evenrow,oddrow"}"> + + <div class="var-header"> + <span class="var-title"> + static <span class="var-type">{$vars[vars].var_type}</span> + <span class="var-name">{$vars[vars].var_name}</span> + {if $vars[vars].var_default} = <span class="var-default">{$vars[vars].var_default|replace:"\n":"<br />"}</span>{/if} + (line <span class="line-number">{if $vars[vars].slink}{$vars[vars].slink}{else}{$vars[vars].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$vars[vars].sdesc desc=$vars[vars].desc tags=$vars[vars].tags} + + {if $vars[vars].var_overrides} + <hr class="separator" /> + <div class="notes">Redefinition of:</div> + <dl> + <dt>{$vars[vars].var_overrides.link}</dt> + {if $vars[vars].var_overrides.sdesc} + <dd>{$vars[vars].var_overrides.sdesc}</dd> + {/if} + </dl> + {/if} + + {if $vars[vars].descvar} + <hr class="separator" /> + <div class="notes">Redefined in descendants as:</div> + <ul class="redefinitions"> + {section name=vm loop=$vars[vars].descvar} + <li> + {$vars[vars].descvar[vm].link} + {if $vars[vars].descvar[vm].sdesc} + : {$vars[vars].descvar[vm].sdesc} + {/if} + </li> + {/section} + </ul> + {/if} + +</div> +{/if} +{/section} + +{section name=vars loop=$vars} +{if !$vars[vars].static} +<a name="var{$vars[vars].var_name}" id="{$vars[vars].var_name}"><!-- --></A> +<div class="{cycle values="evenrow,oddrow"}"> + + <div class="var-header"> + <span class="var-title"> + <span class="var-type">{$vars[vars].var_type}</span> + <span class="var-name">{$vars[vars].var_name}</span> + {if $vars[vars].var_default} = <span class="var-default">{$vars[vars].var_default|replace:"\n":"<br />"}</span>{/if} + (line <span class="line-number">{if $vars[vars].slink}{$vars[vars].slink}{else}{$vars[vars].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$vars[vars].sdesc desc=$vars[vars].desc tags=$vars[vars].tags} + + {if $vars[vars].var_overrides} + <hr class="separator" /> + <div class="notes">Redefinition of:</div> + <dl> + <dt>{$vars[vars].var_overrides.link}</dt> + {if $vars[vars].var_overrides.sdesc} + <dd>{$vars[vars].var_overrides.sdesc}</dd> + {/if} + </dl> + {/if} + + {if $vars[vars].descvar} + <hr class="separator" /> + <div class="notes">Redefined in descendants as:</div> + <ul class="redefinitions"> + {section name=vm loop=$vars[vars].descvar} + <li> + {$vars[vars].descvar[vm].link} + {if $vars[vars].descvar[vm].sdesc} + : {$vars[vars].descvar[vm].sdesc} + {/if} + </li> + {/section} + </ul> + {/if} + +</div> +{/if} +{/section} + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/options.ini b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/options.ini new file mode 100755 index 00000000..084809be --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/options.ini @@ -0,0 +1,577 @@ +preservedocbooktags = false + +;; used to highlight the {@source} inline tag, @filesource tag, and @example tag +[highlightSourceTokens] +;; format: +;; T_CONSTANTNAME = open +;; /T_CONSTANTNAME = close + +T_INCLUDE = <span class="src-inc"> +/T_INCLUDE = </span> +T_INCLUDE_ONCE = <span class="src-inc"> +/T_INCLUDE_ONCE = </span> +T_REQUIRE_ONCE = <span class="src-inc"> +/T_REQUIRE_ONCE = </span> +T_REQUIRE_ONCE = <span class="src-inc"> +/T_REQUIRE_ONCE = </span> + +T_CONSTANT_ENCAPSED_STRING = <span class="src-str"> +/T_CONSTANT_ENCAPSED_STRING = </span> +T_STRING_VARNAME = <span class="src-str"> +/T_STRING_VARNAME = </span> + +T_STRING = <span class="src-id"> +/T_STRING = </span> + +T_DNUMBER = <span class="src-num"> +/T_DNUMBER = </span> +T_LNUMBER = <span class="src-num"> +/T_LNUMBER = </span> + +T_VARIABLE = <span class="src-var"> +/T_VARIABLE = </span> + +T_COMMENT = <span class="src-comm"> +/T_COMMENT = </span> +T_ML_COMMENT = <span class="src-comm"> +/T_ML_COMMENT = </span> + +T_OBJECT_OPERATOR = <span class="src-sym"> +/T_OBJECT_OPERATOR = </span> + +T_ABSTRACT = <span class="src-key"> +/T_ABSTRACT = </span> +T_CLONE = <span class="src-key"> +/T_CLONE = </span> +T_HALT_COMPILER = <span class="src-key"> +/T_HALT_COMPILER = </span> +T_ARRAY = <span class="src-key"> +/T_ARRAY = </span> +T_AS = <span class="src-key"> +/T_AS = </span> +T_BREAK = <span class="src-key"> +/T_BREAK = </span> +T_CLASS = <span class="src-key"> +/T_CLASS = </span> +T_CASE = <span class="src-key"> +/T_CASE = </span> +T_CONST = <span class="src-key"> +/T_CONST = </span> +T_CONTINUE = <span class="src-key"> +/T_CONTINUE = </span> +T_DECLARE = <span class="src-key"> +/T_DECLARE = </span> +T_DEFAULT = <span class="src-key"> +/T_DEFAULT = </span> +T_ELSE = <span class="src-key"> +/T_ELSE = </span> +T_ELSEIF = <span class="src-key"> +/T_ELSEIF = </span> +T_EMPTY = <span class="src-key"> +/T_EMPTY = </span> +T_ENDDECLARE = <span class="src-key"> +/T_ENDDECLARE = </span> +T_ENDFOR = <span class="src-key"> +/T_ENDFOR = </span> +T_ENDSWITCH = <span class="src-key"> +/T_ENDSWITCH = </span> +T_ENDFOREACH = <span class="src-key"> +/T_ENDFOREACH = </span> +T_ENDIF = <span class="src-key"> +/T_ENDIF = </span> +T_ENDWHILE = <span class="src-key"> +/T_ENDWHILE = </span> +T_EXIT = <span class="src-key"> +/T_EXIT = </span> +T_EXTENDS = <span class="src-key"> +/T_EXTENDS = </span> +T_FINAL = <span class="src-key"> +/T_FINAL = </span> +T_FOR = <span class="src-key"> +/T_FOR = </span> +T_FOREACH = <span class="src-key"> +/T_FOREACH = </span> +T_FUNCTION = <span class="src-key"> +/T_FUNCTION = </span> +T_GLOBAL = <span class="src-key"> +/T_GLOBAL = </span> +T_IF = <span class="src-key"> +/T_IF = </span> +T_IMPLEMENTS = <span class="src-key"> +/T_IMPLEMENTS = </span> +T_INTERFACE = <span class="src-key"> +/T_INTERFACE = </span> +T_LOGICAL_AND = <span class="src-key"> +/T_LOGICAL_AND = </span> +T_LOGICAL_OR = <span class="src-key"> +/T_LOGICAL_OR = </span> +T_LOGICAL_XOR = <span class="src-key"> +/T_LOGICAL_XOR = </span> +T_NEW = <span class="src-key"> +/T_NEW = </span> +T_PRIVATE = <span class="src-key"> +/T_PRIVATE = </span> +T_PROTECTED = <span class="src-key"> +/T_PROTECTED = </span> +T_PUBLIC = <span class="src-key"> +/T_PUBLIC = </span> +T_RETURN = <span class="src-key"> +/T_RETURN = </span> +T_STATIC = <span class="src-key"> +/T_STATIC = </span> +T_SWITCH = <span class="src-key"> +/T_SWITCH = </span> +T_VAR = <span class="src-key"> +/T_VAR = </span> +T_WHILE = <span class="src-key"> +/T_WHILE = </span> + +T_DOUBLE_COLON = <span class="src-sym"> +/T_DOUBLE_COLON = </span> + +T_OPEN_TAG = <span class="src-php"> +/T_OPEN_TAG = </span> +T_OPEN_TAG_WITH_ECHO = <span class="src-php"> +/T_OPEN_TAG_WITH_ECHO = </span> +T_CLOSE_TAG = <span class="src-php"> +/T_CLOSE_TAG = </span> + + +[highlightSource] +;; this is for highlighting things that aren't tokens like "&" +;; format: +;; word = open +;; /word = close +@ = <span class="src-sym"> +/@ = </span> +& = <span class="src-sym"> +/& = </span> +[ = <span class="src-sym"> +/[ = </span> +] = <span class="src-sym"> +/] = </span> +! = <span class="src-sym"> +/! = </span> +";" = <span class="src-sym"> +/; = </span> +( = <span class="src-sym"> +/( = </span> +) = <span class="src-sym"> +/) = </span> +, = <span class="src-sym"> +/, = </span> +{ = <span class="src-sym"> +/{ = </span> +} = <span class="src-sym"> +/} = </span> +""" = <span class="src-str"> +/" = </span> + +[highlightDocBlockSourceTokens] +;; this is for docblock tokens, using by phpDocumentor_HighlightParser +;; tagphptype is for "string" in @param string description, for example +docblock = <span class="src-doc"> +/docblock = </span> +tagphptype = <span class="src-doc-type"> +/tagphptype = </span> +tagvarname = <span class="src-doc-var"> +/tagvarname = </span> +coretag = <span class="src-doc-coretag"> +/coretag = </span> +tag = <span class="src-doc-tag"> +/tag = </span> +inlinetag = <span class="src-doc-inlinetag"> +/inlinetag = </span> +internal = <span class="src-doc-internal"> +/internal = </span> +closetemplate = <span class="src-doc-close-template"> +/closetemplate = </span> +docblocktemplate = <span class="src-doc-template"> +/docblocktemplate = </span> + +[highlightTutorialSourceTokens] +;; this is for XML DocBook-based tutorials, highlighted by phpDocumentor_TutorialHighlightParser +;; <tag> +opentag = <span class="tute-tag"> +/opentag = </span> +;; </tag> +closetag = <span class="tute-tag"> +/closetag = </span> +;; <tag attribute="value"> +attribute = <span class="tute-attribute-name"> +/attribute = </span> +;; <tag attribute="value"> +attributevalue = <span class="tute-attribute-value"> +/attributevalue = </span> +;; &entity; +entity = <span class="tute-entity"> +/entity = </span> +;; <!-- comment --> +comment = <span class="tute-comment"> +/comment = </span> +;; {@inline tag} +itag = <span class="tute-inline-tag"> +/itag = </span> + +;; used for translation of html in DocBlocks +[desctranslate] +ul = <ul> +/ul = </ul> +ol = <ol> +/ol = </ol> +li = <li> +/li = </li> +code = +/code = +var = <var> +/var = </var> +samp = <samp> +/samp = </samp> +kbd = <kbd> +/kbd = </kbd> +pre = <pre> +/pre = </pre> +p = <p> +/p = </p> +b = <strong> +/b = </strong> +i = <em> +/i = </em> +br = <br /> + +[ppage] +;; this is the DocBook package page translation section. All DocBook tags +;; that have a corresponding html tag must be listed here. Entities should +;; also be listed here +;; +;; examples: +;; 1) +;; tagname = newtagname +;; +;; This is the simplest case, where all attributes will be added into the +;; starting tag and the ending tag will be html/xml style </tranlatedtagname> +;; <tagname></tagname> becomes <newtagname></newtagname> and +;; <tagname attr="value"></tagname> becomes +;; <newtagname attr="value"></newtagname> +;; +;; 2) +;; tagname = newtagname +;; tagname->attr = newattrname +;; +;; in this case, everything will be like the first case, except tags like: +;; <tagname attr="value"></tagname> will become +;; <newtagname newattrname="value"></newtagname> +;; +;; 3) +;; tagname = newtagname +;; tagname->attr = newattrname +;; tagname->attr+value = newvalue +;; +;; in this case, the value is also translated to another. This can be useful +;; for instances such as focus="middle" changing to align="center" or something +;; of that nature. +;; <tagname attr="value"></tagname> will become +;; <newtagname newattrname="newvalue"></newtagname> +;; +;; 4) +;; tagname = newtagname +;; tagname->attr1 = newattrname +;; tagname->attr2 = newattrname +;; tagname->attr1+value|attr2+value = newvalue +;; +;; in this case, two attributes combine to make one new attribute, and the combined +;; value is translated into a new value +;; <tagname attr1="value1" attr2="value2"></tagname> will become +;; <newtagname newattrname="newvalue"></newtagname> +;; +;; 5) +;; tagname = newtagname +;; tagname!attr = dummy +;; +;; here, the attribute will be ignored. dummy is not used and may be any value +;; <tagname attr="value"></tagname> will become +;; <newtagname></newtagname> +;; +;; 6) +;; tagname = newtagname +;; tagname! = dummy +;; +;; here, all attributes will be ignored. dummy is not used and may be any value +;; <tagname attr1="value" attr2="foo"></tagname> will become +;; <newtagname></newtagname> +;; +;; 7) +;; tagname = newtagname +;; tagname/ = 1 +;; +;; here, the tag will be translated as a single tag with no closing tag, and all +;; attributes +;; <tagname attr="val">{text text}</tagname> will become +;; <newtagname attr="val" /> +;; +;; 8) +;; tagname = <starttaginfo /> +;; /tagname = closetagtext +;; +;; in this case, the text <starttaginfo> will be inserted exactly as entered for +;; <tagname> and closetagtext for </tagname> +;; <tagname attr="val"></tagname> will become +;; <starttaginfo />closetagtext +;; +;; 9) +;; $attr$my_attribute = newattrname +;; +;; tagname = newtagname +;; +;; in this case, all occurences of my_attribute in any tag will be changed to +;; newattrname. This is useful for changing things like role="php" to +;; class="php," for example. Note that the text "$attr$" MUST be on the line +;; start for phpDocumentor to recognize it. +;; +;; 10) +;; &entity; = translation text +;; " = " +;; " = """ +;; < = < +;; +;; Use this to control translation of entities to their appropriate values + + = +" = " +” = ” +“ = “ +& = & +< = < +> = > +© = © + + +$attr$role = class + +abbrev = abbr + +blockquote = blockquote + +arg = span +arg->choice = class + +author = <span class="author"> +/author = </span> +author! = 0 + +authorblurb = <div class="author-blurb"> +/authorblurb = </div> + +authorgroup = <div class="authors"><h2 class="title">Authors</h2> +/authorgroup = </div> +authorgroup! = 0 + +caution = <span class="warning"> +/caution = </span> +caution! = 0 + +cmdsynopsis = <div class="cmd-synopsis"> +/cmdsynopsis = </div> + +command = <span class="cmd-title"> +/command = </span> + +copyright = <div class="notes"> +/copyright = </div> + +emphasis = em + +example = <div class="src-code"> +/example = </div> +example! = 0 + +function = +/function = () + +formalpara = p + +graphic = img +graphic->fileref = src +graphic/ = + +important = strong + +informalequation = blockquote + +informalexample = div + +inlineequation = em + +itemizedlist = ul + +listitem = li + +literal = code + +literallayout = span + +option = " " +/option = + +orderedlist = ol + +para = p + +programlisting = <div class="src-code"> +/programlisting = </div> +programlisting! = 0 + +refentry = div + +refnamediv = <div class="ref-title-box"> +/refnamediv = </div> +refnamediv! = 0 + +refname = <h1 class="ref-title"> +/refname = </h1> + +refpurpose = <h2 class="ref-purpose"> +/refpurpose = </h2> + +refsynopsisdiv = <div class="ref-synopsis"> +/refsynopsisdiv = </div> +refsynopsisdiv! = 0 + +refsect1 = span + +refsect2 = span + +refsect3 = +/refsect3 = <br /> + +releaseinfo = <div class="release-info">( +/releaseinfo = )</div> + +simpara = +/simpara = <br /> +simpara! = 0 + +subscript = sub + +superscript = super + +table = table + +table->colsep = rules +table->rowsep = rules +table->colsep+1|rowsep+1 =all +table->colsep+1|rowsep+0 =cols +table->colsep+0|rowsep+1 =rows + +table->frame =frame +table->frame+all =border +table->frame+none =void +table->frame+sides =vsides +table->frame+top =above +table->frame+topbot =hsides + +thead = thead + +tfoot = tfoot + +tbody = tbody + +colspec = col + +tgroup = colgroup +tgroup/ = 1 +tgroup->cols = span + +row = tr + +entry = td +entry->morerows = colspan +entry->morerows+1 =2 +entry->morerows+2 =3 +entry->morerows+3 =4 +entry->morerows+4 =5 +entry->morerows+5 =6 +entry->morerows+6 =7 +entry->morerows+7 =8 +entry->morerows+8 =9 +entry->morerows+9 =10 +entry->morerows+10 =11 +;; add more if you need more colspans + +warning = <span class="warning"> +/warning = </span> +warning! = 0 + +;; now begins the attributes that should be tags in cdata +[$attr$id] +open = a +;close = /a +cdata! = true +quotevalues = true +separator = "=" +;separateall = true +$id = name + +;; now begins the sections that deal with <title> +[refsynopsisdiv_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h1 class="title"> +close = </h1> + +[refsect1_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h2 class="title"> +close = </h2> + +[refsect2_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h3 class="title"> +close = </h3> + +[refsect3_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h4 class="title"> +close = </h4> + +[para_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <div class="title"> +close = </div> + +[formalpara_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <div class="title"> +close = </div> + +[example_title] +;tag_attr = true +;attr_name = title +;cdata_start = true +cdata_end = true +open = </td></tr><tr><td><strong> +close = </strong> + +[table_title] +;tag_attr = true +;attr_name = true +cdata_start = true +open = <caption> +close = </caption> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/basicindex.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/basicindex.tpl new file mode 100755 index 00000000..951ee264 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/basicindex.tpl @@ -0,0 +1,47 @@ +<div class="index-letter-menu"> +{section name=letter loop=$letters} + <a class="index-letter" href="{$indexname}.html#{$letters[letter].letter}">{$letters[letter].letter}</a> +{/section} +</div> + +{section name=index loop=$index} + <a name="{$index[index].letter}"></a> + <div class="index-letter-section"> + <div style="float: left" class="index-letter-title">{$index[index].letter}</div> + <div style="float: right"><a href="#top">top</a></div> + <div style="clear: both"></div> + </div> + <dl> + {section name=contents loop=$index[index].index} + <dt class="field"> + {if ($index[index].index[contents].title == "Variable")} + <span class="var-title">{$index[index].index[contents].name}</span> + {elseif ($index[index].index[contents].title == "Global")} + <span class="var-title">{$index[index].index[contents].name}</span> + {elseif ($index[index].index[contents].title == "Method")} + <span class="method-title">{$index[index].index[contents].name}</span> + {elseif ($index[index].index[contents].title == "Function")} + <span class="method-title">{$index[index].index[contents].name}</span> + {elseif ($index[index].index[contents].title == "Constant")} + <span class="const-title">{$index[index].index[contents].name}</span> + {elseif ($index[index].index[contents].title == "Page") || ($index[index].index[contents].title == "Include")} + <span class="include-title">{$index[index].index[contents].name}</span> + {else} + {$index[index].index[contents].name} + {/if} + </dt> + <dd class="index-item-body"> + <div class="index-item-details">{$index[index].index[contents].link} in {$index[index].index[contents].file_name}</div> + {if $index[index].index[contents].description} + <div class="index-item-description">{$index[index].index[contents].description}</div> + {/if} + </dd> + {/section} + </dl> +{/section} + +<div class="index-letter-menu"> +{section name=letter loop=$letters} + <a class="index-letter" href="{$indexname}.html#{$letters[letter].letter}">{$letters[letter].letter}</a> +{/section} +</div> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/blank.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/blank.tpl new file mode 100755 index 00000000..6a05f27e --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/blank.tpl @@ -0,0 +1,13 @@ +<html> +<head> + <title>{$maintitle}</title> + <link rel="stylesheet" href="{$subdir}media/stylesheet.css" /> + <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/> +</head> +<body> +<div align="center"><h1>{$maintitle}</h1></div> +<b>Welcome to {$package}!</b><br /> +<br /> +This documentation was generated by <a href="{$phpdocwebsite}">phpDocumentor v{$phpdocversion}</a><br /> +</body> +</html>
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/class.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/class.tpl new file mode 100755 index 00000000..9ab7c455 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/class.tpl @@ -0,0 +1,429 @@ +{include file="header.tpl" top3=true} + +<h2 class="class-name">{if $is_interface}Interface{else}Class{/if} {$class_name}</h2> + +<a name="sec-description"></a> +<div class="info-box"> + <div class="info-box-title">Description</div> + <div class="nav-bar"> + {if $children || $vars || $ivars || $methods || $imethods || $consts || $iconsts } + <span class="disabled">Description</span> | + {/if} + {if $children} + <a href="#sec-descendents">Descendents</a> + {if $vars || $ivars || $methods || $imethods || $consts || $iconsts}|{/if} + {/if} + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + {if $methods || $imethods}|{/if} + {/if} + {if $methods || $imethods} + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + {if $implements} + <p class="implements"> + Implements interfaces: + <ul> + {foreach item="int" from=$implements}<li>{$int}</li>{/foreach} + </ul> + </p> + {/if} + {include file="docblock.tpl" type="class" sdesc=$sdesc desc=$desc} + <p class="notes"> + Located in <a class="field" href="{$page_link}">{$source_location}</a> (line <span class="field">{if $class_slink}{$class_slink}{else}{$line_number}{/if}</span>) + </p> + + {if $tutorial} + <hr class="separator" /> + <div class="notes">Tutorial: <span class="tutorial">{$tutorial}</span></div> + {/if} + + <pre>{section name=tree loop=$class_tree.classes}{$class_tree.classes[tree]}{$class_tree.distance[tree]}{/section}</pre> + + {if $conflicts.conflict_type} + <hr class="separator" /> + <div><span class="warning">Conflicts with classes:</span><br /> + {section name=me loop=$conflicts.conflicts} + {$conflicts.conflicts[me]}<br /> + {/section} + </div> + {/if} + </div> +</div> + +{if $children} + <a name="sec-descendents"></a> + <div class="info-box"> + <div class="info-box-title">Direct descendents</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + <span class="disabled">Descendents</span> + {if $vars || $ivars || $methods || $imethods}|{/if} + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + {if $methods || $imethods}|{/if} + {/if} + {if $methods || $imethods} + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + <table cellpadding="2" cellspacing="0" class="class-table"> + <tr> + <th class="class-table-header">Class</th> + <th class="class-table-header">Description</th> + </tr> + {section name=kids loop=$children} + <tr> + <td style="padding-right: 2em">{$children[kids].link}</td> + <td> + {if $children[kids].sdesc} + {$children[kids].sdesc} + {else} + {$children[kids].desc} + {/if} + </td> + </tr> + {/section} + </table> + </div> + </div> +{/if} + +{if $consts} + <a name="sec-const-summary"></a> + <div class="info-box"> + <div class="info-box-title">Class Constant Summary</span></div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendants</a> | + {/if} + <span class="disabled">Constants</span> (<a href="#sec-consts">details</a>) + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + | + {/if} + {if $methods || $imethods} + | + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + <div class="const-summary"> + {section name=consts loop=$consts} + <div class="const-title"> + <img src="{$subdir}media/images/Constant.png" alt=" " /> + <a href="#{$consts[consts].const_name}" title="details" class="const-name">{$consts[consts].const_name}</a> = <span class="var-type">{$consts[consts].const_value}</span> + + </div> + {/section} + </div> + </div> + </div> +{/if} + +{if $vars} + <a name="sec-var-summary"></a> + <div class="info-box"> + <div class="info-box-title">Variable Summary</span></div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendents</a> | + {/if} + <span class="disabled">Vars</span> (<a href="#sec-vars">details</a>) + {if $methods || $imethods} + | + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + <div class="var-summary"> + {section name=vars loop=$vars} + {if $vars[vars].static} + <div class="var-title"> + static <span class="var-type">{$vars[vars].var_type}</span> + <a href="#{$vars[vars].var_name}" title="details" class="var-name">{$vars[vars].var_name}</a> + </div> + {/if} + {/section} + {section name=vars loop=$vars} + {if !$vars[vars].static} + <div class="var-title"> + <span class="var-type">{$vars[vars].var_type}</span> + <a href="#{$vars[vars].var_name}" title="details" class="var-name">{$vars[vars].var_name}</a> + </div> + {/if} + {/section} + </div> + </div> + </div> +{/if} + +{if $methods} + <a name="sec-method-summary"></a> + <div class="info-box"> + <div class="info-box-title">Method Summary</span></div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendents</a> | + {/if} + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + | + {/if} + <span class="disabled">Methods</span> (<a href="#sec-methods">details</a>) + </div> + <div class="info-box-body"> + <div class="method-summary"> + {section name=methods loop=$methods} + {if $methods[methods].static} + <div class="method-definition"> + static {if $methods[methods].function_return} + <span class="method-result">{$methods[methods].function_return}</span> + {/if} + <a href="#{$methods[methods].function_name}" title="details" class="method-name">{if $methods[methods].ifunction_call.returnsref}&{/if}{$methods[methods].function_name}</a> + {if count($methods[methods].ifunction_call.params)} + ({section name=params loop=$methods[methods].ifunction_call.params}{if $smarty.section.params.iteration != 1}, {/if}{if $methods[methods].ifunction_call.params[params].hasdefault}[{/if}<span class="var-type">{$methods[methods].ifunction_call.params[params].type}</span> <span class="var-name">{$methods[methods].ifunction_call.params[params].name}</span>{if $methods[methods].ifunction_call.params[params].hasdefault} = <span class="var-default">{$methods[methods].ifunction_call.params[params].default}</span>]{/if}{/section}) + {else} + () + {/if} + </div> + {/if} + {/section} + {section name=methods loop=$methods} + {if !$methods[methods].static} + <div class="method-definition"> + {if $methods[methods].function_return} + <span class="method-result">{$methods[methods].function_return}</span> + {/if} + <a href="#{$methods[methods].function_name}" title="details" class="method-name">{if $methods[methods].ifunction_call.returnsref}&{/if}{$methods[methods].function_name}</a> + {if count($methods[methods].ifunction_call.params)} + ({section name=params loop=$methods[methods].ifunction_call.params}{if $smarty.section.params.iteration != 1}, {/if}{if $methods[methods].ifunction_call.params[params].hasdefault}[{/if}<span class="var-type">{$methods[methods].ifunction_call.params[params].type}</span> <span class="var-name">{$methods[methods].ifunction_call.params[params].name}</span>{if $methods[methods].ifunction_call.params[params].hasdefault} = <span class="var-default">{$methods[methods].ifunction_call.params[params].default}</span>]{/if}{/section}) + {else} + () + {/if} + </div> + {/if} + {/section} + </div> + </div> + </div> +{/if} + +{if $vars || $ivars} + <a name="sec-vars"></a> + <div class="info-box"> + <div class="info-box-title">Variables</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendents</a> | + {/if} + {if $methods} + <a href="#sec-var-summary">Vars</a> (<span class="disabled">details</span>) + {else} + <span class="disabled">Vars</span> + {/if} + + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + {if $methods || $imethods} + | + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + {include file="var.tpl"} + {if $ivars} + <h4>Inherited Variables</h4> + <A NAME='inherited_vars'><!-- --></A> + {section name=ivars loop=$ivars} + <p>Inherited from <span class="classname">{$ivars[ivars].parent_class}</span></p> + <blockquote> + {section name=ivars2 loop=$ivars[ivars].ivars} + <span class="var-title"> + <span class="var-name">{$ivars[ivars].ivars[ivars2].link}</span>{if $ivars[ivars].ivars[ivars2].ivar_sdesc}: {$ivars[ivars].ivars[ivars2].ivar_sdesc}{/if}<br> + </span> + {/section} + </blockquote> + {/section} + {/if} + </div> + </div> +{/if} + +{if $methods || $imethods} + <a name="sec-methods"></a> + <div class="info-box"> + <div class="info-box-title">Methods</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendents</a> | + {/if} + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + {/if} + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + {if $methods} + <a href="#sec-method-summary">Methods</a> (<span class="disabled">details</span>) + {else} + <span class="disabled">Methods</span> + {/if} + </div> + <div class="info-box-body"> + {include file="method.tpl"} + {if $imethods} + <h4>Inherited Methods</h4> + <a name='inherited_methods'><!-- --></a> + {section name=imethods loop=$imethods} + <!-- =========== Summary =========== --> + <p>Inherited From <span class="classname">{$imethods[imethods].parent_class}</span></p> + <blockquote> + {section name=im2 loop=$imethods[imethods].imethods} + <span class="method-name">{$imethods[imethods].imethods[im2].link}</span>{if $imethods[imethods].imethods[im2].ifunction_sdesc}: {$imethods[imethods].imethods[im2].ifunction_sdesc}{/if}<br> + {/section} + </blockquote> + {/section} + {/if} + </div> + </div> +{/if} + +{if $consts || $iconsts} + <a name="sec-consts"></a> + <div class="info-box"> + <div class="info-box-title">Class Constants</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendants</a> | + {/if} + {if $methods} + <a href="#sec-var-summary">Constants</a> (<span class="disabled">details</span>) + {else} + <span class="disabled">Constants</span> + {/if} + + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + {/if} + {if $methods || $imethods} + | + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + {include file="const.tpl"} + {if $iconsts} + <h4>Inherited Constants</h4> + <A NAME='inherited_vars'><!-- --></A> + {section name=iconsts loop=$iconsts} + <p>Inherited from <span class="classname">{$iconsts[iconsts].parent_class}</span></p> + <blockquote> + {section name=iconsts2 loop=$iconsts[iconsts].iconsts} + <img src="{$subdir}media/images/{if $iconsts[iconsts].iconsts[iconsts2].access == 'private'}PrivateVariable{else}Variable{/if}.png" /> + <span class="const-title"> + <span class="const-name">{$iconsts[iconsts].iconsts[iconsts2].link}</span>{if $iconsts[iconsts].iconsts[iconsts2].iconst_sdesc}: {$iconsts[iconsts].iconsts[iconsts2].iconst_sdesc}{/if}<br> + </span> + {/section} + </blockquote> + {/section} + {/if} + </div> + </div> +{/if} + +{include file="footer.tpl" top3=true} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/classtrees.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/classtrees.tpl new file mode 100755 index 00000000..952e6d50 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/classtrees.tpl @@ -0,0 +1,19 @@ +{include file="header.tpl" top1=true} + +<!-- Start of Class Data --> +<H2> + {$smarty.capture.title} +</H2> +{if $interfaces} +{section name=classtrees loop=$interfaces} +<h2>Root interface {$interfaces[classtrees].class}</h2> +{$interfaces[classtrees].class_tree} +{/section} +{/if} +{if $classtrees} +{section name=classtrees loop=$classtrees} +<h2>Root class {$classtrees[classtrees].class}</h2> +{$classtrees[classtrees].class_tree} +{/section} +{/if} +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/const.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/const.tpl new file mode 100644 index 00000000..c26ff92d --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/const.tpl @@ -0,0 +1,18 @@ +{section name=consts loop=$consts} +<a name="const{$consts[consts].const_name}" id="{$consts[consts].const_name}"><!-- --></A> +<div class="{cycle values="evenrow,oddrow"}"> + + <div class="const-header"> + <img src="{$subdir}media/images/{if $consts[consts].access == 'private'}PrivateVariable{else}Variable{/if}.png" /> + <span class="const-title"> + <span class="const-name">{$consts[consts].const_name}</span> + = <span class="const-default">{$consts[consts].const_value|replace:"\n":"<br />"}</span> + (line <span class="line-number">{if $consts[consts].slink}{$consts[consts].slink}{else}{$consts[consts].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$consts[consts].sdesc desc=$consts[consts].desc tags=$consts[consts].tags} + +</div> +{/section} + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/define.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/define.tpl new file mode 100755 index 00000000..0da5d864 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/define.tpl @@ -0,0 +1,24 @@ +{section name=def loop=$defines} +<a name="{$defines[def].define_link}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div> + <span class="const-title"> + <span class="const-name">{$defines[def].define_name}</span> = {$defines[def].define_value|replace:"\n":"<br />"} + (line <span class="line-number">{if $defines[def].slink}{$defines[def].slink}{else}{$defines[def].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$defines[def].sdesc desc=$defines[def].desc tags=$defines[def].tags} + + {if $globals[glob].global_conflicts.conflict_type} + <hr class="separator" /> + <div><span class="warning">Conflicts with constants:</span><br /> + {section name=me loop=$defines[def].define_conflicts.conflicts} + {$defines[def].define_conflicts.conflicts[me]}<br /> + {/section} + </div> + {/if} + +</div> +{/section}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/docblock.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/docblock.tpl new file mode 100755 index 00000000..783d5271 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/docblock.tpl @@ -0,0 +1,14 @@ +<!-- ========== Info from phpDoc block ========= --> +{if $sdesc} +<p class="short-description">{$sdesc}</p> +{/if} +{if $desc} +<p class="description">{$desc}</p> +{/if} +{if $tags} + <ul class="tags"> + {section name=tags loop=$tags} + <li><span class="field">{$tags[tags].keyword}:</span> {$tags[tags].data}</li> + {/section} + </ul> +{/if} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/elementindex.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/elementindex.tpl new file mode 100755 index 00000000..d5964f99 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/elementindex.tpl @@ -0,0 +1,12 @@ +{include file="header.tpl" noleftindex=true} +<a name="top"></a> +<h2>Full index</h2> +<h3>Package indexes</h3> +<ul> +{section name=p loop=$packageindex} + <li><a href="elementindex_{$packageindex[p].title}.html">{$packageindex[p].title}</a></li> +{/section} +</ul> +<br /> +{include file="basicindex.tpl" indexname="elementindex"} +{include file="footer.tpl"} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/errors.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/errors.tpl new file mode 100755 index 00000000..0f526584 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/errors.tpl @@ -0,0 +1,21 @@ +{include file="header.tpl" noleftindex=true} +{section name=files loop=$files} +<a href="#{$files[files].file}">{$files[files].file}</a><br> +{/section} +{foreach key=file item=issues from=$all} +<a name="{$file}"></a> +<h1>{$file}</h1> +{if count($issues.warnings)} +<h2>Warnings:</h2><br> +{section name=warnings loop=$issues.warnings} +<b>{$issues.warnings[warnings].name}</b> - {$issues.warnings[warnings].listing}<br> +{/section} +{/if} +{if count($issues.errors)} +<h2>Errors:</h2><br> +{section name=errors loop=$issues.errors} +<b>{$issues.errors[errors].name}</b> - {$issues.errors[errors].listing}<br> +{/section} +{/if} +{/foreach} +{include file="footer.tpl"} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/examplesource.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/examplesource.tpl new file mode 100755 index 00000000..8abf74ce --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/examplesource.tpl @@ -0,0 +1,6 @@ +{include file="header.tpl" title=$title} +<h1>{$title}</h1> +<div class="listing"> +{$source} +</div> +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/filesource.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/filesource.tpl new file mode 100755 index 00000000..239f7b41 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/filesource.tpl @@ -0,0 +1,8 @@ +{capture name="tutle"}File Source for {$name}{/capture} +{include file="header.tpl" title=$smarty.capture.tutle} +<h1>Source for file {$name}</h1> +<p>Documentation is available at {$docs}</p> +<div class="src-code"> +{$source} +</div> +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/footer.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/footer.tpl new file mode 100755 index 00000000..8d0f79db --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/footer.tpl @@ -0,0 +1,8 @@ +{if !$index} + <p class="notes" id="credit"> + Documentation generated on {$date} by <a href="{$phpdocwebsite}" target="_blank">phpDocumentor {$phpdocversion}</a> + </p> +{/if} + {if $top3}</div>{/if} +</body> +</html> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/function.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/function.tpl new file mode 100755 index 00000000..b6880059 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/function.tpl @@ -0,0 +1,44 @@ +{section name=func loop=$functions} +<a name="{$functions[func].function_dest}" id="{$functions[func].function_dest}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div> + <span class="method-title">{$functions[func].function_name}</span> (line <span class="line-number">{if $functions[func].slink}{$functions[func].slink}{else}{$functions[func].line_number}{/if}</span>) + </div> + + {include file="docblock.tpl" sdesc=$functions[func].sdesc desc=$functions[func].desc tags=$functions[func].tags params=$functions[func].params function=false} + + <div class="method-signature"> + <span class="method-result">{$functions[func].function_return}</span> + <span class="method-name"> + {if $functions[func].ifunction_call.returnsref}&{/if}{$functions[func].function_name} + </span> + {if count($functions[func].ifunction_call.params)} + ({section name=params loop=$functions[func].ifunction_call.params}{if $smarty.section.params.iteration != 1}, {/if}{if $functions[func].ifunction_call.params[params].hasdefault}[{/if}<span class="var-type">{$functions[func].ifunction_call.params[params].type}</span> <span class="var-name">{$functions[func].ifunction_call.params[params].name}</span>{if $functions[func].ifunction_call.params[params].hasdefault} = <span class="var-default">{$functions[func].ifunction_call.params[params].default|escape:"html"}</span>]{/if}{/section}) + {else} + () + {/if} + </div> + + {if $functions[func].params} + <ul class="parameters"> + {section name=params loop=$functions[func].params} + <li> + <span class="var-type">{$functions[func].params[params].datatype}</span> + <span class="var-name">{$functions[func].params[params].var}</span>{if $functions[func].params[params].data}<span class="var-description">: {$functions[func].params[params].data}</span>{/if} + </li> + {/section} + </ul> + {/if} + + {if $functions[func].function_conflicts.conflict_type} + <hr class="separator" /> + <div><span class="warning">Conflicts with functions:</span><br /> + {section name=me loop=$functions[func].function_conflicts.conflicts} + {$functions[func].function_conflicts.conflicts[me]}<br /> + {/section} + </div> + {/if} + +</div> +{/section} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/global.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/global.tpl new file mode 100755 index 00000000..eab7e0b0 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/global.tpl @@ -0,0 +1,26 @@ +{section name=glob loop=$globals} +<a name="{$globals[glob].global_link}" id="{$globals[glob].global_link}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div> + <span class="var-title"> + <span class="var-type">{$globals[glob].global_type}</span> + <span class="var-name">{$globals[glob].global_name}</span> + {if $vars[vars].var_default} = <span class="var-default">{$globals[glob].global_value|replace:"\n":"<br />"}</span>{/if} + (line <span class="line-number">{if $globals[glob].slink}{$globals[glob].slink}{else}{$globals[glob].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$globals[glob].sdesc desc=$globals[glob].desc tags=$globals[glob].tags} + + {if $globals[glob].global_conflicts.conflict_type} + <hr class="separator" /> + <div><span class="warning">Conflicts with global variables:</span><br /> + {section name=me loop=$globals[glob].global_conflicts.conflicts} + {$globals[glob].global_conflicts.conflicts[me]}<br /> + {/section} + </div> + {/if} + +</div> +{/section}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/header.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/header.tpl new file mode 100755 index 00000000..0d626190 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/header.tpl @@ -0,0 +1,95 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> + <html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <!-- template designed by Marco Von Ballmoos --> + <title>{$title}</title> + <link rel="stylesheet" href="{$subdir}media/stylesheet.css" /> + {if $top2 || $top3} + <script src="{$subdir}media/lib/classTree.js"></script> + {/if} + {if $top2} + <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/> + {/if} + {if $top3 || $top2} + <script language="javascript" type="text/javascript"> + var imgPlus = new Image(); + var imgMinus = new Image(); + imgPlus.src = "{$subdir}media/images/plus.png"; + imgMinus.src = "{$subdir}media/images/minus.png"; + + function showNode(Node){ldelim} + switch(navigator.family){ldelim} + case 'nn4': + // Nav 4.x code fork... + var oTable = document.layers["span" + Node]; + var oImg = document.layers["img" + Node]; + break; + case 'ie4': + // IE 4/5 code fork... + var oTable = document.all["span" + Node]; + var oImg = document.all["img" + Node]; + break; + case 'gecko': + // Standards Compliant code fork... + var oTable = document.getElementById("span" + Node); + var oImg = document.getElementById("img" + Node); + break; + {rdelim} + oImg.src = imgMinus.src; + oTable.style.display = "block"; + {rdelim} + + function hideNode(Node){ldelim} + switch(navigator.family){ldelim} + case 'nn4': + // Nav 4.x code fork... + var oTable = document.layers["span" + Node]; + var oImg = document.layers["img" + Node]; + break; + case 'ie4': + // IE 4/5 code fork... + var oTable = document.all["span" + Node]; + var oImg = document.all["img" + Node]; + break; + case 'gecko': + // Standards Compliant code fork... + var oTable = document.getElementById("span" + Node); + var oImg = document.getElementById("img" + Node); + break; + {rdelim} + oImg.src = imgPlus.src; + oTable.style.display = "none"; + {rdelim} + + function nodeIsVisible(Node){ldelim} + switch(navigator.family){ldelim} + case 'nn4': + // Nav 4.x code fork... + var oTable = document.layers["span" + Node]; + break; + case 'ie4': + // IE 4/5 code fork... + var oTable = document.all["span" + Node]; + break; + case 'gecko': + // Standards Compliant code fork... + var oTable = document.getElementById("span" + Node); + break; + {rdelim} + return (oTable && oTable.style.display == "block"); + {rdelim} + + function toggleNodeVisibility(Node){ldelim} + if (nodeIsVisible(Node)){ldelim} + hideNode(Node); + {rdelim}else{ldelim} + showNode(Node); + {rdelim} + {rdelim} + </script> + {/if} + </head> + <body> + {if $top3}<div class="page-body">{/if} + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/include.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/include.tpl new file mode 100755 index 00000000..c2419e5f --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/include.tpl @@ -0,0 +1,16 @@ +{section name=includes loop=$includes} +<a name="{$includes[includes].include_file}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div> + <span class="include-title"> + <span class="include-type">{$includes[includes].include_name}</span> + (<span class="include-name">{$includes[includes].include_value}</span>) + (line <span class="line-number">{if $includes[includes].slink}{$includes[includes].slink}{else}{$includes[includes].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$includes[includes].sdesc desc=$includes[includes].desc tags=$includes[includes].tags} + +</div> +{/section}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/index.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/index.tpl new file mode 100755 index 00000000..7cd61094 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/index.tpl @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE html + PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//FR" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"> + <html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <!-- Generated by phpDocumentor on {$date} --> + <title>{$title}</title> + <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/> +</head> + +<FRAMESET rows='120,*'> + <FRAME src='packages.html' name='left_top' frameborder="1" bordercolor="#999999"> + <FRAMESET cols='25%,*'> + <FRAME src='{$start}' name='left_bottom' frameborder="1" bordercolor="#999999"> + <FRAME src='{$blank}.html' name='right' frameborder="1" bordercolor="#999999"> + </FRAMESET> + <NOFRAMES> + <H2>Frame Alert</H2> + <P>This document is designed to be viewed using the frames feature. + If you see this message, you are using a non-frame-capable web client.</P> + </NOFRAMES> +</FRAMESET> +</HTML> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/left_frame.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/left_frame.tpl new file mode 100755 index 00000000..a30f167d --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/left_frame.tpl @@ -0,0 +1,216 @@ +{include file="header.tpl" top2=true} +<h3 class="package-title">{$info.0.package}</h3> +<div class="tree"> +<script language="Javascript"> +if (document.getElementById) {ldelim} +{section name=p loop=$info} + {if $info[p].subpackage == ""} + var tree = new WebFXTree('<span class="package">{$info.0.package}</span>'); + tree.setBehavior('classic'); + + {if $hastodos} + var todos = new WebFXTreeItem('To-do List', '{$todolink}'); + tree.add(todos); + {/if} + + var class_trees = new WebFXTreeItem('Class trees', '{$classtreepage}.html'); + tree.add(class_trees); + + var elements = new WebFXTreeItem('Index of elements', '{$elementindex}.html'); + tree.add(elements); + + var parent_node; + + {if $info[p].tutorials} + var tree_tutorial = new WebFXTreeItem('Tutorial(s)/Manual(s)', ''); + tree.add(tree_tutorial); + + {if $info[p].tutorials.pkg} + var tree_inner_tutorial = new WebFXTreeItem('Package-level', ''); + tree_tutorial.add(tree_inner_tutorial); + + parent_node = tree_inner_tutorial; + {section name=ext loop=$info[p].tutorials.pkg} + {$info[p].tutorials.pkg[ext]} + {/section} + {/if} + + {if $info[p].tutorials.cls} + var tree_inner_tutorial = new WebFXTreeItem('Class-level', ''); + tree_tutorial.add(tree_inner_tutorial); + + parent_node = tree_inner_tutorial; + {section name=ext loop=$info[p].tutorials.cls} + {$info[p].tutorials.cls[ext]} + {/section} + {/if} + + {if $info[p].tutorials.proc} + var tree_inner_tutorial = new WebFXTreeItem('Function-level', ''); + tree_tutorial.add(tree_inner_tutorial); + + parent_node = tree_inner_tutorial; + {section name=ext loop=$info[p].tutorials.proc} + {$info[p].tutorials.proc[ext]} + {/section} + {/if} + {/if} + + {if $info[p].hasinterfaces} + {if $info[p].classes} + var tree_classe = new WebFXTreeItem('Interface(s)', '{$packagedoc}'); + + {section name=class loop=$info[p].classes} + {if $info[p].classes[class].is_interface} + var classe = new WebFXTreeItem('{$info[p].classes[class].title|escape:"quotes"}', '{$info[p].classes[class].link|escape:"quotes"}'); + tree_classe.add(classe); + {/if} + {/section} + + tree.add(tree_classe); + {/if} + {/if} + {if $info[p].hasclasses} + {if $info[p].classes} + var tree_classe = new WebFXTreeItem('Class(es)', '{$packagedoc}'); + + {section name=class loop=$info[p].classes} + {if $info[p].classes[class].is_class} + var classe = new WebFXTreeItem('{$info[p].classes[class].title|escape:"quotes"}', '{$info[p].classes[class].link|escape:"quotes"}'); + tree_classe.add(classe); + {/if} + {/section} + + tree.add(tree_classe); + {/if} + {/if} + + {if $info[p].functions} + var tree_function = new WebFXTreeItem('Function(s)', '{$packagedoc|escape:"quotes"}'); + + {section name=nonclass loop=$info[p].functions} + var fic = new WebFXTreeItem('{$info[p].functions[nonclass].title|escape:"quotes"}', '{$info[p].functions[nonclass].link|escape:"quotes"}'); + tree_function.add(fic); + {/section} + + tree.add(tree_function); + {/if} + + {if $info[p].files} + var tree_file = new WebFXTreeItem('File(s)', '{$packagedoc|escape:"quotes"}'); + + {section name=nonclass loop=$info[p].files} + var file = new WebFXTreeItem('{$info[p].files[nonclass].title|escape:"quotes"}', '{$info[p].files[nonclass].link|escape:"quotes"}'); + tree_file.add(file); + {/section} + + tree.add(tree_file); + {/if} + + {else} + {if $info[p].subpackagetutorial} + var subpackagetree = new WebFXTreeItem('<span class="sub-package">{$info[p].subpackagetutorialtitle|strip_tags}</span>', '{$info[p].subpackagetutorialnoa}'); + {else} + var subpackagetree = new WebFXTreeItem('<span class="sub-package">{$info[p].subpackage}</span>', '{$packagedoc|escape:"quotes"}'); + {/if} + + {if $info[p].tutorials} + var tree_tutorial = new WebFXTreeItem('Tutorial(s)/Manual(s)', ''); + tree.add(tree_tutorial); + + {if $info[p].tutorials.pkg} + var tree_inner_tutorial = new WebFXTreeItem('Package-level', ''); + tree_tutorial.add(tree_inner_tutorial); + + parent_node = tree_inner_tutorial; + {section name=ext loop=$info[p].tutorials.pkg} + {$info[p].tutorials.pkg[ext]} + {/section} + {/if} + + {if $info[p].tutorials.cls} + var tree_inner_tutorial = new WebFXTreeItem('Class-level', ''); + tree_tutorial.add(tree_inner_tutorial); + + parent_node = tree_inner_tutorial; + {section name=ext loop=$info[p].tutorials.cls} + {$info[p].tutorials.cls[ext]} + {/section} + {/if} + + {if $info[p].tutorials.proc} + var tree_inner_tutorial = new WebFXTreeItem('Function-level', ''); + tree_tutorial.add(tree_inner_tutorial); + + parent_node = tree_inner_tutorial; + {section name=ext loop=$info[p].tutorials.proc} + {$info[p].tutorials.proc[ext]} + {/section} + {/if} + {/if} + + {if $info[p].hasinterfaces} + {if $info[p].classes} + var subpackagetree_classe = new WebFXTreeItem('Interface(s)', '{$packagedoc}'); + + {section name=class loop=$info[p].classes} + {if $info[p].classes[class].is_interface} + var classe = new WebFXTreeItem('{$info[p].classes[class].title|escape:"quotes"}', '{$info[p].classes[class].link|escape:"quotes"}'); + subpackagetree_classe.add(classe); + {/if} + {/section} + + subpackagetree.add(subpackagetree_classe); + {/if} + {/if} + {if $info[p].hasclasses} + {if $info[p].classes} + var subpackagetree_classe = new WebFXTreeItem('Class(es)', '{$packagedoc|escape:"quotes"}'); + + {section name=class loop=$info[p].classes} + {if $info[p].classes[class].is_class} + var classe = new WebFXTreeItem('{$info[p].classes[class].title|escape:"quotes"}', '{$info[p].classes[class].link|escape:"quotes"}'); + subpackagetree_classe.add(classe); + {/if} + {/section} + + subpackagetree.add(subpackagetree_classe); + {/if} + {/if} + + {if $info[p].functions} + var subpackagetree_function = new WebFXTreeItem('Function(s)', '{$packagedoc|escape:"quotes"}'); + + {section name=nonclass loop=$info[p].functions} + var fic = new WebFXTreeItem('{$info[p].functions[nonclass].title|escape:"quotes"}', '{$info[p].functions[nonclass].link|escape:"quotes"}'); + subpackagetree_function.add(fic); + {/section} + + subpackagetree.add(subpackagetree_function); + {/if} + + {if $info[p].files} + var subpackagetree_file = new WebFXTreeItem('File(s)', '{$packagedoc|escape:"quotes"}'); + + {section name=nonclass loop=$info[p].files} + var file = new WebFXTreeItem('{$info[p].files[nonclass].title|escape:"quotes"}', '{$info[p].files[nonclass].link|escape:"quotes"}'); + subpackagetree_file.add(file); + {/section} + + subpackagetree.add(subpackagetree_file); + {/if} + + tree.add(subpackagetree); + {/if} +{/section} + +document.write(tree); +{rdelim} +</script> +</div> +<p class="notes"> + Generated by + <a href="{$phpdocwebsite}" target="_blank">phpDocumentor <span class="field">{$phpdocversion}</span></a> +</p> +</body> +</html> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/banner.css b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/banner.css new file mode 100755 index 00000000..ba1a7ba5 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/banner.css @@ -0,0 +1,32 @@ +body +{ + background-color: #DDDDDD; + margin: 0px; + padding: 0px; +} + +/* Banner (top bar) classes */ + +.banner { } + +.banner-menu +{ + clear: both; + padding: .5em; + border-top: 2px solid #999999; +} + +.banner-title +{ + text-align: right; + font-size: 20pt; + font-weight: bold; + margin: .2em; +} + +.package-selector +{ + background-color: #CCCCCC; + border: 1px solid black; + color: blue; +} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/images/I.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/images/I.png Binary files differnew file mode 100755 index 00000000..e8512fb9 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/images/I.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/images/L.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/images/L.png Binary files differnew file mode 100755 index 00000000..eb334eda --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/images/L.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/images/Lminus.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/images/Lminus.png Binary files differnew file mode 100755 index 00000000..f7c43c0a --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/images/Lminus.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/images/Lplus.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/images/Lplus.png Binary files differnew file mode 100755 index 00000000..848ec2fc --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/images/Lplus.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/images/T.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/images/T.png Binary files differnew file mode 100755 index 00000000..30173254 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/images/T.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/images/Tminus.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/images/Tminus.png Binary files differnew file mode 100755 index 00000000..2260e424 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/images/Tminus.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/images/Tplus.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/images/Tplus.png Binary files differnew file mode 100755 index 00000000..2c8d8f4f --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/images/Tplus.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/images/blank.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/images/blank.png Binary files differnew file mode 100755 index 00000000..cee9cd37 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/images/blank.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/images/empty.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/images/empty.png Binary files differnew file mode 100755 index 00000000..d5683865 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/images/empty.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/images/minus.gif b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/images/minus.gif Binary files differnew file mode 100644 index 00000000..f502662b --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/images/minus.gif diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/images/plus.gif b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/images/plus.gif Binary files differnew file mode 100644 index 00000000..eeca02ce --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/images/plus.gif diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/lib/classTree.js b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/lib/classTree.js new file mode 100755 index 00000000..ebb3fb4a --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/lib/classTree.js @@ -0,0 +1,454 @@ +/*----------------------------------------\ +| Cross Browser Tree Widget 1.1 | +|-----------------------------------------| +| Created by Emil A. Eklund (eae@eae.net) | +| For WebFX (http://webfx.eae.net/) | +|-----------------------------------------| +| This script is provided as is without | +| any warranty whatsoever. It may be used | +| free of charge for non commerical sites | +| For commerical use contact the author | +| of this script for further details. | +|-----------------------------------------| +| Created 2000-12-11 | Updated 2001-09-06 | +\----------------------------------------*/ + +var webFXTreeConfig = { + rootIcon : 'media/images/empty.png', + openRootIcon : 'media/images/empty.png', + folderIcon : 'media/images/empty.png', + openFolderIcon : 'media/images/empty.png', + fileIcon : 'media/images/empty.png', + iIcon : 'media/images/I.png', + lIcon : 'media/images/L.png', + lMinusIcon : 'media/images/Lminus.png', + lPlusIcon : 'media/images/Lplus.png', + tIcon : 'media/images/T.png', + tMinusIcon : 'media/images/Tminus.png', + tPlusIcon : 'media/images/Tplus.png', + blankIcon : 'media/images/blank.png', + defaultText : 'Tree Item', + defaultAction : 'javascript:void(0);', + defaultTarget : 'right', + defaultBehavior : 'classic' +}; + +var webFXTreeHandler = { + idCounter : 0, + idPrefix : "webfx-tree-object-", + all : {}, + behavior : null, + selected : null, + getId : function() { return this.idPrefix + this.idCounter++; }, + toggle : function (oItem) { this.all[oItem.id.replace('-plus','')].toggle(); }, + select : function (oItem) { this.all[oItem.id.replace('-icon','')].select(); }, + focus : function (oItem) { this.all[oItem.id.replace('-anchor','')].focus(); }, + blur : function (oItem) { this.all[oItem.id.replace('-anchor','')].blur(); }, + keydown : function (oItem) { return this.all[oItem.id].keydown(window.event.keyCode); }, + cookies : new WebFXCookie() +}; + +/* + * WebFXCookie class + */ + +function WebFXCookie() { + if (document.cookie.length) { this.cookies = ' ' + document.cookie; } +} + +WebFXCookie.prototype.setCookie = function (key, value) { + document.cookie = key + "=" + escape(value); +} + +WebFXCookie.prototype.getCookie = function (key) { + if (this.cookies) { + var start = this.cookies.indexOf(' ' + key + '='); + if (start == -1) { return null; } + var end = this.cookies.indexOf(";", start); + if (end == -1) { end = this.cookies.length; } + end -= start; + var cookie = this.cookies.substr(start,end); + return unescape(cookie.substr(cookie.indexOf('=') + 1, cookie.length - cookie.indexOf('=') + 1)); + } + else { return null; } +} + +/* + * WebFXTreeAbstractNode class + */ + +function WebFXTreeAbstractNode(sText, sAction, sTarget) { + this.childNodes = []; + this.id = webFXTreeHandler.getId(); + this.text = sText || webFXTreeConfig.defaultText; + this.action = sAction || webFXTreeConfig.defaultAction; + this.targetWindow = sTarget || webFXTreeConfig.defaultTarget; + this._last = false; + webFXTreeHandler.all[this.id] = this; +} + +WebFXTreeAbstractNode.prototype.add = function (node) { + node.parentNode = this; + this.childNodes[this.childNodes.length] = node; + var root = this; + if (this.childNodes.length >=2) { + this.childNodes[this.childNodes.length -2]._last = false; + } + while (root.parentNode) { root = root.parentNode; } + if (root.rendered) { + if (this.childNodes.length >= 2) { + document.getElementById(this.childNodes[this.childNodes.length -2].id + '-plus').src = ((this.childNodes[this.childNodes.length -2].folder)?webFXTreeConfig.tMinusIcon:webFXTreeConfig.tIcon); + if (this.childNodes[this.childNodes.length -2].folder) { + this.childNodes[this.childNodes.length -2].plusIcon = webFXTreeConfig.tPlusIcon; + this.childNodes[this.childNodes.length -2].minusIcon = webFXTreeConfig.tMinusIcon; + } + this.childNodes[this.childNodes.length -2]._last = false; + } + this._last = true; + var foo = this; + while (foo.parentNode) { + for (var i = 0; i < foo.parentNode.childNodes.length; i++) { + if (foo.id == foo.parentNode.childNodes[i].id) { break; } + } + if (++i == foo.parentNode.childNodes.length) { foo.parentNode._last = true; } + else { foo.parentNode._last = false; } + foo = foo.parentNode; + } + document.getElementById(this.id + '-cont').insertAdjacentHTML("beforeEnd", node.toString()); + if ((!this.folder) && (!this.openIcon)) { + this.icon = webFXTreeConfig.folderIcon; + this.openIcon = webFXTreeConfig.openFolderIcon; + } + this.folder = true; + this.indent(); + this.expand(); + } + return node; +} + +WebFXTreeAbstractNode.prototype.toggle = function() { + if (this.folder) { + if (this.open) { this.collapse(); } + else { this.expand(); } + } +} + +WebFXTreeAbstractNode.prototype.select = function() { + document.getElementById(this.id + '-anchor').focus(); +} + +WebFXTreeAbstractNode.prototype.focus = function() { + webFXTreeHandler.selected = this; + if ((this.openIcon) && (webFXTreeHandler.behavior != 'classic')) { document.getElementById(this.id + '-icon').src = this.openIcon; } + document.getElementById(this.id + '-anchor').style.backgroundColor = 'highlight'; + document.getElementById(this.id + '-anchor').style.color = 'highlighttext'; + document.getElementById(this.id + '-anchor').focus(); +} + +WebFXTreeAbstractNode.prototype.blur = function() { + if ((this.openIcon) && (webFXTreeHandler.behavior != 'classic')) { document.getElementById(this.id + '-icon').src = this.icon; } + document.getElementById(this.id + '-anchor').style.backgroundColor = 'transparent'; + document.getElementById(this.id + '-anchor').style.color = 'menutext'; +} + +WebFXTreeAbstractNode.prototype.doExpand = function() { + if (webFXTreeHandler.behavior == 'classic') { document.getElementById(this.id + '-icon').src = this.openIcon; } + if (this.childNodes.length) { document.getElementById(this.id + '-cont').style.display = 'block'; } + this.open = true; + webFXTreeHandler.cookies.setCookie(this.id.substr(18,this.id.length - 18), '1'); +} + +WebFXTreeAbstractNode.prototype.doCollapse = function() { + if (webFXTreeHandler.behavior == 'classic') { document.getElementById(this.id + '-icon').src = this.icon; } + if (this.childNodes.length) { document.getElementById(this.id + '-cont').style.display = 'none'; } + this.open = false; + webFXTreeHandler.cookies.setCookie(this.id.substr(18,this.id.length - 18), '0'); +} + +WebFXTreeAbstractNode.prototype.expandAll = function() { + this.expandChildren(); + if ((this.folder) && (!this.open)) { this.expand(); } +} + +WebFXTreeAbstractNode.prototype.expandChildren = function() { + for (var i = 0; i < this.childNodes.length; i++) { + this.childNodes[i].expandAll(); +} } + +WebFXTreeAbstractNode.prototype.collapseAll = function() { + if ((this.folder) && (this.open)) { this.collapse(); } + this.collapseChildren(); +} + +WebFXTreeAbstractNode.prototype.collapseChildren = function() { + for (var i = 0; i < this.childNodes.length; i++) { + this.childNodes[i].collapseAll(); +} } + +WebFXTreeAbstractNode.prototype.indent = function(lvl, del, last, level) { + /* + * Since we only want to modify items one level below ourself, + * and since the rightmost indentation position is occupied by + * the plus icon we set this to -2 + */ + if (lvl == null) { lvl = -2; } + var state = 0; + for (var i = this.childNodes.length - 1; i >= 0 ; i--) { + state = this.childNodes[i].indent(lvl + 1, del, last, level); + if (state) { return; } + } + if (del) { + if (level >= this._level) { + if (this.folder) { + document.getElementById(this.id + '-plus').src = (this.open)?webFXTreeConfig.lMinusIcon:webFXTreeConfig.lPlusIcon; + this.plusIcon = webFXTreeConfig.lPlusIcon; + this.minusIcon = webFXTreeConfig.lMinusIcon; + } + else { document.getElementById(this.id + '-plus').src = webFXTreeConfig.lIcon; } + return 1; + } + } + var foo = document.getElementById(this.id + '-indent-' + lvl); + if (foo) { + if ((del) && (last)) { foo._last = true; } + if (foo._last) { foo.src = webFXTreeConfig.blankIcon; } + else { foo.src = webFXTreeConfig.iIcon; } + } + return 0; +} + +/* + * WebFXTree class + */ + +function WebFXTree(sText, sAction, sBehavior, sIcon, sOpenIcon) { + this.base = WebFXTreeAbstractNode; + this.base(sText, sAction); + this.icon = sIcon || webFXTreeConfig.rootIcon; + this.openIcon = sOpenIcon || webFXTreeConfig.openRootIcon; + /* Defaults to open */ + this.open = (webFXTreeHandler.cookies.getCookie(this.id.substr(18,this.id.length - 18)) == '0')?false:true; + this.folder = true; + this.rendered = false; + if (!webFXTreeHandler.behavior) { webFXTreeHandler.behavior = sBehavior || webFXTreeConfig.defaultBehavior; } + this.targetWindow = 'right'; +} + +WebFXTree.prototype = new WebFXTreeAbstractNode; + +WebFXTree.prototype.setBehavior = function (sBehavior) { + webFXTreeHandler.behavior = sBehavior; +}; + +WebFXTree.prototype.getBehavior = function (sBehavior) { + return webFXTreeHandler.behavior; +}; + +WebFXTree.prototype.getSelected = function() { + if (webFXTreeHandler.selected) { return webFXTreeHandler.selected; } + else { return null; } +} + +WebFXTree.prototype.remove = function() { } + +WebFXTree.prototype.expand = function() { + this.doExpand(); +} + +WebFXTree.prototype.collapse = function() { + this.focus(); + this.doCollapse(); +} + +WebFXTree.prototype.getFirst = function() { + return null; +} + +WebFXTree.prototype.getLast = function() { + return null; +} + +WebFXTree.prototype.getNextSibling = function() { + return null; +} + +WebFXTree.prototype.getPreviousSibling = function() { + return null; +} + +WebFXTree.prototype.keydown = function(key) { + if (key == 39) { this.expand(); return false; } + if (key == 37) { this.collapse(); return false; } + if ((key == 40) && (this.open)) { this.childNodes[0].select(); return false; } + return true; +} + +WebFXTree.prototype.toString = function() { + var str = "<div id=\"" + this.id + "\" ondblclick=\"webFXTreeHandler.toggle(this);\" class=\"webfx-tree-item\" onkeydown=\"return webFXTreeHandler.keydown(this)\">"; + str += "<img id=\"" + this.id + "-icon\" class=\"webfx-tree-icon\" src=\"" + ((webFXTreeHandler.behavior == 'classic' && this.open)?this.openIcon:this.icon) + "\" onclick=\"webFXTreeHandler.select(this);\"><a href=\"" + this.action + "\" id=\"" + this.id + "-anchor\" target=\"" + this.targetWindow + "\" onfocus=\"webFXTreeHandler.focus(this);\" onblur=\"webFXTreeHandler.blur(this);\">" + this.text + "</a></div>"; + str += "<div id=\"" + this.id + "-cont\" class=\"webfx-tree-container\" style=\"display: " + ((this.open)?'block':'none') + ";\">"; + for (var i = 0; i < this.childNodes.length; i++) { + str += this.childNodes[i].toString(i, this.childNodes.length); + } + str += "</div>"; + this.rendered = true; + return str; +}; + +/* + * WebFXTreeItem class + */ + +function WebFXTreeItem(sText, sAction, eParent, sIcon, sOpenIcon) { + this.base = WebFXTreeAbstractNode; + this.base(sText, sAction); + /* Defaults to close */ + this.open = (webFXTreeHandler.cookies.getCookie(this.id.substr(18,this.id.length - 18)) == '1')?true:false; + if (eParent) { eParent.add(this); } + if (sIcon) { this.icon = sIcon; } + if (sOpenIcon) { this.openIcon = sOpenIcon; } +} + +WebFXTreeItem.prototype = new WebFXTreeAbstractNode; + +WebFXTreeItem.prototype.remove = function() { + var parentNode = this.parentNode; + var prevSibling = this.getPreviousSibling(true); + var nextSibling = this.getNextSibling(true); + var folder = this.parentNode.folder; + var last = ((nextSibling) && (nextSibling.parentNode) && (nextSibling.parentNode.id == parentNode.id))?false:true; + this.getPreviousSibling().focus(); + this._remove(); + if (parentNode.childNodes.length == 0) { + parentNode.folder = false; + parentNode.open = false; + } + if (last) { + if (parentNode.id == prevSibling.id) { + document.getElementById(parentNode.id + '-icon').src = webFXTreeConfig.fileIcon; + } + else { } + } + if ((!prevSibling.parentNode) || (prevSibling.parentNode != parentNode)) { + parentNode.indent(null, true, last, this._level); + } + if (document.getElementById(prevSibling.id + '-plus')) { + if (nextSibling) { + if ((parentNode == prevSibling) && (parentNode.getNextSibling)) { document.getElementById(prevSibling.id + '-plus').src = webFXTreeConfig.tIcon; } + else if (nextSibling.parentNode != prevSibling) { document.getElementById(prevSibling.id + '-plus').src = webFXTreeConfig.lIcon; } + } + else { document.getElementById(prevSibling.id + '-plus').src = webFXTreeConfig.lIcon; } + } +} + +WebFXTreeItem.prototype._remove = function() { + for (var i = this.childNodes.length - 1; i >= 0; i--) { + this.childNodes[i]._remove(); + } + for (var i = 0; i < this.parentNode.childNodes.length; i++) { + if (this.id == this.parentNode.childNodes[i].id) { + for (var j = i; j < this.parentNode.childNodes.length; j++) { + this.parentNode.childNodes[i] = this.parentNode.childNodes[i+1] + } + this.parentNode.childNodes.length = this.parentNode.childNodes.length - 1; + if (i + 1 == this.parentNode.childNodes.length) { this.parentNode._last = true; } + } + } + webFXTreeHandler.all[this.id] = null; + if (document.getElementById(this.id)) { + document.getElementById(this.id).innerHTML = ""; + document.getElementById(this.id).removeNode(); + } +} + +WebFXTreeItem.prototype.expand = function() { + this.doExpand(); + document.getElementById(this.id + '-plus').src = this.minusIcon; +} + +WebFXTreeItem.prototype.collapse = function() { + this.focus(); + this.doCollapse(); + document.getElementById(this.id + '-plus').src = this.plusIcon; +} + +WebFXTreeItem.prototype.getFirst = function() { + return this.childNodes[0]; +} + +WebFXTreeItem.prototype.getLast = function() { + if (this.childNodes[this.childNodes.length - 1].open) { return this.childNodes[this.childNodes.length - 1].getLast(); } + else { return this.childNodes[this.childNodes.length - 1]; } +} + +WebFXTreeItem.prototype.getNextSibling = function() { + for (var i = 0; i < this.parentNode.childNodes.length; i++) { + if (this == this.parentNode.childNodes[i]) { break; } + } + if (++i == this.parentNode.childNodes.length) { return this.parentNode.getNextSibling(); } + else { return this.parentNode.childNodes[i]; } +} + +WebFXTreeItem.prototype.getPreviousSibling = function(b) { + for (var i = 0; i < this.parentNode.childNodes.length; i++) { + if (this == this.parentNode.childNodes[i]) { break; } + } + if (i == 0) { return this.parentNode; } + else { + if ((this.parentNode.childNodes[--i].open) || (b && this.parentNode.childNodes[i].folder)) { return this.parentNode.childNodes[i].getLast(); } + else { return this.parentNode.childNodes[i]; } +} } + +WebFXTreeItem.prototype.keydown = function(key) { + if ((key == 39) && (this.folder)) { + if (!this.open) { this.expand(); return false; } + else { this.getFirst().select(); return false; } + } + else if (key == 37) { + if (this.open) { this.collapse(); return false; } + else { this.parentNode.select(); return false; } + } + else if (key == 40) { + if (this.open) { this.getFirst().select(); return false; } + else { + var sib = this.getNextSibling(); + if (sib) { sib.select(); return false; } + } } + else if (key == 38) { this.getPreviousSibling().select(); return false; } + return true; +} + +WebFXTreeItem.prototype.toString = function (nItem, nItemCount) { + var foo = this.parentNode; + var indent = ''; + if (nItem + 1 == nItemCount) { this.parentNode._last = true; } + var i = 0; + while (foo.parentNode) { + foo = foo.parentNode; + indent = "<img id=\"" + this.id + "-indent-" + i + "\" src=\"" + ((foo._last)?webFXTreeConfig.blankIcon:webFXTreeConfig.iIcon) + "\">" + indent; + i++; + } + this._level = i; + if (this.childNodes.length) { this.folder = 1; } + else { this.open = false; } + if ((this.folder) || (webFXTreeHandler.behavior != 'classic')) { + if (!this.icon) { this.icon = webFXTreeConfig.folderIcon; } + if (!this.openIcon) { this.openIcon = webFXTreeConfig.openFolderIcon; } + } + else if (!this.icon) { this.icon = webFXTreeConfig.fileIcon; } + var label = this.text; + label = label.replace('<', '<'); + label = label.replace('>', '>'); + var str = "<div id=\"" + this.id + "\" ondblclick=\"webFXTreeHandler.toggle(this);\" class=\"webfx-tree-item\" onkeydown=\"return webFXTreeHandler.keydown(this)\">"; + str += indent; + str += "<img id=\"" + this.id + "-plus\" src=\"" + ((this.folder)?((this.open)?((this.parentNode._last)?webFXTreeConfig.lMinusIcon:webFXTreeConfig.tMinusIcon):((this.parentNode._last)?webFXTreeConfig.lPlusIcon:webFXTreeConfig.tPlusIcon)):((this.parentNode._last)?webFXTreeConfig.lIcon:webFXTreeConfig.tIcon)) + "\" onclick=\"webFXTreeHandler.toggle(this);\">" + str += "<img id=\"" + this.id + "-icon\" src=\"" + ((webFXTreeHandler.behavior == 'classic' && this.open)?this.openIcon:this.icon) + "\" onclick=\"webFXTreeHandler.select(this);\"><a href=\"" + this.action + "\" id=\"" + this.id + "-anchor\" target=\"" + this.targetWindow + "\" onfocus=\"webFXTreeHandler.focus(this);\" onblur=\"webFXTreeHandler.blur(this);\">" + label + "</a></div>"; + str += "<div id=\"" + this.id + "-cont\" class=\"webfx-tree-container\" style=\"display: " + ((this.open)?'block':'none') + ";\">"; + for (var i = 0; i < this.childNodes.length; i++) { + str += this.childNodes[i].toString(i,this.childNodes.length); + } + str += "</div>"; + this.plusIcon = ((this.parentNode._last)?webFXTreeConfig.lPlusIcon:webFXTreeConfig.tPlusIcon); + this.minusIcon = ((this.parentNode._last)?webFXTreeConfig.lMinusIcon:webFXTreeConfig.tMinusIcon); + return str; +}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/stylesheet.css b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/stylesheet.css new file mode 100755 index 00000000..3f546dc5 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/stylesheet.css @@ -0,0 +1,184 @@ +a { color: #0000FF; text-decoration: none; } +a:hover { color: #FF0000; text-decoration: underline; } +a:active { color: #FF0000; text-decoration: underline; } + +body { background-color: #EEEEEE; font-family: Verdana, Arial, sans-serif } +body, table { font-size: 10pt } +a img { border: 0px; } +dd { margin-left: 0px; padding-left: 1em; } + +/* Page layout/boxes */ + +.info-box {} +.info-box-title { margin: 1em 0em 0em 0em; padding: .25em; font-weight: normal; font-size: 14pt; border: 2px solid #999999; background-color: #DDDDDD } +.info-box-body { border: 1px solid #999999; padding: .5em; background-color: #F8F8F8; } +.nav-bar { font-size: 8pt; white-space: nowrap; text-align: right; padding: .2em; margin: 0em 0em 1em 0em; } + +.oddrow { background-color: #DDDDDD; border: 1px solid #999999; padding: .5em; margin-bottom: 1em} +.evenrow { background-color: #DDDDDD; border: 1px solid #999999; padding: .5em; margin-bottom: 1em} + +.page-body { max-width: 800px; margin: auto; } +.tree { } + +/* Index formatting classes */ + +.index-item-body { margin-top: .5em; margin-bottom: .5em} +.index-item-description { margin-top: .25em } +.index-item-details { font-weight: normal; font-style: italic; font-size: 8pt } +.index-letter-section { background-color: #EEEEEE; border: 1px dotted #999999; padding: .5em; margin-bottom: 1em} +.index-letter-title { font-size: 12pt; font-weight: bold } +.index-letter-menu { text-align: center; margin: 1em } +.index-letter { font-size: 12pt } + +/* Docbook classes */ + +.description {} +.short-description { font-weight: bold; color: #666666; } +.tags { padding-left: 0em; margin-left: 3em; color: #666666; list-style-type: square; } +.parameters { padding-left: 0em; margin-left: 3em; font-style: italic; list-style-type: square; } +.redefinitions { font-size: 8pt; padding-left: 0em; margin-left: 2em; } +.package { } +.package-title { font-weight: bold; font-size: 14pt; border-bottom: 1px solid black } +.package-details { font-size: 85%; } +.sub-package { font-weight: bold; font-size: 120% } +.tutorial { border-width: thin; border-color: #0066ff } +.tutorial-nav-box { width: 100%; border: 2px solid #999999; background-color: #DDDDDD } +.nav-button-disabled { color: #999999; } +.nav-button:active, +.nav-button:focus, +.nav-button:hover { background-color: #AAAAAA; outline: 1px solid #666666; text-decoration: none } +.folder-title { font-style: italic } + +/* Generic formatting */ + +.field { font-weight: bold; } +.detail { font-size: 8pt; } +.notes { font-style: italic; font-size: 8pt; } +.separator { background-color: #999999; height: 2px; } +.warning { color: #FF6600; } +.disabled { font-style: italic; color: #999999; } + +/* Code elements */ + +.line-number { } + +.class-table { width: 100%; } +.class-table-header { border-bottom: 1px dotted #666666; text-align: left} +.class-name { color: #000000; font-weight: bold; } + +.method-summary { padding-left: 1em; font-size: 8pt } +.method-header { } +.method-definition { margin-bottom: .3em } +.method-title { font-weight: bold; } +.method-name { font-weight: bold; } +.method-signature { font-size: 85%; color: #0066BB; margin: .5em 0em } +.method-result { font-style: italic; } + +.var-summary { padding-left: 1em; font-size: 8pt; } +.var-header { } +.var-title { margin-bottom: .3em } +.var-type { color: red; font-weight: bold } +.var-name { font-weight: bold; } +.var-default {} +.var-description { font-weight: normal; color: #000000; } + +.include-title { } +.include-type { font-style: italic; } +.include-name { font-weight: bold; } + +.const-title { } +.const-name { font-weight: bold; } + +/* Syntax highlighting */ + +.src-code { border: 1px solid #336699; padding: 1em; background-color: #EEEEEE; + font-family: 'Courier New', Courier, monospace; font-weight: normal; } +.src-line { font-family: 'Courier New', Courier, monospace; font-weight: normal; } + +.src-comm { color: #666666; } +.src-id { } +.src-inc { color: #0000FF; } +.src-key { color: #0000FF; } +.src-num { color: #CC0000; } +.src-str { color: #66cccc; } +.src-sym { font-weight: bold; } +.src-var { } + +.src-php { font-weight: bold; } + +.src-doc { color: #009999 } +.src-doc-close-template { color: #0000FF } +.src-doc-coretag { color: #0099FF; font-weight: bold } +.src-doc-inlinetag { color: #0099FF } +.src-doc-internal { color: #6699cc } +.src-doc-tag { color: #0080CC } +.src-doc-template { color: #0000FF } +.src-doc-type { font-style: italic } +.src-doc-var { font-style: italic } + +.tute-tag { color: #009999 } +.tute-attribute-name { color: #0000FF } +.tute-attribute-value { color: #0099FF } +.tute-entity { font-weight: bold; } +.tute-comment { font-style: italic } +.tute-inline-tag { color: #636311; font-weight: bold } + +/* tutorial */ + +.authors { } +.author { font-style: italic; font-weight: bold } +.author-blurb { margin: .5em 0em .5em 2em; font-size: 85%; font-weight: normal; font-style: normal } +.example { background-color: #DDDDDD; border: 1px solid #999999; padding: .5em; } +.listing { background-color: #DDDDDD; border: 1px solid #999999; padding: .5em; white-space: nowrap; } +.release-info { font-size: 85%; font-style: italic; margin: 1em 0em } +.ref-title-box { } +.ref-title { } +.ref-purpose { font-style: italic; color: #666666 } +.ref-synopsis { } +.title { font-weight: bold; border-bottom: 1px solid #888888; color: #888888; } +.cmd-synopsis { margin: 1em 0em } +.cmd-title { font-weight: bold } +.toc { margin-left: 2em; padding-left: 0em } + +/*------------------------------------------------------------------------------ + webfx-tree +------------------------------------------------------------------------------*/ + +.webfx-tree-container { + margin: 0px; + padding: 0px; + white-space: nowrap; + font: icon; +} + +.webfx-tree-item { + padding: 0px; + margin: 0px; + color: black; + white-space: nowrap; + font: icon; +} + +.webfx-tree-item a { + margin-left: 3px; + padding: 1px 2px 1px 2px; + color: black; + text-decoration: none; +} + +.webfx-tree-item a:hover, .webfx-tree-item a:active { + color: white; + background: red; + text-decoration: none +} + +.webfx-tree-item img { + vertical-align: middle; + border: 0px; +} + +.webfx-tree-icon { + width: 16px; + height: 16px; +} + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/method.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/method.tpl new file mode 100755 index 00000000..06d57a12 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/method.tpl @@ -0,0 +1,149 @@ +<A NAME='method_detail'></A> +{section name=methods loop=$methods} +{if $methods[methods].static} +<a name="method{$methods[methods].function_name}" id="{$methods[methods].function_name}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div class="method-header"> + <span class="method-title">static {$methods[methods].function_name}</span> (line <span class="line-number">{if $methods[methods].slink}{$methods[methods].slink}{else}{$methods[methods].line_number}{/if}</span>) + </div> + + {include file="docblock.tpl" sdesc=$methods[methods].sdesc desc=$methods[methods].desc tags=$methods[methods].tags params=$methods[methods].params function=false} + + <div class="method-signature"> + static <span class="method-result">{$methods[methods].function_return}</span> + <span class="method-name"> + {if $methods[methods].ifunction_call.returnsref}&{/if}{$methods[methods].function_name} + </span> + {if count($methods[methods].ifunction_call.params)} + ({section name=params loop=$methods[methods].ifunction_call.params}{if $smarty.section.params.iteration != 1}, {/if}{if $methods[methods].ifunction_call.params[params].hasdefault}[{/if}<span class="var-type">{$methods[methods].ifunction_call.params[params].type}</span> <span class="var-name">{$methods[methods].ifunction_call.params[params].name}</span>{if $methods[methods].ifunction_call.params[params].hasdefault} = <span class="var-default">{$methods[methods].ifunction_call.params[params].default}</span>]{/if}{/section}) + {else} + () + {/if} + </div> + + {if $methods[methods].params} + <ul class="parameters"> + {section name=params loop=$methods[methods].params} + <li> + <span class="var-type">{$methods[methods].params[params].datatype}</span> + <span class="var-name">{$methods[methods].params[params].var}</span>{if $methods[methods].params[params].data}<span class="var-description">: {$methods[methods].params[params].data}</span>{/if} + </li> + {/section} + </ul> + {/if} + + {if $methods[methods].method_overrides} + <hr class="separator" /> + <div class="notes">Redefinition of:</div> + <dl> + <dt>{$methods[methods].method_overrides.link}</dt> + {if $methods[methods].method_overrides.sdesc} + <dd>{$methods[methods].method_overrides.sdesc}</dd> + {/if} + </dl> + {/if} + {if $methods[methods].method_implements} + <hr class="separator" /> + <div class="notes">Implementation of:</div> + {section name=imp loop=$methods[methods].method_implements} + <dl> + <dt>{$methods[methods].method_implements[imp].link}</dt> + {if $methods[methods].method_implements[imp].sdesc} + <dd>{$methods[methods].method_implements[imp].sdesc}</dd> + {/if} + </dl> + {/section} + {/if} + + {if $methods[methods].descmethod} + <hr class="separator" /> + <div class="notes">Redefined in descendants as:</div> + <ul class="redefinitions"> + {section name=dm loop=$methods[methods].descmethod} + <li> + {$methods[methods].descmethod[dm].link} + {if $methods[methods].descmethod[dm].sdesc} + : {$methods[methods].descmethod[dm].sdesc} + {/if} + </li> + {/section} + </ul> + {/if} +</div> +{/if} +{/section} +{section name=methods loop=$methods} +{if !$methods[methods].static} +<a name="method{$methods[methods].function_name}" id="{$methods[methods].function_name}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div class="method-header"> + <span class="method-title">{if $methods[methods].ifunction_call.constructor}Constructor {elseif $methods[methods].ifunction_call.destructor}Destructor {/if}{$methods[methods].function_name}</span> (line <span class="line-number">{if $methods[methods].slink}{$methods[methods].slink}{else}{$methods[methods].line_number}{/if}</span>) + </div> + + {include file="docblock.tpl" sdesc=$methods[methods].sdesc desc=$methods[methods].desc tags=$methods[methods].tags params=$methods[methods].params function=false} + + <div class="method-signature"> + <span class="method-result">{$methods[methods].function_return}</span> + <span class="method-name"> + {if $methods[methods].ifunction_call.returnsref}&{/if}{$methods[methods].function_name} + </span> + {if count($methods[methods].ifunction_call.params)} + ({section name=params loop=$methods[methods].ifunction_call.params}{if $smarty.section.params.iteration != 1}, {/if}{if $methods[methods].ifunction_call.params[params].hasdefault}[{/if}<span class="var-type">{$methods[methods].ifunction_call.params[params].type}</span> <span class="var-name">{$methods[methods].ifunction_call.params[params].name}</span>{if $methods[methods].ifunction_call.params[params].hasdefault} = <span class="var-default">{$methods[methods].ifunction_call.params[params].default}</span>]{/if}{/section}) + {else} + () + {/if} + </div> + + {if $methods[methods].params} + <ul class="parameters"> + {section name=params loop=$methods[methods].params} + <li> + <span class="var-type">{$methods[methods].params[params].datatype}</span> + <span class="var-name">{$methods[methods].params[params].var}</span>{if $methods[methods].params[params].data}<span class="var-description">: {$methods[methods].params[params].data}</span>{/if} + </li> + {/section} + </ul> + {/if} + + {if $methods[methods].method_overrides} + <hr class="separator" /> + <div class="notes">Redefinition of:</div> + <dl> + <dt>{$methods[methods].method_overrides.link}</dt> + {if $methods[methods].method_overrides.sdesc} + <dd>{$methods[methods].method_overrides.sdesc}</dd> + {/if} + </dl> + {/if} + {if $methods[methods].method_implements} + <hr class="separator" /> + <div class="notes">Implementation of:</div> + {section name=imp loop=$methods[methods].method_implements} + <dl> + <dt>{$methods[methods].method_implements[imp].link}</dt> + {if $methods[methods].method_implements[imp].sdesc} + <dd>{$methods[methods].method_implements[imp].sdesc}</dd> + {/if} + </dl> + {/section} + {/if} + + {if $methods[methods].descmethod} + <hr class="separator" /> + <div class="notes">Redefined in descendants as:</div> + <ul class="redefinitions"> + {section name=dm loop=$methods[methods].descmethod} + <li> + {$methods[methods].descmethod[dm].link} + {if $methods[methods].descmethod[dm].sdesc} + : {$methods[methods].descmethod[dm].sdesc} + {/if} + </li> + {/section} + </ul> + {/if} +</div> +{/if} +{/section} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/page.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/page.tpl new file mode 100755 index 00000000..b5980236 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/page.tpl @@ -0,0 +1,211 @@ +{include file="header.tpl" top3=true} + +<h2 class="file-name">{$source_location}</h2> + +<a name="sec-description"></a> +<div class="info-box"> + <div class="info-box-title">Description</div> + <div class="nav-bar"> + {if $classes || $includes || $defines || $globals || $functions} + <span class="disabled">Description</span> | + {/if} + {if $classes} + <a href="#sec-classes">Classes</a> + {if $includes || $defines || $globals || $functions}|{/if} + {/if} + {if $includes} + <a href="#sec-includes">Includes</a> + {if $defines || $globals || $functions}|{/if} + {/if} + {if $defines} + <a href="#sec-constants">Constants</a> + {if $globals || $functions}|{/if} + {/if} + {if $globals} + <a href="#sec-variables">Variables</a> + {if $functions}|{/if} + {/if} + {if $functions} + <a href="#sec-functions">Functions</a> + {/if} + </div> + <div class="info-box-body"> + {include file="docblock.tpl" desc=$desc sdesc=$sdesc tags=$tags} + + {if $tutorial} + <hr class="separator" /> + <div class="notes">Tutorial: <span class="tutorial">{$tutorial}</div> + {/if} + </div> +</div> + +{if $classes} + <a name="sec-classes"></a> + <div class="info-box"> + <div class="info-box-title">Classes</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + <span class="disabled">Classes</span> + {if $includes || $defines || $globals || $functions}|{/if} + {if $includes} + <a href="#sec-includes">Includes</a> + {if $defines || $globals || $functions}|{/if} + {/if} + {if $defines} + <a href="#sec-constants">Constants</a> + {if $globals || $functions}|{/if} + {/if} + {if $globals} + <a href="#sec-variables">Variables</a> + {if $functions}|{/if} + {/if} + {if $functions} + <a href="#sec-functions">Functions</a> + {/if} + </div> + <div class="info-box-body"> + <table cellpadding="2" cellspacing="0" class="class-table"> + <tr> + <th class="class-table-header">Class</th> + <th class="class-table-header">Description</th> + </tr> + {section name=classes loop=$classes} + <tr> + <td style="padding-right: 2em; vertical-align: top"> + {$classes[classes].link} + </td> + <td> + {if $classes[classes].sdesc} + {$classes[classes].sdesc} + {else} + {$classes[classes].desc} + {/if} + </td> + </tr> + {/section} + </table> + </div> + </div> +{/if} + +{if $includes} + <a name="sec-includes"></a> + <div class="info-box"> + <div class="info-box-title">Includes</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $classes} + <a href="#sec-classes">Classes</a> + {if $includes || $defines || $globals || $functions}|{/if} + {/if} + <span class="disabled">Includes</span> + {if $defines || $globals || $functions}|{/if} + {if $defines} + <a href="#sec-constants">Constants</a> + {if $globals || $functions}|{/if} + {/if} + {if $globals} + <a href="#sec-variables">Variables</a> + {if $functions}|{/if} + {/if} + {if $functions} + <a href="#sec-functions">Functions</a> + {/if} + </div> + <div class="info-box-body"> + {include file="include.tpl"} + </div> + </div> +{/if} + +{if $defines} + <a name="sec-constants"></a> + <div class="info-box"> + <div class="info-box-title">Constants</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $classes} + <a href="#sec-classes">Classes</a> + {if $includes || $defines || $globals || $functions}|{/if} + {/if} + {if $includes} + <a href="#sec-includes">Includes</a> + {if $defines || $globals || $functions}|{/if} + {/if} + <span class="disabled">Constants</span> + {if $globals || $functions}|{/if} + {if $globals} + <a href="#sec-variables">Variables</a> + {if $functions}|{/if} + {/if} + {if $functions} + <a href="#sec-functions">Functions</a> + {/if} + </div> + <div class="info-box-body"> + {include file="define.tpl"} + </div> + </div> +{/if} + +{if $globals} + <a name="sec-variables"></a> + <div class="info-box"> + <div class="info-box-title">Variables</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $classes} + <a href="#sec-classes">Classes</a> + {if $includes || $defines || $globals || $functions}|{/if} + {/if} + {if $includes} + <a href="#sec-includes">Includes</a> + {if $defines || $globals || $functions}|{/if} + {/if} + {if $defines} + <a href="#sec-constants">Constants</a> + {if $globals || $functions}|{/if} + {/if} + <span class="disabled">Variables</span> + {if $functions}|{/if} + {if $functions} + <a href="#sec-functions">Functions</a> + {/if} + </div> + <div class="info-box-body"> + {include file="global.tpl"} + </div> + </div> +{/if} + +{if $functions} + <a name="sec-functions"></a> + <div class="info-box"> + <div class="info-box-title">Functions</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $classes} + <a href="#sec-classes">Classes</a> + {if $includes || $defines || $globals || $functions}|{/if} + {/if} + {if $includes} + <a href="#sec-includes">Includes</a> + {if $defines || $globals || $functions}|{/if} + {/if} + {if $defines} + <a href="#sec-constants">Constants</a> + {if $globals || $functions}|{/if} + {/if} + {if $globals} + <a href="#sec-variables">Variables</a> + {if $functions}|{/if} + {/if} + <span class="disabled">Functions</span> + </div> + <div class="info-box-body"> + {include file="function.tpl"} + </div> + </div> +{/if} + +{include file="footer.tpl" top3=true} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/pkgelementindex.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/pkgelementindex.tpl new file mode 100755 index 00000000..dc283ad0 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/pkgelementindex.tpl @@ -0,0 +1,17 @@ +{include file="header.tpl"} +<a name="top"></a> +<h2>[{$package}] element index</h2> +{if count($packageindex) > 1} + <h3>Package indexes</h3> + <ul> + {section name=p loop=$packageindex} + {if $packageindex[p].title != $package} + <li><a href="elementindex_{$packageindex[p].title}.html">{$packageindex[p].title}</a></li> + {/if} + {/section} + </ul> +{/if} +<a href="elementindex.html">All elements</a> +<br /> +{include file="basicindex.tpl" indexname=elementindex_$package} +{include file="footer.tpl"} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/ric.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/ric.tpl new file mode 100755 index 00000000..ad792475 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/ric.tpl @@ -0,0 +1,6 @@ +{include file="header.tpl"} +<div align="center"><h1>{$name}</h1></div> +<pre> +{$contents|htmlentities} +</pre> +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/todolist.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/todolist.tpl new file mode 100755 index 00000000..f929ccdb --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/todolist.tpl @@ -0,0 +1,14 @@ +{include file="header.tpl" title="Todo List"} +<div align="center"><h1>Todo List</h1></div> +{foreach from=$todos key=todopackage item=todo} +<h2>{$todopackage}</h2> +{section name=todo loop=$todo} +<h3>{$todo[todo].link}</h3> +<ul> +{section name=t loop=$todo[todo].todos} + <li>{$todo[todo].todos[t]}</li> +{/section} +</ul> +{/section} +{/foreach} +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/top_frame.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/top_frame.tpl new file mode 100755 index 00000000..36d1e5a1 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/top_frame.tpl @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> + <html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <!-- template designed by Marco Von Ballmoos --> + <title>{$title}</title> + <link rel="stylesheet" href="{$subdir}media/stylesheet.css" /> + <link rel="stylesheet" href="{$subdir}media/banner.css" /> + <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/> + </head> + <body> + <div class="banner"> + <div class="banner-title">{$package}</div> + <div class="banner-menu"> + <form> + <table cellpadding="0" cellspacing="0" style="width: 100%"> + <tr> + <td> + {if count($ric) >= 1} + {assign var="last_ric_name" value=""} + {section name=ric loop=$ric} + {if $last_ric_name != ""} | {/if} + <a href="{$ric[ric].file}" target="right">{$ric[ric].name}</a> + {assign var="last_ric_name" value=$ric[ric].name} + {/section} + {/if} + </td> + <td style="width: 2em"> </td> + <td style="text-align: right"> + {if count($packages) > 1} + <span class="field">Packages</span> + <select class="package-selector" onchange="window.parent.left_bottom.location=this[selectedIndex].value"> + {section name=p loop=$packages} + <option value="{$packages[p].link}">{$packages[p].title}</option> + {/section} + </select> + {/if} + </td> + </tr> + </table> + </form> + </div> + </div> + </body> + </html> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/tutorial.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/tutorial.tpl new file mode 100755 index 00000000..3b9109d1 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/tutorial.tpl @@ -0,0 +1,13 @@ +{include file="header.tpl" title=$title top3=true} + +{if $nav} + {include file="tutorial_nav.tpl" prev=$prev next=$next up=$up prevtitle=$prevtitle nexttitle=$nexttitle uptitle=$uptitle} +{/if} + +{$contents} + +{if $nav} + {include file="tutorial_nav.tpl" prev=$prev next=$next up=$up prevtitle=$prevtitle nexttitle=$nexttitle uptitle=$uptitle} +{/if} + +{include file="footer.tpl" top3=true}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/tutorial_nav.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/tutorial_nav.tpl new file mode 100755 index 00000000..89952301 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/tutorial_nav.tpl @@ -0,0 +1,41 @@ +<table class="tutorial-nav-box"> + <tr> + <td style="width: 30%"> + {if $prev} + <a href="{$prev}" class="nav-button">Previous</a> + {else} + <span class="nav-button-disabled">Previous</span> + {/if} + </td> + <td style="text-align: center"> + {if $up} + <a href="{$up}" class="nav-button">Up</a> + {/if} + </td> + <td style="text-align: right; width: 30%"> + {if $next} + <a href="{$next}" class="nav-button">Next</a> + {else} + <span class="nav-button-disabled">Next</span> + {/if} + </td> + </tr> + <tr> + <td style="width: 30%"> + {if $prevtitle} + <span class="detail">{$prevtitle}</span> + {/if} + </td> + <td style="text-align: center"> + {if $uptitle} + <span class="detail">{$uptitle}</span> + {/if} + </td> + <td style="text-align: right; width: 30%"> + {if $nexttitle} + <span class="detail">{$nexttitle}</span> + {/if} + </td> + </tr> +</table> +
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/tutorial_toc.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/tutorial_toc.tpl new file mode 100755 index 00000000..3482249b --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/tutorial_toc.tpl @@ -0,0 +1,40 @@ +{if count($toc)} +<h1 class="title">Table of Contents</h1> +<ul class="toc"> + {assign var="lastcontext" value='refsect1'} + {section name=toc loop=$toc} + + {if $toc[toc].tagname != $lastcontext} + {if $lastcontext == 'refsect1'} + <ul class="toc"> + <li>{$toc[toc].link}</li> + {else} + {if $lastcontext == 'refsect2'} + {if $toc[toc].tagname == 'refsect1'} + </ul> + <li>{$toc[toc].link}</li> + {/if} + {if $toc[toc].tagname == 'refsect3'} + <ul class="toc"> + <li>{$toc[toc].link}</li> + {/if} + {else} + </ul> + </ul> + <li>{$toc[toc].link}</li> + {/if} + {/if} + {assign var="lastcontext" value=$toc[toc].tagname} + {else} + <li>{$toc[toc].link}</li> + {/if} + {/section} + {if $lastcontext == 'refsect2'} + </ul> + {/if} + {if $lastcontext == 'refsect3'} + </ul> + </ul> + {/if} +</ul> +{/if} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/tutorial_tree.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/tutorial_tree.tpl new file mode 100755 index 00000000..40d9a4ff --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/tutorial_tree.tpl @@ -0,0 +1,8 @@ + var a{$name|replace:"-":"_"}node = new WebFXTreeItem('{$main.title|strip_tags|escape:"quotes"}','{$main.link}', parent_node); + +{if $haskids} + var a{$name|replace:"-":"_"}_old_parent_node = parent_node; + parent_node = a{$name|replace:"-":"_"}node; + {$kids} + parent_node = a{$name|replace:"-":"_"}_old_parent_node; +{/if} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/var.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/var.tpl new file mode 100755 index 00000000..fccf6892 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/var.tpl @@ -0,0 +1,92 @@ +{section name=vars loop=$vars} +{if $vars[vars].static} +<a name="var{$vars[vars].var_name}" id="{$vars[vars].var_name}"><!-- --></A> +<div class="{cycle values="evenrow,oddrow"}"> + + <div class="var-header"> + <span class="var-title"> + static <span class="var-type">{$vars[vars].var_type}</span> + <span class="var-name">{$vars[vars].var_name}</span> + {if $vars[vars].var_default} = <span class="var-default">{$vars[vars].var_default|replace:"\n":"<br />"}</span>{/if} + (line <span class="line-number">{if $vars[vars].slink}{$vars[vars].slink}{else}{$vars[vars].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$vars[vars].sdesc desc=$vars[vars].desc tags=$vars[vars].tags} + + {if $vars[vars].var_overrides} + <hr class="separator" /> + <div class="notes">Redefinition of:</div> + <dl> + <dt>{$vars[vars].var_overrides.link}</dt> + {if $vars[vars].var_overrides.sdesc} + <dd>{$vars[vars].var_overrides.sdesc}</dd> + {/if} + </dl> + {/if} + + {if $vars[vars].descvar} + <hr class="separator" /> + <div class="notes">Redefined in descendants as:</div> + <ul class="redefinitions"> + {section name=vm loop=$vars[vars].descvar} + <li> + {$vars[vars].descvar[vm].link} + {if $vars[vars].descvar[vm].sdesc} + : {$vars[vars].descvar[vm].sdesc} + {/if} + </li> + {/section} + </ul> + {/if} + +</div> +{/if} +{/section} + +{section name=vars loop=$vars} +{if !$vars[vars].static} +<a name="var{$vars[vars].var_name}" id="{$vars[vars].var_name}"><!-- --></A> +<div class="{cycle values="evenrow,oddrow"}"> + + <div class="var-header"> + <span class="var-title"> + <span class="var-type">{$vars[vars].var_type}</span> + <span class="var-name">{$vars[vars].var_name}</span> + {if $vars[vars].var_default} = <span class="var-default">{$vars[vars].var_default|replace:"\n":"<br />"}</span>{/if} + (line <span class="line-number">{if $vars[vars].slink}{$vars[vars].slink}{else}{$vars[vars].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$vars[vars].sdesc desc=$vars[vars].desc tags=$vars[vars].tags} + + {if $vars[vars].var_overrides} + <hr class="separator" /> + <div class="notes">Redefinition of:</div> + <dl> + <dt>{$vars[vars].var_overrides.link}</dt> + {if $vars[vars].var_overrides.sdesc} + <dd>{$vars[vars].var_overrides.sdesc}</dd> + {/if} + </dl> + {/if} + + {if $vars[vars].descvar} + <hr class="separator" /> + <div class="notes">Redefined in descendants as:</div> + <ul class="redefinitions"> + {section name=vm loop=$vars[vars].descvar} + <li> + {$vars[vars].descvar[vm].link} + {if $vars[vars].descvar[vm].sdesc} + : {$vars[vars].descvar[vm].sdesc} + {/if} + </li> + {/section} + </ul> + {/if} + +</div> +{/if} +{/section} + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/options.ini b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/options.ini new file mode 100755 index 00000000..084809be --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/options.ini @@ -0,0 +1,577 @@ +preservedocbooktags = false + +;; used to highlight the {@source} inline tag, @filesource tag, and @example tag +[highlightSourceTokens] +;; format: +;; T_CONSTANTNAME = open +;; /T_CONSTANTNAME = close + +T_INCLUDE = <span class="src-inc"> +/T_INCLUDE = </span> +T_INCLUDE_ONCE = <span class="src-inc"> +/T_INCLUDE_ONCE = </span> +T_REQUIRE_ONCE = <span class="src-inc"> +/T_REQUIRE_ONCE = </span> +T_REQUIRE_ONCE = <span class="src-inc"> +/T_REQUIRE_ONCE = </span> + +T_CONSTANT_ENCAPSED_STRING = <span class="src-str"> +/T_CONSTANT_ENCAPSED_STRING = </span> +T_STRING_VARNAME = <span class="src-str"> +/T_STRING_VARNAME = </span> + +T_STRING = <span class="src-id"> +/T_STRING = </span> + +T_DNUMBER = <span class="src-num"> +/T_DNUMBER = </span> +T_LNUMBER = <span class="src-num"> +/T_LNUMBER = </span> + +T_VARIABLE = <span class="src-var"> +/T_VARIABLE = </span> + +T_COMMENT = <span class="src-comm"> +/T_COMMENT = </span> +T_ML_COMMENT = <span class="src-comm"> +/T_ML_COMMENT = </span> + +T_OBJECT_OPERATOR = <span class="src-sym"> +/T_OBJECT_OPERATOR = </span> + +T_ABSTRACT = <span class="src-key"> +/T_ABSTRACT = </span> +T_CLONE = <span class="src-key"> +/T_CLONE = </span> +T_HALT_COMPILER = <span class="src-key"> +/T_HALT_COMPILER = </span> +T_ARRAY = <span class="src-key"> +/T_ARRAY = </span> +T_AS = <span class="src-key"> +/T_AS = </span> +T_BREAK = <span class="src-key"> +/T_BREAK = </span> +T_CLASS = <span class="src-key"> +/T_CLASS = </span> +T_CASE = <span class="src-key"> +/T_CASE = </span> +T_CONST = <span class="src-key"> +/T_CONST = </span> +T_CONTINUE = <span class="src-key"> +/T_CONTINUE = </span> +T_DECLARE = <span class="src-key"> +/T_DECLARE = </span> +T_DEFAULT = <span class="src-key"> +/T_DEFAULT = </span> +T_ELSE = <span class="src-key"> +/T_ELSE = </span> +T_ELSEIF = <span class="src-key"> +/T_ELSEIF = </span> +T_EMPTY = <span class="src-key"> +/T_EMPTY = </span> +T_ENDDECLARE = <span class="src-key"> +/T_ENDDECLARE = </span> +T_ENDFOR = <span class="src-key"> +/T_ENDFOR = </span> +T_ENDSWITCH = <span class="src-key"> +/T_ENDSWITCH = </span> +T_ENDFOREACH = <span class="src-key"> +/T_ENDFOREACH = </span> +T_ENDIF = <span class="src-key"> +/T_ENDIF = </span> +T_ENDWHILE = <span class="src-key"> +/T_ENDWHILE = </span> +T_EXIT = <span class="src-key"> +/T_EXIT = </span> +T_EXTENDS = <span class="src-key"> +/T_EXTENDS = </span> +T_FINAL = <span class="src-key"> +/T_FINAL = </span> +T_FOR = <span class="src-key"> +/T_FOR = </span> +T_FOREACH = <span class="src-key"> +/T_FOREACH = </span> +T_FUNCTION = <span class="src-key"> +/T_FUNCTION = </span> +T_GLOBAL = <span class="src-key"> +/T_GLOBAL = </span> +T_IF = <span class="src-key"> +/T_IF = </span> +T_IMPLEMENTS = <span class="src-key"> +/T_IMPLEMENTS = </span> +T_INTERFACE = <span class="src-key"> +/T_INTERFACE = </span> +T_LOGICAL_AND = <span class="src-key"> +/T_LOGICAL_AND = </span> +T_LOGICAL_OR = <span class="src-key"> +/T_LOGICAL_OR = </span> +T_LOGICAL_XOR = <span class="src-key"> +/T_LOGICAL_XOR = </span> +T_NEW = <span class="src-key"> +/T_NEW = </span> +T_PRIVATE = <span class="src-key"> +/T_PRIVATE = </span> +T_PROTECTED = <span class="src-key"> +/T_PROTECTED = </span> +T_PUBLIC = <span class="src-key"> +/T_PUBLIC = </span> +T_RETURN = <span class="src-key"> +/T_RETURN = </span> +T_STATIC = <span class="src-key"> +/T_STATIC = </span> +T_SWITCH = <span class="src-key"> +/T_SWITCH = </span> +T_VAR = <span class="src-key"> +/T_VAR = </span> +T_WHILE = <span class="src-key"> +/T_WHILE = </span> + +T_DOUBLE_COLON = <span class="src-sym"> +/T_DOUBLE_COLON = </span> + +T_OPEN_TAG = <span class="src-php"> +/T_OPEN_TAG = </span> +T_OPEN_TAG_WITH_ECHO = <span class="src-php"> +/T_OPEN_TAG_WITH_ECHO = </span> +T_CLOSE_TAG = <span class="src-php"> +/T_CLOSE_TAG = </span> + + +[highlightSource] +;; this is for highlighting things that aren't tokens like "&" +;; format: +;; word = open +;; /word = close +@ = <span class="src-sym"> +/@ = </span> +& = <span class="src-sym"> +/& = </span> +[ = <span class="src-sym"> +/[ = </span> +] = <span class="src-sym"> +/] = </span> +! = <span class="src-sym"> +/! = </span> +";" = <span class="src-sym"> +/; = </span> +( = <span class="src-sym"> +/( = </span> +) = <span class="src-sym"> +/) = </span> +, = <span class="src-sym"> +/, = </span> +{ = <span class="src-sym"> +/{ = </span> +} = <span class="src-sym"> +/} = </span> +""" = <span class="src-str"> +/" = </span> + +[highlightDocBlockSourceTokens] +;; this is for docblock tokens, using by phpDocumentor_HighlightParser +;; tagphptype is for "string" in @param string description, for example +docblock = <span class="src-doc"> +/docblock = </span> +tagphptype = <span class="src-doc-type"> +/tagphptype = </span> +tagvarname = <span class="src-doc-var"> +/tagvarname = </span> +coretag = <span class="src-doc-coretag"> +/coretag = </span> +tag = <span class="src-doc-tag"> +/tag = </span> +inlinetag = <span class="src-doc-inlinetag"> +/inlinetag = </span> +internal = <span class="src-doc-internal"> +/internal = </span> +closetemplate = <span class="src-doc-close-template"> +/closetemplate = </span> +docblocktemplate = <span class="src-doc-template"> +/docblocktemplate = </span> + +[highlightTutorialSourceTokens] +;; this is for XML DocBook-based tutorials, highlighted by phpDocumentor_TutorialHighlightParser +;; <tag> +opentag = <span class="tute-tag"> +/opentag = </span> +;; </tag> +closetag = <span class="tute-tag"> +/closetag = </span> +;; <tag attribute="value"> +attribute = <span class="tute-attribute-name"> +/attribute = </span> +;; <tag attribute="value"> +attributevalue = <span class="tute-attribute-value"> +/attributevalue = </span> +;; &entity; +entity = <span class="tute-entity"> +/entity = </span> +;; <!-- comment --> +comment = <span class="tute-comment"> +/comment = </span> +;; {@inline tag} +itag = <span class="tute-inline-tag"> +/itag = </span> + +;; used for translation of html in DocBlocks +[desctranslate] +ul = <ul> +/ul = </ul> +ol = <ol> +/ol = </ol> +li = <li> +/li = </li> +code = +/code = +var = <var> +/var = </var> +samp = <samp> +/samp = </samp> +kbd = <kbd> +/kbd = </kbd> +pre = <pre> +/pre = </pre> +p = <p> +/p = </p> +b = <strong> +/b = </strong> +i = <em> +/i = </em> +br = <br /> + +[ppage] +;; this is the DocBook package page translation section. All DocBook tags +;; that have a corresponding html tag must be listed here. Entities should +;; also be listed here +;; +;; examples: +;; 1) +;; tagname = newtagname +;; +;; This is the simplest case, where all attributes will be added into the +;; starting tag and the ending tag will be html/xml style </tranlatedtagname> +;; <tagname></tagname> becomes <newtagname></newtagname> and +;; <tagname attr="value"></tagname> becomes +;; <newtagname attr="value"></newtagname> +;; +;; 2) +;; tagname = newtagname +;; tagname->attr = newattrname +;; +;; in this case, everything will be like the first case, except tags like: +;; <tagname attr="value"></tagname> will become +;; <newtagname newattrname="value"></newtagname> +;; +;; 3) +;; tagname = newtagname +;; tagname->attr = newattrname +;; tagname->attr+value = newvalue +;; +;; in this case, the value is also translated to another. This can be useful +;; for instances such as focus="middle" changing to align="center" or something +;; of that nature. +;; <tagname attr="value"></tagname> will become +;; <newtagname newattrname="newvalue"></newtagname> +;; +;; 4) +;; tagname = newtagname +;; tagname->attr1 = newattrname +;; tagname->attr2 = newattrname +;; tagname->attr1+value|attr2+value = newvalue +;; +;; in this case, two attributes combine to make one new attribute, and the combined +;; value is translated into a new value +;; <tagname attr1="value1" attr2="value2"></tagname> will become +;; <newtagname newattrname="newvalue"></newtagname> +;; +;; 5) +;; tagname = newtagname +;; tagname!attr = dummy +;; +;; here, the attribute will be ignored. dummy is not used and may be any value +;; <tagname attr="value"></tagname> will become +;; <newtagname></newtagname> +;; +;; 6) +;; tagname = newtagname +;; tagname! = dummy +;; +;; here, all attributes will be ignored. dummy is not used and may be any value +;; <tagname attr1="value" attr2="foo"></tagname> will become +;; <newtagname></newtagname> +;; +;; 7) +;; tagname = newtagname +;; tagname/ = 1 +;; +;; here, the tag will be translated as a single tag with no closing tag, and all +;; attributes +;; <tagname attr="val">{text text}</tagname> will become +;; <newtagname attr="val" /> +;; +;; 8) +;; tagname = <starttaginfo /> +;; /tagname = closetagtext +;; +;; in this case, the text <starttaginfo> will be inserted exactly as entered for +;; <tagname> and closetagtext for </tagname> +;; <tagname attr="val"></tagname> will become +;; <starttaginfo />closetagtext +;; +;; 9) +;; $attr$my_attribute = newattrname +;; +;; tagname = newtagname +;; +;; in this case, all occurences of my_attribute in any tag will be changed to +;; newattrname. This is useful for changing things like role="php" to +;; class="php," for example. Note that the text "$attr$" MUST be on the line +;; start for phpDocumentor to recognize it. +;; +;; 10) +;; &entity; = translation text +;; " = " +;; " = """ +;; < = < +;; +;; Use this to control translation of entities to their appropriate values + + = +" = " +” = ” +“ = “ +& = & +< = < +> = > +© = © + + +$attr$role = class + +abbrev = abbr + +blockquote = blockquote + +arg = span +arg->choice = class + +author = <span class="author"> +/author = </span> +author! = 0 + +authorblurb = <div class="author-blurb"> +/authorblurb = </div> + +authorgroup = <div class="authors"><h2 class="title">Authors</h2> +/authorgroup = </div> +authorgroup! = 0 + +caution = <span class="warning"> +/caution = </span> +caution! = 0 + +cmdsynopsis = <div class="cmd-synopsis"> +/cmdsynopsis = </div> + +command = <span class="cmd-title"> +/command = </span> + +copyright = <div class="notes"> +/copyright = </div> + +emphasis = em + +example = <div class="src-code"> +/example = </div> +example! = 0 + +function = +/function = () + +formalpara = p + +graphic = img +graphic->fileref = src +graphic/ = + +important = strong + +informalequation = blockquote + +informalexample = div + +inlineequation = em + +itemizedlist = ul + +listitem = li + +literal = code + +literallayout = span + +option = " " +/option = + +orderedlist = ol + +para = p + +programlisting = <div class="src-code"> +/programlisting = </div> +programlisting! = 0 + +refentry = div + +refnamediv = <div class="ref-title-box"> +/refnamediv = </div> +refnamediv! = 0 + +refname = <h1 class="ref-title"> +/refname = </h1> + +refpurpose = <h2 class="ref-purpose"> +/refpurpose = </h2> + +refsynopsisdiv = <div class="ref-synopsis"> +/refsynopsisdiv = </div> +refsynopsisdiv! = 0 + +refsect1 = span + +refsect2 = span + +refsect3 = +/refsect3 = <br /> + +releaseinfo = <div class="release-info">( +/releaseinfo = )</div> + +simpara = +/simpara = <br /> +simpara! = 0 + +subscript = sub + +superscript = super + +table = table + +table->colsep = rules +table->rowsep = rules +table->colsep+1|rowsep+1 =all +table->colsep+1|rowsep+0 =cols +table->colsep+0|rowsep+1 =rows + +table->frame =frame +table->frame+all =border +table->frame+none =void +table->frame+sides =vsides +table->frame+top =above +table->frame+topbot =hsides + +thead = thead + +tfoot = tfoot + +tbody = tbody + +colspec = col + +tgroup = colgroup +tgroup/ = 1 +tgroup->cols = span + +row = tr + +entry = td +entry->morerows = colspan +entry->morerows+1 =2 +entry->morerows+2 =3 +entry->morerows+3 =4 +entry->morerows+4 =5 +entry->morerows+5 =6 +entry->morerows+6 =7 +entry->morerows+7 =8 +entry->morerows+8 =9 +entry->morerows+9 =10 +entry->morerows+10 =11 +;; add more if you need more colspans + +warning = <span class="warning"> +/warning = </span> +warning! = 0 + +;; now begins the attributes that should be tags in cdata +[$attr$id] +open = a +;close = /a +cdata! = true +quotevalues = true +separator = "=" +;separateall = true +$id = name + +;; now begins the sections that deal with <title> +[refsynopsisdiv_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h1 class="title"> +close = </h1> + +[refsect1_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h2 class="title"> +close = </h2> + +[refsect2_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h3 class="title"> +close = </h3> + +[refsect3_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h4 class="title"> +close = </h4> + +[para_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <div class="title"> +close = </div> + +[formalpara_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <div class="title"> +close = </div> + +[example_title] +;tag_attr = true +;attr_name = title +;cdata_start = true +cdata_end = true +open = </td></tr><tr><td><strong> +close = </strong> + +[table_title] +;tag_attr = true +;attr_name = true +cdata_start = true +open = <caption> +close = </caption> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/basicindex.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/basicindex.tpl new file mode 100755 index 00000000..951ee264 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/basicindex.tpl @@ -0,0 +1,47 @@ +<div class="index-letter-menu"> +{section name=letter loop=$letters} + <a class="index-letter" href="{$indexname}.html#{$letters[letter].letter}">{$letters[letter].letter}</a> +{/section} +</div> + +{section name=index loop=$index} + <a name="{$index[index].letter}"></a> + <div class="index-letter-section"> + <div style="float: left" class="index-letter-title">{$index[index].letter}</div> + <div style="float: right"><a href="#top">top</a></div> + <div style="clear: both"></div> + </div> + <dl> + {section name=contents loop=$index[index].index} + <dt class="field"> + {if ($index[index].index[contents].title == "Variable")} + <span class="var-title">{$index[index].index[contents].name}</span> + {elseif ($index[index].index[contents].title == "Global")} + <span class="var-title">{$index[index].index[contents].name}</span> + {elseif ($index[index].index[contents].title == "Method")} + <span class="method-title">{$index[index].index[contents].name}</span> + {elseif ($index[index].index[contents].title == "Function")} + <span class="method-title">{$index[index].index[contents].name}</span> + {elseif ($index[index].index[contents].title == "Constant")} + <span class="const-title">{$index[index].index[contents].name}</span> + {elseif ($index[index].index[contents].title == "Page") || ($index[index].index[contents].title == "Include")} + <span class="include-title">{$index[index].index[contents].name}</span> + {else} + {$index[index].index[contents].name} + {/if} + </dt> + <dd class="index-item-body"> + <div class="index-item-details">{$index[index].index[contents].link} in {$index[index].index[contents].file_name}</div> + {if $index[index].index[contents].description} + <div class="index-item-description">{$index[index].index[contents].description}</div> + {/if} + </dd> + {/section} + </dl> +{/section} + +<div class="index-letter-menu"> +{section name=letter loop=$letters} + <a class="index-letter" href="{$indexname}.html#{$letters[letter].letter}">{$letters[letter].letter}</a> +{/section} +</div> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/blank.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/blank.tpl new file mode 100755 index 00000000..6a05f27e --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/blank.tpl @@ -0,0 +1,13 @@ +<html> +<head> + <title>{$maintitle}</title> + <link rel="stylesheet" href="{$subdir}media/stylesheet.css" /> + <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/> +</head> +<body> +<div align="center"><h1>{$maintitle}</h1></div> +<b>Welcome to {$package}!</b><br /> +<br /> +This documentation was generated by <a href="{$phpdocwebsite}">phpDocumentor v{$phpdocversion}</a><br /> +</body> +</html>
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/class.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/class.tpl new file mode 100755 index 00000000..bb5378f6 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/class.tpl @@ -0,0 +1,430 @@ +{include file="header.tpl" top3=true} + +<h2 class="class-name">{if $is_interface}Interface{else}Class{/if} {$class_name}</h2> + +<a name="sec-description"></a> +<div class="info-box"> + <div class="info-box-title">Description</div> + <div class="nav-bar"> + {if $children || $vars || $ivars || $methods || $imethods || $consts || $iconsts } + <span class="disabled">Description</span> | + {/if} + {if $children} + <a href="#sec-descendents">Descendents</a> + {if $vars || $ivars || $methods || $imethods || $consts || $iconsts}|{/if} + {/if} + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + {if $methods || $imethods}|{/if} + {/if} + {if $methods || $imethods} + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + {if $implements} + <p class="implements"> + Implements interfaces: + <ul> + {foreach item="int" from=$implements}<li>{$int}</li>{/foreach} + </ul> + </p> + {/if} + {include file="docblock.tpl" type="class" sdesc=$sdesc desc=$desc} + <p class="notes"> + Located in <a class="field" href="{$page_link}">{$source_location}</a> (line <span class="field">{if $class_slink}{$class_slink}{else}{$line_number}{/if}</span>) + </p> + + {if $tutorial} + <hr class="separator" /> + <div class="notes">Tutorial: <span class="tutorial">{$tutorial}</span></div> + {/if} + + <pre>{section name=tree loop=$class_tree.classes}{$class_tree.classes[tree]}{$class_tree.distance[tree]}{/section}</pre> + + {if $conflicts.conflict_type} + <hr class="separator" /> + <div><span class="warning">Conflicts with classes:</span><br /> + {section name=me loop=$conflicts.conflicts} + {$conflicts.conflicts[me]}<br /> + {/section} + </div> + {/if} + </div> +</div> + +{if $children} + <a name="sec-descendents"></a> + <div class="info-box"> + <div class="info-box-title">Direct descendents</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + <span class="disabled">Descendents</span> + {if $vars || $ivars || $methods || $imethods}|{/if} + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + {if $methods || $imethods}|{/if} + {/if} + {if $methods || $imethods} + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + <table cellpadding="2" cellspacing="0" class="class-table"> + <tr> + <th class="class-table-header">Class</th> + <th class="class-table-header">Description</th> + </tr> + {section name=kids loop=$children} + <tr> + <td style="padding-right: 2em">{$children[kids].link}</td> + <td> + {if $children[kids].sdesc} + {$children[kids].sdesc} + {else} + {$children[kids].desc} + {/if} + </td> + </tr> + {/section} + </table> + </div> + </div> +{/if} + +{if $consts} + <a name="sec-const-summary"></a> + <div class="info-box"> + <div class="info-box-title">Class Constant Summary</span></div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendants</a> | + {/if} + <span class="disabled">Constants</span> (<a href="#sec-consts">details</a>) + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + | + {/if} + {if $methods || $imethods} + | + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + <div class="const-summary"> + {section name=consts loop=$consts} + <div class="const-title"> + <img src="{$subdir}media/images/Constant.png" alt=" " /> + <a href="#{$consts[consts].const_name}" title="details" class="const-name">{$consts[consts].const_name}</a> = <span class="var-type">{$consts[consts].const_value}</span> + + </div> + {/section} + </div> + </div> + </div> +{/if} + +{if $vars} + <a name="sec-var-summary"></a> + <div class="info-box"> + <div class="info-box-title">Variable Summary</span></div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendents</a> | + {/if} + <span class="disabled">Vars</span> (<a href="#sec-vars">details</a>) + {if $methods || $imethods} + | + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + <div class="var-summary"> + {section name=vars loop=$vars} + {if $vars[vars].static} + <div class="var-title"> + static <span class="var-type">{$vars[vars].var_type}</span> + <a href="#{$vars[vars].var_name}" title="details" class="var-name">{$vars[vars].var_name}</a> + </div> + {/if} + {/section} + {section name=vars loop=$vars} + {if !$vars[vars].static} + <div class="var-title"> + <span class="var-type">{$vars[vars].var_type}</span> + <a href="#{$vars[vars].var_name}" title="details" class="var-name">{$vars[vars].var_name}</a> + </div> + {/if} + {/section} + </div> + </div> + </div> +{/if} + +{if $methods} + <a name="sec-method-summary"></a> + <div class="info-box"> + <div class="info-box-title">Method Summary</span></div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendents</a> | + {/if} + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + | + {/if} + <span class="disabled">Methods</span> (<a href="#sec-methods">details</a>) + </div> + <div class="info-box-body"> + <div class="method-summary"> + {section name=methods loop=$methods} + {if $methods[methods].static} + <div class="method-definition"> + static {if $methods[methods].function_return} + <span class="method-result">{$methods[methods].function_return}</span> + {/if} + <a href="#{$methods[methods].function_name}" title="details" class="method-name">{if $methods[methods].ifunction_call.returnsref}&{/if}{$methods[methods].function_name}</a> + {if count($methods[methods].ifunction_call.params)} + ({section name=params loop=$methods[methods].ifunction_call.params}{if $smarty.section.params.iteration != 1}, {/if}{if $methods[methods].ifunction_call.params[params].hasdefault}[{/if}<span class="var-type">{$methods[methods].ifunction_call.params[params].type}</span> <span class="var-name">{$methods[methods].ifunction_call.params[params].name}</span>{if $methods[methods].ifunction_call.params[params].hasdefault} = <span class="var-default">{$methods[methods].ifunction_call.params[params].default}</span>]{/if}{/section}) + {else} + () + {/if} + </div> + {/if} + {/section} + + {section name=methods loop=$methods} + {if !$methods[methods].static} + <div class="method-definition"> + {if $methods[methods].function_return} + <span class="method-result">{$methods[methods].function_return}</span> + {/if} + <a href="#{$methods[methods].function_name}" title="details" class="method-name">{if $methods[methods].ifunction_call.returnsref}&{/if}{$methods[methods].function_name}</a> + {if count($methods[methods].ifunction_call.params)} + ({section name=params loop=$methods[methods].ifunction_call.params}{if $smarty.section.params.iteration != 1}, {/if}{if $methods[methods].ifunction_call.params[params].hasdefault}[{/if}<span class="var-type">{$methods[methods].ifunction_call.params[params].type}</span> <span class="var-name">{$methods[methods].ifunction_call.params[params].name}</span>{if $methods[methods].ifunction_call.params[params].hasdefault} = <span class="var-default">{$methods[methods].ifunction_call.params[params].default}</span>]{/if}{/section}) + {else} + () + {/if} + </div> + {/if} + {/section} +</div> + </div> + </div> +{/if} + +{if $vars || $ivars} + <a name="sec-vars"></a> + <div class="info-box"> + <div class="info-box-title">Variables</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendents</a> | + {/if} + {if $methods} + <a href="#sec-var-summary">Vars</a> (<span class="disabled">details</span>) + {else} + <span class="disabled">Vars</span> + {/if} + + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + {if $methods || $imethods} + | + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + {include file="var.tpl"} + {if $ivars} + <h4>Inherited Variables</h4> + <A NAME='inherited_vars'><!-- --></A> + {section name=ivars loop=$ivars} + <p>Inherited from <span class="classname">{$ivars[ivars].parent_class}</span></p> + <blockquote> + {section name=ivars2 loop=$ivars[ivars].ivars} + <span class="var-title"> + <span class="var-name">{$ivars[ivars].ivars[ivars2].link}</span>{if $ivars[ivars].ivars[ivars2].ivar_sdesc}: {$ivars[ivars].ivars[ivars2].ivar_sdesc}{/if}<br> + </span> + {/section} + </blockquote> + {/section} + {/if} + </div> + </div> +{/if} + +{if $methods || $imethods} + <a name="sec-methods"></a> + <div class="info-box"> + <div class="info-box-title">Methods</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendents</a> | + {/if} + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + {/if} + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + {if $methods} + <a href="#sec-method-summary">Methods</a> (<span class="disabled">details</span>) + {else} + <span class="disabled">Methods</span> + {/if} + </div> + <div class="info-box-body"> + {include file="method.tpl"} + {if $imethods} + <h4>Inherited Methods</h4> + <a name='inherited_methods'><!-- --></a> + {section name=imethods loop=$imethods} + <!-- =========== Summary =========== --> + <p>Inherited From <span class="classname">{$imethods[imethods].parent_class}</span></p> + <blockquote> + {section name=im2 loop=$imethods[imethods].imethods} + <span class="method-name">{$imethods[imethods].imethods[im2].link}</span>{if $imethods[imethods].imethods[im2].ifunction_sdesc}: {$imethods[imethods].imethods[im2].ifunction_sdesc}{/if}<br> + {/section} + </blockquote> + {/section} + {/if} + </div> + </div> +{/if} + +{if $consts || $iconsts} + <a name="sec-consts"></a> + <div class="info-box"> + <div class="info-box-title">Class Constants</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendants</a> | + {/if} + {if $methods} + <a href="#sec-var-summary">Constants</a> (<span class="disabled">details</span>) + {else} + <span class="disabled">Constants</span> + {/if} + + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + {/if} + {if $methods || $imethods} + | + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + {include file="const.tpl"} + {if $iconsts} + <h4>Inherited Constants</h4> + <A NAME='inherited_vars'><!-- --></A> + {section name=iconsts loop=$iconsts} + <p>Inherited from <span class="classname">{$iconsts[iconsts].parent_class}</span></p> + <blockquote> + {section name=iconsts2 loop=$iconsts[iconsts].iconsts} + <img src="{$subdir}media/images/{if $iconsts[iconsts].iconsts[iconsts2].access == 'private'}PrivateVariable{else}Variable{/if}.png" /> + <span class="const-title"> + <span class="const-name">{$iconsts[iconsts].iconsts[iconsts2].link}</span>{if $iconsts[iconsts].iconsts[iconsts2].iconst_sdesc}: {$iconsts[iconsts].iconsts[iconsts2].iconst_sdesc}{/if}<br> + </span> + {/section} + </blockquote> + {/section} + {/if} + </div> + </div> +{/if} + +{include file="footer.tpl" top3=true} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/classtrees.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/classtrees.tpl new file mode 100755 index 00000000..952e6d50 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/classtrees.tpl @@ -0,0 +1,19 @@ +{include file="header.tpl" top1=true} + +<!-- Start of Class Data --> +<H2> + {$smarty.capture.title} +</H2> +{if $interfaces} +{section name=classtrees loop=$interfaces} +<h2>Root interface {$interfaces[classtrees].class}</h2> +{$interfaces[classtrees].class_tree} +{/section} +{/if} +{if $classtrees} +{section name=classtrees loop=$classtrees} +<h2>Root class {$classtrees[classtrees].class}</h2> +{$classtrees[classtrees].class_tree} +{/section} +{/if} +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/const.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/const.tpl new file mode 100644 index 00000000..c26ff92d --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/const.tpl @@ -0,0 +1,18 @@ +{section name=consts loop=$consts} +<a name="const{$consts[consts].const_name}" id="{$consts[consts].const_name}"><!-- --></A> +<div class="{cycle values="evenrow,oddrow"}"> + + <div class="const-header"> + <img src="{$subdir}media/images/{if $consts[consts].access == 'private'}PrivateVariable{else}Variable{/if}.png" /> + <span class="const-title"> + <span class="const-name">{$consts[consts].const_name}</span> + = <span class="const-default">{$consts[consts].const_value|replace:"\n":"<br />"}</span> + (line <span class="line-number">{if $consts[consts].slink}{$consts[consts].slink}{else}{$consts[consts].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$consts[consts].sdesc desc=$consts[consts].desc tags=$consts[consts].tags} + +</div> +{/section} + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/define.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/define.tpl new file mode 100755 index 00000000..0da5d864 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/define.tpl @@ -0,0 +1,24 @@ +{section name=def loop=$defines} +<a name="{$defines[def].define_link}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div> + <span class="const-title"> + <span class="const-name">{$defines[def].define_name}</span> = {$defines[def].define_value|replace:"\n":"<br />"} + (line <span class="line-number">{if $defines[def].slink}{$defines[def].slink}{else}{$defines[def].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$defines[def].sdesc desc=$defines[def].desc tags=$defines[def].tags} + + {if $globals[glob].global_conflicts.conflict_type} + <hr class="separator" /> + <div><span class="warning">Conflicts with constants:</span><br /> + {section name=me loop=$defines[def].define_conflicts.conflicts} + {$defines[def].define_conflicts.conflicts[me]}<br /> + {/section} + </div> + {/if} + +</div> +{/section}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/docblock.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/docblock.tpl new file mode 100755 index 00000000..783d5271 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/docblock.tpl @@ -0,0 +1,14 @@ +<!-- ========== Info from phpDoc block ========= --> +{if $sdesc} +<p class="short-description">{$sdesc}</p> +{/if} +{if $desc} +<p class="description">{$desc}</p> +{/if} +{if $tags} + <ul class="tags"> + {section name=tags loop=$tags} + <li><span class="field">{$tags[tags].keyword}:</span> {$tags[tags].data}</li> + {/section} + </ul> +{/if} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/elementindex.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/elementindex.tpl new file mode 100755 index 00000000..d5964f99 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/elementindex.tpl @@ -0,0 +1,12 @@ +{include file="header.tpl" noleftindex=true} +<a name="top"></a> +<h2>Full index</h2> +<h3>Package indexes</h3> +<ul> +{section name=p loop=$packageindex} + <li><a href="elementindex_{$packageindex[p].title}.html">{$packageindex[p].title}</a></li> +{/section} +</ul> +<br /> +{include file="basicindex.tpl" indexname="elementindex"} +{include file="footer.tpl"} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/errors.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/errors.tpl new file mode 100755 index 00000000..0f526584 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/errors.tpl @@ -0,0 +1,21 @@ +{include file="header.tpl" noleftindex=true} +{section name=files loop=$files} +<a href="#{$files[files].file}">{$files[files].file}</a><br> +{/section} +{foreach key=file item=issues from=$all} +<a name="{$file}"></a> +<h1>{$file}</h1> +{if count($issues.warnings)} +<h2>Warnings:</h2><br> +{section name=warnings loop=$issues.warnings} +<b>{$issues.warnings[warnings].name}</b> - {$issues.warnings[warnings].listing}<br> +{/section} +{/if} +{if count($issues.errors)} +<h2>Errors:</h2><br> +{section name=errors loop=$issues.errors} +<b>{$issues.errors[errors].name}</b> - {$issues.errors[errors].listing}<br> +{/section} +{/if} +{/foreach} +{include file="footer.tpl"} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/examplesource.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/examplesource.tpl new file mode 100755 index 00000000..8abf74ce --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/examplesource.tpl @@ -0,0 +1,6 @@ +{include file="header.tpl" title=$title} +<h1>{$title}</h1> +<div class="listing"> +{$source} +</div> +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/filesource.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/filesource.tpl new file mode 100755 index 00000000..239f7b41 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/filesource.tpl @@ -0,0 +1,8 @@ +{capture name="tutle"}File Source for {$name}{/capture} +{include file="header.tpl" title=$smarty.capture.tutle} +<h1>Source for file {$name}</h1> +<p>Documentation is available at {$docs}</p> +<div class="src-code"> +{$source} +</div> +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/footer.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/footer.tpl new file mode 100755 index 00000000..8d0f79db --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/footer.tpl @@ -0,0 +1,8 @@ +{if !$index} + <p class="notes" id="credit"> + Documentation generated on {$date} by <a href="{$phpdocwebsite}" target="_blank">phpDocumentor {$phpdocversion}</a> + </p> +{/if} + {if $top3}</div>{/if} +</body> +</html> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/function.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/function.tpl new file mode 100755 index 00000000..b6880059 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/function.tpl @@ -0,0 +1,44 @@ +{section name=func loop=$functions} +<a name="{$functions[func].function_dest}" id="{$functions[func].function_dest}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div> + <span class="method-title">{$functions[func].function_name}</span> (line <span class="line-number">{if $functions[func].slink}{$functions[func].slink}{else}{$functions[func].line_number}{/if}</span>) + </div> + + {include file="docblock.tpl" sdesc=$functions[func].sdesc desc=$functions[func].desc tags=$functions[func].tags params=$functions[func].params function=false} + + <div class="method-signature"> + <span class="method-result">{$functions[func].function_return}</span> + <span class="method-name"> + {if $functions[func].ifunction_call.returnsref}&{/if}{$functions[func].function_name} + </span> + {if count($functions[func].ifunction_call.params)} + ({section name=params loop=$functions[func].ifunction_call.params}{if $smarty.section.params.iteration != 1}, {/if}{if $functions[func].ifunction_call.params[params].hasdefault}[{/if}<span class="var-type">{$functions[func].ifunction_call.params[params].type}</span> <span class="var-name">{$functions[func].ifunction_call.params[params].name}</span>{if $functions[func].ifunction_call.params[params].hasdefault} = <span class="var-default">{$functions[func].ifunction_call.params[params].default|escape:"html"}</span>]{/if}{/section}) + {else} + () + {/if} + </div> + + {if $functions[func].params} + <ul class="parameters"> + {section name=params loop=$functions[func].params} + <li> + <span class="var-type">{$functions[func].params[params].datatype}</span> + <span class="var-name">{$functions[func].params[params].var}</span>{if $functions[func].params[params].data}<span class="var-description">: {$functions[func].params[params].data}</span>{/if} + </li> + {/section} + </ul> + {/if} + + {if $functions[func].function_conflicts.conflict_type} + <hr class="separator" /> + <div><span class="warning">Conflicts with functions:</span><br /> + {section name=me loop=$functions[func].function_conflicts.conflicts} + {$functions[func].function_conflicts.conflicts[me]}<br /> + {/section} + </div> + {/if} + +</div> +{/section} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/global.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/global.tpl new file mode 100755 index 00000000..eab7e0b0 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/global.tpl @@ -0,0 +1,26 @@ +{section name=glob loop=$globals} +<a name="{$globals[glob].global_link}" id="{$globals[glob].global_link}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div> + <span class="var-title"> + <span class="var-type">{$globals[glob].global_type}</span> + <span class="var-name">{$globals[glob].global_name}</span> + {if $vars[vars].var_default} = <span class="var-default">{$globals[glob].global_value|replace:"\n":"<br />"}</span>{/if} + (line <span class="line-number">{if $globals[glob].slink}{$globals[glob].slink}{else}{$globals[glob].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$globals[glob].sdesc desc=$globals[glob].desc tags=$globals[glob].tags} + + {if $globals[glob].global_conflicts.conflict_type} + <hr class="separator" /> + <div><span class="warning">Conflicts with global variables:</span><br /> + {section name=me loop=$globals[glob].global_conflicts.conflicts} + {$globals[glob].global_conflicts.conflicts[me]}<br /> + {/section} + </div> + {/if} + +</div> +{/section}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/header.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/header.tpl new file mode 100755 index 00000000..c22ba37d --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/header.tpl @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> + <html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <!-- template designed by Marco Von Ballmoos --> + <title>{$title}</title> + <link rel="stylesheet" href="{$subdir}media/stylesheet.css" /> + <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/> + </head> + <body> + {if $top3}<div class="page-body">{/if} + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/include.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/include.tpl new file mode 100755 index 00000000..c2419e5f --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/include.tpl @@ -0,0 +1,16 @@ +{section name=includes loop=$includes} +<a name="{$includes[includes].include_file}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div> + <span class="include-title"> + <span class="include-type">{$includes[includes].include_name}</span> + (<span class="include-name">{$includes[includes].include_value}</span>) + (line <span class="line-number">{if $includes[includes].slink}{$includes[includes].slink}{else}{$includes[includes].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$includes[includes].sdesc desc=$includes[includes].desc tags=$includes[includes].tags} + +</div> +{/section}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/index.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/index.tpl new file mode 100755 index 00000000..7cd61094 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/index.tpl @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE html + PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//FR" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"> + <html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <!-- Generated by phpDocumentor on {$date} --> + <title>{$title}</title> + <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/> +</head> + +<FRAMESET rows='120,*'> + <FRAME src='packages.html' name='left_top' frameborder="1" bordercolor="#999999"> + <FRAMESET cols='25%,*'> + <FRAME src='{$start}' name='left_bottom' frameborder="1" bordercolor="#999999"> + <FRAME src='{$blank}.html' name='right' frameborder="1" bordercolor="#999999"> + </FRAMESET> + <NOFRAMES> + <H2>Frame Alert</H2> + <P>This document is designed to be viewed using the frames feature. + If you see this message, you are using a non-frame-capable web client.</P> + </NOFRAMES> +</FRAMESET> +</HTML> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/left_frame.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/left_frame.tpl new file mode 100755 index 00000000..eb3f670d --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/left_frame.tpl @@ -0,0 +1,159 @@ +{include file="header.tpl" top2=true} +<div class="package-title">{$package}</div> +<div class="package-details"> + + <dl class="tree"> + + <dt class="folder-title">Description</dt> + <dd> + <a href='{$classtreepage}.html' target='right'>Class trees</a><br /> + <a href='{$elementindex}.html' target='right'>Index of elements</a><br /> + {if $hastodos} + <a href="{$todolink}" target="right">Todo List</a><br /> + {/if} + </dd> + + {section name=p loop=$info} + + {if $info[p].subpackage == ""} + + {if $info[p].tutorials} + <dt class="folder-title">Tutorials/Manuals</dt> + <dd> + {if $info[p].tutorials.pkg} + <dl class="tree"> + <dt class="folder-title">Package-level</dt> + <dd> + {section name=ext loop=$info[p].tutorials.pkg} + {$info[p].tutorials.pkg[ext]} + {/section} + </dd> + </dl> + {/if} + + {if $info[p].tutorials.cls} + <dl class="tree"> + <dt class="folder-title">Class-level</dt> + <dd> + {section name=ext loop=$info[p].tutorials.cls} + {$info[p].tutorials.cls[ext]} + {/section} + </dd> + </dl> + {/if} + + {if $info[p].tutorials.proc} + <dl class="tree"> + <dt class="folder-title">Function-level</dt> + <dd> + {section name=ext loop=$info[p].tutorials.proc} + {$info[p].tutorials.proc[ext]} + {/section} + </dd> + </dl> + {/if} + </dd> + {/if} + {if $info[p].hasinterfaces} + <dt class="folder-title">Interfaces</dt> + {section name=class loop=$info[p].classes} + {if $info[p].classes[class].is_interface} + <dd><a href='{$info[p].classes[class].link}' target='right'>{$info[p].classes[class].title}</a></dd> + {/if} + {/section} + {/if} + {if $info[p].hasclasses} + <dt class="folder-title">Classes</dt> + {section name=class loop=$info[p].classes} + {if $info[p].classes[class].is_class} + <dd><a href='{$info[p].classes[class].link}' target='right'>{$info[p].classes[class].title}</a></dd> + {/if} + {/section} + {/if} + {if $info[p].functions} + <dt class="folder-title">Functions</dt> + {section name=f loop=$info[p].functions} + <dd><a href='{$info[p].functions[f].link}' target='right'>{$info[p].functions[f].title}</a></dd> + {/section} + {/if} + {if $info[p].files} + <dt class="folder-title">Files</dt> + {section name=nonclass loop=$info[p].files} + <dd><a href='{$info[p].files[nonclass].link}' target='right'>{$info[p].files[nonclass].title}</a></dd> + {/section} + {/if} + + {else} + {if $info[p].tutorials} + <dt class="folder-title">Tutorials/Manuals</dt> + <dd> + {if $info[p].tutorials.pkg} + <dl class="tree"> + <dt class="folder-title">Package-level</dt> + <dd> + {section name=ext loop=$info[p].tutorials.pkg} + {$info[p].tutorials.pkg[ext]} + {/section} + </dd> + </dl> + {/if} + + {if $info[p].tutorials.cls} + <dl class="tree"> + <dt class="folder-title">Class-level</dt> + <dd> + {section name=ext loop=$info[p].tutorials.cls} + {$info[p].tutorials.cls[ext]} + {/section} + </dd> + </dl> + {/if} + + {if $info[p].tutorials.proc} + <dl class="tree"> + <dt class="folder-title">Function-level</dt> + <dd> + {section name=ext loop=$info[p].tutorials.proc} + {$info[p].tutorials.proc[ext]} + {/section} + </dd> + </dl> + {/if} + </dd> + {/if} + + <dt class="sub-package">{$info[p].subpackage}</dt> + <dd> + <dl class="tree"> + {if $info[p].subpackagetutorial} + <div><a href="{$info.0.subpackagetutorialnoa}" target="right">{$info.0.subpackagetutorialtitle}</a></div> + {/if} + {if $info[p].classes} + <dt class="folder-title">Classes</dt> + {section name=class loop=$info[p].classes} + <dd><a href='{$info[p].classes[class].link}' target='right'>{$info[p].classes[class].title}</a></dd> + {/section} + {/if} + {if $info[p].functions} + <dt class="folder-title">Functions</dt> + {section name=f loop=$info[p].functions} + <dd><a href='{$info[p].functions[f].link}' target='right'>{$info[p].functions[f].title}</a></dd> + {/section} + {/if} + {if $info[p].files} + <dt class="folder-title">Files</dt> + {section name=nonclass loop=$info[p].files} + <dd><a href='{$info[p].files[nonclass].link}' target='right'>{$info[p].files[nonclass].title}</a></dd> + {/section} + {/if} + </dl> + </dd> + + {/if} + + {/section} + </dl> +</div> +<p class="notes"><a href="{$phpdocwebsite}" target="_blank">phpDocumentor v <span class="field">{$phpdocversion}</span></a></p> +</BODY> +</HTML> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/media/banner.css b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/media/banner.css new file mode 100755 index 00000000..f2149ebb --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/media/banner.css @@ -0,0 +1,32 @@ +body +{ + background-color: #CCCCFF; + margin: 0px; + padding: 0px; +} + +/* Banner (top bar) classes */ + +.banner { } + +.banner-menu +{ + clear: both; + padding: .5em; + border-top: 2px solid #6666AA; +} + +.banner-title +{ + text-align: right; + font-size: 20pt; + font-weight: bold; + margin: .2em; +} + +.package-selector +{ + background-color: #AAAADD; + border: 1px solid black; + color: yellow; +} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/media/stylesheet.css b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/media/stylesheet.css new file mode 100755 index 00000000..1fc91c19 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/media/stylesheet.css @@ -0,0 +1,144 @@ +a { color: #336699; text-decoration: none; } +a:hover { color: #6699CC; text-decoration: underline; } +a:active { color: #6699CC; text-decoration: underline; } + +body { background : #FFFFFF; } +body, table { font-family: Georgia, Times New Roman, Times, serif; font-size: 10pt } +p, li { line-height: 140% } +a img { border: 0px; } +dd { margin-left: 0px; padding-left: 1em; } + +/* Page layout/boxes */ + +.info-box {} +.info-box-title { margin: 1em 0em 0em 0em; padding: .25em; font-weight: normal; font-size: 14pt; border: 2px solid #999999; background-color: #CCCCFF } +.info-box-body { border: 1px solid #999999; padding: .5em; } +.nav-bar { font-size: 8pt; white-space: nowrap; text-align: right; padding: .2em; margin: 0em 0em 1em 0em; } + +.oddrow { background-color: #F8F8F8; border: 1px solid #AAAAAA; padding: .5em; margin-bottom: 1em} +.evenrow { border: 1px solid #AAAAAA; padding: .5em; margin-bottom: 1em} + +.page-body { max-width: 800px; margin: auto; } +.tree dl { margin: 0px } + +/* Index formatting classes */ + +.index-item-body { margin-top: .5em; margin-bottom: .5em} +.index-item-description { margin-top: .25em } +.index-item-details { font-weight: normal; font-style: italic; font-size: 8pt } +.index-letter-section { background-color: #EEEEEE; border: 1px dotted #999999; padding: .5em; margin-bottom: 1em} +.index-letter-title { font-size: 12pt; font-weight: bold } +.index-letter-menu { text-align: center; margin: 1em } +.index-letter { font-size: 12pt } + +/* Docbook classes */ + +.description {} +.short-description { font-weight: bold; color: #666666; } +.tags { padding-left: 0em; margin-left: 3em; color: #666666; list-style-type: square; } +.parameters { padding-left: 0em; margin-left: 3em; font-style: italic; list-style-type: square; } +.redefinitions { font-size: 8pt; padding-left: 0em; margin-left: 2em; } +.package { } +.package-title { font-weight: bold; font-size: 14pt; border-bottom: 1px solid black } +.package-details { font-size: 85%; } +.sub-package { font-weight: bold; font-size: 120% } +.tutorial { border-width: thin; border-color: #0066ff } +.tutorial-nav-box { width: 100%; border: 1px solid #999999; background-color: #F8F8F8; } +.nav-button-disabled { color: #999999; } +.nav-button:active, +.nav-button:focus, +.nav-button:hover { background-color: #DDDDDD; outline: 1px solid #999999; text-decoration: none } +.folder-title { font-style: italic } + +/* Generic formatting */ + +.field { font-weight: bold; } +.detail { font-size: 8pt; } +.notes { font-style: italic; font-size: 8pt; } +.separator { background-color: #999999; height: 2px; } +.warning { color: #FF6600; } +.disabled { font-style: italic; color: #999999; } + +/* Code elements */ + +.line-number { } + +.class-table { width: 100%; } +.class-table-header { border-bottom: 1px dotted #666666; text-align: left} +.class-name { color: #000000; font-weight: bold; } + +.method-summary { padding-left: 1em; font-size: 8pt } +.method-header { } +.method-definition { margin-bottom: .3em } +.method-title { font-weight: bold; } +.method-name { font-weight: bold; } +.method-signature { font-size: 85%; color: #666666; margin: .5em 0em } +.method-result { font-style: italic; } + +.var-summary { padding-left: 1em; font-size: 8pt; } +.var-header { } +.var-title { margin-bottom: .3em } +.var-type { font-style: italic; } +.var-name { font-weight: bold; } +.var-default {} +.var-description { font-weight: normal; color: #000000; } + +.include-title { } +.include-type { font-style: italic; } +.include-name { font-weight: bold; } + +.const-title { } +.const-name { font-weight: bold; } + +/* Syntax highlighting */ + +.src-code { border: 1px solid #336699; padding: 1em; background-color: #EEEEEE; } +.src-line { font-family: 'Courier New', Courier, monospace; font-weight: normal; } + +.src-comm { color: green; } +.src-id { } +.src-inc { color: #0000FF; } +.src-key { color: #0000FF; } +.src-num { color: #CC0000; } +.src-str { color: #66cccc; } +.src-sym { font-weight: bold; } +.src-var { } + +.src-php { font-weight: bold; } + +.src-doc { color: #009999 } +.src-doc-close-template { color: #0000FF } +.src-doc-coretag { color: #0099FF; font-weight: bold } +.src-doc-inlinetag { color: #0099FF } +.src-doc-internal { color: #6699cc } +.src-doc-tag { color: #0080CC } +.src-doc-template { color: #0000FF } +.src-doc-type { font-style: italic } +.src-doc-var { font-style: italic } + +.tute-tag { color: #009999 } +.tute-attribute-name { color: #0000FF } +.tute-attribute-value { color: #0099FF } +.tute-entity { font-weight: bold; } +.tute-comment { font-style: italic } +.tute-inline-tag { color: #636311; font-weight: bold } + +/* tutorial */ + +.authors { } +.author { font-style: italic; font-weight: bold } +.author-blurb { margin: .5em 0em .5em 2em; font-size: 85%; font-weight: normal; font-style: normal } +.example { border: 1px dashed #999999; background-color: #EEEEEE; padding: .5em; } +*[class="example"] { line-height : 0.5em } +.listing { border: 1px dashed #999999; background-color: #EEEEEE; padding: .5em; white-space: nowrap; } +*[class="listing"] { line-height : 0.5em } +.release-info { font-size: 85%; font-style: italic; margin: 1em 0em } +.ref-title-box { } +.ref-title { } +.ref-purpose { font-style: italic; color: #666666 } +.ref-synopsis { } +.title { font-weight: bold; margin: 1em 0em 0em 0em; padding: .25em; border: 2px solid #999999; background-color: #CCCCFF } +.cmd-synopsis { margin: 1em 0em } +.cmd-title { font-weight: bold } +.toc { margin-left: 2em; padding-left: 0em } + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/method.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/method.tpl new file mode 100755 index 00000000..3ef9ee53 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/method.tpl @@ -0,0 +1,151 @@ +<A NAME='method_detail'></A> +{section name=methods loop=$methods} +{if $methods[methods].static} +<a name="method{$methods[methods].function_name}" id="{$methods[methods].function_name}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div class="method-header"> + <span class="method-title">static method {$methods[methods].function_name}</span> (line <span class="line-number">{if $methods[methods].slink}{$methods[methods].slink}{else}{$methods[methods].line_number}{/if}</span>) + </div> + + {include file="docblock.tpl" sdesc=$methods[methods].sdesc desc=$methods[methods].desc tags=$methods[methods].tags params=$methods[methods].params function=false} + + <div class="method-signature"> + static + <span class="method-result">{$methods[methods].function_return}</span> + <span class="method-name"> + {if $methods[methods].ifunction_call.returnsref}&{/if}{$methods[methods].function_name} + </span> + {if count($methods[methods].ifunction_call.params)} + ({section name=params loop=$methods[methods].ifunction_call.params}{if $smarty.section.params.iteration != 1}, {/if}{if $methods[methods].ifunction_call.params[params].hasdefault}[{/if}<span class="var-type">{$methods[methods].ifunction_call.params[params].type}</span> <span class="var-name">{$methods[methods].ifunction_call.params[params].name}</span>{if $methods[methods].ifunction_call.params[params].hasdefault} = <span class="var-default">{$methods[methods].ifunction_call.params[params].default}</span>]{/if}{/section}) + {else} + () + {/if} + </div> + + {if $methods[methods].params} + <ul class="parameters"> + {section name=params loop=$methods[methods].params} + <li> + <span class="var-type">{$methods[methods].params[params].datatype}</span> + <span class="var-name">{$methods[methods].params[params].var}</span>{if $methods[methods].params[params].data}<span class="var-description">: {$methods[methods].params[params].data}</span>{/if} + </li> + {/section} + </ul> + {/if} + + {if $methods[methods].method_overrides} + <hr class="separator" /> + <div class="notes">Redefinition of:</div> + <dl> + <dt>{$methods[methods].method_overrides.link}</dt> + {if $methods[methods].method_overrides.sdesc} + <dd>{$methods[methods].method_overrides.sdesc}</dd> + {/if} + </dl> + {/if} + {if $methods[methods].method_implements} + <hr class="separator" /> + <div class="notes">Implementation of:</div> + {section name=imp loop=$methods[methods].method_implements} + <dl> + <dt>{$methods[methods].method_implements[imp].link}</dt> + {if $methods[methods].method_implements[imp].sdesc} + <dd>{$methods[methods].method_implements[imp].sdesc}</dd> + {/if} + </dl> + {/section} + {/if} + + {if $methods[methods].descmethod} + <hr class="separator" /> + <div class="notes">Redefined in descendants as:</div> + <ul class="redefinitions"> + {section name=dm loop=$methods[methods].descmethod} + <li> + {$methods[methods].descmethod[dm].link} + {if $methods[methods].descmethod[dm].sdesc} + : {$methods[methods].descmethod[dm].sdesc} + {/if} + </li> + {/section} + </ul> + {/if} +</div> +{/if} +{/section} + +{section name=methods loop=$methods} +{if !$methods[methods].static} +<a name="method{$methods[methods].function_name}" id="{$methods[methods].function_name}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div class="method-header"> + <span class="method-title">{if $methods[methods].ifunction_call.constructor}Constructor {elseif $methods[methods].ifunction_call.destructor}Destructor {/if}{$methods[methods].function_name}</span> (line <span class="line-number">{if $methods[methods].slink}{$methods[methods].slink}{else}{$methods[methods].line_number}{/if}</span>) + </div> + + {include file="docblock.tpl" sdesc=$methods[methods].sdesc desc=$methods[methods].desc tags=$methods[methods].tags params=$methods[methods].params function=false} + + <div class="method-signature"> + <span class="method-result">{$methods[methods].function_return}</span> + <span class="method-name"> + {if $methods[methods].ifunction_call.returnsref}&{/if}{$methods[methods].function_name} + </span> + {if count($methods[methods].ifunction_call.params)} + ({section name=params loop=$methods[methods].ifunction_call.params}{if $smarty.section.params.iteration != 1}, {/if}{if $methods[methods].ifunction_call.params[params].hasdefault}[{/if}<span class="var-type">{$methods[methods].ifunction_call.params[params].type}</span> <span class="var-name">{$methods[methods].ifunction_call.params[params].name}</span>{if $methods[methods].ifunction_call.params[params].hasdefault} = <span class="var-default">{$methods[methods].ifunction_call.params[params].default}</span>]{/if}{/section}) + {else} + () + {/if} + </div> + + {if $methods[methods].params} + <ul class="parameters"> + {section name=params loop=$methods[methods].params} + <li> + <span class="var-type">{$methods[methods].params[params].datatype}</span> + <span class="var-name">{$methods[methods].params[params].var}</span>{if $methods[methods].params[params].data}<span class="var-description">: {$methods[methods].params[params].data}</span>{/if} + </li> + {/section} + </ul> + {/if} + + {if $methods[methods].method_overrides} + <hr class="separator" /> + <div class="notes">Redefinition of:</div> + <dl> + <dt>{$methods[methods].method_overrides.link}</dt> + {if $methods[methods].method_overrides.sdesc} + <dd>{$methods[methods].method_overrides.sdesc}</dd> + {/if} + </dl> + {/if} + {if $methods[methods].method_implements} + <hr class="separator" /> + <div class="notes">Implementation of:</div> + {section name=imp loop=$methods[methods].method_implements} + <dl> + <dt>{$methods[methods].method_implements[imp].link}</dt> + {if $methods[methods].method_implements[imp].sdesc} + <dd>{$methods[methods].method_implements[imp].sdesc}</dd> + {/if} + </dl> + {/section} + {/if} + + {if $methods[methods].descmethod} + <hr class="separator" /> + <div class="notes">Redefined in descendants as:</div> + <ul class="redefinitions"> + {section name=dm loop=$methods[methods].descmethod} + <li> + {$methods[methods].descmethod[dm].link} + {if $methods[methods].descmethod[dm].sdesc} + : {$methods[methods].descmethod[dm].sdesc} + {/if} + </li> + {/section} + </ul> + {/if} +</div> +{/if} +{/section} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/page.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/page.tpl new file mode 100755 index 00000000..b5980236 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/page.tpl @@ -0,0 +1,211 @@ +{include file="header.tpl" top3=true} + +<h2 class="file-name">{$source_location}</h2> + +<a name="sec-description"></a> +<div class="info-box"> + <div class="info-box-title">Description</div> + <div class="nav-bar"> + {if $classes || $includes || $defines || $globals || $functions} + <span class="disabled">Description</span> | + {/if} + {if $classes} + <a href="#sec-classes">Classes</a> + {if $includes || $defines || $globals || $functions}|{/if} + {/if} + {if $includes} + <a href="#sec-includes">Includes</a> + {if $defines || $globals || $functions}|{/if} + {/if} + {if $defines} + <a href="#sec-constants">Constants</a> + {if $globals || $functions}|{/if} + {/if} + {if $globals} + <a href="#sec-variables">Variables</a> + {if $functions}|{/if} + {/if} + {if $functions} + <a href="#sec-functions">Functions</a> + {/if} + </div> + <div class="info-box-body"> + {include file="docblock.tpl" desc=$desc sdesc=$sdesc tags=$tags} + + {if $tutorial} + <hr class="separator" /> + <div class="notes">Tutorial: <span class="tutorial">{$tutorial}</div> + {/if} + </div> +</div> + +{if $classes} + <a name="sec-classes"></a> + <div class="info-box"> + <div class="info-box-title">Classes</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + <span class="disabled">Classes</span> + {if $includes || $defines || $globals || $functions}|{/if} + {if $includes} + <a href="#sec-includes">Includes</a> + {if $defines || $globals || $functions}|{/if} + {/if} + {if $defines} + <a href="#sec-constants">Constants</a> + {if $globals || $functions}|{/if} + {/if} + {if $globals} + <a href="#sec-variables">Variables</a> + {if $functions}|{/if} + {/if} + {if $functions} + <a href="#sec-functions">Functions</a> + {/if} + </div> + <div class="info-box-body"> + <table cellpadding="2" cellspacing="0" class="class-table"> + <tr> + <th class="class-table-header">Class</th> + <th class="class-table-header">Description</th> + </tr> + {section name=classes loop=$classes} + <tr> + <td style="padding-right: 2em; vertical-align: top"> + {$classes[classes].link} + </td> + <td> + {if $classes[classes].sdesc} + {$classes[classes].sdesc} + {else} + {$classes[classes].desc} + {/if} + </td> + </tr> + {/section} + </table> + </div> + </div> +{/if} + +{if $includes} + <a name="sec-includes"></a> + <div class="info-box"> + <div class="info-box-title">Includes</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $classes} + <a href="#sec-classes">Classes</a> + {if $includes || $defines || $globals || $functions}|{/if} + {/if} + <span class="disabled">Includes</span> + {if $defines || $globals || $functions}|{/if} + {if $defines} + <a href="#sec-constants">Constants</a> + {if $globals || $functions}|{/if} + {/if} + {if $globals} + <a href="#sec-variables">Variables</a> + {if $functions}|{/if} + {/if} + {if $functions} + <a href="#sec-functions">Functions</a> + {/if} + </div> + <div class="info-box-body"> + {include file="include.tpl"} + </div> + </div> +{/if} + +{if $defines} + <a name="sec-constants"></a> + <div class="info-box"> + <div class="info-box-title">Constants</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $classes} + <a href="#sec-classes">Classes</a> + {if $includes || $defines || $globals || $functions}|{/if} + {/if} + {if $includes} + <a href="#sec-includes">Includes</a> + {if $defines || $globals || $functions}|{/if} + {/if} + <span class="disabled">Constants</span> + {if $globals || $functions}|{/if} + {if $globals} + <a href="#sec-variables">Variables</a> + {if $functions}|{/if} + {/if} + {if $functions} + <a href="#sec-functions">Functions</a> + {/if} + </div> + <div class="info-box-body"> + {include file="define.tpl"} + </div> + </div> +{/if} + +{if $globals} + <a name="sec-variables"></a> + <div class="info-box"> + <div class="info-box-title">Variables</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $classes} + <a href="#sec-classes">Classes</a> + {if $includes || $defines || $globals || $functions}|{/if} + {/if} + {if $includes} + <a href="#sec-includes">Includes</a> + {if $defines || $globals || $functions}|{/if} + {/if} + {if $defines} + <a href="#sec-constants">Constants</a> + {if $globals || $functions}|{/if} + {/if} + <span class="disabled">Variables</span> + {if $functions}|{/if} + {if $functions} + <a href="#sec-functions">Functions</a> + {/if} + </div> + <div class="info-box-body"> + {include file="global.tpl"} + </div> + </div> +{/if} + +{if $functions} + <a name="sec-functions"></a> + <div class="info-box"> + <div class="info-box-title">Functions</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $classes} + <a href="#sec-classes">Classes</a> + {if $includes || $defines || $globals || $functions}|{/if} + {/if} + {if $includes} + <a href="#sec-includes">Includes</a> + {if $defines || $globals || $functions}|{/if} + {/if} + {if $defines} + <a href="#sec-constants">Constants</a> + {if $globals || $functions}|{/if} + {/if} + {if $globals} + <a href="#sec-variables">Variables</a> + {if $functions}|{/if} + {/if} + <span class="disabled">Functions</span> + </div> + <div class="info-box-body"> + {include file="function.tpl"} + </div> + </div> +{/if} + +{include file="footer.tpl" top3=true} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/pkgelementindex.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/pkgelementindex.tpl new file mode 100755 index 00000000..dc283ad0 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/pkgelementindex.tpl @@ -0,0 +1,17 @@ +{include file="header.tpl"} +<a name="top"></a> +<h2>[{$package}] element index</h2> +{if count($packageindex) > 1} + <h3>Package indexes</h3> + <ul> + {section name=p loop=$packageindex} + {if $packageindex[p].title != $package} + <li><a href="elementindex_{$packageindex[p].title}.html">{$packageindex[p].title}</a></li> + {/if} + {/section} + </ul> +{/if} +<a href="elementindex.html">All elements</a> +<br /> +{include file="basicindex.tpl" indexname=elementindex_$package} +{include file="footer.tpl"} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/ric.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/ric.tpl new file mode 100755 index 00000000..eff734c1 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/ric.tpl @@ -0,0 +1,6 @@ +{include file="header.tpl"} +<h1 align="center">{$name}</h1> +<pre> +{$contents|htmlentities} +</pre> +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/todolist.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/todolist.tpl new file mode 100755 index 00000000..f929ccdb --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/todolist.tpl @@ -0,0 +1,14 @@ +{include file="header.tpl" title="Todo List"} +<div align="center"><h1>Todo List</h1></div> +{foreach from=$todos key=todopackage item=todo} +<h2>{$todopackage}</h2> +{section name=todo loop=$todo} +<h3>{$todo[todo].link}</h3> +<ul> +{section name=t loop=$todo[todo].todos} + <li>{$todo[todo].todos[t]}</li> +{/section} +</ul> +{/section} +{/foreach} +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/top_frame.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/top_frame.tpl new file mode 100755 index 00000000..fbe7eda3 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/top_frame.tpl @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> + <html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <!-- template designed by Marco Von Ballmoos --> + <title>{$title}</title> + <link rel="stylesheet" href="{$subdir}media/stylesheet.css" /> + <link rel="stylesheet" href="{$subdir}media/banner.css" /> + <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/> + </head> + <body> + <div class="banner"> + <div class="banner-title">{$package}</div> + <div class="banner-menu"> + <table cellpadding="0" cellspacing="0" style="width: 100%"> + <tr> + <td> + {if count($ric) >= 1} + {assign var="last_ric_name" value=""} + {section name=ric loop=$ric} + {if $last_ric_name != ""} | {/if} + <a href="{$ric[ric].file}" target="right">{$ric[ric].name}</a> + {assign var="last_ric_name" value=$ric[ric].name} + {/section} + {/if} + </td> + <td style="width: 2em"> </td> + <td style="text-align: right"> + {if count($packages) > 1} + {assign var="last_package_name" value=""} + {section name=p loop=$packages} + {if $last_package_name != ""} | {/if} + <a href="{$packages[p].link}" target="left_bottom">{$packages[p].title}</a> + {assign var="last_package_name" value=$packages[p].title} + {/section} + {/if} + </td> + </tr> + </table> + </div> + </div> + </body> + </html>
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/tutorial.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/tutorial.tpl new file mode 100755 index 00000000..3b9109d1 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/tutorial.tpl @@ -0,0 +1,13 @@ +{include file="header.tpl" title=$title top3=true} + +{if $nav} + {include file="tutorial_nav.tpl" prev=$prev next=$next up=$up prevtitle=$prevtitle nexttitle=$nexttitle uptitle=$uptitle} +{/if} + +{$contents} + +{if $nav} + {include file="tutorial_nav.tpl" prev=$prev next=$next up=$up prevtitle=$prevtitle nexttitle=$nexttitle uptitle=$uptitle} +{/if} + +{include file="footer.tpl" top3=true}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/tutorial_nav.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/tutorial_nav.tpl new file mode 100755 index 00000000..89952301 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/tutorial_nav.tpl @@ -0,0 +1,41 @@ +<table class="tutorial-nav-box"> + <tr> + <td style="width: 30%"> + {if $prev} + <a href="{$prev}" class="nav-button">Previous</a> + {else} + <span class="nav-button-disabled">Previous</span> + {/if} + </td> + <td style="text-align: center"> + {if $up} + <a href="{$up}" class="nav-button">Up</a> + {/if} + </td> + <td style="text-align: right; width: 30%"> + {if $next} + <a href="{$next}" class="nav-button">Next</a> + {else} + <span class="nav-button-disabled">Next</span> + {/if} + </td> + </tr> + <tr> + <td style="width: 30%"> + {if $prevtitle} + <span class="detail">{$prevtitle}</span> + {/if} + </td> + <td style="text-align: center"> + {if $uptitle} + <span class="detail">{$uptitle}</span> + {/if} + </td> + <td style="text-align: right; width: 30%"> + {if $nexttitle} + <span class="detail">{$nexttitle}</span> + {/if} + </td> + </tr> +</table> +
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/tutorial_toc.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/tutorial_toc.tpl new file mode 100755 index 00000000..3482249b --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/tutorial_toc.tpl @@ -0,0 +1,40 @@ +{if count($toc)} +<h1 class="title">Table of Contents</h1> +<ul class="toc"> + {assign var="lastcontext" value='refsect1'} + {section name=toc loop=$toc} + + {if $toc[toc].tagname != $lastcontext} + {if $lastcontext == 'refsect1'} + <ul class="toc"> + <li>{$toc[toc].link}</li> + {else} + {if $lastcontext == 'refsect2'} + {if $toc[toc].tagname == 'refsect1'} + </ul> + <li>{$toc[toc].link}</li> + {/if} + {if $toc[toc].tagname == 'refsect3'} + <ul class="toc"> + <li>{$toc[toc].link}</li> + {/if} + {else} + </ul> + </ul> + <li>{$toc[toc].link}</li> + {/if} + {/if} + {assign var="lastcontext" value=$toc[toc].tagname} + {else} + <li>{$toc[toc].link}</li> + {/if} + {/section} + {if $lastcontext == 'refsect2'} + </ul> + {/if} + {if $lastcontext == 'refsect3'} + </ul> + </ul> + {/if} +</ul> +{/if} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/tutorial_tree.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/tutorial_tree.tpl new file mode 100755 index 00000000..617b5654 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/tutorial_tree.tpl @@ -0,0 +1,6 @@ +<div><a href="{$main.link}" target="right">{$main.title|strip_tags}</a></div> +{if $haskids} +<div style="margin-left: 1em"> + {$kids} +</div> +{/if} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/var.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/var.tpl new file mode 100755 index 00000000..607d7681 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/var.tpl @@ -0,0 +1,91 @@ +{section name=vars loop=$vars} +{if $vars[vars].static} +<a name="var{$vars[vars].var_name}" id="{$vars[vars].var_name}"><!-- --></A> +<div class="{cycle values="evenrow,oddrow"}"> + + <div class="var-header"> + <span class="var-title"> + static <span class="var-type">{$vars[vars].var_type}</span> + <span class="var-name">{$vars[vars].var_name}</span> + {if $vars[vars].var_default} = <span class="var-default">{$vars[vars].var_default|replace:"\n":"<br />"}</span>{/if} + (line <span class="line-number">{if $vars[vars].slink}{$vars[vars].slink}{else}{$vars[vars].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$vars[vars].sdesc desc=$vars[vars].desc tags=$vars[vars].tags} + + {if $vars[vars].var_overrides} + <hr class="separator" /> + <div class="notes">Redefinition of:</div> + <dl> + <dt>{$vars[vars].var_overrides.link}</dt> + {if $vars[vars].var_overrides.sdesc} + <dd>{$vars[vars].var_overrides.sdesc}</dd> + {/if} + </dl> + {/if} + + {if $vars[vars].descvar} + <hr class="separator" /> + <div class="notes">Redefined in descendants as:</div> + <ul class="redefinitions"> + {section name=vm loop=$vars[vars].descvar} + <li> + {$vars[vars].descvar[vm].link} + {if $vars[vars].descvar[vm].sdesc} + : {$vars[vars].descvar[vm].sdesc} + {/if} + </li> + {/section} + </ul> + {/if} + +</div> +{/if} +{/section} +{section name=vars loop=$vars} +{if !$vars[vars].static} +<a name="var{$vars[vars].var_name}" id="{$vars[vars].var_name}"><!-- --></A> +<div class="{cycle values="evenrow,oddrow"}"> + + <div class="var-header"> + <span class="var-title"> + <span class="var-type">{$vars[vars].var_type}</span> + <span class="var-name">{$vars[vars].var_name}</span> + {if $vars[vars].var_default} = <span class="var-default">{$vars[vars].var_default|replace:"\n":"<br />"}</span>{/if} + (line <span class="line-number">{if $vars[vars].slink}{$vars[vars].slink}{else}{$vars[vars].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$vars[vars].sdesc desc=$vars[vars].desc tags=$vars[vars].tags} + + {if $vars[vars].var_overrides} + <hr class="separator" /> + <div class="notes">Redefinition of:</div> + <dl> + <dt>{$vars[vars].var_overrides.link}</dt> + {if $vars[vars].var_overrides.sdesc} + <dd>{$vars[vars].var_overrides.sdesc}</dd> + {/if} + </dl> + {/if} + + {if $vars[vars].descvar} + <hr class="separator" /> + <div class="notes">Redefined in descendants as:</div> + <ul class="redefinitions"> + {section name=vm loop=$vars[vars].descvar} + <li> + {$vars[vars].descvar[vm].link} + {if $vars[vars].descvar[vm].sdesc} + : {$vars[vars].descvar[vm].sdesc} + {/if} + </li> + {/section} + </ul> + {/if} + +</div> +{/if} +{/section} + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/options.ini b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/options.ini new file mode 100755 index 00000000..64638d09 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/options.ini @@ -0,0 +1,576 @@ +preservedocbooktags = false + +;; used to highlight the {@source} inline tag, @filesource tag, and @example tag +[highlightSourceTokens] +;; format: +;; T_CONSTANTNAME = open +;; /T_CONSTANTNAME = close + +T_INCLUDE = <span class="src-inc"> +/T_INCLUDE = </span> +T_INCLUDE_ONCE = <span class="src-inc"> +/T_INCLUDE_ONCE = </span> +T_REQUIRE_ONCE = <span class="src-inc"> +/T_REQUIRE_ONCE = </span> +T_REQUIRE_ONCE = <span class="src-inc"> +/T_REQUIRE_ONCE = </span> + +T_CONSTANT_ENCAPSED_STRING = <span class="src-str"> +/T_CONSTANT_ENCAPSED_STRING = </span> +T_STRING_VARNAME = <span class="src-str"> +/T_STRING_VARNAME = </span> + +T_STRING = <span class="src-id"> +/T_STRING = </span> + +T_DNUMBER = <span class="src-num"> +/T_DNUMBER = </span> +T_LNUMBER = <span class="src-num"> +/T_LNUMBER = </span> + +T_VARIABLE = <span class="src-var"> +/T_VARIABLE = </span> + +T_COMMENT = <span class="src-comm"> +/T_COMMENT = </span> +T_ML_COMMENT = <span class="src-comm"> +/T_ML_COMMENT = </span> + +T_OBJECT_OPERATOR = <span class="src-sym"> +/T_OBJECT_OPERATOR = </span> + +T_ABSTRACT = <span class="src-key"> +/T_ABSTRACT = </span> +T_CLONE = <span class="src-key"> +/T_CLONE = </span> +T_HALT_COMPILER = <span class="src-key"> +/T_HALT_COMPILER = </span> +T_ARRAY = <span class="src-key"> +/T_ARRAY = </span> +T_AS = <span class="src-key"> +/T_AS = </span> +T_BREAK = <span class="src-key"> +/T_BREAK = </span> +T_CLASS = <span class="src-key"> +/T_CLASS = </span> +T_CASE = <span class="src-key"> +/T_CASE = </span> +T_CONST = <span class="src-key"> +/T_CONST = </span> +T_CONTINUE = <span class="src-key"> +/T_CONTINUE = </span> +T_DECLARE = <span class="src-key"> +/T_DECLARE = </span> +T_DEFAULT = <span class="src-key"> +/T_DEFAULT = </span> +T_ELSE = <span class="src-key"> +/T_ELSE = </span> +T_ELSEIF = <span class="src-key"> +/T_ELSEIF = </span> +T_EMPTY = <span class="src-key"> +/T_EMPTY = </span> +T_ENDDECLARE = <span class="src-key"> +/T_ENDDECLARE = </span> +T_ENDFOR = <span class="src-key"> +/T_ENDFOR = </span> +T_ENDSWITCH = <span class="src-key"> +/T_ENDSWITCH = </span> +T_ENDFOREACH = <span class="src-key"> +/T_ENDFOREACH = </span> +T_ENDIF = <span class="src-key"> +/T_ENDIF = </span> +T_ENDWHILE = <span class="src-key"> +/T_ENDWHILE = </span> +T_EXIT = <span class="src-key"> +/T_EXIT = </span> +T_EXTENDS = <span class="src-key"> +/T_EXTENDS = </span> +T_FINAL = <span class="src-key"> +/T_FINAL = </span> +T_FOR = <span class="src-key"> +/T_FOR = </span> +T_FOREACH = <span class="src-key"> +/T_FOREACH = </span> +T_FUNCTION = <span class="src-key"> +/T_FUNCTION = </span> +T_GLOBAL = <span class="src-key"> +/T_GLOBAL = </span> +T_IF = <span class="src-key"> +/T_IF = </span> +T_IMPLEMENTS = <span class="src-key"> +/T_IMPLEMENTS = </span> +T_INTERFACE = <span class="src-key"> +/T_INTERFACE = </span> +T_LOGICAL_AND = <span class="src-key"> +/T_LOGICAL_AND = </span> +T_LOGICAL_OR = <span class="src-key"> +/T_LOGICAL_OR = </span> +T_LOGICAL_XOR = <span class="src-key"> +/T_LOGICAL_XOR = </span> +T_NEW = <span class="src-key"> +/T_NEW = </span> +T_PRIVATE = <span class="src-key"> +/T_PRIVATE = </span> +T_PROTECTED = <span class="src-key"> +/T_PROTECTED = </span> +T_PUBLIC = <span class="src-key"> +/T_PUBLIC = </span> +T_RETURN = <span class="src-key"> +/T_RETURN = </span> +T_STATIC = <span class="src-key"> +/T_STATIC = </span> +T_SWITCH = <span class="src-key"> +/T_SWITCH = </span> +T_VAR = <span class="src-key"> +/T_VAR = </span> +T_WHILE = <span class="src-key"> +/T_WHILE = </span> + +T_DOUBLE_COLON = <span class="src-sym"> +/T_DOUBLE_COLON = </span> + +T_OPEN_TAG = <span class="src-php"> +/T_OPEN_TAG = </span> +T_OPEN_TAG_WITH_ECHO = <span class="src-php"> +/T_OPEN_TAG_WITH_ECHO = </span> +T_CLOSE_TAG = <span class="src-php"> +/T_CLOSE_TAG = </span> + + +[highlightSource] +;; this is for highlighting things that aren't tokens like "&" +;; format: +;; word = open +;; /word = close +@ = <span class="src-sym"> +/@ = </span> +& = <span class="src-sym"> +/& = </span> +[ = <span class="src-sym"> +/[ = </span> +] = <span class="src-sym"> +/] = </span> +! = <span class="src-sym"> +/! = </span> +";" = <span class="src-sym"> +/; = </span> +( = <span class="src-sym"> +/( = </span> +) = <span class="src-sym"> +/) = </span> +, = <span class="src-sym"> +/, = </span> +{ = <span class="src-sym"> +/{ = </span> +} = <span class="src-sym"> +/} = </span> +""" = <span class="src-str"> +/" = </span> + +[highlightDocBlockSourceTokens] +;; this is for docblock tokens, using by phpDocumentor_HighlightParser +;; tagphptype is for "string" in @param string description, for example +docblock = <span class="src-doc"> +/docblock = </span> +tagphptype = <span class="src-doc-type"> +/tagphptype = </span> +tagvarname = <span class="src-doc-var"> +/tagvarname = </span> +coretag = <span class="src-doc-coretag"> +/coretag = </span> +tag = <span class="src-doc-tag"> +/tag = </span> +inlinetag = <span class="src-doc-inlinetag"> +/inlinetag = </span> +internal = <span class="src-doc-internal"> +/internal = </span> +closetemplate = <span class="src-doc-close-template"> +/closetemplate = </span> +docblocktemplate = <span class="src-doc-template"> +/docblocktemplate = </span> + +[highlightTutorialSourceTokens] +;; this is for XML DocBook-based tutorials, highlighted by phpDocumentor_TutorialHighlightParser +;; <tag> +opentag = <span class="tute-tag"> +/opentag = </span> +;; </tag> +closetag = <span class="tute-tag"> +/closetag = </span> +;; <tag attribute="value"> +attribute = <span class="tute-attribute-name"> +/attribute = </span> +;; <tag attribute="value"> +attributevalue = <span class="tute-attribute-value"> +/attributevalue = </span> +;; &entity; +entity = <span class="tute-entity"> +/entity = </span> +;; <!-- comment --> +comment = <span class="tute-comment"> +/comment = </span> +;; {@inline tag} +itag = <span class="tute-inline-tag"> +/itag = </span> + +;; used for translation of html in DocBlocks +[desctranslate] +ul = <ul> +/ul = </ul> +ol = <ol> +/ol = </ol> +li = <li> +/li = </li> +code = +/code = +var = <var> +/var = </var> +samp = <samp> +/samp = </samp> +kbd = <kbd> +/kbd = </kbd> +pre = <pre> +/pre = </pre> +p = <p> +/p = </p> +b = <strong> +/b = </strong> +i = <em> +/i = </em> +br = <br /> + +[ppage] +;; this is the DocBook package page translation section. All DocBook tags +;; that have a corresponding html tag must be listed here. Entities should +;; also be listed here +;; +;; examples: +;; 1) +;; tagname = newtagname +;; +;; This is the simplest case, where all attributes will be added into the +;; starting tag and the ending tag will be html/xml style </tranlatedtagname> +;; <tagname></tagname> becomes <newtagname></newtagname> and +;; <tagname attr="value"></tagname> becomes +;; <newtagname attr="value"></newtagname> +;; +;; 2) +;; tagname = newtagname +;; tagname->attr = newattrname +;; +;; in this case, everything will be like the first case, except tags like: +;; <tagname attr="value"></tagname> will become +;; <newtagname newattrname="value"></newtagname> +;; +;; 3) +;; tagname = newtagname +;; tagname->attr = newattrname +;; tagname->attr+value = newvalue +;; +;; in this case, the value is also translated to another. This can be useful +;; for instances such as focus="middle" changing to align="center" or something +;; of that nature. +;; <tagname attr="value"></tagname> will become +;; <newtagname newattrname="newvalue"></newtagname> +;; +;; 4) +;; tagname = newtagname +;; tagname->attr1 = newattrname +;; tagname->attr2 = newattrname +;; tagname->attr1+value|attr2+value = newvalue +;; +;; in this case, two attributes combine to make one new attribute, and the combined +;; value is translated into a new value +;; <tagname attr1="value1" attr2="value2"></tagname> will become +;; <newtagname newattrname="newvalue"></newtagname> +;; +;; 5) +;; tagname = newtagname +;; tagname!attr = dummy +;; +;; here, the attribute will be ignored. dummy is not used and may be any value +;; <tagname attr="value"></tagname> will become +;; <newtagname></newtagname> +;; +;; 6) +;; tagname = newtagname +;; tagname! = dummy +;; +;; here, all attributes will be ignored. dummy is not used and may be any value +;; <tagname attr1="value" attr2="foo"></tagname> will become +;; <newtagname></newtagname> +;; +;; 7) +;; tagname = newtagname +;; tagname/ = 1 +;; +;; here, the tag will be translated as a single tag with no closing tag, and all +;; attributes +;; <tagname attr="val">{text text}</tagname> will become +;; <newtagname attr="val" /> +;; +;; 8) +;; tagname = <starttaginfo /> +;; /tagname = closetagtext +;; +;; in this case, the text <starttaginfo> will be inserted exactly as entered for +;; <tagname> and closetagtext for </tagname> +;; <tagname attr="val"></tagname> will become +;; <starttaginfo />closetagtext +;; +;; 9) +;; $attr$my_attribute = newattrname +;; +;; tagname = newtagname +;; +;; in this case, all occurences of my_attribute in any tag will be changed to +;; newattrname. This is useful for changing things like role="php" to +;; class="php," for example. Note that the text "$attr$" MUST be on the line +;; start for phpDocumentor to recognize it. +;; +;; 10) +;; &entity; = translation text +;; " = " +;; " = """ +;; < = < +;; +;; Use this to control translation of entities to their appropriate values + + = +" = " +” = ” +“ = “ +& = & +< = < +> = > +© = © + +$attr$role = class + +abbrev = abbr + +blockquote = blockquote + +arg = span +arg->choice = class + +author = <span class="author"> +/author = </span> +author! = 0 + +authorblurb = <div class="author-blurb"> +/authorblurb = </div> + +authorgroup = <div class="authors"><h2 class="title">Authors</h2> +/authorgroup = </div> +authorgroup! = 0 + +caution = <span class="warning"> +/caution = </span> +caution! = 0 + +cmdsynopsis = <div class="cmd-synopsis"> +/cmdsynopsis = </div> + +command = <span class="cmd-title"> +/command = </span> + +copyright = <div class="notes"> +/copyright = </div> + +emphasis = em + +example = <div class="src-code"> +/example = </div> +example! = 0 + +formalpara = p + +graphic = img +graphic->fileref = src +graphic/ = + +function = +/function = () + +important = strong + +informalequation = blockquote + +informalexample = div + +inlineequation = em + +itemizedlist = ul + +listitem = li + +literal = code + +literallayout = span + +option = " " +/option = + +orderedlist = ol + +para = p + +programlisting = <div class="src-code"> +/programlisting = </div> +programlisting! = 0 + +refentry = div + +refnamediv = <div class="ref-title-box"> +/refnamediv = </div> +refnamediv! = 0 + +refname = <h1 class="ref-title"> +/refname = </h1> + +refpurpose = <h2 class="ref-purpose"> +/refpurpose = </h2> + +refsynopsisdiv = <div class="ref-synopsis"> +/refsynopsisdiv = </div> +refsynopsisdiv! = 0 + +refsect1 = span + +refsect2 = span + +refsect3 = +/refsect3 = <br /> + +releaseinfo = <div class="release-info">( +/releaseinfo = )</div> + +simpara = +/simpara = <br /> +simpara! = 0 + +subscript = sub + +superscript = super + +table = table + +table->colsep = rules +table->rowsep = rules +table->colsep+1|rowsep+1 =all +table->colsep+1|rowsep+0 =cols +table->colsep+0|rowsep+1 =rows + +table->frame =frame +table->frame+all =border +table->frame+none =void +table->frame+sides =vsides +table->frame+top =above +table->frame+topbot =hsides + +thead = thead + +tfoot = tfoot + +tbody = tbody + +colspec = col + +tgroup = colgroup +tgroup/ = 1 +tgroup->cols = span + +row = tr + +entry = td +entry->morerows = colspan +entry->morerows+1 =2 +entry->morerows+2 =3 +entry->morerows+3 =4 +entry->morerows+4 =5 +entry->morerows+5 =6 +entry->morerows+6 =7 +entry->morerows+7 =8 +entry->morerows+8 =9 +entry->morerows+9 =10 +entry->morerows+10 =11 +;; add more if you need more colspans + +warning = <span class="warning"> +/warning = </span> +warning! = 0 + +;; now begins the attributes that should be tags in cdata +[$attr$id] +open = a +;close = /a +cdata! = true +quotevalues = true +separator = "=" +;separateall = true +$id = name + +;; now begins the sections that deal with <title> +[refsynopsisdiv_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h1 class="title"> +close = </h1> + +[refsect1_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h2 class="title"> +close = </h2> + +[refsect2_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h3 class="title"> +close = </h3> + +[refsect3_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h4 class="title"> +close = </h4> + +[para_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <div class="title"> +close = </div> + +[formalpara_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <div class="title"> +close = </div> + +[example_title] +;tag_attr = true +;attr_name = title +;cdata_start = true +cdata_end = true +open = </td></tr><tr><td><strong> +close = </strong> + +[table_title] +;tag_attr = true +;attr_name = true +cdata_start = true +open = <caption> +close = </caption> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/basicindex.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/basicindex.tpl new file mode 100755 index 00000000..f90100b4 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/basicindex.tpl @@ -0,0 +1,57 @@ +<div class="index-letter-menu"> +{section name=letter loop=$letters} + <a class="index-letter" href="{$indexname}.html#{$letters[letter].letter}">{$letters[letter].letter}</a> +{/section} +</div> + +{section name=index loop=$index} + <a name="{$index[index].letter}"></a> + <div class="index-letter-section"> + <div style="float: left" class="index-letter-title">{$index[index].letter}</div> + <div style="float: right"><a href="#top">top</a></div> + <div style="clear: both"></div> + </div> + <dl> + {section name=contents loop=$index[index].index} + <dt class="field"> + {if ($index[index].index[contents].title == "Variable")} + <img src="{$subdir}media/images/{if $index[index].index[contents].access == 'private'}Private{/if}{$index[index].index[contents].title}.png" alt="{$index[index].index[contents].title}" title="{$index[index].index[contents].title}" /> + <span class="var-title">{$index[index].index[contents].name}</span> + {elseif ($index[index].index[contents].title == "Global")} + <img src="{$subdir}media/images/{$index[index].index[contents].title}.png" alt="{$index[index].index[contents].title}" title="{$index[index].index[contents].title}" /> + <span class="var-title">{$index[index].index[contents].name}</span> + {elseif ($index[index].index[contents].title == "Method")} + <img src="{$subdir}media/images/{if $index[index].index[contents].constructor}Constructor{elseif $index[index].index[contents].destructor}Destructor{else}{if $index[index].index[contents].abstract}Abstract{/if}{if $index[index].index[contents].access == 'private'}Private{/if}{$index[index].index[contents].title}{/if}.png" alt="{$index[index].index[contents].title}" title="{$index[index].index[contents].title}" /> + <span class="method-title">{$index[index].index[contents].name}</span> + {elseif ($index[index].index[contents].title == "Function")} + <img src="{$subdir}media/images/{$index[index].index[contents].title}.png" alt="{$index[index].index[contents].title}" title="{$index[index].index[contents].title}" /> + <span class="method-title">{$index[index].index[contents].name}</span> + {elseif ($index[index].index[contents].title == "Constant")} + <img src="{$subdir}media/images/{$index[index].index[contents].title}.png" alt="{$index[index].index[contents].title}" title="{$index[index].index[contents].title}" /> + <span class="const-title">{$index[index].index[contents].name}</span> + {elseif ($index[index].index[contents].title == "Page") || ($index[index].index[contents].title == "Include")} + <img src="{$subdir}media/images/{$index[index].index[contents].title}.png" alt="{$index[index].index[contents].title}" title="{$index[index].index[contents].title}" /> + <span class="include-title">{$index[index].index[contents].name}</span> + {elseif ($index[index].index[contents].title == "Class")} + <img src="{$subdir}media/images/{if $index[index].index[contents].abstract}Abstract{/if}{if $index[index].index[contents].access == 'private'}Private{/if}{$index[index].index[contents].title}.png" alt="{$index[index].index[contents].title}" title="{$index[index].index[contents].title}" /> + {$index[index].index[contents].name} + {else} + <img src="{$subdir}media/images/{$index[index].index[contents].title}.png" alt="{$index[index].index[contents].title}" title="{$index[index].index[contents].title}" /> + {$index[index].index[contents].name} + {/if} + </dt> + <dd class="index-item-body"> + <div class="index-item-details">{$index[index].index[contents].link} in {$index[index].index[contents].file_name}</div> + {if $index[index].index[contents].description} + <div class="index-item-description">{$index[index].index[contents].description}</div> + {/if} + </dd> + {/section} + </dl> +{/section} + +<div class="index-letter-menu"> +{section name=letter loop=$letters} + <a class="index-letter" href="{$indexname}.html#{$letters[letter].letter}">{$letters[letter].letter}</a> +{/section} +</div> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/blank.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/blank.tpl new file mode 100755 index 00000000..6a05f27e --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/blank.tpl @@ -0,0 +1,13 @@ +<html> +<head> + <title>{$maintitle}</title> + <link rel="stylesheet" href="{$subdir}media/stylesheet.css" /> + <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/> +</head> +<body> +<div align="center"><h1>{$maintitle}</h1></div> +<b>Welcome to {$package}!</b><br /> +<br /> +This documentation was generated by <a href="{$phpdocwebsite}">phpDocumentor v{$phpdocversion}</a><br /> +</body> +</html>
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/class.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/class.tpl new file mode 100755 index 00000000..7a46002e --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/class.tpl @@ -0,0 +1,437 @@ +{include file="header.tpl" top3=true} + +<h2 class="class-name"><img src="{$subdir}media/images/{if $abstract}{if $access == 'private'}AbstractPrivate{else}Abstract{/if}{else}{if $access == 'private'}Private{/if}{/if}{if $is_interface}Interface{else}Class{/if}_logo.png" + alt="{if $abstract}{if $access == 'private'}AbstractPrivate{else}Abstract{/if}{else}{if $access == 'private'}Private{/if}{/if} Class" + title="{if $abstract}{if $access == 'private'}AbstractPrivate{else}Abstract{/if}{else}{if $access == 'private'}Private{/if}{/if} Class" + style="vertical-align: middle">{if $is_interface}Interface{/if} {$class_name}</h2> + +<a name="sec-description"></a> +<div class="info-box"> + <div class="info-box-title">Description</div> + <div class="nav-bar"> + {if $children || $vars || $ivars || $methods || $imethods || $consts || $iconsts} + <span class="disabled">Description</span> | + {/if} + {if $children} + <a href="#sec-descendents">Descendents</a> + {if $vars || $ivars || $methods || $imethods || $consts || $iconsts}|{/if} + {/if} + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + {if $methods || $imethods}|{/if} + {/if} + {if $methods || $imethods} + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + {if $implements} + <p class="implements"> + Implements interfaces: + <ul> + {foreach item="int" from=$implements}<li>{$int}</li>{/foreach} + </ul> + </p> + {/if} + {include file="docblock.tpl" type="class" sdesc=$sdesc desc=$desc} + <p class="notes"> + Located in <a class="field" href="{$page_link}">{$source_location}</a> (line <span class="field">{if $class_slink}{$class_slink}{else}{$line_number}{/if}</span>) + </p> + + {if $tutorial} + <hr class="separator" /> + <div class="notes">Tutorial: <span class="tutorial">{$tutorial}</span></div> + {/if} + + <pre>{section name=tree loop=$class_tree.classes}{$class_tree.classes[tree]}{$class_tree.distance[tree]}{/section}</pre> + + {if $conflicts.conflict_type} + <hr class="separator" /> + <div><span class="warning">Conflicts with classes:</span><br /> + {section name=me loop=$conflicts.conflicts} + {$conflicts.conflicts[me]}<br /> + {/section} + </div> + {/if} + </div> +</div> + +{if $children} + <a name="sec-descendents"></a> + <div class="info-box"> + <div class="info-box-title">Direct descendents</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + <span class="disabled">Descendents</span> + {if $vars || $ivars || $methods || $imethods || $consts || $iconsts}|{/if} + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + {if $methods || $imethods}|{/if} + {/if} + {if $methods || $imethods} + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + <table cellpadding="2" cellspacing="0" class="class-table"> + <tr> + <th class="class-table-header">Class</th> + <th class="class-table-header">Description</th> + </tr> + {section name=kids loop=$children} + <tr> + <td style="padding-right: 2em; white-space: nowrap"> + <img src="{$subdir}media/images/{if $children[kids].abstract}Abstract{/if}{if $children[kids].access == 'private'}Private{/if}Class.png" + alt="{if $children[kids].abstract}Abstract{/if}{if $children[kids].access == 'private'}Private{/if} class" + title="{if $children[kids].abstract}Abstract{/if}{if $children[kids].access == 'private'}Private{/if} class" + style="vertical-align: center"/> + {$children[kids].link} + </td> + <td> + {if $children[kids].sdesc} + {$children[kids].sdesc} + {else} + {$children[kids].desc} + {/if} + </td> + </tr> + {/section} + </table> + </div> + </div> +{/if} + +{if $consts} + <a name="sec-const-summary"></a> + <div class="info-box"> + <div class="info-box-title">Class Constant Summary</span></div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendants</a> | + {/if} + <span class="disabled">Constants</span> (<a href="#sec-consts">details</a>) + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + | + {/if} + {if $methods || $imethods} + | + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + <div class="const-summary"> + {section name=consts loop=$consts} + <div class="const-title"> + <img src="{$subdir}media/images/Constant.png" alt=" " /> + <a href="#{$consts[consts].const_name}" title="details" class="const-name">{$consts[consts].const_name}</a> = <span class="var-type">{$consts[consts].const_value}</span> + + </div> + {/section} + </div> + </div> + </div> +{/if} + +{if $vars} + <a name="sec-var-summary"></a> + <div class="info-box"> + <div class="info-box-title">Variable Summary</span></div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendants</a> | + {/if} + <span class="disabled">Vars</span> (<a href="#sec-vars">details</a>) + {if $methods || $imethods} + | + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + <div class="var-summary"> + {section name=vars loop=$vars} + {if $vars[vars].static} + <div class="var-title"> + <img src="{$subdir}media/images/StaticVariable.png" alt=" " /> + static <span class="var-type">{$vars[vars].var_type}</span> + <a href="#{$vars[vars].var_name}" title="details" class="var-name">{$vars[vars].var_name}</a> + </div> + {/if} + {/section} + {section name=vars loop=$vars} + {if !$vars[vars].static} + <div class="var-title"> + <img src="{$subdir}media/images/{if $vars[vars].access == 'private'}PrivateVariable{else}Variable{/if}.png" alt=" " /> + <span class="var-type">{$vars[vars].var_type}</span> + <a href="#{$vars[vars].var_name}" title="details" class="var-name">{$vars[vars].var_name}</a> + </div> + {/if} + {/section} + </div> + </div> + </div> +{/if} + +{if $methods} + <a name="sec-method-summary"></a> + <div class="info-box"> + <div class="info-box-title">Method Summary</span></div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendants</a> | + {/if} + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + | + {/if} + <span class="disabled">Methods</span> (<a href="#sec-methods">details</a>) + </div> + <div class="info-box-body"> + <div class="method-summary"> + {section name=methods loop=$methods} + {if $methods[methods].static} + <div class="method-definition"> + <img src="{$subdir}media/images/StaticMethod.png" alt=" "/> + {if $methods[methods].function_return} + static <span class="method-result">{$methods[methods].function_return}</span> + {/if} + <a href="#{$methods[methods].function_name}" title="details" class="method-name">{if $methods[methods].ifunction_call.returnsref}&{/if}{$methods[methods].function_name}</a> + {if count($methods[methods].ifunction_call.params)} + ({section name=params loop=$methods[methods].ifunction_call.params}{if $smarty.section.params.iteration != 1}, {/if}{if $methods[methods].ifunction_call.params[params].hasdefault}[{/if}<span class="var-type">{$methods[methods].ifunction_call.params[params].type}</span> <span class="var-name">{$methods[methods].ifunction_call.params[params].name}</span>{if $methods[methods].ifunction_call.params[params].hasdefault} = <span class="var-default">{$methods[methods].ifunction_call.params[params].default}</span>]{/if}{/section}) + {else} + () + {/if} + </div> + {/if} + {/section} + {section name=methods loop=$methods} + {if !$methods[methods].static} + <div class="method-definition"> + <img src="{$subdir}media/images/{if $methods[methods].ifunction_call.constructor}Constructor{elseif $methods[methods].ifunction_call.destructor}Destructor{elseif $methods[methods].access == 'private'}{if $methods[methods].abstract}Abstract{/if}PrivateMethod{else}{if $methods[methods].abstract}Abstract{/if}Method{/if}.png" alt=" "/> + {if $methods[methods].function_return} + <span class="method-result">{$methods[methods].function_return}</span> + {/if} + <a href="#{$methods[methods].function_name}" title="details" class="method-name">{if $methods[methods].ifunction_call.returnsref}&{/if}{$methods[methods].function_name}</a> + {if count($methods[methods].ifunction_call.params)} + ({section name=params loop=$methods[methods].ifunction_call.params}{if $smarty.section.params.iteration != 1}, {/if}{if $methods[methods].ifunction_call.params[params].hasdefault}[{/if}<span class="var-type">{$methods[methods].ifunction_call.params[params].type}</span> <span class="var-name">{$methods[methods].ifunction_call.params[params].name}</span>{if $methods[methods].ifunction_call.params[params].hasdefault} = <span class="var-default">{$methods[methods].ifunction_call.params[params].default}</span>]{/if}{/section}) + {else} + () + {/if} + </div> + {/if} + {/section} + </div> + </div> + </div> +{/if} + +{if $vars || $ivars} + <a name="sec-vars"></a> + <div class="info-box"> + <div class="info-box-title">Variables</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendents</a> | + {/if} + {if $methods} + <a href="#sec-var-summary">Vars</a> (<span class="disabled">details</span>) + {else} + <span class="disabled">Vars</span> + {/if} + + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + {if $methods || $imethods} + | + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + {include file="var.tpl"} + {if $ivars} + <h4>Inherited Variables</h4> + <A NAME='inherited_vars'><!-- --></A> + {section name=ivars loop=$ivars} + <p>Inherited from <span class="classname">{$ivars[ivars].parent_class}</span></p> + <blockquote> + {section name=ivars2 loop=$ivars[ivars].ivars} + <img src="{$subdir}media/images/{if $ivars[ivars].ivars[ivars2].access == 'private'}PrivateVariable{else}Variable{/if}.png" /> + <span class="var-title"> + <span class="var-name">{$ivars[ivars].ivars[ivars2].link}</span>{if $ivars[ivars].ivars[ivars2].ivar_sdesc}: {$ivars[ivars].ivars[ivars2].ivar_sdesc}{/if}<br> + </span> + {/section} + </blockquote> + {/section} + {/if} + </div> + </div> +{/if} + +{if $methods || $imethods} + <a name="sec-methods"></a> + <div class="info-box"> + <div class="info-box-title">Methods</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendents</a> | + {/if} + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + {/if} + {if $methods} + <a href="#sec-method-summary">Methods</a> (<span class="disabled">details</span>) + {else} + <span class="disabled">Methods</span> + {/if} + </div> + <div class="info-box-body"> + {include file="method.tpl"} + {if $imethods} + <h4>Inherited Methods</h4> + <a name='inherited_methods'><!-- --></a> + {section name=imethods loop=$imethods} + <!-- =========== Summary =========== --> + <p>Inherited From <span class="classname">{$imethods[imethods].parent_class}</span></p> + <blockquote> + {section name=im2 loop=$imethods[imethods].imethods} + <img src="{$subdir}media/images/{if $imethods[imethods].imethods[im2].constructor}Constructor{elseif $imethods[imethods].imethods[im2].destructor}Destructor{elseif $imethods[imethods].imethods[im2].access == 'private'}{if $imethods[imethods].imethods[im2].abstract}Abstract{/if}PrivateMethod{else}{if $imethods[imethods].imethods[im2].abstract}Abstract{/if}Method{/if}.png" alt=" "/> + <span class="method-name">{$imethods[imethods].imethods[im2].link}</span>{if $imethods[imethods].imethods[im2].ifunction_sdesc}: {$imethods[imethods].imethods[im2].ifunction_sdesc}{/if}<br> + {/section} + </blockquote> + {/section} + {/if} + </div> + </div> +{/if} + +{if $consts || $iconsts} + <a name="sec-consts"></a> + <div class="info-box"> + <div class="info-box-title">Class Constants</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendants</a> | + {/if} + {if $methods} + <a href="#sec-var-summary">Constants</a> (<span class="disabled">details</span>) + {else} + <span class="disabled">Constants</span> + {/if} + + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + {/if} + {if $methods || $imethods} + | + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + {include file="const.tpl"} + {if $iconsts} + <h4>Inherited Constants</h4> + <A NAME='inherited_consts'><!-- --></A> + {section name=iconsts loop=$iconsts} + <p>Inherited from <span class="classname">{$iconsts[iconsts].parent_class}</span></p> + <blockquote> + {section name=iconsts2 loop=$iconsts[iconsts].iconsts} + <img src="{$subdir}media/images/{if $iconsts[iconsts].iconsts[iconsts2].access == 'private'}PrivateVariable{else}Variable{/if}.png" /> + <span class="const-title"> + <span class="const-name">{$iconsts[iconsts].iconsts[iconsts2].link}</span>{if $iconsts[iconsts].iconsts[iconsts2].iconst_sdesc}: {$iconsts[iconsts].iconsts[iconsts2].iconst_sdesc}{/if}<br> + </span> + {/section} + </blockquote> + {/section} + {/if} + </div> + </div> +{/if} + +{include file="footer.tpl" top3=true} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/classtrees.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/classtrees.tpl new file mode 100755 index 00000000..952e6d50 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/classtrees.tpl @@ -0,0 +1,19 @@ +{include file="header.tpl" top1=true} + +<!-- Start of Class Data --> +<H2> + {$smarty.capture.title} +</H2> +{if $interfaces} +{section name=classtrees loop=$interfaces} +<h2>Root interface {$interfaces[classtrees].class}</h2> +{$interfaces[classtrees].class_tree} +{/section} +{/if} +{if $classtrees} +{section name=classtrees loop=$classtrees} +<h2>Root class {$classtrees[classtrees].class}</h2> +{$classtrees[classtrees].class_tree} +{/section} +{/if} +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/const.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/const.tpl new file mode 100644 index 00000000..c26ff92d --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/const.tpl @@ -0,0 +1,18 @@ +{section name=consts loop=$consts} +<a name="const{$consts[consts].const_name}" id="{$consts[consts].const_name}"><!-- --></A> +<div class="{cycle values="evenrow,oddrow"}"> + + <div class="const-header"> + <img src="{$subdir}media/images/{if $consts[consts].access == 'private'}PrivateVariable{else}Variable{/if}.png" /> + <span class="const-title"> + <span class="const-name">{$consts[consts].const_name}</span> + = <span class="const-default">{$consts[consts].const_value|replace:"\n":"<br />"}</span> + (line <span class="line-number">{if $consts[consts].slink}{$consts[consts].slink}{else}{$consts[consts].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$consts[consts].sdesc desc=$consts[consts].desc tags=$consts[consts].tags} + +</div> +{/section} + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/define.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/define.tpl new file mode 100755 index 00000000..94078960 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/define.tpl @@ -0,0 +1,25 @@ +{section name=def loop=$defines} +<a name="{$defines[def].define_link}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div> + <img src="{$subdir}media/images/Constant.png" /> + <span class="const-title"> + <span class="const-name">{$defines[def].define_name}</span> = {$defines[def].define_value|replace:"\n":"<br />"} + (line <span class="line-number">{if $defines[def].slink}{$defines[def].slink}{else}{$defines[def].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$defines[def].sdesc desc=$defines[def].desc tags=$defines[def].tags} + + {if $globals[glob].global_conflicts.conflict_type} + <hr class="separator" /> + <div><span class="warning">Conflicts with constants:</span><br /> + {section name=me loop=$defines[def].define_conflicts.conflicts} + {$defines[def].define_conflicts.conflicts[me]}<br /> + {/section} + </div> + {/if} + +</div> +{/section}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/docblock.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/docblock.tpl new file mode 100755 index 00000000..783d5271 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/docblock.tpl @@ -0,0 +1,14 @@ +<!-- ========== Info from phpDoc block ========= --> +{if $sdesc} +<p class="short-description">{$sdesc}</p> +{/if} +{if $desc} +<p class="description">{$desc}</p> +{/if} +{if $tags} + <ul class="tags"> + {section name=tags loop=$tags} + <li><span class="field">{$tags[tags].keyword}:</span> {$tags[tags].data}</li> + {/section} + </ul> +{/if} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/elementindex.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/elementindex.tpl new file mode 100755 index 00000000..d5964f99 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/elementindex.tpl @@ -0,0 +1,12 @@ +{include file="header.tpl" noleftindex=true} +<a name="top"></a> +<h2>Full index</h2> +<h3>Package indexes</h3> +<ul> +{section name=p loop=$packageindex} + <li><a href="elementindex_{$packageindex[p].title}.html">{$packageindex[p].title}</a></li> +{/section} +</ul> +<br /> +{include file="basicindex.tpl" indexname="elementindex"} +{include file="footer.tpl"} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/errors.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/errors.tpl new file mode 100755 index 00000000..0f526584 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/errors.tpl @@ -0,0 +1,21 @@ +{include file="header.tpl" noleftindex=true} +{section name=files loop=$files} +<a href="#{$files[files].file}">{$files[files].file}</a><br> +{/section} +{foreach key=file item=issues from=$all} +<a name="{$file}"></a> +<h1>{$file}</h1> +{if count($issues.warnings)} +<h2>Warnings:</h2><br> +{section name=warnings loop=$issues.warnings} +<b>{$issues.warnings[warnings].name}</b> - {$issues.warnings[warnings].listing}<br> +{/section} +{/if} +{if count($issues.errors)} +<h2>Errors:</h2><br> +{section name=errors loop=$issues.errors} +<b>{$issues.errors[errors].name}</b> - {$issues.errors[errors].listing}<br> +{/section} +{/if} +{/foreach} +{include file="footer.tpl"} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/examplesource.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/examplesource.tpl new file mode 100755 index 00000000..8abf74ce --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/examplesource.tpl @@ -0,0 +1,6 @@ +{include file="header.tpl" title=$title} +<h1>{$title}</h1> +<div class="listing"> +{$source} +</div> +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/filesource.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/filesource.tpl new file mode 100755 index 00000000..239f7b41 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/filesource.tpl @@ -0,0 +1,8 @@ +{capture name="tutle"}File Source for {$name}{/capture} +{include file="header.tpl" title=$smarty.capture.tutle} +<h1>Source for file {$name}</h1> +<p>Documentation is available at {$docs}</p> +<div class="src-code"> +{$source} +</div> +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/footer.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/footer.tpl new file mode 100755 index 00000000..8d0f79db --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/footer.tpl @@ -0,0 +1,8 @@ +{if !$index} + <p class="notes" id="credit"> + Documentation generated on {$date} by <a href="{$phpdocwebsite}" target="_blank">phpDocumentor {$phpdocversion}</a> + </p> +{/if} + {if $top3}</div>{/if} +</body> +</html> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/function.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/function.tpl new file mode 100755 index 00000000..e62a98ae --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/function.tpl @@ -0,0 +1,44 @@ +{section name=func loop=$functions} +<a name="{$functions[func].function_dest}" id="{$functions[func].function_dest}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div> + <img src="{$subdir}media/images/Function.png" /> + <span class="method-title">{$functions[func].function_name}</span> (line <span class="line-number">{if $functions[func].slink}{$functions[func].slink}{else}{$functions[func].line_number}{/if}</span>) + </div> + + {include file="docblock.tpl" sdesc=$functions[func].sdesc desc=$functions[func].desc tags=$functions[func].tags params=$functions[func].params function=false} + <div class="method-signature"> + <span class="method-result">{$functions[func].function_return}</span> + <span class="method-name"> + {if $functions[func].ifunction_call.returnsref}&{/if}{$functions[func].function_name} + </span> + {if count($functions[func].ifunction_call.params)} + ({section name=params loop=$functions[func].ifunction_call.params}{if $smarty.section.params.iteration != 1}, {/if}{if $functions[func].ifunction_call.params[params].hasdefault}[{/if}<span class="var-type">{$functions[func].ifunction_call.params[params].type}</span> <span class="var-name">{$functions[func].ifunction_call.params[params].name}</span>{if $functions[func].ifunction_call.params[params].hasdefault} = <span class="var-default">{$functions[func].ifunction_call.params[params].default|escape:"html"}</span>]{/if}{/section}) + {else} + () + {/if} + </div> + + {if $functions[func].params} + <ul class="parameters"> + {section name=params loop=$functions[func].params} + <li> + <span class="var-type">{$functions[func].params[params].datatype}</span> + <span class="var-name">{$functions[func].params[params].var}</span>{if $functions[func].params[params].data}<span class="var-description">: {$functions[func].params[params].data}</span>{/if} + </li> + {/section} + </ul> + {/if} + + {if $functions[func].function_conflicts.conflict_type} + <hr class="separator" /> + <div><span class="warning">Conflicts with functions:</span><br /> + {section name=me loop=$functions[func].function_conflicts.conflicts} + {$functions[func].function_conflicts.conflicts[me]}<br /> + {/section} + </div> + {/if} + +</div> +{/section} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/global.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/global.tpl new file mode 100755 index 00000000..d37bda37 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/global.tpl @@ -0,0 +1,27 @@ +{section name=glob loop=$globals} +<a name="{$globals[glob].global_link}" id="{$globals[glob].global_link}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div> + <img src="{$subdir}media/images/Global.png" /> + <span class="var-title"> + <span class="var-type">{$globals[glob].global_type}</span> + <span class="var-name">{$globals[glob].global_name}</span> + {if $vars[vars].var_default} = <span class="var-default">{$globals[glob].global_value|replace:"\n":"<br />"}</span>{/if} + (line <span class="line-number">{if $globals[glob].slink}{$globals[glob].slink}{else}{$globals[glob].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$globals[glob].sdesc desc=$globals[glob].desc tags=$globals[glob].tags} + + {if $globals[glob].global_conflicts.conflict_type} + <hr class="separator" /> + <div><span class="warning">Conflicts with global variables:</span><br /> + {section name=me loop=$globals[glob].global_conflicts.conflicts} + {$globals[glob].global_conflicts.conflicts[me]}<br /> + {/section} + </div> + {/if} + +</div> +{/section}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/header.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/header.tpl new file mode 100755 index 00000000..c22ba37d --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/header.tpl @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> + <html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <!-- template designed by Marco Von Ballmoos --> + <title>{$title}</title> + <link rel="stylesheet" href="{$subdir}media/stylesheet.css" /> + <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/> + </head> + <body> + {if $top3}<div class="page-body">{/if} + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/include.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/include.tpl new file mode 100755 index 00000000..f264afd3 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/include.tpl @@ -0,0 +1,17 @@ +{section name=includes loop=$includes} +<a name="{$includes[includes].include_file}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div> + <img src="{$subdir}media/images/Page.png" alt=" " /> + <span class="include-title"> + <span class="include-type">{$includes[includes].include_name}</span> + (<span class="include-name">{$includes[includes].include_value}</span>) + (line <span class="line-number">{if $includes[includes].slink}{$includes[includes].slink}{else}{$includes[includes].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$includes[includes].sdesc desc=$includes[includes].desc tags=$includes[includes].tags} + +</div> +{/section}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/index.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/index.tpl new file mode 100755 index 00000000..7cd61094 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/index.tpl @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE html + PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//FR" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"> + <html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <!-- Generated by phpDocumentor on {$date} --> + <title>{$title}</title> + <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/> +</head> + +<FRAMESET rows='120,*'> + <FRAME src='packages.html' name='left_top' frameborder="1" bordercolor="#999999"> + <FRAMESET cols='25%,*'> + <FRAME src='{$start}' name='left_bottom' frameborder="1" bordercolor="#999999"> + <FRAME src='{$blank}.html' name='right' frameborder="1" bordercolor="#999999"> + </FRAMESET> + <NOFRAMES> + <H2>Frame Alert</H2> + <P>This document is designed to be viewed using the frames feature. + If you see this message, you are using a non-frame-capable web client.</P> + </NOFRAMES> +</FRAMESET> +</HTML> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/left_frame.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/left_frame.tpl new file mode 100755 index 00000000..fe79e521 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/left_frame.tpl @@ -0,0 +1,159 @@ +{include file="header.tpl" top2=true} +<div class="package-title">{$package}</div> +<div class="package-details"> + + <dl class="tree"> + + <dt class="folder-title">Description</dt> + <dd> + <a href='{$classtreepage}.html' target='right'>Class trees</a><br /> + <a href='{$elementindex}.html' target='right'>Index of elements</a><br /> + {if $hastodos} + <a href="{$todolink}" target="right">Todo List</a><br /> + {/if} + </dd> + + {section name=p loop=$info} + + {if $info[p].subpackage == ""} + + {if $info[p].tutorials} + <dt class="folder-title"><img class="tree-icon" src="{$subdir}media/images/tutorial_folder.png" alt=" ">Tutorials/Manuals</dt> + <dd> + {if $info[p].tutorials.pkg} + <dl class="tree"> + <dt class="folder-title"><img class="tree-icon" src="{$subdir}media/images/package_folder.png" alt=" ">Package-level</dt> + <dd> + {section name=ext loop=$info[p].tutorials.pkg} + {$info[p].tutorials.pkg[ext]} + {/section} + </dd> + </dl> + {/if} + + {if $info[p].tutorials.cls} + <dl class="tree"> + <dt class="folder-title"><img class="tree-icon" src="{$subdir}media/images/class_folder.png" alt=" ">Class-level</dt> + <dd> + {section name=ext loop=$info[p].tutorials.cls} + {$info[p].tutorials.cls[ext]} + {/section} + </dd> + </dl> + {/if} + + {if $info[p].tutorials.proc} + <dl class="tree"> + <dt class="folder-title"><img class="tree-icon" src="{$subdir}media/images/function_folder.png" alt=" ">Function-level</dt> + <dd> + {section name=ext loop=$info[p].tutorials.proc} + {$info[p].tutorials.proc[ext]} + {/section} + </dd> + </dl> + {/if} + </dd> + {/if} + {if $info[p].hasinterfaces} + <dt class="folder-title"><img class="tree-icon" src="{$subdir}media/images/class_folder.png" alt=" ">Interfaces</dt> + {section name=class loop=$info[p].classes} + {if $info[p].classes[class].is_interface} + <dd><img class="tree-icon" src="{$subdir}media/images/Interface.png" alt="Interface"><a href='{$info[p].classes[class].link}' target='right'>{$info[p].classes[class].title}</a></dd> + {/if} + {/section} + {/if} + {if $info[p].hasclasses} + <dt class="folder-title"><img class="tree-icon" src="{$subdir}media/images/class_folder.png" alt=" ">Classes</dt> + {section name=class loop=$info[p].classes} + {if $info[p].classes[class].is_class} + <dd><img class="tree-icon" src="{$subdir}media/images/{if $info[p].classes[class].abstract}Abstract{/if}{if $info[p].classes[class].access == 'private'}Private{/if}Class.png" alt="Class"><a href='{$info[p].classes[class].link}' target='right'>{$info[p].classes[class].title}</a></dd> + {/if} + {/section} + {/if} + {if $info[p].functions} + <dt class="folder-title"><img class="tree-icon" src="{$subdir}media/images/function_folder.png" alt=" ">Functions</dt> + {section name=f loop=$info[p].functions} + <dd><img class="tree-icon" src="{$subdir}media/images/Function.png" alt="Function"><a href='{$info[p].functions[f].link}' target='right'>{$info[p].functions[f].title}</a></dd> + {/section} + {/if} + {if $info[p].files} + <dt class="folder-title"><img class="tree-icon" src="{$subdir}media/images/folder.png" alt=" ">Files</dt> + {section name=nonclass loop=$info[p].files} + <dd><img class="tree-icon" src="{$subdir}media/images/Page.png" alt="File"><a href='{$info[p].files[nonclass].link}' target='right'>{$info[p].files[nonclass].title}</a></dd> + {/section} + {/if} + + {else} + {if $info[p].tutorials} + <dt class="folder-title"><img class="tree-icon" src="{$subdir}media/images/tutorial_folder.png" alt=" ">Tutorials/Manuals</dt> + <dd> + {if $info[p].tutorials.pkg} + <dl class="tree"> + <dt class="folder-title"><img class="tree-icon" src="{$subdir}media/images/package_folder.png" alt=" ">Package-level</dt> + <dd> + {section name=ext loop=$info[p].tutorials.pkg} + {$info[p].tutorials.pkg[ext]} + {/section} + </dd> + </dl> + {/if} + + {if $info[p].tutorials.cls} + <dl class="tree"> + <dt class="folder-title"><img class="tree-icon" src="{$subdir}media/images/class_folder.png" alt=" ">Class-level</dt> + <dd> + {section name=ext loop=$info[p].tutorials.cls} + {$info[p].tutorials.cls[ext]} + {/section} + </dd> + </dl> + {/if} + + {if $info[p].tutorials.proc} + <dl class="tree"> + <dt class="folder-title"><img class="tree-icon" src="{$subdir}media/images/function_folder.png" alt=" ">Function-level</dt> + <dd> + {section name=ext loop=$info[p].tutorials.proc} + {$info[p].tutorials.proc[ext]} + {/section} + </dd> + </dl> + {/if} + </dd> + {/if} + + <dt class="sub-package"><img class="tree-icon" src="{$subdir}media/images/package.png" alt="Sub-package">{$info[p].subpackage}</dt> + <dd> + <dl class="tree"> + {if $info[p].subpackagetutorial} + <div><img class="tree-icon" src="{$subdir}media/images/tutorial.png" alt="Tutorial"><a href="{$info.0.subpackagetutorialnoa}" target="right">{$info.0.subpackagetutorialtitle}</a></div> + {/if} + {if $info[p].classes} + <dt class="folder-title"><img class="tree-icon" src="{$subdir}media/images/class_folder.png" alt=" ">Classes</dt> + {section name=class loop=$info[p].classes} + <dd><img class="tree-icon" src="{$subdir}media/images/{if $info[p].classes[class].abstract}Abstract{/if}{if $info[p].classes[class].access == 'private'}Private{/if}Class.png" alt="Class"><a href='{$info[p].classes[class].link}' target='right'>{$info[p].classes[class].title}</a></dd> + {/section} + {/if} + {if $info[p].functions} + <dt class="folder-title"><img class="tree-icon" src="{$subdir}media/images/function_folder.png" alt=" ">Functions</dt> + {section name=f loop=$info[p].functions} + <dd><img class="tree-icon" src="{$subdir}media/images/Function.png" alt="Function"><a href='{$info[p].functions[f].link}' target='right'>{$info[p].functions[f].title}</a></dd> + {/section} + {/if} + {if $info[p].files} + <dt class="folder-title"><img class="tree-icon" src="{$subdir}media/images/folder.png" alt=" ">Files</dt> + {section name=nonclass loop=$info[p].files} + <dd><img class="tree-icon" src="{$subdir}media/images/Page.png" alt="File"><a href='{$info[p].files[nonclass].link}' target='right'>{$info[p].files[nonclass].title}</a></dd> + {/section} + {/if} + </dl> + </dd> + + {/if} + + {/section} + </dl> +</div> +<p class="notes"><a href="{$phpdocwebsite}" target="_blank">phpDocumentor v <span class="field">{$phpdocversion}</span></a></p> +</BODY> +</HTML> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/banner.css b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/banner.css new file mode 100755 index 00000000..032b037f --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/banner.css @@ -0,0 +1,33 @@ +body +{ + background-color: #EEEEEE; + margin: 0px; + padding: 0px; +} + +/* Banner (top bar) classes */ + +.banner { } + +.banner-menu +{ + text-align: right; + clear: both; + padding: .5em; + border-top: 2px solid #AAAAAA; +} + +.banner-title +{ + text-align: right; + font-size: 20pt; + font-weight: bold; + margin: .2em; +} + +.package-selector +{ + background-color: #DDDDDD; + border: 1px solid #AAAAAA; + color: #000090; +} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/AbstractClass.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/AbstractClass.png Binary files differnew file mode 100644 index 00000000..afa9d1d9 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/AbstractClass.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/AbstractClass_logo.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/AbstractClass_logo.png Binary files differnew file mode 100644 index 00000000..8f65c390 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/AbstractClass_logo.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/AbstractMethod.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/AbstractMethod.png Binary files differnew file mode 100644 index 00000000..605ccbe5 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/AbstractMethod.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/AbstractPrivateClass.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/AbstractPrivateClass.png Binary files differnew file mode 100644 index 00000000..53d76c63 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/AbstractPrivateClass.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/AbstractPrivateClass_logo.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/AbstractPrivateClass_logo.png Binary files differnew file mode 100644 index 00000000..4e68f570 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/AbstractPrivateClass_logo.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/AbstractPrivateMethod.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/AbstractPrivateMethod.png Binary files differnew file mode 100644 index 00000000..41cc9f02 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/AbstractPrivateMethod.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Class.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Class.png Binary files differnew file mode 100755 index 00000000..cf548d27 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Class.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Class_logo.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Class_logo.png Binary files differnew file mode 100644 index 00000000..6f223c47 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Class_logo.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Constant.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Constant.png Binary files differnew file mode 100755 index 00000000..a9c6f28b --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Constant.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Constructor.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Constructor.png Binary files differnew file mode 100755 index 00000000..3f16222b --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Constructor.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Destructor.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Destructor.png Binary files differnew file mode 100755 index 00000000..f28528f0 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Destructor.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Function.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Function.png Binary files differnew file mode 100755 index 00000000..902fe258 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Function.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Global.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Global.png Binary files differnew file mode 100755 index 00000000..7281bd2a --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Global.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/I.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/I.png Binary files differnew file mode 100755 index 00000000..e8512fb9 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/I.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Index.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Index.png Binary files differnew file mode 100755 index 00000000..6558ec39 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Index.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Interface.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Interface.png Binary files differnew file mode 100644 index 00000000..e6cd51ed --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Interface.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Interface_logo.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Interface_logo.png Binary files differnew file mode 100644 index 00000000..6f223c47 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Interface_logo.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/L.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/L.png Binary files differnew file mode 100755 index 00000000..eb334eda --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/L.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Lminus.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Lminus.png Binary files differnew file mode 100755 index 00000000..f7c43c0a --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Lminus.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Lplus.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Lplus.png Binary files differnew file mode 100755 index 00000000..848ec2fc --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Lplus.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Method.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Method.png Binary files differnew file mode 100755 index 00000000..9b215784 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Method.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Page.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Page.png Binary files differnew file mode 100755 index 00000000..ffe7986e --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Page.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Page_logo.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Page_logo.png Binary files differnew file mode 100644 index 00000000..44ce0b3c --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Page_logo.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/PrivateClass.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/PrivateClass.png Binary files differnew file mode 100755 index 00000000..470e6d56 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/PrivateClass.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/PrivateClass_logo.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/PrivateClass_logo.png Binary files differnew file mode 100644 index 00000000..590e0064 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/PrivateClass_logo.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/PrivateMethod.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/PrivateMethod.png Binary files differnew file mode 100755 index 00000000..d01f2b31 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/PrivateMethod.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/PrivateVariable.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/PrivateVariable.png Binary files differnew file mode 100755 index 00000000..d76b21d4 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/PrivateVariable.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/StaticMethod.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/StaticMethod.png Binary files differnew file mode 100755 index 00000000..9b215784 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/StaticMethod.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/StaticVariable.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/StaticVariable.png Binary files differnew file mode 100755 index 00000000..8e820193 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/StaticVariable.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/T.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/T.png Binary files differnew file mode 100755 index 00000000..30173254 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/T.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Tminus.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Tminus.png Binary files differnew file mode 100755 index 00000000..2260e424 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Tminus.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Tplus.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Tplus.png Binary files differnew file mode 100755 index 00000000..2c8d8f4f --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Tplus.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Variable.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Variable.png Binary files differnew file mode 100755 index 00000000..8e820193 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Variable.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/blank.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/blank.png Binary files differnew file mode 100755 index 00000000..cee9cd37 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/blank.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/class_folder.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/class_folder.png Binary files differnew file mode 100755 index 00000000..84e9587a --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/class_folder.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/empty.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/empty.png Binary files differnew file mode 100644 index 00000000..d5683865 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/empty.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/file.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/file.png Binary files differnew file mode 100755 index 00000000..0bb2427f --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/file.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/folder.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/folder.png Binary files differnew file mode 100755 index 00000000..a2d79f8d --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/folder.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/function_folder.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/function_folder.png Binary files differnew file mode 100755 index 00000000..8b3d6e3b --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/function_folder.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/next_button.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/next_button.png Binary files differnew file mode 100755 index 00000000..cdbc615d --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/next_button.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/next_button_disabled.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/next_button_disabled.png Binary files differnew file mode 100755 index 00000000..4a11780f --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/next_button_disabled.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/package.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/package.png Binary files differnew file mode 100755 index 00000000..b04cf566 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/package.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/package_folder.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/package_folder.png Binary files differnew file mode 100755 index 00000000..6162bafd --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/package_folder.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/previous_button.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/previous_button.png Binary files differnew file mode 100755 index 00000000..327fdbc2 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/previous_button.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/previous_button_disabled.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/previous_button_disabled.png Binary files differnew file mode 100755 index 00000000..c02ff64b --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/previous_button_disabled.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/private_class_logo.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/private_class_logo.png Binary files differnew file mode 100644 index 00000000..590e0064 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/private_class_logo.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/tutorial.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/tutorial.png Binary files differnew file mode 100755 index 00000000..bc197375 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/tutorial.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/tutorial_folder.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/tutorial_folder.png Binary files differnew file mode 100755 index 00000000..2a468b2a --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/tutorial_folder.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/up_button.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/up_button.png Binary files differnew file mode 100755 index 00000000..ff36c593 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/up_button.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/stylesheet.css b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/stylesheet.css new file mode 100755 index 00000000..96729b65 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/stylesheet.css @@ -0,0 +1,146 @@ +a { color: #000090; text-decoration: none; } +a:hover, a:active, a:focus { color: highlighttext; background-color: highlight; text-decoration: none; } + +body { background: #FFFFFF; } +body, table { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10pt; } + +a img { border: 0px; } + +/* Page layout/boxes */ + +.info-box { } +.info-box-title { margin: 1em 0em 0em 0em; font-weight: normal; font-size: 14pt; color: #999999; border-bottom: 2px solid #999999; } +.info-box-body { border: 1px solid #999999; padding: .5em; } +.nav-bar { font-size: 8pt; white-space: nowrap; text-align: right; padding: .2em; margin: 0em 0em 1em 0em; } + +.oddrow { background-color: #F8F8F8; border: 1px solid #AAAAAA; padding: .5em; margin-bottom: 1em} +.evenrow { border: 1px solid #AAAAAA; padding: .5em; margin-bottom: 1em} + +.page-body { max-width: 800px; margin: auto; } +.tree { white-space: nowrap; font: icon } +.tree dd { margin-left: 19px } +.tree dl { margin: 0px } +.tree-icon { vertical-align: middle; border: 0px; margin-right: 3px } + +/* Index formatting classes */ + +.index-item-body { margin-top: .5em; margin-bottom: .5em} +.index-item-description { margin-top: .25em } +.index-item-details { font-weight: normal; font-style: italic; font-size: 8pt } +.index-letter-section { background-color: #EEEEEE; border: 1px dotted #999999; padding: .5em; margin-bottom: 1em} +.index-letter-title { font-size: 12pt; font-weight: bold } +.index-letter-menu { text-align: center; margin: 1em } +.index-letter { font-size: 12pt } + +/* Docbook classes */ + +.description {} +.short-description { font-weight: bold; color: #666666; } +.tags { padding-left: 0em; margin-left: 3em; color: #666666; list-style-type: square; } +.parameters { padding-left: 0em; margin-left: 3em; color: #014fbe; list-style-type: square; } +.redefinitions { font-size: 8pt; padding-left: 0em; margin-left: 2em; } +.package { font-weight: bold; } +.package-title { font-weight: bold; font-size: 14pt; border-bottom: 1px solid black } +.package-details { font-size: 85%; } +.sub-package { font-weight: bold; } +.tutorial { border-width: thin; border-color: #0066ff; } +.tutorial-nav-box { width: 100%; border: 1px solid #999999; background-color: #F8F8F8; } +.folder-title { font-style: italic; font-family: Verdana, Arial, Helvetica, sans-serif } + +/* Generic formatting */ + +.field { font-weight: bold; } +.detail { font-size: 8pt; } +.notes { font-style: italic; font-size: 8pt; } +.separator { background-color: #999999; height: 2px; } +.warning { color: #FF6600; } +.disabled { font-style: italic; color: #999999; } + +/* Code elements */ + +.line-number { } + +.class-table { width: 100%; } +.class-table-header { border-bottom: 1px dotted #666666; text-align: left} +.class-name { color: #0000AA; font-weight: bold; } + +.method-summary { color: #009000; padding-left: 1em; font-size: 8pt; } +.method-header { } +.method-definition { margin-bottom: .2em } +.method-title { color: #009000; font-weight: bold; } +.method-name { font-weight: bold; } +.method-signature { font-size: 85%; color: #666666; margin: .5em 0em } +.method-result { font-style: italic; } + +.var-summary { padding-left: 1em; font-size: 8pt; } +.var-header { } +.var-title { color: #014fbe; margin-bottom: .3em } +.var-type { font-style: italic; } +.var-name { font-weight: bold; } +.var-default {} +.var-description { font-weight: normal; color: #000000; } + +.include-title { color: #014fbe;} +.include-type { font-style: italic; } +.include-name { font-weight: bold; } + +.const-title { color: #FF6600; } +.const-name { font-weight: bold; } + +/* Syntax highlighting */ + +.src-code { font-family: 'Courier New', Courier, monospace; font-weight: normal; } +.src-line { font-family: 'Courier New', Courier, monospace; font-weight: normal; } + +.src-code a:link { padding: 1px; text-decoration: underline; color: #0000DD; } +.src-code a:visited { text-decoration: underline; color: #0000DD; } +.src-code a:active { background-color: #FFFF66; color: #008000; } +.src-code a:hover { background-color: #FFFF66; text-decoration: overline underline; color: #008000; } + +.src-comm { color: #666666; } +.src-id { color: #FF6600; font-style: italic; } +.src-inc { color: #0000AA; font-weight: bold; } +.src-key { color: #0000AA; font-weight: bold; } +.src-num { color: #CC0000; } +.src-str { color: #CC0000; } +.src-sym { } +.src-var { } + +.src-php { font-weight: bold; } + +.src-doc { color: #666666; } +.src-doc-close-template { color: #666666 } +.src-doc-coretag { color: #008000; } +.src-doc-inlinetag {} +.src-doc-internal {} +.src-doc-tag { color: #0080CC; } +.src-doc-template { color: #666666 } +.src-doc-type { font-style: italic; color: #444444 } +.src-doc-var { color: #444444 } + +.tute-tag { color: #009999 } +.tute-attribute-name { color: #0000FF } +.tute-attribute-value { color: #0099FF } +.tute-entity { font-weight: bold; } +.tute-comment { font-style: italic } +.tute-inline-tag { color: #636311; font-weight: bold } + +/* tutorial */ + +.authors { } +.author { font-style: italic; font-weight: bold } +.author-blurb { margin: .5em 0em .5em 2em; font-size: 85%; font-weight: normal; font-style: normal } +.example { border: 1px dashed #999999; background-color: #EEEEEE; padding: .5em; } +*[class="example"] { line-height : 1.0em; } +.listing { border: 1px dashed #999999; background-color: #EEEEEE; padding: .5em; white-space: nowrap; } +*[class="listing"] { line-height : 1.0em; } +.release-info { font-size: 85%; font-style: italic; margin: 1em 0em } +.ref-title-box { } +.ref-title { } +.ref-purpose { font-style: italic; color: #666666 } +.ref-synopsis { } +.title { font-weight: bold; border-bottom: 1px solid #999999; color: #999999; } +.cmd-synopsis { margin: 1em 0em } +.cmd-title { font-weight: bold } +.toc { margin-left: 2em; padding-left: 0em } + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/method.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/method.tpl new file mode 100755 index 00000000..413cc5ea --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/method.tpl @@ -0,0 +1,151 @@ +<A NAME='method_detail'></A> +{section name=methods loop=$methods} +{if $methods[methods].static} +<a name="method{$methods[methods].function_name}" id="{$methods[methods].function_name}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div class="method-header"> + <img src="{$subdir}media/images/StaticMethod.png" /> + <span class="method-title">static {$methods[methods].function_name}</span> (line <span class="line-number">{if $methods[methods].slink}{$methods[methods].slink}{else}{$methods[methods].line_number}{/if}</span>) + </div> + + {include file="docblock.tpl" sdesc=$methods[methods].sdesc desc=$methods[methods].desc tags=$methods[methods].tags params=$methods[methods].params function=false} + + <div class="method-signature"> + <span class="method-result">{$methods[methods].function_return}</span> + <span class="method-name"> + {if $methods[methods].ifunction_call.returnsref}&{/if}{$methods[methods].function_name} + </span> + {if count($methods[methods].ifunction_call.params)} + ({section name=params loop=$methods[methods].ifunction_call.params}{if $smarty.section.params.iteration != 1}, {/if}{if $methods[methods].ifunction_call.params[params].hasdefault}[{/if}<span class="var-type">{$methods[methods].ifunction_call.params[params].type}</span> <span class="var-name">{$methods[methods].ifunction_call.params[params].name}</span>{if $methods[methods].ifunction_call.params[params].hasdefault} = <span class="var-default">{$methods[methods].ifunction_call.params[params].default}</span>]{/if}{/section}) + {else} + () + {/if} + </div> + + {if $methods[methods].params} + <ul class="parameters"> + {section name=params loop=$methods[methods].params} + <li> + <span class="var-type">{$methods[methods].params[params].datatype}</span> + <span class="var-name">{$methods[methods].params[params].var}</span>{if $methods[methods].params[params].data}<span class="var-description">: {$methods[methods].params[params].data}</span>{/if} + </li> + {/section} + </ul> + {/if} + + {if $methods[methods].method_overrides} + <hr class="separator" /> + <div class="notes">Redefinition of:</div> + <dl> + <dt>{$methods[methods].method_overrides.link}</dt> + {if $methods[methods].method_overrides.sdesc} + <dd>{$methods[methods].method_overrides.sdesc}</dd> + {/if} + </dl> + {/if} + {if $methods[methods].method_implements} + <hr class="separator" /> + <div class="notes">Implementation of:</div> + {section name=imp loop=$methods[methods].method_implements} + <dl> + <dt>{$methods[methods].method_implements[imp].link}</dt> + {if $methods[methods].method_implements[imp].sdesc} + <dd>{$methods[methods].method_implements[imp].sdesc}</dd> + {/if} + </dl> + {/section} + {/if} + + {if $methods[methods].descmethod} + <hr class="separator" /> + <div class="notes">Redefined in descendants as:</div> + <ul class="redefinitions"> + {section name=dm loop=$methods[methods].descmethod} + <li> + {$methods[methods].descmethod[dm].link} + {if $methods[methods].descmethod[dm].sdesc} + : {$methods[methods].descmethod[dm].sdesc} + {/if} + </li> + {/section} + </ul> + {/if} +</div> +{/if} +{/section} +{section name=methods loop=$methods} +{if !$methods[methods].static} +<a name="method{$methods[methods].function_name}" id="{$methods[methods].function_name}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div class="method-header"> + <img src="{$subdir}media/images/{if $methods[methods].ifunction_call.constructor}Constructor{elseif $methods[methods].ifunction_call.destructor}Destructor{else}{if $methods[methods].abstract}Abstract{/if}{if $methods[methods].access == 'private'}Private{/if}Method{/if}.png" /> + <span class="method-title">{if $methods[methods].ifunction_call.constructor}Constructor {elseif $methods[methods].ifunction_call.destructor}Destructor {/if}{$methods[methods].function_name}</span> (line <span class="line-number">{if $methods[methods].slink}{$methods[methods].slink}{else}{$methods[methods].line_number}{/if}</span>) + </div> + + {include file="docblock.tpl" sdesc=$methods[methods].sdesc desc=$methods[methods].desc tags=$methods[methods].tags params=$methods[methods].params function=false} + + <div class="method-signature"> + <span class="method-result">{$methods[methods].function_return}</span> + <span class="method-name"> + {if $methods[methods].ifunction_call.returnsref}&{/if}{$methods[methods].function_name} + </span> + {if count($methods[methods].ifunction_call.params)} + ({section name=params loop=$methods[methods].ifunction_call.params}{if $smarty.section.params.iteration != 1}, {/if}{if $methods[methods].ifunction_call.params[params].hasdefault}[{/if}<span class="var-type">{$methods[methods].ifunction_call.params[params].type}</span> <span class="var-name">{$methods[methods].ifunction_call.params[params].name}</span>{if $methods[methods].ifunction_call.params[params].hasdefault} = <span class="var-default">{$methods[methods].ifunction_call.params[params].default}</span>]{/if}{/section}) + {else} + () + {/if} + </div> + + {if $methods[methods].params} + <ul class="parameters"> + {section name=params loop=$methods[methods].params} + <li> + <span class="var-type">{$methods[methods].params[params].datatype}</span> + <span class="var-name">{$methods[methods].params[params].var}</span>{if $methods[methods].params[params].data}<span class="var-description">: {$methods[methods].params[params].data}</span>{/if} + </li> + {/section} + </ul> + {/if} + + {if $methods[methods].method_overrides} + <hr class="separator" /> + <div class="notes">Redefinition of:</div> + <dl> + <dt>{$methods[methods].method_overrides.link}</dt> + {if $methods[methods].method_overrides.sdesc} + <dd>{$methods[methods].method_overrides.sdesc}</dd> + {/if} + </dl> + {/if} + {if $methods[methods].method_implements} + <hr class="separator" /> + <div class="notes">Implementation of:</div> + {section name=imp loop=$methods[methods].method_implements} + <dl> + <dt>{$methods[methods].method_implements[imp].link}</dt> + {if $methods[methods].method_implements[imp].sdesc} + <dd>{$methods[methods].method_implements[imp].sdesc}</dd> + {/if} + </dl> + {/section} + {/if} + + {if $methods[methods].descmethod} + <hr class="separator" /> + <div class="notes">Redefined in descendants as:</div> + <ul class="redefinitions"> + {section name=dm loop=$methods[methods].descmethod} + <li> + {$methods[methods].descmethod[dm].link} + {if $methods[methods].descmethod[dm].sdesc} + : {$methods[methods].descmethod[dm].sdesc} + {/if} + </li> + {/section} + </ul> + {/if} +</div> +{/if} +{/section} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/page.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/page.tpl new file mode 100755 index 00000000..2cffc22d --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/page.tpl @@ -0,0 +1,214 @@ +{include file="header.tpl" top3=true} + +<h2 class="file-name"><img src="{$subdir}media/images/Page_logo.png" alt="File" style="vertical-align: middle">{$source_location}</h2> + +<a name="sec-description"></a> +<div class="info-box"> + <div class="info-box-title">Description</div> + <div class="nav-bar"> + {if $classes || $includes || $defines || $globals || $functions} + <span class="disabled">Description</span> | + {/if} + {if $classes} + <a href="#sec-classes">Classes</a> + {if $includes || $defines || $globals || $functions}|{/if} + {/if} + {if $includes} + <a href="#sec-includes">Includes</a> + {if $defines || $globals || $functions}|{/if} + {/if} + {if $defines} + <a href="#sec-constants">Constants</a> + {if $globals || $functions}|{/if} + {/if} + {if $globals} + <a href="#sec-variables">Variables</a> + {if $functions}|{/if} + {/if} + {if $functions} + <a href="#sec-functions">Functions</a> + {/if} + </div> + <div class="info-box-body"> + {include file="docblock.tpl" desc=$desc sdesc=$sdesc tags=$tags} + + {if $tutorial} + <hr class="separator" /> + <div class="notes">Tutorial: <span class="tutorial">{$tutorial}</div> + {/if} + </div> +</div> + +{if $classes} + <a name="sec-classes"></a> + <div class="info-box"> + <div class="info-box-title">Classes</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + <span class="disabled">Classes</span> + {if $includes || $defines || $globals || $functions}|{/if} + {if $includes} + <a href="#sec-includes">Includes</a> + {if $defines || $globals || $functions}|{/if} + {/if} + {if $defines} + <a href="#sec-constants">Constants</a> + {if $globals || $functions}|{/if} + {/if} + {if $globals} + <a href="#sec-variables">Variables</a> + {if $functions}|{/if} + {/if} + {if $functions} + <a href="#sec-functions">Functions</a> + {/if} + </div> + <div class="info-box-body"> + <table cellpadding="2" cellspacing="0" class="class-table"> + <tr> + <th class="class-table-header">Class</th> + <th class="class-table-header">Description</th> + </tr> + {section name=classes loop=$classes} + <tr> + <td style="padding-right: 2em; vertical-align: top; white-space: nowrap"> + <img src="{$subdir}media/images/{if $classes[classes].abstract}Abstract{/if}{if $classes[classes].access == 'private'}Private{/if}Class.png" + alt="{if $classes[classes].abstract}Abstract{/if}{if $classes[classes].access == 'private'}Private{/if} class" + title="{if $classes[classes].abstract}Abstract{/if}{if $classes[classes].access == 'private'}Private{/if} class"/> + {$classes[classes].link} + </td> + <td> + {if $classes[classes].sdesc} + {$classes[classes].sdesc} + {else} + {$classes[classes].desc} + {/if} + </td> + </tr> + {/section} + </table> + </div> + </div> +{/if} + +{if $includes} + <a name="sec-includes"></a> + <div class="info-box"> + <div class="info-box-title">Includes</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $classes} + <a href="#sec-classes">Classes</a> + {if $includes || $defines || $globals || $functions}|{/if} + {/if} + <span class="disabled">Includes</span> + {if $defines || $globals || $functions}|{/if} + {if $defines} + <a href="#sec-constants">Constants</a> + {if $globals || $functions}|{/if} + {/if} + {if $globals} + <a href="#sec-variables">Variables</a> + {if $functions}|{/if} + {/if} + {if $functions} + <a href="#sec-functions">Functions</a> + {/if} + </div> + <div class="info-box-body"> + {include file="include.tpl"} + </div> + </div> +{/if} + +{if $defines} + <a name="sec-constants"></a> + <div class="info-box"> + <div class="info-box-title">Constants</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $classes} + <a href="#sec-classes">Classes</a> + {if $includes || $defines || $globals || $functions}|{/if} + {/if} + {if $includes} + <a href="#sec-includes">Includes</a> + {if $defines || $globals || $functions}|{/if} + {/if} + <span class="disabled">Constants</span> + {if $globals || $functions}|{/if} + {if $globals} + <a href="#sec-variables">Variables</a> + {if $functions}|{/if} + {/if} + {if $functions} + <a href="#sec-functions">Functions</a> + {/if} + </div> + <div class="info-box-body"> + {include file="define.tpl"} + </div> + </div> +{/if} + +{if $globals} + <a name="sec-variables"></a> + <div class="info-box"> + <div class="info-box-title">Variables</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $classes} + <a href="#sec-classes">Classes</a> + {if $includes || $defines || $globals || $functions}|{/if} + {/if} + {if $includes} + <a href="#sec-includes">Includes</a> + {if $defines || $globals || $functions}|{/if} + {/if} + {if $defines} + <a href="#sec-constants">Constants</a> + {if $globals || $functions}|{/if} + {/if} + <span class="disabled">Variables</span> + {if $functions}|{/if} + {if $functions} + <a href="#sec-functions">Functions</a> + {/if} + </div> + <div class="info-box-body"> + {include file="global.tpl"} + </div> + </div> +{/if} + +{if $functions} + <a name="sec-functions"></a> + <div class="info-box"> + <div class="info-box-title">Functions</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $classes} + <a href="#sec-classes">Classes</a> + {if $includes || $defines || $globals || $functions}|{/if} + {/if} + {if $includes} + <a href="#sec-includes">Includes</a> + {if $defines || $globals || $functions}|{/if} + {/if} + {if $defines} + <a href="#sec-constants">Constants</a> + {if $globals || $functions}|{/if} + {/if} + {if $globals} + <a href="#sec-variables">Variables</a> + {if $functions}|{/if} + {/if} + <span class="disabled">Functions</span> + </div> + <div class="info-box-body"> + {include file="function.tpl"} + </div> + </div> +{/if} + +{include file="footer.tpl" top3=true} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/pkgelementindex.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/pkgelementindex.tpl new file mode 100755 index 00000000..dc283ad0 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/pkgelementindex.tpl @@ -0,0 +1,17 @@ +{include file="header.tpl"} +<a name="top"></a> +<h2>[{$package}] element index</h2> +{if count($packageindex) > 1} + <h3>Package indexes</h3> + <ul> + {section name=p loop=$packageindex} + {if $packageindex[p].title != $package} + <li><a href="elementindex_{$packageindex[p].title}.html">{$packageindex[p].title}</a></li> + {/if} + {/section} + </ul> +{/if} +<a href="elementindex.html">All elements</a> +<br /> +{include file="basicindex.tpl" indexname=elementindex_$package} +{include file="footer.tpl"} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/ric.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/ric.tpl new file mode 100755 index 00000000..ad792475 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/ric.tpl @@ -0,0 +1,6 @@ +{include file="header.tpl"} +<div align="center"><h1>{$name}</h1></div> +<pre> +{$contents|htmlentities} +</pre> +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/todolist.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/todolist.tpl new file mode 100755 index 00000000..f929ccdb --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/todolist.tpl @@ -0,0 +1,14 @@ +{include file="header.tpl" title="Todo List"} +<div align="center"><h1>Todo List</h1></div> +{foreach from=$todos key=todopackage item=todo} +<h2>{$todopackage}</h2> +{section name=todo loop=$todo} +<h3>{$todo[todo].link}</h3> +<ul> +{section name=t loop=$todo[todo].todos} + <li>{$todo[todo].todos[t]}</li> +{/section} +</ul> +{/section} +{/foreach} +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/top_frame.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/top_frame.tpl new file mode 100755 index 00000000..69beb10c --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/top_frame.tpl @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> + <html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <!-- template designed by Marco Von Ballmoos --> + <title>{$title}</title> + <link rel="stylesheet" href="{$subdir}media/stylesheet.css" /> + <link rel="stylesheet" href="{$subdir}media/banner.css" /> + <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/> + </head> + <body> + <div class="banner"> + <div class="banner-title">{$package}</div> + <div class="banner-menu"> + <form> + <table cellpadding="0" cellspacing="0" style="width: 100%"> + <tr> + <td> + {if count($ric) >= 1} + {assign var="last_ric_name" value=""} + {section name=ric loop=$ric} + {if $last_ric_name != ""} | {/if} + <a href="{$ric[ric].file}" target="right">{$ric[ric].name}</a> + {assign var="last_ric_name" value=$ric[ric].name} + {/section} + {/if} + </td> + <td style="width: 2em"> </td> + <td style="text-align: right"> + {if count($packages) > 1} + <span class="field">Packages</span> + <select class="package-selector" onchange="window.parent.left_bottom.location=this[selectedIndex].value"> + {section name=p loop=$packages} + <option value="{$packages[p].link}">{$packages[p].title}</option> + {/section} + </select> + {/if} + </td> + </tr> + </table> + </form> + </div> + </div> + </body> + </html>
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/tutorial.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/tutorial.tpl new file mode 100755 index 00000000..3b9109d1 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/tutorial.tpl @@ -0,0 +1,13 @@ +{include file="header.tpl" title=$title top3=true} + +{if $nav} + {include file="tutorial_nav.tpl" prev=$prev next=$next up=$up prevtitle=$prevtitle nexttitle=$nexttitle uptitle=$uptitle} +{/if} + +{$contents} + +{if $nav} + {include file="tutorial_nav.tpl" prev=$prev next=$next up=$up prevtitle=$prevtitle nexttitle=$nexttitle uptitle=$uptitle} +{/if} + +{include file="footer.tpl" top3=true}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/tutorial_nav.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/tutorial_nav.tpl new file mode 100755 index 00000000..3cd7893d --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/tutorial_nav.tpl @@ -0,0 +1,41 @@ +<table class="tutorial-nav-box"> + <tr> + <td style="width: 30%"> + {if $prev} + <a href="{$prev}"><img src="{$subdir}media/images/previous_button.png" alt="Previous"></a> + {else} + <span class="disabled"><img src="{$subdir}media/images/previous_button_disabled.png" alt="Previous"></span> + {/if} + </td> + <td style="text-align: center"> + {if $up} + <a href="{$up}"><img src="{$subdir}media/images/up_button.png" alt="Up"></a> + {/if} + </td> + <td style="text-align: right; width: 30%"> + {if $next} + <a href="{$next}"><img src="{$subdir}media/images/next_button.png" alt="Next"></a> + {else} + <span class="disabled"><img src="{$subdir}media/images/next_button_disabled.png" alt="Next"></span> + {/if} + </td> + </tr> + <tr> + <td style="width: 30%"> + {if $prevtitle} + <span class="detail">{$prevtitle}</span> + {/if} + </td> + <td style="text-align: center"> + {if $uptitle} + <span class="detail">{$uptitle}</span> + {/if} + </td> + <td style="text-align: right; width: 30%"> + {if $nexttitle} + <span class="detail">{$nexttitle}</span> + {/if} + </td> + </tr> +</table> +
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/tutorial_toc.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/tutorial_toc.tpl new file mode 100755 index 00000000..3482249b --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/tutorial_toc.tpl @@ -0,0 +1,40 @@ +{if count($toc)} +<h1 class="title">Table of Contents</h1> +<ul class="toc"> + {assign var="lastcontext" value='refsect1'} + {section name=toc loop=$toc} + + {if $toc[toc].tagname != $lastcontext} + {if $lastcontext == 'refsect1'} + <ul class="toc"> + <li>{$toc[toc].link}</li> + {else} + {if $lastcontext == 'refsect2'} + {if $toc[toc].tagname == 'refsect1'} + </ul> + <li>{$toc[toc].link}</li> + {/if} + {if $toc[toc].tagname == 'refsect3'} + <ul class="toc"> + <li>{$toc[toc].link}</li> + {/if} + {else} + </ul> + </ul> + <li>{$toc[toc].link}</li> + {/if} + {/if} + {assign var="lastcontext" value=$toc[toc].tagname} + {else} + <li>{$toc[toc].link}</li> + {/if} + {/section} + {if $lastcontext == 'refsect2'} + </ul> + {/if} + {if $lastcontext == 'refsect3'} + </ul> + </ul> + {/if} +</ul> +{/if} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/tutorial_tree.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/tutorial_tree.tpl new file mode 100755 index 00000000..18c8b05a --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/tutorial_tree.tpl @@ -0,0 +1,6 @@ +<div><img class="tree-icon" src="{$subdir}media/images/tutorial.png" alt="Tutorial"><a href="{$main.link}" target="right">{$main.title|strip_tags}</a></div> +{if $haskids} +<div style="margin-left: 19px"> + {$kids} +</div> +{/if} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/var.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/var.tpl new file mode 100755 index 00000000..1da110cc --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/var.tpl @@ -0,0 +1,94 @@ +{section name=vars loop=$vars} +{if $vars[vars].static} +<a name="var{$vars[vars].var_name}" id="{$vars[vars].var_name}"><!-- --></A> +<div class="{cycle values="evenrow,oddrow"}"> + + <div class="var-header"> + <img src="{$subdir}media/images/{if $vars[vars].access == 'private'}PrivateVariable{else}Variable{/if}.png" /> + <span class="var-title"> + static <span class="var-type">{$vars[vars].var_type}</span> + <span class="var-name">{$vars[vars].var_name}</span> + {if $vars[vars].var_default} = <span class="var-default">{$vars[vars].var_default|replace:"\n":"<br />"}</span>{/if} + (line <span class="line-number">{if $vars[vars].slink}{$vars[vars].slink}{else}{$vars[vars].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$vars[vars].sdesc desc=$vars[vars].desc tags=$vars[vars].tags} + + {if $vars[vars].var_overrides} + <hr class="separator" /> + <div class="notes">Redefinition of:</div> + <dl> + <dt>{$vars[vars].var_overrides.link}</dt> + {if $vars[vars].var_overrides.sdesc} + <dd>{$vars[vars].var_overrides.sdesc}</dd> + {/if} + </dl> + {/if} + + {if $vars[vars].descvar} + <hr class="separator" /> + <div class="notes">Redefined in descendants as:</div> + <ul class="redefinitions"> + {section name=vm loop=$vars[vars].descvar} + <li> + {$vars[vars].descvar[vm].link} + {if $vars[vars].descvar[vm].sdesc} + : {$vars[vars].descvar[vm].sdesc} + {/if} + </li> + {/section} + </ul> + {/if} + +</div> +{/if} +{/section} + +{section name=vars loop=$vars} +{if !$vars[vars].static} +<a name="var{$vars[vars].var_name}" id="{$vars[vars].var_name}"><!-- --></A> +<div class="{cycle values="evenrow,oddrow"}"> + + <div class="var-header"> + <img src="{$subdir}media/images/{if $vars[vars].access == 'private'}PrivateVariable{else}Variable{/if}.png" /> + <span class="var-title"> + <span class="var-type">{$vars[vars].var_type}</span> + <span class="var-name">{$vars[vars].var_name}</span> + {if $vars[vars].var_default} = <span class="var-default">{$vars[vars].var_default|replace:"\n":"<br />"}</span>{/if} + (line <span class="line-number">{if $vars[vars].slink}{$vars[vars].slink}{else}{$vars[vars].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$vars[vars].sdesc desc=$vars[vars].desc tags=$vars[vars].tags} + + {if $vars[vars].var_overrides} + <hr class="separator" /> + <div class="notes">Redefinition of:</div> + <dl> + <dt>{$vars[vars].var_overrides.link}</dt> + {if $vars[vars].var_overrides.sdesc} + <dd>{$vars[vars].var_overrides.sdesc}</dd> + {/if} + </dl> + {/if} + + {if $vars[vars].descvar} + <hr class="separator" /> + <div class="notes">Redefined in descendants as:</div> + <ul class="redefinitions"> + {section name=vm loop=$vars[vars].descvar} + <li> + {$vars[vars].descvar[vm].link} + {if $vars[vars].descvar[vm].sdesc} + : {$vars[vars].descvar[vm].sdesc} + {/if} + </li> + {/section} + </ul> + {/if} + +</div> +{/if} +{/section} + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/options.ini b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/options.ini new file mode 100755 index 00000000..fc1211f8 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/options.ini @@ -0,0 +1,576 @@ +preservedocbooktags = false + +;; used to highlight the {@source} inline tag, @filesource tag, and @example tag +[highlightSourceTokens] +;; format: +;; T_CONSTANTNAME = open +;; /T_CONSTANTNAME = close + +T_INCLUDE = <span class="src-inc"> +/T_INCLUDE = </span> +T_INCLUDE_ONCE = <span class="src-inc"> +/T_INCLUDE_ONCE = </span> +T_REQUIRE_ONCE = <span class="src-inc"> +/T_REQUIRE_ONCE = </span> +T_REQUIRE_ONCE = <span class="src-inc"> +/T_REQUIRE_ONCE = </span> + +T_CONSTANT_ENCAPSED_STRING = <span class="src-str"> +/T_CONSTANT_ENCAPSED_STRING = </span> +T_STRING_VARNAME = <span class="src-str"> +/T_STRING_VARNAME = </span> + +T_STRING = <span class="src-id"> +/T_STRING = </span> + +T_DNUMBER = <span class="src-num"> +/T_DNUMBER = </span> +T_LNUMBER = <span class="src-num"> +/T_LNUMBER = </span> + +T_VARIABLE = <span class="src-var"> +/T_VARIABLE = </span> + +T_COMMENT = <span class="src-comm"> +/T_COMMENT = </span> +T_ML_COMMENT = <span class="src-comm"> +/T_ML_COMMENT = </span> + +T_OBJECT_OPERATOR = <span class="src-sym"> +/T_OBJECT_OPERATOR = </span> + +T_ABSTRACT = <span class="src-key"> +/T_ABSTRACT = </span> +T_CLONE = <span class="src-key"> +/T_CLONE = </span> +T_HALT_COMPILER = <span class="src-key"> +/T_HALT_COMPILER = </span> +T_ARRAY = <span class="src-key"> +/T_ARRAY = </span> +T_AS = <span class="src-key"> +/T_AS = </span> +T_BREAK = <span class="src-key"> +/T_BREAK = </span> +T_CLASS = <span class="src-key"> +/T_CLASS = </span> +T_CASE = <span class="src-key"> +/T_CASE = </span> +T_CONST = <span class="src-key"> +/T_CONST = </span> +T_CONTINUE = <span class="src-key"> +/T_CONTINUE = </span> +T_DECLARE = <span class="src-key"> +/T_DECLARE = </span> +T_DEFAULT = <span class="src-key"> +/T_DEFAULT = </span> +T_ELSE = <span class="src-key"> +/T_ELSE = </span> +T_ELSEIF = <span class="src-key"> +/T_ELSEIF = </span> +T_EMPTY = <span class="src-key"> +/T_EMPTY = </span> +T_ENDDECLARE = <span class="src-key"> +/T_ENDDECLARE = </span> +T_ENDFOR = <span class="src-key"> +/T_ENDFOR = </span> +T_ENDSWITCH = <span class="src-key"> +/T_ENDSWITCH = </span> +T_ENDFOREACH = <span class="src-key"> +/T_ENDFOREACH = </span> +T_ENDIF = <span class="src-key"> +/T_ENDIF = </span> +T_ENDWHILE = <span class="src-key"> +/T_ENDWHILE = </span> +T_EXIT = <span class="src-key"> +/T_EXIT = </span> +T_EXTENDS = <span class="src-key"> +/T_EXTENDS = </span> +T_FINAL = <span class="src-key"> +/T_FINAL = </span> +T_FOR = <span class="src-key"> +/T_FOR = </span> +T_FOREACH = <span class="src-key"> +/T_FOREACH = </span> +T_FUNCTION = <span class="src-key"> +/T_FUNCTION = </span> +T_GLOBAL = <span class="src-key"> +/T_GLOBAL = </span> +T_IF = <span class="src-key"> +/T_IF = </span> +T_IMPLEMENTS = <span class="src-key"> +/T_IMPLEMENTS = </span> +T_INTERFACE = <span class="src-key"> +/T_INTERFACE = </span> +T_LOGICAL_AND = <span class="src-key"> +/T_LOGICAL_AND = </span> +T_LOGICAL_OR = <span class="src-key"> +/T_LOGICAL_OR = </span> +T_LOGICAL_XOR = <span class="src-key"> +/T_LOGICAL_XOR = </span> +T_NEW = <span class="src-key"> +/T_NEW = </span> +T_PRIVATE = <span class="src-key"> +/T_PRIVATE = </span> +T_PROTECTED = <span class="src-key"> +/T_PROTECTED = </span> +T_PUBLIC = <span class="src-key"> +/T_PUBLIC = </span> +T_RETURN = <span class="src-key"> +/T_RETURN = </span> +T_STATIC = <span class="src-key"> +/T_STATIC = </span> +T_SWITCH = <span class="src-key"> +/T_SWITCH = </span> +T_VAR = <span class="src-key"> +/T_VAR = </span> +T_WHILE = <span class="src-key"> +/T_WHILE = </span> + +T_DOUBLE_COLON = <span class="src-sym"> +/T_DOUBLE_COLON = </span> + +T_OPEN_TAG = <span class="src-php"> +/T_OPEN_TAG = </span> +T_OPEN_TAG_WITH_ECHO = <span class="src-php"> +/T_OPEN_TAG_WITH_ECHO = </span> +T_CLOSE_TAG = <span class="src-php"> +/T_CLOSE_TAG = </span> + + +[highlightSource] +;; this is for highlighting things that aren't tokens like "&" +;; format: +;; word = open +;; /word = close +@ = <span class="src-sym"> +/@ = </span> +& = <span class="src-sym"> +/& = </span> +[ = <span class="src-sym"> +/[ = </span> +] = <span class="src-sym"> +/] = </span> +! = <span class="src-sym"> +/! = </span> +";" = <span class="src-sym"> +/; = </span> +( = <span class="src-sym"> +/( = </span> +) = <span class="src-sym"> +/) = </span> +, = <span class="src-sym"> +/, = </span> +{ = <span class="src-sym"> +/{ = </span> +} = <span class="src-sym"> +/} = </span> +""" = <span class="src-str"> +/" = </span> + +[highlightDocBlockSourceTokens] +;; this is for docblock tokens, using by phpDocumentor_HighlightParser +;; tagphptype is for "string" in @param string description, for example +docblock = <span class="src-doc"> +/docblock = </span> +tagphptype = <span class="src-doc-type"> +/tagphptype = </span> +tagvarname = <span class="src-doc-var"> +/tagvarname = </span> +coretag = <span class="src-doc-coretag"> +/coretag = </span> +tag = <span class="src-doc-tag"> +/tag = </span> +inlinetag = <span class="src-doc-inlinetag"> +/inlinetag = </span> +internal = <span class="src-doc-internal"> +/internal = </span> +closetemplate = <span class="src-doc-close-template"> +/closetemplate = </span> +docblocktemplate = <span class="src-doc-template"> +/docblocktemplate = </span> + +[highlightTutorialSourceTokens] +;; this is for XML DocBook-based tutorials, highlighted by phpDocumentor_TutorialHighlightParser +;; <tag> +opentag = <span class="tute-tag"> +/opentag = </span> +;; </tag> +closetag = <span class="tute-tag"> +/closetag = </span> +;; <tag attribute="value"> +attribute = <span class="tute-attribute-name"> +/attribute = </span> +;; <tag attribute="value"> +attributevalue = <span class="tute-attribute-value"> +/attributevalue = </span> +;; &entity; +entity = <span class="tute-entity"> +/entity = </span> +;; <!-- comment --> +comment = <span class="tute-comment"> +/comment = </span> +;; {@inline tag} +itag = <span class="tute-inline-tag"> +/itag = </span> + +;; used for translation of html in DocBlocks +[desctranslate] +ul = <ul> +/ul = </ul> +ol = <ol> +/ol = </ol> +li = <li> +/li = </li> +code = +/code = +var = <var> +/var = </var> +samp = <samp> +/samp = </samp> +kbd = <kbd> +/kbd = </kbd> +pre = <pre> +/pre = </pre> +p = <p> +/p = </p> +b = <strong> +/b = </strong> +i = <em> +/i = </em> +br = <br /> + +[ppage] +;; this is the DocBook package page translation section. All DocBook tags +;; that have a corresponding html tag must be listed here. Entities should +;; also be listed here +;; +;; examples: +;; 1) +;; tagname = newtagname +;; +;; This is the simplest case, where all attributes will be added into the +;; starting tag and the ending tag will be html/xml style </tranlatedtagname> +;; <tagname></tagname> becomes <newtagname></newtagname> and +;; <tagname attr="value"></tagname> becomes +;; <newtagname attr="value"></newtagname> +;; +;; 2) +;; tagname = newtagname +;; tagname->attr = newattrname +;; +;; in this case, everything will be like the first case, except tags like: +;; <tagname attr="value"></tagname> will become +;; <newtagname newattrname="value"></newtagname> +;; +;; 3) +;; tagname = newtagname +;; tagname->attr = newattrname +;; tagname->attr+value = newvalue +;; +;; in this case, the value is also translated to another. This can be useful +;; for instances such as focus="middle" changing to align="center" or something +;; of that nature. +;; <tagname attr="value"></tagname> will become +;; <newtagname newattrname="newvalue"></newtagname> +;; +;; 4) +;; tagname = newtagname +;; tagname->attr1 = newattrname +;; tagname->attr2 = newattrname +;; tagname->attr1+value|attr2+value = newvalue +;; +;; in this case, two attributes combine to make one new attribute, and the combined +;; value is translated into a new value +;; <tagname attr1="value1" attr2="value2"></tagname> will become +;; <newtagname newattrname="newvalue"></newtagname> +;; +;; 5) +;; tagname = newtagname +;; tagname!attr = dummy +;; +;; here, the attribute will be ignored. dummy is not used and may be any value +;; <tagname attr="value"></tagname> will become +;; <newtagname></newtagname> +;; +;; 6) +;; tagname = newtagname +;; tagname! = dummy +;; +;; here, all attributes will be ignored. dummy is not used and may be any value +;; <tagname attr1="value" attr2="foo"></tagname> will become +;; <newtagname></newtagname> +;; +;; 7) +;; tagname = newtagname +;; tagname/ = 1 +;; +;; here, the tag will be translated as a single tag with no closing tag, and all +;; attributes +;; <tagname attr="val">{text text}</tagname> will become +;; <newtagname attr="val" /> +;; +;; 8) +;; tagname = <starttaginfo /> +;; /tagname = closetagtext +;; +;; in this case, the text <starttaginfo> will be inserted exactly as entered for +;; <tagname> and closetagtext for </tagname> +;; <tagname attr="val"></tagname> will become +;; <starttaginfo />closetagtext +;; +;; 9) +;; $attr$my_attribute = newattrname +;; +;; tagname = newtagname +;; +;; in this case, all occurences of my_attribute in any tag will be changed to +;; newattrname. This is useful for changing things like role="php" to +;; class="php," for example. Note that the text "$attr$" MUST be on the line +;; start for phpDocumentor to recognize it. +;; +;; 10) +;; &entity; = translation text +;; " = " +;; " = """ +;; < = < +;; +;; Use this to control translation of entities to their appropriate values + + = +" = " +” = ” +“ = “ +& = & +< = < +> = > +© = © + +$attr$role = class + +abbrev = abbr + +blockquote = blockquote + +arg = span +arg->choice = class + +author = <span class="author"> +/author = </span> +author! = 0 + +authorblurb = <div class="author-blurb"> +/authorblurb = </div> + +authorgroup = <div class="authors"><h2 class="title">Authors</h2> +/authorgroup = </div> +authorgroup! = 0 + +caution = <span class="warning"> +/caution = </span> +caution! = 0 + +cmdsynopsis = <div class="cmd-synopsis"> +/cmdsynopsis = </div> + +command = <span class="cmd-title"> +/command = </span> + +copyright = <div class="notes"> +/copyright = </div> + +emphasis = em + +example = <div class="src-code"> +/example = </div> +example! = 0 + +function = +/function = () + +formalpara = p + +graphic = img +graphic->fileref = src +graphic/ = + +important = strong + +informalequation = blockquote + +informalexample = div + +inlineequation = em + +itemizedlist = ul + +listitem = li + +literal = code + +literallayout = span + +option = " " +/option = + +orderedlist = ol + +para = p + +programlisting = <div class="src-code"> +/programlisting = </div> +programlisting! = 0 + +refentry = div + +refnamediv = <div class="ref-title-box"> +/refnamediv = </div> +refnamediv! = 0 + +refname = <h1 class="ref-title"> +/refname = </h1> + +refpurpose = <h2 class="ref-purpose"> +/refpurpose = </h2> + +refsynopsisdiv = <div class="ref-synopsis"> +/refsynopsisdiv = </div> +refsynopsisdiv! = 0 + +refsect1 = span + +refsect2 = span + +refsect3 = +/refsect3 = <br /> + +releaseinfo = <div class="release-info">( +/releaseinfo = )</div> + +simpara = +/simpara = <br /> +simpara! = 0 + +subscript = sub + +superscript = super + +table = table + +table->colsep = rules +table->rowsep = rules +table->colsep+1|rowsep+1 =all +table->colsep+1|rowsep+0 =cols +table->colsep+0|rowsep+1 =rows + +table->frame =frame +table->frame+all =border +table->frame+none =void +table->frame+sides =vsides +table->frame+top =above +table->frame+topbot =hsides + +thead = thead + +tfoot = tfoot + +tbody = tbody + +colspec = col + +tgroup = colgroup +tgroup/ = 1 +tgroup->cols = span + +row = tr + +entry = td +entry->morerows = colspan +entry->morerows+1 =2 +entry->morerows+2 =3 +entry->morerows+3 =4 +entry->morerows+4 =5 +entry->morerows+5 =6 +entry->morerows+6 =7 +entry->morerows+7 =8 +entry->morerows+8 =9 +entry->morerows+9 =10 +entry->morerows+10 =11 +;; add more if you need more colspans + +warning = <span class="warning"> +/warning = </span> +warning! = 0 + +;; now begins the attributes that should be tags in cdata +[$attr$id] +open = a +;close = /a +cdata! = true +quotevalues = true +separator = "=" +;separateall = true +$id = name + +;; now begins the sections that deal with <title> +[refsynopsisdiv_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h1 class="title"> +close = </h1> + +[refsect1_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h2 class="title"> +close = </h2> + +[refsect2_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h3 class="title"> +close = </h3> + +[refsect3_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h4 class="title"> +close = </h4> + +[para_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <div class="title"> +close = </div> + +[formalpara_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <div class="title"> +close = </div> + +[example_title] +;tag_attr = true +;attr_name = title +;cdata_start = true +cdata_end = true +open = </td></tr><tr><td><strong> +close = </strong> + +[table_title] +;tag_attr = true +;attr_name = true +cdata_start = true +open = <caption> +close = </caption> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/basicindex.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/basicindex.tpl new file mode 100755 index 00000000..951ee264 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/basicindex.tpl @@ -0,0 +1,47 @@ +<div class="index-letter-menu"> +{section name=letter loop=$letters} + <a class="index-letter" href="{$indexname}.html#{$letters[letter].letter}">{$letters[letter].letter}</a> +{/section} +</div> + +{section name=index loop=$index} + <a name="{$index[index].letter}"></a> + <div class="index-letter-section"> + <div style="float: left" class="index-letter-title">{$index[index].letter}</div> + <div style="float: right"><a href="#top">top</a></div> + <div style="clear: both"></div> + </div> + <dl> + {section name=contents loop=$index[index].index} + <dt class="field"> + {if ($index[index].index[contents].title == "Variable")} + <span class="var-title">{$index[index].index[contents].name}</span> + {elseif ($index[index].index[contents].title == "Global")} + <span class="var-title">{$index[index].index[contents].name}</span> + {elseif ($index[index].index[contents].title == "Method")} + <span class="method-title">{$index[index].index[contents].name}</span> + {elseif ($index[index].index[contents].title == "Function")} + <span class="method-title">{$index[index].index[contents].name}</span> + {elseif ($index[index].index[contents].title == "Constant")} + <span class="const-title">{$index[index].index[contents].name}</span> + {elseif ($index[index].index[contents].title == "Page") || ($index[index].index[contents].title == "Include")} + <span class="include-title">{$index[index].index[contents].name}</span> + {else} + {$index[index].index[contents].name} + {/if} + </dt> + <dd class="index-item-body"> + <div class="index-item-details">{$index[index].index[contents].link} in {$index[index].index[contents].file_name}</div> + {if $index[index].index[contents].description} + <div class="index-item-description">{$index[index].index[contents].description}</div> + {/if} + </dd> + {/section} + </dl> +{/section} + +<div class="index-letter-menu"> +{section name=letter loop=$letters} + <a class="index-letter" href="{$indexname}.html#{$letters[letter].letter}">{$letters[letter].letter}</a> +{/section} +</div> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/blank.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/blank.tpl new file mode 100755 index 00000000..6a05f27e --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/blank.tpl @@ -0,0 +1,13 @@ +<html> +<head> + <title>{$maintitle}</title> + <link rel="stylesheet" href="{$subdir}media/stylesheet.css" /> + <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/> +</head> +<body> +<div align="center"><h1>{$maintitle}</h1></div> +<b>Welcome to {$package}!</b><br /> +<br /> +This documentation was generated by <a href="{$phpdocwebsite}">phpDocumentor v{$phpdocversion}</a><br /> +</body> +</html>
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/class.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/class.tpl new file mode 100755 index 00000000..9ab7c455 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/class.tpl @@ -0,0 +1,429 @@ +{include file="header.tpl" top3=true} + +<h2 class="class-name">{if $is_interface}Interface{else}Class{/if} {$class_name}</h2> + +<a name="sec-description"></a> +<div class="info-box"> + <div class="info-box-title">Description</div> + <div class="nav-bar"> + {if $children || $vars || $ivars || $methods || $imethods || $consts || $iconsts } + <span class="disabled">Description</span> | + {/if} + {if $children} + <a href="#sec-descendents">Descendents</a> + {if $vars || $ivars || $methods || $imethods || $consts || $iconsts}|{/if} + {/if} + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + {if $methods || $imethods}|{/if} + {/if} + {if $methods || $imethods} + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + {if $implements} + <p class="implements"> + Implements interfaces: + <ul> + {foreach item="int" from=$implements}<li>{$int}</li>{/foreach} + </ul> + </p> + {/if} + {include file="docblock.tpl" type="class" sdesc=$sdesc desc=$desc} + <p class="notes"> + Located in <a class="field" href="{$page_link}">{$source_location}</a> (line <span class="field">{if $class_slink}{$class_slink}{else}{$line_number}{/if}</span>) + </p> + + {if $tutorial} + <hr class="separator" /> + <div class="notes">Tutorial: <span class="tutorial">{$tutorial}</span></div> + {/if} + + <pre>{section name=tree loop=$class_tree.classes}{$class_tree.classes[tree]}{$class_tree.distance[tree]}{/section}</pre> + + {if $conflicts.conflict_type} + <hr class="separator" /> + <div><span class="warning">Conflicts with classes:</span><br /> + {section name=me loop=$conflicts.conflicts} + {$conflicts.conflicts[me]}<br /> + {/section} + </div> + {/if} + </div> +</div> + +{if $children} + <a name="sec-descendents"></a> + <div class="info-box"> + <div class="info-box-title">Direct descendents</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + <span class="disabled">Descendents</span> + {if $vars || $ivars || $methods || $imethods}|{/if} + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + {if $methods || $imethods}|{/if} + {/if} + {if $methods || $imethods} + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + <table cellpadding="2" cellspacing="0" class="class-table"> + <tr> + <th class="class-table-header">Class</th> + <th class="class-table-header">Description</th> + </tr> + {section name=kids loop=$children} + <tr> + <td style="padding-right: 2em">{$children[kids].link}</td> + <td> + {if $children[kids].sdesc} + {$children[kids].sdesc} + {else} + {$children[kids].desc} + {/if} + </td> + </tr> + {/section} + </table> + </div> + </div> +{/if} + +{if $consts} + <a name="sec-const-summary"></a> + <div class="info-box"> + <div class="info-box-title">Class Constant Summary</span></div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendants</a> | + {/if} + <span class="disabled">Constants</span> (<a href="#sec-consts">details</a>) + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + | + {/if} + {if $methods || $imethods} + | + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + <div class="const-summary"> + {section name=consts loop=$consts} + <div class="const-title"> + <img src="{$subdir}media/images/Constant.png" alt=" " /> + <a href="#{$consts[consts].const_name}" title="details" class="const-name">{$consts[consts].const_name}</a> = <span class="var-type">{$consts[consts].const_value}</span> + + </div> + {/section} + </div> + </div> + </div> +{/if} + +{if $vars} + <a name="sec-var-summary"></a> + <div class="info-box"> + <div class="info-box-title">Variable Summary</span></div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendents</a> | + {/if} + <span class="disabled">Vars</span> (<a href="#sec-vars">details</a>) + {if $methods || $imethods} + | + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + <div class="var-summary"> + {section name=vars loop=$vars} + {if $vars[vars].static} + <div class="var-title"> + static <span class="var-type">{$vars[vars].var_type}</span> + <a href="#{$vars[vars].var_name}" title="details" class="var-name">{$vars[vars].var_name}</a> + </div> + {/if} + {/section} + {section name=vars loop=$vars} + {if !$vars[vars].static} + <div class="var-title"> + <span class="var-type">{$vars[vars].var_type}</span> + <a href="#{$vars[vars].var_name}" title="details" class="var-name">{$vars[vars].var_name}</a> + </div> + {/if} + {/section} + </div> + </div> + </div> +{/if} + +{if $methods} + <a name="sec-method-summary"></a> + <div class="info-box"> + <div class="info-box-title">Method Summary</span></div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendents</a> | + {/if} + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + | + {/if} + <span class="disabled">Methods</span> (<a href="#sec-methods">details</a>) + </div> + <div class="info-box-body"> + <div class="method-summary"> + {section name=methods loop=$methods} + {if $methods[methods].static} + <div class="method-definition"> + static {if $methods[methods].function_return} + <span class="method-result">{$methods[methods].function_return}</span> + {/if} + <a href="#{$methods[methods].function_name}" title="details" class="method-name">{if $methods[methods].ifunction_call.returnsref}&{/if}{$methods[methods].function_name}</a> + {if count($methods[methods].ifunction_call.params)} + ({section name=params loop=$methods[methods].ifunction_call.params}{if $smarty.section.params.iteration != 1}, {/if}{if $methods[methods].ifunction_call.params[params].hasdefault}[{/if}<span class="var-type">{$methods[methods].ifunction_call.params[params].type}</span> <span class="var-name">{$methods[methods].ifunction_call.params[params].name}</span>{if $methods[methods].ifunction_call.params[params].hasdefault} = <span class="var-default">{$methods[methods].ifunction_call.params[params].default}</span>]{/if}{/section}) + {else} + () + {/if} + </div> + {/if} + {/section} + {section name=methods loop=$methods} + {if !$methods[methods].static} + <div class="method-definition"> + {if $methods[methods].function_return} + <span class="method-result">{$methods[methods].function_return}</span> + {/if} + <a href="#{$methods[methods].function_name}" title="details" class="method-name">{if $methods[methods].ifunction_call.returnsref}&{/if}{$methods[methods].function_name}</a> + {if count($methods[methods].ifunction_call.params)} + ({section name=params loop=$methods[methods].ifunction_call.params}{if $smarty.section.params.iteration != 1}, {/if}{if $methods[methods].ifunction_call.params[params].hasdefault}[{/if}<span class="var-type">{$methods[methods].ifunction_call.params[params].type}</span> <span class="var-name">{$methods[methods].ifunction_call.params[params].name}</span>{if $methods[methods].ifunction_call.params[params].hasdefault} = <span class="var-default">{$methods[methods].ifunction_call.params[params].default}</span>]{/if}{/section}) + {else} + () + {/if} + </div> + {/if} + {/section} + </div> + </div> + </div> +{/if} + +{if $vars || $ivars} + <a name="sec-vars"></a> + <div class="info-box"> + <div class="info-box-title">Variables</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendents</a> | + {/if} + {if $methods} + <a href="#sec-var-summary">Vars</a> (<span class="disabled">details</span>) + {else} + <span class="disabled">Vars</span> + {/if} + + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + {if $methods || $imethods} + | + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + {include file="var.tpl"} + {if $ivars} + <h4>Inherited Variables</h4> + <A NAME='inherited_vars'><!-- --></A> + {section name=ivars loop=$ivars} + <p>Inherited from <span class="classname">{$ivars[ivars].parent_class}</span></p> + <blockquote> + {section name=ivars2 loop=$ivars[ivars].ivars} + <span class="var-title"> + <span class="var-name">{$ivars[ivars].ivars[ivars2].link}</span>{if $ivars[ivars].ivars[ivars2].ivar_sdesc}: {$ivars[ivars].ivars[ivars2].ivar_sdesc}{/if}<br> + </span> + {/section} + </blockquote> + {/section} + {/if} + </div> + </div> +{/if} + +{if $methods || $imethods} + <a name="sec-methods"></a> + <div class="info-box"> + <div class="info-box-title">Methods</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendents</a> | + {/if} + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + {/if} + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + {if $methods} + <a href="#sec-method-summary">Methods</a> (<span class="disabled">details</span>) + {else} + <span class="disabled">Methods</span> + {/if} + </div> + <div class="info-box-body"> + {include file="method.tpl"} + {if $imethods} + <h4>Inherited Methods</h4> + <a name='inherited_methods'><!-- --></a> + {section name=imethods loop=$imethods} + <!-- =========== Summary =========== --> + <p>Inherited From <span class="classname">{$imethods[imethods].parent_class}</span></p> + <blockquote> + {section name=im2 loop=$imethods[imethods].imethods} + <span class="method-name">{$imethods[imethods].imethods[im2].link}</span>{if $imethods[imethods].imethods[im2].ifunction_sdesc}: {$imethods[imethods].imethods[im2].ifunction_sdesc}{/if}<br> + {/section} + </blockquote> + {/section} + {/if} + </div> + </div> +{/if} + +{if $consts || $iconsts} + <a name="sec-consts"></a> + <div class="info-box"> + <div class="info-box-title">Class Constants</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendants</a> | + {/if} + {if $methods} + <a href="#sec-var-summary">Constants</a> (<span class="disabled">details</span>) + {else} + <span class="disabled">Constants</span> + {/if} + + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + {/if} + {if $methods || $imethods} + | + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + {include file="const.tpl"} + {if $iconsts} + <h4>Inherited Constants</h4> + <A NAME='inherited_vars'><!-- --></A> + {section name=iconsts loop=$iconsts} + <p>Inherited from <span class="classname">{$iconsts[iconsts].parent_class}</span></p> + <blockquote> + {section name=iconsts2 loop=$iconsts[iconsts].iconsts} + <img src="{$subdir}media/images/{if $iconsts[iconsts].iconsts[iconsts2].access == 'private'}PrivateVariable{else}Variable{/if}.png" /> + <span class="const-title"> + <span class="const-name">{$iconsts[iconsts].iconsts[iconsts2].link}</span>{if $iconsts[iconsts].iconsts[iconsts2].iconst_sdesc}: {$iconsts[iconsts].iconsts[iconsts2].iconst_sdesc}{/if}<br> + </span> + {/section} + </blockquote> + {/section} + {/if} + </div> + </div> +{/if} + +{include file="footer.tpl" top3=true} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/classtrees.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/classtrees.tpl new file mode 100755 index 00000000..952e6d50 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/classtrees.tpl @@ -0,0 +1,19 @@ +{include file="header.tpl" top1=true} + +<!-- Start of Class Data --> +<H2> + {$smarty.capture.title} +</H2> +{if $interfaces} +{section name=classtrees loop=$interfaces} +<h2>Root interface {$interfaces[classtrees].class}</h2> +{$interfaces[classtrees].class_tree} +{/section} +{/if} +{if $classtrees} +{section name=classtrees loop=$classtrees} +<h2>Root class {$classtrees[classtrees].class}</h2> +{$classtrees[classtrees].class_tree} +{/section} +{/if} +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/const.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/const.tpl new file mode 100644 index 00000000..c26ff92d --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/const.tpl @@ -0,0 +1,18 @@ +{section name=consts loop=$consts} +<a name="const{$consts[consts].const_name}" id="{$consts[consts].const_name}"><!-- --></A> +<div class="{cycle values="evenrow,oddrow"}"> + + <div class="const-header"> + <img src="{$subdir}media/images/{if $consts[consts].access == 'private'}PrivateVariable{else}Variable{/if}.png" /> + <span class="const-title"> + <span class="const-name">{$consts[consts].const_name}</span> + = <span class="const-default">{$consts[consts].const_value|replace:"\n":"<br />"}</span> + (line <span class="line-number">{if $consts[consts].slink}{$consts[consts].slink}{else}{$consts[consts].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$consts[consts].sdesc desc=$consts[consts].desc tags=$consts[consts].tags} + +</div> +{/section} + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/define.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/define.tpl new file mode 100755 index 00000000..0da5d864 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/define.tpl @@ -0,0 +1,24 @@ +{section name=def loop=$defines} +<a name="{$defines[def].define_link}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div> + <span class="const-title"> + <span class="const-name">{$defines[def].define_name}</span> = {$defines[def].define_value|replace:"\n":"<br />"} + (line <span class="line-number">{if $defines[def].slink}{$defines[def].slink}{else}{$defines[def].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$defines[def].sdesc desc=$defines[def].desc tags=$defines[def].tags} + + {if $globals[glob].global_conflicts.conflict_type} + <hr class="separator" /> + <div><span class="warning">Conflicts with constants:</span><br /> + {section name=me loop=$defines[def].define_conflicts.conflicts} + {$defines[def].define_conflicts.conflicts[me]}<br /> + {/section} + </div> + {/if} + +</div> +{/section}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/docblock.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/docblock.tpl new file mode 100755 index 00000000..783d5271 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/docblock.tpl @@ -0,0 +1,14 @@ +<!-- ========== Info from phpDoc block ========= --> +{if $sdesc} +<p class="short-description">{$sdesc}</p> +{/if} +{if $desc} +<p class="description">{$desc}</p> +{/if} +{if $tags} + <ul class="tags"> + {section name=tags loop=$tags} + <li><span class="field">{$tags[tags].keyword}:</span> {$tags[tags].data}</li> + {/section} + </ul> +{/if} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/elementindex.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/elementindex.tpl new file mode 100755 index 00000000..d5964f99 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/elementindex.tpl @@ -0,0 +1,12 @@ +{include file="header.tpl" noleftindex=true} +<a name="top"></a> +<h2>Full index</h2> +<h3>Package indexes</h3> +<ul> +{section name=p loop=$packageindex} + <li><a href="elementindex_{$packageindex[p].title}.html">{$packageindex[p].title}</a></li> +{/section} +</ul> +<br /> +{include file="basicindex.tpl" indexname="elementindex"} +{include file="footer.tpl"} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/errors.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/errors.tpl new file mode 100755 index 00000000..0f526584 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/errors.tpl @@ -0,0 +1,21 @@ +{include file="header.tpl" noleftindex=true} +{section name=files loop=$files} +<a href="#{$files[files].file}">{$files[files].file}</a><br> +{/section} +{foreach key=file item=issues from=$all} +<a name="{$file}"></a> +<h1>{$file}</h1> +{if count($issues.warnings)} +<h2>Warnings:</h2><br> +{section name=warnings loop=$issues.warnings} +<b>{$issues.warnings[warnings].name}</b> - {$issues.warnings[warnings].listing}<br> +{/section} +{/if} +{if count($issues.errors)} +<h2>Errors:</h2><br> +{section name=errors loop=$issues.errors} +<b>{$issues.errors[errors].name}</b> - {$issues.errors[errors].listing}<br> +{/section} +{/if} +{/foreach} +{include file="footer.tpl"} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/examplesource.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/examplesource.tpl new file mode 100755 index 00000000..8abf74ce --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/examplesource.tpl @@ -0,0 +1,6 @@ +{include file="header.tpl" title=$title} +<h1>{$title}</h1> +<div class="listing"> +{$source} +</div> +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/filesource.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/filesource.tpl new file mode 100755 index 00000000..239f7b41 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/filesource.tpl @@ -0,0 +1,8 @@ +{capture name="tutle"}File Source for {$name}{/capture} +{include file="header.tpl" title=$smarty.capture.tutle} +<h1>Source for file {$name}</h1> +<p>Documentation is available at {$docs}</p> +<div class="src-code"> +{$source} +</div> +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/footer.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/footer.tpl new file mode 100755 index 00000000..8d0f79db --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/footer.tpl @@ -0,0 +1,8 @@ +{if !$index} + <p class="notes" id="credit"> + Documentation generated on {$date} by <a href="{$phpdocwebsite}" target="_blank">phpDocumentor {$phpdocversion}</a> + </p> +{/if} + {if $top3}</div>{/if} +</body> +</html> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/function.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/function.tpl new file mode 100755 index 00000000..b6880059 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/function.tpl @@ -0,0 +1,44 @@ +{section name=func loop=$functions} +<a name="{$functions[func].function_dest}" id="{$functions[func].function_dest}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div> + <span class="method-title">{$functions[func].function_name}</span> (line <span class="line-number">{if $functions[func].slink}{$functions[func].slink}{else}{$functions[func].line_number}{/if}</span>) + </div> + + {include file="docblock.tpl" sdesc=$functions[func].sdesc desc=$functions[func].desc tags=$functions[func].tags params=$functions[func].params function=false} + + <div class="method-signature"> + <span class="method-result">{$functions[func].function_return}</span> + <span class="method-name"> + {if $functions[func].ifunction_call.returnsref}&{/if}{$functions[func].function_name} + </span> + {if count($functions[func].ifunction_call.params)} + ({section name=params loop=$functions[func].ifunction_call.params}{if $smarty.section.params.iteration != 1}, {/if}{if $functions[func].ifunction_call.params[params].hasdefault}[{/if}<span class="var-type">{$functions[func].ifunction_call.params[params].type}</span> <span class="var-name">{$functions[func].ifunction_call.params[params].name}</span>{if $functions[func].ifunction_call.params[params].hasdefault} = <span class="var-default">{$functions[func].ifunction_call.params[params].default|escape:"html"}</span>]{/if}{/section}) + {else} + () + {/if} + </div> + + {if $functions[func].params} + <ul class="parameters"> + {section name=params loop=$functions[func].params} + <li> + <span class="var-type">{$functions[func].params[params].datatype}</span> + <span class="var-name">{$functions[func].params[params].var}</span>{if $functions[func].params[params].data}<span class="var-description">: {$functions[func].params[params].data}</span>{/if} + </li> + {/section} + </ul> + {/if} + + {if $functions[func].function_conflicts.conflict_type} + <hr class="separator" /> + <div><span class="warning">Conflicts with functions:</span><br /> + {section name=me loop=$functions[func].function_conflicts.conflicts} + {$functions[func].function_conflicts.conflicts[me]}<br /> + {/section} + </div> + {/if} + +</div> +{/section} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/global.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/global.tpl new file mode 100755 index 00000000..eab7e0b0 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/global.tpl @@ -0,0 +1,26 @@ +{section name=glob loop=$globals} +<a name="{$globals[glob].global_link}" id="{$globals[glob].global_link}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div> + <span class="var-title"> + <span class="var-type">{$globals[glob].global_type}</span> + <span class="var-name">{$globals[glob].global_name}</span> + {if $vars[vars].var_default} = <span class="var-default">{$globals[glob].global_value|replace:"\n":"<br />"}</span>{/if} + (line <span class="line-number">{if $globals[glob].slink}{$globals[glob].slink}{else}{$globals[glob].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$globals[glob].sdesc desc=$globals[glob].desc tags=$globals[glob].tags} + + {if $globals[glob].global_conflicts.conflict_type} + <hr class="separator" /> + <div><span class="warning">Conflicts with global variables:</span><br /> + {section name=me loop=$globals[glob].global_conflicts.conflicts} + {$globals[glob].global_conflicts.conflicts[me]}<br /> + {/section} + </div> + {/if} + +</div> +{/section}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/header.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/header.tpl new file mode 100755 index 00000000..09fc9856 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/header.tpl @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> + <html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <!-- template designed by Marco Von Ballmoos --> + <title>{$title}</title> + <link rel="stylesheet" href="{$subdir}media/stylesheet.css" /> + {if $top2} + <link rel="stylesheet" href="{$subdir}media/banner.css" /> + <style> + body {ldelim} padding: 1em; {rdelim} + </style> + {/if} + <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/> + </head> + <body> + {if $top3}<div class="page-body">{/if} + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/include.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/include.tpl new file mode 100755 index 00000000..c2419e5f --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/include.tpl @@ -0,0 +1,16 @@ +{section name=includes loop=$includes} +<a name="{$includes[includes].include_file}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div> + <span class="include-title"> + <span class="include-type">{$includes[includes].include_name}</span> + (<span class="include-name">{$includes[includes].include_value}</span>) + (line <span class="line-number">{if $includes[includes].slink}{$includes[includes].slink}{else}{$includes[includes].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$includes[includes].sdesc desc=$includes[includes].desc tags=$includes[includes].tags} + +</div> +{/section}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/index.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/index.tpl new file mode 100755 index 00000000..7cd61094 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/index.tpl @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE html + PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//FR" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"> + <html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <!-- Generated by phpDocumentor on {$date} --> + <title>{$title}</title> + <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/> +</head> + +<FRAMESET rows='120,*'> + <FRAME src='packages.html' name='left_top' frameborder="1" bordercolor="#999999"> + <FRAMESET cols='25%,*'> + <FRAME src='{$start}' name='left_bottom' frameborder="1" bordercolor="#999999"> + <FRAME src='{$blank}.html' name='right' frameborder="1" bordercolor="#999999"> + </FRAMESET> + <NOFRAMES> + <H2>Frame Alert</H2> + <P>This document is designed to be viewed using the frames feature. + If you see this message, you are using a non-frame-capable web client.</P> + </NOFRAMES> +</FRAMESET> +</HTML> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/left_frame.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/left_frame.tpl new file mode 100755 index 00000000..eb3f670d --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/left_frame.tpl @@ -0,0 +1,159 @@ +{include file="header.tpl" top2=true} +<div class="package-title">{$package}</div> +<div class="package-details"> + + <dl class="tree"> + + <dt class="folder-title">Description</dt> + <dd> + <a href='{$classtreepage}.html' target='right'>Class trees</a><br /> + <a href='{$elementindex}.html' target='right'>Index of elements</a><br /> + {if $hastodos} + <a href="{$todolink}" target="right">Todo List</a><br /> + {/if} + </dd> + + {section name=p loop=$info} + + {if $info[p].subpackage == ""} + + {if $info[p].tutorials} + <dt class="folder-title">Tutorials/Manuals</dt> + <dd> + {if $info[p].tutorials.pkg} + <dl class="tree"> + <dt class="folder-title">Package-level</dt> + <dd> + {section name=ext loop=$info[p].tutorials.pkg} + {$info[p].tutorials.pkg[ext]} + {/section} + </dd> + </dl> + {/if} + + {if $info[p].tutorials.cls} + <dl class="tree"> + <dt class="folder-title">Class-level</dt> + <dd> + {section name=ext loop=$info[p].tutorials.cls} + {$info[p].tutorials.cls[ext]} + {/section} + </dd> + </dl> + {/if} + + {if $info[p].tutorials.proc} + <dl class="tree"> + <dt class="folder-title">Function-level</dt> + <dd> + {section name=ext loop=$info[p].tutorials.proc} + {$info[p].tutorials.proc[ext]} + {/section} + </dd> + </dl> + {/if} + </dd> + {/if} + {if $info[p].hasinterfaces} + <dt class="folder-title">Interfaces</dt> + {section name=class loop=$info[p].classes} + {if $info[p].classes[class].is_interface} + <dd><a href='{$info[p].classes[class].link}' target='right'>{$info[p].classes[class].title}</a></dd> + {/if} + {/section} + {/if} + {if $info[p].hasclasses} + <dt class="folder-title">Classes</dt> + {section name=class loop=$info[p].classes} + {if $info[p].classes[class].is_class} + <dd><a href='{$info[p].classes[class].link}' target='right'>{$info[p].classes[class].title}</a></dd> + {/if} + {/section} + {/if} + {if $info[p].functions} + <dt class="folder-title">Functions</dt> + {section name=f loop=$info[p].functions} + <dd><a href='{$info[p].functions[f].link}' target='right'>{$info[p].functions[f].title}</a></dd> + {/section} + {/if} + {if $info[p].files} + <dt class="folder-title">Files</dt> + {section name=nonclass loop=$info[p].files} + <dd><a href='{$info[p].files[nonclass].link}' target='right'>{$info[p].files[nonclass].title}</a></dd> + {/section} + {/if} + + {else} + {if $info[p].tutorials} + <dt class="folder-title">Tutorials/Manuals</dt> + <dd> + {if $info[p].tutorials.pkg} + <dl class="tree"> + <dt class="folder-title">Package-level</dt> + <dd> + {section name=ext loop=$info[p].tutorials.pkg} + {$info[p].tutorials.pkg[ext]} + {/section} + </dd> + </dl> + {/if} + + {if $info[p].tutorials.cls} + <dl class="tree"> + <dt class="folder-title">Class-level</dt> + <dd> + {section name=ext loop=$info[p].tutorials.cls} + {$info[p].tutorials.cls[ext]} + {/section} + </dd> + </dl> + {/if} + + {if $info[p].tutorials.proc} + <dl class="tree"> + <dt class="folder-title">Function-level</dt> + <dd> + {section name=ext loop=$info[p].tutorials.proc} + {$info[p].tutorials.proc[ext]} + {/section} + </dd> + </dl> + {/if} + </dd> + {/if} + + <dt class="sub-package">{$info[p].subpackage}</dt> + <dd> + <dl class="tree"> + {if $info[p].subpackagetutorial} + <div><a href="{$info.0.subpackagetutorialnoa}" target="right">{$info.0.subpackagetutorialtitle}</a></div> + {/if} + {if $info[p].classes} + <dt class="folder-title">Classes</dt> + {section name=class loop=$info[p].classes} + <dd><a href='{$info[p].classes[class].link}' target='right'>{$info[p].classes[class].title}</a></dd> + {/section} + {/if} + {if $info[p].functions} + <dt class="folder-title">Functions</dt> + {section name=f loop=$info[p].functions} + <dd><a href='{$info[p].functions[f].link}' target='right'>{$info[p].functions[f].title}</a></dd> + {/section} + {/if} + {if $info[p].files} + <dt class="folder-title">Files</dt> + {section name=nonclass loop=$info[p].files} + <dd><a href='{$info[p].files[nonclass].link}' target='right'>{$info[p].files[nonclass].title}</a></dd> + {/section} + {/if} + </dl> + </dd> + + {/if} + + {/section} + </dl> +</div> +<p class="notes"><a href="{$phpdocwebsite}" target="_blank">phpDocumentor v <span class="field">{$phpdocversion}</span></a></p> +</BODY> +</HTML> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/media/banner.css b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/media/banner.css new file mode 100755 index 00000000..4f7db5da --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/media/banner.css @@ -0,0 +1,32 @@ +body +{ + background: #EEEEEE url(bg_left.png) repeat; + margin: 0px; + padding: 0px; +} + +/* Banner (top bar) classes */ + +.banner { } + +.banner-menu +{ + clear: both; + padding: .5em; + border-top: 2px solid #999999; +} + +.banner-title +{ + text-align: right; + font-size: 20pt; + font-weight: bold; + margin: .2em; +} + +.package-selector +{ + background-color: #EEEEEE; + border: 1px solid black; + color: #0000C0; +} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/media/bg_left.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/media/bg_left.png Binary files differnew file mode 100755 index 00000000..1c331f09 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/media/bg_left.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/media/stylesheet.css b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/media/stylesheet.css new file mode 100755 index 00000000..26a31801 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/media/stylesheet.css @@ -0,0 +1,154 @@ +a +{ + color: #336699; + text-decoration: underline; +} + +a:hover, a:active, a:focus +{ + text-decoration: underline; + color: #6699CC +} + +body { background: #FFFFFF; font-family: "Courier New", Courier, fixed; font-size: 10pt } +table { font-size: 10pt } +p, li { line-height: 140% } +a img { border: 0px; } +dd { margin-left: 0px; padding-left: 1em; } + +/* Page layout/boxes */ + +.info-box {} +.info-box-title { margin: 1em 0em 0em 0em; padding: .25em; font-weight: normal; font-size: 14pt; border: 1px solid #336699; background-color: #EEEEEE } +.info-box-body { border: 1px solid #999999; padding: .5em; } +.nav-bar { font-size: 8pt; white-space: nowrap; text-align: right; padding: .2em; margin: 0em 0em 1em 0em; } + +.oddrow { background-color: #F4F4F4; border: 1px solid #AAAAAA; padding: .5em; margin-bottom: 1em} +.evenrow { border: 1px solid #AAAAAA; padding: .5em; margin-bottom: 1em} + +.page-body { max-width: 800px; margin: auto; } +.menu-body { background: #EEEEEE url(bg_left.css) repeat } +.tree dl { margin: 0px } +.tree a { text-decoration: none } +.tree a:hover, .tree a:active, .tree a:focus { text-decoration: underline } + +/* Index formatting classes */ + +.index-item-body { margin-top: .5em; margin-bottom: .5em} +.index-item-description { margin-top: .25em } +.index-item-details { font-weight: normal; font-style: italic; font-size: 8pt } +.index-letter-section { background-color: #EEEEEE; border: 1px dotted #999999; padding: .5em; margin-bottom: 1em} +.index-letter-title { font-size: 12pt; font-weight: bold } +.index-letter-menu { text-align: center; margin: 1em } +.index-letter { font-size: 12pt } + +/* Docbook classes */ + +.description {} +.short-description { font-weight: bold; color: #666666; } +.tags { padding-left: 0em; margin-left: 3em; color: #666666; list-style-type: square; } +.parameters { padding-left: 0em; margin-left: 3em; font-style: italic; list-style-type: square; } +.redefinitions { font-size: 8pt; padding-left: 0em; margin-left: 2em; } +.package { } +.package-title { font-weight: bold; font-size: 14pt; border-bottom: 1px solid black } +.package-details { font-size: 85%; } +.sub-package { font-weight: bold; font-size: 120% } +.tutorial { border-width: thin; border-color: #0066ff } +.tutorial-nav-box { width: 100%; border: 1px solid #AAAAAA; background: #EEEEEE url(bg_left.png) repeat; } +.nav-button-disabled { color: #AAAAAA; } +.nav-button:active, +.nav-button:focus, +.nav-button:hover { background-color: #CCCCCC; outline: 1px solid #999999; text-decoration: none } +.folder-title { font-style: italic } + +/* Generic formatting */ + +.field { font-weight: bold; } +.detail { font-size: 8pt; } +.notes { font-style: italic; font-size: 8pt; } +.separator { background-color: #999999; height: 2px; } +.warning { color: #CC0000; } +.disabled { font-style: italic; color: #999999; } + +/* Code elements */ + +.line-number { } + +.class-table { width: 100%; } +.class-table-header { border-bottom: 1px dotted #666666; text-align: left; background-color: DDDDFF } +.class-name { color: #000000; font-weight: bold; } + +.method-summary { padding-left: 1em; font-size: 8pt } +.method-header { } +.method-definition { margin-bottom: .3em } +.method-title { font-weight: bold } +.method-name { font-weight: bold; } +.method-signature { font-size: 85%; color: #666666; margin: .5em 0em } +.method-result { font-style: italic; } + +.var-summary { padding-left: 1em; font-size: 8pt; } +.var-header { } +.var-title { margin-bottom: .3em } +.var-type { font-style: italic; border: 1px dashed #336699 } +.var-name { font-weight: bold; } +.var-default { border: 1px dashed #336699 } +.var-description { font-weight: normal; color: #000000; } + +.include-title { } +.include-type { font-style: italic; } +.include-name { font-weight: bold; } + +.const-title { } +.const-name { font-weight: bold; } + +/* Syntax highlighting */ + +.src-code { border: 1px solid #336699; padding: 1em; + font-family: 'Courier New', Courier, monospace; font-weight: normal; } +.src-line { font-family: 'Courier New', Courier, monospace; font-weight: normal; } + +.src-comm { color: green; } +.src-id { } +.src-inc { color: #0000FF; } +.src-key { color: #0000FF; } +.src-num { color: #CC0000; } +.src-str { color: #66cccc; } +.src-sym { font-weight: bold; } +.src-var { } + +.src-php { font-weight: bold; } + +.src-doc { color: #009999 } +.src-doc-close-template { color: #0000FF } +.src-doc-coretag { color: #0099FF; font-weight: bold } +.src-doc-inlinetag { color: #0099FF } +.src-doc-internal { color: #6699cc } +.src-doc-tag { color: #0080CC } +.src-doc-template { color: #0000FF } +.src-doc-type { font-style: italic } +.src-doc-var { font-style: italic } + +.tute-tag { color: #009999 } +.tute-attribute-name { color: #0000FF } +.tute-attribute-value { color: #0099FF } +.tute-entity { font-weight: bold; } +.tute-comment { font-style: italic } +.tute-inline-tag { color: #636311; font-weight: bold } + +/* tutorial */ + +.authors { } +.author { font-style: italic; font-weight: bold } +.author-blurb { margin: .5em 0em .5em 2em; font-size: 85%; font-weight: normal; font-style: normal } +.example { border: 1px solid #336699; background-color: #F4F4F4; padding: .5em; } +.listing { border: 1px solid #336699; background-color: #F4F4F4; padding: .5em; white-space: nowrap; } +.release-info { font-size: 85%; font-style: italic; margin: 1em 0em } +.ref-title-box { } +.ref-title { } +.ref-purpose { font-style: italic; color: #666666 } +.ref-synopsis { } +.title { font-weight: bold; border-bottom: 1px solid #336699; padding: 2px } +.cmd-synopsis { margin: 1em 0em } +.cmd-title { font-weight: bold } +.toc { margin-left: 2em; padding-left: 0em } + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/method.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/method.tpl new file mode 100755 index 00000000..06d57a12 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/method.tpl @@ -0,0 +1,149 @@ +<A NAME='method_detail'></A> +{section name=methods loop=$methods} +{if $methods[methods].static} +<a name="method{$methods[methods].function_name}" id="{$methods[methods].function_name}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div class="method-header"> + <span class="method-title">static {$methods[methods].function_name}</span> (line <span class="line-number">{if $methods[methods].slink}{$methods[methods].slink}{else}{$methods[methods].line_number}{/if}</span>) + </div> + + {include file="docblock.tpl" sdesc=$methods[methods].sdesc desc=$methods[methods].desc tags=$methods[methods].tags params=$methods[methods].params function=false} + + <div class="method-signature"> + static <span class="method-result">{$methods[methods].function_return}</span> + <span class="method-name"> + {if $methods[methods].ifunction_call.returnsref}&{/if}{$methods[methods].function_name} + </span> + {if count($methods[methods].ifunction_call.params)} + ({section name=params loop=$methods[methods].ifunction_call.params}{if $smarty.section.params.iteration != 1}, {/if}{if $methods[methods].ifunction_call.params[params].hasdefault}[{/if}<span class="var-type">{$methods[methods].ifunction_call.params[params].type}</span> <span class="var-name">{$methods[methods].ifunction_call.params[params].name}</span>{if $methods[methods].ifunction_call.params[params].hasdefault} = <span class="var-default">{$methods[methods].ifunction_call.params[params].default}</span>]{/if}{/section}) + {else} + () + {/if} + </div> + + {if $methods[methods].params} + <ul class="parameters"> + {section name=params loop=$methods[methods].params} + <li> + <span class="var-type">{$methods[methods].params[params].datatype}</span> + <span class="var-name">{$methods[methods].params[params].var}</span>{if $methods[methods].params[params].data}<span class="var-description">: {$methods[methods].params[params].data}</span>{/if} + </li> + {/section} + </ul> + {/if} + + {if $methods[methods].method_overrides} + <hr class="separator" /> + <div class="notes">Redefinition of:</div> + <dl> + <dt>{$methods[methods].method_overrides.link}</dt> + {if $methods[methods].method_overrides.sdesc} + <dd>{$methods[methods].method_overrides.sdesc}</dd> + {/if} + </dl> + {/if} + {if $methods[methods].method_implements} + <hr class="separator" /> + <div class="notes">Implementation of:</div> + {section name=imp loop=$methods[methods].method_implements} + <dl> + <dt>{$methods[methods].method_implements[imp].link}</dt> + {if $methods[methods].method_implements[imp].sdesc} + <dd>{$methods[methods].method_implements[imp].sdesc}</dd> + {/if} + </dl> + {/section} + {/if} + + {if $methods[methods].descmethod} + <hr class="separator" /> + <div class="notes">Redefined in descendants as:</div> + <ul class="redefinitions"> + {section name=dm loop=$methods[methods].descmethod} + <li> + {$methods[methods].descmethod[dm].link} + {if $methods[methods].descmethod[dm].sdesc} + : {$methods[methods].descmethod[dm].sdesc} + {/if} + </li> + {/section} + </ul> + {/if} +</div> +{/if} +{/section} +{section name=methods loop=$methods} +{if !$methods[methods].static} +<a name="method{$methods[methods].function_name}" id="{$methods[methods].function_name}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div class="method-header"> + <span class="method-title">{if $methods[methods].ifunction_call.constructor}Constructor {elseif $methods[methods].ifunction_call.destructor}Destructor {/if}{$methods[methods].function_name}</span> (line <span class="line-number">{if $methods[methods].slink}{$methods[methods].slink}{else}{$methods[methods].line_number}{/if}</span>) + </div> + + {include file="docblock.tpl" sdesc=$methods[methods].sdesc desc=$methods[methods].desc tags=$methods[methods].tags params=$methods[methods].params function=false} + + <div class="method-signature"> + <span class="method-result">{$methods[methods].function_return}</span> + <span class="method-name"> + {if $methods[methods].ifunction_call.returnsref}&{/if}{$methods[methods].function_name} + </span> + {if count($methods[methods].ifunction_call.params)} + ({section name=params loop=$methods[methods].ifunction_call.params}{if $smarty.section.params.iteration != 1}, {/if}{if $methods[methods].ifunction_call.params[params].hasdefault}[{/if}<span class="var-type">{$methods[methods].ifunction_call.params[params].type}</span> <span class="var-name">{$methods[methods].ifunction_call.params[params].name}</span>{if $methods[methods].ifunction_call.params[params].hasdefault} = <span class="var-default">{$methods[methods].ifunction_call.params[params].default}</span>]{/if}{/section}) + {else} + () + {/if} + </div> + + {if $methods[methods].params} + <ul class="parameters"> + {section name=params loop=$methods[methods].params} + <li> + <span class="var-type">{$methods[methods].params[params].datatype}</span> + <span class="var-name">{$methods[methods].params[params].var}</span>{if $methods[methods].params[params].data}<span class="var-description">: {$methods[methods].params[params].data}</span>{/if} + </li> + {/section} + </ul> + {/if} + + {if $methods[methods].method_overrides} + <hr class="separator" /> + <div class="notes">Redefinition of:</div> + <dl> + <dt>{$methods[methods].method_overrides.link}</dt> + {if $methods[methods].method_overrides.sdesc} + <dd>{$methods[methods].method_overrides.sdesc}</dd> + {/if} + </dl> + {/if} + {if $methods[methods].method_implements} + <hr class="separator" /> + <div class="notes">Implementation of:</div> + {section name=imp loop=$methods[methods].method_implements} + <dl> + <dt>{$methods[methods].method_implements[imp].link}</dt> + {if $methods[methods].method_implements[imp].sdesc} + <dd>{$methods[methods].method_implements[imp].sdesc}</dd> + {/if} + </dl> + {/section} + {/if} + + {if $methods[methods].descmethod} + <hr class="separator" /> + <div class="notes">Redefined in descendants as:</div> + <ul class="redefinitions"> + {section name=dm loop=$methods[methods].descmethod} + <li> + {$methods[methods].descmethod[dm].link} + {if $methods[methods].descmethod[dm].sdesc} + : {$methods[methods].descmethod[dm].sdesc} + {/if} + </li> + {/section} + </ul> + {/if} +</div> +{/if} +{/section} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/page.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/page.tpl new file mode 100755 index 00000000..b5980236 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/page.tpl @@ -0,0 +1,211 @@ +{include file="header.tpl" top3=true} + +<h2 class="file-name">{$source_location}</h2> + +<a name="sec-description"></a> +<div class="info-box"> + <div class="info-box-title">Description</div> + <div class="nav-bar"> + {if $classes || $includes || $defines || $globals || $functions} + <span class="disabled">Description</span> | + {/if} + {if $classes} + <a href="#sec-classes">Classes</a> + {if $includes || $defines || $globals || $functions}|{/if} + {/if} + {if $includes} + <a href="#sec-includes">Includes</a> + {if $defines || $globals || $functions}|{/if} + {/if} + {if $defines} + <a href="#sec-constants">Constants</a> + {if $globals || $functions}|{/if} + {/if} + {if $globals} + <a href="#sec-variables">Variables</a> + {if $functions}|{/if} + {/if} + {if $functions} + <a href="#sec-functions">Functions</a> + {/if} + </div> + <div class="info-box-body"> + {include file="docblock.tpl" desc=$desc sdesc=$sdesc tags=$tags} + + {if $tutorial} + <hr class="separator" /> + <div class="notes">Tutorial: <span class="tutorial">{$tutorial}</div> + {/if} + </div> +</div> + +{if $classes} + <a name="sec-classes"></a> + <div class="info-box"> + <div class="info-box-title">Classes</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + <span class="disabled">Classes</span> + {if $includes || $defines || $globals || $functions}|{/if} + {if $includes} + <a href="#sec-includes">Includes</a> + {if $defines || $globals || $functions}|{/if} + {/if} + {if $defines} + <a href="#sec-constants">Constants</a> + {if $globals || $functions}|{/if} + {/if} + {if $globals} + <a href="#sec-variables">Variables</a> + {if $functions}|{/if} + {/if} + {if $functions} + <a href="#sec-functions">Functions</a> + {/if} + </div> + <div class="info-box-body"> + <table cellpadding="2" cellspacing="0" class="class-table"> + <tr> + <th class="class-table-header">Class</th> + <th class="class-table-header">Description</th> + </tr> + {section name=classes loop=$classes} + <tr> + <td style="padding-right: 2em; vertical-align: top"> + {$classes[classes].link} + </td> + <td> + {if $classes[classes].sdesc} + {$classes[classes].sdesc} + {else} + {$classes[classes].desc} + {/if} + </td> + </tr> + {/section} + </table> + </div> + </div> +{/if} + +{if $includes} + <a name="sec-includes"></a> + <div class="info-box"> + <div class="info-box-title">Includes</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $classes} + <a href="#sec-classes">Classes</a> + {if $includes || $defines || $globals || $functions}|{/if} + {/if} + <span class="disabled">Includes</span> + {if $defines || $globals || $functions}|{/if} + {if $defines} + <a href="#sec-constants">Constants</a> + {if $globals || $functions}|{/if} + {/if} + {if $globals} + <a href="#sec-variables">Variables</a> + {if $functions}|{/if} + {/if} + {if $functions} + <a href="#sec-functions">Functions</a> + {/if} + </div> + <div class="info-box-body"> + {include file="include.tpl"} + </div> + </div> +{/if} + +{if $defines} + <a name="sec-constants"></a> + <div class="info-box"> + <div class="info-box-title">Constants</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $classes} + <a href="#sec-classes">Classes</a> + {if $includes || $defines || $globals || $functions}|{/if} + {/if} + {if $includes} + <a href="#sec-includes">Includes</a> + {if $defines || $globals || $functions}|{/if} + {/if} + <span class="disabled">Constants</span> + {if $globals || $functions}|{/if} + {if $globals} + <a href="#sec-variables">Variables</a> + {if $functions}|{/if} + {/if} + {if $functions} + <a href="#sec-functions">Functions</a> + {/if} + </div> + <div class="info-box-body"> + {include file="define.tpl"} + </div> + </div> +{/if} + +{if $globals} + <a name="sec-variables"></a> + <div class="info-box"> + <div class="info-box-title">Variables</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $classes} + <a href="#sec-classes">Classes</a> + {if $includes || $defines || $globals || $functions}|{/if} + {/if} + {if $includes} + <a href="#sec-includes">Includes</a> + {if $defines || $globals || $functions}|{/if} + {/if} + {if $defines} + <a href="#sec-constants">Constants</a> + {if $globals || $functions}|{/if} + {/if} + <span class="disabled">Variables</span> + {if $functions}|{/if} + {if $functions} + <a href="#sec-functions">Functions</a> + {/if} + </div> + <div class="info-box-body"> + {include file="global.tpl"} + </div> + </div> +{/if} + +{if $functions} + <a name="sec-functions"></a> + <div class="info-box"> + <div class="info-box-title">Functions</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $classes} + <a href="#sec-classes">Classes</a> + {if $includes || $defines || $globals || $functions}|{/if} + {/if} + {if $includes} + <a href="#sec-includes">Includes</a> + {if $defines || $globals || $functions}|{/if} + {/if} + {if $defines} + <a href="#sec-constants">Constants</a> + {if $globals || $functions}|{/if} + {/if} + {if $globals} + <a href="#sec-variables">Variables</a> + {if $functions}|{/if} + {/if} + <span class="disabled">Functions</span> + </div> + <div class="info-box-body"> + {include file="function.tpl"} + </div> + </div> +{/if} + +{include file="footer.tpl" top3=true} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/pkgelementindex.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/pkgelementindex.tpl new file mode 100755 index 00000000..dc283ad0 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/pkgelementindex.tpl @@ -0,0 +1,17 @@ +{include file="header.tpl"} +<a name="top"></a> +<h2>[{$package}] element index</h2> +{if count($packageindex) > 1} + <h3>Package indexes</h3> + <ul> + {section name=p loop=$packageindex} + {if $packageindex[p].title != $package} + <li><a href="elementindex_{$packageindex[p].title}.html">{$packageindex[p].title}</a></li> + {/if} + {/section} + </ul> +{/if} +<a href="elementindex.html">All elements</a> +<br /> +{include file="basicindex.tpl" indexname=elementindex_$package} +{include file="footer.tpl"} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/ric.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/ric.tpl new file mode 100755 index 00000000..eff734c1 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/ric.tpl @@ -0,0 +1,6 @@ +{include file="header.tpl"} +<h1 align="center">{$name}</h1> +<pre> +{$contents|htmlentities} +</pre> +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/todolist.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/todolist.tpl new file mode 100755 index 00000000..f929ccdb --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/todolist.tpl @@ -0,0 +1,14 @@ +{include file="header.tpl" title="Todo List"} +<div align="center"><h1>Todo List</h1></div> +{foreach from=$todos key=todopackage item=todo} +<h2>{$todopackage}</h2> +{section name=todo loop=$todo} +<h3>{$todo[todo].link}</h3> +<ul> +{section name=t loop=$todo[todo].todos} + <li>{$todo[todo].todos[t]}</li> +{/section} +</ul> +{/section} +{/foreach} +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/top_frame.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/top_frame.tpl new file mode 100755 index 00000000..36d1e5a1 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/top_frame.tpl @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> + <html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <!-- template designed by Marco Von Ballmoos --> + <title>{$title}</title> + <link rel="stylesheet" href="{$subdir}media/stylesheet.css" /> + <link rel="stylesheet" href="{$subdir}media/banner.css" /> + <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/> + </head> + <body> + <div class="banner"> + <div class="banner-title">{$package}</div> + <div class="banner-menu"> + <form> + <table cellpadding="0" cellspacing="0" style="width: 100%"> + <tr> + <td> + {if count($ric) >= 1} + {assign var="last_ric_name" value=""} + {section name=ric loop=$ric} + {if $last_ric_name != ""} | {/if} + <a href="{$ric[ric].file}" target="right">{$ric[ric].name}</a> + {assign var="last_ric_name" value=$ric[ric].name} + {/section} + {/if} + </td> + <td style="width: 2em"> </td> + <td style="text-align: right"> + {if count($packages) > 1} + <span class="field">Packages</span> + <select class="package-selector" onchange="window.parent.left_bottom.location=this[selectedIndex].value"> + {section name=p loop=$packages} + <option value="{$packages[p].link}">{$packages[p].title}</option> + {/section} + </select> + {/if} + </td> + </tr> + </table> + </form> + </div> + </div> + </body> + </html> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/tutorial.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/tutorial.tpl new file mode 100755 index 00000000..3b9109d1 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/tutorial.tpl @@ -0,0 +1,13 @@ +{include file="header.tpl" title=$title top3=true} + +{if $nav} + {include file="tutorial_nav.tpl" prev=$prev next=$next up=$up prevtitle=$prevtitle nexttitle=$nexttitle uptitle=$uptitle} +{/if} + +{$contents} + +{if $nav} + {include file="tutorial_nav.tpl" prev=$prev next=$next up=$up prevtitle=$prevtitle nexttitle=$nexttitle uptitle=$uptitle} +{/if} + +{include file="footer.tpl" top3=true}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/tutorial_nav.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/tutorial_nav.tpl new file mode 100755 index 00000000..89952301 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/tutorial_nav.tpl @@ -0,0 +1,41 @@ +<table class="tutorial-nav-box"> + <tr> + <td style="width: 30%"> + {if $prev} + <a href="{$prev}" class="nav-button">Previous</a> + {else} + <span class="nav-button-disabled">Previous</span> + {/if} + </td> + <td style="text-align: center"> + {if $up} + <a href="{$up}" class="nav-button">Up</a> + {/if} + </td> + <td style="text-align: right; width: 30%"> + {if $next} + <a href="{$next}" class="nav-button">Next</a> + {else} + <span class="nav-button-disabled">Next</span> + {/if} + </td> + </tr> + <tr> + <td style="width: 30%"> + {if $prevtitle} + <span class="detail">{$prevtitle}</span> + {/if} + </td> + <td style="text-align: center"> + {if $uptitle} + <span class="detail">{$uptitle}</span> + {/if} + </td> + <td style="text-align: right; width: 30%"> + {if $nexttitle} + <span class="detail">{$nexttitle}</span> + {/if} + </td> + </tr> +</table> +
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/tutorial_toc.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/tutorial_toc.tpl new file mode 100755 index 00000000..3482249b --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/tutorial_toc.tpl @@ -0,0 +1,40 @@ +{if count($toc)} +<h1 class="title">Table of Contents</h1> +<ul class="toc"> + {assign var="lastcontext" value='refsect1'} + {section name=toc loop=$toc} + + {if $toc[toc].tagname != $lastcontext} + {if $lastcontext == 'refsect1'} + <ul class="toc"> + <li>{$toc[toc].link}</li> + {else} + {if $lastcontext == 'refsect2'} + {if $toc[toc].tagname == 'refsect1'} + </ul> + <li>{$toc[toc].link}</li> + {/if} + {if $toc[toc].tagname == 'refsect3'} + <ul class="toc"> + <li>{$toc[toc].link}</li> + {/if} + {else} + </ul> + </ul> + <li>{$toc[toc].link}</li> + {/if} + {/if} + {assign var="lastcontext" value=$toc[toc].tagname} + {else} + <li>{$toc[toc].link}</li> + {/if} + {/section} + {if $lastcontext == 'refsect2'} + </ul> + {/if} + {if $lastcontext == 'refsect3'} + </ul> + </ul> + {/if} +</ul> +{/if} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/tutorial_tree.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/tutorial_tree.tpl new file mode 100755 index 00000000..617b5654 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/tutorial_tree.tpl @@ -0,0 +1,6 @@ +<div><a href="{$main.link}" target="right">{$main.title|strip_tags}</a></div> +{if $haskids} +<div style="margin-left: 1em"> + {$kids} +</div> +{/if} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/var.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/var.tpl new file mode 100755 index 00000000..fccf6892 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/var.tpl @@ -0,0 +1,92 @@ +{section name=vars loop=$vars} +{if $vars[vars].static} +<a name="var{$vars[vars].var_name}" id="{$vars[vars].var_name}"><!-- --></A> +<div class="{cycle values="evenrow,oddrow"}"> + + <div class="var-header"> + <span class="var-title"> + static <span class="var-type">{$vars[vars].var_type}</span> + <span class="var-name">{$vars[vars].var_name}</span> + {if $vars[vars].var_default} = <span class="var-default">{$vars[vars].var_default|replace:"\n":"<br />"}</span>{/if} + (line <span class="line-number">{if $vars[vars].slink}{$vars[vars].slink}{else}{$vars[vars].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$vars[vars].sdesc desc=$vars[vars].desc tags=$vars[vars].tags} + + {if $vars[vars].var_overrides} + <hr class="separator" /> + <div class="notes">Redefinition of:</div> + <dl> + <dt>{$vars[vars].var_overrides.link}</dt> + {if $vars[vars].var_overrides.sdesc} + <dd>{$vars[vars].var_overrides.sdesc}</dd> + {/if} + </dl> + {/if} + + {if $vars[vars].descvar} + <hr class="separator" /> + <div class="notes">Redefined in descendants as:</div> + <ul class="redefinitions"> + {section name=vm loop=$vars[vars].descvar} + <li> + {$vars[vars].descvar[vm].link} + {if $vars[vars].descvar[vm].sdesc} + : {$vars[vars].descvar[vm].sdesc} + {/if} + </li> + {/section} + </ul> + {/if} + +</div> +{/if} +{/section} + +{section name=vars loop=$vars} +{if !$vars[vars].static} +<a name="var{$vars[vars].var_name}" id="{$vars[vars].var_name}"><!-- --></A> +<div class="{cycle values="evenrow,oddrow"}"> + + <div class="var-header"> + <span class="var-title"> + <span class="var-type">{$vars[vars].var_type}</span> + <span class="var-name">{$vars[vars].var_name}</span> + {if $vars[vars].var_default} = <span class="var-default">{$vars[vars].var_default|replace:"\n":"<br />"}</span>{/if} + (line <span class="line-number">{if $vars[vars].slink}{$vars[vars].slink}{else}{$vars[vars].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$vars[vars].sdesc desc=$vars[vars].desc tags=$vars[vars].tags} + + {if $vars[vars].var_overrides} + <hr class="separator" /> + <div class="notes">Redefinition of:</div> + <dl> + <dt>{$vars[vars].var_overrides.link}</dt> + {if $vars[vars].var_overrides.sdesc} + <dd>{$vars[vars].var_overrides.sdesc}</dd> + {/if} + </dl> + {/if} + + {if $vars[vars].descvar} + <hr class="separator" /> + <div class="notes">Redefined in descendants as:</div> + <ul class="redefinitions"> + {section name=vm loop=$vars[vars].descvar} + <li> + {$vars[vars].descvar[vm].link} + {if $vars[vars].descvar[vm].sdesc} + : {$vars[vars].descvar[vm].sdesc} + {/if} + </li> + {/section} + </ul> + {/if} + +</div> +{/if} +{/section} + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/options.ini b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/options.ini new file mode 100755 index 00000000..084809be --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/options.ini @@ -0,0 +1,577 @@ +preservedocbooktags = false + +;; used to highlight the {@source} inline tag, @filesource tag, and @example tag +[highlightSourceTokens] +;; format: +;; T_CONSTANTNAME = open +;; /T_CONSTANTNAME = close + +T_INCLUDE = <span class="src-inc"> +/T_INCLUDE = </span> +T_INCLUDE_ONCE = <span class="src-inc"> +/T_INCLUDE_ONCE = </span> +T_REQUIRE_ONCE = <span class="src-inc"> +/T_REQUIRE_ONCE = </span> +T_REQUIRE_ONCE = <span class="src-inc"> +/T_REQUIRE_ONCE = </span> + +T_CONSTANT_ENCAPSED_STRING = <span class="src-str"> +/T_CONSTANT_ENCAPSED_STRING = </span> +T_STRING_VARNAME = <span class="src-str"> +/T_STRING_VARNAME = </span> + +T_STRING = <span class="src-id"> +/T_STRING = </span> + +T_DNUMBER = <span class="src-num"> +/T_DNUMBER = </span> +T_LNUMBER = <span class="src-num"> +/T_LNUMBER = </span> + +T_VARIABLE = <span class="src-var"> +/T_VARIABLE = </span> + +T_COMMENT = <span class="src-comm"> +/T_COMMENT = </span> +T_ML_COMMENT = <span class="src-comm"> +/T_ML_COMMENT = </span> + +T_OBJECT_OPERATOR = <span class="src-sym"> +/T_OBJECT_OPERATOR = </span> + +T_ABSTRACT = <span class="src-key"> +/T_ABSTRACT = </span> +T_CLONE = <span class="src-key"> +/T_CLONE = </span> +T_HALT_COMPILER = <span class="src-key"> +/T_HALT_COMPILER = </span> +T_ARRAY = <span class="src-key"> +/T_ARRAY = </span> +T_AS = <span class="src-key"> +/T_AS = </span> +T_BREAK = <span class="src-key"> +/T_BREAK = </span> +T_CLASS = <span class="src-key"> +/T_CLASS = </span> +T_CASE = <span class="src-key"> +/T_CASE = </span> +T_CONST = <span class="src-key"> +/T_CONST = </span> +T_CONTINUE = <span class="src-key"> +/T_CONTINUE = </span> +T_DECLARE = <span class="src-key"> +/T_DECLARE = </span> +T_DEFAULT = <span class="src-key"> +/T_DEFAULT = </span> +T_ELSE = <span class="src-key"> +/T_ELSE = </span> +T_ELSEIF = <span class="src-key"> +/T_ELSEIF = </span> +T_EMPTY = <span class="src-key"> +/T_EMPTY = </span> +T_ENDDECLARE = <span class="src-key"> +/T_ENDDECLARE = </span> +T_ENDFOR = <span class="src-key"> +/T_ENDFOR = </span> +T_ENDSWITCH = <span class="src-key"> +/T_ENDSWITCH = </span> +T_ENDFOREACH = <span class="src-key"> +/T_ENDFOREACH = </span> +T_ENDIF = <span class="src-key"> +/T_ENDIF = </span> +T_ENDWHILE = <span class="src-key"> +/T_ENDWHILE = </span> +T_EXIT = <span class="src-key"> +/T_EXIT = </span> +T_EXTENDS = <span class="src-key"> +/T_EXTENDS = </span> +T_FINAL = <span class="src-key"> +/T_FINAL = </span> +T_FOR = <span class="src-key"> +/T_FOR = </span> +T_FOREACH = <span class="src-key"> +/T_FOREACH = </span> +T_FUNCTION = <span class="src-key"> +/T_FUNCTION = </span> +T_GLOBAL = <span class="src-key"> +/T_GLOBAL = </span> +T_IF = <span class="src-key"> +/T_IF = </span> +T_IMPLEMENTS = <span class="src-key"> +/T_IMPLEMENTS = </span> +T_INTERFACE = <span class="src-key"> +/T_INTERFACE = </span> +T_LOGICAL_AND = <span class="src-key"> +/T_LOGICAL_AND = </span> +T_LOGICAL_OR = <span class="src-key"> +/T_LOGICAL_OR = </span> +T_LOGICAL_XOR = <span class="src-key"> +/T_LOGICAL_XOR = </span> +T_NEW = <span class="src-key"> +/T_NEW = </span> +T_PRIVATE = <span class="src-key"> +/T_PRIVATE = </span> +T_PROTECTED = <span class="src-key"> +/T_PROTECTED = </span> +T_PUBLIC = <span class="src-key"> +/T_PUBLIC = </span> +T_RETURN = <span class="src-key"> +/T_RETURN = </span> +T_STATIC = <span class="src-key"> +/T_STATIC = </span> +T_SWITCH = <span class="src-key"> +/T_SWITCH = </span> +T_VAR = <span class="src-key"> +/T_VAR = </span> +T_WHILE = <span class="src-key"> +/T_WHILE = </span> + +T_DOUBLE_COLON = <span class="src-sym"> +/T_DOUBLE_COLON = </span> + +T_OPEN_TAG = <span class="src-php"> +/T_OPEN_TAG = </span> +T_OPEN_TAG_WITH_ECHO = <span class="src-php"> +/T_OPEN_TAG_WITH_ECHO = </span> +T_CLOSE_TAG = <span class="src-php"> +/T_CLOSE_TAG = </span> + + +[highlightSource] +;; this is for highlighting things that aren't tokens like "&" +;; format: +;; word = open +;; /word = close +@ = <span class="src-sym"> +/@ = </span> +& = <span class="src-sym"> +/& = </span> +[ = <span class="src-sym"> +/[ = </span> +] = <span class="src-sym"> +/] = </span> +! = <span class="src-sym"> +/! = </span> +";" = <span class="src-sym"> +/; = </span> +( = <span class="src-sym"> +/( = </span> +) = <span class="src-sym"> +/) = </span> +, = <span class="src-sym"> +/, = </span> +{ = <span class="src-sym"> +/{ = </span> +} = <span class="src-sym"> +/} = </span> +""" = <span class="src-str"> +/" = </span> + +[highlightDocBlockSourceTokens] +;; this is for docblock tokens, using by phpDocumentor_HighlightParser +;; tagphptype is for "string" in @param string description, for example +docblock = <span class="src-doc"> +/docblock = </span> +tagphptype = <span class="src-doc-type"> +/tagphptype = </span> +tagvarname = <span class="src-doc-var"> +/tagvarname = </span> +coretag = <span class="src-doc-coretag"> +/coretag = </span> +tag = <span class="src-doc-tag"> +/tag = </span> +inlinetag = <span class="src-doc-inlinetag"> +/inlinetag = </span> +internal = <span class="src-doc-internal"> +/internal = </span> +closetemplate = <span class="src-doc-close-template"> +/closetemplate = </span> +docblocktemplate = <span class="src-doc-template"> +/docblocktemplate = </span> + +[highlightTutorialSourceTokens] +;; this is for XML DocBook-based tutorials, highlighted by phpDocumentor_TutorialHighlightParser +;; <tag> +opentag = <span class="tute-tag"> +/opentag = </span> +;; </tag> +closetag = <span class="tute-tag"> +/closetag = </span> +;; <tag attribute="value"> +attribute = <span class="tute-attribute-name"> +/attribute = </span> +;; <tag attribute="value"> +attributevalue = <span class="tute-attribute-value"> +/attributevalue = </span> +;; &entity; +entity = <span class="tute-entity"> +/entity = </span> +;; <!-- comment --> +comment = <span class="tute-comment"> +/comment = </span> +;; {@inline tag} +itag = <span class="tute-inline-tag"> +/itag = </span> + +;; used for translation of html in DocBlocks +[desctranslate] +ul = <ul> +/ul = </ul> +ol = <ol> +/ol = </ol> +li = <li> +/li = </li> +code = +/code = +var = <var> +/var = </var> +samp = <samp> +/samp = </samp> +kbd = <kbd> +/kbd = </kbd> +pre = <pre> +/pre = </pre> +p = <p> +/p = </p> +b = <strong> +/b = </strong> +i = <em> +/i = </em> +br = <br /> + +[ppage] +;; this is the DocBook package page translation section. All DocBook tags +;; that have a corresponding html tag must be listed here. Entities should +;; also be listed here +;; +;; examples: +;; 1) +;; tagname = newtagname +;; +;; This is the simplest case, where all attributes will be added into the +;; starting tag and the ending tag will be html/xml style </tranlatedtagname> +;; <tagname></tagname> becomes <newtagname></newtagname> and +;; <tagname attr="value"></tagname> becomes +;; <newtagname attr="value"></newtagname> +;; +;; 2) +;; tagname = newtagname +;; tagname->attr = newattrname +;; +;; in this case, everything will be like the first case, except tags like: +;; <tagname attr="value"></tagname> will become +;; <newtagname newattrname="value"></newtagname> +;; +;; 3) +;; tagname = newtagname +;; tagname->attr = newattrname +;; tagname->attr+value = newvalue +;; +;; in this case, the value is also translated to another. This can be useful +;; for instances such as focus="middle" changing to align="center" or something +;; of that nature. +;; <tagname attr="value"></tagname> will become +;; <newtagname newattrname="newvalue"></newtagname> +;; +;; 4) +;; tagname = newtagname +;; tagname->attr1 = newattrname +;; tagname->attr2 = newattrname +;; tagname->attr1+value|attr2+value = newvalue +;; +;; in this case, two attributes combine to make one new attribute, and the combined +;; value is translated into a new value +;; <tagname attr1="value1" attr2="value2"></tagname> will become +;; <newtagname newattrname="newvalue"></newtagname> +;; +;; 5) +;; tagname = newtagname +;; tagname!attr = dummy +;; +;; here, the attribute will be ignored. dummy is not used and may be any value +;; <tagname attr="value"></tagname> will become +;; <newtagname></newtagname> +;; +;; 6) +;; tagname = newtagname +;; tagname! = dummy +;; +;; here, all attributes will be ignored. dummy is not used and may be any value +;; <tagname attr1="value" attr2="foo"></tagname> will become +;; <newtagname></newtagname> +;; +;; 7) +;; tagname = newtagname +;; tagname/ = 1 +;; +;; here, the tag will be translated as a single tag with no closing tag, and all +;; attributes +;; <tagname attr="val">{text text}</tagname> will become +;; <newtagname attr="val" /> +;; +;; 8) +;; tagname = <starttaginfo /> +;; /tagname = closetagtext +;; +;; in this case, the text <starttaginfo> will be inserted exactly as entered for +;; <tagname> and closetagtext for </tagname> +;; <tagname attr="val"></tagname> will become +;; <starttaginfo />closetagtext +;; +;; 9) +;; $attr$my_attribute = newattrname +;; +;; tagname = newtagname +;; +;; in this case, all occurences of my_attribute in any tag will be changed to +;; newattrname. This is useful for changing things like role="php" to +;; class="php," for example. Note that the text "$attr$" MUST be on the line +;; start for phpDocumentor to recognize it. +;; +;; 10) +;; &entity; = translation text +;; " = " +;; " = """ +;; < = < +;; +;; Use this to control translation of entities to their appropriate values + + = +" = " +” = ” +“ = “ +& = & +< = < +> = > +© = © + + +$attr$role = class + +abbrev = abbr + +blockquote = blockquote + +arg = span +arg->choice = class + +author = <span class="author"> +/author = </span> +author! = 0 + +authorblurb = <div class="author-blurb"> +/authorblurb = </div> + +authorgroup = <div class="authors"><h2 class="title">Authors</h2> +/authorgroup = </div> +authorgroup! = 0 + +caution = <span class="warning"> +/caution = </span> +caution! = 0 + +cmdsynopsis = <div class="cmd-synopsis"> +/cmdsynopsis = </div> + +command = <span class="cmd-title"> +/command = </span> + +copyright = <div class="notes"> +/copyright = </div> + +emphasis = em + +example = <div class="src-code"> +/example = </div> +example! = 0 + +function = +/function = () + +formalpara = p + +graphic = img +graphic->fileref = src +graphic/ = + +important = strong + +informalequation = blockquote + +informalexample = div + +inlineequation = em + +itemizedlist = ul + +listitem = li + +literal = code + +literallayout = span + +option = " " +/option = + +orderedlist = ol + +para = p + +programlisting = <div class="src-code"> +/programlisting = </div> +programlisting! = 0 + +refentry = div + +refnamediv = <div class="ref-title-box"> +/refnamediv = </div> +refnamediv! = 0 + +refname = <h1 class="ref-title"> +/refname = </h1> + +refpurpose = <h2 class="ref-purpose"> +/refpurpose = </h2> + +refsynopsisdiv = <div class="ref-synopsis"> +/refsynopsisdiv = </div> +refsynopsisdiv! = 0 + +refsect1 = span + +refsect2 = span + +refsect3 = +/refsect3 = <br /> + +releaseinfo = <div class="release-info">( +/releaseinfo = )</div> + +simpara = +/simpara = <br /> +simpara! = 0 + +subscript = sub + +superscript = super + +table = table + +table->colsep = rules +table->rowsep = rules +table->colsep+1|rowsep+1 =all +table->colsep+1|rowsep+0 =cols +table->colsep+0|rowsep+1 =rows + +table->frame =frame +table->frame+all =border +table->frame+none =void +table->frame+sides =vsides +table->frame+top =above +table->frame+topbot =hsides + +thead = thead + +tfoot = tfoot + +tbody = tbody + +colspec = col + +tgroup = colgroup +tgroup/ = 1 +tgroup->cols = span + +row = tr + +entry = td +entry->morerows = colspan +entry->morerows+1 =2 +entry->morerows+2 =3 +entry->morerows+3 =4 +entry->morerows+4 =5 +entry->morerows+5 =6 +entry->morerows+6 =7 +entry->morerows+7 =8 +entry->morerows+8 =9 +entry->morerows+9 =10 +entry->morerows+10 =11 +;; add more if you need more colspans + +warning = <span class="warning"> +/warning = </span> +warning! = 0 + +;; now begins the attributes that should be tags in cdata +[$attr$id] +open = a +;close = /a +cdata! = true +quotevalues = true +separator = "=" +;separateall = true +$id = name + +;; now begins the sections that deal with <title> +[refsynopsisdiv_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h1 class="title"> +close = </h1> + +[refsect1_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h2 class="title"> +close = </h2> + +[refsect2_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h3 class="title"> +close = </h3> + +[refsect3_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h4 class="title"> +close = </h4> + +[para_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <div class="title"> +close = </div> + +[formalpara_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <div class="title"> +close = </div> + +[example_title] +;tag_attr = true +;attr_name = title +;cdata_start = true +cdata_end = true +open = </td></tr><tr><td><strong> +close = </strong> + +[table_title] +;tag_attr = true +;attr_name = true +cdata_start = true +open = <caption> +close = </caption> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/basicindex.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/basicindex.tpl new file mode 100755 index 00000000..951ee264 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/basicindex.tpl @@ -0,0 +1,47 @@ +<div class="index-letter-menu"> +{section name=letter loop=$letters} + <a class="index-letter" href="{$indexname}.html#{$letters[letter].letter}">{$letters[letter].letter}</a> +{/section} +</div> + +{section name=index loop=$index} + <a name="{$index[index].letter}"></a> + <div class="index-letter-section"> + <div style="float: left" class="index-letter-title">{$index[index].letter}</div> + <div style="float: right"><a href="#top">top</a></div> + <div style="clear: both"></div> + </div> + <dl> + {section name=contents loop=$index[index].index} + <dt class="field"> + {if ($index[index].index[contents].title == "Variable")} + <span class="var-title">{$index[index].index[contents].name}</span> + {elseif ($index[index].index[contents].title == "Global")} + <span class="var-title">{$index[index].index[contents].name}</span> + {elseif ($index[index].index[contents].title == "Method")} + <span class="method-title">{$index[index].index[contents].name}</span> + {elseif ($index[index].index[contents].title == "Function")} + <span class="method-title">{$index[index].index[contents].name}</span> + {elseif ($index[index].index[contents].title == "Constant")} + <span class="const-title">{$index[index].index[contents].name}</span> + {elseif ($index[index].index[contents].title == "Page") || ($index[index].index[contents].title == "Include")} + <span class="include-title">{$index[index].index[contents].name}</span> + {else} + {$index[index].index[contents].name} + {/if} + </dt> + <dd class="index-item-body"> + <div class="index-item-details">{$index[index].index[contents].link} in {$index[index].index[contents].file_name}</div> + {if $index[index].index[contents].description} + <div class="index-item-description">{$index[index].index[contents].description}</div> + {/if} + </dd> + {/section} + </dl> +{/section} + +<div class="index-letter-menu"> +{section name=letter loop=$letters} + <a class="index-letter" href="{$indexname}.html#{$letters[letter].letter}">{$letters[letter].letter}</a> +{/section} +</div> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/blank.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/blank.tpl new file mode 100755 index 00000000..6a05f27e --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/blank.tpl @@ -0,0 +1,13 @@ +<html> +<head> + <title>{$maintitle}</title> + <link rel="stylesheet" href="{$subdir}media/stylesheet.css" /> + <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/> +</head> +<body> +<div align="center"><h1>{$maintitle}</h1></div> +<b>Welcome to {$package}!</b><br /> +<br /> +This documentation was generated by <a href="{$phpdocwebsite}">phpDocumentor v{$phpdocversion}</a><br /> +</body> +</html>
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/class.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/class.tpl new file mode 100755 index 00000000..9ab7c455 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/class.tpl @@ -0,0 +1,429 @@ +{include file="header.tpl" top3=true} + +<h2 class="class-name">{if $is_interface}Interface{else}Class{/if} {$class_name}</h2> + +<a name="sec-description"></a> +<div class="info-box"> + <div class="info-box-title">Description</div> + <div class="nav-bar"> + {if $children || $vars || $ivars || $methods || $imethods || $consts || $iconsts } + <span class="disabled">Description</span> | + {/if} + {if $children} + <a href="#sec-descendents">Descendents</a> + {if $vars || $ivars || $methods || $imethods || $consts || $iconsts}|{/if} + {/if} + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + {if $methods || $imethods}|{/if} + {/if} + {if $methods || $imethods} + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + {if $implements} + <p class="implements"> + Implements interfaces: + <ul> + {foreach item="int" from=$implements}<li>{$int}</li>{/foreach} + </ul> + </p> + {/if} + {include file="docblock.tpl" type="class" sdesc=$sdesc desc=$desc} + <p class="notes"> + Located in <a class="field" href="{$page_link}">{$source_location}</a> (line <span class="field">{if $class_slink}{$class_slink}{else}{$line_number}{/if}</span>) + </p> + + {if $tutorial} + <hr class="separator" /> + <div class="notes">Tutorial: <span class="tutorial">{$tutorial}</span></div> + {/if} + + <pre>{section name=tree loop=$class_tree.classes}{$class_tree.classes[tree]}{$class_tree.distance[tree]}{/section}</pre> + + {if $conflicts.conflict_type} + <hr class="separator" /> + <div><span class="warning">Conflicts with classes:</span><br /> + {section name=me loop=$conflicts.conflicts} + {$conflicts.conflicts[me]}<br /> + {/section} + </div> + {/if} + </div> +</div> + +{if $children} + <a name="sec-descendents"></a> + <div class="info-box"> + <div class="info-box-title">Direct descendents</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + <span class="disabled">Descendents</span> + {if $vars || $ivars || $methods || $imethods}|{/if} + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + {if $methods || $imethods}|{/if} + {/if} + {if $methods || $imethods} + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + <table cellpadding="2" cellspacing="0" class="class-table"> + <tr> + <th class="class-table-header">Class</th> + <th class="class-table-header">Description</th> + </tr> + {section name=kids loop=$children} + <tr> + <td style="padding-right: 2em">{$children[kids].link}</td> + <td> + {if $children[kids].sdesc} + {$children[kids].sdesc} + {else} + {$children[kids].desc} + {/if} + </td> + </tr> + {/section} + </table> + </div> + </div> +{/if} + +{if $consts} + <a name="sec-const-summary"></a> + <div class="info-box"> + <div class="info-box-title">Class Constant Summary</span></div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendants</a> | + {/if} + <span class="disabled">Constants</span> (<a href="#sec-consts">details</a>) + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + | + {/if} + {if $methods || $imethods} + | + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + <div class="const-summary"> + {section name=consts loop=$consts} + <div class="const-title"> + <img src="{$subdir}media/images/Constant.png" alt=" " /> + <a href="#{$consts[consts].const_name}" title="details" class="const-name">{$consts[consts].const_name}</a> = <span class="var-type">{$consts[consts].const_value}</span> + + </div> + {/section} + </div> + </div> + </div> +{/if} + +{if $vars} + <a name="sec-var-summary"></a> + <div class="info-box"> + <div class="info-box-title">Variable Summary</span></div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendents</a> | + {/if} + <span class="disabled">Vars</span> (<a href="#sec-vars">details</a>) + {if $methods || $imethods} + | + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + <div class="var-summary"> + {section name=vars loop=$vars} + {if $vars[vars].static} + <div class="var-title"> + static <span class="var-type">{$vars[vars].var_type}</span> + <a href="#{$vars[vars].var_name}" title="details" class="var-name">{$vars[vars].var_name}</a> + </div> + {/if} + {/section} + {section name=vars loop=$vars} + {if !$vars[vars].static} + <div class="var-title"> + <span class="var-type">{$vars[vars].var_type}</span> + <a href="#{$vars[vars].var_name}" title="details" class="var-name">{$vars[vars].var_name}</a> + </div> + {/if} + {/section} + </div> + </div> + </div> +{/if} + +{if $methods} + <a name="sec-method-summary"></a> + <div class="info-box"> + <div class="info-box-title">Method Summary</span></div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendents</a> | + {/if} + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + | + {/if} + <span class="disabled">Methods</span> (<a href="#sec-methods">details</a>) + </div> + <div class="info-box-body"> + <div class="method-summary"> + {section name=methods loop=$methods} + {if $methods[methods].static} + <div class="method-definition"> + static {if $methods[methods].function_return} + <span class="method-result">{$methods[methods].function_return}</span> + {/if} + <a href="#{$methods[methods].function_name}" title="details" class="method-name">{if $methods[methods].ifunction_call.returnsref}&{/if}{$methods[methods].function_name}</a> + {if count($methods[methods].ifunction_call.params)} + ({section name=params loop=$methods[methods].ifunction_call.params}{if $smarty.section.params.iteration != 1}, {/if}{if $methods[methods].ifunction_call.params[params].hasdefault}[{/if}<span class="var-type">{$methods[methods].ifunction_call.params[params].type}</span> <span class="var-name">{$methods[methods].ifunction_call.params[params].name}</span>{if $methods[methods].ifunction_call.params[params].hasdefault} = <span class="var-default">{$methods[methods].ifunction_call.params[params].default}</span>]{/if}{/section}) + {else} + () + {/if} + </div> + {/if} + {/section} + {section name=methods loop=$methods} + {if !$methods[methods].static} + <div class="method-definition"> + {if $methods[methods].function_return} + <span class="method-result">{$methods[methods].function_return}</span> + {/if} + <a href="#{$methods[methods].function_name}" title="details" class="method-name">{if $methods[methods].ifunction_call.returnsref}&{/if}{$methods[methods].function_name}</a> + {if count($methods[methods].ifunction_call.params)} + ({section name=params loop=$methods[methods].ifunction_call.params}{if $smarty.section.params.iteration != 1}, {/if}{if $methods[methods].ifunction_call.params[params].hasdefault}[{/if}<span class="var-type">{$methods[methods].ifunction_call.params[params].type}</span> <span class="var-name">{$methods[methods].ifunction_call.params[params].name}</span>{if $methods[methods].ifunction_call.params[params].hasdefault} = <span class="var-default">{$methods[methods].ifunction_call.params[params].default}</span>]{/if}{/section}) + {else} + () + {/if} + </div> + {/if} + {/section} + </div> + </div> + </div> +{/if} + +{if $vars || $ivars} + <a name="sec-vars"></a> + <div class="info-box"> + <div class="info-box-title">Variables</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendents</a> | + {/if} + {if $methods} + <a href="#sec-var-summary">Vars</a> (<span class="disabled">details</span>) + {else} + <span class="disabled">Vars</span> + {/if} + + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + {if $methods || $imethods} + | + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + {include file="var.tpl"} + {if $ivars} + <h4>Inherited Variables</h4> + <A NAME='inherited_vars'><!-- --></A> + {section name=ivars loop=$ivars} + <p>Inherited from <span class="classname">{$ivars[ivars].parent_class}</span></p> + <blockquote> + {section name=ivars2 loop=$ivars[ivars].ivars} + <span class="var-title"> + <span class="var-name">{$ivars[ivars].ivars[ivars2].link}</span>{if $ivars[ivars].ivars[ivars2].ivar_sdesc}: {$ivars[ivars].ivars[ivars2].ivar_sdesc}{/if}<br> + </span> + {/section} + </blockquote> + {/section} + {/if} + </div> + </div> +{/if} + +{if $methods || $imethods} + <a name="sec-methods"></a> + <div class="info-box"> + <div class="info-box-title">Methods</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendents</a> | + {/if} + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + {/if} + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + {if $methods} + <a href="#sec-method-summary">Methods</a> (<span class="disabled">details</span>) + {else} + <span class="disabled">Methods</span> + {/if} + </div> + <div class="info-box-body"> + {include file="method.tpl"} + {if $imethods} + <h4>Inherited Methods</h4> + <a name='inherited_methods'><!-- --></a> + {section name=imethods loop=$imethods} + <!-- =========== Summary =========== --> + <p>Inherited From <span class="classname">{$imethods[imethods].parent_class}</span></p> + <blockquote> + {section name=im2 loop=$imethods[imethods].imethods} + <span class="method-name">{$imethods[imethods].imethods[im2].link}</span>{if $imethods[imethods].imethods[im2].ifunction_sdesc}: {$imethods[imethods].imethods[im2].ifunction_sdesc}{/if}<br> + {/section} + </blockquote> + {/section} + {/if} + </div> + </div> +{/if} + +{if $consts || $iconsts} + <a name="sec-consts"></a> + <div class="info-box"> + <div class="info-box-title">Class Constants</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendants</a> | + {/if} + {if $methods} + <a href="#sec-var-summary">Constants</a> (<span class="disabled">details</span>) + {else} + <span class="disabled">Constants</span> + {/if} + + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + {/if} + {if $methods || $imethods} + | + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + {include file="const.tpl"} + {if $iconsts} + <h4>Inherited Constants</h4> + <A NAME='inherited_vars'><!-- --></A> + {section name=iconsts loop=$iconsts} + <p>Inherited from <span class="classname">{$iconsts[iconsts].parent_class}</span></p> + <blockquote> + {section name=iconsts2 loop=$iconsts[iconsts].iconsts} + <img src="{$subdir}media/images/{if $iconsts[iconsts].iconsts[iconsts2].access == 'private'}PrivateVariable{else}Variable{/if}.png" /> + <span class="const-title"> + <span class="const-name">{$iconsts[iconsts].iconsts[iconsts2].link}</span>{if $iconsts[iconsts].iconsts[iconsts2].iconst_sdesc}: {$iconsts[iconsts].iconsts[iconsts2].iconst_sdesc}{/if}<br> + </span> + {/section} + </blockquote> + {/section} + {/if} + </div> + </div> +{/if} + +{include file="footer.tpl" top3=true} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/classtrees.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/classtrees.tpl new file mode 100755 index 00000000..952e6d50 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/classtrees.tpl @@ -0,0 +1,19 @@ +{include file="header.tpl" top1=true} + +<!-- Start of Class Data --> +<H2> + {$smarty.capture.title} +</H2> +{if $interfaces} +{section name=classtrees loop=$interfaces} +<h2>Root interface {$interfaces[classtrees].class}</h2> +{$interfaces[classtrees].class_tree} +{/section} +{/if} +{if $classtrees} +{section name=classtrees loop=$classtrees} +<h2>Root class {$classtrees[classtrees].class}</h2> +{$classtrees[classtrees].class_tree} +{/section} +{/if} +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/const.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/const.tpl new file mode 100644 index 00000000..c26ff92d --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/const.tpl @@ -0,0 +1,18 @@ +{section name=consts loop=$consts} +<a name="const{$consts[consts].const_name}" id="{$consts[consts].const_name}"><!-- --></A> +<div class="{cycle values="evenrow,oddrow"}"> + + <div class="const-header"> + <img src="{$subdir}media/images/{if $consts[consts].access == 'private'}PrivateVariable{else}Variable{/if}.png" /> + <span class="const-title"> + <span class="const-name">{$consts[consts].const_name}</span> + = <span class="const-default">{$consts[consts].const_value|replace:"\n":"<br />"}</span> + (line <span class="line-number">{if $consts[consts].slink}{$consts[consts].slink}{else}{$consts[consts].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$consts[consts].sdesc desc=$consts[consts].desc tags=$consts[consts].tags} + +</div> +{/section} + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/define.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/define.tpl new file mode 100755 index 00000000..0da5d864 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/define.tpl @@ -0,0 +1,24 @@ +{section name=def loop=$defines} +<a name="{$defines[def].define_link}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div> + <span class="const-title"> + <span class="const-name">{$defines[def].define_name}</span> = {$defines[def].define_value|replace:"\n":"<br />"} + (line <span class="line-number">{if $defines[def].slink}{$defines[def].slink}{else}{$defines[def].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$defines[def].sdesc desc=$defines[def].desc tags=$defines[def].tags} + + {if $globals[glob].global_conflicts.conflict_type} + <hr class="separator" /> + <div><span class="warning">Conflicts with constants:</span><br /> + {section name=me loop=$defines[def].define_conflicts.conflicts} + {$defines[def].define_conflicts.conflicts[me]}<br /> + {/section} + </div> + {/if} + +</div> +{/section}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/docblock.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/docblock.tpl new file mode 100755 index 00000000..783d5271 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/docblock.tpl @@ -0,0 +1,14 @@ +<!-- ========== Info from phpDoc block ========= --> +{if $sdesc} +<p class="short-description">{$sdesc}</p> +{/if} +{if $desc} +<p class="description">{$desc}</p> +{/if} +{if $tags} + <ul class="tags"> + {section name=tags loop=$tags} + <li><span class="field">{$tags[tags].keyword}:</span> {$tags[tags].data}</li> + {/section} + </ul> +{/if} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/elementindex.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/elementindex.tpl new file mode 100755 index 00000000..d5964f99 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/elementindex.tpl @@ -0,0 +1,12 @@ +{include file="header.tpl" noleftindex=true} +<a name="top"></a> +<h2>Full index</h2> +<h3>Package indexes</h3> +<ul> +{section name=p loop=$packageindex} + <li><a href="elementindex_{$packageindex[p].title}.html">{$packageindex[p].title}</a></li> +{/section} +</ul> +<br /> +{include file="basicindex.tpl" indexname="elementindex"} +{include file="footer.tpl"} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/errors.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/errors.tpl new file mode 100755 index 00000000..0f526584 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/errors.tpl @@ -0,0 +1,21 @@ +{include file="header.tpl" noleftindex=true} +{section name=files loop=$files} +<a href="#{$files[files].file}">{$files[files].file}</a><br> +{/section} +{foreach key=file item=issues from=$all} +<a name="{$file}"></a> +<h1>{$file}</h1> +{if count($issues.warnings)} +<h2>Warnings:</h2><br> +{section name=warnings loop=$issues.warnings} +<b>{$issues.warnings[warnings].name}</b> - {$issues.warnings[warnings].listing}<br> +{/section} +{/if} +{if count($issues.errors)} +<h2>Errors:</h2><br> +{section name=errors loop=$issues.errors} +<b>{$issues.errors[errors].name}</b> - {$issues.errors[errors].listing}<br> +{/section} +{/if} +{/foreach} +{include file="footer.tpl"} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/examplesource.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/examplesource.tpl new file mode 100755 index 00000000..8abf74ce --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/examplesource.tpl @@ -0,0 +1,6 @@ +{include file="header.tpl" title=$title} +<h1>{$title}</h1> +<div class="listing"> +{$source} +</div> +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/filesource.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/filesource.tpl new file mode 100755 index 00000000..239f7b41 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/filesource.tpl @@ -0,0 +1,8 @@ +{capture name="tutle"}File Source for {$name}{/capture} +{include file="header.tpl" title=$smarty.capture.tutle} +<h1>Source for file {$name}</h1> +<p>Documentation is available at {$docs}</p> +<div class="src-code"> +{$source} +</div> +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/footer.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/footer.tpl new file mode 100755 index 00000000..8d0f79db --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/footer.tpl @@ -0,0 +1,8 @@ +{if !$index} + <p class="notes" id="credit"> + Documentation generated on {$date} by <a href="{$phpdocwebsite}" target="_blank">phpDocumentor {$phpdocversion}</a> + </p> +{/if} + {if $top3}</div>{/if} +</body> +</html> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/function.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/function.tpl new file mode 100755 index 00000000..b6880059 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/function.tpl @@ -0,0 +1,44 @@ +{section name=func loop=$functions} +<a name="{$functions[func].function_dest}" id="{$functions[func].function_dest}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div> + <span class="method-title">{$functions[func].function_name}</span> (line <span class="line-number">{if $functions[func].slink}{$functions[func].slink}{else}{$functions[func].line_number}{/if}</span>) + </div> + + {include file="docblock.tpl" sdesc=$functions[func].sdesc desc=$functions[func].desc tags=$functions[func].tags params=$functions[func].params function=false} + + <div class="method-signature"> + <span class="method-result">{$functions[func].function_return}</span> + <span class="method-name"> + {if $functions[func].ifunction_call.returnsref}&{/if}{$functions[func].function_name} + </span> + {if count($functions[func].ifunction_call.params)} + ({section name=params loop=$functions[func].ifunction_call.params}{if $smarty.section.params.iteration != 1}, {/if}{if $functions[func].ifunction_call.params[params].hasdefault}[{/if}<span class="var-type">{$functions[func].ifunction_call.params[params].type}</span> <span class="var-name">{$functions[func].ifunction_call.params[params].name}</span>{if $functions[func].ifunction_call.params[params].hasdefault} = <span class="var-default">{$functions[func].ifunction_call.params[params].default|escape:"html"}</span>]{/if}{/section}) + {else} + () + {/if} + </div> + + {if $functions[func].params} + <ul class="parameters"> + {section name=params loop=$functions[func].params} + <li> + <span class="var-type">{$functions[func].params[params].datatype}</span> + <span class="var-name">{$functions[func].params[params].var}</span>{if $functions[func].params[params].data}<span class="var-description">: {$functions[func].params[params].data}</span>{/if} + </li> + {/section} + </ul> + {/if} + + {if $functions[func].function_conflicts.conflict_type} + <hr class="separator" /> + <div><span class="warning">Conflicts with functions:</span><br /> + {section name=me loop=$functions[func].function_conflicts.conflicts} + {$functions[func].function_conflicts.conflicts[me]}<br /> + {/section} + </div> + {/if} + +</div> +{/section} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/global.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/global.tpl new file mode 100755 index 00000000..eab7e0b0 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/global.tpl @@ -0,0 +1,26 @@ +{section name=glob loop=$globals} +<a name="{$globals[glob].global_link}" id="{$globals[glob].global_link}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div> + <span class="var-title"> + <span class="var-type">{$globals[glob].global_type}</span> + <span class="var-name">{$globals[glob].global_name}</span> + {if $vars[vars].var_default} = <span class="var-default">{$globals[glob].global_value|replace:"\n":"<br />"}</span>{/if} + (line <span class="line-number">{if $globals[glob].slink}{$globals[glob].slink}{else}{$globals[glob].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$globals[glob].sdesc desc=$globals[glob].desc tags=$globals[glob].tags} + + {if $globals[glob].global_conflicts.conflict_type} + <hr class="separator" /> + <div><span class="warning">Conflicts with global variables:</span><br /> + {section name=me loop=$globals[glob].global_conflicts.conflicts} + {$globals[glob].global_conflicts.conflicts[me]}<br /> + {/section} + </div> + {/if} + +</div> +{/section}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/header.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/header.tpl new file mode 100755 index 00000000..c22ba37d --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/header.tpl @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> + <html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <!-- template designed by Marco Von Ballmoos --> + <title>{$title}</title> + <link rel="stylesheet" href="{$subdir}media/stylesheet.css" /> + <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/> + </head> + <body> + {if $top3}<div class="page-body">{/if} + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/include.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/include.tpl new file mode 100755 index 00000000..c2419e5f --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/include.tpl @@ -0,0 +1,16 @@ +{section name=includes loop=$includes} +<a name="{$includes[includes].include_file}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div> + <span class="include-title"> + <span class="include-type">{$includes[includes].include_name}</span> + (<span class="include-name">{$includes[includes].include_value}</span>) + (line <span class="line-number">{if $includes[includes].slink}{$includes[includes].slink}{else}{$includes[includes].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$includes[includes].sdesc desc=$includes[includes].desc tags=$includes[includes].tags} + +</div> +{/section}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/index.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/index.tpl new file mode 100755 index 00000000..7cd61094 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/index.tpl @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE html + PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//FR" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"> + <html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <!-- Generated by phpDocumentor on {$date} --> + <title>{$title}</title> + <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/> +</head> + +<FRAMESET rows='120,*'> + <FRAME src='packages.html' name='left_top' frameborder="1" bordercolor="#999999"> + <FRAMESET cols='25%,*'> + <FRAME src='{$start}' name='left_bottom' frameborder="1" bordercolor="#999999"> + <FRAME src='{$blank}.html' name='right' frameborder="1" bordercolor="#999999"> + </FRAMESET> + <NOFRAMES> + <H2>Frame Alert</H2> + <P>This document is designed to be viewed using the frames feature. + If you see this message, you are using a non-frame-capable web client.</P> + </NOFRAMES> +</FRAMESET> +</HTML> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/left_frame.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/left_frame.tpl new file mode 100755 index 00000000..eb3f670d --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/left_frame.tpl @@ -0,0 +1,159 @@ +{include file="header.tpl" top2=true} +<div class="package-title">{$package}</div> +<div class="package-details"> + + <dl class="tree"> + + <dt class="folder-title">Description</dt> + <dd> + <a href='{$classtreepage}.html' target='right'>Class trees</a><br /> + <a href='{$elementindex}.html' target='right'>Index of elements</a><br /> + {if $hastodos} + <a href="{$todolink}" target="right">Todo List</a><br /> + {/if} + </dd> + + {section name=p loop=$info} + + {if $info[p].subpackage == ""} + + {if $info[p].tutorials} + <dt class="folder-title">Tutorials/Manuals</dt> + <dd> + {if $info[p].tutorials.pkg} + <dl class="tree"> + <dt class="folder-title">Package-level</dt> + <dd> + {section name=ext loop=$info[p].tutorials.pkg} + {$info[p].tutorials.pkg[ext]} + {/section} + </dd> + </dl> + {/if} + + {if $info[p].tutorials.cls} + <dl class="tree"> + <dt class="folder-title">Class-level</dt> + <dd> + {section name=ext loop=$info[p].tutorials.cls} + {$info[p].tutorials.cls[ext]} + {/section} + </dd> + </dl> + {/if} + + {if $info[p].tutorials.proc} + <dl class="tree"> + <dt class="folder-title">Function-level</dt> + <dd> + {section name=ext loop=$info[p].tutorials.proc} + {$info[p].tutorials.proc[ext]} + {/section} + </dd> + </dl> + {/if} + </dd> + {/if} + {if $info[p].hasinterfaces} + <dt class="folder-title">Interfaces</dt> + {section name=class loop=$info[p].classes} + {if $info[p].classes[class].is_interface} + <dd><a href='{$info[p].classes[class].link}' target='right'>{$info[p].classes[class].title}</a></dd> + {/if} + {/section} + {/if} + {if $info[p].hasclasses} + <dt class="folder-title">Classes</dt> + {section name=class loop=$info[p].classes} + {if $info[p].classes[class].is_class} + <dd><a href='{$info[p].classes[class].link}' target='right'>{$info[p].classes[class].title}</a></dd> + {/if} + {/section} + {/if} + {if $info[p].functions} + <dt class="folder-title">Functions</dt> + {section name=f loop=$info[p].functions} + <dd><a href='{$info[p].functions[f].link}' target='right'>{$info[p].functions[f].title}</a></dd> + {/section} + {/if} + {if $info[p].files} + <dt class="folder-title">Files</dt> + {section name=nonclass loop=$info[p].files} + <dd><a href='{$info[p].files[nonclass].link}' target='right'>{$info[p].files[nonclass].title}</a></dd> + {/section} + {/if} + + {else} + {if $info[p].tutorials} + <dt class="folder-title">Tutorials/Manuals</dt> + <dd> + {if $info[p].tutorials.pkg} + <dl class="tree"> + <dt class="folder-title">Package-level</dt> + <dd> + {section name=ext loop=$info[p].tutorials.pkg} + {$info[p].tutorials.pkg[ext]} + {/section} + </dd> + </dl> + {/if} + + {if $info[p].tutorials.cls} + <dl class="tree"> + <dt class="folder-title">Class-level</dt> + <dd> + {section name=ext loop=$info[p].tutorials.cls} + {$info[p].tutorials.cls[ext]} + {/section} + </dd> + </dl> + {/if} + + {if $info[p].tutorials.proc} + <dl class="tree"> + <dt class="folder-title">Function-level</dt> + <dd> + {section name=ext loop=$info[p].tutorials.proc} + {$info[p].tutorials.proc[ext]} + {/section} + </dd> + </dl> + {/if} + </dd> + {/if} + + <dt class="sub-package">{$info[p].subpackage}</dt> + <dd> + <dl class="tree"> + {if $info[p].subpackagetutorial} + <div><a href="{$info.0.subpackagetutorialnoa}" target="right">{$info.0.subpackagetutorialtitle}</a></div> + {/if} + {if $info[p].classes} + <dt class="folder-title">Classes</dt> + {section name=class loop=$info[p].classes} + <dd><a href='{$info[p].classes[class].link}' target='right'>{$info[p].classes[class].title}</a></dd> + {/section} + {/if} + {if $info[p].functions} + <dt class="folder-title">Functions</dt> + {section name=f loop=$info[p].functions} + <dd><a href='{$info[p].functions[f].link}' target='right'>{$info[p].functions[f].title}</a></dd> + {/section} + {/if} + {if $info[p].files} + <dt class="folder-title">Files</dt> + {section name=nonclass loop=$info[p].files} + <dd><a href='{$info[p].files[nonclass].link}' target='right'>{$info[p].files[nonclass].title}</a></dd> + {/section} + {/if} + </dl> + </dd> + + {/if} + + {/section} + </dl> +</div> +<p class="notes"><a href="{$phpdocwebsite}" target="_blank">phpDocumentor v <span class="field">{$phpdocversion}</span></a></p> +</BODY> +</HTML> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/media/banner.css b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/media/banner.css new file mode 100755 index 00000000..065e76bc --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/media/banner.css @@ -0,0 +1,32 @@ +body +{ + background-color: #FFFFFF; + margin: 0px; + padding: 0px; +} + +/* Banner (top bar) classes */ + +.banner { } + +.banner-menu +{ + clear: both; + padding: .5em; + border-top: 2px solid #999999; +} + +.banner-title +{ + text-align: right; + font-size: 20pt; + font-weight: bold; + margin: .2em; +} + +.package-selector +{ + background-color: #EEEEEE; + border: 1px solid black; + color: #0000C0; +} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/media/stylesheet.css b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/media/stylesheet.css new file mode 100755 index 00000000..43834a16 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/media/stylesheet.css @@ -0,0 +1,141 @@ +a { color: #0000C0; text-decoration: underline; } +a:hover { text-decoration: underline; background-color: #FFFFFF } +a:active { text-decoration: underline; background-color: #FFFFFF } + +body, table { background-color: #EEEEEE; font-family: Verdana, Arial, sans-serif; font-size: 10pt } +p, li { line-height: 140% } +a img { border: 0px; } +dd { margin-left: 0px; padding-left: 1em; } + +/* Page layout/boxes */ + +.info-box {} +.info-box-title { margin: 1em 0em 0em 0em; padding: .25em; font-weight: normal; font-size: 14pt; border: 2px solid #999999; background-color: #FFFFFF } +.info-box-body { border: 1px solid #999999; padding: .5em; } +.nav-bar { font-size: 8pt; white-space: nowrap; text-align: right; padding: .2em; margin: 0em 0em 1em 0em; } + +.oddrow { background-color: #F8F8F8; border: 1px solid #AAAAAA; padding: .5em; margin-bottom: 1em} +.evenrow { border: 1px solid #AAAAAA; padding: .5em; margin-bottom: 1em} + +.page-body { max-width: 800px; margin: auto; } +.tree dl { margin: 0px } + +/* Index formatting classes */ + +.index-item-body { margin-top: .5em; margin-bottom: .5em} +.index-item-description { margin-top: .25em } +.index-item-details { font-weight: normal; font-style: italic; font-size: 8pt } +.index-letter-section { background-color: #EEEEEE; border: 1px dotted #999999; padding: .5em; margin-bottom: 1em} +.index-letter-title { font-size: 12pt; font-weight: bold } +.index-letter-menu { text-align: center; margin: 1em } +.index-letter { font-size: 12pt } + +/* Docbook classes */ + +.description {} +.short-description { font-weight: bold; color: #666666; } +.tags { padding-left: 0em; margin-left: 3em; color: #666666; list-style-type: square; } +.parameters { padding-left: 0em; margin-left: 3em; font-style: italic; list-style-type: square; } +.redefinitions { font-size: 8pt; padding-left: 0em; margin-left: 2em; } +.package { } +.package-title { font-weight: bold; font-size: 14pt; border-bottom: 1px solid black } +.package-details { font-size: 85%; } +.sub-package { font-weight: bold; font-size: 120% } +.tutorial { border-width: thin; border-color: #0066ff } +.tutorial-nav-box { width: 100%; border: 1px solid #AAAAAA; background-color: #DDDDFF; } +.nav-button-disabled { color: #AAAAAA; } +.nav-button:active, +.nav-button:focus, +.nav-button:hover { background-color: #CCCCCC; outline: 1px solid #999999; text-decoration: none } +.folder-title { font-style: italic } + +/* Generic formatting */ + +.field { font-weight: bold; } +.detail { font-size: 8pt; } +.notes { font-style: italic; font-size: 8pt; } +.separator { background-color: #999999; height: 2px; } +.warning { color: #FF6600; } +.disabled { font-style: italic; color: #999999; } + +/* Code elements */ + +.line-number { } + +.class-table { width: 100%; } +.class-table-header { border-bottom: 1px dotted #666666; text-align: left; background-color: DDDDFF } +.class-name { color: #000000; font-weight: bold; } + +.method-summary { padding-left: 1em; font-size: 8pt } +.method-header { background-color: #DDDDFF; padding: 1px; } +.method-definition { margin-bottom: .3em } +.method-title { font-weight: bold } +.method-name { font-weight: bold; } +.method-signature { font-size: 85%; color: #666666; margin: .5em 0em } +.method-result { font-style: italic; } + +.var-summary { padding-left: 1em; font-size: 8pt; } +.var-header { background-color: #DDDDFF; padding: 1px; } +.var-title { margin-bottom: .3em } +.var-type { font-style: italic; } +.var-name { font-weight: bold; } +.var-default {} +.var-description { font-weight: normal; color: #000000; } + +.include-title { } +.include-type { font-style: italic; } +.include-name { font-weight: bold; } + +.const-title { } +.const-name { font-weight: bold; } + +/* Syntax highlighting */ + +.src-code { border: 1px solid #999999; padding: 1em; + font-family: 'Courier New', Courier, monospace; font-weight: normal; } +.src-line { font-family: 'Courier New', Courier, monospace; font-weight: normal; } +.src-comm { color: green; } +.src-id { } +.src-inc { color: #0000FF; } +.src-key { color: #0000FF; } +.src-num { color: #CC0000; } +.src-str { color: #66cccc; } +.src-sym { font-weight: bold; } +.src-var { } + +.src-php { font-weight: bold; } + +.src-doc { color: #009999 } +.src-doc-close-template { color: #0000FF } +.src-doc-coretag { color: #0099FF; font-weight: bold } +.src-doc-inlinetag { color: #0099FF } +.src-doc-internal { color: #6699cc } +.src-doc-tag { color: #0080CC } +.src-doc-template { color: #0000FF } +.src-doc-type { font-style: italic } +.src-doc-var { font-style: italic } + +.tute-tag { color: #009999 } +.tute-attribute-name { color: #0000FF } +.tute-attribute-value { color: #0099FF } +.tute-entity { font-weight: bold; } +.tute-comment { font-style: italic } +.tute-inline-tag { color: #636311; font-weight: bold } + +/* tutorial */ + +.authors { } +.author { font-style: italic; font-weight: bold } +.author-blurb { margin: .5em 0em .5em 2em; font-size: 85%; font-weight: normal; font-style: normal } +.example { border: 1px dashed #999999; background-color: #EEEEEE; padding: .5em; } +.listing { border: 1px dashed #999999; background-color: #EEEEEE; padding: .5em; white-space: nowrap; } +.release-info { font-size: 85%; font-style: italic; margin: 1em 0em } +.ref-title-box { } +.ref-title { } +.ref-purpose { font-style: italic; color: #666666 } +.ref-synopsis { } +.title { font-weight: bold; border: 2px solid #999999; background-color: #FFFFFF; padding: 2px } +.cmd-synopsis { margin: 1em 0em } +.cmd-title { font-weight: bold } +.toc { margin-left: 2em; padding-left: 0em } + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/method.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/method.tpl new file mode 100755 index 00000000..06d57a12 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/method.tpl @@ -0,0 +1,149 @@ +<A NAME='method_detail'></A> +{section name=methods loop=$methods} +{if $methods[methods].static} +<a name="method{$methods[methods].function_name}" id="{$methods[methods].function_name}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div class="method-header"> + <span class="method-title">static {$methods[methods].function_name}</span> (line <span class="line-number">{if $methods[methods].slink}{$methods[methods].slink}{else}{$methods[methods].line_number}{/if}</span>) + </div> + + {include file="docblock.tpl" sdesc=$methods[methods].sdesc desc=$methods[methods].desc tags=$methods[methods].tags params=$methods[methods].params function=false} + + <div class="method-signature"> + static <span class="method-result">{$methods[methods].function_return}</span> + <span class="method-name"> + {if $methods[methods].ifunction_call.returnsref}&{/if}{$methods[methods].function_name} + </span> + {if count($methods[methods].ifunction_call.params)} + ({section name=params loop=$methods[methods].ifunction_call.params}{if $smarty.section.params.iteration != 1}, {/if}{if $methods[methods].ifunction_call.params[params].hasdefault}[{/if}<span class="var-type">{$methods[methods].ifunction_call.params[params].type}</span> <span class="var-name">{$methods[methods].ifunction_call.params[params].name}</span>{if $methods[methods].ifunction_call.params[params].hasdefault} = <span class="var-default">{$methods[methods].ifunction_call.params[params].default}</span>]{/if}{/section}) + {else} + () + {/if} + </div> + + {if $methods[methods].params} + <ul class="parameters"> + {section name=params loop=$methods[methods].params} + <li> + <span class="var-type">{$methods[methods].params[params].datatype}</span> + <span class="var-name">{$methods[methods].params[params].var}</span>{if $methods[methods].params[params].data}<span class="var-description">: {$methods[methods].params[params].data}</span>{/if} + </li> + {/section} + </ul> + {/if} + + {if $methods[methods].method_overrides} + <hr class="separator" /> + <div class="notes">Redefinition of:</div> + <dl> + <dt>{$methods[methods].method_overrides.link}</dt> + {if $methods[methods].method_overrides.sdesc} + <dd>{$methods[methods].method_overrides.sdesc}</dd> + {/if} + </dl> + {/if} + {if $methods[methods].method_implements} + <hr class="separator" /> + <div class="notes">Implementation of:</div> + {section name=imp loop=$methods[methods].method_implements} + <dl> + <dt>{$methods[methods].method_implements[imp].link}</dt> + {if $methods[methods].method_implements[imp].sdesc} + <dd>{$methods[methods].method_implements[imp].sdesc}</dd> + {/if} + </dl> + {/section} + {/if} + + {if $methods[methods].descmethod} + <hr class="separator" /> + <div class="notes">Redefined in descendants as:</div> + <ul class="redefinitions"> + {section name=dm loop=$methods[methods].descmethod} + <li> + {$methods[methods].descmethod[dm].link} + {if $methods[methods].descmethod[dm].sdesc} + : {$methods[methods].descmethod[dm].sdesc} + {/if} + </li> + {/section} + </ul> + {/if} +</div> +{/if} +{/section} +{section name=methods loop=$methods} +{if !$methods[methods].static} +<a name="method{$methods[methods].function_name}" id="{$methods[methods].function_name}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div class="method-header"> + <span class="method-title">{if $methods[methods].ifunction_call.constructor}Constructor {elseif $methods[methods].ifunction_call.destructor}Destructor {/if}{$methods[methods].function_name}</span> (line <span class="line-number">{if $methods[methods].slink}{$methods[methods].slink}{else}{$methods[methods].line_number}{/if}</span>) + </div> + + {include file="docblock.tpl" sdesc=$methods[methods].sdesc desc=$methods[methods].desc tags=$methods[methods].tags params=$methods[methods].params function=false} + + <div class="method-signature"> + <span class="method-result">{$methods[methods].function_return}</span> + <span class="method-name"> + {if $methods[methods].ifunction_call.returnsref}&{/if}{$methods[methods].function_name} + </span> + {if count($methods[methods].ifunction_call.params)} + ({section name=params loop=$methods[methods].ifunction_call.params}{if $smarty.section.params.iteration != 1}, {/if}{if $methods[methods].ifunction_call.params[params].hasdefault}[{/if}<span class="var-type">{$methods[methods].ifunction_call.params[params].type}</span> <span class="var-name">{$methods[methods].ifunction_call.params[params].name}</span>{if $methods[methods].ifunction_call.params[params].hasdefault} = <span class="var-default">{$methods[methods].ifunction_call.params[params].default}</span>]{/if}{/section}) + {else} + () + {/if} + </div> + + {if $methods[methods].params} + <ul class="parameters"> + {section name=params loop=$methods[methods].params} + <li> + <span class="var-type">{$methods[methods].params[params].datatype}</span> + <span class="var-name">{$methods[methods].params[params].var}</span>{if $methods[methods].params[params].data}<span class="var-description">: {$methods[methods].params[params].data}</span>{/if} + </li> + {/section} + </ul> + {/if} + + {if $methods[methods].method_overrides} + <hr class="separator" /> + <div class="notes">Redefinition of:</div> + <dl> + <dt>{$methods[methods].method_overrides.link}</dt> + {if $methods[methods].method_overrides.sdesc} + <dd>{$methods[methods].method_overrides.sdesc}</dd> + {/if} + </dl> + {/if} + {if $methods[methods].method_implements} + <hr class="separator" /> + <div class="notes">Implementation of:</div> + {section name=imp loop=$methods[methods].method_implements} + <dl> + <dt>{$methods[methods].method_implements[imp].link}</dt> + {if $methods[methods].method_implements[imp].sdesc} + <dd>{$methods[methods].method_implements[imp].sdesc}</dd> + {/if} + </dl> + {/section} + {/if} + + {if $methods[methods].descmethod} + <hr class="separator" /> + <div class="notes">Redefined in descendants as:</div> + <ul class="redefinitions"> + {section name=dm loop=$methods[methods].descmethod} + <li> + {$methods[methods].descmethod[dm].link} + {if $methods[methods].descmethod[dm].sdesc} + : {$methods[methods].descmethod[dm].sdesc} + {/if} + </li> + {/section} + </ul> + {/if} +</div> +{/if} +{/section} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/page.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/page.tpl new file mode 100755 index 00000000..b5980236 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/page.tpl @@ -0,0 +1,211 @@ +{include file="header.tpl" top3=true} + +<h2 class="file-name">{$source_location}</h2> + +<a name="sec-description"></a> +<div class="info-box"> + <div class="info-box-title">Description</div> + <div class="nav-bar"> + {if $classes || $includes || $defines || $globals || $functions} + <span class="disabled">Description</span> | + {/if} + {if $classes} + <a href="#sec-classes">Classes</a> + {if $includes || $defines || $globals || $functions}|{/if} + {/if} + {if $includes} + <a href="#sec-includes">Includes</a> + {if $defines || $globals || $functions}|{/if} + {/if} + {if $defines} + <a href="#sec-constants">Constants</a> + {if $globals || $functions}|{/if} + {/if} + {if $globals} + <a href="#sec-variables">Variables</a> + {if $functions}|{/if} + {/if} + {if $functions} + <a href="#sec-functions">Functions</a> + {/if} + </div> + <div class="info-box-body"> + {include file="docblock.tpl" desc=$desc sdesc=$sdesc tags=$tags} + + {if $tutorial} + <hr class="separator" /> + <div class="notes">Tutorial: <span class="tutorial">{$tutorial}</div> + {/if} + </div> +</div> + +{if $classes} + <a name="sec-classes"></a> + <div class="info-box"> + <div class="info-box-title">Classes</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + <span class="disabled">Classes</span> + {if $includes || $defines || $globals || $functions}|{/if} + {if $includes} + <a href="#sec-includes">Includes</a> + {if $defines || $globals || $functions}|{/if} + {/if} + {if $defines} + <a href="#sec-constants">Constants</a> + {if $globals || $functions}|{/if} + {/if} + {if $globals} + <a href="#sec-variables">Variables</a> + {if $functions}|{/if} + {/if} + {if $functions} + <a href="#sec-functions">Functions</a> + {/if} + </div> + <div class="info-box-body"> + <table cellpadding="2" cellspacing="0" class="class-table"> + <tr> + <th class="class-table-header">Class</th> + <th class="class-table-header">Description</th> + </tr> + {section name=classes loop=$classes} + <tr> + <td style="padding-right: 2em; vertical-align: top"> + {$classes[classes].link} + </td> + <td> + {if $classes[classes].sdesc} + {$classes[classes].sdesc} + {else} + {$classes[classes].desc} + {/if} + </td> + </tr> + {/section} + </table> + </div> + </div> +{/if} + +{if $includes} + <a name="sec-includes"></a> + <div class="info-box"> + <div class="info-box-title">Includes</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $classes} + <a href="#sec-classes">Classes</a> + {if $includes || $defines || $globals || $functions}|{/if} + {/if} + <span class="disabled">Includes</span> + {if $defines || $globals || $functions}|{/if} + {if $defines} + <a href="#sec-constants">Constants</a> + {if $globals || $functions}|{/if} + {/if} + {if $globals} + <a href="#sec-variables">Variables</a> + {if $functions}|{/if} + {/if} + {if $functions} + <a href="#sec-functions">Functions</a> + {/if} + </div> + <div class="info-box-body"> + {include file="include.tpl"} + </div> + </div> +{/if} + +{if $defines} + <a name="sec-constants"></a> + <div class="info-box"> + <div class="info-box-title">Constants</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $classes} + <a href="#sec-classes">Classes</a> + {if $includes || $defines || $globals || $functions}|{/if} + {/if} + {if $includes} + <a href="#sec-includes">Includes</a> + {if $defines || $globals || $functions}|{/if} + {/if} + <span class="disabled">Constants</span> + {if $globals || $functions}|{/if} + {if $globals} + <a href="#sec-variables">Variables</a> + {if $functions}|{/if} + {/if} + {if $functions} + <a href="#sec-functions">Functions</a> + {/if} + </div> + <div class="info-box-body"> + {include file="define.tpl"} + </div> + </div> +{/if} + +{if $globals} + <a name="sec-variables"></a> + <div class="info-box"> + <div class="info-box-title">Variables</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $classes} + <a href="#sec-classes">Classes</a> + {if $includes || $defines || $globals || $functions}|{/if} + {/if} + {if $includes} + <a href="#sec-includes">Includes</a> + {if $defines || $globals || $functions}|{/if} + {/if} + {if $defines} + <a href="#sec-constants">Constants</a> + {if $globals || $functions}|{/if} + {/if} + <span class="disabled">Variables</span> + {if $functions}|{/if} + {if $functions} + <a href="#sec-functions">Functions</a> + {/if} + </div> + <div class="info-box-body"> + {include file="global.tpl"} + </div> + </div> +{/if} + +{if $functions} + <a name="sec-functions"></a> + <div class="info-box"> + <div class="info-box-title">Functions</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $classes} + <a href="#sec-classes">Classes</a> + {if $includes || $defines || $globals || $functions}|{/if} + {/if} + {if $includes} + <a href="#sec-includes">Includes</a> + {if $defines || $globals || $functions}|{/if} + {/if} + {if $defines} + <a href="#sec-constants">Constants</a> + {if $globals || $functions}|{/if} + {/if} + {if $globals} + <a href="#sec-variables">Variables</a> + {if $functions}|{/if} + {/if} + <span class="disabled">Functions</span> + </div> + <div class="info-box-body"> + {include file="function.tpl"} + </div> + </div> +{/if} + +{include file="footer.tpl" top3=true} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/pkgelementindex.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/pkgelementindex.tpl new file mode 100755 index 00000000..dc283ad0 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/pkgelementindex.tpl @@ -0,0 +1,17 @@ +{include file="header.tpl"} +<a name="top"></a> +<h2>[{$package}] element index</h2> +{if count($packageindex) > 1} + <h3>Package indexes</h3> + <ul> + {section name=p loop=$packageindex} + {if $packageindex[p].title != $package} + <li><a href="elementindex_{$packageindex[p].title}.html">{$packageindex[p].title}</a></li> + {/if} + {/section} + </ul> +{/if} +<a href="elementindex.html">All elements</a> +<br /> +{include file="basicindex.tpl" indexname=elementindex_$package} +{include file="footer.tpl"} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/ric.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/ric.tpl new file mode 100755 index 00000000..eff734c1 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/ric.tpl @@ -0,0 +1,6 @@ +{include file="header.tpl"} +<h1 align="center">{$name}</h1> +<pre> +{$contents|htmlentities} +</pre> +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/todolist.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/todolist.tpl new file mode 100755 index 00000000..f929ccdb --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/todolist.tpl @@ -0,0 +1,14 @@ +{include file="header.tpl" title="Todo List"} +<div align="center"><h1>Todo List</h1></div> +{foreach from=$todos key=todopackage item=todo} +<h2>{$todopackage}</h2> +{section name=todo loop=$todo} +<h3>{$todo[todo].link}</h3> +<ul> +{section name=t loop=$todo[todo].todos} + <li>{$todo[todo].todos[t]}</li> +{/section} +</ul> +{/section} +{/foreach} +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/top_frame.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/top_frame.tpl new file mode 100755 index 00000000..36d1e5a1 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/top_frame.tpl @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> + <html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <!-- template designed by Marco Von Ballmoos --> + <title>{$title}</title> + <link rel="stylesheet" href="{$subdir}media/stylesheet.css" /> + <link rel="stylesheet" href="{$subdir}media/banner.css" /> + <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/> + </head> + <body> + <div class="banner"> + <div class="banner-title">{$package}</div> + <div class="banner-menu"> + <form> + <table cellpadding="0" cellspacing="0" style="width: 100%"> + <tr> + <td> + {if count($ric) >= 1} + {assign var="last_ric_name" value=""} + {section name=ric loop=$ric} + {if $last_ric_name != ""} | {/if} + <a href="{$ric[ric].file}" target="right">{$ric[ric].name}</a> + {assign var="last_ric_name" value=$ric[ric].name} + {/section} + {/if} + </td> + <td style="width: 2em"> </td> + <td style="text-align: right"> + {if count($packages) > 1} + <span class="field">Packages</span> + <select class="package-selector" onchange="window.parent.left_bottom.location=this[selectedIndex].value"> + {section name=p loop=$packages} + <option value="{$packages[p].link}">{$packages[p].title}</option> + {/section} + </select> + {/if} + </td> + </tr> + </table> + </form> + </div> + </div> + </body> + </html> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/tutorial.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/tutorial.tpl new file mode 100755 index 00000000..3b9109d1 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/tutorial.tpl @@ -0,0 +1,13 @@ +{include file="header.tpl" title=$title top3=true} + +{if $nav} + {include file="tutorial_nav.tpl" prev=$prev next=$next up=$up prevtitle=$prevtitle nexttitle=$nexttitle uptitle=$uptitle} +{/if} + +{$contents} + +{if $nav} + {include file="tutorial_nav.tpl" prev=$prev next=$next up=$up prevtitle=$prevtitle nexttitle=$nexttitle uptitle=$uptitle} +{/if} + +{include file="footer.tpl" top3=true}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/tutorial_nav.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/tutorial_nav.tpl new file mode 100755 index 00000000..89952301 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/tutorial_nav.tpl @@ -0,0 +1,41 @@ +<table class="tutorial-nav-box"> + <tr> + <td style="width: 30%"> + {if $prev} + <a href="{$prev}" class="nav-button">Previous</a> + {else} + <span class="nav-button-disabled">Previous</span> + {/if} + </td> + <td style="text-align: center"> + {if $up} + <a href="{$up}" class="nav-button">Up</a> + {/if} + </td> + <td style="text-align: right; width: 30%"> + {if $next} + <a href="{$next}" class="nav-button">Next</a> + {else} + <span class="nav-button-disabled">Next</span> + {/if} + </td> + </tr> + <tr> + <td style="width: 30%"> + {if $prevtitle} + <span class="detail">{$prevtitle}</span> + {/if} + </td> + <td style="text-align: center"> + {if $uptitle} + <span class="detail">{$uptitle}</span> + {/if} + </td> + <td style="text-align: right; width: 30%"> + {if $nexttitle} + <span class="detail">{$nexttitle}</span> + {/if} + </td> + </tr> +</table> +
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/tutorial_toc.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/tutorial_toc.tpl new file mode 100755 index 00000000..3482249b --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/tutorial_toc.tpl @@ -0,0 +1,40 @@ +{if count($toc)} +<h1 class="title">Table of Contents</h1> +<ul class="toc"> + {assign var="lastcontext" value='refsect1'} + {section name=toc loop=$toc} + + {if $toc[toc].tagname != $lastcontext} + {if $lastcontext == 'refsect1'} + <ul class="toc"> + <li>{$toc[toc].link}</li> + {else} + {if $lastcontext == 'refsect2'} + {if $toc[toc].tagname == 'refsect1'} + </ul> + <li>{$toc[toc].link}</li> + {/if} + {if $toc[toc].tagname == 'refsect3'} + <ul class="toc"> + <li>{$toc[toc].link}</li> + {/if} + {else} + </ul> + </ul> + <li>{$toc[toc].link}</li> + {/if} + {/if} + {assign var="lastcontext" value=$toc[toc].tagname} + {else} + <li>{$toc[toc].link}</li> + {/if} + {/section} + {if $lastcontext == 'refsect2'} + </ul> + {/if} + {if $lastcontext == 'refsect3'} + </ul> + </ul> + {/if} +</ul> +{/if} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/tutorial_tree.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/tutorial_tree.tpl new file mode 100755 index 00000000..617b5654 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/tutorial_tree.tpl @@ -0,0 +1,6 @@ +<div><a href="{$main.link}" target="right">{$main.title|strip_tags}</a></div> +{if $haskids} +<div style="margin-left: 1em"> + {$kids} +</div> +{/if} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/var.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/var.tpl new file mode 100755 index 00000000..fccf6892 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/var.tpl @@ -0,0 +1,92 @@ +{section name=vars loop=$vars} +{if $vars[vars].static} +<a name="var{$vars[vars].var_name}" id="{$vars[vars].var_name}"><!-- --></A> +<div class="{cycle values="evenrow,oddrow"}"> + + <div class="var-header"> + <span class="var-title"> + static <span class="var-type">{$vars[vars].var_type}</span> + <span class="var-name">{$vars[vars].var_name}</span> + {if $vars[vars].var_default} = <span class="var-default">{$vars[vars].var_default|replace:"\n":"<br />"}</span>{/if} + (line <span class="line-number">{if $vars[vars].slink}{$vars[vars].slink}{else}{$vars[vars].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$vars[vars].sdesc desc=$vars[vars].desc tags=$vars[vars].tags} + + {if $vars[vars].var_overrides} + <hr class="separator" /> + <div class="notes">Redefinition of:</div> + <dl> + <dt>{$vars[vars].var_overrides.link}</dt> + {if $vars[vars].var_overrides.sdesc} + <dd>{$vars[vars].var_overrides.sdesc}</dd> + {/if} + </dl> + {/if} + + {if $vars[vars].descvar} + <hr class="separator" /> + <div class="notes">Redefined in descendants as:</div> + <ul class="redefinitions"> + {section name=vm loop=$vars[vars].descvar} + <li> + {$vars[vars].descvar[vm].link} + {if $vars[vars].descvar[vm].sdesc} + : {$vars[vars].descvar[vm].sdesc} + {/if} + </li> + {/section} + </ul> + {/if} + +</div> +{/if} +{/section} + +{section name=vars loop=$vars} +{if !$vars[vars].static} +<a name="var{$vars[vars].var_name}" id="{$vars[vars].var_name}"><!-- --></A> +<div class="{cycle values="evenrow,oddrow"}"> + + <div class="var-header"> + <span class="var-title"> + <span class="var-type">{$vars[vars].var_type}</span> + <span class="var-name">{$vars[vars].var_name}</span> + {if $vars[vars].var_default} = <span class="var-default">{$vars[vars].var_default|replace:"\n":"<br />"}</span>{/if} + (line <span class="line-number">{if $vars[vars].slink}{$vars[vars].slink}{else}{$vars[vars].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$vars[vars].sdesc desc=$vars[vars].desc tags=$vars[vars].tags} + + {if $vars[vars].var_overrides} + <hr class="separator" /> + <div class="notes">Redefinition of:</div> + <dl> + <dt>{$vars[vars].var_overrides.link}</dt> + {if $vars[vars].var_overrides.sdesc} + <dd>{$vars[vars].var_overrides.sdesc}</dd> + {/if} + </dl> + {/if} + + {if $vars[vars].descvar} + <hr class="separator" /> + <div class="notes">Redefined in descendants as:</div> + <ul class="redefinitions"> + {section name=vm loop=$vars[vars].descvar} + <li> + {$vars[vars].descvar[vm].link} + {if $vars[vars].descvar[vm].sdesc} + : {$vars[vars].descvar[vm].sdesc} + {/if} + </li> + {/section} + </ul> + {/if} + +</div> +{/if} +{/section} + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/options.ini b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/options.ini new file mode 100755 index 00000000..c785503d --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/options.ini @@ -0,0 +1,507 @@ +preservedocbooktags = false + +;; used to highlight the {@source} inline tag, @filesource tag, and @example tag +[highlightSourceTokens] +;; format: +;; T_CONSTANTNAME = open +;; /T_CONSTANTNAME = close +T_ABSTRACT = <font color="blue"> +/T_ABSTRACT = </font> +T_CLONE = <font color="blue"> +/T_CLONE = </font> +T_HALT_COMPILER = <font color="red"> +/T_HALT_COMPILER = </font> +T_PUBLIC = <font color="blue"> +/T_PUBLIC = </font> +T_PRIVATE = <font color="blue"> +/T_PRIVATE = </font> +T_PROTECTED = <font color="blue"> +/T_PROTECTED = </font> +T_FINAL = <font color="blue"> +/T_FINAL = </font> +T_IMPLEMENTS = <font color="blue"> +/T_IMPLEMENTS = </font> +T_CLASS = <font color="blue"> +/T_CLASS = </font> +T_INTERFACE = <font color="blue"> +/T_INTERFACE = </font> +T_INCLUDE = <font color="blue"> +/T_INCLUDE = </font> +T_INCLUDE_ONCE = <font color="blue"> +/T_INCLUDE_ONCE = </font> +T_REQUIRE_ONCE = <font color="blue"> +/T_REQUIRE_ONCE = </font> +T_FUNCTION = <font color="blue"> +/T_FUNCTION = </font> +T_VARIABLE = <strong> +/T_VARIABLE = </strong> +T_CONSTANT_ENCAPSED_STRING = <font color="#66cccc"> +/T_CONSTANT_ENCAPSED_STRING = </font> +T_COMMENT = <font color="green"> +/T_COMMENT = </font> +T_OBJECT_OPERATOR = <strong> +/T_OBJECT_OPERATOR = </strong> +T_RETURN = <font color="blue"> +/T_RETURN = </font> +T_STATIC = <font color="blue"> +/T_STATIC = </font> +T_SWITCH = <font color="blue"> +/T_SWITCH = </font> +T_IF = <font color="blue"> +/T_IF = </font> +T_FOREACH = <font color="blue"> +/T_FOREACH = </font> +T_FOR = <font color="blue"> +/T_FOR = </font> +T_VAR = <font color="blue"> +/T_VAR = </font> +T_EXTENDS = <font color="blue"> +/T_EXTENDS = </font> +T_RETURN = <font color="blue"> +/T_RETURN = </font> +T_GLOBAL = <font color="blue"> +/T_GLOBAL = </font> +T_DOUBLE_COLON = <strong> +/T_DOUBLE_COLON = </strong> +T_OBJECT_OPERATOR = <strong> +/T_OBJECT_OPERATOR = </strong> +T_OPEN_TAG = <strong> +/T_OPEN_TAG = </strong> +T_CLOSE_TAG = <strong> +/T_CLOSE_TAG = </strong> + +[highlightSource] +;; this is for highlighting things that aren't tokens like "&" +;; format: +;; word = open +;; /word = close +@ = <strong> +/@ = </strong> +& = <strong> +/& = </strong> +[ = <strong> +/[ = </strong> +] = <strong> +/] = </strong> +! = <strong> +/! = </strong> +";" = <strong> +/; = </strong> +( = <strong> +/( = </strong> +) = <strong> +/) = </strong> +, = <strong> +/, = </strong> +{ = <strong> +/{ = </strong> +} = <strong> +/} = </strong> +""" = <font color="#66cccc"> +/" = </font> + +[highlightDocBlockSourceTokens] +;; this is for docblock tokens, using by phpDocumentor_HighlightParser +;; tagphptype is for "string" in @param string description, for example +docblock = <font color="#009999"> +/docblock = </font> +tagphptype = <em> +/tagphptype = </em> +tagvarname = <strong> +/tagvarname = </strong> +coretag = <strong><font color = "#0099FF"> +/coretag = </font></strong> +tag = <strong><font color="#009999"> +/tag = </font></strong> +inlinetag = <em><font color="#0099FF"> +/inlinetag = </font></em> +internal = <em><font color = "#6699cc"> +/internal = </font></em> +closetemplate = <strong><font color="blue"> +/closetemplate = </font></strong> +docblocktemplate = <font color="blue"> +/docblocktemplate = </font color="blue"> + +[highlightTutorialSourceTokens] +;; this is for XML DocBook-based tutorials, highlighted by phpDocumentor_TutorialHighlightParser +;; <tag> +opentag = <span class="tute-tag"> +/opentag = </span> +;; </tag> +closetag = <span class="tute-tag"> +/closetag = </span> +;; <tag attribute="value"> +attribute = <span class="tute-attribute-name"> +/attribute = </span> +;; <tag attribute="value"> +attributevalue = <span class="tute-attribute-value"> +/attributevalue = </span> +;; &entity; +entity = <span class="tute-entity"> +/entity = </span> +;; <!-- comment --> +comment = <span class="tute-comment"> +/comment = </span> +;; {@inline tag} +itag = <span class="tute-inline-tag"> +/itag = </span> + +;; used for translation of html in DocBlocks +[desctranslate] +ul = <ul> +/ul = </ul> +ol = <ol> +/ol = </ol> +li = <li> +/li = </li> +code = +/code = +var = <var> +/var = </var> +samp = <samp> +/samp = </samp> +kbd = <kbd> +/kbd = </kbd> +pre = <pre> +/pre = </pre> +p = <p> +/p = </p> +b = <strong> +/b = </strong> +i = <em> +/i = </em> +br = <br /> + +[ppage] +;; this is the DocBook package page translation section. All DocBook tags +;; that have a corresponding html tag must be listed here +;; +;; examples: +;; 1) +;; tagname = newtagname +;; +;; This is the simplest case, where all attributes will be added into the +;; starting tag and the ending tag will be html/xml style </tranlatedtagname> +;; <tagname></tagname> becomes <newtagname></newtagname> and +;; <tagname attr="value"></tagname> becomes +;; <newtagname attr="value"></newtagname> +;; +;; 2) +;; tagname = newtagname +;; tagname->attr = newattrname +;; +;; in this case, everything will be like the first case, except tags like: +;; <tagname attr="value"></tagname> will become +;; <newtagname newattrname="value"></newtagname> +;; +;; 3) +;; tagname = newtagname +;; tagname->attr = newattrname +;; tagname->attr+value = newvalue +;; +;; in this case, the value is also translated to another. This can be useful +;; for instances such as focus="middle" changing to align="center" or something +;; of that nature. +;; <tagname attr="value"></tagname> will become +;; <newtagname newattrname="newvalue"></newtagname> +;; +;; 4) +;; tagname = newtagname +;; tagname->attr1 = newattrname +;; tagname->attr2 = newattrname +;; tagname->attr1+value|attr2+value = newvalue +;; +;; in this case, two attributes combine to make one new attribute, and the combined +;; value is translated into a new value +;; <tagname attr1="value1" attr2="value2"></tagname> will become +;; <newtagname newattrname="newvalue"></newtagname> +;; +;; 5) +;; tagname = newtagname +;; tagname!attr = dummy +;; +;; here, the attribute will be ignored. dummy is not used and may be any value +;; <tagname attr="value"></tagname> will become +;; <newtagname></newtagname> +;; +;; 6) +;; tagname = newtagname +;; tagname! = dummy +;; +;; here, all attributes will be ignored. dummy is not used and may be any value +;; <tagname attr1="value" attr2="foo"></tagname> will become +;; <newtagname></newtagname> +;; +;; 7) +;; tagname = newtagname +;; tagname/ = 1 +;; +;; here, the tag will be translated as a single tag with no closing tag, and all +;; attributes +;; <tagname attr="val">{text text}</tagname> will become +;; <newtagname attr="val" /> +;; +;; 8) +;; tagname = <starttaginfo /> +;; /tagname = closetagtext +;; +;; in this case, the text <starttaginfo> will be inserted exactly as entered for +;; <tagname> and closetagtext for </tagname> +;; <tagname attr="val"></tagname> will become +;; <starttaginfo />closetagtext +;; +;; 9) +;; $attr$my_attribute = newattrname +;; +;; tagname = newtagname +;; +;; in this case, all occurences of my_attribute in any tag will be changed to +;; newattrname. This is useful for changing things like role="php" to +;; class="php," for example. Note that the text "$attr$" MUST be on the line +;; start for phpDocumentor to recognize it. +;; +;; 10) +;; &entity; = translation text +;; " = " +;; " = """ +;; < = < +;; +;; Use this to control translation of entities to their appropriate values + + = +" = " +” = ” +“ = “ +& = & +< = < +> = > +© = © + +$attr$role = class + +abbrev = abbr + +blockquote = blockquote + +arg = span +arg->choice = class + +author = <font size="-1"><strong>by <em> +/author = </em></strong></font> +author! = 0 + +authorblurb = blockquote + +authorgroup = <strong>Authors:</strong><br /> +/authorgroup = +authorgroup! = 0 + +caution = <table border="1"><th align="center">Caution</th><tr><td> +/caution = </td></tr></table> +caution! = 0 + +command = <b class="cmd"> +/command = </b> + +cmdsynopsis = <div id="cmdsynopsis"> +/cmdsynopsis = </div> + +copyright = <em> +/copyright = </em><br /> + +emphasis = strong + +example = <table class="src-code" width="100%" border="1"><tr><td> +/example = </td></tr></table> +example! = 0 + +function = +/function = () + +formalpara = p + +graphic = img +graphic->fileref = src +graphic/ = + +important = u + +informalequation = blockquote + +informalexample = pre + +inlineequation = em + +itemizedlist = ul + +listitem = li + +literal = code + +literallayout = pre + +option = " " +/option = + +orderedlist = ol + +para = p + +programlisting = <table border="0" bgcolor="#E0E0E0" cellpadding="5"><tr><td><div class="src-code"> +/programlisting = </div></td></tr></table> +programlisting! = 0 + +refentry = div + +refnamediv = <div class="refname"> +/refnamediv = </div> +refnamediv! = 0 + +refname = h1 + +refpurpose = <h2 class="refpurpose"><em> +/refpurpose = </em></h2> + +refsynopsisdiv = <div class="refsynopsis"> +/refsynopsisdiv = </div> +refsynopsisdiv! = 0 + +refsect1 = span + +refsect2 = +/refsect2 = <hr /> + +refsect3 = +/refsect3 = <br /> + +releaseinfo = ( +/releaseinfo = )<br /> + +simpara = +/simpara = <br /> +simpara! = 0 + +subscript = sub + +superscript = super + +table = table + +table->colsep = rules +table->rowsep = rules +table->colsep+1|rowsep+1 = all +table->colsep+1|rowsep+0 = cols +table->colsep+0|rowsep+1 = rows + +table->frame = frame +table->frame+all = border +table->frame+none = void +table->frame+sides = vsides +table->frame+top = above +table->frame+topbot = hsides + +thead = thead + +tfoot = tfoot + +tbody = tbody + +colspec = col + +tgroup = colgroup +tgroup/ = 1 +tgroup->cols = span + +row = tr + +entry = td +entry->morerows = colspan +entry->morerows+1 = 2 +entry->morerows+2 = 3 +entry->morerows+3 = 4 +entry->morerows+4 = 5 +entry->morerows+5 = 6 +entry->morerows+6 = 7 +entry->morerows+7 = 8 +entry->morerows+8 = 9 +entry->morerows+9 = 10 +entry->morerows+10 = 11 +;; add more if you need more colspans + +warning = <table border="1"><tr><td> +/warning = </td></tr></table> +warning! = 0 + +;; now begins the attributes that should be tags in cdata +[$attr$id] +open = a +;close = /a +cdata! = true +quotevalues = true +separator = "=" +;separateall = true +$id = name + +;; now begins the sections that deal with <title> +[refsynopsisdiv_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h1 class="title" align="center"> +close = </h1> + +[refsect1_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h2 class="title" align="center"> +close = </h1> + +[refsect2_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h2 class="title" align="center"> +close = </h2> + +[refsect3_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h3 class="title" align="center"> +close = </h3> + +[para_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <strong class="title" align="center"> +close = </strong> + +[formalpara_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <strong class="title" align="center"> +close = </strong> + +[example_title] +;tag_attr = true +;attr_name = title +;cdata_start = true +cdata_end = true +open = </td></tr><tr><td><strong> +close = </strong> + +[table_title] +;tag_attr = true +;attr_name = true +cdata_start = true +open = <caption> +close = </caption> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/basicindex.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/basicindex.tpl new file mode 100755 index 00000000..f6f906cc --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/basicindex.tpl @@ -0,0 +1,24 @@ +{section name=letter loop=$letters} + <a href="{$indexname}.html#{$letters[letter].letter}">{$letters[letter].letter}</a> +{/section} + +<br /><br /> +<table border="0" width="100%"> +{section name=index loop=$index} +<thead> + <tr> + <td><strong>{$index[index].letter}</strong></td> + <td align='right'><a name="{$index[index].letter}"> </a> + <a href="#top">top</a><br /></td> + </tr> +</thead> +<tbody> + {section name=contents loop=$index[index].index} + <tr> + <td> <strong>{$index[index].index[contents].name}</strong></td> + <td width="100%" align="left" valign="top">{$index[index].index[contents].listing}</td> + </tr> + {/section} +</tbody> +{/section} +</table> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/blank.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/blank.tpl new file mode 100755 index 00000000..6a05f27e --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/blank.tpl @@ -0,0 +1,13 @@ +<html> +<head> + <title>{$maintitle}</title> + <link rel="stylesheet" href="{$subdir}media/stylesheet.css" /> + <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/> +</head> +<body> +<div align="center"><h1>{$maintitle}</h1></div> +<b>Welcome to {$package}!</b><br /> +<br /> +This documentation was generated by <a href="{$phpdocwebsite}">phpDocumentor v{$phpdocversion}</a><br /> +</body> +</html>
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/class.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/class.tpl new file mode 100755 index 00000000..b9dda927 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/class.tpl @@ -0,0 +1,95 @@ +{include file="header.tpl" top3=true} +<!-- Start of Class Data --> +<h2> + {if $is_interface}Interface{else}Class{/if} {$class_name} +</h2> (line <span class="linenumber">{if $class_slink}{$class_slink}{else}{$line_number}{/if}</span>) +<div class="tab-pane" id="tabPane1"> +<script type="text/javascript"> +tp1 = new WebFXTabPane( document.getElementById( "tabPane1" )); +</script> + +<div class="tab-page" id="Description"> +<h2 class="tab">Description</h2> +<pre> +{section name=tree loop=$class_tree.classes}{$class_tree.classes[tree]}{$class_tree.distance[tree]}{/section} +</pre> +{if $tutorial} +<div class="maintutorial">Class Tutorial: {$tutorial}</div> +{/if} +{if $conflicts.conflict_type} + <div align="left"><span class="font10bold" style="color:#FF0000">Warning:</span> Conflicts with classes:<br /> + {section name=me loop=$conflicts.conflicts} + {$conflicts.conflicts[me]}<br /> + {/section} + </div> +{/if} +<p> + <b><i>Located in File: <a href="{$page_link}">{$source_location}</a></i></b><br> +</p> +{include file="docblock.tpl" type="class" sdesc=$sdesc desc=$desc} +<br /><hr /> +{if $children} +<span class="type">Classes extended from {$class_name}:</span> + {section name=kids loop=$children} + <dl> + <dt>{$children[kids].link}</dt> + <dd>{$children[kids].sdesc}</dd> + </dl> + {/section}</p> +{/if} +</div> +<script type="text/javascript">tp1.addTabPage( document.getElementById( "Description" ) );</script> +<div class="tab-page" id="tabPage1"> +{include file="var.tpl"} +</div> +<div class="tab-page" id="constantsTabpage"> +{include file="const.tpl"} +</div> +<div class="tab-page" id="tabPage2"> +{include file="method.tpl"} +</div> +<div class="tab-page" id="iVars"> +<h2 class="tab">Inherited Variables</h2> +<script type="text/javascript">tp1.addTabPage( document.getElementById( "iVars" ) );</script> +<!-- =========== VAR INHERITED SUMMARY =========== --> +<A NAME='var_inherited_summary'><!-- --></A> +<h3>Inherited Class Variable Summary</h3> + + {section name=ivars loop=$ivars} + <!-- =========== Summary =========== --> + <h4>Inherited From Class {$ivars[ivars].parent_class}</h4> + {section name=ivars2 loop=$ivars[ivars].ivars} + <h4> +<img src="{$subdir}media/images/PublicProperty.gif" border="0" /><strong class="property"> {$ivars[ivars].ivars[ivars2].link}</strong> - {$ivars[ivars].ivars[ivars2].sdesc} + </h4> + {/section} + {/section} +</div> +<div class="tab-page" id="iMethods"> +<h2 class="tab">Inherited Methods</h2> +<script type="text/javascript">tp1.addTabPage( document.getElementById( "iMethods" ) );</script> +<!-- =========== INHERITED METHOD SUMMARY =========== --> +<A NAME='functions_inherited'><!-- --></A> +<h3>Inherited Method Summary</h3> + + {section name=imethods loop=$imethods} + <!-- =========== Summary =========== --> + <h4>Inherited From Class {$imethods[imethods].parent_class}</h4> + {section name=im2 loop=$imethods[imethods].imethods} + <h4> +<img src="{$subdir}media/images/{if $imethods[imethods].imethods[im2].constructor}Constructor{elseif $imethods[imethods].imethods[im2].destructor}Destructor{else}PublicMethod{/if}.gif" border="0" /><strong class="method"> {$imethods[imethods].imethods[im2].link}</strong> - {$imethods[imethods].imethods[im2].sdesc} + </h4> + + {/section} + <br /> + {/section} +</div> +</div> +<script type="text/javascript"> +//<![CDATA[ + +setupAllTabs(); + +//]]> +</script> +{include file="footer.tpl"} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/classtrees.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/classtrees.tpl new file mode 100755 index 00000000..952e6d50 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/classtrees.tpl @@ -0,0 +1,19 @@ +{include file="header.tpl" top1=true} + +<!-- Start of Class Data --> +<H2> + {$smarty.capture.title} +</H2> +{if $interfaces} +{section name=classtrees loop=$interfaces} +<h2>Root interface {$interfaces[classtrees].class}</h2> +{$interfaces[classtrees].class_tree} +{/section} +{/if} +{if $classtrees} +{section name=classtrees loop=$classtrees} +<h2>Root class {$classtrees[classtrees].class}</h2> +{$classtrees[classtrees].class_tree} +{/section} +{/if} +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/const.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/const.tpl new file mode 100644 index 00000000..d9f36e58 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/const.tpl @@ -0,0 +1,21 @@ + +<h2 class="tab">Class Constants</h2> +<!-- ============ VARIABLE DETAIL =========== --> +<strong>Summary:</strong><br /> +{section name=consts loop=$consts} +<div class="const-title"> + <a href="#{$consts[consts].const_dest}" title="details" class="property"><strong>{$consts[consts].const_name}</strong></a> +</div> +{/section} +<hr /> +{section name=consts loop=$consts} +<a name="{$consts[consts].const_dest}" id="{$consts[consts].const_dest}"><!-- --></A> +<div style="background='{cycle values="#ffffff,#eeeeee"}'"> +<h4> +<img src="{$subdir}media/images/Constant.gif" border="0" /> <strong class="property">{$consts[consts].const_name} = {$consts[consts].const_value|replace:"\n":"<br />"}</strong> (line <span class="linenumber">{if $consts[consts].slink}{$consts[consts].slink}{else}{$consts[consts].line_number}{/if}</span>) + </h4> +{include file="docblock.tpl" sdesc=$consts[consts].sdesc desc=$consts[consts].desc tags=$consts[consts].tags} +</div> +{/section} +<script type="text/javascript">tp1.addTabPage( document.getElementById( "constantsTabpage" ) );</script> + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/define.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/define.tpl new file mode 100755 index 00000000..68339e53 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/define.tpl @@ -0,0 +1,24 @@ +<!-- ============ CONSTANT DETAIL =========== --> + +<A NAME='constant_detail'></A> +<h2 class="tab">Constants</h2> + +<script type="text/javascript">tp1.addTabPage( document.getElementById( "tabPage3" ) );</script> + +{section name=def loop=$defines} +<a name="{$defines[def].define_link}"><!-- --></a> +<div style="background='{cycle values="#ffffff,#eeeeee"}'"> +<h4> + <img src="{$subdir}media/images/Constant.gif" border="0" /> <strong class="property">{$defines[def].define_name}</strong> (line <span class="linenumber">{if $defines[def].slink}{$defines[def].slink}{else}{$defines[def].line_number}{/if}</span>) + </h4> +<h4>{$defines[def].define_name} : {$defines[def].define_value|replace:"\n":"<br />"}</h4> +{if $defines[def].define_conflicts.conflict_type} + <p><span class="warning">Warning:</span> Conflicts with constants:<br /> + {section name=me loop=$defines[def].define_conflicts.conflicts} + {$defines[def].define_conflicts.conflicts[me]}<br /> + {/section} + </p> +{/if} +{include file="docblock.tpl" sdesc=$defines[def].sdesc desc=$defines[def].desc tags=$defines[def].tags} +</div> +{/section}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/docblock.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/docblock.tpl new file mode 100755 index 00000000..7b1e17d7 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/docblock.tpl @@ -0,0 +1,30 @@ +<!-- ========== Info from phpDoc block ========= --> +{if $sdesc} +<h5>{$sdesc}</h5> +{/if} +{if $desc} +<div class="desc">{$desc}</div> +{/if} +{if $function} + {if $params} + <h4>Parameters</h4> + <ul> + {section name=params loop=$params} + <li><strong>{$params[params].datatype} {$params[params].var}</strong>: {$params[params].data}</li> + {/section} + </ul> + {/if} + + <h4>Info</h4> + <ul> + {section name=tags loop=$tags} + <li><strong>{$tags[tags].keyword}</strong> - {$tags[tags].data}</li> + {/section} + </ul> +{else} +<ul> + {section name=tags loop=$tags} + <li><strong>{$tags[tags].keyword}:</strong> - {$tags[tags].data}</li> + {/section} +</ul> +{/if} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/elementindex.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/elementindex.tpl new file mode 100755 index 00000000..fcb310a8 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/elementindex.tpl @@ -0,0 +1,13 @@ +{include file="header.tpl" noleftindex=true} +<a name="top"></a> +<h1>Index of All Elements</h1> +<a name="top"> </a> +<strong>Indexes by package:</strong><br /> +<ul> +{section name=p loop=$packageindex} +<li><a href="elementindex_{$packageindex[p].title}.html">{$packageindex[p].title}</a></li> +{/section} +</ul> +<br /> +{include file="basicindex.tpl" indexname="elementindex"} +{include file="footer.tpl"} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/errors.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/errors.tpl new file mode 100755 index 00000000..0f526584 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/errors.tpl @@ -0,0 +1,21 @@ +{include file="header.tpl" noleftindex=true} +{section name=files loop=$files} +<a href="#{$files[files].file}">{$files[files].file}</a><br> +{/section} +{foreach key=file item=issues from=$all} +<a name="{$file}"></a> +<h1>{$file}</h1> +{if count($issues.warnings)} +<h2>Warnings:</h2><br> +{section name=warnings loop=$issues.warnings} +<b>{$issues.warnings[warnings].name}</b> - {$issues.warnings[warnings].listing}<br> +{/section} +{/if} +{if count($issues.errors)} +<h2>Errors:</h2><br> +{section name=errors loop=$issues.errors} +<b>{$issues.errors[errors].name}</b> - {$issues.errors[errors].listing}<br> +{/section} +{/if} +{/foreach} +{include file="footer.tpl"} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/examplesource.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/examplesource.tpl new file mode 100755 index 00000000..5aef23d7 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/examplesource.tpl @@ -0,0 +1,6 @@ +{include file="header.tpl" title=$title} +<h1 align="center">{$title}</h1> +<div class="src-code"> +{$source} +</div> +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/filesource.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/filesource.tpl new file mode 100755 index 00000000..3d93199e --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/filesource.tpl @@ -0,0 +1,8 @@ +{capture name="tutle"}File Source for {$name}{/capture} +{include file="header.tpl" title=$smarty.capture.tutle} +<h1 align="center">Source for file {$name}</h1> +<p>Documentation is available at {$docs}</p> +<div class="src-code"> +{$source} +</div> +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/footer.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/footer.tpl new file mode 100755 index 00000000..9088c4fc --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/footer.tpl @@ -0,0 +1,8 @@ +{if !$index} + <div id="credit"> + <hr /> + Documentation generated on {$date} by <a href="{$phpdocwebsite}" target="_blank">phpDocumentor {$phpdocversion}</a> + </div> +{/if} +</body> +</html> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/function.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/function.tpl new file mode 100755 index 00000000..6348dd0e --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/function.tpl @@ -0,0 +1,29 @@ +<!-- ============ FUNCTION DETAIL =========== --> + +<h2 class="tab">Functions</h2> + +<script type="text/javascript">tp1.addTabPage( document.getElementById( "tabPage4" ) );</script> + +{section name=func loop=$functions} +<a name="{$functions[func].function_dest}" id="{$functions[func].function_dest}"><!-- --></a> +<div style="background='{cycle values="#ffffff,#eeeeee"}'"> +<h4> + <img src="{$subdir}media/images/PublicMethod.gif" border="0" /> <strong class="method">{$functions[func].function_name}</strong> (line <span class="linenumber">{if $functions[func].slink}{$functions[func].slink}{else}{$functions[func].line_number}{/if}</span>) + </h4> +<h4><i>{$functions[func].function_return}</i> <strong>{if $functions[func].ifunction_call.returnsref}&{/if}{$functions[func].function_name}( +{if count($functions[func].ifunction_call.params)} +{section name=params loop=$functions[func].ifunction_call.params} +{if $smarty.section.params.iteration != 1}, {/if}{if $functions[func].ifunction_call.params[params].hasdefault}[{/if}{$functions[func].ifunction_call.params[params].type} {$functions[func].ifunction_call.params[params].name}{if $functions[func].ifunction_call.params[params].hasdefault} = {$functions[func].ifunction_call.params[params].default|escape:"html"}]{/if} +{/section} +{/if})</strong></h4> +{if $functions[func].function_conflicts.conflict_type} +<div align="left"><span class="warning">Warning:</span> Conflicts with functions:<br /> +{section name=me loop=$functions[func].function_conflicts.conflicts} +{$functions[func].function_conflicts.conflicts[me]}<br /> +{/section} +</div> +{/if} + +{include file="docblock.tpl" sdesc=$functions[func].sdesc desc=$functions[func].desc tags=$functions[func].tags params=$functions[func].params function=true} +</div> +{/section} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/global.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/global.tpl new file mode 100755 index 00000000..42303bf1 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/global.tpl @@ -0,0 +1,24 @@ +<!-- ============ GLOBAL DETAIL =========== --> + +<h2 class="tab">Global Variables</h2> + +<script type="text/javascript">tp1.addTabPage( document.getElementById( "tabPage2" ) );</script> + +{section name=glob loop=$globals} +<a name="{$globals[glob].global_link}" id="{$globals[glob].global_link}"><!-- --></a> +<div style="background='{cycle values="#ffffff,#eeeeee"}'"> +<h4> + <img src="{$subdir}media/images/Constants.gif" border="0" /> <strong class="Property">{$globals[glob].global_name}</strong> (line <span class="linenumber">{if $globals[glob].slink}{$globals[glob].slink}{else}{$globals[glob].line_number}{/if}</span>) + </h4> +<h4><i>{$globals[glob].global_type}</i> {$globals[glob].global_name} : {$globals[glob].global_value|replace:"\n":"<br />"}</h4> +{if $globals[glob].global_conflicts.conflict_type} + <p><span class="warning">Warning:</span> Conflicts with global variables:<br /> + {section name=me loop=$globals[glob].global_conflicts.conflicts} + {$globals[glob].global_conflicts.conflicts[me]}<br /> + {/section} + </p> +{/if} + +{include file="docblock.tpl" sdesc=$globals[glob].sdesc desc=$globals[glob].desc tags=$globals[glob].tags} +</div> +{/section}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/header.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/header.tpl new file mode 100755 index 00000000..378f67e3 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/header.tpl @@ -0,0 +1,97 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE html + PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> + <html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <title>{$title}</title> + <link rel="stylesheet" href="{$subdir}media/stylesheet.css" /> +{if $top2 || $top3} + <script src="{$subdir}media/lib/classTree.js"></script> +<link id="webfx-tab-style-sheet" type="text/css" rel="stylesheet" href="{$subdir}media/lib/tab.webfx.css" /> +<script type="text/javascript" src="{$subdir}media/lib/tabpane.js"></script> +{/if} +{if $top2} + <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/> +{/if} +{if $top3 || $top2} + <script language="javascript" type="text/javascript" src="{$subdir}media/lib/ua.js"></script> +<script language="javascript" type="text/javascript"> + var imgPlus = new Image(); + var imgMinus = new Image(); + imgPlus.src = "{$subdir}media/images/plus.gif"; + imgMinus.src = "{$subdir}media/images/minus.gif"; + + function showNode(Node){ldelim} + switch(navigator.family){ldelim} + case 'nn4': + // Nav 4.x code fork... + var oTable = document.layers["span" + Node]; + var oImg = document.layers["img" + Node]; + break; + case 'ie4': + // IE 4/5 code fork... + var oTable = document.all["span" + Node]; + var oImg = document.all["img" + Node]; + break; + case 'gecko': + // Standards Compliant code fork... + var oTable = document.getElementById("span" + Node); + var oImg = document.getElementById("img" + Node); + break; + {rdelim} + oImg.src = imgMinus.src; + oTable.style.display = "block"; + {rdelim} + + function hideNode(Node){ldelim} + switch(navigator.family){ldelim} + case 'nn4': + // Nav 4.x code fork... + var oTable = document.layers["span" + Node]; + var oImg = document.layers["img" + Node]; + break; + case 'ie4': + // IE 4/5 code fork... + var oTable = document.all["span" + Node]; + var oImg = document.all["img" + Node]; + break; + case 'gecko': + // Standards Compliant code fork... + var oTable = document.getElementById("span" + Node); + var oImg = document.getElementById("img" + Node); + break; + {rdelim} + oImg.src = imgPlus.src; + oTable.style.display = "none"; + {rdelim} + + function nodeIsVisible(Node){ldelim} + switch(navigator.family){ldelim} + case 'nn4': + // Nav 4.x code fork... + var oTable = document.layers["span" + Node]; + break; + case 'ie4': + // IE 4/5 code fork... + var oTable = document.all["span" + Node]; + break; + case 'gecko': + // Standards Compliant code fork... + var oTable = document.getElementById("span" + Node); + break; + {rdelim} + return (oTable && oTable.style.display == "block"); + {rdelim} + + function toggleNodeVisibility(Node){ldelim} + if (nodeIsVisible(Node)){ldelim} + hideNode(Node); + {rdelim}else{ldelim} + showNode(Node); + {rdelim} + {rdelim} +</script> +{/if} +<!-- template designed by Julien Damon based on PHPEdit's generated templates, and tweaked by Greg Beaver --> +<body bgcolor="#ffffff" {if $top2} topmargin="3" leftmargin="3" rightmargin="2" bottommargin="3"{/if}> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/include.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/include.tpl new file mode 100755 index 00000000..56e66a9d --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/include.tpl @@ -0,0 +1,16 @@ +<!-- ============ Includes DETAIL =========== --> + +<h2 class="tab">Include/Require Statements</h2> +<script type="text/javascript">tp1.addTabPage( document.getElementById( "tabPage1" ) );</script> + + +{section name=includes loop=$includes} +<a name="{$includes[includes].include_file}"><!-- --></a> +<div style="background='{cycle values="#ffffff,#eeeeee"}'"> +<h4> + <img src="{$subdir}media/images/file.png" border="0" /> <strong class="Property">{$includes[includes].include_value}</strong> (line <span class="linenumber">{if $includes[includes].slink}{$includes[includes].slink}{else}{$includes[includes].line_number}{/if}</span>) + </h4> +<h4>{$includes[includes].include_name} : {$includes[includes].include_value}</h4> +{include file="docblock.tpl" sdesc=$includes[includes].sdesc desc=$includes[includes].desc tags=$includes[includes].tags} +</div> +{/section}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/index.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/index.tpl new file mode 100755 index 00000000..a0ade4f5 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/index.tpl @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE html + PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//FR" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"> + <html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <!-- Generated by phpDocumentor on {$date} --> + <title>{$title}</title> + <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/> +</head> + +<FRAMESET cols='220,*'> + <FRAMESET rows='220,*'> + <FRAME src='packages.html' name='left_top'> + <FRAME src='{$start}' name='left_bottom'> + </FRAMESET> + <FRAME src='{$blank}.html' name='right'> + <NOFRAMES> + <H2>Frame Alert</H2> + <P>This document is designed to be viewed using the frames feature. + If you see this message, you are using a non-frame-capable web client.</P> + </NOFRAMES> +</FRAMESET> +</HTML> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/left_frame.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/left_frame.tpl new file mode 100755 index 00000000..dd5f2607 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/left_frame.tpl @@ -0,0 +1,166 @@ +{include file="header.tpl" top2=true} +{if $hastodos} +<div id="todolist"> +<p><a href="{$todolink}" target="right">Todo List</a></p> +</div> +{/if} +<h3>Navigation: {$info.0.package}</h3> +<script language="Javascript"> +if (document.getElementById) {ldelim} +{section name=p loop=$info} +{if $info[p].subpackage == ""} +{if $info[p].packagetutorial} + var tree = new WebFXTree('Help : {$info[p].packagetutorialtitle|strip_tags}', '{$info[p].packagetutorialnoa}'); +{else} + var tree = new WebFXTree('Help : {$info[p].package}', '{$info[p].packagedoc}.html'); +{/if} + tree.setBehavior('classic'); + tree.openIcon = 'media/images/Disk.gif'; + tree.icon = 'media/images/Disk.gif'; + + var elements = new WebFXTreeItem('Index of elements', '{$elementindex}.html'); + elements.openIcon = 'media/images/file.png'; + elements.icon = 'media/images/file.png'; + tree.add(elements); + + var tree_function = new WebFXTreeItem('Function(s)', '{$packagedoc}'); + tree_function.openIcon = 'media/images/Functions.gif'; + tree_function.icon = 'media/images/Functions.gif'; + {section name=nonclass loop=$info[p].functions} + var fic = new WebFXTreeItem('{$info[p].functions[nonclass].title}', '{$info[p].functions[nonclass].link}'); + fic.openIcon = 'media/images/PublicMethod.gif'; + fic.icon = 'media/images/PublicMethod.gif'; + tree_function.add(fic); + {/section} + tree.add(tree_function); + + var tree_interface = new WebFXTreeItem('Interface(s)', '{$classtreepage}.html'); + tree_interface.openIcon = 'media/images/classFolder.gif'; + tree_interface.icon = 'media/images/classFolder.gif'; + {section name=class loop=$info[p].classes} + {if $info[p].classes[class].is_interface} + var classe = new WebFXTreeItem('{$info[p].classes[class].title}', '{$info[p].classes[class].link}'); + classe.openIcon = 'media/images/Class.gif'; + classe.icon = 'media/images/Class.gif'; + tree_interface.add(classe); + {/if} + {/section} + tree.add(tree_interface); + + var tree_classe = new WebFXTreeItem('Class(es)', '{$classtreepage}.html'); + tree_classe.openIcon = 'media/images/classFolder.gif'; + tree_classe.icon = 'media/images/classFolder.gif'; + {section name=class loop=$info[p].classes} + {if $info[p].classes[class].is_class} + var classe = new WebFXTreeItem('{$info[p].classes[class].title}', '{$info[p].classes[class].link}'); + classe.openIcon = 'media/images/Class.gif'; + classe.icon = 'media/images/Class.gif'; + tree_classe.add(classe); + {/if} + {/section} + tree.add(tree_classe); + + var tree_file = new WebFXTreeItem('File(s)', '{$packagedoc}'); + tree_file.openIcon = 'media/images/FolderOpened.gif'; + tree_file.icon = 'media/images/foldericon.png'; + {section name=nonclass loop=$info[p].files} + var file = new WebFXTreeItem('{$info[p].files[nonclass].title}', '{$info[p].files[nonclass].link}'); + file.openIcon = 'media/images/file.png'; + file.icon = 'media/images/file.png'; + tree_file.add(file); + {/section} + tree.add(tree_file); +{else} +{if $info[p].subpackagetutorial} + var subpackagetree = new WebFXTreeItem('Subpackage : {$info[p].subpackagetutorialtitle|strip_tags}', '{$info[p].subpackagetutorialnoa}'); +{else} + var subpackagetree = new WebFXTreeItem('Subpackage : {$info[p].subpackage}', '{$packagedoc}'); +{/if} + subpackagetree.openIcon = 'media/images/Disk.gif'; + subpackagetree.icon = 'media/images/Disk.gif'; + + var subpackagetree_function = new WebFXTreeItem('Function(s)', '{$packagedoc}'); + subpackagetree_function.openIcon = 'media/images/Functions.gif'; + subpackagetree_function.icon = 'media/images/Functions.gif'; + {section name=nonclass loop=$info[p].functions} + var fic = new WebFXTreeItem('{$info[p].functions[nonclass].title}', '{$info[p].functions[nonclass].link}'); + fic.openIcon = 'media/images/PublicMethod.gif'; + fic.icon = 'media/images/PublicMethod.gif'; + subpackagetree_function.add(fic); + {/section} + subpackagetree.add(subpackagetree_function); + + var subpackagetree_classe = new WebFXTreeItem('Class(es)', '{$classtreepage}.html'); + subpackagetree_classe.openIcon = 'media/images/classFolder.gif'; + subpackagetree_classe.icon = 'media/images/classFolder.gif'; + {section name=class loop=$info[p].classes} + var classe = new WebFXTreeItem('{$info[p].classes[class].title}', '{$info[p].classes[class].link}'); + classe.openIcon = 'media/images/Class.gif'; + classe.icon = 'media/images/Class.gif'; + subpackagetree_classe.add(classe); + {/section} + subpackagetree.add(subpackagetree_classe); + + var subpackagetree_file = new WebFXTreeItem('File(s)', '{$packagedoc}'); + subpackagetree_file.openIcon = 'media/images/FolderOpened.gif'; + subpackagetree_file.icon = 'media/images/foldericon.png'; + {section name=nonclass loop=$info[p].files} + var file = new WebFXTreeItem('{$info[p].files[nonclass].title}', '{$info[p].files[nonclass].link}'); + file.openIcon = 'media/images/file.png'; + file.icon = 'media/images/file.png'; + subpackagetree_file.add(file); + {/section} + subpackagetree.add(subpackagetree_file); + + tree.add(subpackagetree); +{/if} +{/section} + document.write(tree); +{rdelim} +</script> +<br /> +{if $hastutorials} +<div class="tutorialist"> +{section name=p loop=$info} +{if count($info[p].tutorials)} +<h3>Tutorials/Manuals:{if $info[p].subpackage} {$info[p].subpackage}{/if}</h3> +{if $info[p].tutorials.pkg} +<strong>Package-level:</strong> +<script language="Javascript"> +if (document.getElementById) {ldelim} +{section name=ext loop=$info[p].tutorials.pkg} +{$info[p].tutorials.pkg[ext]} +{/section} +{rdelim} +</script> +{/if} +{if $info[p].tutorials.cls} +<strong>Class-level:</strong> +<script language="Javascript"> +if (document.getElementById) {ldelim} +{section name=ext loop=$info[p].tutorials.cls} +{$info[p].tutorials.cls[ext]} +{/section} +{rdelim} +</script> +{/if} +{if $info[p].tutorials.proc} +<strong>Procedural-level:</strong> +<script language="Javascript"> +if (document.getElementById) {ldelim} +{section name=ext loop=$info[p].tutorials.proc} +{$info[p].tutorials.proc[ext]} +{/section} +{rdelim} +{/if} +</script> +{/if} +{/section} +{/if} +</div> +<br /> +<span CLASS="small"><a href="{$phpdocwebsite}" target="_blank">phpDocumentor v <b>{$phpdocversion}</b></a><br /> +<br /> +<i>HTML layout inspired by </i><a href="http://www.phpedit.com" target="right">PHPEdit</a></span> +</body> +</html> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Class.gif b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Class.gif Binary files differnew file mode 100755 index 00000000..ada36bbb --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Class.gif diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Constant.gif b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Constant.gif Binary files differnew file mode 100755 index 00000000..d9ca9cfa --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Constant.gif diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Constants.gif b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Constants.gif Binary files differnew file mode 100755 index 00000000..eba8d08f --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Constants.gif diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Constructor.gif b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Constructor.gif Binary files differnew file mode 100755 index 00000000..f153cfb4 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Constructor.gif diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Destructor.gif b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Destructor.gif Binary files differnew file mode 100755 index 00000000..bf3d62b3 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Destructor.gif diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Disk.gif b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Disk.gif Binary files differnew file mode 100755 index 00000000..7ab08fd0 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Disk.gif diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/FolderClosed.gif b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/FolderClosed.gif Binary files differnew file mode 100755 index 00000000..68c6563c --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/FolderClosed.gif diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/FolderOpened.gif b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/FolderOpened.gif Binary files differnew file mode 100755 index 00000000..8b012d55 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/FolderOpened.gif diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Functions.gif b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Functions.gif Binary files differnew file mode 100755 index 00000000..bc2def80 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Functions.gif diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/GhostClass.gif b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/GhostClass.gif Binary files differnew file mode 100755 index 00000000..44124540 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/GhostClass.gif diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/I.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/I.png Binary files differnew file mode 100755 index 00000000..e8512fb9 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/I.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/L.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/L.png Binary files differnew file mode 100755 index 00000000..eb334eda --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/L.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Lminus.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Lminus.png Binary files differnew file mode 100755 index 00000000..f7c43c0a --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Lminus.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Lplus.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Lplus.png Binary files differnew file mode 100755 index 00000000..848ec2fc --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Lplus.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/PrivateDataMember.gif b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/PrivateDataMember.gif Binary files differnew file mode 100755 index 00000000..346380de --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/PrivateDataMember.gif diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/PrivateMethod.gif b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/PrivateMethod.gif Binary files differnew file mode 100755 index 00000000..dcd2b203 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/PrivateMethod.gif diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/PrivateProperty.gif b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/PrivateProperty.gif Binary files differnew file mode 100755 index 00000000..a21fffa0 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/PrivateProperty.gif diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/ProtectedDataMember.gif b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/ProtectedDataMember.gif Binary files differnew file mode 100755 index 00000000..882fa7db --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/ProtectedDataMember.gif diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/ProtectedMethod.gif b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/ProtectedMethod.gif Binary files differnew file mode 100755 index 00000000..b25197b2 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/ProtectedMethod.gif diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/ProtectedProperty.gif b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/ProtectedProperty.gif Binary files differnew file mode 100755 index 00000000..94892fe4 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/ProtectedProperty.gif diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/PublicDataMember.gif b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/PublicDataMember.gif Binary files differnew file mode 100755 index 00000000..5a799e0c --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/PublicDataMember.gif diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/PublicMethod.gif b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/PublicMethod.gif Binary files differnew file mode 100755 index 00000000..571fd9ce --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/PublicMethod.gif diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/PublicProperty.gif b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/PublicProperty.gif Binary files differnew file mode 100755 index 00000000..634ff5cb --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/PublicProperty.gif diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/T.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/T.png Binary files differnew file mode 100755 index 00000000..30173254 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/T.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Tminus.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Tminus.png Binary files differnew file mode 100755 index 00000000..2260e424 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Tminus.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Tplus.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Tplus.png Binary files differnew file mode 100755 index 00000000..2c8d8f4f --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Tplus.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Types.gif b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Types.gif Binary files differnew file mode 100755 index 00000000..7c13fd59 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Types.gif diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Variable.gif b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Variable.gif Binary files differnew file mode 100755 index 00000000..63b3f553 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Variable.gif diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Vars.gif b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Vars.gif Binary files differnew file mode 100755 index 00000000..3963c3c1 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Vars.gif diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/blank.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/blank.png Binary files differnew file mode 100755 index 00000000..cee9cd37 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/blank.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/classFolder.gif b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/classFolder.gif Binary files differnew file mode 100755 index 00000000..5492345f --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/classFolder.gif diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/error.gif b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/error.gif Binary files differnew file mode 100755 index 00000000..e323ff06 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/error.gif diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/file.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/file.png Binary files differnew file mode 100755 index 00000000..0bb2427f --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/file.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/foldericon.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/foldericon.png Binary files differnew file mode 100755 index 00000000..2684748b --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/foldericon.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/minus.gif b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/minus.gif Binary files differnew file mode 100755 index 00000000..9e998f1b --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/minus.gif diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/msgError.gif b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/msgError.gif Binary files differnew file mode 100755 index 00000000..93c6d36a --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/msgError.gif diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/msgFatalError.gif b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/msgFatalError.gif Binary files differnew file mode 100755 index 00000000..6257bbe5 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/msgFatalError.gif diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/msgHint.gif b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/msgHint.gif Binary files differnew file mode 100755 index 00000000..0b23fbfe --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/msgHint.gif diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/msgInformation.gif b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/msgInformation.gif Binary files differnew file mode 100755 index 00000000..1cc5c9ba --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/msgInformation.gif diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/msgWarning.gif b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/msgWarning.gif Binary files differnew file mode 100755 index 00000000..e0757783 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/msgWarning.gif diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/openfoldericon.png b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/openfoldericon.png Binary files differnew file mode 100755 index 00000000..15fcd567 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/openfoldericon.png diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/plus.gif b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/plus.gif Binary files differnew file mode 100755 index 00000000..cade83c7 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/plus.gif diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/spacer.gif b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/spacer.gif Binary files differnew file mode 100755 index 00000000..1fa6d01f --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/spacer.gif diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/lib/classTree.js b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/lib/classTree.js new file mode 100755 index 00000000..7f57c474 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/lib/classTree.js @@ -0,0 +1,454 @@ +/*----------------------------------------\ +| Cross Browser Tree Widget 1.1 | +|-----------------------------------------| +| Created by Emil A. Eklund (eae@eae.net) | +| For WebFX (http://webfx.eae.net/) | +|-----------------------------------------| +| This script is provided as is without | +| any warranty whatsoever. It may be used | +| free of charge for non commerical sites | +| For commerical use contact the author | +| of this script for further details. | +|-----------------------------------------| +| Created 2000-12-11 | Updated 2001-09-06 | +\----------------------------------------*/ + +var webFXTreeConfig = { + rootIcon : 'media/images/Class.gif', + openRootIcon : 'media/images/Class.gif', + folderIcon : 'media/images/Class.gif', + openFolderIcon : 'media/images/Class.gif', + fileIcon : 'media/images/Class.gif', + iIcon : 'media/images/I.png', + lIcon : 'media/images/L.png', + lMinusIcon : 'media/images/Lminus.png', + lPlusIcon : 'media/images/Lplus.png', + tIcon : 'media/images/T.png', + tMinusIcon : 'media/images/Tminus.png', + tPlusIcon : 'media/images/Tplus.png', + blankIcon : 'media/images/blank.png', + defaultText : 'Tree Item', + defaultAction : 'javascript:void(0);', + defaultTarget : 'right', + defaultBehavior : 'classic' +}; + +var webFXTreeHandler = { + idCounter : 0, + idPrefix : "webfx-tree-object-", + all : {}, + behavior : null, + selected : null, + getId : function() { return this.idPrefix + this.idCounter++; }, + toggle : function (oItem) { this.all[oItem.id.replace('-plus','')].toggle(); }, + select : function (oItem) { this.all[oItem.id.replace('-icon','')].select(); }, + focus : function (oItem) { this.all[oItem.id.replace('-anchor','')].focus(); }, + blur : function (oItem) { this.all[oItem.id.replace('-anchor','')].blur(); }, + keydown : function (oItem) { return this.all[oItem.id].keydown(window.event.keyCode); }, + cookies : new WebFXCookie() +}; + +/* + * WebFXCookie class + */ + +function WebFXCookie() { + if (document.cookie.length) { this.cookies = ' ' + document.cookie; } +} + +WebFXCookie.prototype.setCookie = function (key, value) { + document.cookie = key + "=" + escape(value); +} + +WebFXCookie.prototype.getCookie = function (key) { + if (this.cookies) { + var start = this.cookies.indexOf(' ' + key + '='); + if (start == -1) { return null; } + var end = this.cookies.indexOf(";", start); + if (end == -1) { end = this.cookies.length; } + end -= start; + var cookie = this.cookies.substr(start,end); + return unescape(cookie.substr(cookie.indexOf('=') + 1, cookie.length - cookie.indexOf('=') + 1)); + } + else { return null; } +} + +/* + * WebFXTreeAbstractNode class + */ + +function WebFXTreeAbstractNode(sText, sAction, sTarget) { + this.childNodes = []; + this.id = webFXTreeHandler.getId(); + this.text = sText || webFXTreeConfig.defaultText; + this.action = sAction || webFXTreeConfig.defaultAction; + this.targetWindow = sTarget || webFXTreeConfig.defaultTarget; + this._last = false; + webFXTreeHandler.all[this.id] = this; +} + +WebFXTreeAbstractNode.prototype.add = function (node) { + node.parentNode = this; + this.childNodes[this.childNodes.length] = node; + var root = this; + if (this.childNodes.length >=2) { + this.childNodes[this.childNodes.length -2]._last = false; + } + while (root.parentNode) { root = root.parentNode; } + if (root.rendered) { + if (this.childNodes.length >= 2) { + document.getElementById(this.childNodes[this.childNodes.length -2].id + '-plus').src = ((this.childNodes[this.childNodes.length -2].folder)?webFXTreeConfig.tMinusIcon:webFXTreeConfig.tIcon); + if (this.childNodes[this.childNodes.length -2].folder) { + this.childNodes[this.childNodes.length -2].plusIcon = webFXTreeConfig.tPlusIcon; + this.childNodes[this.childNodes.length -2].minusIcon = webFXTreeConfig.tMinusIcon; + } + this.childNodes[this.childNodes.length -2]._last = false; + } + this._last = true; + var foo = this; + while (foo.parentNode) { + for (var i = 0; i < foo.parentNode.childNodes.length; i++) { + if (foo.id == foo.parentNode.childNodes[i].id) { break; } + } + if (++i == foo.parentNode.childNodes.length) { foo.parentNode._last = true; } + else { foo.parentNode._last = false; } + foo = foo.parentNode; + } + document.getElementById(this.id + '-cont').insertAdjacentHTML("beforeEnd", node.toString()); + if ((!this.folder) && (!this.openIcon)) { + this.icon = webFXTreeConfig.folderIcon; + this.openIcon = webFXTreeConfig.openFolderIcon; + } + this.folder = true; + this.indent(); + this.expand(); + } + return node; +} + +WebFXTreeAbstractNode.prototype.toggle = function() { + if (this.folder) { + if (this.open) { this.collapse(); } + else { this.expand(); } + } +} + +WebFXTreeAbstractNode.prototype.select = function() { + document.getElementById(this.id + '-anchor').focus(); +} + +WebFXTreeAbstractNode.prototype.focus = function() { + webFXTreeHandler.selected = this; + if ((this.openIcon) && (webFXTreeHandler.behavior != 'classic')) { document.getElementById(this.id + '-icon').src = this.openIcon; } + document.getElementById(this.id + '-anchor').style.backgroundColor = 'highlight'; + document.getElementById(this.id + '-anchor').style.color = 'highlighttext'; + document.getElementById(this.id + '-anchor').focus(); +} + +WebFXTreeAbstractNode.prototype.blur = function() { + if ((this.openIcon) && (webFXTreeHandler.behavior != 'classic')) { document.getElementById(this.id + '-icon').src = this.icon; } + document.getElementById(this.id + '-anchor').style.backgroundColor = 'transparent'; + document.getElementById(this.id + '-anchor').style.color = 'menutext'; +} + +WebFXTreeAbstractNode.prototype.doExpand = function() { + if (webFXTreeHandler.behavior == 'classic') { document.getElementById(this.id + '-icon').src = this.openIcon; } + if (this.childNodes.length) { document.getElementById(this.id + '-cont').style.display = 'block'; } + this.open = true; + webFXTreeHandler.cookies.setCookie(this.id.substr(18,this.id.length - 18), '1'); +} + +WebFXTreeAbstractNode.prototype.doCollapse = function() { + if (webFXTreeHandler.behavior == 'classic') { document.getElementById(this.id + '-icon').src = this.icon; } + if (this.childNodes.length) { document.getElementById(this.id + '-cont').style.display = 'none'; } + this.open = false; + webFXTreeHandler.cookies.setCookie(this.id.substr(18,this.id.length - 18), '0'); +} + +WebFXTreeAbstractNode.prototype.expandAll = function() { + this.expandChildren(); + if ((this.folder) && (!this.open)) { this.expand(); } +} + +WebFXTreeAbstractNode.prototype.expandChildren = function() { + for (var i = 0; i < this.childNodes.length; i++) { + this.childNodes[i].expandAll(); +} } + +WebFXTreeAbstractNode.prototype.collapseAll = function() { + if ((this.folder) && (this.open)) { this.collapse(); } + this.collapseChildren(); +} + +WebFXTreeAbstractNode.prototype.collapseChildren = function() { + for (var i = 0; i < this.childNodes.length; i++) { + this.childNodes[i].collapseAll(); +} } + +WebFXTreeAbstractNode.prototype.indent = function(lvl, del, last, level) { + /* + * Since we only want to modify items one level below ourself, + * and since the rightmost indentation position is occupied by + * the plus icon we set this to -2 + */ + if (lvl == null) { lvl = -2; } + var state = 0; + for (var i = this.childNodes.length - 1; i >= 0 ; i--) { + state = this.childNodes[i].indent(lvl + 1, del, last, level); + if (state) { return; } + } + if (del) { + if (level >= this._level) { + if (this.folder) { + document.getElementById(this.id + '-plus').src = (this.open)?webFXTreeConfig.lMinusIcon:webFXTreeConfig.lPlusIcon; + this.plusIcon = webFXTreeConfig.lPlusIcon; + this.minusIcon = webFXTreeConfig.lMinusIcon; + } + else { document.getElementById(this.id + '-plus').src = webFXTreeConfig.lIcon; } + return 1; + } + } + var foo = document.getElementById(this.id + '-indent-' + lvl); + if (foo) { + if ((del) && (last)) { foo._last = true; } + if (foo._last) { foo.src = webFXTreeConfig.blankIcon; } + else { foo.src = webFXTreeConfig.iIcon; } + } + return 0; +} + +/* + * WebFXTree class + */ + +function WebFXTree(sText, sAction, sBehavior, sIcon, sOpenIcon) { + this.base = WebFXTreeAbstractNode; + this.base(sText, sAction); + this.icon = sIcon || webFXTreeConfig.rootIcon; + this.openIcon = sOpenIcon || webFXTreeConfig.openRootIcon; + /* Defaults to open */ + this.open = (webFXTreeHandler.cookies.getCookie(this.id.substr(18,this.id.length - 18)) == '0')?false:true; + this.folder = true; + this.rendered = false; + if (!webFXTreeHandler.behavior) { webFXTreeHandler.behavior = sBehavior || webFXTreeConfig.defaultBehavior; } + this.targetWindow = 'right'; +} + +WebFXTree.prototype = new WebFXTreeAbstractNode; + +WebFXTree.prototype.setBehavior = function (sBehavior) { + webFXTreeHandler.behavior = sBehavior; +}; + +WebFXTree.prototype.getBehavior = function (sBehavior) { + return webFXTreeHandler.behavior; +}; + +WebFXTree.prototype.getSelected = function() { + if (webFXTreeHandler.selected) { return webFXTreeHandler.selected; } + else { return null; } +} + +WebFXTree.prototype.remove = function() { } + +WebFXTree.prototype.expand = function() { + this.doExpand(); +} + +WebFXTree.prototype.collapse = function() { + this.focus(); + this.doCollapse(); +} + +WebFXTree.prototype.getFirst = function() { + return null; +} + +WebFXTree.prototype.getLast = function() { + return null; +} + +WebFXTree.prototype.getNextSibling = function() { + return null; +} + +WebFXTree.prototype.getPreviousSibling = function() { + return null; +} + +WebFXTree.prototype.keydown = function(key) { + if (key == 39) { this.expand(); return false; } + if (key == 37) { this.collapse(); return false; } + if ((key == 40) && (this.open)) { this.childNodes[0].select(); return false; } + return true; +} + +WebFXTree.prototype.toString = function() { + var str = "<div id=\"" + this.id + "\" ondblclick=\"webFXTreeHandler.toggle(this);\" class=\"webfx-tree-item\" onkeydown=\"return webFXTreeHandler.keydown(this)\">"; + str += "<img id=\"" + this.id + "-icon\" class=\"webfx-tree-icon\" src=\"" + ((webFXTreeHandler.behavior == 'classic' && this.open)?this.openIcon:this.icon) + "\" onclick=\"webFXTreeHandler.select(this);\"><a href=\"" + this.action + "\" id=\"" + this.id + "-anchor\" target=\"" + this.targetWindow + "\" onfocus=\"webFXTreeHandler.focus(this);\" onblur=\"webFXTreeHandler.blur(this);\">" + this.text + "</a></div>"; + str += "<div id=\"" + this.id + "-cont\" class=\"webfx-tree-container\" style=\"display: " + ((this.open)?'block':'none') + ";\">"; + for (var i = 0; i < this.childNodes.length; i++) { + str += this.childNodes[i].toString(i, this.childNodes.length); + } + str += "</div>"; + this.rendered = true; + return str; +}; + +/* + * WebFXTreeItem class + */ + +function WebFXTreeItem(sText, sAction, eParent, sIcon, sOpenIcon) { + this.base = WebFXTreeAbstractNode; + this.base(sText, sAction); + /* Defaults to close */ + this.open = (webFXTreeHandler.cookies.getCookie(this.id.substr(18,this.id.length - 18)) == '1')?true:false; + if (eParent) { eParent.add(this); } + if (sIcon) { this.icon = sIcon; } + if (sOpenIcon) { this.openIcon = sOpenIcon; } +} + +WebFXTreeItem.prototype = new WebFXTreeAbstractNode; + +WebFXTreeItem.prototype.remove = function() { + var parentNode = this.parentNode; + var prevSibling = this.getPreviousSibling(true); + var nextSibling = this.getNextSibling(true); + var folder = this.parentNode.folder; + var last = ((nextSibling) && (nextSibling.parentNode) && (nextSibling.parentNode.id == parentNode.id))?false:true; + this.getPreviousSibling().focus(); + this._remove(); + if (parentNode.childNodes.length == 0) { + parentNode.folder = false; + parentNode.open = false; + } + if (last) { + if (parentNode.id == prevSibling.id) { + document.getElementById(parentNode.id + '-icon').src = webFXTreeConfig.fileIcon; + } + else { } + } + if ((!prevSibling.parentNode) || (prevSibling.parentNode != parentNode)) { + parentNode.indent(null, true, last, this._level); + } + if (document.getElementById(prevSibling.id + '-plus')) { + if (nextSibling) { + if ((parentNode == prevSibling) && (parentNode.getNextSibling)) { document.getElementById(prevSibling.id + '-plus').src = webFXTreeConfig.tIcon; } + else if (nextSibling.parentNode != prevSibling) { document.getElementById(prevSibling.id + '-plus').src = webFXTreeConfig.lIcon; } + } + else { document.getElementById(prevSibling.id + '-plus').src = webFXTreeConfig.lIcon; } + } +} + +WebFXTreeItem.prototype._remove = function() { + for (var i = this.childNodes.length - 1; i >= 0; i--) { + this.childNodes[i]._remove(); + } + for (var i = 0; i < this.parentNode.childNodes.length; i++) { + if (this.id == this.parentNode.childNodes[i].id) { + for (var j = i; j < this.parentNode.childNodes.length; j++) { + this.parentNode.childNodes[i] = this.parentNode.childNodes[i+1] + } + this.parentNode.childNodes.length = this.parentNode.childNodes.length - 1; + if (i + 1 == this.parentNode.childNodes.length) { this.parentNode._last = true; } + } + } + webFXTreeHandler.all[this.id] = null; + if (document.getElementById(this.id)) { + document.getElementById(this.id).innerHTML = ""; + document.getElementById(this.id).removeNode(); + } +} + +WebFXTreeItem.prototype.expand = function() { + this.doExpand(); + document.getElementById(this.id + '-plus').src = this.minusIcon; +} + +WebFXTreeItem.prototype.collapse = function() { + this.focus(); + this.doCollapse(); + document.getElementById(this.id + '-plus').src = this.plusIcon; +} + +WebFXTreeItem.prototype.getFirst = function() { + return this.childNodes[0]; +} + +WebFXTreeItem.prototype.getLast = function() { + if (this.childNodes[this.childNodes.length - 1].open) { return this.childNodes[this.childNodes.length - 1].getLast(); } + else { return this.childNodes[this.childNodes.length - 1]; } +} + +WebFXTreeItem.prototype.getNextSibling = function() { + for (var i = 0; i < this.parentNode.childNodes.length; i++) { + if (this == this.parentNode.childNodes[i]) { break; } + } + if (++i == this.parentNode.childNodes.length) { return this.parentNode.getNextSibling(); } + else { return this.parentNode.childNodes[i]; } +} + +WebFXTreeItem.prototype.getPreviousSibling = function(b) { + for (var i = 0; i < this.parentNode.childNodes.length; i++) { + if (this == this.parentNode.childNodes[i]) { break; } + } + if (i == 0) { return this.parentNode; } + else { + if ((this.parentNode.childNodes[--i].open) || (b && this.parentNode.childNodes[i].folder)) { return this.parentNode.childNodes[i].getLast(); } + else { return this.parentNode.childNodes[i]; } +} } + +WebFXTreeItem.prototype.keydown = function(key) { + if ((key == 39) && (this.folder)) { + if (!this.open) { this.expand(); return false; } + else { this.getFirst().select(); return false; } + } + else if (key == 37) { + if (this.open) { this.collapse(); return false; } + else { this.parentNode.select(); return false; } + } + else if (key == 40) { + if (this.open) { this.getFirst().select(); return false; } + else { + var sib = this.getNextSibling(); + if (sib) { sib.select(); return false; } + } } + else if (key == 38) { this.getPreviousSibling().select(); return false; } + return true; +} + +WebFXTreeItem.prototype.toString = function (nItem, nItemCount) { + var foo = this.parentNode; + var indent = ''; + if (nItem + 1 == nItemCount) { this.parentNode._last = true; } + var i = 0; + while (foo.parentNode) { + foo = foo.parentNode; + indent = "<img id=\"" + this.id + "-indent-" + i + "\" src=\"" + ((foo._last)?webFXTreeConfig.blankIcon:webFXTreeConfig.iIcon) + "\">" + indent; + i++; + } + this._level = i; + if (this.childNodes.length) { this.folder = 1; } + else { this.open = false; } + if ((this.folder) || (webFXTreeHandler.behavior != 'classic')) { + if (!this.icon) { this.icon = webFXTreeConfig.folderIcon; } + if (!this.openIcon) { this.openIcon = webFXTreeConfig.openFolderIcon; } + } + else if (!this.icon) { this.icon = webFXTreeConfig.fileIcon; } + var label = this.text; + label = label.replace('<', '<'); + label = label.replace('>', '>'); + var str = "<div id=\"" + this.id + "\" ondblclick=\"webFXTreeHandler.toggle(this);\" class=\"webfx-tree-item\" onkeydown=\"return webFXTreeHandler.keydown(this)\">"; + str += indent; + str += "<img id=\"" + this.id + "-plus\" src=\"" + ((this.folder)?((this.open)?((this.parentNode._last)?webFXTreeConfig.lMinusIcon:webFXTreeConfig.tMinusIcon):((this.parentNode._last)?webFXTreeConfig.lPlusIcon:webFXTreeConfig.tPlusIcon)):((this.parentNode._last)?webFXTreeConfig.lIcon:webFXTreeConfig.tIcon)) + "\" onclick=\"webFXTreeHandler.toggle(this);\">" + str += "<img id=\"" + this.id + "-icon\" src=\"" + ((webFXTreeHandler.behavior == 'classic' && this.open)?this.openIcon:this.icon) + "\" onclick=\"webFXTreeHandler.select(this);\"><a href=\"" + this.action + "\" id=\"" + this.id + "-anchor\" target=\"" + this.targetWindow + "\" onfocus=\"webFXTreeHandler.focus(this);\" onblur=\"webFXTreeHandler.blur(this);\">" + label + "</a></div>"; + str += "<div id=\"" + this.id + "-cont\" class=\"webfx-tree-container\" style=\"display: " + ((this.open)?'block':'none') + ";\">"; + for (var i = 0; i < this.childNodes.length; i++) { + str += this.childNodes[i].toString(i,this.childNodes.length); + } + str += "</div>"; + this.plusIcon = ((this.parentNode._last)?webFXTreeConfig.lPlusIcon:webFXTreeConfig.tPlusIcon); + this.minusIcon = ((this.parentNode._last)?webFXTreeConfig.lMinusIcon:webFXTreeConfig.tMinusIcon); + return str; +}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/lib/tab.webfx.css b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/lib/tab.webfx.css new file mode 100755 index 00000000..6552ea01 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/lib/tab.webfx.css @@ -0,0 +1,86 @@ +/* + +bright: rgb(234,242,255); +normal: rgb(120,172,255); +dark: rgb(0,66,174); + +*/ + + + + +.dynamic-tab-pane-control.tab-pane { + position: relative; + width: 100%; +} + +.dynamic-tab-pane-control .tab-row .tab { + font-family: Verdana, Helvetica, Arial; + font-size: 12px; + cursor: Default; + display: inline; + margin: 1px -5px 1px 5px; + float: left; + padding: 3px 6px 3px 6px; + background: rgb(234,242,255); + border: 1px solid; + border-color: rgb(120,172,255); + border-left: 0; + border-bottom: 0; + border-top: 0; + + cursor: hand; + cursor: pointer; + + z-index: 1; + position: relative; + top: 0; +} + +.dynamic-tab-pane-control .tab-row .tab.selected { + border: 1px solid rgb(120,172,255); + border-bottom: 0; + z-index: 3; + padding: 2px 6px 5px 6px; + margin: 1px -6px -2px 0px; + top: -2px; + background: white; +} + +.dynamic-tab-pane-control .tab-row .tab a { + font-family: Verdana, Helvetica, Arial; + font-size: 13px; + color: rgb(0,66,174); + text-decoration: none; + cursor: hand; + cursor: pointer; +} + +.dynamic-tab-pane-control .tab-row .hover a { + color: rgb(0,66,174); +} + +.dynamic-tab-pane-control .tab-row .tab.selected a { + font-weight: bold; +} + +.dynamic-tab-pane-control .tab-page { + clear: both; + border: 1px solid rgb(120,172,255); + background: White; + z-index: 2; + position: relative; + top: -2px; + color: Black; + font-family: Verdana, Helvetica, Arial; + font-size: 13px; + padding: 10px; +} + +.dynamic-tab-pane-control .tab-row { + z-index: 1; + white-space: nowrap; + background: rgb(234,242,255); + height: 1.85em; + width: 100%; +} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/lib/tabpane.js b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/lib/tabpane.js new file mode 100755 index 00000000..f1418bee --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/lib/tabpane.js @@ -0,0 +1,308 @@ +/* + * Tab Pane + * + * This script was created by Erik Arvidsson (erik(at)eae.net) + * for WebFX (http://webfx.eae.net) + * Copyright 2002 + * + * For usage see license at http://webfx.eae.net/license.html + * + * Version: 1.0 + * Created: 2002-01-?? First working version + * Updated: 2002-02-17 Cleaned up for 1.0 public version + * + * Dependencies: *.css - a css file to define the layout + * + */ + + +// This function is used to define if the browser supports the needed +// features +function hasSupport() { + + if (typeof hasSupport.support != "undefined") + return hasSupport.support; + + var ie55 = /msie 5\.[56789]/i.test( navigator.userAgent ); + + hasSupport.support = ( typeof document.implementation != "undefined" && + document.implementation.hasFeature( "html", "1.0" ) || ie55 ) + + // IE55 has a serious DOM1 bug... Patch it! + if ( ie55 ) { + document._getElementsByTagName = document.getElementsByTagName; + document.getElementsByTagName = function ( sTagName ) { + if ( sTagName == "*" ) + return document.all; + else + return document._getElementsByTagName( sTagName ); + }; + } + + return hasSupport.support; +} + +/////////////////////////////////////////////////////////////////////////////////// +// The constructor for tab panes +// +// el : HTMLElement The html element used to represent the tab pane +// bUseCookie : Boolean Optional. Default is true. Used to determine whether to us +// persistance using cookies or not +// +function WebFXTabPane( el, bUseCookie ) { + if ( !hasSupport() || el == null ) return; + + this.element = el; + this.element.tabPane = this; + this.pages = []; + this.selectedIndex = null; + this.useCookie = bUseCookie != null ? bUseCookie : false; + + // add class name tag to class name + this.element.className = this.classNameTag + " " + this.element.className; + + // add tab row + this.tabRow = document.createElement( "div" ); + this.tabRow.className = "tab-row"; + el.insertBefore( this.tabRow, el.firstChild ); + + var tabIndex = 0; + if ( this.useCookie ) { + tabIndex = Number( WebFXTabPane.getCookie( "webfxtab_" + this.element.id ) ); + if ( isNaN( tabIndex ) ) + tabIndex = 0; + } + + this.selectedIndex = tabIndex; + + // loop through child nodes and add them + var cs = el.childNodes; + var n; + for (var i = 0; i < cs.length; i++) { + if (cs[i].nodeType == 1 && cs[i].className == "tab-page") { + this.addTabPage( cs[i] ); + } + } +} + +WebFXTabPane.prototype = { + + classNameTag: "dynamic-tab-pane-control", + + setSelectedIndex: function ( n ) { + if (this.selectedIndex != n) { + if (this.selectedIndex != null && this.pages[ this.selectedIndex ] != null ) + this.pages[ this.selectedIndex ].hide(); + this.selectedIndex = n; + this.pages[ this.selectedIndex ].show(); + + if ( this.useCookie ) + WebFXTabPane.setCookie( "webfxtab_" + this.element.id, n ); // session cookie + } + }, + + getSelectedIndex: function () { + return this.selectedIndex; + }, + + addTabPage: function ( oElement ) { + if ( !hasSupport() ) return; + + if ( oElement.tabPage == this ) // already added + return oElement.tabPage; + + var n = this.pages.length; + var tp = this.pages[n] = new WebFXTabPage( oElement, this, n ); + tp.tabPane = this; + + // move the tab out of the box + this.tabRow.appendChild( tp.tab ); + + if ( n == this.selectedIndex ) + tp.show(); + else + tp.hide(); + + return tp; + } +}; + +// Cookie handling +WebFXTabPane.setCookie = function ( sName, sValue, nDays ) { + var expires = ""; + if ( nDays ) { + var d = new Date(); + d.setTime( d.getTime() + nDays * 24 * 60 * 60 * 1000 ); + expires = "; expires=" + d.toGMTString(); + } + + document.cookie = sName + "=" + sValue + expires + "; path=/"; +}; + +WebFXTabPane.getCookie = function (sName) { + var re = new RegExp( "(\;|^)[^;]*(" + sName + ")\=([^;]*)(;|$)" ); + var res = re.exec( document.cookie ); + return res != null ? res[3] : null; +}; + +WebFXTabPane.removeCookie = function ( name ) { + setCookie( name, "", -1 ); +}; + + + + + + + + +/////////////////////////////////////////////////////////////////////////////////// +// The constructor for tab pages. This one should not be used. +// Use WebFXTabPage.addTabPage instead +// +// el : HTMLElement The html element used to represent the tab pane +// tabPane : WebFXTabPane The parent tab pane +// nindex : Number The index of the page in the parent pane page array +// +function WebFXTabPage( el, tabPane, nIndex ) { + if ( !hasSupport() || el == null ) return; + + this.element = el; + this.element.tabPage = this; + this.index = nIndex; + + var cs = el.childNodes; + for (var i = 0; i < cs.length; i++) { + if (cs[i].nodeType == 1 && cs[i].className == "tab") { + this.tab = cs[i]; + break; + } + } + + // insert a tag around content to support keyboard navigation + var a = document.createElement( "A" ); + a.href = "javascript:void 0;"; + while ( this.tab.hasChildNodes() ) + a.appendChild( this.tab.firstChild ); + this.tab.appendChild( a ); + + + anchor = ''; + if ( document.URL.indexOf( '#' ) != -1 ) { + anchor = document.URL.substr( document.URL.indexOf( '#' ) + 1); + } + j = 0; + if ( anchor.length > 0 ) { + finalList = new Array(); + listOfAnchors = el.getElementsByTagName('A'); + for (i=0; i<listOfAnchors.length; i++) { + if (listOfAnchors[i].name.length) { + finalList[j++] = listOfAnchors[i].name; + } + } + for(i=0; i<finalList.length; i++) { + if ( anchor == finalList[i] ) { + if (tabPane.selectedIndex != nIndex) tabPane.pages[ tabPane.selectedIndex ].hide(); + tabPane.selectedIndex = nIndex ; + } + } + } + + // hook up events, using DOM0 + var oThis = this; + this.tab.onclick = function () { oThis.select(); }; + this.tab.onmouseover = function () { WebFXTabPage.tabOver( oThis ); }; + this.tab.onmouseout = function () { WebFXTabPage.tabOut( oThis ); }; +} + +WebFXTabPage.prototype = { + show: function () { + var el = this.tab; + var s = el.className + " selected"; + s = s.replace(/ +/g, " "); + el.className = s; + + this.element.style.display = "block"; + }, + + hide: function () { + var el = this.tab; + var s = el.className; + s = s.replace(/ selected/g, ""); + el.className = s; + + this.element.style.display = "none"; + }, + + select: function () { + this.tabPane.setSelectedIndex( this.index ); + } +}; + +WebFXTabPage.tabOver = function ( tabpage ) { + var el = tabpage.tab; + var s = el.className + " hover"; + s = s.replace(/ +/g, " "); + el.className = s; +}; + +WebFXTabPage.tabOut = function ( tabpage ) { + var el = tabpage.tab; + var s = el.className; + s = s.replace(/ hover/g, ""); + el.className = s; +}; + + +// This function initializes all uninitialized tab panes and tab pages +function setupAllTabs() { + if ( !hasSupport() ) return; + + var all = document.getElementsByTagName( "*" ); + var l = all.length; + var tabPaneRe = /tab\-pane/; + var tabPageRe = /tab\-page/; + var cn, el; + var parentTabPane; + + for ( var i = 0; i < l; i++ ) { + el = all[i] + cn = el.className; + + // no className + if ( cn == "" ) continue; + + // uninitiated tab pane + if ( tabPaneRe.test( cn ) && !el.tabPane ) + new WebFXTabPane( el ); + + // unitiated tab page wit a valid tab pane parent + else if ( tabPageRe.test( cn ) && !el.tabPage && + tabPaneRe.test( el.parentNode.className ) ) { + el.parentNode.tabPane.addTabPage( el ); + } + } +} + + +// initialization hook up + +// DOM2 +if ( typeof window.addEventListener != "undefined" ) + window.addEventListener( "load", setupAllTabs, false ); + +// IE +else if ( typeof window.attachEvent != "undefined" ) + window.attachEvent( "onload", setupAllTabs ); + +else { + if ( window.onload != null ) { + var oldOnload = window.onload; + window.onload = function ( e ) { + oldOnload( e ); + setupAllTabs(); + }; + } + else + window.onload = setupAllTabs; +}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/lib/ua.js b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/lib/ua.js new file mode 100755 index 00000000..c06fa313 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/lib/ua.js @@ -0,0 +1,111 @@ +/* +ua.js revision 0.200 2001-12-03 + +Contributor(s): Bob Clary, Netscape Communications, Copyright 2001 + +Netscape grants you a royalty free license to use, modify and +distribute this software provided that this copyright notice +appears on all copies. This software is provided "AS IS," +without a warranty of any kind. +*/ + +function xbDetectBrowser() +{ + var oldOnError = window.onerror; + var element = null; + + window.onerror = null; + + // work around bug in xpcdom Mozilla 0.9.1 + window.saveNavigator = window.navigator; + + navigator.OS = ''; + navigator.version = parseFloat(navigator.appVersion); + navigator.org = ''; + navigator.family = ''; + + var platform; + if (typeof(window.navigator.platform) != 'undefined') + { + platform = window.navigator.platform.toLowerCase(); + if (platform.indexOf('win') != -1) + navigator.OS = 'win'; + else if (platform.indexOf('mac') != -1) + navigator.OS = 'mac'; + else if (platform.indexOf('unix') != -1 || platform.indexOf('linux') != -1 || platform.indexOf('sun') != -1) + navigator.OS = 'nix'; + } + + var i = 0; + var ua = window.navigator.userAgent.toLowerCase(); + if (ua.indexOf('opera') != -1) + { + i = ua.indexOf('opera'); + navigator.family = 'opera'; + navigator.org = 'opera'; + navigator.version = parseFloat('0' + ua.substr(i+6), 10); + } + else if ((i = ua.indexOf('msie')) != -1) + { + navigator.org = 'microsoft'; + navigator.version = parseFloat('0' + ua.substr(i+5), 10); + + if (navigator.version < 4) + navigator.family = 'ie3'; + else + navigator.family = 'ie4' + } + else if (ua.indexOf('gecko') != -1) + { + navigator.family = 'gecko'; + var rvStart = navigator.userAgent.indexOf('rv:') + 3; + var rvEnd = navigator.userAgent.indexOf(')', rvStart); + var rv = navigator.userAgent.substring(rvStart, rvEnd); + var decIndex = rv.indexOf('.'); + if (decIndex != -1) + { + rv = rv.replace(/\./g, '') + rv = rv.substring(0, decIndex-1) + '.' + rv.substr(decIndex) + } + navigator.version = parseFloat(rv); + + if (ua.indexOf('netscape') != -1) + navigator.org = 'netscape'; + else if (ua.indexOf('compuserve') != -1) + navigator.org = 'compuserve'; + else + navigator.org = 'mozilla'; + } + else if ((ua.indexOf('mozilla') !=-1) && (ua.indexOf('spoofer')==-1) && (ua.indexOf('compatible') == -1) && (ua.indexOf('opera')==-1)&& (ua.indexOf('webtv')==-1) && (ua.indexOf('hotjava')==-1)) + { + var is_major = parseFloat(navigator.appVersion); + + if (is_major < 4) + navigator.version = is_major; + else + { + i = ua.lastIndexOf('/') + navigator.version = parseFloat('0' + ua.substr(i+1), 10); + } + navigator.org = 'netscape'; + navigator.family = 'nn' + parseInt(navigator.appVersion); + } + else if ((i = ua.indexOf('aol')) != -1 ) + { + // aol + navigator.family = 'aol'; + navigator.org = 'aol'; + navigator.version = parseFloat('0' + ua.substr(i+4), 10); + } + else if ((i = ua.indexOf('hotjava')) != -1 ) + { + // hotjava + navigator.family = 'hotjava'; + navigator.org = 'sun'; + navigator.version = parseFloat(navigator.appVersion); + } + + window.onerror = oldOnError; +} + +xbDetectBrowser(); diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/stylesheet.css b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/stylesheet.css new file mode 100755 index 00000000..7b1662d2 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/stylesheet.css @@ -0,0 +1,230 @@ + +body { background: #FFFFFF; } +body, table { + font-family: Verdana, Arial, Helvetica, sans-serif; + text-align: left; + font-size: 11px; +} + +table.none td.btCell { background-color: #fff; vertical-align: top; } +table.none tr.highlight td.btCell { background-color: #f5f5f5; vertical-align: top; } +table.none th.btHead { background-color: #e5e5e5; vertical-align: top; } +table.btHeader, th.btHeader { + background-color: #014f9d; + color: #fff; + text-align: left; + vertical-align: top; +} +table.btHeaderProminent, th.btHeaderProminent { + background-color: #9d0119; + color: #fff; + text-align: left; + vertical-align: top; +} +div.showHideIndent { margin-left: 14px; } +td.left, th.left, th.syntaxLanguage { vertical-align: top; text-align: left; border-right: 1px solid #ceced8; border-bottom: solid 1px #ceced8; } +th.noborder { border: none; } +th.border { border: 1px solid #ceced8; } +td.border { border-bottom: 1px solid #ceced8; } +th.syntaxLanguage { font-size: 11px; line-height: 13px; vertical-align: top; } +.faq, .property { color: #000090; } +.method { color: #009000; } +.event { color: #900000; } + +table.default th.syntaxLanguage { font-size: 0.7em; vertical-align: baseline; } +.small { font-size: 85%; line-height: 120%; } + +a { + color: #000090; + +} + +div.maintutorial { + border-width: thin; + border-color: #0066ff; +} + +.source, .src-code { + border-width: thin; + border-style: dashed; + border-color: #8899dd; + margin: 1em; + padding: 0.5em; + font-family: 'Courier New', Courier, monospace; font-weight: normal; +} +.src-line { font-family: 'Courier New', Courier, monospace; font-weight: normal; } + +.var-type { + font-style : italic; +} + +.var-title { + margin-left : 20px; +} + +.method-summary { + margin-left : 20px; +} + +/*------------------------------------------------------------------------------ + Show/Hide blocks +------------------------------------------------------------------------------*/ + +.shown { display: inline; } +.hidden { display: none; } +img.showHideImg, .showHideControl { cursor: hand; } +img.showHideImg { margin-right: 3px; } + +.showHideActionText +{ + font-size: 0.7em; +} + +.showHideActionTextContent +{ + font-weight: bold; +} + +.showHideActionTextContentHover +{ + text-decoration: underline; + font-weight: bold; + background-color: #ceced8; +} +ol { + margin: 0.2em 0em 0.2em 24px; + padding: 0em; +} +ul li { + margin: 0.2em 0em 0.2em 0em; padding: 0em; + list-style-position: outside; + list-style-type: square; +} +span.li { + color: #000000; +} +ul { + color: #014fbe; + margin: 3px 0em 3px 16px; +} +p { + margin: 6px 0em 6px 0em; +} +h1 { margin: 1em 0em 1.2em 0em; font-size: 160%; line-height: 130%;} +h2 { font-size: 125%; line-height: 120%;} +h1, h2, h3, h4 { + padding: 0em; + margin: 1.5em 0em .25em 0em; + text-align: left; + font-weight: normal; +} +h3 { margin-top: 0.5em; font-size: 110%; } +h4 { margin: 0.25em 0em .25em 0em;; font-size: 100%; } + +.Headline { + color: #000000; + font-family: Verdana,Arial,Helvetica,sans-serif; + font-size: 9pt; + font-weight: bold; + font-style: normal; +/* margin-left : -1.5em;*/ + text-align : left; + margin-top : 1.0em; + margin-bottom : 0.5em; +} + +.HelpContent { + margin-left : 1.5em; +} + +table.HelpTable { + border: 0px; + padding: 0px; + margin: 0px; +} + +tr.HelpTable { +} + +th.HelpTable { + border: 1px dotted; + background-color: #F0F0F0; + margin: 1px; + padding: 5px; +} + +td.HelpTable { + border: 1px dotted; + background-color: #F9F9F9; + margin: 1px; + padding: 5px; +} + +pre.depreciated { + font-family: Verdana,Arial,Helvetica,sans-serif; + font-size: 9pt; + border: 1px dotted #909090; + background-color: #F0F0F0; + margin-left: 10px; + margin-right: 10px; + margin-top: 10px; + margin-bottom: 10px; + padding: 5px; +} + +/*------------------------------------------------------------------------------ + webfx-tree +------------------------------------------------------------------------------*/ +.webfx-tree-container { + margin: 0px; + padding: 0px; + font: icon; + white-space: nowrap; +} + +.webfx-tree-item { + padding: 0px; + margin: 0px; + font: icon; + color: black; + white-space: nowrap; +} + +.webfx-tree-item a, .webfx-tree-item a:active, .webfx-tree-item a:hover { + margin-left: 3px; + padding: 1px 2px 1px 2px; +} + +.webfx-tree-item a { + color: black; + text-decoration: none; +} + +.webfx-tree-item a:hover { + color: blue; + text-decoration: underline; +} + +.webfx-tree-item a:active { + background: highlight; + color: highlighttext; + text-decoration: none; +} + +.webfx-tree-item img { + vertical-align: middle; + border: 0px; +} + +.webfx-tree-icon { + width: 16px; + height: 16px; +} + + +.tute-tag { color: #009999 } +.tute-attribute-name { color: #0000FF } +.tute-attribute-value { color: #0099FF } +.tute-entity { font-weight: bold; } +.tute-comment { font-style: italic } +.tute-inline-tag { color: #636311; font-weight: bold } diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/method.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/method.tpl new file mode 100755 index 00000000..4c96f2f2 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/method.tpl @@ -0,0 +1,126 @@ +<h2 class="tab">Method Detail</h2> +<!-- ============ METHOD DETAIL =========== --> +<strong>Summary:</strong><br /> +<div class="method-summary"> +{section name=methods loop=$methods} +{if $methods[methods].static} + <div class="method-definition"> + static {if $methods[methods].function_return} + <span class="method-result">{$methods[methods].function_return}</span> + {/if} + <a href="#{$methods[methods].method_dest}" title="details" class="method-name">{if $methods[methods].ifunction_call.returnsref}&{/if}{$methods[methods].function_name}</a> + {if count($methods[methods].ifunction_call.params)} + ({section name=params loop=$methods[methods].ifunction_call.params}{if $smarty.section.params.iteration != 1}, {/if}{if $methods[methods].ifunction_call.params[params].hasdefault}[{/if}<span class="var-type">{$methods[methods].ifunction_call.params[params].type}</span> <span class="var-name">{$methods[methods].ifunction_call.params[params].name}</span>{if $methods[methods].ifunction_call.params[params].hasdefault} = <span class="var-default">{$methods[methods].ifunction_call.params[params].default}</span>]{/if}{/section}) + {else} + () + {/if} + </div> +{/if} +{/section} +{section name=methods loop=$methods} +{if !$methods[methods].static} + <div class="method-definition"> + {if $methods[methods].function_return} + <span class="method-result">{$methods[methods].function_return}</span> + {/if} + <a href="#{$methods[methods].method_dest}" title="details" class="method-name">{if $methods[methods].ifunction_call.returnsref}&{/if}{$methods[methods].function_name}</a> + {if count($methods[methods].ifunction_call.params)} + ({section name=params loop=$methods[methods].ifunction_call.params}{if $smarty.section.params.iteration != 1}, {/if}{if $methods[methods].ifunction_call.params[params].hasdefault}[{/if}<span class="var-type">{$methods[methods].ifunction_call.params[params].type}</span> <span class="var-name">{$methods[methods].ifunction_call.params[params].name}</span>{if $methods[methods].ifunction_call.params[params].hasdefault} = <span class="var-default">{$methods[methods].ifunction_call.params[params].default}</span>]{/if}{/section}) + {else} + () + {/if} + </div> +{/if} +{/section} +</div> +<hr /> +<A NAME='method_detail'></A> + + +{section name=methods loop=$methods} +{if $methods[methods].static} +<a name="{$methods[methods].method_dest}" id="{$methods[methods].method_dest}"><!-- --></a> +<div style="background='{cycle values="#ffffff,#eeeeee"}'"><h4> +<img src="{$subdir}media/images/PublicMethod.gif" border="0" /> <strong class="method">Static Method {$methods[methods].function_name}</strong> (line <span class="linenumber">{if $methods[methods].slink}{$methods[methods].slink}{else}{$methods[methods].line_number}{/if}</span>) + </h4> +<h4><i>{$methods[methods].function_return}</i> <strong>{if $methods[methods].ifunction_call.returnsref}&{/if}{$methods[methods].function_name}( +{if count($methods[methods].ifunction_call.params)} +{section name=params loop=$methods[methods].ifunction_call.params} +{if $smarty.section.params.iteration != 1}, {/if} +{if $methods[methods].ifunction_call.params[params].hasdefault}[{/if}{$methods[methods].ifunction_call.params[params].type} +{$methods[methods].ifunction_call.params[params].name}{if $methods[methods].ifunction_call.params[params].hasdefault} = {$methods[methods].ifunction_call.params[params].default}]{/if} +{/section} +{/if})</strong></h4> +{if $methods[methods].descmethod} + <p>Overridden in child classes as:<br /> + {section name=dm loop=$methods[methods].descmethod} + <dl> + <dt>{$methods[methods].descmethod[dm].link}</dt> + <dd>{$methods[methods].descmethod[dm].sdesc}</dd> + </dl> + {/section}</p> +{/if} + +{if $methods[methods].method_overrides} +<p><strong>Overrides :</strong> {$methods[methods].method_overrides.link} {$methods[methods].method_overrides.sdesc|default:"parent method not documented"}</p> +{/if} + {if $methods[methods].method_implements} + <hr class="separator" /> + <div class="notes">Implementation of:</div> + {section name=imp loop=$methods[methods].method_implements} + <dl> + <dt>{$methods[methods].method_implements[imp].link}</dt> + {if $methods[methods].method_implements[imp].sdesc} + <dd>{$methods[methods].method_implements[imp].sdesc}</dd> + {/if} + </dl> + {/section} + {/if} +{include file="docblock.tpl" sdesc=$methods[methods].sdesc desc=$methods[methods].desc tags=$methods[methods].tags params=$methods[methods].params function=true} +</div> +{/if} +{/section} +{section name=methods loop=$methods} +{if !$methods[methods].static} +<a name="{$methods[methods].method_dest}" id="{$methods[methods].method_dest}"><!-- --></a> +<div style="background='{cycle values="#ffffff,#eeeeee"}'"><h4> +<img src="{$subdir}media/images/{if $methods[methods].ifunction_call.constructor}Constructor{elseif $methods[methods].ifunction_call.destructor}Destructor{else}PublicMethod{/if}.gif" border="0" /> <strong class="method">{if $methods[methods].ifunction_call.constructor}Constructor {elseif $methods[methods].ifunction_call.destructor}Destructor {else}Method {/if}{$methods[methods].function_name}</strong> (line <span class="linenumber">{if $methods[methods].slink}{$methods[methods].slink}{else}{$methods[methods].line_number}{/if}</span>) + </h4> +<h4><i>{$methods[methods].function_return}</i> <strong>{if $methods[methods].ifunction_call.returnsref}&{/if}{$methods[methods].function_name}( +{if count($methods[methods].ifunction_call.params)} +{section name=params loop=$methods[methods].ifunction_call.params} +{if $smarty.section.params.iteration != 1}, {/if} +{if $methods[methods].ifunction_call.params[params].hasdefault}[{/if}{$methods[methods].ifunction_call.params[params].type} +{$methods[methods].ifunction_call.params[params].name}{if $methods[methods].ifunction_call.params[params].hasdefault} = {$methods[methods].ifunction_call.params[params].default}]{/if} +{/section} +{/if})</strong></h4> +{if $methods[methods].descmethod} + <p>Overridden in child classes as:<br /> + {section name=dm loop=$methods[methods].descmethod} + <dl> + <dt>{$methods[methods].descmethod[dm].link}</dt> + <dd>{$methods[methods].descmethod[dm].sdesc}</dd> + </dl> + {/section}</p> +{/if} + +{if $methods[methods].method_overrides} +<p><strong>Overrides :</strong> {$methods[methods].method_overrides.link} {$methods[methods].method_overrides.sdesc|default:"parent method not documented"}</p> +{/if} + {if $methods[methods].method_implements} + <hr class="separator" /> + <div class="notes">Implementation of:</div> + {section name=imp loop=$methods[methods].method_implements} + <dl> + <dt>{$methods[methods].method_implements[imp].link}</dt> + {if $methods[methods].method_implements[imp].sdesc} + <dd>{$methods[methods].method_implements[imp].sdesc}</dd> + {/if} + </dl> + {/section} + {/if} +{include file="docblock.tpl" sdesc=$methods[methods].sdesc desc=$methods[methods].desc tags=$methods[methods].tags params=$methods[methods].params function=true} +</div> +{/if} +{/section} +<script type="text/javascript">tp1.addTabPage( document.getElementById( "tabPage2" ) );</script> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/page.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/page.tpl new file mode 100755 index 00000000..5a9da0e4 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/page.tpl @@ -0,0 +1,53 @@ +{include file="header.tpl" top3=true} +<h2>File: {$source_location}</h2> +<div class="tab-pane" id="tabPane1"> +<script type="text/javascript"> +tp1 = new WebFXTabPane( document.getElementById( "tabPane1" ) ); +</script> + +<div class="tab-page" id="Description"> +<h2 class="tab">Description</h2> +{if $tutorial} +<div class="maintutorial">Main Tutorial: {$tutorial}</div> +{/if} +{include file="docblock.tpl" desc=$desc sdesc=$sdesc tags=$tags} +<!-- =========== Used Classes =========== --> +<A NAME='classes_summary'><!-- --></A> +<h3>Classes defined in this file</h3> + +<TABLE CELLPADDING='3' CELLSPACING='0' WIDTH='100%' CLASS="border"> + <THEAD> + <TR><TD STYLE="width:20%"><h4>CLASS NAME</h4></TD><TD STYLE="width: 80%"><h4>DESCRIPTION</h4></TD></TR> + </THEAD> + <TBODY> + {section name=classes loop=$classes} + <TR BGCOLOR='white' CLASS='TableRowColor'> + <TD>{$classes[classes].link}</TD> + <TD>{$classes[classes].sdesc}</TD> + </TR> + {/section} + </TBODY> +</TABLE> +</div> +<script type="text/javascript">tp1.addTabPage( document.getElementById( "Description" ) );</script> +<div class="tab-page" id="tabPage1"> +{include file="include.tpl"} +</div> +<div class="tab-page" id="tabPage2"> +{include file="global.tpl"} +</div> +<div class="tab-page" id="tabPage3"> +{include file="define.tpl"} +</div> +<div class="tab-page" id="tabPage4"> +{include file="function.tpl"} +</div> +</div> +<script type="text/javascript"> +//<![CDATA[ + +setupAllTabs(); + +//]]> +</script> +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/pkgelementindex.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/pkgelementindex.tpl new file mode 100755 index 00000000..c29ea982 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/pkgelementindex.tpl @@ -0,0 +1,17 @@ +{include file="header.tpl"} +<a name="top"></a> +<h2>Element Index, Package {$package}</h2> +{if count($packageindex) > 1} +<strong>Indexes by package:</strong><br> +{/if} +<ul> +{section name=p loop=$packageindex} +{if $packageindex[p].title != $package} +<li><a href="elementindex_{$packageindex[p].title}.html">{$packageindex[p].title}</a></li> +{/if} +{/section} +</ul> +<a href="elementindex.html"><strong>Index of all elements</strong></a> +<br /> +{include file="basicindex.tpl" indexname=elementindex_$package} +{include file="footer.tpl"} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/ric.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/ric.tpl new file mode 100755 index 00000000..ad792475 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/ric.tpl @@ -0,0 +1,6 @@ +{include file="header.tpl"} +<div align="center"><h1>{$name}</h1></div> +<pre> +{$contents|htmlentities} +</pre> +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/todolist.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/todolist.tpl new file mode 100755 index 00000000..f929ccdb --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/todolist.tpl @@ -0,0 +1,14 @@ +{include file="header.tpl" title="Todo List"} +<div align="center"><h1>Todo List</h1></div> +{foreach from=$todos key=todopackage item=todo} +<h2>{$todopackage}</h2> +{section name=todo loop=$todo} +<h3>{$todo[todo].link}</h3> +<ul> +{section name=t loop=$todo[todo].todos} + <li>{$todo[todo].todos[t]}</li> +{/section} +</ul> +{/section} +{/foreach} +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/top_frame.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/top_frame.tpl new file mode 100755 index 00000000..806283f4 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/top_frame.tpl @@ -0,0 +1,16 @@ +{include file="header.tpl" top1=true} +{if count($ric) >= 1} +<ul> +{section name=ric loop=$ric} + <li><a href="{$ric[ric].file}" target="right">{$ric[ric].name}</a></li> +{/section} +</ul> +{/if} +<h1>Packages</h1> +<ul> +{section name=p loop=$packages} + <li><a class="package" href='{$packages[p].link}' target='left_bottom'>{$packages[p].title}</a></li> +{/section} +</ul> +</body> +</html>
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/tutorial.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/tutorial.tpl new file mode 100755 index 00000000..a943522c --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/tutorial.tpl @@ -0,0 +1,32 @@ +{include file="header.tpl" title=$title} +{if $nav} +<table width="100%" border="0" cellpadding="0" cellspacing="0"> +<tr> +<td width="10%" align="left" valign="bottom">{if $prev}<a href= +"{$prev}">{/if}Prev{if $prev}</a>{/if}</td> +<td width="80%" align="center" valign="bottom"></td> +<td width="10%" align="right" valign="bottom">{if $next}<a href= +"{$next}">{/if}Next{if $next}</a>{/if}</td> +</tr> +</table> +{/if} +{$contents} +{if $nav} +<table width="100%" border="0" cellpadding="0" cellspacing="0"> +<tr> +<td width="33%" align="left" valign="top">{if $prev}<a href="{$prev}">{/if} +Prev{if $prev}</a>{/if}</td> +<td width="34%" align="center" valign="top">{if $up}<a href= +"{$up}">Up</a>{else} {/if}</td> +<td width="33%" align="right" valign="top">{if $next}<a href= +"{$next}">{/if}Next{if $next}</a>{/if}</td> +</tr> + +<tr> +<td width="33%" align="left" valign="top">{if $prevtitle}{$prevtitle}{/if}</td> +<td width="34%" align="center" valign="top">{if $uptitle}{$uptitle}{/if}</td> +<td width="33%" align="right" valign="top">{if $nexttitle}{$nexttitle}{/if}</td> +</tr> +</table> +{/if} +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/tutorial_toc.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/tutorial_toc.tpl new file mode 100755 index 00000000..3d22d403 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/tutorial_toc.tpl @@ -0,0 +1,29 @@ +{if count($toc)} +<h1 align="center">Table of Contents</h1> +<ul> +{section name=toc loop=$toc} +{if $toc[toc].tagname == 'refsect1'} +{assign var="context" value="refsect1"} +{$toc[toc].link}<br /> +{/if} +{if $toc[toc].tagname == 'refsect2'} +{assign var="context" value="refsect2"} + {$toc[toc].link}<br /> +{/if} +{if $toc[toc].tagname == 'refsect3'} +{assign var="context" value="refsect3"} + {$toc[toc].link}<br /> +{/if} +{if $toc[toc].tagname == 'table'} +{if $context == 'refsect2'} {/if} +{if $context == 'refsect3'} {/if} +Table: {$toc[toc].link} +{/if} +{if $toc[toc].tagname == 'example'} +{if $context == 'refsect2'} {/if} +{if $context == 'refsect3'} {/if} +Table: {$toc[toc].link} +{/if} +{/section} +</ul> +{/if}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/tutorial_tree.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/tutorial_tree.tpl new file mode 100755 index 00000000..23459a96 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/tutorial_tree.tpl @@ -0,0 +1,13 @@ + var {$name}tree = new WebFXTree{if $subtree}Item{/if}('{$main.title|strip_tags}','{$main.link}'); +{if !$subtree} {$name}tree.setBehavior('classic'); +{/if} {$name}tree.openIcon = 'media/images/msgInformation.gif'; + {$name}tree.icon = 'media/images/{if $subtree}msgInformation.gif{else}FolderClosed.gif{/if}'; +{if $kids} +{$kids} + +{/if}{if $subtree} {$parent}tree.add({$name}tree); +{else} + document.write({$name}tree); +{/if} + + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/var.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/var.tpl new file mode 100755 index 00000000..7b293351 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/var.tpl @@ -0,0 +1,49 @@ + +<h2 class="tab">Class Variables</h2> +<!-- ============ VARIABLE DETAIL =========== --> +<strong>Summary:</strong><br /> +{section name=vars loop=$vars} +{if $vars[vars].static} +<div class="var-title"> + static <span class="var-type">{$vars[vars].var_type}</span> + <a href="#{$vars[vars].var_dest}" title="details" class="property"><strong>{$vars[vars].var_name}</strong></a> +</div> +{/if} +{/section} +{section name=vars loop=$vars} +{if !$vars[vars].static} +<div class="var-title"> + <span class="var-type">{$vars[vars].var_type}</span> + <a href="#{$vars[vars].var_dest}" title="details" class="property"><strong>{$vars[vars].var_name}</strong></a> +</div> +{/if} +{/section} +<hr /> +{section name=vars loop=$vars} +{if $vars[vars].static} +<a name="{$vars[vars].var_dest}" id="{$vars[vars].var_dest}"><!-- --></A> +<div style="background='{cycle values="#ffffff,#eeeeee"}'"> +<h4> +<img src="{$subdir}media/images/PublicProperty.gif" border="0" /> <strong class="property">static {$vars[vars].var_name}{if $vars[vars].var_default} = {$vars[vars].var_default|replace:"\n":"<br />"}{/if}</strong> (line <span class="linenumber">{if $vars[vars].slink}{$vars[vars].slink}{else}{$vars[vars].line_number}{/if}</span>) + </h4> +<h4>Data type : {$vars[vars].var_type}</h4> +{if $vars[vars].var_overrides}<p><strong>Overrides:</strong> {$vars[vars].var_overrides}<br></p>{/if} +{include file="docblock.tpl" sdesc=$vars[vars].sdesc desc=$vars[vars].desc tags=$vars[vars].tags} +</div> +{/if} +{/section} +{section name=vars loop=$vars} +{if !$vars[vars].static} +<a name="{$vars[vars].var_dest}" id="{$vars[vars].var_dest}"><!-- --></A> +<div style="background='{cycle values="#ffffff,#eeeeee"}'"> +<h4> +<img src="{$subdir}media/images/PublicProperty.gif" border="0" /> <strong class="property">{$vars[vars].var_name}{if $vars[vars].var_default} = {$vars[vars].var_default|replace:"\n":"<br />"}{/if}</strong> (line <span class="linenumber">{if $vars[vars].slink}{$vars[vars].slink}{else}{$vars[vars].line_number}{/if}</span>) + </h4> +<h4>Data type : {$vars[vars].var_type}</h4> +{if $vars[vars].var_overrides}<p><strong>Overrides:</strong> {$vars[vars].var_overrides}<br></p>{/if} +{include file="docblock.tpl" sdesc=$vars[vars].sdesc desc=$vars[vars].desc tags=$vars[vars].tags} +</div> +{/if} +{/section} +<script type="text/javascript">tp1.addTabPage( document.getElementById( "tabPage1" ) );</script> + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/options.ini b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/options.ini new file mode 100755 index 00000000..084809be --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/options.ini @@ -0,0 +1,577 @@ +preservedocbooktags = false + +;; used to highlight the {@source} inline tag, @filesource tag, and @example tag +[highlightSourceTokens] +;; format: +;; T_CONSTANTNAME = open +;; /T_CONSTANTNAME = close + +T_INCLUDE = <span class="src-inc"> +/T_INCLUDE = </span> +T_INCLUDE_ONCE = <span class="src-inc"> +/T_INCLUDE_ONCE = </span> +T_REQUIRE_ONCE = <span class="src-inc"> +/T_REQUIRE_ONCE = </span> +T_REQUIRE_ONCE = <span class="src-inc"> +/T_REQUIRE_ONCE = </span> + +T_CONSTANT_ENCAPSED_STRING = <span class="src-str"> +/T_CONSTANT_ENCAPSED_STRING = </span> +T_STRING_VARNAME = <span class="src-str"> +/T_STRING_VARNAME = </span> + +T_STRING = <span class="src-id"> +/T_STRING = </span> + +T_DNUMBER = <span class="src-num"> +/T_DNUMBER = </span> +T_LNUMBER = <span class="src-num"> +/T_LNUMBER = </span> + +T_VARIABLE = <span class="src-var"> +/T_VARIABLE = </span> + +T_COMMENT = <span class="src-comm"> +/T_COMMENT = </span> +T_ML_COMMENT = <span class="src-comm"> +/T_ML_COMMENT = </span> + +T_OBJECT_OPERATOR = <span class="src-sym"> +/T_OBJECT_OPERATOR = </span> + +T_ABSTRACT = <span class="src-key"> +/T_ABSTRACT = </span> +T_CLONE = <span class="src-key"> +/T_CLONE = </span> +T_HALT_COMPILER = <span class="src-key"> +/T_HALT_COMPILER = </span> +T_ARRAY = <span class="src-key"> +/T_ARRAY = </span> +T_AS = <span class="src-key"> +/T_AS = </span> +T_BREAK = <span class="src-key"> +/T_BREAK = </span> +T_CLASS = <span class="src-key"> +/T_CLASS = </span> +T_CASE = <span class="src-key"> +/T_CASE = </span> +T_CONST = <span class="src-key"> +/T_CONST = </span> +T_CONTINUE = <span class="src-key"> +/T_CONTINUE = </span> +T_DECLARE = <span class="src-key"> +/T_DECLARE = </span> +T_DEFAULT = <span class="src-key"> +/T_DEFAULT = </span> +T_ELSE = <span class="src-key"> +/T_ELSE = </span> +T_ELSEIF = <span class="src-key"> +/T_ELSEIF = </span> +T_EMPTY = <span class="src-key"> +/T_EMPTY = </span> +T_ENDDECLARE = <span class="src-key"> +/T_ENDDECLARE = </span> +T_ENDFOR = <span class="src-key"> +/T_ENDFOR = </span> +T_ENDSWITCH = <span class="src-key"> +/T_ENDSWITCH = </span> +T_ENDFOREACH = <span class="src-key"> +/T_ENDFOREACH = </span> +T_ENDIF = <span class="src-key"> +/T_ENDIF = </span> +T_ENDWHILE = <span class="src-key"> +/T_ENDWHILE = </span> +T_EXIT = <span class="src-key"> +/T_EXIT = </span> +T_EXTENDS = <span class="src-key"> +/T_EXTENDS = </span> +T_FINAL = <span class="src-key"> +/T_FINAL = </span> +T_FOR = <span class="src-key"> +/T_FOR = </span> +T_FOREACH = <span class="src-key"> +/T_FOREACH = </span> +T_FUNCTION = <span class="src-key"> +/T_FUNCTION = </span> +T_GLOBAL = <span class="src-key"> +/T_GLOBAL = </span> +T_IF = <span class="src-key"> +/T_IF = </span> +T_IMPLEMENTS = <span class="src-key"> +/T_IMPLEMENTS = </span> +T_INTERFACE = <span class="src-key"> +/T_INTERFACE = </span> +T_LOGICAL_AND = <span class="src-key"> +/T_LOGICAL_AND = </span> +T_LOGICAL_OR = <span class="src-key"> +/T_LOGICAL_OR = </span> +T_LOGICAL_XOR = <span class="src-key"> +/T_LOGICAL_XOR = </span> +T_NEW = <span class="src-key"> +/T_NEW = </span> +T_PRIVATE = <span class="src-key"> +/T_PRIVATE = </span> +T_PROTECTED = <span class="src-key"> +/T_PROTECTED = </span> +T_PUBLIC = <span class="src-key"> +/T_PUBLIC = </span> +T_RETURN = <span class="src-key"> +/T_RETURN = </span> +T_STATIC = <span class="src-key"> +/T_STATIC = </span> +T_SWITCH = <span class="src-key"> +/T_SWITCH = </span> +T_VAR = <span class="src-key"> +/T_VAR = </span> +T_WHILE = <span class="src-key"> +/T_WHILE = </span> + +T_DOUBLE_COLON = <span class="src-sym"> +/T_DOUBLE_COLON = </span> + +T_OPEN_TAG = <span class="src-php"> +/T_OPEN_TAG = </span> +T_OPEN_TAG_WITH_ECHO = <span class="src-php"> +/T_OPEN_TAG_WITH_ECHO = </span> +T_CLOSE_TAG = <span class="src-php"> +/T_CLOSE_TAG = </span> + + +[highlightSource] +;; this is for highlighting things that aren't tokens like "&" +;; format: +;; word = open +;; /word = close +@ = <span class="src-sym"> +/@ = </span> +& = <span class="src-sym"> +/& = </span> +[ = <span class="src-sym"> +/[ = </span> +] = <span class="src-sym"> +/] = </span> +! = <span class="src-sym"> +/! = </span> +";" = <span class="src-sym"> +/; = </span> +( = <span class="src-sym"> +/( = </span> +) = <span class="src-sym"> +/) = </span> +, = <span class="src-sym"> +/, = </span> +{ = <span class="src-sym"> +/{ = </span> +} = <span class="src-sym"> +/} = </span> +""" = <span class="src-str"> +/" = </span> + +[highlightDocBlockSourceTokens] +;; this is for docblock tokens, using by phpDocumentor_HighlightParser +;; tagphptype is for "string" in @param string description, for example +docblock = <span class="src-doc"> +/docblock = </span> +tagphptype = <span class="src-doc-type"> +/tagphptype = </span> +tagvarname = <span class="src-doc-var"> +/tagvarname = </span> +coretag = <span class="src-doc-coretag"> +/coretag = </span> +tag = <span class="src-doc-tag"> +/tag = </span> +inlinetag = <span class="src-doc-inlinetag"> +/inlinetag = </span> +internal = <span class="src-doc-internal"> +/internal = </span> +closetemplate = <span class="src-doc-close-template"> +/closetemplate = </span> +docblocktemplate = <span class="src-doc-template"> +/docblocktemplate = </span> + +[highlightTutorialSourceTokens] +;; this is for XML DocBook-based tutorials, highlighted by phpDocumentor_TutorialHighlightParser +;; <tag> +opentag = <span class="tute-tag"> +/opentag = </span> +;; </tag> +closetag = <span class="tute-tag"> +/closetag = </span> +;; <tag attribute="value"> +attribute = <span class="tute-attribute-name"> +/attribute = </span> +;; <tag attribute="value"> +attributevalue = <span class="tute-attribute-value"> +/attributevalue = </span> +;; &entity; +entity = <span class="tute-entity"> +/entity = </span> +;; <!-- comment --> +comment = <span class="tute-comment"> +/comment = </span> +;; {@inline tag} +itag = <span class="tute-inline-tag"> +/itag = </span> + +;; used for translation of html in DocBlocks +[desctranslate] +ul = <ul> +/ul = </ul> +ol = <ol> +/ol = </ol> +li = <li> +/li = </li> +code = +/code = +var = <var> +/var = </var> +samp = <samp> +/samp = </samp> +kbd = <kbd> +/kbd = </kbd> +pre = <pre> +/pre = </pre> +p = <p> +/p = </p> +b = <strong> +/b = </strong> +i = <em> +/i = </em> +br = <br /> + +[ppage] +;; this is the DocBook package page translation section. All DocBook tags +;; that have a corresponding html tag must be listed here. Entities should +;; also be listed here +;; +;; examples: +;; 1) +;; tagname = newtagname +;; +;; This is the simplest case, where all attributes will be added into the +;; starting tag and the ending tag will be html/xml style </tranlatedtagname> +;; <tagname></tagname> becomes <newtagname></newtagname> and +;; <tagname attr="value"></tagname> becomes +;; <newtagname attr="value"></newtagname> +;; +;; 2) +;; tagname = newtagname +;; tagname->attr = newattrname +;; +;; in this case, everything will be like the first case, except tags like: +;; <tagname attr="value"></tagname> will become +;; <newtagname newattrname="value"></newtagname> +;; +;; 3) +;; tagname = newtagname +;; tagname->attr = newattrname +;; tagname->attr+value = newvalue +;; +;; in this case, the value is also translated to another. This can be useful +;; for instances such as focus="middle" changing to align="center" or something +;; of that nature. +;; <tagname attr="value"></tagname> will become +;; <newtagname newattrname="newvalue"></newtagname> +;; +;; 4) +;; tagname = newtagname +;; tagname->attr1 = newattrname +;; tagname->attr2 = newattrname +;; tagname->attr1+value|attr2+value = newvalue +;; +;; in this case, two attributes combine to make one new attribute, and the combined +;; value is translated into a new value +;; <tagname attr1="value1" attr2="value2"></tagname> will become +;; <newtagname newattrname="newvalue"></newtagname> +;; +;; 5) +;; tagname = newtagname +;; tagname!attr = dummy +;; +;; here, the attribute will be ignored. dummy is not used and may be any value +;; <tagname attr="value"></tagname> will become +;; <newtagname></newtagname> +;; +;; 6) +;; tagname = newtagname +;; tagname! = dummy +;; +;; here, all attributes will be ignored. dummy is not used and may be any value +;; <tagname attr1="value" attr2="foo"></tagname> will become +;; <newtagname></newtagname> +;; +;; 7) +;; tagname = newtagname +;; tagname/ = 1 +;; +;; here, the tag will be translated as a single tag with no closing tag, and all +;; attributes +;; <tagname attr="val">{text text}</tagname> will become +;; <newtagname attr="val" /> +;; +;; 8) +;; tagname = <starttaginfo /> +;; /tagname = closetagtext +;; +;; in this case, the text <starttaginfo> will be inserted exactly as entered for +;; <tagname> and closetagtext for </tagname> +;; <tagname attr="val"></tagname> will become +;; <starttaginfo />closetagtext +;; +;; 9) +;; $attr$my_attribute = newattrname +;; +;; tagname = newtagname +;; +;; in this case, all occurences of my_attribute in any tag will be changed to +;; newattrname. This is useful for changing things like role="php" to +;; class="php," for example. Note that the text "$attr$" MUST be on the line +;; start for phpDocumentor to recognize it. +;; +;; 10) +;; &entity; = translation text +;; " = " +;; " = """ +;; < = < +;; +;; Use this to control translation of entities to their appropriate values + + = +" = " +” = ” +“ = “ +& = & +< = < +> = > +© = © + + +$attr$role = class + +abbrev = abbr + +blockquote = blockquote + +arg = span +arg->choice = class + +author = <span class="author"> +/author = </span> +author! = 0 + +authorblurb = <div class="author-blurb"> +/authorblurb = </div> + +authorgroup = <div class="authors"><h2 class="title">Authors</h2> +/authorgroup = </div> +authorgroup! = 0 + +caution = <span class="warning"> +/caution = </span> +caution! = 0 + +cmdsynopsis = <div class="cmd-synopsis"> +/cmdsynopsis = </div> + +command = <span class="cmd-title"> +/command = </span> + +copyright = <div class="notes"> +/copyright = </div> + +emphasis = em + +example = <div class="src-code"> +/example = </div> +example! = 0 + +function = +/function = () + +formalpara = p + +graphic = img +graphic->fileref = src +graphic/ = + +important = strong + +informalequation = blockquote + +informalexample = div + +inlineequation = em + +itemizedlist = ul + +listitem = li + +literal = code + +literallayout = span + +option = " " +/option = + +orderedlist = ol + +para = p + +programlisting = <div class="src-code"> +/programlisting = </div> +programlisting! = 0 + +refentry = div + +refnamediv = <div class="ref-title-box"> +/refnamediv = </div> +refnamediv! = 0 + +refname = <h1 class="ref-title"> +/refname = </h1> + +refpurpose = <h2 class="ref-purpose"> +/refpurpose = </h2> + +refsynopsisdiv = <div class="ref-synopsis"> +/refsynopsisdiv = </div> +refsynopsisdiv! = 0 + +refsect1 = span + +refsect2 = span + +refsect3 = +/refsect3 = <br /> + +releaseinfo = <div class="release-info">( +/releaseinfo = )</div> + +simpara = +/simpara = <br /> +simpara! = 0 + +subscript = sub + +superscript = super + +table = table + +table->colsep = rules +table->rowsep = rules +table->colsep+1|rowsep+1 =all +table->colsep+1|rowsep+0 =cols +table->colsep+0|rowsep+1 =rows + +table->frame =frame +table->frame+all =border +table->frame+none =void +table->frame+sides =vsides +table->frame+top =above +table->frame+topbot =hsides + +thead = thead + +tfoot = tfoot + +tbody = tbody + +colspec = col + +tgroup = colgroup +tgroup/ = 1 +tgroup->cols = span + +row = tr + +entry = td +entry->morerows = colspan +entry->morerows+1 =2 +entry->morerows+2 =3 +entry->morerows+3 =4 +entry->morerows+4 =5 +entry->morerows+5 =6 +entry->morerows+6 =7 +entry->morerows+7 =8 +entry->morerows+8 =9 +entry->morerows+9 =10 +entry->morerows+10 =11 +;; add more if you need more colspans + +warning = <span class="warning"> +/warning = </span> +warning! = 0 + +;; now begins the attributes that should be tags in cdata +[$attr$id] +open = a +;close = /a +cdata! = true +quotevalues = true +separator = "=" +;separateall = true +$id = name + +;; now begins the sections that deal with <title> +[refsynopsisdiv_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h1 class="title"> +close = </h1> + +[refsect1_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h2 class="title"> +close = </h2> + +[refsect2_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h3 class="title"> +close = </h3> + +[refsect3_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <h4 class="title"> +close = </h4> + +[para_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <div class="title"> +close = </div> + +[formalpara_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = <div class="title"> +close = </div> + +[example_title] +;tag_attr = true +;attr_name = title +;cdata_start = true +cdata_end = true +open = </td></tr><tr><td><strong> +close = </strong> + +[table_title] +;tag_attr = true +;attr_name = true +cdata_start = true +open = <caption> +close = </caption> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/basicindex.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/basicindex.tpl new file mode 100755 index 00000000..951ee264 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/basicindex.tpl @@ -0,0 +1,47 @@ +<div class="index-letter-menu"> +{section name=letter loop=$letters} + <a class="index-letter" href="{$indexname}.html#{$letters[letter].letter}">{$letters[letter].letter}</a> +{/section} +</div> + +{section name=index loop=$index} + <a name="{$index[index].letter}"></a> + <div class="index-letter-section"> + <div style="float: left" class="index-letter-title">{$index[index].letter}</div> + <div style="float: right"><a href="#top">top</a></div> + <div style="clear: both"></div> + </div> + <dl> + {section name=contents loop=$index[index].index} + <dt class="field"> + {if ($index[index].index[contents].title == "Variable")} + <span class="var-title">{$index[index].index[contents].name}</span> + {elseif ($index[index].index[contents].title == "Global")} + <span class="var-title">{$index[index].index[contents].name}</span> + {elseif ($index[index].index[contents].title == "Method")} + <span class="method-title">{$index[index].index[contents].name}</span> + {elseif ($index[index].index[contents].title == "Function")} + <span class="method-title">{$index[index].index[contents].name}</span> + {elseif ($index[index].index[contents].title == "Constant")} + <span class="const-title">{$index[index].index[contents].name}</span> + {elseif ($index[index].index[contents].title == "Page") || ($index[index].index[contents].title == "Include")} + <span class="include-title">{$index[index].index[contents].name}</span> + {else} + {$index[index].index[contents].name} + {/if} + </dt> + <dd class="index-item-body"> + <div class="index-item-details">{$index[index].index[contents].link} in {$index[index].index[contents].file_name}</div> + {if $index[index].index[contents].description} + <div class="index-item-description">{$index[index].index[contents].description}</div> + {/if} + </dd> + {/section} + </dl> +{/section} + +<div class="index-letter-menu"> +{section name=letter loop=$letters} + <a class="index-letter" href="{$indexname}.html#{$letters[letter].letter}">{$letters[letter].letter}</a> +{/section} +</div> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/blank.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/blank.tpl new file mode 100755 index 00000000..6a05f27e --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/blank.tpl @@ -0,0 +1,13 @@ +<html> +<head> + <title>{$maintitle}</title> + <link rel="stylesheet" href="{$subdir}media/stylesheet.css" /> + <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/> +</head> +<body> +<div align="center"><h1>{$maintitle}</h1></div> +<b>Welcome to {$package}!</b><br /> +<br /> +This documentation was generated by <a href="{$phpdocwebsite}">phpDocumentor v{$phpdocversion}</a><br /> +</body> +</html>
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/class.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/class.tpl new file mode 100755 index 00000000..9ab7c455 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/class.tpl @@ -0,0 +1,429 @@ +{include file="header.tpl" top3=true} + +<h2 class="class-name">{if $is_interface}Interface{else}Class{/if} {$class_name}</h2> + +<a name="sec-description"></a> +<div class="info-box"> + <div class="info-box-title">Description</div> + <div class="nav-bar"> + {if $children || $vars || $ivars || $methods || $imethods || $consts || $iconsts } + <span class="disabled">Description</span> | + {/if} + {if $children} + <a href="#sec-descendents">Descendents</a> + {if $vars || $ivars || $methods || $imethods || $consts || $iconsts}|{/if} + {/if} + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + {if $methods || $imethods}|{/if} + {/if} + {if $methods || $imethods} + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + {if $implements} + <p class="implements"> + Implements interfaces: + <ul> + {foreach item="int" from=$implements}<li>{$int}</li>{/foreach} + </ul> + </p> + {/if} + {include file="docblock.tpl" type="class" sdesc=$sdesc desc=$desc} + <p class="notes"> + Located in <a class="field" href="{$page_link}">{$source_location}</a> (line <span class="field">{if $class_slink}{$class_slink}{else}{$line_number}{/if}</span>) + </p> + + {if $tutorial} + <hr class="separator" /> + <div class="notes">Tutorial: <span class="tutorial">{$tutorial}</span></div> + {/if} + + <pre>{section name=tree loop=$class_tree.classes}{$class_tree.classes[tree]}{$class_tree.distance[tree]}{/section}</pre> + + {if $conflicts.conflict_type} + <hr class="separator" /> + <div><span class="warning">Conflicts with classes:</span><br /> + {section name=me loop=$conflicts.conflicts} + {$conflicts.conflicts[me]}<br /> + {/section} + </div> + {/if} + </div> +</div> + +{if $children} + <a name="sec-descendents"></a> + <div class="info-box"> + <div class="info-box-title">Direct descendents</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + <span class="disabled">Descendents</span> + {if $vars || $ivars || $methods || $imethods}|{/if} + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + {if $methods || $imethods}|{/if} + {/if} + {if $methods || $imethods} + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + <table cellpadding="2" cellspacing="0" class="class-table"> + <tr> + <th class="class-table-header">Class</th> + <th class="class-table-header">Description</th> + </tr> + {section name=kids loop=$children} + <tr> + <td style="padding-right: 2em">{$children[kids].link}</td> + <td> + {if $children[kids].sdesc} + {$children[kids].sdesc} + {else} + {$children[kids].desc} + {/if} + </td> + </tr> + {/section} + </table> + </div> + </div> +{/if} + +{if $consts} + <a name="sec-const-summary"></a> + <div class="info-box"> + <div class="info-box-title">Class Constant Summary</span></div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendants</a> | + {/if} + <span class="disabled">Constants</span> (<a href="#sec-consts">details</a>) + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + | + {/if} + {if $methods || $imethods} + | + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + <div class="const-summary"> + {section name=consts loop=$consts} + <div class="const-title"> + <img src="{$subdir}media/images/Constant.png" alt=" " /> + <a href="#{$consts[consts].const_name}" title="details" class="const-name">{$consts[consts].const_name}</a> = <span class="var-type">{$consts[consts].const_value}</span> + + </div> + {/section} + </div> + </div> + </div> +{/if} + +{if $vars} + <a name="sec-var-summary"></a> + <div class="info-box"> + <div class="info-box-title">Variable Summary</span></div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendents</a> | + {/if} + <span class="disabled">Vars</span> (<a href="#sec-vars">details</a>) + {if $methods || $imethods} + | + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + <div class="var-summary"> + {section name=vars loop=$vars} + {if $vars[vars].static} + <div class="var-title"> + static <span class="var-type">{$vars[vars].var_type}</span> + <a href="#{$vars[vars].var_name}" title="details" class="var-name">{$vars[vars].var_name}</a> + </div> + {/if} + {/section} + {section name=vars loop=$vars} + {if !$vars[vars].static} + <div class="var-title"> + <span class="var-type">{$vars[vars].var_type}</span> + <a href="#{$vars[vars].var_name}" title="details" class="var-name">{$vars[vars].var_name}</a> + </div> + {/if} + {/section} + </div> + </div> + </div> +{/if} + +{if $methods} + <a name="sec-method-summary"></a> + <div class="info-box"> + <div class="info-box-title">Method Summary</span></div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendents</a> | + {/if} + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + | + {/if} + <span class="disabled">Methods</span> (<a href="#sec-methods">details</a>) + </div> + <div class="info-box-body"> + <div class="method-summary"> + {section name=methods loop=$methods} + {if $methods[methods].static} + <div class="method-definition"> + static {if $methods[methods].function_return} + <span class="method-result">{$methods[methods].function_return}</span> + {/if} + <a href="#{$methods[methods].function_name}" title="details" class="method-name">{if $methods[methods].ifunction_call.returnsref}&{/if}{$methods[methods].function_name}</a> + {if count($methods[methods].ifunction_call.params)} + ({section name=params loop=$methods[methods].ifunction_call.params}{if $smarty.section.params.iteration != 1}, {/if}{if $methods[methods].ifunction_call.params[params].hasdefault}[{/if}<span class="var-type">{$methods[methods].ifunction_call.params[params].type}</span> <span class="var-name">{$methods[methods].ifunction_call.params[params].name}</span>{if $methods[methods].ifunction_call.params[params].hasdefault} = <span class="var-default">{$methods[methods].ifunction_call.params[params].default}</span>]{/if}{/section}) + {else} + () + {/if} + </div> + {/if} + {/section} + {section name=methods loop=$methods} + {if !$methods[methods].static} + <div class="method-definition"> + {if $methods[methods].function_return} + <span class="method-result">{$methods[methods].function_return}</span> + {/if} + <a href="#{$methods[methods].function_name}" title="details" class="method-name">{if $methods[methods].ifunction_call.returnsref}&{/if}{$methods[methods].function_name}</a> + {if count($methods[methods].ifunction_call.params)} + ({section name=params loop=$methods[methods].ifunction_call.params}{if $smarty.section.params.iteration != 1}, {/if}{if $methods[methods].ifunction_call.params[params].hasdefault}[{/if}<span class="var-type">{$methods[methods].ifunction_call.params[params].type}</span> <span class="var-name">{$methods[methods].ifunction_call.params[params].name}</span>{if $methods[methods].ifunction_call.params[params].hasdefault} = <span class="var-default">{$methods[methods].ifunction_call.params[params].default}</span>]{/if}{/section}) + {else} + () + {/if} + </div> + {/if} + {/section} + </div> + </div> + </div> +{/if} + +{if $vars || $ivars} + <a name="sec-vars"></a> + <div class="info-box"> + <div class="info-box-title">Variables</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendents</a> | + {/if} + {if $methods} + <a href="#sec-var-summary">Vars</a> (<span class="disabled">details</span>) + {else} + <span class="disabled">Vars</span> + {/if} + + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + {if $methods || $imethods} + | + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + {include file="var.tpl"} + {if $ivars} + <h4>Inherited Variables</h4> + <A NAME='inherited_vars'><!-- --></A> + {section name=ivars loop=$ivars} + <p>Inherited from <span class="classname">{$ivars[ivars].parent_class}</span></p> + <blockquote> + {section name=ivars2 loop=$ivars[ivars].ivars} + <span class="var-title"> + <span class="var-name">{$ivars[ivars].ivars[ivars2].link}</span>{if $ivars[ivars].ivars[ivars2].ivar_sdesc}: {$ivars[ivars].ivars[ivars2].ivar_sdesc}{/if}<br> + </span> + {/section} + </blockquote> + {/section} + {/if} + </div> + </div> +{/if} + +{if $methods || $imethods} + <a name="sec-methods"></a> + <div class="info-box"> + <div class="info-box-title">Methods</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendents</a> | + {/if} + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + {/if} + {if $consts || $iconsts} + {if $consts} + <a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>) + {else} + <a href="#sec-consts">Constants</a> + {/if} + {/if} + {if $methods} + <a href="#sec-method-summary">Methods</a> (<span class="disabled">details</span>) + {else} + <span class="disabled">Methods</span> + {/if} + </div> + <div class="info-box-body"> + {include file="method.tpl"} + {if $imethods} + <h4>Inherited Methods</h4> + <a name='inherited_methods'><!-- --></a> + {section name=imethods loop=$imethods} + <!-- =========== Summary =========== --> + <p>Inherited From <span class="classname">{$imethods[imethods].parent_class}</span></p> + <blockquote> + {section name=im2 loop=$imethods[imethods].imethods} + <span class="method-name">{$imethods[imethods].imethods[im2].link}</span>{if $imethods[imethods].imethods[im2].ifunction_sdesc}: {$imethods[imethods].imethods[im2].ifunction_sdesc}{/if}<br> + {/section} + </blockquote> + {/section} + {/if} + </div> + </div> +{/if} + +{if $consts || $iconsts} + <a name="sec-consts"></a> + <div class="info-box"> + <div class="info-box-title">Class Constants</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $children} + <a href="#sec-descendents">Descendants</a> | + {/if} + {if $methods} + <a href="#sec-var-summary">Constants</a> (<span class="disabled">details</span>) + {else} + <span class="disabled">Constants</span> + {/if} + + {if $vars || $ivars} + {if $vars} + <a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>) + {else} + <a href="#sec-vars">Vars</a> + {/if} + {/if} + {if $methods || $imethods} + | + {if $methods} + <a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>) + {else} + <a href="#sec-methods">Methods</a> + {/if} + {/if} + </div> + <div class="info-box-body"> + {include file="const.tpl"} + {if $iconsts} + <h4>Inherited Constants</h4> + <A NAME='inherited_vars'><!-- --></A> + {section name=iconsts loop=$iconsts} + <p>Inherited from <span class="classname">{$iconsts[iconsts].parent_class}</span></p> + <blockquote> + {section name=iconsts2 loop=$iconsts[iconsts].iconsts} + <img src="{$subdir}media/images/{if $iconsts[iconsts].iconsts[iconsts2].access == 'private'}PrivateVariable{else}Variable{/if}.png" /> + <span class="const-title"> + <span class="const-name">{$iconsts[iconsts].iconsts[iconsts2].link}</span>{if $iconsts[iconsts].iconsts[iconsts2].iconst_sdesc}: {$iconsts[iconsts].iconsts[iconsts2].iconst_sdesc}{/if}<br> + </span> + {/section} + </blockquote> + {/section} + {/if} + </div> + </div> +{/if} + +{include file="footer.tpl" top3=true} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/classtrees.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/classtrees.tpl new file mode 100755 index 00000000..952e6d50 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/classtrees.tpl @@ -0,0 +1,19 @@ +{include file="header.tpl" top1=true} + +<!-- Start of Class Data --> +<H2> + {$smarty.capture.title} +</H2> +{if $interfaces} +{section name=classtrees loop=$interfaces} +<h2>Root interface {$interfaces[classtrees].class}</h2> +{$interfaces[classtrees].class_tree} +{/section} +{/if} +{if $classtrees} +{section name=classtrees loop=$classtrees} +<h2>Root class {$classtrees[classtrees].class}</h2> +{$classtrees[classtrees].class_tree} +{/section} +{/if} +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/const.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/const.tpl new file mode 100644 index 00000000..c26ff92d --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/const.tpl @@ -0,0 +1,18 @@ +{section name=consts loop=$consts} +<a name="const{$consts[consts].const_name}" id="{$consts[consts].const_name}"><!-- --></A> +<div class="{cycle values="evenrow,oddrow"}"> + + <div class="const-header"> + <img src="{$subdir}media/images/{if $consts[consts].access == 'private'}PrivateVariable{else}Variable{/if}.png" /> + <span class="const-title"> + <span class="const-name">{$consts[consts].const_name}</span> + = <span class="const-default">{$consts[consts].const_value|replace:"\n":"<br />"}</span> + (line <span class="line-number">{if $consts[consts].slink}{$consts[consts].slink}{else}{$consts[consts].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$consts[consts].sdesc desc=$consts[consts].desc tags=$consts[consts].tags} + +</div> +{/section} + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/define.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/define.tpl new file mode 100755 index 00000000..0da5d864 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/define.tpl @@ -0,0 +1,24 @@ +{section name=def loop=$defines} +<a name="{$defines[def].define_link}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div> + <span class="const-title"> + <span class="const-name">{$defines[def].define_name}</span> = {$defines[def].define_value|replace:"\n":"<br />"} + (line <span class="line-number">{if $defines[def].slink}{$defines[def].slink}{else}{$defines[def].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$defines[def].sdesc desc=$defines[def].desc tags=$defines[def].tags} + + {if $globals[glob].global_conflicts.conflict_type} + <hr class="separator" /> + <div><span class="warning">Conflicts with constants:</span><br /> + {section name=me loop=$defines[def].define_conflicts.conflicts} + {$defines[def].define_conflicts.conflicts[me]}<br /> + {/section} + </div> + {/if} + +</div> +{/section}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/docblock.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/docblock.tpl new file mode 100755 index 00000000..783d5271 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/docblock.tpl @@ -0,0 +1,14 @@ +<!-- ========== Info from phpDoc block ========= --> +{if $sdesc} +<p class="short-description">{$sdesc}</p> +{/if} +{if $desc} +<p class="description">{$desc}</p> +{/if} +{if $tags} + <ul class="tags"> + {section name=tags loop=$tags} + <li><span class="field">{$tags[tags].keyword}:</span> {$tags[tags].data}</li> + {/section} + </ul> +{/if} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/elementindex.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/elementindex.tpl new file mode 100755 index 00000000..d5964f99 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/elementindex.tpl @@ -0,0 +1,12 @@ +{include file="header.tpl" noleftindex=true} +<a name="top"></a> +<h2>Full index</h2> +<h3>Package indexes</h3> +<ul> +{section name=p loop=$packageindex} + <li><a href="elementindex_{$packageindex[p].title}.html">{$packageindex[p].title}</a></li> +{/section} +</ul> +<br /> +{include file="basicindex.tpl" indexname="elementindex"} +{include file="footer.tpl"} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/errors.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/errors.tpl new file mode 100755 index 00000000..0f526584 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/errors.tpl @@ -0,0 +1,21 @@ +{include file="header.tpl" noleftindex=true} +{section name=files loop=$files} +<a href="#{$files[files].file}">{$files[files].file}</a><br> +{/section} +{foreach key=file item=issues from=$all} +<a name="{$file}"></a> +<h1>{$file}</h1> +{if count($issues.warnings)} +<h2>Warnings:</h2><br> +{section name=warnings loop=$issues.warnings} +<b>{$issues.warnings[warnings].name}</b> - {$issues.warnings[warnings].listing}<br> +{/section} +{/if} +{if count($issues.errors)} +<h2>Errors:</h2><br> +{section name=errors loop=$issues.errors} +<b>{$issues.errors[errors].name}</b> - {$issues.errors[errors].listing}<br> +{/section} +{/if} +{/foreach} +{include file="footer.tpl"} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/examplesource.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/examplesource.tpl new file mode 100755 index 00000000..8abf74ce --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/examplesource.tpl @@ -0,0 +1,6 @@ +{include file="header.tpl" title=$title} +<h1>{$title}</h1> +<div class="listing"> +{$source} +</div> +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/filesource.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/filesource.tpl new file mode 100755 index 00000000..239f7b41 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/filesource.tpl @@ -0,0 +1,8 @@ +{capture name="tutle"}File Source for {$name}{/capture} +{include file="header.tpl" title=$smarty.capture.tutle} +<h1>Source for file {$name}</h1> +<p>Documentation is available at {$docs}</p> +<div class="src-code"> +{$source} +</div> +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/footer.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/footer.tpl new file mode 100755 index 00000000..8d0f79db --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/footer.tpl @@ -0,0 +1,8 @@ +{if !$index} + <p class="notes" id="credit"> + Documentation generated on {$date} by <a href="{$phpdocwebsite}" target="_blank">phpDocumentor {$phpdocversion}</a> + </p> +{/if} + {if $top3}</div>{/if} +</body> +</html> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/function.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/function.tpl new file mode 100755 index 00000000..b6880059 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/function.tpl @@ -0,0 +1,44 @@ +{section name=func loop=$functions} +<a name="{$functions[func].function_dest}" id="{$functions[func].function_dest}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div> + <span class="method-title">{$functions[func].function_name}</span> (line <span class="line-number">{if $functions[func].slink}{$functions[func].slink}{else}{$functions[func].line_number}{/if}</span>) + </div> + + {include file="docblock.tpl" sdesc=$functions[func].sdesc desc=$functions[func].desc tags=$functions[func].tags params=$functions[func].params function=false} + + <div class="method-signature"> + <span class="method-result">{$functions[func].function_return}</span> + <span class="method-name"> + {if $functions[func].ifunction_call.returnsref}&{/if}{$functions[func].function_name} + </span> + {if count($functions[func].ifunction_call.params)} + ({section name=params loop=$functions[func].ifunction_call.params}{if $smarty.section.params.iteration != 1}, {/if}{if $functions[func].ifunction_call.params[params].hasdefault}[{/if}<span class="var-type">{$functions[func].ifunction_call.params[params].type}</span> <span class="var-name">{$functions[func].ifunction_call.params[params].name}</span>{if $functions[func].ifunction_call.params[params].hasdefault} = <span class="var-default">{$functions[func].ifunction_call.params[params].default|escape:"html"}</span>]{/if}{/section}) + {else} + () + {/if} + </div> + + {if $functions[func].params} + <ul class="parameters"> + {section name=params loop=$functions[func].params} + <li> + <span class="var-type">{$functions[func].params[params].datatype}</span> + <span class="var-name">{$functions[func].params[params].var}</span>{if $functions[func].params[params].data}<span class="var-description">: {$functions[func].params[params].data}</span>{/if} + </li> + {/section} + </ul> + {/if} + + {if $functions[func].function_conflicts.conflict_type} + <hr class="separator" /> + <div><span class="warning">Conflicts with functions:</span><br /> + {section name=me loop=$functions[func].function_conflicts.conflicts} + {$functions[func].function_conflicts.conflicts[me]}<br /> + {/section} + </div> + {/if} + +</div> +{/section} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/global.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/global.tpl new file mode 100755 index 00000000..eab7e0b0 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/global.tpl @@ -0,0 +1,26 @@ +{section name=glob loop=$globals} +<a name="{$globals[glob].global_link}" id="{$globals[glob].global_link}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div> + <span class="var-title"> + <span class="var-type">{$globals[glob].global_type}</span> + <span class="var-name">{$globals[glob].global_name}</span> + {if $vars[vars].var_default} = <span class="var-default">{$globals[glob].global_value|replace:"\n":"<br />"}</span>{/if} + (line <span class="line-number">{if $globals[glob].slink}{$globals[glob].slink}{else}{$globals[glob].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$globals[glob].sdesc desc=$globals[glob].desc tags=$globals[glob].tags} + + {if $globals[glob].global_conflicts.conflict_type} + <hr class="separator" /> + <div><span class="warning">Conflicts with global variables:</span><br /> + {section name=me loop=$globals[glob].global_conflicts.conflicts} + {$globals[glob].global_conflicts.conflicts[me]}<br /> + {/section} + </div> + {/if} + +</div> +{/section}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/header.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/header.tpl new file mode 100755 index 00000000..c22ba37d --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/header.tpl @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> + <html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <!-- template designed by Marco Von Ballmoos --> + <title>{$title}</title> + <link rel="stylesheet" href="{$subdir}media/stylesheet.css" /> + <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/> + </head> + <body> + {if $top3}<div class="page-body">{/if} + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/include.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/include.tpl new file mode 100755 index 00000000..c2419e5f --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/include.tpl @@ -0,0 +1,16 @@ +{section name=includes loop=$includes} +<a name="{$includes[includes].include_file}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div> + <span class="include-title"> + <span class="include-type">{$includes[includes].include_name}</span> + (<span class="include-name">{$includes[includes].include_value}</span>) + (line <span class="line-number">{if $includes[includes].slink}{$includes[includes].slink}{else}{$includes[includes].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$includes[includes].sdesc desc=$includes[includes].desc tags=$includes[includes].tags} + +</div> +{/section}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/index.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/index.tpl new file mode 100755 index 00000000..7cd61094 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/index.tpl @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE html + PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//FR" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"> + <html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <!-- Generated by phpDocumentor on {$date} --> + <title>{$title}</title> + <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/> +</head> + +<FRAMESET rows='120,*'> + <FRAME src='packages.html' name='left_top' frameborder="1" bordercolor="#999999"> + <FRAMESET cols='25%,*'> + <FRAME src='{$start}' name='left_bottom' frameborder="1" bordercolor="#999999"> + <FRAME src='{$blank}.html' name='right' frameborder="1" bordercolor="#999999"> + </FRAMESET> + <NOFRAMES> + <H2>Frame Alert</H2> + <P>This document is designed to be viewed using the frames feature. + If you see this message, you are using a non-frame-capable web client.</P> + </NOFRAMES> +</FRAMESET> +</HTML> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/left_frame.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/left_frame.tpl new file mode 100755 index 00000000..0a06fba6 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/left_frame.tpl @@ -0,0 +1,159 @@ +{include file="header.tpl" top2=true} +<div class="package-title">{$package}</div> +<div class="package-details"> + + <dl class="tree"> + + <dt class="folder-title">Description</dt> + <dd> + <a href='{$classtreepage}.html' target='right'>Class trees</a><br /> + <a href='{$elementindex}.html' target='right'>Index of elements</a><br /> + {if $hastodos} + <a href="{$todolink}" target="right">Todo List</a><br /> + {/if} + </dd> + + {section name=p loop=$info} + + {if $info[p].subpackage == ""} + + {if $info[p].tutorials} + <dt class="folder-title">Tutorials/Manuals</dt> + <dd> + {if $info[p].tutorials.pkg} + <dl class="tree"> + <dt class="folder-title">Package-level</dt> + <dd> + {section name=ext loop=$info[p].tutorials.pkg} + {$info[p].tutorials.pkg[ext]} + {/section} + </dd> + </dl> + {/if} + + {if $info[p].tutorials.cls} + <dl class="tree"> + <dt class="folder-title">Class-level</dt> + <dd> + {section name=ext loop=$info[p].tutorials.cls} + {$info[p].tutorials.cls[ext]} + {/section} + </dd> + </dl> + {/if} + + {if $info[p].tutorials.proc} + <dl class="tree"> + <dt class="folder-title">Function-level</dt> + <dd> + {section name=ext loop=$info[p].tutorials.proc} + {$info[p].tutorials.proc[ext]} + {/section} + </dd> + </dl> + {/if} + </dd> + {/if} + {if $info[p].hasinterfaces} + <dt class="folder-title">Interfaces</dt> + {section name=class loop=$info[p].classes} + {if $info[p].classes[class].is_interface} + <dd><a href='{$info[p].classes[class].link}' target='right'>{$info[p].classes[class].title}</a></dd> + {/if} + {/section} + {/if} + {if $info[p].hasclasses} + <dt class="folder-title">Classes</dt> + {section name=class loop=$info[p].classes} + {if $info[p].classes[class].is_class} + <dd><a href='{$info[p].classes[class].link}' target='right'>{$info[p].classes[class].title}</a></dd> + {/if} + {/section} + {/if} + {if $info[p].functions} + <dt class="folder-title">Functions</dt> + {section name=f loop=$info[p].functions} + <dd><a href='{$info[p].functions[f].link}' target='right'>{$info[p].functions[f].title}</a></dd> + {/section} + {/if} + {if $info[p].files} + <dt class="folder-title">Files</dt> + {section name=nonclass loop=$info[p].files} + <dd><a href='{$info[p].files[nonclass].link}' target='right'>{$info[p].files[nonclass].title}</a></dd> + {/section} + {/if} + + {else} + {if $info[p].tutorials} + <dt class="folder-title">Tutorials/Manuals</dt> + <dd> + {if $info[p].tutorials.pkg} + <dl class="tree"> + <dt class="folder-title">Package-level</dt> + <dd> + {section name=ext loop=$info[p].tutorials.pkg} + {$info[p].tutorials.pkg[ext]} + {/section} + </dd> + </dl> + {/if} + + {if $info[p].tutorials.cls} + <dl class="tree"> + <dt class="folder-title">Class-level</dt> + <dd> + {section name=ext loop=$info[p].tutorials.cls} + {$info[p].tutorials.cls[ext]} + {/section} + </dd> + </dl> + {/if} + + {if $info[p].tutorials.proc} + <dl class="tree"> + <dt class="folder-title">Function-level</dt> + <dd> + {section name=ext loop=$info[p].tutorials.proc} + {$info[p].tutorials.proc[ext]} + {/section} + </dd> + </dl> + {/if} + </dd> + {/if} + + <dt class="sub-package">{$info[p].subpackage}</dt> + <dd> + <dl class="tree"> + {if $info[p].subpackagetutorial} + <div><a href="{$info.0.subpackagetutorialnoa}" target="right">{$info.0.subpackagetutorialtitle}</a></div> + {/if} + {if $info[p].classes} + <dt class="folder-title">Classes</dt> + {section name=class loop=$info[p].classes} + <dd><a href='{$info[p].classes[class].link}' target='right'>{$info[p].classes[class].title}</a></dd> + {/section} + {/if} + {if $info[p].functions} + <dt class="folder-title">Functions</dt> + {section name=f loop=$info[p].functions} + <dd><a href='{$info[p].functions[f].link}' target='right'>{$info[p].functions[f].title}</a></dd> + {/section} + {/if} + {if $info[p].files} + <dt class="folder-title">Files</dt> + {section name=nonclass loop=$info[p].files} + <dd><a href='{$info[p].files[nonclass].link}' target='right'>{$info[p].files[nonclass].title}</a></dd> + {/section} + {/if} + </dl> + </dd> + + {/if} + + {/section} + </dl> +</div> +<p class="notes"><a href="{$phpdocwebsite}" target="_blank">phpDocumentor v <span class="field">{$phpdocversion}</span></a></p> +</BODY> +</HTML> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/media/banner.css b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/media/banner.css new file mode 100755 index 00000000..ba1a7ba5 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/media/banner.css @@ -0,0 +1,32 @@ +body +{ + background-color: #DDDDDD; + margin: 0px; + padding: 0px; +} + +/* Banner (top bar) classes */ + +.banner { } + +.banner-menu +{ + clear: both; + padding: .5em; + border-top: 2px solid #999999; +} + +.banner-title +{ + text-align: right; + font-size: 20pt; + font-weight: bold; + margin: .2em; +} + +.package-selector +{ + background-color: #CCCCCC; + border: 1px solid black; + color: blue; +} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/media/stylesheet.css b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/media/stylesheet.css new file mode 100755 index 00000000..051586b3 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/media/stylesheet.css @@ -0,0 +1,142 @@ +a { color: #0000FF; text-decoration: none; } +a:hover { color: #FF0000; text-decoration: underline; } +a:active { color: #FF0000; text-decoration: underline; } + +body { background-color: #EEEEEE; font-family: Verdana, Arial, sans-serif } +body, table { font-size: 10pt } +a img { border: 0px; } +dd { margin-left: 0px; padding-left: 1em; } + +/* Page layout/boxes */ + +.info-box {} +.info-box-title { margin: 1em 0em 0em 0em; padding: .25em; font-weight: normal; font-size: 14pt; border: 2px solid #999999; background-color: #DDDDDD } +.info-box-body { border: 1px solid #999999; padding: .5em; background-color: #F8F8F8; } +.nav-bar { font-size: 8pt; white-space: nowrap; text-align: right; padding: .2em; margin: 0em 0em 1em 0em; } + +.oddrow { background-color: #DDDDDD; border: 1px solid #999999; padding: .5em; margin-bottom: 1em} +.evenrow { background-color: #DDDDDD; border: 1px solid #999999; padding: .5em; margin-bottom: 1em} + +.page-body { max-width: 800px; margin: auto; } +.tree dl { margin: 0px } + +/* Index formatting classes */ + +.index-item-body { margin-top: .5em; margin-bottom: .5em} +.index-item-description { margin-top: .25em } +.index-item-details { font-weight: normal; font-style: italic; font-size: 8pt } +.index-letter-section { background-color: #EEEEEE; border: 1px dotted #999999; padding: .5em; margin-bottom: 1em} +.index-letter-title { font-size: 12pt; font-weight: bold } +.index-letter-menu { text-align: center; margin: 1em } +.index-letter { font-size: 12pt } + +/* Docbook classes */ + +.description {} +.short-description { font-weight: bold; color: #666666; } +.tags { padding-left: 0em; margin-left: 3em; color: #666666; list-style-type: square; } +.parameters { padding-left: 0em; margin-left: 3em; font-style: italic; list-style-type: square; } +.redefinitions { font-size: 8pt; padding-left: 0em; margin-left: 2em; } +.package { } +.package-title { font-weight: bold; font-size: 14pt; border-bottom: 1px solid black } +.package-details { font-size: 85%; } +.sub-package { font-weight: bold; font-size: 120% } +.tutorial { border-width: thin; border-color: #0066ff } +.tutorial-nav-box { width: 100%; border: 2px solid #999999; background-color: #DDDDDD } +.nav-button-disabled { color: #999999; } +.nav-button:active, +.nav-button:focus, +.nav-button:hover { background-color: #AAAAAA; outline: 1px solid #666666; text-decoration: none } +.folder-title { font-style: italic } + +/* Generic formatting */ + +.field { font-weight: bold; } +.detail { font-size: 8pt; } +.notes { font-style: italic; font-size: 8pt; } +.separator { background-color: #999999; height: 2px; } +.warning { color: #FF6600; } +.disabled { font-style: italic; color: #999999; } + +/* Code elements */ + +.line-number { } + +.class-table { width: 100%; } +.class-table-header { border-bottom: 1px dotted #666666; text-align: left} +.class-name { color: #000000; font-weight: bold; } + +.method-summary { padding-left: 1em; font-size: 8pt } +.method-header { } +.method-definition { margin-bottom: .3em } +.method-title { font-weight: bold; } +.method-name { font-weight: bold; } +.method-signature { font-size: 85%; color: #0066BB; margin: .5em 0em } +.method-result { font-style: italic; } + +.var-summary { padding-left: 1em; font-size: 8pt; } +.var-header { } +.var-title { margin-bottom: .3em } +.var-type { color: red; font-weight: bold } +.var-name { font-weight: bold; } +.var-default {} +.var-description { font-weight: normal; color: #000000; } + +.include-title { } +.include-type { font-style: italic; } +.include-name { font-weight: bold; } + +.const-title { } +.const-name { font-weight: bold; } + +/* Syntax highlighting */ + +.src-code { border: 1px solid #336699; padding: 1em; background-color: #EEEEEE; + font-family: 'Courier New', Courier, monospace; font-weight: normal; } +.src-line { font-family: 'Courier New', Courier, monospace; font-weight: normal; } + +.src-comm { color: #666666; } +.src-id { } +.src-inc { color: #0000FF; } +.src-key { color: #0000FF; } +.src-num { color: #CC0000; } +.src-str { color: #66cccc; } +.src-sym { font-weight: bold; } +.src-var { } + +.src-php { font-weight: bold; } + +.src-doc { color: #009999 } +.src-doc-close-template { color: #0000FF } +.src-doc-coretag { color: #0099FF; font-weight: bold } +.src-doc-inlinetag { color: #0099FF } +.src-doc-internal { color: #6699cc } +.src-doc-tag { color: #0080CC } +.src-doc-template { color: #0000FF } +.src-doc-type { font-style: italic } +.src-doc-var { font-style: italic } + +.tute-tag { color: #009999 } +.tute-attribute-name { color: #0000FF } +.tute-attribute-value { color: #0099FF } +.tute-entity { font-weight: bold; } +.tute-comment { font-style: italic } +.tute-inline-tag { color: #636311; font-weight: bold } + +/* tutorial */ + +.authors { } +.author { font-style: italic; font-weight: bold } +.author-blurb { margin: .5em 0em .5em 2em; font-size: 85%; font-weight: normal; font-style: normal } +.example { background-color: #DDDDDD; border: 1px solid #999999; padding: .5em; } +.listing { background-color: #DDDDDD; border: 1px solid #999999; padding: .5em; white-space: nowrap; } +.release-info { font-size: 85%; font-style: italic; margin: 1em 0em } +.ref-title-box { } +.ref-title { } +.ref-purpose { font-style: italic; color: #666666 } +.ref-synopsis { } +.title { font-weight: bold; border-bottom: 1px solid #888888; color: #888888; } +.cmd-synopsis { margin: 1em 0em } +.cmd-title { font-weight: bold } +.toc { margin-left: 2em; padding-left: 0em } + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/method.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/method.tpl new file mode 100755 index 00000000..06d57a12 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/method.tpl @@ -0,0 +1,149 @@ +<A NAME='method_detail'></A> +{section name=methods loop=$methods} +{if $methods[methods].static} +<a name="method{$methods[methods].function_name}" id="{$methods[methods].function_name}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div class="method-header"> + <span class="method-title">static {$methods[methods].function_name}</span> (line <span class="line-number">{if $methods[methods].slink}{$methods[methods].slink}{else}{$methods[methods].line_number}{/if}</span>) + </div> + + {include file="docblock.tpl" sdesc=$methods[methods].sdesc desc=$methods[methods].desc tags=$methods[methods].tags params=$methods[methods].params function=false} + + <div class="method-signature"> + static <span class="method-result">{$methods[methods].function_return}</span> + <span class="method-name"> + {if $methods[methods].ifunction_call.returnsref}&{/if}{$methods[methods].function_name} + </span> + {if count($methods[methods].ifunction_call.params)} + ({section name=params loop=$methods[methods].ifunction_call.params}{if $smarty.section.params.iteration != 1}, {/if}{if $methods[methods].ifunction_call.params[params].hasdefault}[{/if}<span class="var-type">{$methods[methods].ifunction_call.params[params].type}</span> <span class="var-name">{$methods[methods].ifunction_call.params[params].name}</span>{if $methods[methods].ifunction_call.params[params].hasdefault} = <span class="var-default">{$methods[methods].ifunction_call.params[params].default}</span>]{/if}{/section}) + {else} + () + {/if} + </div> + + {if $methods[methods].params} + <ul class="parameters"> + {section name=params loop=$methods[methods].params} + <li> + <span class="var-type">{$methods[methods].params[params].datatype}</span> + <span class="var-name">{$methods[methods].params[params].var}</span>{if $methods[methods].params[params].data}<span class="var-description">: {$methods[methods].params[params].data}</span>{/if} + </li> + {/section} + </ul> + {/if} + + {if $methods[methods].method_overrides} + <hr class="separator" /> + <div class="notes">Redefinition of:</div> + <dl> + <dt>{$methods[methods].method_overrides.link}</dt> + {if $methods[methods].method_overrides.sdesc} + <dd>{$methods[methods].method_overrides.sdesc}</dd> + {/if} + </dl> + {/if} + {if $methods[methods].method_implements} + <hr class="separator" /> + <div class="notes">Implementation of:</div> + {section name=imp loop=$methods[methods].method_implements} + <dl> + <dt>{$methods[methods].method_implements[imp].link}</dt> + {if $methods[methods].method_implements[imp].sdesc} + <dd>{$methods[methods].method_implements[imp].sdesc}</dd> + {/if} + </dl> + {/section} + {/if} + + {if $methods[methods].descmethod} + <hr class="separator" /> + <div class="notes">Redefined in descendants as:</div> + <ul class="redefinitions"> + {section name=dm loop=$methods[methods].descmethod} + <li> + {$methods[methods].descmethod[dm].link} + {if $methods[methods].descmethod[dm].sdesc} + : {$methods[methods].descmethod[dm].sdesc} + {/if} + </li> + {/section} + </ul> + {/if} +</div> +{/if} +{/section} +{section name=methods loop=$methods} +{if !$methods[methods].static} +<a name="method{$methods[methods].function_name}" id="{$methods[methods].function_name}"><!-- --></a> +<div class="{cycle values="evenrow,oddrow"}"> + + <div class="method-header"> + <span class="method-title">{if $methods[methods].ifunction_call.constructor}Constructor {elseif $methods[methods].ifunction_call.destructor}Destructor {/if}{$methods[methods].function_name}</span> (line <span class="line-number">{if $methods[methods].slink}{$methods[methods].slink}{else}{$methods[methods].line_number}{/if}</span>) + </div> + + {include file="docblock.tpl" sdesc=$methods[methods].sdesc desc=$methods[methods].desc tags=$methods[methods].tags params=$methods[methods].params function=false} + + <div class="method-signature"> + <span class="method-result">{$methods[methods].function_return}</span> + <span class="method-name"> + {if $methods[methods].ifunction_call.returnsref}&{/if}{$methods[methods].function_name} + </span> + {if count($methods[methods].ifunction_call.params)} + ({section name=params loop=$methods[methods].ifunction_call.params}{if $smarty.section.params.iteration != 1}, {/if}{if $methods[methods].ifunction_call.params[params].hasdefault}[{/if}<span class="var-type">{$methods[methods].ifunction_call.params[params].type}</span> <span class="var-name">{$methods[methods].ifunction_call.params[params].name}</span>{if $methods[methods].ifunction_call.params[params].hasdefault} = <span class="var-default">{$methods[methods].ifunction_call.params[params].default}</span>]{/if}{/section}) + {else} + () + {/if} + </div> + + {if $methods[methods].params} + <ul class="parameters"> + {section name=params loop=$methods[methods].params} + <li> + <span class="var-type">{$methods[methods].params[params].datatype}</span> + <span class="var-name">{$methods[methods].params[params].var}</span>{if $methods[methods].params[params].data}<span class="var-description">: {$methods[methods].params[params].data}</span>{/if} + </li> + {/section} + </ul> + {/if} + + {if $methods[methods].method_overrides} + <hr class="separator" /> + <div class="notes">Redefinition of:</div> + <dl> + <dt>{$methods[methods].method_overrides.link}</dt> + {if $methods[methods].method_overrides.sdesc} + <dd>{$methods[methods].method_overrides.sdesc}</dd> + {/if} + </dl> + {/if} + {if $methods[methods].method_implements} + <hr class="separator" /> + <div class="notes">Implementation of:</div> + {section name=imp loop=$methods[methods].method_implements} + <dl> + <dt>{$methods[methods].method_implements[imp].link}</dt> + {if $methods[methods].method_implements[imp].sdesc} + <dd>{$methods[methods].method_implements[imp].sdesc}</dd> + {/if} + </dl> + {/section} + {/if} + + {if $methods[methods].descmethod} + <hr class="separator" /> + <div class="notes">Redefined in descendants as:</div> + <ul class="redefinitions"> + {section name=dm loop=$methods[methods].descmethod} + <li> + {$methods[methods].descmethod[dm].link} + {if $methods[methods].descmethod[dm].sdesc} + : {$methods[methods].descmethod[dm].sdesc} + {/if} + </li> + {/section} + </ul> + {/if} +</div> +{/if} +{/section} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/page.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/page.tpl new file mode 100755 index 00000000..b5980236 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/page.tpl @@ -0,0 +1,211 @@ +{include file="header.tpl" top3=true} + +<h2 class="file-name">{$source_location}</h2> + +<a name="sec-description"></a> +<div class="info-box"> + <div class="info-box-title">Description</div> + <div class="nav-bar"> + {if $classes || $includes || $defines || $globals || $functions} + <span class="disabled">Description</span> | + {/if} + {if $classes} + <a href="#sec-classes">Classes</a> + {if $includes || $defines || $globals || $functions}|{/if} + {/if} + {if $includes} + <a href="#sec-includes">Includes</a> + {if $defines || $globals || $functions}|{/if} + {/if} + {if $defines} + <a href="#sec-constants">Constants</a> + {if $globals || $functions}|{/if} + {/if} + {if $globals} + <a href="#sec-variables">Variables</a> + {if $functions}|{/if} + {/if} + {if $functions} + <a href="#sec-functions">Functions</a> + {/if} + </div> + <div class="info-box-body"> + {include file="docblock.tpl" desc=$desc sdesc=$sdesc tags=$tags} + + {if $tutorial} + <hr class="separator" /> + <div class="notes">Tutorial: <span class="tutorial">{$tutorial}</div> + {/if} + </div> +</div> + +{if $classes} + <a name="sec-classes"></a> + <div class="info-box"> + <div class="info-box-title">Classes</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + <span class="disabled">Classes</span> + {if $includes || $defines || $globals || $functions}|{/if} + {if $includes} + <a href="#sec-includes">Includes</a> + {if $defines || $globals || $functions}|{/if} + {/if} + {if $defines} + <a href="#sec-constants">Constants</a> + {if $globals || $functions}|{/if} + {/if} + {if $globals} + <a href="#sec-variables">Variables</a> + {if $functions}|{/if} + {/if} + {if $functions} + <a href="#sec-functions">Functions</a> + {/if} + </div> + <div class="info-box-body"> + <table cellpadding="2" cellspacing="0" class="class-table"> + <tr> + <th class="class-table-header">Class</th> + <th class="class-table-header">Description</th> + </tr> + {section name=classes loop=$classes} + <tr> + <td style="padding-right: 2em; vertical-align: top"> + {$classes[classes].link} + </td> + <td> + {if $classes[classes].sdesc} + {$classes[classes].sdesc} + {else} + {$classes[classes].desc} + {/if} + </td> + </tr> + {/section} + </table> + </div> + </div> +{/if} + +{if $includes} + <a name="sec-includes"></a> + <div class="info-box"> + <div class="info-box-title">Includes</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $classes} + <a href="#sec-classes">Classes</a> + {if $includes || $defines || $globals || $functions}|{/if} + {/if} + <span class="disabled">Includes</span> + {if $defines || $globals || $functions}|{/if} + {if $defines} + <a href="#sec-constants">Constants</a> + {if $globals || $functions}|{/if} + {/if} + {if $globals} + <a href="#sec-variables">Variables</a> + {if $functions}|{/if} + {/if} + {if $functions} + <a href="#sec-functions">Functions</a> + {/if} + </div> + <div class="info-box-body"> + {include file="include.tpl"} + </div> + </div> +{/if} + +{if $defines} + <a name="sec-constants"></a> + <div class="info-box"> + <div class="info-box-title">Constants</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $classes} + <a href="#sec-classes">Classes</a> + {if $includes || $defines || $globals || $functions}|{/if} + {/if} + {if $includes} + <a href="#sec-includes">Includes</a> + {if $defines || $globals || $functions}|{/if} + {/if} + <span class="disabled">Constants</span> + {if $globals || $functions}|{/if} + {if $globals} + <a href="#sec-variables">Variables</a> + {if $functions}|{/if} + {/if} + {if $functions} + <a href="#sec-functions">Functions</a> + {/if} + </div> + <div class="info-box-body"> + {include file="define.tpl"} + </div> + </div> +{/if} + +{if $globals} + <a name="sec-variables"></a> + <div class="info-box"> + <div class="info-box-title">Variables</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $classes} + <a href="#sec-classes">Classes</a> + {if $includes || $defines || $globals || $functions}|{/if} + {/if} + {if $includes} + <a href="#sec-includes">Includes</a> + {if $defines || $globals || $functions}|{/if} + {/if} + {if $defines} + <a href="#sec-constants">Constants</a> + {if $globals || $functions}|{/if} + {/if} + <span class="disabled">Variables</span> + {if $functions}|{/if} + {if $functions} + <a href="#sec-functions">Functions</a> + {/if} + </div> + <div class="info-box-body"> + {include file="global.tpl"} + </div> + </div> +{/if} + +{if $functions} + <a name="sec-functions"></a> + <div class="info-box"> + <div class="info-box-title">Functions</div> + <div class="nav-bar"> + <a href="#sec-description">Description</a> | + {if $classes} + <a href="#sec-classes">Classes</a> + {if $includes || $defines || $globals || $functions}|{/if} + {/if} + {if $includes} + <a href="#sec-includes">Includes</a> + {if $defines || $globals || $functions}|{/if} + {/if} + {if $defines} + <a href="#sec-constants">Constants</a> + {if $globals || $functions}|{/if} + {/if} + {if $globals} + <a href="#sec-variables">Variables</a> + {if $functions}|{/if} + {/if} + <span class="disabled">Functions</span> + </div> + <div class="info-box-body"> + {include file="function.tpl"} + </div> + </div> +{/if} + +{include file="footer.tpl" top3=true} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/pkgelementindex.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/pkgelementindex.tpl new file mode 100755 index 00000000..dc283ad0 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/pkgelementindex.tpl @@ -0,0 +1,17 @@ +{include file="header.tpl"} +<a name="top"></a> +<h2>[{$package}] element index</h2> +{if count($packageindex) > 1} + <h3>Package indexes</h3> + <ul> + {section name=p loop=$packageindex} + {if $packageindex[p].title != $package} + <li><a href="elementindex_{$packageindex[p].title}.html">{$packageindex[p].title}</a></li> + {/if} + {/section} + </ul> +{/if} +<a href="elementindex.html">All elements</a> +<br /> +{include file="basicindex.tpl" indexname=elementindex_$package} +{include file="footer.tpl"} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/ric.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/ric.tpl new file mode 100755 index 00000000..eff734c1 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/ric.tpl @@ -0,0 +1,6 @@ +{include file="header.tpl"} +<h1 align="center">{$name}</h1> +<pre> +{$contents|htmlentities} +</pre> +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/todolist.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/todolist.tpl new file mode 100755 index 00000000..f929ccdb --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/todolist.tpl @@ -0,0 +1,14 @@ +{include file="header.tpl" title="Todo List"} +<div align="center"><h1>Todo List</h1></div> +{foreach from=$todos key=todopackage item=todo} +<h2>{$todopackage}</h2> +{section name=todo loop=$todo} +<h3>{$todo[todo].link}</h3> +<ul> +{section name=t loop=$todo[todo].todos} + <li>{$todo[todo].todos[t]}</li> +{/section} +</ul> +{/section} +{/foreach} +{include file="footer.tpl"}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/top_frame.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/top_frame.tpl new file mode 100755 index 00000000..36d1e5a1 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/top_frame.tpl @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> + <html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <!-- template designed by Marco Von Ballmoos --> + <title>{$title}</title> + <link rel="stylesheet" href="{$subdir}media/stylesheet.css" /> + <link rel="stylesheet" href="{$subdir}media/banner.css" /> + <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/> + </head> + <body> + <div class="banner"> + <div class="banner-title">{$package}</div> + <div class="banner-menu"> + <form> + <table cellpadding="0" cellspacing="0" style="width: 100%"> + <tr> + <td> + {if count($ric) >= 1} + {assign var="last_ric_name" value=""} + {section name=ric loop=$ric} + {if $last_ric_name != ""} | {/if} + <a href="{$ric[ric].file}" target="right">{$ric[ric].name}</a> + {assign var="last_ric_name" value=$ric[ric].name} + {/section} + {/if} + </td> + <td style="width: 2em"> </td> + <td style="text-align: right"> + {if count($packages) > 1} + <span class="field">Packages</span> + <select class="package-selector" onchange="window.parent.left_bottom.location=this[selectedIndex].value"> + {section name=p loop=$packages} + <option value="{$packages[p].link}">{$packages[p].title}</option> + {/section} + </select> + {/if} + </td> + </tr> + </table> + </form> + </div> + </div> + </body> + </html> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/tutorial.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/tutorial.tpl new file mode 100755 index 00000000..3b9109d1 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/tutorial.tpl @@ -0,0 +1,13 @@ +{include file="header.tpl" title=$title top3=true} + +{if $nav} + {include file="tutorial_nav.tpl" prev=$prev next=$next up=$up prevtitle=$prevtitle nexttitle=$nexttitle uptitle=$uptitle} +{/if} + +{$contents} + +{if $nav} + {include file="tutorial_nav.tpl" prev=$prev next=$next up=$up prevtitle=$prevtitle nexttitle=$nexttitle uptitle=$uptitle} +{/if} + +{include file="footer.tpl" top3=true}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/tutorial_nav.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/tutorial_nav.tpl new file mode 100755 index 00000000..89952301 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/tutorial_nav.tpl @@ -0,0 +1,41 @@ +<table class="tutorial-nav-box"> + <tr> + <td style="width: 30%"> + {if $prev} + <a href="{$prev}" class="nav-button">Previous</a> + {else} + <span class="nav-button-disabled">Previous</span> + {/if} + </td> + <td style="text-align: center"> + {if $up} + <a href="{$up}" class="nav-button">Up</a> + {/if} + </td> + <td style="text-align: right; width: 30%"> + {if $next} + <a href="{$next}" class="nav-button">Next</a> + {else} + <span class="nav-button-disabled">Next</span> + {/if} + </td> + </tr> + <tr> + <td style="width: 30%"> + {if $prevtitle} + <span class="detail">{$prevtitle}</span> + {/if} + </td> + <td style="text-align: center"> + {if $uptitle} + <span class="detail">{$uptitle}</span> + {/if} + </td> + <td style="text-align: right; width: 30%"> + {if $nexttitle} + <span class="detail">{$nexttitle}</span> + {/if} + </td> + </tr> +</table> +
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/tutorial_toc.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/tutorial_toc.tpl new file mode 100755 index 00000000..3482249b --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/tutorial_toc.tpl @@ -0,0 +1,40 @@ +{if count($toc)} +<h1 class="title">Table of Contents</h1> +<ul class="toc"> + {assign var="lastcontext" value='refsect1'} + {section name=toc loop=$toc} + + {if $toc[toc].tagname != $lastcontext} + {if $lastcontext == 'refsect1'} + <ul class="toc"> + <li>{$toc[toc].link}</li> + {else} + {if $lastcontext == 'refsect2'} + {if $toc[toc].tagname == 'refsect1'} + </ul> + <li>{$toc[toc].link}</li> + {/if} + {if $toc[toc].tagname == 'refsect3'} + <ul class="toc"> + <li>{$toc[toc].link}</li> + {/if} + {else} + </ul> + </ul> + <li>{$toc[toc].link}</li> + {/if} + {/if} + {assign var="lastcontext" value=$toc[toc].tagname} + {else} + <li>{$toc[toc].link}</li> + {/if} + {/section} + {if $lastcontext == 'refsect2'} + </ul> + {/if} + {if $lastcontext == 'refsect3'} + </ul> + </ul> + {/if} +</ul> +{/if} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/tutorial_tree.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/tutorial_tree.tpl new file mode 100755 index 00000000..617b5654 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/tutorial_tree.tpl @@ -0,0 +1,6 @@ +<div><a href="{$main.link}" target="right">{$main.title|strip_tags}</a></div> +{if $haskids} +<div style="margin-left: 1em"> + {$kids} +</div> +{/if} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/var.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/var.tpl new file mode 100755 index 00000000..fccf6892 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/var.tpl @@ -0,0 +1,92 @@ +{section name=vars loop=$vars} +{if $vars[vars].static} +<a name="var{$vars[vars].var_name}" id="{$vars[vars].var_name}"><!-- --></A> +<div class="{cycle values="evenrow,oddrow"}"> + + <div class="var-header"> + <span class="var-title"> + static <span class="var-type">{$vars[vars].var_type}</span> + <span class="var-name">{$vars[vars].var_name}</span> + {if $vars[vars].var_default} = <span class="var-default">{$vars[vars].var_default|replace:"\n":"<br />"}</span>{/if} + (line <span class="line-number">{if $vars[vars].slink}{$vars[vars].slink}{else}{$vars[vars].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$vars[vars].sdesc desc=$vars[vars].desc tags=$vars[vars].tags} + + {if $vars[vars].var_overrides} + <hr class="separator" /> + <div class="notes">Redefinition of:</div> + <dl> + <dt>{$vars[vars].var_overrides.link}</dt> + {if $vars[vars].var_overrides.sdesc} + <dd>{$vars[vars].var_overrides.sdesc}</dd> + {/if} + </dl> + {/if} + + {if $vars[vars].descvar} + <hr class="separator" /> + <div class="notes">Redefined in descendants as:</div> + <ul class="redefinitions"> + {section name=vm loop=$vars[vars].descvar} + <li> + {$vars[vars].descvar[vm].link} + {if $vars[vars].descvar[vm].sdesc} + : {$vars[vars].descvar[vm].sdesc} + {/if} + </li> + {/section} + </ul> + {/if} + +</div> +{/if} +{/section} + +{section name=vars loop=$vars} +{if !$vars[vars].static} +<a name="var{$vars[vars].var_name}" id="{$vars[vars].var_name}"><!-- --></A> +<div class="{cycle values="evenrow,oddrow"}"> + + <div class="var-header"> + <span class="var-title"> + <span class="var-type">{$vars[vars].var_type}</span> + <span class="var-name">{$vars[vars].var_name}</span> + {if $vars[vars].var_default} = <span class="var-default">{$vars[vars].var_default|replace:"\n":"<br />"}</span>{/if} + (line <span class="line-number">{if $vars[vars].slink}{$vars[vars].slink}{else}{$vars[vars].line_number}{/if}</span>) + </span> + </div> + + {include file="docblock.tpl" sdesc=$vars[vars].sdesc desc=$vars[vars].desc tags=$vars[vars].tags} + + {if $vars[vars].var_overrides} + <hr class="separator" /> + <div class="notes">Redefinition of:</div> + <dl> + <dt>{$vars[vars].var_overrides.link}</dt> + {if $vars[vars].var_overrides.sdesc} + <dd>{$vars[vars].var_overrides.sdesc}</dd> + {/if} + </dl> + {/if} + + {if $vars[vars].descvar} + <hr class="separator" /> + <div class="notes">Redefined in descendants as:</div> + <ul class="redefinitions"> + {section name=vm loop=$vars[vars].descvar} + <li> + {$vars[vars].descvar[vm].link} + {if $vars[vars].descvar[vm].sdesc} + : {$vars[vars].descvar[vm].sdesc} + {/if} + </li> + {/section} + </ul> + {/if} + +</div> +{/if} +{/section} + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/PDFdefaultConverter.inc b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/PDFdefaultConverter.inc new file mode 100755 index 00000000..00a1726e --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/PDFdefaultConverter.inc @@ -0,0 +1,981 @@ +<?php +/** + * Outputs documentation in PDF format + * + * phpDocumentor :: automatic documentation generator + * + * PHP versions 4 and 5 + * + * Copyright (c) 2002-2006 Gregory Beaver + * + * LICENSE: + * + * This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General + * Public License as published by the Free Software Foundation; + * either version 2.1 of the License, or (at your option) any + * later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package Converters + * @subpackage PDFdefault + * @author Greg Beaver <cellog@php.net> + * @copyright 2002-2006 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version CVS: $Id: PDFdefaultConverter.inc 236747 2007-05-31 02:02:42Z ashnazg $ + * @filesource + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @since 1.2 + */ +/** + * The Cezpdf class library + */ +include_once('phpDocumentor/Converters/PDF/default/class.phpdocpdf.php'); +/** + * PDF output converter. + * This Converter takes output from the {@link Parser} and converts it to PDF-ready output for use with {@link Cezpdf}. + * This is now beta code + * + * @package Converters + * @subpackage PDFdefault + * @author Greg Beaver <cellog@php.net> + * @since 1.1 + * @version $Id: PDFdefaultConverter.inc 236747 2007-05-31 02:02:42Z ashnazg $ + * @todo Implement links to conflicts/inheritance + */ +class PDFdefaultConverter extends Converter +{ + /** + * default PDF Converter wants elements sorted by type as well as alphabetically + * @see Converter::$sort_page_contents_by_type + * @var boolean + */ + var $sort_absolutely_everything = true; + var $leftindex = array('classes' => false, 'pages' => false, 'functions' => false, 'defines' => false, 'globals' => false); + var $pagepackage_pagenums = array(); + var $classpackage_pagenums = array(); + /** @var string always PDF */ + var $outputformat = 'PDF'; + /** @var string always default */ + var $name = 'default'; + var $curpagepackage = false; + var $curclasspackage = false; + var $smarty_dir; + /** + * @var Cezpdf + */ + var $pdf = false; + var $ric_set = array(); + /** + * Source files for appendix C are stored here + * + * Format: array(array(package => packagename, code => array(highlightedsource code 1, ...))) + * @var array + */ + var $_sourcecode; + /** + * @see Converter::Converter() + */ + function PDFdefaultConverter(&$allp, &$packp, &$classes, &$procpages, $po, $pp, $qm, $targetDir, $templateDir, $title) + { + Converter::Converter($allp, $packp, $classes, $procpages, $po, $pp, $qm, $targetDir, $templateDir, $title); + $this->pdf =& new phpdocpdf($this, $this->getConverterDir() . PATH_DELIMITER .'templates/fonts/','letter'); + $this->pdf->selectFont($this->getConverterDir() . PATH_DELIMITER .'templates/fonts/Helvetica.afm'); +// put a line top and bottom on all the pages + $this->pdf->ezSetMargins(50,70,50,50); + $template = &$this->newSmarty(); + $this->pdf->ezText($template->fetch('footer.tpl')); + $template->assign('title',$title); + if (file_exists($this->templateDir . 'templates' . PATH_DELIMITER . 'media'. PATH_DELIMITER .'logo.jpg')) + { + $template->assign('logo',$this->templateDir . 'templates' . PATH_DELIMITER . 'media'. PATH_DELIMITER .'logo.jpg'); + } + $this->pdf->ezText($template->fetch('title_page.tpl')); + unset($template); + } + + function writeSource($path, $value) + { + $templ = &$this->newSmarty(); + $pathinfo = $this->proceduralpages->getPathInfo($path, $this); + $templ->assign('source',$value); + $templ->assign('package',$pathinfo['package']); + $templ->assign('subpackage',$pathinfo['subpackage']); + $templ->assign('name',$pathinfo['name']); + $templ->assign('source_loc',$pathinfo['source_loc']); + $templ->assign('docs',$pathinfo['docs']); + $templ->assign('dest', $this->getFileSourceName($path)); + $this->setSourcePaths($path); + $this->_sourcecode[$pathinfo['package']][] = $templ->fetch('filesource.tpl'); + } + + function postProcess($text) + { + return htmlspecialchars($text); + } + + function writeExample($title, $path, $source) + { + $templ = &$this->newSmarty(); + $templ->assign('source',$source); + if (empty($title)) + { + $title = 'example'; + addWarning(PDERROR_EMPTY_EXAMPLE_TITLE, $path, $title); + } + $templ->assign('title',$title); + $templ->assign('file',$path); + $this->pdf->ezText($templ->fetch('examplesource.tpl')); + } + + function getExampleLink($path, $title) + { + return ''; + return $this->returnLink('{$subdir}__examplesource' . PATH_DELIMITER . 'exsource_'.$path.'.html',$title); + } + + function getSourceLink($path) + { +// var_dump(htmlentities('<c:ilink:'.$this->getFileSourceName($path).'>Source Code for this file</c:ilink>')); + return '<c:ilink:'.$this->getFileSourceName($path).'>Source Code for this file</c:ilink>'; + } + + function getFileSourceName($path, $anchor = '') + { + return urlencode($anchor . parent::getFileSourceName($path)); + } + + /** + * Retrieve a Converter-specific anchor to a segment of a source code file + * parsed via a {@tutorial tags.filesource.pkg} tag. + * @param string full path to source file + * @param string name of anchor + * @param string link text, if this is a link + * @param boolean returns either a link or a destination based on this + * parameter + * @return string link to an anchor, or the anchor + */ + function getSourceAnchor($sourcefile,$anchor,$text = '',$link = false) + { + if ($link) + { + return '<c:ilink:' . $this->getFileSourceName($sourcefile, $anchor). '>' . $text . '</c:ilink>'; + } else + { + return '</text><pdffunction:addDestination arg="'.$this->getFileSourceName($sourcefile, $anchor).'" arg="FitH" arg=$this->y /><text size="8">'; + } + } + + /** + * Returns a bookmark using Cezpdf 009 + * + * @param abstractLink a descendant of abstractlink should be passed, and never text + * @param string text to display in the link + */ + function returnSee(&$element, $eltext = false) + { + if (!$element) return false; + if (!$eltext) + { + $eltext = ''; + switch($element->type) + { + case 'tutorial' : + $eltext = $element->title; + break; + case 'method' : + case 'var' : + case 'const' : + $eltext .= $element->class.'::'; + case 'page' : + case 'define' : + case 'class' : + case 'function' : + case 'global' : + default : + $eltext .= $element->name; + if ($element->type == 'function' || $element->type == 'method') $eltext .= '()'; + break; + } + } + switch ($element->type) + { + case 'tutorial' : + return '<c:ilink:'.urlencode($element->type.$element->package.$element->subpackage.$element->name.$element->section).'>'.$eltext.'</c:ilink>'; + case 'page' : + return '<c:ilink:'.urlencode($element->type.$element->package.$element->path).'>'.$eltext.'</c:ilink>'; + case 'define' : + case 'global' : + case 'class' : + case 'function' : + return '<c:ilink:'.urlencode($element->type.$element->package.$element->name).'>'.$eltext.'</c:ilink>'; + case 'method' : + case 'var' : + case 'const' : + return '<c:ilink:'.urlencode($element->type.$element->package.$element->class.'::'.$element->name).'>'.$eltext.'</c:ilink>'; + } + return $element; + } + + /** + * @param string + * @param string + * @return string <c:alink:$link>$text</c:alink> + */ + function returnLink($link,$text) + { + return "<c:alink:$link>$text</c:alink>"; + } + + /** + * Convert README/INSTALL/CHANGELOG file contents to output format + * @param README|INSTALL|CHANGELOG + * @param string contents of the file + */ + function Convert_RIC($name, $contents) + { + $this->ric_set[$name] = $contents; + } + + function convertDocBlock(&$element) + { + if (!$element->docblock) return; + $template = &$this->newSmarty(); + + $nopackage = true; + if ($element->type == 'page' || $element->type == 'class') $nopackage = false; + $tagses = $element->docblock->listTags(); + $tags = array(); + $names = array('staticvar' => 'Static Variable','deprec' => 'Deprecated','abstract' => 'Abstract Element','todo' => 'TODO'); + if (!$nopackage) + { + $tags[] = array('keyword' => 'Package','data' => $element->docblock->package); + if (!empty($element->docblock->subpackage)) $tags[] = array('keyword' => 'Sub-Package','data' => $element->docblock->subpackage); + } + if ($element->docblock->var) + { + $a = $element->docblock->var->Convert($this); + if (!empty($a)) + $tags[] = array('keyword' => 'Var', 'data' => $a); + } + if ($element->docblock->funcglobals) + foreach($element->docblock->funcglobals as $global => $val) + { + if ($a = $this->getGlobalLink($global,$element->docblock->package)) + { + $global = $a; + } + $b = Converter::getLink($val[0]); + if (is_object($b) && phpDocumentor_get_class($b) == 'classlink') + { + $val[0] = $this->returnSee($b); + } + $tags[] = array('keyword' => 'Global Variable Used','data' => $val[0].' '.$global.': '.$val[1]->Convert($this)); + } + if ($element->docblock->statics) + foreach($element->docblock->statics as $static => $val) + { + $a = $val->Convert($this); + $tags[] = array('keyword' => 'Static Variable Used','data' => $val->converted_returnType.' '.$static.': '.$a); + } + if ($element->docblock->properties) + foreach($element->docblock->properties as $property => $val) + { + $a = $val->Convert($this); + $tags[] = array('keyword' => ucfirst($val->keyword),'data' => $val->converted_returnType.' '.$property.': '.$a); + } + foreach($tagses as $tag) + { + if (isset($names[$tag->keyword])) $tag->keyword = $names[$tag->keyword]; + $tags[] = array("keyword" => ucfirst($tag->keyword),"data" => $tag->Convert($this)); + } + $utags = array(); + foreach($element->docblock->unknown_tags as $keyword => $t) + { + foreach($t as $tag) + $utags[] = array('keyword' => $keyword, 'data' => $tag->Convert($this)); + } + if ($element->type == 'packagepage') return; + $sdesc = $element->docblock->getSDesc($this); + $desc = $element->docblock->getDesc($this); + $template->assign('utags',$utags); + $template->assign('tags',$tags); + $template->assign('sdesc',$sdesc); + $template->assign('desc',$desc); + if (false) // $element->type != 'page') + { + if ($element->type != 'var' && $element->type != 'method') + { + $this->pdf->addDestination(urlencode($element->type.$element->docblock->package.$element->name),'FitH',$this->pdf->y); + } else + { + $this->pdf->addDestination(urlencode($element->type.$element->docblock->package.$element->class.'::'.$element->name),'FitH',$this->pdf->y); + } + } elseif (false) + { + $this->pdf->addDestination(urlencode('page'.$element->parent->package.$element->parent->getPath()),'FitH',$this->pdf->y); + } + $this->convertParams($element); + $this->pdf->ezText($template->fetch('docblock.tpl')); + } + + function convertParams(&$element) + { + if ($element->type != 'function' && $element->type != 'method') return; + if (count($element->docblock->params)) + { + $template = &$this->newSmarty(); + $params = array(); + if (count($element->docblock->params)) + foreach($element->docblock->params as $param => $val) + { + $a = $val->Convert($this); + $params[] = array("name" => $param,"type" => $val->converted_returnType,"description" => $a); + } + $template->assign('params',$params); + $this->pdf->ezText($template->fetch('params.tpl')); + } + } + + function convertGlobal(&$element) + { + $sdesc = ''; + if ($element->docblock->sdesc) + { + $sdesc = $element->docblock->sdesc->Convert($this); + } + $template = &$this->newSmarty(); + $template->assign('linenumber',$element->getLineNumber()); + if ($this->hasSourceCode($element->getPath())) + $template->assign('slink',$this->getSourceAnchor($element->getPath(),$element->getLineNumber(),$element->getLineNumber(),true)); + else + $template->assign('slink', false); + $template->assign('dest', urlencode($element->type.$element->docblock->package.$element->name)); + $template->assign('type',$element->getDataType($this)); + $template->assign('name',$element->name); + $template->assign('value',$this->getGlobalValue($element->getValue())); + $template->assign('sdesc',$sdesc); + $this->pdf->ezText($template->fetch('global.tpl')); + $this->convertDocBlock($element); + } + + function getGlobalValue($value) + { + return parent::getGlobalValue(htmlspecialchars($value)); + } + + function convertMethod(&$element) + { + $sdesc = ''; + if ($element->docblock->sdesc) + { + $sdesc = $element->docblock->sdesc->Convert($this); + } + $params = array(); + if (count($element->docblock->params)) + foreach($element->docblock->params as $param => $val) + { + $a = $val->Convert($this); + $params[$param] = array("var" => $param,"datatype" => $val->converted_returnType,"data" => $a); + } + if ($element->docblock->return) + { + if (!$element->docblock->return->returnType) $element->docblock->return->returnType = 'void'; + } + $template = &$this->newSmarty(); + $template->assign('class',$this->class); + $template->assign('constructor',$element->isConstructor); + $template->assign('dest', urlencode($element->type.$element->docblock->package.$element->class.'::'.$element->name)); + $template->assign('linenumber',$element->getLineNumber()); + if ($this->hasSourceCode($element->getPath())) + $template->assign('slink',$this->getSourceAnchor($element->getPath(),$element->getLineNumber(),$element->getLineNumber(),true)); + else + $template->assign('slink',false); + $ret = 'void'; + if ($element->docblock->return) + { + $ret = $element->docblock->return->returnType; + } + $template->assign('return',$ret); + $template->assign('functioncall',$element->getFunctionCall()); + $template->assign('intricatefunctioncall',$element->getIntricateFunctionCall($this,$params)); + $template->assign('sdesc',$sdesc); + $this->pdf->ezText($template->fetch('method.tpl')); + $this->convertDocBlock($element); + } + + function convertVar(&$element) + { + $sdesc = ''; + if ($element->docblock->sdesc) + { + $sdesc = $element->docblock->sdesc->Convert($this); + } + $template = &$this->newSmarty(); + $template->assign('class',$this->class); + $template->assign('linenumber',$element->getLineNumber()); + if ($this->hasSourceCode($element->getPath())) + $template->assign('slink',$this->getSourceAnchor($element->getPath(),$element->getLineNumber(),$element->getLineNumber(),true)); + else + $template->assign('slink',false); + $template->assign('type',$element->docblock->var->returnType); + $template->assign('name',$element->name); + $template->assign('dest', urlencode($element->type.$element->docblock->package.$element->class.'::'.$element->name)); + $template->assign('value',$element->value); + $template->assign('sdesc',$sdesc); + $this->pdf->ezText($template->fetch('var.tpl')); + $this->convertDocBlock($element); + } + + function convertConst(&$element) + { + $sdesc = ''; + if ($element->docblock->sdesc) + { + $sdesc = $element->docblock->sdesc->Convert($this); + } + $template = &$this->newSmarty(); + $template->assign('class',$this->class); + $template->assign('linenumber',$element->getLineNumber()); + if ($this->hasSourceCode($element->getPath())) + $template->assign('slink',$this->getSourceAnchor($element->getPath(),$element->getLineNumber(),$element->getLineNumber(),true)); + else + $template->assign('slink',false); + $template->assign('name',$element->name); + $template->assign('dest', urlencode($element->type.$element->docblock->package.$element->class.'::'.$element->name)); + $template->assign('value',$element->value); + $template->assign('sdesc',$sdesc); + $this->pdf->ezText($template->fetch('const.tpl')); + $this->convertDocBlock($element); + } + + function convertClass(&$element) + { + $template = &$this->newSmarty(); + if ($this->curclasspackage != $element->docblock->package) + { + $template->assign('includeheader',true); + if (isset($this->package_pages[$element->docblock->package])) + { + $template->assign('ppage',$this->package_pages[$element->docblock->package]); + $template->assign('isclass',true); + unset($this->package_pages[$element->docblock->package]); + } + $template->assign('classeslink',rawurlencode("Package ".$element->docblock->package." Classes")); + } + $sdesc = ''; + if ($element->docblock->sdesc) + { + $sdesc = $element->docblock->sdesc->Convert($this); + } + $this->curclasspackage = $element->docblock->package; + $template->assign('dest', urlencode($element->type.$element->docblock->package.$element->name)); + $template->assign('package',$element->docblock->package); + $template->assign('linenumber',$element->getLineNumber()); + if ($this->hasSourceCode($element->getPath())) + $template->assign('slink',$this->getSourceAnchor($element->getPath(),$element->getLineNumber(),$element->getLineNumber(),true)); + else + $template->assign('slink',false); + $template->assign('name',$element->name); + $template->assign('sdesc',$sdesc); + $this->pdf->ezText($template->fetch('class.tpl')); + $this->convertDocBlock($element); + } + + function convertInclude(&$element) + { + $template = &$this->newSmarty(); + $template->assign('linenumber',$element->getLineNumber()); + if ($this->hasSourceCode($element->getPath())) + $template->assign('slink',$this->getSourceAnchor($element->getPath(),$element->getLineNumber(),$element->getLineNumber(),true)); + else + $template->assign('slink',false); + $template->assign('name',$element->name); + $template->assign('value',$this->getIncludeValue($element->getValue(), $element->getPath())); + $this->pdf->ezText($template->fetch('include.tpl')); + $this->convertDocBlock($element); + } + + function convertFunction(&$element) + { + $sdesc = ''; + if ($element->docblock->sdesc) + { + $sdesc = $element->docblock->sdesc->Convert($this); + } + $params = array(); + if (count($element->docblock->params)) + foreach($element->docblock->params as $param => $val) + { + $a = $val->Convert($this); + $params[$param] = array("var" => $param,"datatype" => $val->converted_returnType,"data" => $a); + } + if (!$element->docblock->return) + { + $element->docblock->return->returnType = 'void'; + } + $template = &$this->newSmarty(); + $template->assign('dest', urlencode($element->type.$element->docblock->package.$element->name)); + $template->assign('linenumber',$element->getLineNumber()); + if ($this->hasSourceCode($element->getPath())) + $template->assign('slink',$this->getSourceAnchor($element->getPath(),$element->getLineNumber(),$element->getLineNumber(),true)); + else + $template->assign('slink',false); + $template->assign('return',$element->docblock->return->returnType); + $template->assign('functioncall',$element->getFunctionCall()); + $template->assign('intricatefunctioncall',$element->getIntricateFunctionCall($this,$params)); + $template->assign('sdesc',$sdesc); + $this->pdf->ezText($template->fetch('function.tpl')); + $this->convertDocBlock($element); + } + + function convertDefine(&$element) + { + $sdesc = ''; + if ($element->docblock->sdesc) + { + $sdesc = $element->docblock->sdesc->Convert($this); + } + $template = &$this->newSmarty(); + $template->assign('linenumber',$element->getLineNumber()); + if ($this->hasSourceCode($element->getPath())) + $template->assign('slink',$this->getSourceAnchor($element->getPath(),$element->getLineNumber(),$element->getLineNumber(),true)); + else + $template->assign('slink',false); + $template->assign('name',$element->name); + $template->assign('dest', urlencode($element->type.$element->docblock->package.$element->name)); + $template->assign('value',$element->value); + $template->assign('sdesc',$sdesc); + $this->pdf->ezText($template->fetch('define.tpl')); + $this->convertDocBlock($element); + } + + function convertPage(&$element) + { + $template = &$this->newSmarty(); + $template->assign('includeheader',false); + $sdesc = ''; + if ($element->docblock->sdesc) + { + $sdesc = $element->docblock->sdesc->Convert($this); + } + if (count($element->elements) || ($sdesc) || count($element->docblock->tags)) + { + if ($this->curpagepackage != $element->parent->package) + { + $template->assign('includeheader',true); + if (isset($this->package_pages[$element->parent->package])) + { + $template->assign('ppage',$this->package_pages[$element->parent->package]); + unset($this->package_pages[$element->parent->package]); + } + } + $this->curpagepackage = $element->parent->package; + $template->assign('dest', urlencode('page'.$element->parent->package.$element->parent->getPath())); + $template->assign('sdesc',$sdesc); + $template->assign('package',$element->parent->package); + $template->assign('name',$element->parent->file); + $this->pdf->ezText($template->fetch('page.tpl')); + $this->convertDocBlock($element); + } + } + + + /** + * Used to translate an XML DocBook tag from a tutorial by reading the + * options.ini file for the template. + * @param string tag name + * @param string any attributes Format: array(name => value) + * @param string the tag contents, if any + * @param string the tag contents, if any, unpost-processed + * @return string + */ + function TranslateTag($name,$attr,$cdata,$unconvertedcdata) + { + if ($name == 'example' && @$attr['role'] == 'html') + { + $cdata = htmlspecialchars($cdata); + $unconvertedcdata = htmlspecialchars($unconvertedcdata); + } + if ($name == 'programlisting' && @$attr['role'] == 'php') + { + $unconvertedcdata = strtr($unconvertedcdata, array_flip(get_html_translation_table(HTML_SPECIALCHARS))); + $a = parent::TranslateTag($name, $attr, $cdata, $unconvertedcdata); +// var_dump(htmlspecialchars($cdata), htmlspecialchars($unconvertedcdata), htmlspecialchars($a)); + return $a; + } + return parent::TranslateTag($name, $attr, $cdata, $unconvertedcdata); + } + + function getPageName(&$element) + { + if (phpDocumentor_get_class($element) == 'parserpage') return $element->getName(); + return $element->parent->getName(); + } + + function getTutorialId($package,$subpackage,$tutorial,$id) + { + return 'tutorial'.$package.$subpackage.$tutorial.$id; + } + + function getCData($value) + { + return str_replace(array('<c:','<C:'),array("<c:","<C:"),$value); + } + + /** + * @deprecated html package pages just don't work with PDF, use {@tutorial tutorials.pkg} + */ + function convertPackagepage(&$element) + { + $x = $element->Convert($this); + $x = substr($x,strpos($x,'<body')); + $this->package_pages[$element->package] = trim(substr($x,strpos($x,'>') + 1,strpos($x,'</body>') - 6)); + } + + function convertTutorial(&$element) + { + $x = $element->Convert($this, true); + $template = &$this->newSmarty(); + $template->assign('package',$element->package); + $template->assign('subpackage',$element->subpackage); + $template->assign('contents',$x); + $template->assign('title',$element->getTitle($this)); + $template->assign('child',$element->parent); + if (isset($element->parent->parent)) $template->assign('hasparent',$element->parent->parent); + $template->assign('element',$element); + $this->pdf->ezText($template->fetch('tutorial.tpl')); + } + + /** + * returns a template-enabled array of class trees + * + * @param string $package package to generate a class tree for + * @see $roots, getRootTree() + */ + function generateFormattedClassTrees($package) + { + if (!isset($this->roots[$package])) return array(); + $roots = $trees = array(); + $roots = $this->roots[$package]; + for($i=0;$i<count($roots);$i++) + { + $trees[] = array('class' => $roots[$i],'class_tree' => "<ul>\n".$this->getRootTree($this->getSortedClassTreeFromClass($roots[$i],$package,''),$package)."</ul>\n"); + } + return $trees; + } + + /** + * return formatted class tree for the Class Trees page + * + * @param array $tree output from {@link getSortedClassTreeFromClass()} + * @see Classes::$definitechild, generateFormattedClassTrees() + * @return string + */ + function getRootTree($tree,$package) + { + if (!$tree) return ''; + $my_tree = ''; + $cur = '#root'; + $lastcur = array(false); + $kids = array(); + $dopar = false; + if ($tree[$cur]['parent']) + { + $dopar = true; + if (!is_object($tree[$cur]['parent'])) + { +// debug("parent ".$tree[$cur]['parent']." not found"); + $my_tree .= '<li>' . $tree[$cur]['parent'] .'<ul>'; + } + else + { +// debug("parent ".$this->returnSee($tree[$cur]['parent'], false, false)." in other package"); + $my_tree .= '<li>' . $this->returnSee($tree[$cur]['parent'], false, false); + if ($tree[$cur]['parent']->package != $package) $my_tree .= ' <b>(Different package)</b><ul>'; + } + } + do + { +// fancy_debug($cur,$lastcur,$kids); + if (count($tree[$cur]['children'])) + { +// debug("$cur has children"); + if (!isset($kids[$cur])) + { +// debug("set $cur kids"); + $kids[$cur] = 1; + $my_tree .= '<li>'.$this->returnSee($tree[$cur]['link'], false, false); + $my_tree .= '<ul>'."\n"; + } + array_push($lastcur,$cur); + list(,$cur) = each($tree[$cur]['children']); +// var_dump('listed',$cur); + if ($cur) + { + $cur = $cur['package'] . '#' . $cur['class']; +// debug("set cur to child $cur"); +// $my_tree .= '<li>'.$this->returnSee($tree[$cur]['link'], false, false); + continue; + } else + { +// debug("end of children for $cur"); + $cur = array_pop($lastcur); + $cur = array_pop($lastcur); + $my_tree .= '</ul></li>'."\n"; + if ($dopar && ($cur == '#root' || !$cur)) $my_tree .= '</ul></li>'; + } + } else + { +// debug("$cur has no children"); + $my_tree .= '<li>'.$this->returnSee($tree[$cur]['link'], false, false)."</li>"; + if ($dopar && $cur == '#root') $my_tree .= '</ul></li>'; + $cur = array_pop($lastcur); + } + } while ($cur); + return $my_tree; + } + + /** + * calls {@link Cezpdf::ezOutput()} and writes documentation.pdf to targetDir + */ + function Output($title = 'Generated Documentation') + { + phpDocumentor_out("Generating PDF file.."); + flush(); + $template = &$this->newSmarty(); + $this->pdf->ezText($template->fetch('appendix_title_page.tpl')); + $trees = array(); + foreach($this->all_packages as $package => $rest) + { + if (!isset($this->pkg_elements[$package])) continue; + $a = array(); + phpDocumentor_out('.'); + flush(); + $a['package'] = $package; + $a["trees"] = $this->generateFormattedClassTrees($package); + $trees[] = $a; + } + $template->assign('trees',$trees); + $this->pdf->ezText($template->fetch('classtree.tpl')); + phpDocumentor_out('.'); + if (count($this->ric_set)) + $this->pdf->ezText($template->fetch('ric_title_page.tpl')); + foreach($this->ric_set as $name => $contents) + { + $template->assign('contents',$contents); + $template->assign('name',$name); + $this->pdf->ezText($template->fetch('ric.tpl')); + } + if (count($this->_sourcecode)) + { + $this->pdf->ezText($template->fetch('source_title_page.tpl')); + $template->assign('source',$this->_sourcecode); + $this->pdf->ezText($template->fetch('source_loop.tpl')); + } + flush(); + if (count($this->todoList)) + { + $todolist = array(); + foreach($this->todoList as $package => $alltodos) + { + foreach($alltodos as $todos) + { + $converted = array(); + $converted['link'] = $this->returnSee($todos[0]); + if (!is_array($todos[1])) + { + $converted['todos'][] = $todos[1]->Convert($this); + } else + { + foreach($todos[1] as $todo) + { + $converted['todos'][] = $todo->Convert($this); + } + } + $todolist[$package][] = $converted; + } + } + $template->assign('todos',$todolist); + + $this->pdf->ezText($template->fetch('todolist.tpl')); + } + if (false) { + $fp = @fopen("C:/Documents and Settings/Owner/Desktop/pdfsourceorig.txt",'w'); + if ($fp) + { + $a = $this->pdf->ezOutput(true); // debug + fwrite($fp, $a, strlen($a)); + fclose($fp); + } + } + $this->pdf->setupTOC(); + $template->assign('contents',$this->pdf->reportContents); + $this->pdf->ezText($template->fetch('toc.tpl')); + $x = $this->pdf->ezOutput(false, $template); + phpDocumentor_out("done\n"); + flush(); + $this->writeFile("documentation.pdf", $x, true); + } + + function mystrnatcasecmp($a,$b) + { + return strnatcasecmp($a[0],$b[0]); + } + + + /** + * @param string name of class + * @param string package name + * @param string full path to look in (used in index generation) + * @return mixed false if not found, or an html a link to the class's documentation + * @see parent::getClassLink() + */ + function getClassLink($expr,$package, $file = false,$text = false) + { + $a = Converter::getClassLink($expr,$package,$file); + if (!$a) return false; + return $this->returnSee($a, $text); + } + + /** + * @param string name of function + * @param string package name + * @param string full path to look in (used in index generation) + * @param boolean deprecated + * @return mixed false if not found, or an html a link to the function's documentation + * @see parent::getFunctionLink() + */ + function getFunctionLink($expr,$package, $file = false,$text = false) + { + $a = Converter::getFunctionLink($expr,$package,$file); + if (!$a) return false; + return $this->returnSee($a, $text); + } + + /** + * @param string name of define + * @param string package name + * @param string full path to look in (used in index generation) + * @param boolean deprecated + * @return mixed false if not found, or an html a link to the define's documentation + * @see parent::getDefineLink() + */ + function getDefineLink($expr,$package, $file = false,$text = false) + { + $a = Converter::getDefineLink($expr,$package,$file); + if (!$a) return false; + return $this->returnSee($a, $text); + } + + /** + * @param string name of global variable + * @param string package name + * @param string full path to look in (used in index generation) + * @param boolean deprecated + * @return mixed false if not found, or an html a link to the global variable's documentation + * @see parent::getGlobalLink() + */ + function getGlobalLink($expr,$package, $file = false,$text = false) + { + $a = Converter::getGlobalLink($expr,$package,$file); + if (!$a) return false; + return $this->returnSee($a, $text); + } + + /** + * @param string name of procedural page + * @param string package name + * @param string full path to look in (used in index generation) + * @param boolean deprecated + * @return mixed false if not found, or an html a link to the procedural page's documentation + * @see parent::getPageLink() + */ + function getPageLink($expr,$package, $path = false,$text = false) + { + $a = Converter::getPageLink($expr,$package,$path); + if (!$a) return false; + return $this->returnSee($a, $text); + } + + /** + * @param string name of method + * @param string class containing method + * @param string package name + * @param string full path to look in (used in index generation) + * @param boolean deprecated + * @return mixed false if not found, or an html a link to the method's documentation + * @see parent::getMethodLink() + */ + function getMethodLink($expr,$class,$package, $file = false,$text = false) + { + $a = Converter::getMethodLink($expr,$class,$package,$file); + if (!$a) return false; + return $this->returnSee($a, $text); + } + + /** + * @param string name of var + * @param string class containing var + * @param string package name + * @param string full path to look in (used in index generation) + * @param boolean deprecated + * @param boolean return just the URL, or enclose it in an html a tag + * @return mixed false if not found, or an html a link to the var's documentation + * @see parent::getVarLink() + */ + function getVarLink($expr,$class,$package, $file = false,$text = false) + { + $a = Converter::getVarLink($expr,$class,$package,$file); + if (!$a) return false; + return $this->returnSee($a, $text); + } + + /** + * @param string name of class constant + * @param string class containing class constant + * @param string package name + * @param string full path to look in (used in index generation) + * @param boolean deprecated + * @param boolean return just the URL, or enclose it in an html a tag + * @return mixed false if not found, or an html a link to the var's documentation + * @see parent::getConstLink() + */ + function getConstLink($expr,$class,$package, $file = false,$text = false) + { + $a = Converter::getConstLink($expr,$class,$package,$file); + if (!$a) return false; + return $this->returnSee($a, $text); + } + + function setTemplateDir($dir) + { + Converter::setTemplateDir($dir); + $this->smarty_dir = $this->templateDir; + } + + /** @return 1 always the same */ + function getState() + { + return 1; + } + + /** + * @see parent::unmangle() + */ + function unmangle($notused,$source) + { +// $source = str_replace("\n","<mybr>",$source); + return $source; + } +} +?>
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/ParserPDF.inc b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/ParserPDF.inc new file mode 100755 index 00000000..1339b65a --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/ParserPDF.inc @@ -0,0 +1,564 @@ +<?php +/** + * This class handles the XML-based CezPDF markup language created to allow + * templates for the PDFdefaultConverter + * + * phpDocumentor :: automatic documentation generator + * + * PHP versions 4 and 5 + * + * Copyright (c) 2002-2006 Gregory Beaver + * + * LICENSE: + * + * This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General + * Public License as published by the Free Software Foundation; + * either version 2.1 of the License, or (at your option) any + * later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package Converters + * @subpackage PDFdefault + * @author Greg Beaver <cellog@php.net> + * @copyright 2002-2006 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version CVS: $Id: ParserPDF.inc 238276 2007-06-22 14:58:30Z ashnazg $ + * @filesource + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @since 1.2 + */ +/** when <text> is found in an ezText input */ +define('PHPDOCUMENTOR_PDF_EVENT_TEXT', 600); +/** when <text> is found in an ezText input */ +define('PHPDOCUMENTOR_PDF_STATE_TEXT', 700); +/** used for parsing stuff between <text> */ +define('PHPDOCUMENTOR_PDF_EVENT_CONTENT', 601); +/** used for parsing stuff between <text> */ +define('PHPDOCUMENTOR_PDF_STATE_CONTENT', 701); +/** when <font> is found in an ezText input */ +define('PHPDOCUMENTOR_PDF_EVENT_FONT', 602); +/** when <font> is found in an ezText input */ +define('PHPDOCUMENTOR_PDF_STATE_FONT', 702); +/** when <newpage/> is found in an ezText input */ +define('PHPDOCUMENTOR_PDF_EVENT_NEWPAGE', 603); +/** when <newpage/> is found in an ezText input */ +define('PHPDOCUMENTOR_PDF_STATE_NEWPAGE', 703); +/** when <pdffunction> is found in an ezText input */ +define('PHPDOCUMENTOR_PDF_EVENT_PDFFUNCTION', 604); +/** when <pdffunction> is found in an ezText input */ +define('PHPDOCUMENTOR_PDF_STATE_PDFFUNCTION', 704); + + +/** + * @package Converters + * @subpackage PDFdefault + * @author Greg Beaver <cellog@php.net> + * @since 1.2 + */ +class PDFParser extends Parser +{ + /** + * Mapping of event constants to events handler function names + * @var array + * @access private + */ + var $eventHandlers + = array( + PHPDOCUMENTOR_PDF_EVENT_TEXT => 'handleText', + PHPDOCUMENTOR_PDF_EVENT_FONT => 'handleFont', + PHPDOCUMENTOR_PDF_EVENT_NEWPAGE => 'handleNewPage', + PARSER_EVENT_QUOTE => 'handleQuote', + PARSER_EVENT_NOEVENTS => 'defaultHandler', + PHPDOCUMENTOR_PDF_EVENT_CONTENT => 'handleContent', + PHPDOCUMENTOR_PDF_EVENT_PDFFUNCTION => 'handlePDFfunction', + ); + + /** + * Sets up the wordparser for this class + */ + function PDFParser() + { + $this->wp = new WordParser; + $this->setupStates(); + } + /** + * Parse text for PDFParser XML tags, and add the text to the PDF file + * + * @param string text to parse for PDFParser XML tags + * @param string full path to the font directory + * @param phpdocpdf + * @param boolean determines whether output is saved in a variable or + * added directly to the output + * @staticvar integer used for recursion limiting if a handler for an event is not found + * @return bool + */ + function parse ($parse_data,$fontdir,&$pdf,$debug=false) + { + static $endrecur = 0; + $this->_debug = $debug; + + // initialize variables so E_ALL error_reporting doesn't complain + $pevent = 0; + $word = 0; + $this->p_vars['event_stack'] = new EventStack; + $this->p_flags['reset_quote_data'] = true; + $this->p_vars['options'] = false; + $this->p_vars['font_dir'] = $fontdir; + $this->p_vars['text_size'] = false; + $this->p_vars['pdf'] = &$pdf; + + $this->wp->setup($parse_data); + $this->wp->setWhitespace(true); + + do + { + $lpevent = $pevent; + $pevent = $this->p_vars['event_stack']->getEvent(); + if ($lpevent != $pevent) + { + $this->p_vars['last_pevent'] = $lpevent; + } + + if ($this->p_vars['last_pevent'] != $pevent) + { + // its a new event so the word parser needs to be reconfigured + $this->configWordParser($pevent); + } + + + $this->p_vars['last_word'] = $word; + $word = $this->wp->getWord(); + + if (PHPDOCUMENTOR_DEBUG == true) + { + echo "----------------\n"; + echo "LAST: |" . $this->p_vars['last_word'] . "|\n"; +// echo "INDEX: ".$this->p_vars['curpar']."\n"; + echo "PEVENT: " . $this->getParserEventName($pevent) . "\n"; + echo "LASTPEVENT: " . $this->getParserEventName($this->p_vars['last_pevent']) . "\n"; + echo $this->wp->getPos() . " WORD: |".$word."|\n\n"; + } + if (isset($this->eventHandlers[$pevent])) + { + $handle = $this->eventHandlers[$pevent]; + $this->$handle($word, $pevent); + } else + { + debug('WARNING: possible error, no ParserPDFParser handler for event number '.$pevent); + if ($endrecur++ == 25) + { + die("FATAL ERROR, recursion limit reached"); + } + } + } while (!($word === false)); + if (false) { + $fp = fopen("C:/Documents and Settings/Owner/Desktop/pdfsource.txt", "a"); + fwrite($fp, $this->wp->data); + fclose($fp); + } + } + + /**#@+ + * Event Handlers + * @param string token + * @param integer event constant + * @access private + */ + function defaultHandler($word, $pevent) + { + if ($this->checkEventPush($word, $pevent)) return; + } + + /** + * Handles <newpage /> + * @tutorial ParserPDF.cls#tags.newpage + */ + function handleNewPage($word, $pevent) + { + $this->p_vars['event_stack']->popEvent(); + $this->p_vars['pdf']->ezNewPage($this->_debug); + } + + /** + * Handles <text></text> + * @tutorial ParserPDF.cls#tags.text + */ + function handleText($word, $pevent) + { + $e = $this->checkEventPush($word, $pevent); + $e1 = $this->checkEventPop($word, $pevent); + if ($e == PARSER_EVENT_QUOTE) return; + if ($e1) + { + $this->p_flags['textcolor'] = false; + if (($a = $this->p_vars['savecolor']) != $this->p_vars['pdf']->getColor()) + { + $this->p_vars['pdf']->setColor($a['r'],$a['g'],$a['b']); + } + } + if ($this->p_vars['last_word'] == '<text') + { + // set up flags + $this->p_flags['paramval'] = false; + $this->p_flags['textcolor'] = false; + $this->p_vars['curparam'] = false; + $this->p_vars['savecolor'] = $this->p_vars['pdf']->getColor(); + $this->p_vars['options'] = array(); + unset($this->p_vars['quote_data']); + } + if (!$this->p_flags['paramval']) + { + if ($e || $e1) return; + if ($word == '=') + { +// debug('set paramval '.$this->p_vars['curparam']); + $this->p_flags['paramval'] = true; + return; + } + $this->p_vars['curparam'] = trim($word); + } else + { + if ($this->p_vars['last_pevent'] == PARSER_EVENT_QUOTE) + { + if ($this->p_vars['curparam'] == 'size') + { + $this->p_vars['text_size'] = (int)$this->p_vars['quote_data']; + $this->p_flags['paramval'] = false; + $this->p_vars['curparam'] = false; + if (!$e && !$e1) + { + $this->p_vars['curparam'] = trim($word); + } + unset($this->p_vars['quote_data']); + } elseif ($this->p_vars['curparam'] == 'color') + { + if ($a = $this->p_vars['pdf']->validHTMLColor($this->p_vars['quote_data'])) + { + $this->p_flags['textcolor'] = true; + $this->p_vars['pdf']->setHTMLColor($a); + } + } else + { + if ($this->p_vars['quote_data'] === (string)(int)$this->p_vars['quote_data']) $this->p_vars['quote_data'] = (int)$this->p_vars['quote_data']; +// debug('added '.$this->p_vars['curparam'].' = '.$this->p_vars['quote_data']); + $this->p_vars['options'][$this->p_vars['curparam']] = $this->p_vars['quote_data']; + $this->p_flags['paramval'] = false; + $this->p_vars['curparam'] = false; + if (!$e && !$e1) + { + $this->p_vars['curparam'] = trim($word); + } + unset($this->p_vars['quote_data']); + } + } + } + } + + /** + * handles <font></font> + * @tutorial ParserPDF.cls#tags.font + */ + function handleFont($word, $pevent) + { + $e = $this->checkEventPush($word, $pevent); + $e1 = $this->checkEventPop($word, $pevent); + if ($e == PARSER_EVENT_QUOTE) return; + if ($this->p_vars['last_word'] == '<font') + { + // set up flags + $this->p_flags['paramval'] = false; + $this->p_vars['curparam'] = false; + unset($this->p_vars['quote_data']); + } + if (!$this->p_flags['paramval']) + { + if ($e || $e1) return; + if ($word == '=') + { + //debug('set paramval '.$this->p_vars['curparam']); + $this->p_flags['paramval'] = true; + return; + } + $this->p_vars['curparam'] = trim($word); + } else + { + if ($this->p_vars['last_pevent'] == PARSER_EVENT_QUOTE) + { + if ($this->p_vars['curparam'] == 'face') + { + //debug('set face to '.$this->p_vars['font_dir'] . $this->p_vars['quote_data'] . '.afm'); + $this->p_vars['pdf']->selectFont($this->p_vars['font_dir'] . $this->p_vars['quote_data'] . '.afm'); + $this->p_flags['paramval'] = false; + $this->p_vars['curparam'] = false; + unset($this->p_vars['quote_data']); + } + } + } + } + + /** + * handles <pdffunction> + * @tutorial ParserPDF.cls#tags.pdffunction + */ + function handlePDFFunction($word, $pevent) + { + $e = $this->checkEventPush($word, $pevent); + $e1 = $this->checkEventPop($word, $pevent); + if ($e == PARSER_EVENT_QUOTE) return; + if ($this->p_vars['last_word'] == '<pdffunction:') + { + // set up flags + $this->p_flags['paramval'] = $this->p_flags['curparam'] = false; + $this->p_flags['returnval'] = false; + $this->p_vars['funcname'] = trim($word); +// debug("funcname is $word"); + $this->p_vars['options'] = array(); + unset($this->p_vars['quote_data']); + if ($e1) addErrorDie(PDERROR_PDFFUNCTION_NO_FUNC); + } + if (!$this->p_flags['paramval']) + { + if ($e1) + { // call function, no parameters + $func = $this->p_vars['funcname']; + if (!$func) addErrorDie(PDERROR_PDFFUNCTION_NO_FUNC); + if (method_exists($this->p_vars['pdf'],$func)) + { + if (count($this->p_vars['options'])) + { +// fancy_debug("calling function $func",$this->p_vars['options']); + $a = call_user_func_array(array(&$this->p_vars['pdf'],$func), $this->p_vars['options']); + } else + { +// debug("calling function $func"); + $a = $this->p_vars['pdf']->$func(); + } + if ($this->p_flags['returnval']) + { +// debug("setting returnvar ".$this->p_vars['return_varname']); + $this->tempvars[$this->p_vars['return_varname']] = $a; + } + } else + { + addWarning(PDERROR_PDF_METHOD_DOESNT_EXIST,$func); + } + return; + } + if ($e) return; + if ($word == '=') + { +// debug('set paramval '.$this->p_vars['curparam']); + $this->p_flags['paramval'] = true; + return; + } + $this->p_vars['curparam'] = trim($word); + } else + { + if ($this->p_vars['last_word'] == '=') + { // check to see if we should use a tempvar from a previous return + if (substr(trim($word),0,1) == '$') + { + if (substr(trim($word),0,7) == '$this->') + { // this is a pdf var + $a = substr(trim($word),7); + $a = $this->p_vars['pdf']->$a; + // debug("set option to $word"); + $this->p_vars['options'][] = $a; + $this->p_flags['paramval'] = false; + unset($this->p_vars['quote_data']); + } else + { // this is a tempvar + if (!isset($this->tempvars[substr(trim($word),1)])) + { + addErrorDie(PDERROR_PDF_TEMPVAR_DOESNT_EXIST,$this->p_vars['funcname'],trim($word),trim($word)); + } + $a = $this->tempvars[substr(trim($word),1)]; + // debug("set option to $word"); + $this->p_vars['options'][] = $a; + $this->p_flags['paramval'] = false; + unset($this->p_vars['quote_data']); + } + } + } else + { + if ($this->p_vars['last_pevent'] == PARSER_EVENT_QUOTE) + { + if ($this->p_vars['quote_data'] === (string)(int)$this->p_vars['quote_data']) + { + $this->p_vars['quote_data'] = (int)$this->p_vars['quote_data']; + } + if ($this->p_vars['curparam'] == 'return') + { +// debug("param is return"); + $this->p_vars['return_varname'] = $this->p_vars['quote_data']; + $this->p_flags['returnval'] = true; + } else + { +// fancy_debug("set option to arg",$this->p_vars['quote_data']); + $this->p_vars['options'][] = $this->p_vars['quote_data']; + } + $this->p_flags['paramval'] = false; + unset($this->p_vars['quote_data']); + } + } + if ($e1) + { // call function, with parameters + $func = $this->p_vars['funcname']; + if (method_exists($this->p_vars['pdf'],$func)) + { + if (count($this->p_vars['options'])) + { +// fancy_debug("calling function $func",$this->p_vars['options']); + if ($func == 'ezImage') { + // set padding to 5, width to 0, resize to none + $this->p_vars['options'][] = 5; + $this->p_vars['options'][] = 0; + $this->p_vars['options'][] = 'none'; + } + $a = call_user_func_array(array(&$this->p_vars['pdf'],$func), $this->p_vars['options']); + } else + { +// debug("calling function $func"); + $a = $this->p_vars['pdf']->$func(); + } + if ($this->p_flags['returnval']) + { +// debug("setting returnvar ".$this->p_vars['return_varname']); + $this->tempvars[$this->p_vars['return_varname']] = $a; + } + } else + { + addWarning(PDERROR_PDF_METHOD_DOESNT_EXIST,$func); + } + } + } + } + + /** + * Adds content to the <text> tag + */ + function handleContent($word, $pevent) + { + if ($e = $this->checkEventPush($word, $pevent)) + { + if ($e == PHPDOCUMENTOR_PDF_EVENT_FONT) + { // flush content + if (!isset($this->p_vars['content'])) return; + $this->p_vars['pdf']->_ezText($this->p_vars['content'],$this->p_vars['text_size'],$this->p_vars['options']); + unset($this->p_vars['content']); + } + return; + } + if ($this->checkEventPop($word, $pevent)) + { + $this->wp->backupPos($word); + if (!isset($this->p_vars['content'])) return; + $this->p_vars['pdf']->_ezText($this->p_vars['content'],$this->p_vars['text_size'],$this->p_vars['options']); + unset($this->p_vars['content']); + } else + { + if (!isset($this->p_vars['content'])) $this->p_vars['content'] = ''; + if (isset($this->p_vars['quote_data'])) + { + $this->p_vars['content'] .= $this->p_vars['quote_data']; + unset($this->p_vars['quote_data']); + } + $this->p_vars['content'] .= $word; + } + } + /**#@-*/ + /** + * setup the parser tokens, and the pushEvent/popEvent arrays + * @see $tokens, $pushEvent, $popEvent + */ + + function setupStates() + { + $this->tokens[STATE_NOEVENTS] = array("<text","<font","<newpage />","<newpage/>",'<pdffunction:','"'); + $this->tokens[PHPDOCUMENTOR_PDF_STATE_TEXT] = array(">","=",'"',"</text>"); + $this->tokens[PHPDOCUMENTOR_PDF_STATE_FONT] = array("/>","=",'"'); + $this->tokens[PHPDOCUMENTOR_PDF_STATE_CONTENT] = array("<font",'<pdffunction:',"</text>"); + $this->tokens[PHPDOCUMENTOR_PDF_STATE_PDFFUNCTION] = array('"',"/>","="," "); + $this->tokens[STATE_QUOTE] = array("\\\"","\\\\","\""); + $this->tokens[STATE_ESCAPE] = false;// this tells the word parser to just cycle + + // For each event word to event mapings + $this->pushEvent[PARSER_EVENT_QUOTE] = + array( + "\\" => PARSER_EVENT_ESCAPE + ); + $this->popEvent[PARSER_EVENT_QUOTE] = array("\""); +########################## + $this->pushEvent[PARSER_EVENT_NOEVENTS] = + array( + "<text" => PHPDOCUMENTOR_PDF_EVENT_TEXT, + "<font" => PHPDOCUMENTOR_PDF_EVENT_FONT, + "<newpage />" => PHPDOCUMENTOR_PDF_EVENT_NEWPAGE, + "<newpage/>" => PHPDOCUMENTOR_PDF_EVENT_NEWPAGE, + "<pdffunction:" => PHPDOCUMENTOR_PDF_EVENT_PDFFUNCTION, + '"' => PARSER_EVENT_QUOTE, + ); +########################## + $this->pushEvent[PHPDOCUMENTOR_PDF_EVENT_TEXT] = + array( + '"' => PARSER_EVENT_QUOTE, + '>' => PHPDOCUMENTOR_PDF_EVENT_CONTENT, + ); + + $this->popEvent[PHPDOCUMENTOR_PDF_EVENT_TEXT] = array("</text>"); +########################## + $this->pushEvent[PHPDOCUMENTOR_PDF_EVENT_FONT] = + array( + '"' => PARSER_EVENT_QUOTE, + ); + + $this->popEvent[PHPDOCUMENTOR_PDF_EVENT_FONT] = array("/>"); +########################## + $this->pushEvent[PHPDOCUMENTOR_PDF_EVENT_PDFFUNCTION] = + array( + '"' => PARSER_EVENT_QUOTE, + ); + + $this->popEvent[PHPDOCUMENTOR_PDF_EVENT_PDFFUNCTION] = array("/>"); +########################## + $this->pushEvent[PHPDOCUMENTOR_PDF_EVENT_CONTENT] = + array( + "<font" => PHPDOCUMENTOR_PDF_EVENT_FONT, + "<newpage />" => PHPDOCUMENTOR_PDF_EVENT_NEWPAGE, + "<newpage/>" => PHPDOCUMENTOR_PDF_EVENT_NEWPAGE, + "<pdffunction:" => PHPDOCUMENTOR_PDF_EVENT_PDFFUNCTION, + ); + + $this->popEvent[PHPDOCUMENTOR_PDF_EVENT_CONTENT] = array("</text>"); + } + + /** + * Return the name of the parser event + * @param integer + */ + function getParserEventName ($value) + { + $lookup = array( + PARSER_EVENT_NOEVENTS => "PARSER_EVENT_NOEVENTS", + PARSER_EVENT_QUOTE => "PARSER_EVENT_QUOTE", + PHPDOCUMENTOR_PDF_EVENT_TEXT => "PHPDOCUMENTOR_PDF_EVENT_TEXT", + PHPDOCUMENTOR_PDF_EVENT_CONTENT => "PHPDOCUMENTOR_PDF_EVENT_CONTENT", + PHPDOCUMENTOR_PDF_EVENT_FONT => "PHPDOCUMENTOR_PDF_EVENT_FONT", + PHPDOCUMENTOR_PDF_EVENT_PDFFUNCTION => "PHPDOCUMENTOR_PDF_EVENT_PDFFUNCTION", + ); + if (isset($lookup[$value])) + return $lookup[$value]; + else return $value; + } +} +?>
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/class.ezpdf.php b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/class.ezpdf.php new file mode 100755 index 00000000..f94fe330 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/class.ezpdf.php @@ -0,0 +1,1571 @@ +<?php +/** + * @package Cpdf + */ +/** + * Cpdf class + */ +include_once('phpDocumentor/Converters/PDF/default/class.pdf.php'); + +/** + * This class will take the basic interaction facilities of the Cpdf class + * and make more useful functions so that the user does not have to + * know all the ins and outs of pdf presentation to produce something pretty. + * + * IMPORTANT NOTE + * there is no warranty, implied or otherwise with this software. + * + * @version 009 (versioning is linked to class.pdf.php) + * released under a public domain licence. + * @author Wayne Munro, R&OS Ltd, {@link http://www.ros.co.nz/pdf} + * @package Cpdf + */ +class Cezpdf extends Cpdf { +//============================================================================== +// this class will take the basic interaction facilities of the Cpdf class +// and make more useful functions so that the user does not have to +// know all the ins and outs of pdf presentation to produce something pretty. +// +// IMPORTANT NOTE +// there is no warranty, implied or otherwise with this software. +// +// version 009 (versioning is linked to class.pdf.php) +// +// released under a public domain licence. +// +// Wayne Munro, R&OS Ltd, http://www.ros.co.nz/pdf +//============================================================================== + +var $ez=array('fontSize'=>10); // used for storing most of the page configuration parameters +var $y; // this is the current vertical positon on the page of the writing point, very important +var $ezPages=array(); // keep an array of the ids of the pages, making it easy to go back and add page numbers etc. +var $ezPageCount=0; + +// ------------------------------------------------------------------------------ + +function Cezpdf($paper='a4',$orientation='portrait'){ + // Assuming that people don't want to specify the paper size using the absolute coordinates + // allow a couple of options: + // orientation can be 'portrait' or 'landscape' + // or, to actually set the coordinates, then pass an array in as the first parameter. + // the defaults are as shown. + // + // ------------------------- + // 2002-07-24 - Nicola Asuni (info@tecnick.com): + // Added new page formats (45 standard ISO paper formats and 4 american common formats) + // paper cordinates are calculated in this way: (inches * 72) where 1 inch = 2.54 cm + // + // Now you may also pass a 2 values array containing the page width and height in centimeters + // ------------------------- + + if (!is_array($paper)){ + switch (strtoupper($paper)){ + case '4A0': {$size = array(0,0,4767.87,6740.79); break;} + case '2A0': {$size = array(0,0,3370.39,4767.87); break;} + case 'A0': {$size = array(0,0,2383.94,3370.39); break;} + case 'A1': {$size = array(0,0,1683.78,2383.94); break;} + case 'A2': {$size = array(0,0,1190.55,1683.78); break;} + case 'A3': {$size = array(0,0,841.89,1190.55); break;} + case 'A4': default: {$size = array(0,0,595.28,841.89); break;} + case 'A5': {$size = array(0,0,419.53,595.28); break;} + case 'A6': {$size = array(0,0,297.64,419.53); break;} + case 'A7': {$size = array(0,0,209.76,297.64); break;} + case 'A8': {$size = array(0,0,147.40,209.76); break;} + case 'A9': {$size = array(0,0,104.88,147.40); break;} + case 'A10': {$size = array(0,0,73.70,104.88); break;} + case 'B0': {$size = array(0,0,2834.65,4008.19); break;} + case 'B1': {$size = array(0,0,2004.09,2834.65); break;} + case 'B2': {$size = array(0,0,1417.32,2004.09); break;} + case 'B3': {$size = array(0,0,1000.63,1417.32); break;} + case 'B4': {$size = array(0,0,708.66,1000.63); break;} + case 'B5': {$size = array(0,0,498.90,708.66); break;} + case 'B6': {$size = array(0,0,354.33,498.90); break;} + case 'B7': {$size = array(0,0,249.45,354.33); break;} + case 'B8': {$size = array(0,0,175.75,249.45); break;} + case 'B9': {$size = array(0,0,124.72,175.75); break;} + case 'B10': {$size = array(0,0,87.87,124.72); break;} + case 'C0': {$size = array(0,0,2599.37,3676.54); break;} + case 'C1': {$size = array(0,0,1836.85,2599.37); break;} + case 'C2': {$size = array(0,0,1298.27,1836.85); break;} + case 'C3': {$size = array(0,0,918.43,1298.27); break;} + case 'C4': {$size = array(0,0,649.13,918.43); break;} + case 'C5': {$size = array(0,0,459.21,649.13); break;} + case 'C6': {$size = array(0,0,323.15,459.21); break;} + case 'C7': {$size = array(0,0,229.61,323.15); break;} + case 'C8': {$size = array(0,0,161.57,229.61); break;} + case 'C9': {$size = array(0,0,113.39,161.57); break;} + case 'C10': {$size = array(0,0,79.37,113.39); break;} + case 'RA0': {$size = array(0,0,2437.80,3458.27); break;} + case 'RA1': {$size = array(0,0,1729.13,2437.80); break;} + case 'RA2': {$size = array(0,0,1218.90,1729.13); break;} + case 'RA3': {$size = array(0,0,864.57,1218.90); break;} + case 'RA4': {$size = array(0,0,609.45,864.57); break;} + case 'SRA0': {$size = array(0,0,2551.18,3628.35); break;} + case 'SRA1': {$size = array(0,0,1814.17,2551.18); break;} + case 'SRA2': {$size = array(0,0,1275.59,1814.17); break;} + case 'SRA3': {$size = array(0,0,907.09,1275.59); break;} + case 'SRA4': {$size = array(0,0,637.80,907.09); break;} + case 'LETTER': {$size = array(0,0,612.00,792.00); break;} + case 'LEGAL': {$size = array(0,0,612.00,1008.00); break;} + case 'EXECUTIVE': {$size = array(0,0,521.86,756.00); break;} + case 'FOLIO': {$size = array(0,0,612.00,936.00); break;} + } + switch (strtolower($orientation)){ + case 'landscape': + $a=$size[3]; + $size[3]=$size[2]; + $size[2]=$a; + break; + } + } else { + if (count($paper)>2) { + // then an array was sent it to set the size + $size = $paper; + } + else { //size in centimeters has been passed + $size[0] = 0; + $size[1] = 0; + $size[2] = ( $paper[0] / 2.54 ) * 72; + $size[3] = ( $paper[1] / 2.54 ) * 72; + } + } + $this->Cpdf($size); + $this->ez['pageWidth']=$size[2]; + $this->ez['pageHeight']=$size[3]; + + // also set the margins to some reasonable defaults + $this->ez['topMargin']=30; + $this->ez['bottomMargin']=30; + $this->ez['leftMargin']=30; + $this->ez['rightMargin']=30; + + // set the current writing position to the top of the first page + $this->y = $this->ez['pageHeight']-$this->ez['topMargin']; + // and get the ID of the page that was created during the instancing process. + $this->ezPages[1]=$this->getFirstPageId(); + $this->ezPageCount=1; +} + +// ------------------------------------------------------------------------------ +// 2002-07-24: Nicola Asuni (info@tecnick.com) +// Set Margins in centimeters +function ezSetCmMargins($top,$bottom,$left,$right){ + $top = ( $top / 2.54 ) * 72; + $bottom = ( $bottom / 2.54 ) * 72; + $left = ( $left / 2.54 ) * 72; + $right = ( $right / 2.54 ) * 72; + $this->ezSetMargins($top,$bottom,$left,$right); +} +// ------------------------------------------------------------------------------ + + +function ezColumnsStart($options=array()){ + // start from the current y-position, make the set number of columne + if (isset($this->ez['columns']) && $this->ez['columns']==1){ + // if we are already in a column mode then just return. + return; + } + $def=array('gap'=>10,'num'=>2); + foreach($def as $k=>$v){ + if (!isset($options[$k])){ + $options[$k]=$v; + } + } + // setup the columns + $this->ez['columns']=array('on'=>1,'colNum'=>1); + + // store the current margins + $this->ez['columns']['margins']=array( + $this->ez['leftMargin'] + ,$this->ez['rightMargin'] + ,$this->ez['topMargin'] + ,$this->ez['bottomMargin'] + ); + // and store the settings for the columns + $this->ez['columns']['options']=$options; + // then reset the margins to suit the new columns + // safe enough to assume the first column here, but start from the current y-position + $this->ez['topMargin']=$this->ez['pageHeight']-$this->y; + $width=($this->ez['pageWidth']-$this->ez['leftMargin']-$this->ez['rightMargin']-($options['num']-1)*$options['gap'])/$options['num']; + $this->ez['columns']['width']=$width; + $this->ez['rightMargin']=$this->ez['pageWidth']-$this->ez['leftMargin']-$width; + +} +// ------------------------------------------------------------------------------ +function ezColumnsStop(){ + if (isset($this->ez['columns']) && $this->ez['columns']['on']==1){ + $this->ez['columns']['on']=0; + $this->ez['leftMargin']=$this->ez['columns']['margins'][0]; + $this->ez['rightMargin']=$this->ez['columns']['margins'][1]; + $this->ez['topMargin']=$this->ez['columns']['margins'][2]; + $this->ez['bottomMargin']=$this->ez['columns']['margins'][3]; + } +} +// ------------------------------------------------------------------------------ +function ezInsertMode($status=1,$pageNum=1,$pos='before'){ + // puts the document into insert mode. new pages are inserted until this is re-called with status=0 + // by default pages wil be inserted at the start of the document + switch($status){ + case '1': + if (isset($this->ezPages[$pageNum])){ + $this->ez['insertMode']=1; + $this->ez['insertOptions']=array('id'=>$this->ezPages[$pageNum],'pos'=>$pos); + } + break; + case '0': + $this->ez['insertMode']=0; + break; + } +} +// ------------------------------------------------------------------------------ + +function ezNewPage(){ + $pageRequired=1; + if (isset($this->ez['columns']) && $this->ez['columns']['on']==1){ + // check if this is just going to a new column + // increment the column number +//echo 'HERE<br>'; + $this->ez['columns']['colNum']++; +//echo $this->ez['columns']['colNum'].'<br>'; + if ($this->ez['columns']['colNum'] <= $this->ez['columns']['options']['num']){ + // then just reset to the top of the next column + $pageRequired=0; + } else { + $this->ez['columns']['colNum']=1; + $this->ez['topMargin']=$this->ez['columns']['margins'][2]; + } + + $width = $this->ez['columns']['width']; + $this->ez['leftMargin']=$this->ez['columns']['margins'][0]+($this->ez['columns']['colNum']-1)*($this->ez['columns']['options']['gap']+$width); + $this->ez['rightMargin']=$this->ez['pageWidth']-$this->ez['leftMargin']-$width; + } +//echo 'left='.$this->ez['leftMargin'].' right='.$this->ez['rightMargin'].'<br>'; + + if ($pageRequired){ + // make a new page, setting the writing point back to the top + $this->y = $this->ez['pageHeight']-$this->ez['topMargin']; + // make the new page with a call to the basic class. + $this->ezPageCount++; + if (isset($this->ez['insertMode']) && $this->ez['insertMode']==1){ + $id = $this->ezPages[$this->ezPageCount] = $this->newPage(1,$this->ez['insertOptions']['id'],$this->ez['insertOptions']['pos']); + // then manipulate the insert options so that inserted pages follow each other + $this->ez['insertOptions']['id']=$id; + $this->ez['insertOptions']['pos']='after'; + } else { + $this->ezPages[$this->ezPageCount] = $this->newPage(); + } + } else { + $this->y = $this->ez['pageHeight']-$this->ez['topMargin']; + } +} + +// ------------------------------------------------------------------------------ + +function ezSetMargins($top,$bottom,$left,$right){ + // sets the margins to new values + $this->ez['topMargin']=$top; + $this->ez['bottomMargin']=$bottom; + $this->ez['leftMargin']=$left; + $this->ez['rightMargin']=$right; + // check to see if this means that the current writing position is outside the + // writable area + if ($this->y > $this->ez['pageHeight']-$top){ + // then move y down + $this->y = $this->ez['pageHeight']-$top; + } + if ( $this->y < $bottom){ + // then make a new page + $this->ezNewPage(); + } +} + +// ------------------------------------------------------------------------------ + +function ezGetCurrentPageNumber(){ + // return the strict numbering (1,2,3,4..) number of the current page + return $this->ezPageCount; +} + +// ------------------------------------------------------------------------------ + +function ezStartPageNumbers($x,$y,$size,$pos='left',$pattern='{PAGENUM} of {TOTALPAGENUM}',$num=''){ + // put page numbers on the pages from here. + // place then on the 'pos' side of the coordinates (x,y). + // pos can be 'left' or 'right' + // use the given 'pattern' for display, where (PAGENUM} and {TOTALPAGENUM} are replaced + // as required. + // if $num is set, then make the first page this number, the number of total pages will + // be adjusted to account for this. + // Adjust this function so that each time you 'start' page numbers then you effectively start a different batch + // return the number of the batch, so that they can be stopped in a different order if required. + if (!$pos || !strlen($pos)){ + $pos='left'; + } + if (!$pattern || !strlen($pattern)){ + $pattern='{PAGENUM} of {TOTALPAGENUM}'; + } + if (!isset($this->ez['pageNumbering'])){ + $this->ez['pageNumbering']=array(); + } + $i = count($this->ez['pageNumbering']); + $this->ez['pageNumbering'][$i][$this->ezPageCount]=array('x'=>$x,'y'=>$y,'pos'=>$pos,'pattern'=>$pattern,'num'=>$num,'size'=>$size); + return $i; +} + +// ------------------------------------------------------------------------------ + +function ezWhatPageNumber($pageNum,$i=0){ + // given a particular generic page number (ie, document numbered sequentially from beginning), + // return the page number under a particular page numbering scheme ($i) + $num=0; + $start=1; + $startNum=1; + if (!isset($this->ez['pageNumbering'])) + { + $this->addMessage('WARNING: page numbering called for and wasn\'t started with ezStartPageNumbers'); + return 0; + } + foreach($this->ez['pageNumbering'][$i] as $k=>$v){ + if ($k<=$pageNum){ + if (is_array($v)){ + // start block + if (strlen($v['num'])){ + // a start was specified + $start=$v['num']; + $startNum=$k; + $num=$pageNum-$startNum+$start; + } + } else { + // stop block + $num=0; + } + } + } + return $num; +} + +// ------------------------------------------------------------------------------ + +function ezStopPageNumbers($stopTotal=0,$next=0,$i=0){ + // if stopTotal=1 then the totalling of pages for this number will stop too + // if $next=1, then do this page, but not the next, else do not do this page either + // if $i is set, then stop that particular pagenumbering sequence. + if (!isset($this->ez['pageNumbering'])){ + $this->ez['pageNumbering']=array(); + } + if ($next && isset($this->ez['pageNumbering'][$i][$this->ezPageCount]) && is_array($this->ez['pageNumbering'][$i][$this->ezPageCount])){ + // then this has only just been started, this will over-write the start, and nothing will appear + // add a special command to the start block, telling it to stop as well + if ($stopTotal){ + $this->ez['pageNumbering'][$i][$this->ezPageCount]['stoptn']=1; + } else { + $this->ez['pageNumbering'][$i][$this->ezPageCount]['stopn']=1; + } + } else { + if ($stopTotal){ + $this->ez['pageNumbering'][$i][$this->ezPageCount]='stopt'; + } else { + $this->ez['pageNumbering'][$i][$this->ezPageCount]='stop'; + } + if ($next){ + $this->ez['pageNumbering'][$i][$this->ezPageCount].='n'; + } + } +} + +// ------------------------------------------------------------------------------ + +function ezPRVTpageNumberSearch($lbl,&$tmp){ + foreach($tmp as $i=>$v){ + if (is_array($v)){ + if (isset($v[$lbl])){ + return $i; + } + } else { + if ($v==$lbl){ + return $i; + } + } + } + return 0; +} + +// ------------------------------------------------------------------------------ + +function ezPRVTaddPageNumbers(){ + // this will go through the pageNumbering array and add the page numbers are required + if (isset($this->ez['pageNumbering'])){ + $totalPages1 = $this->ezPageCount; + $tmp1=$this->ez['pageNumbering']; + $status=0; + foreach($tmp1 as $i=>$tmp){ + // do each of the page numbering systems + // firstly, find the total pages for this one + $k = $this->ezPRVTpageNumberSearch('stopt',$tmp); + if ($k && $k>0){ + $totalPages = $k-1; + } else { + $l = $this->ezPRVTpageNumberSearch('stoptn',$tmp); + if ($l && $l>0){ + $totalPages = $l; + } else { + $totalPages = $totalPages1; + } + } + foreach ($this->ezPages as $pageNum=>$id){ + if (isset($tmp[$pageNum])){ + if (is_array($tmp[$pageNum])){ + // then this must be starting page numbers + $status=1; + $info = $tmp[$pageNum]; + $info['dnum']=$info['num']-$pageNum; + // also check for the special case of the numbering stopping and starting on the same page + if (isset($info['stopn']) || isset($info['stoptn']) ){ + $status=2; + } + } else if ($tmp[$pageNum]=='stop' || $tmp[$pageNum]=='stopt'){ + // then we are stopping page numbers + $status=0; + } else if ($status==1 && ($tmp[$pageNum]=='stoptn' || $tmp[$pageNum]=='stopn')){ + // then we are stopping page numbers + $status=2; + } + } + if ($status){ + // then add the page numbering to this page + if (strlen($info['num'])){ + $num=$pageNum+$info['dnum']; + } else { + $num=$pageNum; + } + $total = $totalPages+$num-$pageNum; + $pat = str_replace('{PAGENUM}',$num,$info['pattern']); + $pat = str_replace('{TOTALPAGENUM}',$total,$pat); + $this->reopenObject($id); + switch($info['pos']){ + case 'right': + $this->addText($info['x'],$info['y'],$info['size'],$pat); + break; + default: + $w=$this->getTextWidth($info['size'],$pat); + $this->addText($info['x']-$w,$info['y'],$info['size'],$pat); + break; + } + $this->closeObject(); + } + if ($status==2){ + $status=0; + } + } + } + } +} + +// ------------------------------------------------------------------------------ + +function ezPRVTcleanUp(){ + $this->ezPRVTaddPageNumbers(); +} + +// ------------------------------------------------------------------------------ + +function ezStream($options=''){ + $this->ezPRVTcleanUp(); + $this->stream($options); +} + +// ------------------------------------------------------------------------------ + +function ezOutput($options=0){ + $this->ezPRVTcleanUp(); + return $this->output($options); +} + +// ------------------------------------------------------------------------------ + +function ezSetY($y){ + // used to change the vertical position of the writing point. + $this->y = $y; + if ( $this->y < $this->ez['bottomMargin']){ + // then make a new page + $this->ezNewPage(); + } +} + +// ------------------------------------------------------------------------------ + +function ezSetDy($dy,$mod=''){ + // used to change the vertical position of the writing point. + // changes up by a positive increment, so enter a negative number to go + // down the page + // if $mod is set to 'makeSpace' and a new page is forced, then the pointed will be moved + // down on the new page, this will allow space to be reserved for graphics etc. + $this->y += $dy; + if ( $this->y < $this->ez['bottomMargin']){ + // then make a new page + $this->ezNewPage(); + if ($mod=='makeSpace'){ + $this->y += $dy; + } + } +} + +// ------------------------------------------------------------------------------ + +function ezPrvtTableDrawLines($pos,$gap,$x0,$x1,$y0,$y1,$y2,$col,$inner,$outer,$opt=1){ + $x0=1000; + $x1=0; + $this->setStrokeColor($col[0],$col[1],$col[2]); + $cnt=0; + $n = count($pos); + foreach($pos as $x){ + $cnt++; + if ($cnt==1 || $cnt==$n){ + $this->setLineStyle($outer); + } else { + $this->setLineStyle($inner); + } + $this->line($x-$gap/2,$y0,$x-$gap/2,$y2); + if ($x>$x1){ $x1=$x; }; + if ($x<$x0){ $x0=$x; }; + } + $this->setLineStyle($outer); + $this->line($x0-$gap/2-$outer/2,$y0,$x1-$gap/2+$outer/2,$y0); + // only do the second line if it is different to the first, AND each row does not have + // a line on it. + if ($y0!=$y1 && $opt<2){ + $this->line($x0-$gap/2,$y1,$x1-$gap/2,$y1); + } + $this->line($x0-$gap/2-$outer/2,$y2,$x1-$gap/2+$outer/2,$y2); +} + +// ------------------------------------------------------------------------------ + +function ezPrvtTableColumnHeadings($cols,$pos,$maxWidth,$height,$decender,$gap,$size,&$y,$optionsAll=array()){ + // uses ezText to add the text, and returns the height taken by the largest heading + // this page will move the headings to a new page if they will not fit completely on this one + // transaction support will be used to implement this + + if (isset($optionsAll['cols'])){ + $options = $optionsAll['cols']; + } else { + $options = array(); + } + + $mx=0; + $startPage = $this->ezPageCount; + $secondGo=0; + + // $y is the position at which the top of the table should start, so the base + // of the first text, is $y-$height-$gap-$decender, but ezText starts by dropping $height + + // the return from this function is the total cell height, including gaps, and $y is adjusted + // to be the postion of the bottom line + + // begin the transaction + $this->transaction('start'); + $ok=0; +// $y-=$gap-$decender; + $y-=$gap; + while ($ok==0){ + foreach($cols as $colName=>$colHeading){ + $this->ezSetY($y); + if (isset($options[$colName]) && isset($options[$colName]['justification'])){ + $justification = $options[$colName]['justification']; + } else { + $justification = 'left'; + } + $this->ezText($colHeading,$size,array('aleft'=> $pos[$colName],'aright'=>($maxWidth[$colName]+$pos[$colName]),'justification'=>$justification)); + $dy = $y-$this->y; + if ($dy>$mx){ + $mx=$dy; + } + } + $y = $y - $mx - $gap + $decender; +// $y -= $mx-$gap+$decender; + + // now, if this has moved to a new page, then abort the transaction, move to a new page, and put it there + // do not check on the second time around, to avoid an infinite loop + if ($this->ezPageCount != $startPage && $secondGo==0){ + $this->transaction('rewind'); + $this->ezNewPage(); + $y = $this->y - $gap-$decender; + $ok=0; + $secondGo=1; +// $y = $store_y; + $mx=0; + + } else { + $this->transaction('commit'); + $ok=1; + } + } + + return $mx+$gap*2-$decender; +} + +// ------------------------------------------------------------------------------ + +function ezPrvtGetTextWidth($size,$text){ + // will calculate the maximum width, taking into account that the text may be broken + // by line breaks. + $mx=0; + $lines = explode("\n",$text); + foreach ($lines as $line){ + $w = $this->getTextWidth($size,$line); + if ($w>$mx){ + $mx=$w; + } + } + return $mx; +} + +// ------------------------------------------------------------------------------ + +function ezTable(&$data,$cols='',$title='',$options=''){ + // add a table of information to the pdf document + // $data is a two dimensional array + // $cols (optional) is an associative array, the keys are the names of the columns from $data + // to be presented (and in that order), the values are the titles to be given to the columns + // $title (optional) is the title to be put on the top of the table + // + // $options is an associative array which can contain: + // 'showLines'=> 0,1,2, default is 1 (show outside and top lines only), 2=> lines on each row + // 'showHeadings' => 0 or 1 + // 'shaded'=> 0,1,2,3 default is 1 (1->alternate lines are shaded, 0->no shading, 2-> both shaded, second uses shadeCol2) + // 'shadeCol' => (r,g,b) array, defining the colour of the shading, default is (0.8,0.8,0.8) + // 'shadeCol2' => (r,g,b) array, defining the colour of the shading of the other blocks, default is (0.7,0.7,0.7) + // 'fontSize' => 10 + // 'textCol' => (r,g,b) array, text colour + // 'titleFontSize' => 12 + // 'rowGap' => 2 , the space added at the top and bottom of each row, between the text and the lines + // 'colGap' => 5 , the space on the left and right sides of each cell + // 'lineCol' => (r,g,b) array, defining the colour of the lines, default, black. + // 'xPos' => 'left','right','center','centre',or coordinate, reference coordinate in the x-direction + // 'xOrientation' => 'left','right','center','centre', position of the table w.r.t 'xPos' + // 'width'=> <number> which will specify the width of the table, if it turns out to not be this + // wide, then it will stretch the table to fit, if it is wider then each cell will be made + // proportionalty smaller, and the content may have to wrap. + // 'maxWidth'=> <number> similar to 'width', but will only make table smaller than it wants to be + // 'options' => array(<colname>=>array('justification'=>'left','width'=>100,'link'=>linkDataName),<colname>=>....) + // allow the setting of other paramaters for the individual columns + // 'minRowSpace'=> the minimum space between the bottom of each row and the bottom margin, in which a new row will be started + // if it is less, then a new page would be started, default=-100 + // 'innerLineThickness'=>1 + // 'outerLineThickness'=>1 + // 'splitRows'=>0, 0 or 1, whether or not to allow the rows to be split across page boundaries + // 'protectRows'=>number, the number of rows to hold with the heading on page, ie, if there less than this number of + // rows on the page, then move the whole lot onto the next page, default=1 + // + // note that the user will have had to make a font selection already or this will not + // produce a valid pdf file. + + if (!is_array($data)){ + return; + } + + if (!is_array($cols)){ + // take the columns from the first row of the data set + reset($data); + list($k,$v)=each($data); + if (!is_array($v)){ + return; + } + $cols=array(); + foreach($v as $k1=>$v1){ + $cols[$k1]=$k1; + } + } + + if (!is_array($options)){ + $options=array(); + } + + $defaults = array( + 'shaded'=>1,'showLines'=>1,'shadeCol'=>array(0.8,0.8,0.8),'shadeCol2'=>array(0.7,0.7,0.7),'fontSize'=>10,'titleFontSize'=>12 + ,'titleGap'=>5,'lineCol'=>array(0,0,0),'gap'=>5,'xPos'=>'centre','xOrientation'=>'centre' + ,'showHeadings'=>1,'textCol'=>array(0,0,0),'width'=>0,'maxWidth'=>0,'cols'=>array(),'minRowSpace'=>-100,'rowGap'=>2,'colGap'=>5 + ,'innerLineThickness'=>1,'outerLineThickness'=>1,'splitRows'=>0,'protectRows'=>1 + ); + + foreach($defaults as $key=>$value){ + if (is_array($value)){ + if (!isset($options[$key]) || !is_array($options[$key])){ + $options[$key]=$value; + } + } else { + if (!isset($options[$key])){ + $options[$key]=$value; + } + } + } + $options['gap']=2*$options['colGap']; + + $middle = ($this->ez['pageWidth']-$this->ez['rightMargin'])/2+($this->ez['leftMargin'])/2; + // figure out the maximum widths of the text within each column + $maxWidth=array(); + foreach($cols as $colName=>$colHeading){ + $maxWidth[$colName]=0; + } + // find the maximum cell widths based on the data + foreach($data as $row){ + foreach($cols as $colName=>$colHeading){ + $w = $this->ezPrvtGetTextWidth($options['fontSize'],(string)$row[$colName])*1.01; + if ($w > $maxWidth[$colName]){ + $maxWidth[$colName]=$w; + } + } + } + // and the maximum widths to fit in the headings + foreach($cols as $colName=>$colTitle){ + $w = $this->ezPrvtGetTextWidth($options['fontSize'],(string)$colTitle)*1.01; + if ($w > $maxWidth[$colName]){ + $maxWidth[$colName]=$w; + } + } + + // calculate the start positions of each of the columns + $pos=array(); + $x=0; + $t=$x; + $adjustmentWidth=0; + $setWidth=0; + foreach($maxWidth as $colName => $w){ + $pos[$colName]=$t; + // if the column width has been specified then set that here, also total the + // width avaliable for adjustment + if (isset($options['cols'][$colName]) && isset($options['cols'][$colName]['width']) && $options['cols'][$colName]['width']>0){ + $t=$t+$options['cols'][$colName]['width']; + $maxWidth[$colName] = $options['cols'][$colName]['width']-$options['gap']; + $setWidth += $options['cols'][$colName]['width']; + } else { + $t=$t+$w+$options['gap']; + $adjustmentWidth += $w; + $setWidth += $options['gap']; + } + } + $pos['_end_']=$t; + + // if maxWidth is specified, and the table is too wide, and the width has not been set, + // then set the width. + if ($options['width']==0 && $options['maxWidth'] && ($t-$x)>$options['maxWidth']){ + // then need to make this one smaller + $options['width']=$options['maxWidth']; + } + + if ($options['width'] && $adjustmentWidth>0 && $setWidth<$options['width']){ + // first find the current widths of the columns involved in this mystery + $cols0 = array(); + $cols1 = array(); + $xq=0; + $presentWidth=0; + $last=''; + foreach($pos as $colName=>$p){ + if (!isset($options['cols'][$last]) || !isset($options['cols'][$last]['width']) || $options['cols'][$last]['width']<=0){ + if (strlen($last)){ + $cols0[$last]=$p-$xq -$options['gap']; + $presentWidth += ($p-$xq - $options['gap']); + } + } else { + $cols1[$last]=$p-$xq; + } + $last=$colName; + $xq=$p; + } + // $cols0 contains the widths of all the columns which are not set + $neededWidth = $options['width']-$setWidth; + // if needed width is negative then add it equally to each column, else get more tricky + if ($presentWidth<$neededWidth){ + foreach($cols0 as $colName=>$w){ + $cols0[$colName]+= ($neededWidth-$presentWidth)/count($cols0); + } + } else { + + $cnt=0; + while ($presentWidth>$neededWidth && $cnt<100){ + $cnt++; // insurance policy + // find the widest columns, and the next to widest width + $aWidest = array(); + $nWidest=0; + $widest=0; + foreach($cols0 as $colName=>$w){ + if ($w>$widest){ + $aWidest=array($colName); + $nWidest = $widest; + $widest=$w; + } else if ($w==$widest){ + $aWidest[]=$colName; + } + } + // then figure out what the width of the widest columns would have to be to take up all the slack + $newWidestWidth = $widest - ($presentWidth-$neededWidth)/count($aWidest); + if ($newWidestWidth > $nWidest){ + // then there is space to set them to this + foreach($aWidest as $colName){ + $cols0[$colName] = $newWidestWidth; + } + $presentWidth=$neededWidth; + } else { + // there is not space, reduce the size of the widest ones down to the next size down, and we + // will go round again + foreach($aWidest as $colName){ + $cols0[$colName] = $nWidest; + } + $presentWidth=$presentWidth-($widest-$nWidest)*count($aWidest); + } + } + } + // $cols0 now contains the new widths of the constrained columns. + // now need to update the $pos and $maxWidth arrays + $xq=0; + foreach($pos as $colName=>$p){ + $pos[$colName]=$xq; + if (!isset($options['cols'][$colName]) || !isset($options['cols'][$colName]['width']) || $options['cols'][$colName]['width']<=0){ + if (isset($cols0[$colName])){ + $xq += $cols0[$colName] + $options['gap']; + $maxWidth[$colName]=$cols0[$colName]; + } + } else { + if (isset($cols1[$colName])){ + $xq += $cols1[$colName]; + } + } + } + + $t=$x+$options['width']; + $pos['_end_']=$t; + } + + // now adjust the table to the correct location across the page + switch ($options['xPos']){ + case 'left': + $xref = $this->ez['leftMargin']; + break; + case 'right': + $xref = $this->ez['pageWidth'] - $this->ez['rightMargin']; + break; + case 'centre': + case 'center': + $xref = $middle; + break; + default: + $xref = $options['xPos']; + break; + } + switch ($options['xOrientation']){ + case 'left': + $dx = $xref-$t; + break; + case 'right': + $dx = $xref; + break; + case 'centre': + case 'center': + $dx = $xref-$t/2; + break; + } + + + foreach($pos as $k=>$v){ + $pos[$k]=$v+$dx; + } + $x0=$x+$dx; + $x1=$t+$dx; + + $baseLeftMargin = $this->ez['leftMargin']; + $basePos = $pos; + $baseX0 = $x0; + $baseX1 = $x1; + + // ok, just about ready to make me a table + $this->setColor($options['textCol'][0],$options['textCol'][1],$options['textCol'][2]); + $this->setStrokeColor($options['shadeCol'][0],$options['shadeCol'][1],$options['shadeCol'][2]); + + $middle = ($x1+$x0)/2; + + // start a transaction which will be used to regress the table, if there are not enough rows protected + if ($options['protectRows']>0){ + $this->transaction('start'); + $movedOnce=0; + } + $abortTable = 1; + while ($abortTable){ + $abortTable=0; + + $dm = $this->ez['leftMargin']-$baseLeftMargin; + foreach($basePos as $k=>$v){ + $pos[$k]=$v+$dm; + } + $x0=$baseX0+$dm; + $x1=$baseX1+$dm; + $middle = ($x1+$x0)/2; + + + // if the title is set, then do that + if (strlen($title)){ + $w = $this->getTextWidth($options['titleFontSize'],$title); + $this->y -= $this->getFontHeight($options['titleFontSize']); + if ($this->y < $this->ez['bottomMargin']){ + $this->ezNewPage(); + // margins may have changed on the newpage + $dm = $this->ez['leftMargin']-$baseLeftMargin; + foreach($basePos as $k=>$v){ + $pos[$k]=$v+$dm; + } + $x0=$baseX0+$dm; + $x1=$baseX1+$dm; + $middle = ($x1+$x0)/2; + $this->y -= $this->getFontHeight($options['titleFontSize']); + } + $this->addText($middle-$w/2,$this->y,$options['titleFontSize'],$title); + $this->y -= $options['titleGap']; + } + + // margins may have changed on the newpage + $dm = $this->ez['leftMargin']-$baseLeftMargin; + foreach($basePos as $k=>$v){ + $pos[$k]=$v+$dm; + } + $x0=$baseX0+$dm; + $x1=$baseX1+$dm; + + $y=$this->y; // to simplify the code a bit + + // make the table + $height = $this->getFontHeight($options['fontSize']); + $decender = $this->getFontDecender($options['fontSize']); + + + + $y0=$y+$decender; + $dy=0; + if ($options['showHeadings']){ + // this function will move the start of the table to a new page if it does not fit on this one + $headingHeight = $this->ezPrvtTableColumnHeadings($cols,$pos,$maxWidth,$height,$decender,$options['rowGap'],$options['fontSize'],$y,$options); + $y0 = $y+$headingHeight; + $y1 = $y; + + + $dm = $this->ez['leftMargin']-$baseLeftMargin; + foreach($basePos as $k=>$v){ + $pos[$k]=$v+$dm; + } + $x0=$baseX0+$dm; + $x1=$baseX1+$dm; + + } else { + $y1 = $y0; + } + $firstLine=1; + + + // open an object here so that the text can be put in over the shading + if ($options['shaded']){ + $this->saveState(); + $textObjectId = $this->openObject(); + $this->closeObject(); + $this->addObject($textObjectId); + $this->reopenObject($textObjectId); + } + + $cnt=0; + $newPage=0; + foreach($data as $row){ + $cnt++; + // the transaction support will be used to prevent rows being split + if ($options['splitRows']==0){ + $pageStart = $this->ezPageCount; + if (isset($this->ez['columns']) && $this->ez['columns']['on']==1){ + $columnStart = $this->ez['columns']['colNum']; + } + $this->transaction('start'); + $row_orig = $row; + $y_orig = $y; + $y0_orig = $y0; + $y1_orig = $y1; + } + $ok=0; + $secondTurn=0; + while(!$abortTable && $ok == 0){ + + $mx=0; + $newRow=1; + while(!$abortTable && ($newPage || $newRow)){ + + $y-=$height; + if ($newPage || $y<$this->ez['bottomMargin'] || (isset($options['minRowSpace']) && $y<($this->ez['bottomMargin']+$options['minRowSpace'])) ){ + // check that enough rows are with the heading + if ($options['protectRows']>0 && $movedOnce==0 && $cnt<=$options['protectRows']){ + // then we need to move the whole table onto the next page + $movedOnce = 1; + $abortTable = 1; + } + + $y2=$y-$mx+2*$height+$decender-$newRow*$height; + if ($options['showLines']){ + if (!$options['showHeadings']){ + $y0=$y1; + } + $this->ezPrvtTableDrawLines($pos,$options['gap'],$x0,$x1,$y0,$y1,$y2,$options['lineCol'],$options['innerLineThickness'],$options['outerLineThickness'],$options['showLines']); + } + if ($options['shaded']){ + $this->closeObject(); + $this->restoreState(); + } + $this->ezNewPage(); + // and the margins may have changed, this is due to the possibility of the columns being turned on + // as the columns are managed by manipulating the margins + + $dm = $this->ez['leftMargin']-$baseLeftMargin; + foreach($basePos as $k=>$v){ + $pos[$k]=$v+$dm; + } +// $x0=$x0+$dm; +// $x1=$x1+$dm; + $x0=$baseX0+$dm; + $x1=$baseX1+$dm; + + if ($options['shaded']){ + $this->saveState(); + $textObjectId = $this->openObject(); + $this->closeObject(); + $this->addObject($textObjectId); + $this->reopenObject($textObjectId); + } + $this->setColor($options['textCol'][0],$options['textCol'][1],$options['textCol'][2],1); + $y = $this->ez['pageHeight']-$this->ez['topMargin']; + $y0=$y+$decender; + $mx=0; + if ($options['showHeadings']){ + $this->ezPrvtTableColumnHeadings($cols,$pos,$maxWidth,$height,$decender,$options['rowGap'],$options['fontSize'],$y,$options); + $y1=$y; + } else { + $y1=$y0; + } + $firstLine=1; + $y -= $height; + } + $newRow=0; + // write the actual data + // if these cells need to be split over a page, then $newPage will be set, and the remaining + // text will be placed in $leftOvers + $newPage=0; + $leftOvers=array(); + + foreach($cols as $colName=>$colTitle){ + $this->ezSetY($y+$height); + $colNewPage=0; + if (isset($row[$colName])){ + if (isset($options['cols'][$colName]) && isset($options['cols'][$colName]['link']) && strlen($options['cols'][$colName]['link'])){ + + $lines = explode("\n",$row[$colName]); + if (isset($row[$options['cols'][$colName]['link']]) && strlen($row[$options['cols'][$colName]['link']])){ + foreach($lines as $k=>$v){ + $lines[$k]='<c:alink:'.$row[$options['cols'][$colName]['link']].'>'.$v.'</c:alink>'; + } + } + } else { + $lines = explode("\n",$row[$colName]); + } + } else { + $lines = array(); + } + $this->y -= $options['rowGap']; + foreach ($lines as $line){ + $line = $this->ezProcessText($line); + $start=1; + + while (strlen($line) || $start){ + $start=0; + if (!$colNewPage){ + $this->y=$this->y-$height; + } + if ($this->y < $this->ez['bottomMargin']){ + // $this->ezNewPage(); + $newPage=1; // whether a new page is required for any of the columns + $colNewPage=1; // whether a new page is required for this column + } + if ($colNewPage){ + if (isset($leftOvers[$colName])){ + $leftOvers[$colName].="\n".$line; + } else { + $leftOvers[$colName] = $line; + } + $line=''; + } else { + if (isset($options['cols'][$colName]) && isset($options['cols'][$colName]['justification']) ){ + $just = $options['cols'][$colName]['justification']; + } else { + $just='left'; + } + + $line=$this->addTextWrap($pos[$colName],$this->y,$maxWidth[$colName],$options['fontSize'],$line,$just); + } + } + } + + $dy=$y+$height-$this->y+$options['rowGap']; + if ($dy-$height*$newPage>$mx){ + $mx=$dy-$height*$newPage; + } + } + // set $row to $leftOvers so that they will be processed onto the new page + $row = $leftOvers; + // now add the shading underneath + if ($options['shaded'] && $cnt%2==0){ + $this->closeObject(); + $this->setColor($options['shadeCol'][0],$options['shadeCol'][1],$options['shadeCol'][2],1); + $this->filledRectangle($x0-$options['gap']/2,$y+$decender+$height-$mx,$x1-$x0,$mx); + $this->reopenObject($textObjectId); + } + + if ($options['shaded']==2 && $cnt%2==1){ + $this->closeObject(); + $this->setColor($options['shadeCol2'][0],$options['shadeCol2'][1],$options['shadeCol2'][2],1); + $this->filledRectangle($x0-$options['gap']/2,$y+$decender+$height-$mx,$x1-$x0,$mx); + $this->reopenObject($textObjectId); + } + + if ($options['showLines']>1){ + // then draw a line on the top of each block +// $this->closeObject(); + $this->saveState(); + $this->setStrokeColor($options['lineCol'][0],$options['lineCol'][1],$options['lineCol'][2],1); +// $this->line($x0-$options['gap']/2,$y+$decender+$height-$mx,$x1-$x0,$mx); + if ($firstLine){ + $this->setLineStyle($options['outerLineThickness']); + $firstLine=0; + } else { + $this->setLineStyle($options['innerLineThickness']); + } + $this->line($x0-$options['gap']/2,$y+$decender+$height,$x1-$options['gap']/2,$y+$decender+$height); + $this->restoreState(); +// $this->reopenObject($textObjectId); + } + } // end of while + $y=$y-$mx+$height; + + // checking row split over pages + if ($options['splitRows']==0){ + if ( ( ($this->ezPageCount != $pageStart) || (isset($this->ez['columns']) && $this->ez['columns']['on']==1 && $columnStart != $this->ez['columns']['colNum'] )) && $secondTurn==0){ + // then we need to go back and try that again ! + $newPage=1; + $secondTurn=1; + $this->transaction('rewind'); + $row = $row_orig; + $y = $y_orig; + $y0 = $y0_orig; + $y1 = $y1_orig; + $ok=0; + + $dm = $this->ez['leftMargin']-$baseLeftMargin; + foreach($basePos as $k=>$v){ + $pos[$k]=$v+$dm; + } + $x0=$baseX0+$dm; + $x1=$baseX1+$dm; + + } else { + $this->transaction('commit'); + $ok=1; + } + } else { + $ok=1; // don't go round the loop if splitting rows is allowed + } + + } // end of while to check for row splitting + if ($abortTable){ + if ($ok==0){ + $this->transaction('abort'); + } + // only the outer transaction should be operational + $this->transaction('rewind'); + $this->ezNewPage(); + break; + } + + } // end of foreach ($data as $row) + + } // end of while ($abortTable) + + // table has been put on the page, the rows guarded as required, commit. + $this->transaction('commit'); + + $y2=$y+$decender; + if ($options['showLines']){ + if (!$options['showHeadings']){ + $y0=$y1; + } + $this->ezPrvtTableDrawLines($pos,$options['gap'],$x0,$x1,$y0,$y1,$y2,$options['lineCol'],$options['innerLineThickness'],$options['outerLineThickness'],$options['showLines']); + } + + // close the object for drawing the text on top + if ($options['shaded']){ + $this->closeObject(); + $this->restoreState(); + } + + $this->y=$y; + return $y; +} + +// ------------------------------------------------------------------------------ +function ezProcessText($text){ + // this function will intially be used to implement underlining support, but could be used for a range of other + // purposes + $search = array('<u>','<U>','</u>','</U>'); + $replace = array('<c:uline>','<c:uline>','</c:uline>','</c:uline>'); + return str_replace($search,$replace,$text); +} + +// ------------------------------------------------------------------------------ + +function ezText($text,$size=0,$options=array(),$test=0){ + // this will add a string of text to the document, starting at the current drawing + // position. + // it will wrap to keep within the margins, including optional offsets from the left + // and the right, if $size is not specified, then it will be the last one used, or + // the default value (12 I think). + // the text will go to the start of the next line when a return code "\n" is found. + // possible options are: + // 'left'=> number, gap to leave from the left margin + // 'right'=> number, gap to leave from the right margin + // 'aleft'=> number, absolute left position (overrides 'left') + // 'aright'=> number, absolute right position (overrides 'right') + // 'justification' => 'left','right','center','centre','full' + + // only set one of the next two items (leading overrides spacing) + // 'leading' => number, defines the total height taken by the line, independent of the font height. + // 'spacing' => a real number, though usually set to one of 1, 1.5, 2 (line spacing as used in word processing) + + // if $test is set then this should just check if the text is going to flow onto a new page or not, returning true or false + + // apply the filtering which will make the underlining function. + $text = $this->ezProcessText($text); + + $newPage=false; + $store_y = $this->y; + + if (is_array($options) && isset($options['aleft'])){ + $left=$options['aleft']; + } else { + $left = $this->ez['leftMargin'] + ((is_array($options) && isset($options['left']))?$options['left']:0); + } + if (is_array($options) && isset($options['aright'])){ + $right=$options['aright']; + } else { + $right = $this->ez['pageWidth'] - $this->ez['rightMargin'] - ((is_array($options) && isset($options['right']))?$options['right']:0); + } + if ($size<=0){ + $size = $this->ez['fontSize']; + } else { + $this->ez['fontSize']=$size; + } + + if (is_array($options) && isset($options['justification'])){ + $just = $options['justification']; + } else { + $just = 'left'; + } + + // modifications to give leading and spacing based on those given by Craig Heydenburg 1/1/02 + if (is_array($options) && isset($options['leading'])) { ## use leading instead of spacing + $height = $options['leading']; + } else if (is_array($options) && isset($options['spacing'])) { + $height = $this->getFontHeight($size) * $options['spacing']; + } else { + $height = $this->getFontHeight($size); + } + + + $lines = explode("\n",$text); + foreach ($lines as $line){ + $start=1; + while (strlen($line) || $start){ + $start=0; + $this->y=$this->y-$height; + if ($this->y < $this->ez['bottomMargin']){ + if ($test){ + $newPage=true; + } else { + $this->ezNewPage(); + // and then re-calc the left and right, in case they have changed due to columns + } + } + if (is_array($options) && isset($options['aleft'])){ + $left=$options['aleft']; + } else { + $left = $this->ez['leftMargin'] + ((is_array($options) && isset($options['left']))?$options['left']:0); + } + if (is_array($options) && isset($options['aright'])){ + $right=$options['aright']; + } else { + $right = $this->ez['pageWidth'] - $this->ez['rightMargin'] - ((is_array($options) && isset($options['right']))?$options['right']:0); + } + $line=$this->addTextWrap($left,$this->y,$right-$left,$size,$line,$just,0,$test); + } + } + + if ($test){ + $this->y=$store_y; + return $newPage; + } else { + return $this->y; + } +} + +// ------------------------------------------------------------------------------ + +function ezImage($image,$pad = 5,$width = 0,$resize = 'full',$just = 'center',$border = ''){ + //beta ezimage function + if (stristr($image,'://'))//copy to temp file + { + $fp = @fopen($image,"rb"); + while(!feof($fp)) + { + $cont.= fread($fp,1024); + } + fclose($fp); + $image = tempnam ("/tmp", "php-pdf"); + $fp2 = @fopen($image,"w"); + fwrite($fp2,$cont); + fclose($fp2); + $temp = true; + } + + if (!(file_exists($image))) return false; //return immediately if image file does not exist + $imageInfo = getimagesize($image); + switch ($imageInfo[2]){ + case 2: + $type = "jpeg"; + break; + case 3: + $type = "png"; + break; + default: + return false; //return if file is not jpg or png + } + if ($width == 0) $width = $imageInfo[0]; //set width + $ratio = $imageInfo[0]/$imageInfo[1]; + + //get maximum width of image + if (isset($this->ez['columns']) && $this->ez['columns']['on'] == 1) + { + $bigwidth = $this->ez['columns']['width'] - ($pad * 2); + } + else + { + $bigwidth = $this->ez['pageWidth'] - ($pad * 2); + } + //fix width if larger than maximum or if $resize=full + if ($resize == 'full' || $resize == 'width' || $width > $bigwidth) + { + $width = $bigwidth; + + } + + $height = ($width/$ratio); //set height + + //fix size if runs off page + if ($height > ($this->y - $this->ez['bottomMargin'] - ($pad * 2))) + { + if ($resize != 'full') + { + $this->ezNewPage(); + } + else + { + $height = ($this->y - $this->ez['bottomMargin'] - ($pad * 2)); //shrink height + $width = ($height*$ratio); //fix width + } + } + + //fix x-offset if image smaller than bigwidth + if ($width < $bigwidth) + { + //center if justification=center + if ($just == 'center') + { + $offset = ($bigwidth - $width) / 2; + } + //move to right if justification=right + if ($just == 'right') + { + $offset = ($bigwidth - $width); + } + //leave at left if justification=left + if ($just == 'left') + { + $offset = 0; + } + } + + + //call appropriate function + if ($type == "jpeg"){ + $this->addJpegFromFile($image,$this->ez['leftMargin'] + $pad + $offset, $this->y + $this->getFontHeight($this->ez['fontSize']) - $pad - $height,$width); + } + + if ($type == "png"){ + $this->addPngFromFile($image,$this->ez['leftMargin'] + $pad + $offset, $this->y + $this->getFontHeight($this->ez['fontSize']) - $pad - $height,$width); + } + //draw border + if ($border != '') + { + if (!(isset($border['color']))) + { + $border['color']['red'] = .5; + $border['color']['blue'] = .5; + $border['color']['green'] = .5; + } + if (!(isset($border['width']))) $border['width'] = 1; + if (!(isset($border['cap']))) $border['cap'] = 'round'; + if (!(isset($border['join']))) $border['join'] = 'round'; + + + $this->setStrokeColor($border['color']['red'],$border['color']['green'],$border['color']['blue']); + $this->setLineStyle($border['width'],$border['cap'],$border['join']); + $this->rectangle($this->ez['leftMargin'] + $pad + $offset, $this->y + $this->getFontHeight($this->ez['fontSize']) - $pad - $height,$width,$height); + + } + // move y below image + $this->y = $this->y - $pad - $height; + //remove tempfile for remote images + if ($temp == true) unlink($image); + +} +// ------------------------------------------------------------------------------ + +// note that templating code is still considered developmental - have not really figured +// out a good way of doing this yet. +function loadTemplate($templateFile){ + // this function will load the requested template ($file includes full or relative pathname) + // the code for the template will be modified to make it name safe, and then stored in + // an array for later use + // The id of the template will be returned for the user to operate on it later + if (!file_exists($templateFile)){ + return -1; + } + + $code = implode('',file($templateFile)); + if (!strlen($code)){ + return; + } + + $code = trim($code); + if (substr($code,0,5)=='<?php'){ + $code = substr($code,5); + } + if (substr($code,-2)=='?>'){ + $code = substr($code,0,strlen($code)-2); + } + if (isset($this->ez['numTemplates'])){ + $newNum = $this->ez['numTemplates']; + $this->ez['numTemplates']++; + } else { + $newNum=0; + $this->ez['numTemplates']=1; + $this->ez['templates']=array(); + } + + $this->ez['templates'][$newNum]['code']=$code; + + return $newNum; +} + +// ------------------------------------------------------------------------------ + +function execTemplate($id,$data=array(),$options=array()){ + // execute the given template on the current document. + if (!isset($this->ez['templates'][$id])){ + return; + } + eval($this->ez['templates'][$id]['code']); +} + +// ------------------------------------------------------------------------------ +function ilink($info){ + $this->alink($info,1); +} + +function alink($info,$internal=0){ + // a callback function to support the formation of clickable links within the document + $lineFactor=0.05; // the thickness of the line as a proportion of the height. also the drop of the line. + switch($info['status']){ + case 'start': + case 'sol': + // the beginning of the link + // this should contain the URl for the link as the 'p' entry, and will also contain the value of 'nCallback' + if (!isset($this->ez['links'])){ + $this->ez['links']=array(); + } + $i = $info['nCallback']; + $this->ez['links'][$i] = array('x'=>$info['x'],'y'=>$info['y'],'angle'=>$info['angle'],'decender'=>$info['decender'],'height'=>$info['height'],'url'=>$info['p']); + $this->saveState(); + $this->setColor(0,0,1); + $this->setStrokeColor(0,0,1); + $thick = $info['height']*$lineFactor; + $this->setLineStyle($thick); + break; + case 'end': + case 'eol': + // the end of the link + // assume that it is the most recent opening which has closed + $i = $info['nCallback']; + $start = $this->ez['links'][$i]; + // add underlining + $a = deg2rad((float)$start['angle']-90.0); + $drop = $start['height']*$lineFactor*1.5; + $dropx = cos($a)*$drop; + $dropy = -sin($a)*$drop; + $this->line($start['x']-$dropx,$start['y']-$dropy,$info['x']-$dropx,$info['y']-$dropy); + if ($internal) { + $this->addInternalLink($start['url'],$start['x'],$start['y']+$start['decender'],$info['x'],$start['y']+$start['decender']+$start['height']); + } else { + $this->addLink($start['url'],$start['x'],$start['y']+$start['decender'],$info['x'],$start['y']+$start['decender']+$start['height']); + } + $this->restoreState(); + break; + } +} + +// ------------------------------------------------------------------------------ + +function uline($info){ + // a callback function to support underlining + $lineFactor=0.05; // the thickness of the line as a proportion of the height. also the drop of the line. + switch($info['status']){ + case 'start': + case 'sol': + + // the beginning of the underline zone + if (!isset($this->ez['links'])){ + $this->ez['links']=array(); + } + $i = $info['nCallback']; + $this->ez['links'][$i] = array('x'=>$info['x'],'y'=>$info['y'],'angle'=>$info['angle'],'decender'=>$info['decender'],'height'=>$info['height']); + $this->saveState(); + $thick = $info['height']*$lineFactor; + $this->setLineStyle($thick); + break; + case 'end': + case 'eol': + // the end of the link + // assume that it is the most recent opening which has closed + $i = $info['nCallback']; + $start = $this->ez['links'][$i]; + // add underlining + $a = deg2rad((float)$start['angle']-90.0); + $drop = $start['height']*$lineFactor*1.5; + $dropx = cos($a)*$drop; + $dropy = -sin($a)*$drop; + $this->line($start['x']-$dropx,$start['y']-$dropy,$info['x']-$dropx,$info['y']-$dropy); + $this->restoreState(); + break; + } +} + +// ------------------------------------------------------------------------------ + +} +?>
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/class.pdf.php b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/class.pdf.php new file mode 100755 index 00000000..8b9f3c09 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/class.pdf.php @@ -0,0 +1,3078 @@ +<?php +/** + * @package Cpdf + */ +/** +* Cpdf +* +* +* A PHP class to provide the basic functionality to create a pdf document without +* any requirement for additional modules. +* +* Note that they companion class CezPdf can be used to extend this class and dramatically +* simplify the creation of documents. +* +* IMPORTANT NOTE +* there is no warranty, implied or otherwise with this software. +* +* LICENCE +* This code has been placed in the Public Domain for all to enjoy. +* +* @author Wayne Munro <pdf@ros.co.nz> +* @version 009 +* @package Cpdf +* @link http://www.ros.co.nz/pdf +*/ +class Cpdf { + +/** +* the current number of pdf objects in the document +*/ +var $numObj=0; +/** +* this array contains all of the pdf objects, ready for final assembly +*/ +var $objects = array(); +/** +* the objectId (number within the objects array) of the document catalog +*/ +var $catalogId; +/** +* array carrying information about the fonts that the system currently knows about +* used to ensure that a font is not loaded twice, among other things +*/ +var $fonts=array(); +/** +* a record of the current font +*/ +var $currentFont=''; +/** +* the current base font +*/ +var $currentBaseFont=''; +/** +* the number of the current font within the font array +*/ +var $currentFontNum=0; +/** +* +*/ +var $currentNode; +/** +* object number of the current page +*/ +var $currentPage; +/** +* object number of the currently active contents block +*/ +var $currentContents; +/** +* number of fonts within the system +*/ +var $numFonts=0; +/** +* current colour for fill operations, defaults to inactive value, all three components should be between 0 and 1 inclusive when active +*/ +var $currentColour=array('r'=>-1,'g'=>-1,'b'=>-1); +/** +* current colour for stroke operations (lines etc.) +*/ +var $currentStrokeColour=array('r'=>-1,'g'=>-1,'b'=>-1); +/** +* current style that lines are drawn in +*/ +var $currentLineStyle=''; +/** +* an array which is used to save the state of the document, mainly the colours and styles +* it is used to temporarily change to another state, the change back to what it was before +*/ +var $stateStack = array(); +/** +* number of elements within the state stack +*/ +var $nStateStack = 0; +/** +* number of page objects within the document +*/ +var $numPages=0; +/** +* object Id storage stack +*/ +var $stack=array(); +/** +* number of elements within the object Id storage stack +*/ +var $nStack=0; +/** +* an array which contains information about the objects which are not firmly attached to pages +* these have been added with the addObject function +*/ +var $looseObjects=array(); +/** +* array contains infomation about how the loose objects are to be added to the document +*/ +var $addLooseObjects=array(); +/** +* the objectId of the information object for the document +* this contains authorship, title etc. +*/ +var $infoObject=0; +/** +* number of images being tracked within the document +*/ +var $numImages=0; +/** +* an array containing options about the document +* it defaults to turning on the compression of the objects +*/ +var $options=array('compression'=>1); +/** +* the objectId of the first page of the document +*/ +var $firstPageId; +/** +* used to track the last used value of the inter-word spacing, this is so that it is known +* when the spacing is changed. +*/ +var $wordSpaceAdjust=0; +/** +* the object Id of the procset object +*/ +var $procsetObjectId; +/** +* store the information about the relationship between font families +* this used so that the code knows which font is the bold version of another font, etc. +* the value of this array is initialised in the constuctor function. +*/ +var $fontFamilies = array(); +/** +* track if the current font is bolded or italicised +*/ +var $currentTextState = ''; +/** +* messages are stored here during processing, these can be selected afterwards to give some useful debug information +*/ +var $messages=''; +/** +* the ancryption array for the document encryption is stored here +*/ +var $arc4=''; +/** +* the object Id of the encryption information +*/ +var $arc4_objnum=0; +/** +* the file identifier, used to uniquely identify a pdf document +*/ +var $fileIdentifier=''; +/** +* a flag to say if a document is to be encrypted or not +*/ +var $encrypted=0; +/** +* the ancryption key for the encryption of all the document content (structure is not encrypted) +*/ +var $encryptionKey=''; +/** +* array which forms a stack to keep track of nested callback functions +*/ +var $callback = array(); +/** +* the number of callback functions in the callback array +*/ +var $nCallback = 0; +/** +* store label->id pairs for named destinations, these will be used to replace internal links +* done this way so that destinations can be defined after the location that links to them +*/ +var $destinations = array(); +/** +* store the stack for the transaction commands, each item in here is a record of the values of all the +* variables within the class, so that the user can rollback at will (from each 'start' command) +* note that this includes the objects array, so these can be large. +*/ +var $checkpoint = ''; +/** +* class constructor +* this will start a new document +* @var array array of 4 numbers, defining the bottom left and upper right corner of the page. first two are normally zero. +*/ +function Cpdf ($pageSize=array(0,0,612,792)){ + $this->newDocument($pageSize); + + // also initialize the font families that are known about already + $this->setFontFamily('init'); +// $this->fileIdentifier = md5('xxxxxxxx'.time()); + +} + +/** +* Document object methods (internal use only) +* +* There is about one object method for each type of object in the pdf document +* Each function has the same call list ($id,$action,$options). +* $id = the object ID of the object, or what it is to be if it is being created +* $action = a string specifying the action to be performed, though ALL must support: +* 'new' - create the object with the id $id +* 'out' - produce the output for the pdf object +* $options = optional, a string or array containing the various parameters for the object +* +* These, in conjunction with the output function are the ONLY way for output to be produced +* within the pdf 'file'. +*/ + +/** +*destination object, used to specify the location for the user to jump to, presently on opening +*/ +function o_destination($id,$action,$options=''){ + if ($action!='new'){ + $o =& $this->objects[$id]; + } + switch($action){ + case 'new': + $this->objects[$id]=array('t'=>'destination','info'=>array()); + $tmp = ''; + switch ($options['type']){ + case 'XYZ': + case 'FitR': + $tmp = ' '.$options['p3'].$tmp; + case 'FitH': + case 'FitV': + case 'FitBH': + case 'FitBV': + $tmp = ' '.$options['p1'].' '.$options['p2'].$tmp; + case 'Fit': + case 'FitB': + $tmp = $options['type'].$tmp; + $this->objects[$id]['info']['string']=$tmp; + $this->objects[$id]['info']['page']=$options['page']; + } + break; + case 'out': + $tmp = $o['info']; + $res="\n".$id." 0 obj\n".'['.$tmp['page'].' 0 R /'.$tmp['string']."]\nendobj\n"; + return $res; + break; + } +} + +/** +* set the viewer preferences +*/ +function o_viewerPreferences($id,$action,$options=''){ + if ($action!='new'){ + $o =& $this->objects[$id]; + } + switch ($action){ + case 'new': + $this->objects[$id]=array('t'=>'viewerPreferences','info'=>array()); + break; + case 'add': + foreach($options as $k=>$v){ + switch ($k){ + case 'HideToolbar': + case 'HideMenubar': + case 'HideWindowUI': + case 'FitWindow': + case 'CenterWindow': + case 'NonFullScreenPageMode': + case 'Direction': + $o['info'][$k]=$v; + break; + } + } + break; + case 'out': + + $res="\n".$id." 0 obj\n".'<< '; + foreach($o['info'] as $k=>$v){ + $res.="\n/".$k.' '.$v; + } + $res.="\n>>\n"; + return $res; + break; + } +} + +/** +* define the document catalog, the overall controller for the document +*/ +function o_catalog($id,$action,$options=''){ + if ($action!='new'){ + $o =& $this->objects[$id]; + } + switch ($action){ + case 'new': + $this->objects[$id]=array('t'=>'catalog','info'=>array()); + $this->catalogId=$id; + break; + case 'outlines': + case 'pages': + case 'openHere': + $o['info'][$action]=$options; + break; + case 'viewerPreferences': + if (!isset($o['info']['viewerPreferences'])){ + $this->numObj++; + $this->o_viewerPreferences($this->numObj,'new'); + $o['info']['viewerPreferences']=$this->numObj; + } + $vp = $o['info']['viewerPreferences']; + $this->o_viewerPreferences($vp,'add',$options); + break; + case 'out': + $res="\n".$id." 0 obj\n".'<< /Type /Catalog'; + foreach($o['info'] as $k=>$v){ + switch($k){ + case 'outlines': + $res.="\n".'/Outlines '.$v.' 0 R'; + break; + case 'pages': + $res.="\n".'/Pages '.$v.' 0 R'; + break; + case 'viewerPreferences': + $res.="\n".'/ViewerPreferences '.$o['info']['viewerPreferences'].' 0 R'; + break; + case 'openHere': + $res.="\n".'/OpenAction '.$o['info']['openHere'].' 0 R'; + break; + } + } + $res.=" >>\nendobj"; + return $res; + break; + } +} + +/** +* object which is a parent to the pages in the document +*/ +function o_pages($id,$action,$options=''){ + if ($action!='new'){ + $o =& $this->objects[$id]; + } + switch ($action){ + case 'new': + $this->objects[$id]=array('t'=>'pages','info'=>array()); + $this->o_catalog($this->catalogId,'pages',$id); + break; + case 'page': + if (!is_array($options)){ + // then it will just be the id of the new page + $o['info']['pages'][]=$options; + } else { + // then it should be an array having 'id','rid','pos', where rid=the page to which this one will be placed relative + // and pos is either 'before' or 'after', saying where this page will fit. + if (isset($options['id']) && isset($options['rid']) && isset($options['pos'])){ + $i = array_search($options['rid'],$o['info']['pages']); + if (isset($o['info']['pages'][$i]) && $o['info']['pages'][$i]==$options['rid']){ + // then there is a match + // make a space + switch ($options['pos']){ + case 'before': + $k = $i; + break; + case 'after': + $k=$i+1; + break; + default: + $k=-1; + break; + } + if ($k>=0){ + for ($j=count($o['info']['pages'])-1;$j>=$k;$j--){ + $o['info']['pages'][$j+1]=$o['info']['pages'][$j]; + } + $o['info']['pages'][$k]=$options['id']; + } + } + } + } + break; + case 'procset': + $o['info']['procset']=$options; + break; + case 'mediaBox': + $o['info']['mediaBox']=$options; // which should be an array of 4 numbers + break; + case 'font': + $o['info']['fonts'][]=array('objNum'=>$options['objNum'],'fontNum'=>$options['fontNum']); + break; + case 'xObject': + $o['info']['xObjects'][]=array('objNum'=>$options['objNum'],'label'=>$options['label']); + break; + case 'out': + if (count($o['info']['pages'])){ + $res="\n".$id." 0 obj\n<< /Type /Pages\n/Kids ["; + foreach($o['info']['pages'] as $k=>$v){ + $res.=$v." 0 R\n"; + } + $res.="]\n/Count ".count($this->objects[$id]['info']['pages']); + if ((isset($o['info']['fonts']) && count($o['info']['fonts'])) || isset($o['info']['procset'])){ + $res.="\n/Resources <<"; + if (isset($o['info']['procset'])){ + $res.="\n/ProcSet ".$o['info']['procset']." 0 R"; + } + if (isset($o['info']['fonts']) && count($o['info']['fonts'])){ + $res.="\n/Font << "; + foreach($o['info']['fonts'] as $finfo){ + $res.="\n/F".$finfo['fontNum']." ".$finfo['objNum']." 0 R"; + } + $res.=" >>"; + } + if (isset($o['info']['xObjects']) && count($o['info']['xObjects'])){ + $res.="\n/XObject << "; + foreach($o['info']['xObjects'] as $finfo){ + $res.="\n/".$finfo['label']." ".$finfo['objNum']." 0 R"; + } + $res.=" >>"; + } + $res.="\n>>"; + if (isset($o['info']['mediaBox'])){ + $tmp=$o['info']['mediaBox']; + $res.="\n/MediaBox [".sprintf('%.3f',$tmp[0]).' '.sprintf('%.3f',$tmp[1]).' '.sprintf('%.3f',$tmp[2]).' '.sprintf('%.3f',$tmp[3]).']'; + } + } + $res.="\n >>\nendobj"; + } else { + $res="\n".$id." 0 obj\n<< /Type /Pages\n/Count 0\n>>\nendobj"; + } + return $res; + break; + } +} + +/** +* define the outlines in the doc, empty for now +*/ +function o_outlines($id,$action,$options=''){ + if ($action!='new'){ + $o =& $this->objects[$id]; + } + switch ($action){ + case 'new': + $this->objects[$id]=array('t'=>'outlines','info'=>array('outlines'=>array())); + $this->o_catalog($this->catalogId,'outlines',$id); + break; + case 'outline': + $o['info']['outlines'][]=$options; + break; + case 'out': + if (count($o['info']['outlines'])){ + $res="\n".$id." 0 obj\n<< /Type /Outlines /Kids ["; + foreach($o['info']['outlines'] as $k=>$v){ + $res.=$v." 0 R "; + } + $res.="] /Count ".count($o['info']['outlines'])." >>\nendobj"; + } else { + $res="\n".$id." 0 obj\n<< /Type /Outlines /Count 0 >>\nendobj"; + } + return $res; + break; + } +} + +/** +* an object to hold the font description +*/ +function o_font($id,$action,$options=''){ + if ($action!='new'){ + $o =& $this->objects[$id]; + } + switch ($action){ + case 'new': + $this->objects[$id]=array('t'=>'font','info'=>array('name'=>$options['name'],'SubType'=>'Type1')); + $fontNum=$this->numFonts; + $this->objects[$id]['info']['fontNum']=$fontNum; + // deal with the encoding and the differences + if (isset($options['differences'])){ + // then we'll need an encoding dictionary + $this->numObj++; + $this->o_fontEncoding($this->numObj,'new',$options); + $this->objects[$id]['info']['encodingDictionary']=$this->numObj; + } else if (isset($options['encoding'])){ + // we can specify encoding here + switch($options['encoding']){ + case 'WinAnsiEncoding': + case 'MacRomanEncoding': + case 'MacExpertEncoding': + $this->objects[$id]['info']['encoding']=$options['encoding']; + break; + case 'none': + break; + default: + $this->objects[$id]['info']['encoding']='WinAnsiEncoding'; + break; + } + } else { + $this->objects[$id]['info']['encoding']='WinAnsiEncoding'; + } + // also tell the pages node about the new font + $this->o_pages($this->currentNode,'font',array('fontNum'=>$fontNum,'objNum'=>$id)); + break; + case 'add': + foreach ($options as $k=>$v){ + switch ($k){ + case 'BaseFont': + $o['info']['name'] = $v; + break; + case 'FirstChar': + case 'LastChar': + case 'Widths': + case 'FontDescriptor': + case 'SubType': + $this->addMessage('o_font '.$k." : ".$v); + $o['info'][$k] = $v; + break; + } + } + break; + case 'out': + $res="\n".$id." 0 obj\n<< /Type /Font\n/Subtype /".$o['info']['SubType']."\n"; + $res.="/Name /F".$o['info']['fontNum']."\n"; + $res.="/BaseFont /".$o['info']['name']."\n"; + if (isset($o['info']['encodingDictionary'])){ + // then place a reference to the dictionary + $res.="/Encoding ".$o['info']['encodingDictionary']." 0 R\n"; + } else if (isset($o['info']['encoding'])){ + // use the specified encoding + $res.="/Encoding /".$o['info']['encoding']."\n"; + } + if (isset($o['info']['FirstChar'])){ + $res.="/FirstChar ".$o['info']['FirstChar']."\n"; + } + if (isset($o['info']['LastChar'])){ + $res.="/LastChar ".$o['info']['LastChar']."\n"; + } + if (isset($o['info']['Widths'])){ + $res.="/Widths ".$o['info']['Widths']." 0 R\n"; + } + if (isset($o['info']['FontDescriptor'])){ + $res.="/FontDescriptor ".$o['info']['FontDescriptor']." 0 R\n"; + } + $res.=">>\nendobj"; + return $res; + break; + } +} + +/** +* a font descriptor, needed for including additional fonts +*/ +function o_fontDescriptor($id,$action,$options=''){ + if ($action!='new'){ + $o =& $this->objects[$id]; + } + switch ($action){ + case 'new': + $this->objects[$id]=array('t'=>'fontDescriptor','info'=>$options); + break; + case 'out': + $res="\n".$id." 0 obj\n<< /Type /FontDescriptor\n"; + foreach ($o['info'] as $label => $value){ + switch ($label){ + case 'Ascent': + case 'CapHeight': + case 'Descent': + case 'Flags': + case 'ItalicAngle': + case 'StemV': + case 'AvgWidth': + case 'Leading': + case 'MaxWidth': + case 'MissingWidth': + case 'StemH': + case 'XHeight': + case 'CharSet': + if (strlen($value)){ + $res.='/'.$label.' '.$value."\n"; + } + break; + case 'FontFile': + case 'FontFile2': + case 'FontFile3': + $res.='/'.$label.' '.$value." 0 R\n"; + break; + case 'FontBBox': + $res.='/'.$label.' ['.$value[0].' '.$value[1].' '.$value[2].' '.$value[3]."]\n"; + break; + case 'FontName': + $res.='/'.$label.' /'.$value."\n"; + break; + } + } + $res.=">>\nendobj"; + return $res; + break; + } +} + +/** +* the font encoding +*/ +function o_fontEncoding($id,$action,$options=''){ + if ($action!='new'){ + $o =& $this->objects[$id]; + } + switch ($action){ + case 'new': + // the options array should contain 'differences' and maybe 'encoding' + $this->objects[$id]=array('t'=>'fontEncoding','info'=>$options); + break; + case 'out': + $res="\n".$id." 0 obj\n<< /Type /Encoding\n"; + if (!isset($o['info']['encoding'])){ + $o['info']['encoding']='WinAnsiEncoding'; + } + if ($o['info']['encoding']!='none'){ + $res.="/BaseEncoding /".$o['info']['encoding']."\n"; + } + $res.="/Differences \n["; + $onum=-100; + foreach($o['info']['differences'] as $num=>$label){ + if ($num!=$onum+1){ + // we cannot make use of consecutive numbering + $res.= "\n".$num." /".$label; + } else { + $res.= " /".$label; + } + $onum=$num; + } + $res.="\n]\n>>\nendobj"; + return $res; + break; + } +} + +/** +* the document procset, solves some problems with printing to old PS printers +*/ +function o_procset($id,$action,$options=''){ + if ($action!='new'){ + $o =& $this->objects[$id]; + } + switch ($action){ + case 'new': + $this->objects[$id]=array('t'=>'procset','info'=>array('PDF'=>1,'Text'=>1)); + $this->o_pages($this->currentNode,'procset',$id); + $this->procsetObjectId=$id; + break; + case 'add': + // this is to add new items to the procset list, despite the fact that this is considered + // obselete, the items are required for printing to some postscript printers + switch ($options) { + case 'ImageB': + case 'ImageC': + case 'ImageI': + $o['info'][$options]=1; + break; + } + break; + case 'out': + $res="\n".$id." 0 obj\n["; + foreach ($o['info'] as $label=>$val){ + $res.='/'.$label.' '; + } + $res.="]\nendobj"; + return $res; + break; + } +} + +/** +* define the document information +*/ +function o_info($id,$action,$options=''){ + if ($action!='new'){ + $o =& $this->objects[$id]; + } + switch ($action){ + case 'new': + $this->infoObject=$id; + $date='D:'.date('Ymd'); + $this->objects[$id]=array('t'=>'info','info'=>array('Creator'=>'R and OS php pdf writer, http://www.ros.co.nz','CreationDate'=>$date)); + break; + case 'Title': + case 'Author': + case 'Subject': + case 'Keywords': + case 'Creator': + case 'Producer': + case 'CreationDate': + case 'ModDate': + case 'Trapped': + $o['info'][$action]=$options; + break; + case 'out': + if ($this->encrypted){ + $this->encryptInit($id); + } + $res="\n".$id." 0 obj\n<<\n"; + foreach ($o['info'] as $k=>$v){ + $res.='/'.$k.' ('; + if ($this->encrypted){ + $res.=$this->filterText($this->ARC4($v)); + } else { + $res.=$this->filterText($v); + } + $res.=")\n"; + } + $res.=">>\nendobj"; + return $res; + break; + } +} + +/** +* an action object, used to link to URLS initially +*/ +function o_action($id,$action,$options=''){ + if ($action!='new'){ + $o =& $this->objects[$id]; + } + switch ($action){ + case 'new': + if (is_array($options)){ + $this->objects[$id]=array('t'=>'action','info'=>$options,'type'=>$options['type']); + } else { + // then assume a URI action + $this->objects[$id]=array('t'=>'action','info'=>$options,'type'=>'URI'); + } + break; + case 'out': + if ($this->encrypted){ + $this->encryptInit($id); + } + $res="\n".$id." 0 obj\n<< /Type /Action"; + switch($o['type']){ + case 'ilink': + // there will be an 'label' setting, this is the name of the destination + $res.="\n/S /GoTo\n/D ".$this->destinations[(string)$o['info']['label']]." 0 R"; + break; + case 'URI': + $res.="\n/S /URI\n/URI ("; + if ($this->encrypted){ + $res.=$this->filterText($this->ARC4($o['info'])); + } else { + $res.=$this->filterText($o['info']); + } + $res.=")"; + break; + } + $res.="\n>>\nendobj"; + return $res; + break; + } +} + +/** +* an annotation object, this will add an annotation to the current page. +* initially will support just link annotations +*/ +function o_annotation($id,$action,$options=''){ + if ($action!='new'){ + $o =& $this->objects[$id]; + } + switch ($action){ + case 'new': + // add the annotation to the current page + $pageId = $this->currentPage; + $this->o_page($pageId,'annot',$id); + // and add the action object which is going to be required + switch($options['type']){ + case 'link': + $this->objects[$id]=array('t'=>'annotation','info'=>$options); + $this->numObj++; + $this->o_action($this->numObj,'new',$options['url']); + $this->objects[$id]['info']['actionId']=$this->numObj; + break; + case 'ilink': + // this is to a named internal link + $label = $options['label']; + $this->objects[$id]=array('t'=>'annotation','info'=>$options); + $this->numObj++; + $this->o_action($this->numObj,'new',array('type'=>'ilink','label'=>$label)); + $this->objects[$id]['info']['actionId']=$this->numObj; + break; + } + break; + case 'out': + $res="\n".$id." 0 obj\n<< /Type /Annot"; + switch($o['info']['type']){ + case 'link': + case 'ilink': + $res.= "\n/Subtype /Link"; + break; + } + $res.="\n/A ".$o['info']['actionId']." 0 R"; + $res.="\n/Border [0 0 0]"; + $res.="\n/H /I"; + $res.="\n/Rect [ "; + foreach($o['info']['rect'] as $v){ + $res.= sprintf("%.4f ",$v); + } + $res.="]"; + $res.="\n>>\nendobj"; + return $res; + break; + } +} + +/** +* a page object, it also creates a contents object to hold its contents +*/ +function o_page($id,$action,$options=''){ + if ($action!='new'){ + $o =& $this->objects[$id]; + } + switch ($action){ + case 'new': + $this->numPages++; + $this->objects[$id]=array('t'=>'page','info'=>array('parent'=>$this->currentNode,'pageNum'=>$this->numPages)); + if (is_array($options)){ + // then this must be a page insertion, array shoudl contain 'rid','pos'=[before|after] + $options['id']=$id; + $this->o_pages($this->currentNode,'page',$options); + } else { + $this->o_pages($this->currentNode,'page',$id); + } + $this->currentPage=$id; + //make a contents object to go with this page + $this->numObj++; + $this->o_contents($this->numObj,'new',$id); + $this->currentContents=$this->numObj; + $this->objects[$id]['info']['contents']=array(); + $this->objects[$id]['info']['contents'][]=$this->numObj; + $match = ($this->numPages%2 ? 'odd' : 'even'); + foreach($this->addLooseObjects as $oId=>$target){ + if ($target=='all' || $match==$target){ + $this->objects[$id]['info']['contents'][]=$oId; + } + } + break; + case 'content': + $o['info']['contents'][]=$options; + break; + case 'annot': + // add an annotation to this page + if (!isset($o['info']['annot'])){ + $o['info']['annot']=array(); + } + // $options should contain the id of the annotation dictionary + $o['info']['annot'][]=$options; + break; + case 'out': + $res="\n".$id." 0 obj\n<< /Type /Page"; + $res.="\n/Parent ".$o['info']['parent']." 0 R"; + if (isset($o['info']['annot'])){ + $res.="\n/Annots ["; + foreach($o['info']['annot'] as $aId){ + $res.=" ".$aId." 0 R"; + } + $res.=" ]"; + } + $count = count($o['info']['contents']); + if ($count==1){ + $res.="\n/Contents ".$o['info']['contents'][0]." 0 R"; + } else if ($count>1){ + $res.="\n/Contents [\n"; + foreach ($o['info']['contents'] as $cId){ + $res.=$cId." 0 R\n"; + } + $res.="]"; + } + $res.="\n>>\nendobj"; + return $res; + break; + } +} + +/** +* the contents objects hold all of the content which appears on pages +*/ +function o_contents($id,$action,$options=''){ + if ($action!='new'){ + $o =& $this->objects[$id]; + } + switch ($action){ + case 'new': + $this->objects[$id]=array('t'=>'contents','c'=>'','info'=>array()); + if (strlen($options) && intval($options)){ + // then this contents is the primary for a page + $this->objects[$id]['onPage']=$options; + } else if ($options=='raw'){ + // then this page contains some other type of system object + $this->objects[$id]['raw']=1; + } + break; + case 'add': + // add more options to the decleration + foreach ($options as $k=>$v){ + $o['info'][$k]=$v; + } + case 'out': + $tmp=$o['c']; + $res= "\n".$id." 0 obj\n"; + if (isset($this->objects[$id]['raw'])){ + $res.=$tmp; + } else { + $res.= "<<"; + if (function_exists('gzcompress') && $this->options['compression']){ + // then implement ZLIB based compression on this content stream + $res.=" /Filter /FlateDecode"; + $tmp = gzcompress($tmp); + } + if ($this->encrypted){ + $this->encryptInit($id); + $tmp = $this->ARC4($tmp); + } + foreach($o['info'] as $k=>$v){ + $res .= "\n/".$k.' '.$v; + } + $res.="\n/Length ".strlen($tmp)." >>\nstream\n".$tmp."\nendstream"; + } + $res.="\nendobj\n"; + return $res; + break; + } +} + +/** +* an image object, will be an XObject in the document, includes description and data +*/ +function o_image($id,$action,$options=''){ + if ($action!='new'){ + $o =& $this->objects[$id]; + } + switch($action){ + case 'new': + // make the new object + $this->objects[$id]=array('t'=>'image','data'=>$options['data'],'info'=>array()); + $this->objects[$id]['info']['Type']='/XObject'; + $this->objects[$id]['info']['Subtype']='/Image'; + $this->objects[$id]['info']['Width']=$options['iw']; + $this->objects[$id]['info']['Height']=$options['ih']; + if (!isset($options['type']) || $options['type']=='jpg'){ + if (!isset($options['channels'])){ + $options['channels']=3; + } + switch($options['channels']){ + case 1: + $this->objects[$id]['info']['ColorSpace']='/DeviceGray'; + break; + default: + $this->objects[$id]['info']['ColorSpace']='/DeviceRGB'; + break; + } + $this->objects[$id]['info']['Filter']='/DCTDecode'; + $this->objects[$id]['info']['BitsPerComponent']=8; + } else if ($options['type']=='png'){ + $this->objects[$id]['info']['Filter']='/FlateDecode'; + $this->objects[$id]['info']['DecodeParms']='<< /Predictor 15 /Colors '.$options['ncolor'].' /Columns '.$options['iw'].' /BitsPerComponent '.$options['bitsPerComponent'].'>>'; + if (strlen($options['pdata'])){ + $tmp = ' [ /Indexed /DeviceRGB '.(strlen($options['pdata'])/3-1).' '; + $this->numObj++; + $this->o_contents($this->numObj,'new'); + $this->objects[$this->numObj]['c']=$options['pdata']; + $tmp.=$this->numObj.' 0 R'; + $tmp .=' ]'; + $this->objects[$id]['info']['ColorSpace'] = $tmp; + if (isset($options['transparency'])){ + switch($options['transparency']['type']){ + case 'indexed': + $tmp=' [ '.$options['transparency']['data'].' '.$options['transparency']['data'].'] '; + $this->objects[$id]['info']['Mask'] = $tmp; + break; + } + } + } else { + $this->objects[$id]['info']['ColorSpace']='/'.$options['color']; + } + $this->objects[$id]['info']['BitsPerComponent']=$options['bitsPerComponent']; + } + // assign it a place in the named resource dictionary as an external object, according to + // the label passed in with it. + $this->o_pages($this->currentNode,'xObject',array('label'=>$options['label'],'objNum'=>$id)); + // also make sure that we have the right procset object for it. + $this->o_procset($this->procsetObjectId,'add','ImageC'); + break; + case 'out': + $tmp=$o['data']; + $res= "\n".$id." 0 obj\n<<"; + foreach($o['info'] as $k=>$v){ + $res.="\n/".$k.' '.$v; + } + if ($this->encrypted){ + $this->encryptInit($id); + $tmp = $this->ARC4($tmp); + } + $res.="\n/Length ".strlen($tmp)." >>\nstream\n".$tmp."\nendstream\nendobj\n"; + return $res; + break; + } +} + +/** +* encryption object. +*/ +function o_encryption($id,$action,$options=''){ + if ($action!='new'){ + $o =& $this->objects[$id]; + } + switch($action){ + case 'new': + // make the new object + $this->objects[$id]=array('t'=>'encryption','info'=>$options); + $this->arc4_objnum=$id; + // figure out the additional paramaters required + $pad = chr(0x28).chr(0xBF).chr(0x4E).chr(0x5E).chr(0x4E).chr(0x75).chr(0x8A).chr(0x41).chr(0x64).chr(0x00).chr(0x4E).chr(0x56).chr(0xFF).chr(0xFA).chr(0x01).chr(0x08).chr(0x2E).chr(0x2E).chr(0x00).chr(0xB6).chr(0xD0).chr(0x68).chr(0x3E).chr(0x80).chr(0x2F).chr(0x0C).chr(0xA9).chr(0xFE).chr(0x64).chr(0x53).chr(0x69).chr(0x7A); + $len = strlen($options['owner']); + if ($len>32){ + $owner = substr($options['owner'],0,32); + } else if ($len<32){ + $owner = $options['owner'].substr($pad,0,32-$len); + } else { + $owner = $options['owner']; + } + $len = strlen($options['user']); + if ($len>32){ + $user = substr($options['user'],0,32); + } else if ($len<32){ + $user = $options['user'].substr($pad,0,32-$len); + } else { + $user = $options['user']; + } + $tmp = $this->md5_16($owner); + $okey = substr($tmp,0,5); + $this->ARC4_init($okey); + $ovalue=$this->ARC4($user); + $this->objects[$id]['info']['O']=$ovalue; + // now make the u value, phew. + $tmp = $this->md5_16($user.$ovalue.chr($options['p']).chr(255).chr(255).chr(255).$this->fileIdentifier); + $ukey = substr($tmp,0,5); + + $this->ARC4_init($ukey); + $this->encryptionKey = $ukey; + $this->encrypted=1; + $uvalue=$this->ARC4($pad); + + $this->objects[$id]['info']['U']=$uvalue; + $this->encryptionKey=$ukey; + + // initialize the arc4 array + break; + case 'out': + $res= "\n".$id." 0 obj\n<<"; + $res.="\n/Filter /Standard"; + $res.="\n/V 1"; + $res.="\n/R 2"; + $res.="\n/O (".$this->filterText($o['info']['O']).')'; + $res.="\n/U (".$this->filterText($o['info']['U']).')'; + // and the p-value needs to be converted to account for the twos-complement approach + $o['info']['p'] = (($o['info']['p']^255)+1)*-1; + $res.="\n/P ".($o['info']['p']); + $res.="\n>>\nendobj\n"; + + return $res; + break; + } +} + +/** +* ARC4 functions +* A series of function to implement ARC4 encoding in PHP +*/ + +/** +* calculate the 16 byte version of the 128 bit md5 digest of the string +*/ +function md5_16($string){ + $tmp = md5($string); + $out=''; + for ($i=0;$i<=30;$i=$i+2){ + $out.=chr(hexdec(substr($tmp,$i,2))); + } + return $out; +} + +/** +* initialize the encryption for processing a particular object +*/ +function encryptInit($id){ + $tmp = $this->encryptionKey; + $hex = dechex($id); + if (strlen($hex)<6){ + $hex = substr('000000',0,6-strlen($hex)).$hex; + } + $tmp.= chr(hexdec(substr($hex,4,2))).chr(hexdec(substr($hex,2,2))).chr(hexdec(substr($hex,0,2))).chr(0).chr(0); + $key = $this->md5_16($tmp); + $this->ARC4_init(substr($key,0,10)); +} + +/** +* initialize the ARC4 encryption +*/ +function ARC4_init($key=''){ + $this->arc4 = ''; + // setup the control array + if (strlen($key)==0){ + return; + } + $k = ''; + while(strlen($k)<256){ + $k.=$key; + } + $k=substr($k,0,256); + for ($i=0;$i<256;$i++){ + $this->arc4 .= chr($i); + } + $j=0; + for ($i=0;$i<256;$i++){ + $t = $this->arc4[$i]; + $j = ($j + ord($t) + ord($k[$i]))%256; + $this->arc4[$i]=$this->arc4[$j]; + $this->arc4[$j]=$t; + } +} + +/** +* ARC4 encrypt a text string +*/ +function ARC4($text){ + $len=strlen($text); + $a=0; + $b=0; + $c = $this->arc4; + $out=''; + for ($i=0;$i<$len;$i++){ + $a = ($a+1)%256; + $t= $c[$a]; + $b = ($b+ord($t))%256; + $c[$a]=$c[$b]; + $c[$b]=$t; + $k = ord($c[(ord($c[$a])+ord($c[$b]))%256]); + $out.=chr(ord($text[$i]) ^ $k); + } + + return $out; +} + +/** +* functions which can be called to adjust or add to the document +*/ + +/** +* add a link in the document to an external URL +*/ +function addLink($url,$x0,$y0,$x1,$y1){ + $this->numObj++; + $info = array('type'=>'link','url'=>$url,'rect'=>array($x0,$y0,$x1,$y1)); + $this->o_annotation($this->numObj,'new',$info); +} + +/** +* add a link in the document to an internal destination (ie. within the document) +*/ +function addInternalLink($label,$x0,$y0,$x1,$y1){ + $this->numObj++; + $info = array('type'=>'ilink','label'=>$label,'rect'=>array($x0,$y0,$x1,$y1)); + $this->o_annotation($this->numObj,'new',$info); +} + +/** +* set the encryption of the document +* can be used to turn it on and/or set the passwords which it will have. +* also the functions that the user will have are set here, such as print, modify, add +*/ +function setEncryption($userPass='',$ownerPass='',$pc=array()){ + $p=bindec(11000000); + + $options = array( + 'print'=>4 + ,'modify'=>8 + ,'copy'=>16 + ,'add'=>32 + ); + foreach($pc as $k=>$v){ + if ($v && isset($options[$k])){ + $p+=$options[$k]; + } else if (isset($options[$v])){ + $p+=$options[$v]; + } + } + // implement encryption on the document + if ($this->arc4_objnum == 0){ + // then the block does not exist already, add it. + $this->numObj++; + if (strlen($ownerPass)==0){ + $ownerPass=$userPass; + } + $this->o_encryption($this->numObj,'new',array('user'=>$userPass,'owner'=>$ownerPass,'p'=>$p)); + } +} + +/** +* should be used for internal checks, not implemented as yet +*/ +function checkAllHere(){ +} + +/** +* return the pdf stream as a string returned from the function +*/ +function output($debug=0){ + + if ($debug){ + // turn compression off + $this->options['compression']=0; + } + + if ($this->arc4_objnum){ + $this->ARC4_init($this->encryptionKey); + } + + $this->checkAllHere(); + + $xref=array(); + $content="%PDF-1.3\n%âãÏÓ\n"; +// $content="%PDF-1.3\n"; + $pos=strlen($content); + foreach($this->objects as $k=>$v){ + $tmp='o_'.$v['t']; + $cont=$this->$tmp($k,'out'); + $content.=$cont; + $xref[]=$pos; + $pos+=strlen($cont); + } + $content.="\nxref\n0 ".(count($xref)+1)."\n0000000000 65535 f \n"; + foreach($xref as $p){ + $content.=substr('0000000000',0,10-strlen($p)).$p." 00000 n \n"; + } + $content.="\ntrailer\n << /Size ".(count($xref)+1)."\n /Root 1 0 R\n /Info ".$this->infoObject." 0 R\n"; + // if encryption has been applied to this document then add the marker for this dictionary + if ($this->arc4_objnum > 0){ + $content .= "/Encrypt ".$this->arc4_objnum." 0 R\n"; + } + if (strlen($this->fileIdentifier)){ + $content .= "/ID[<".$this->fileIdentifier."><".$this->fileIdentifier.">]\n"; + } + $content .= " >>\nstartxref\n".$pos."\n%%EOF\n"; + return $content; +} + +/** +* intialize a new document +* if this is called on an existing document results may be unpredictable, but the existing document would be lost at minimum +* this function is called automatically by the constructor function +* +* @access private +*/ +function newDocument($pageSize=array(0,0,612,792)){ + $this->numObj=0; + $this->objects = array(); + + $this->numObj++; + $this->o_catalog($this->numObj,'new'); + + $this->numObj++; + $this->o_outlines($this->numObj,'new'); + + $this->numObj++; + $this->o_pages($this->numObj,'new'); + + $this->o_pages($this->numObj,'mediaBox',$pageSize); + $this->currentNode = 3; + + $this->numObj++; + $this->o_procset($this->numObj,'new'); + + $this->numObj++; + $this->o_info($this->numObj,'new'); + + $this->numObj++; + $this->o_page($this->numObj,'new'); + + // need to store the first page id as there is no way to get it to the user during + // startup + $this->firstPageId = $this->currentContents; +} + +/** +* open the font file and return a php structure containing it. +* first check if this one has been done before and saved in a form more suited to php +* note that if a php serialized version does not exist it will try and make one, but will +* require write access to the directory to do it... it is MUCH faster to have these serialized +* files. +* +* @access private +*/ +function openFont($font){ + // assume that $font contains both the path and perhaps the extension to the file, split them + $pos=strrpos($font,'/'); + if ($pos===false){ + $dir = './'; + $name = $font; + } else { + $dir=substr($font,0,$pos+1); + $name=substr($font,$pos+1); + } + + if (substr($name,-4)=='.afm'){ + $name=substr($name,0,strlen($name)-4); + } + $this->addMessage('openFont: '.$font.' - '.$name); + if (file_exists($dir.'php_'.$name.'.afm')){ + $this->addMessage('openFont: php file exists '.$dir.'php_'.$name.'.afm'); + $tmp = file($dir.'php_'.$name.'.afm'); + $this->fonts[$font]=unserialize($tmp[0]); + if (!isset($this->fonts[$font]['_version_']) || $this->fonts[$font]['_version_']<1){ + // if the font file is old, then clear it out and prepare for re-creation + $this->addMessage('openFont: clear out, make way for new version.'); + unset($this->fonts[$font]); + } + } + if (!isset($this->fonts[$font]) && file_exists($dir.$name.'.afm')){ + // then rebuild the php_<font>.afm file from the <font>.afm file + $this->addMessage('openFont: build php file from '.$dir.$name.'.afm'); + $data = array(); + $file = file($dir.$name.'.afm'); + foreach ($file as $rowA){ + $row=trim($rowA); + $pos=strpos($row,' '); + if ($pos){ + // then there must be some keyword + $key = substr($row,0,$pos); + switch ($key){ + case 'FontName': + case 'FullName': + case 'FamilyName': + case 'Weight': + case 'ItalicAngle': + case 'IsFixedPitch': + case 'CharacterSet': + case 'UnderlinePosition': + case 'UnderlineThickness': + case 'Version': + case 'EncodingScheme': + case 'CapHeight': + case 'XHeight': + case 'Ascender': + case 'Descender': + case 'StdHW': + case 'StdVW': + case 'StartCharMetrics': + $data[$key]=trim(substr($row,$pos)); + break; + case 'FontBBox': + $data[$key]=explode(' ',trim(substr($row,$pos))); + break; + case 'C': + //C 39 ; WX 222 ; N quoteright ; B 53 463 157 718 ; + $bits=explode(';',trim($row)); + $dtmp=array(); + foreach($bits as $bit){ + $bits2 = explode(' ',trim($bit)); + if (strlen($bits2[0])){ + if (count($bits2)>2){ + $dtmp[$bits2[0]]=array(); + for ($i=1;$i<count($bits2);$i++){ + $dtmp[$bits2[0]][]=$bits2[$i]; + } + } else if (count($bits2)==2){ + $dtmp[$bits2[0]]=$bits2[1]; + } + } + } + if ($dtmp['C']>=0){ + $data['C'][$dtmp['C']]=$dtmp; + $data['C'][$dtmp['N']]=$dtmp; + } else { + $data['C'][$dtmp['N']]=$dtmp; + } + break; + case 'KPX': + //KPX Adieresis yacute -40 + $bits=explode(' ',trim($row)); + $data['KPX'][$bits[1]][$bits[2]]=$bits[3]; + break; + } + } + } + $data['_version_']=1; + $this->fonts[$font]=$data; + $fp = fopen($dir.'php_'.$name.'.afm','w'); + fwrite($fp,serialize($data)); + fclose($fp); + } else if (!isset($this->fonts[$font])){ + $this->addMessage('openFont: no font file found'); +// echo 'Font not Found '.$font; + } +} + +/** +* if the font is not loaded then load it and make the required object +* else just make it the current font +* the encoding array can contain 'encoding'=> 'none','WinAnsiEncoding','MacRomanEncoding' or 'MacExpertEncoding' +* note that encoding='none' will need to be used for symbolic fonts +* and 'differences' => an array of mappings between numbers 0->255 and character names. +* +*/ +function selectFont($fontName,$encoding='',$set=1){ + if (!isset($this->fonts[$fontName])){ + // load the file + $this->openFont($fontName); + if (isset($this->fonts[$fontName])){ + $this->numObj++; + $this->numFonts++; + $pos=strrpos($fontName,'/'); +// $dir=substr($fontName,0,$pos+1); + $name=substr($fontName,$pos+1); + if (substr($name,-4)=='.afm'){ + $name=substr($name,0,strlen($name)-4); + } + $options=array('name'=>$name); + if (is_array($encoding)){ + // then encoding and differences might be set + if (isset($encoding['encoding'])){ + $options['encoding']=$encoding['encoding']; + } + if (isset($encoding['differences'])){ + $options['differences']=$encoding['differences']; + } + } else if (strlen($encoding)){ + // then perhaps only the encoding has been set + $options['encoding']=$encoding; + } + $fontObj = $this->numObj; + $this->o_font($this->numObj,'new',$options); + $this->fonts[$fontName]['fontNum']=$this->numFonts; + // if this is a '.afm' font, and there is a '.pfa' file to go with it ( as there + // should be for all non-basic fonts), then load it into an object and put the + // references into the font object + $basefile = substr($fontName,0,strlen($fontName)-4); + if (file_exists($basefile.'.pfb')){ + $fbtype = 'pfb'; + } else if (file_exists($basefile.'.ttf')){ + $fbtype = 'ttf'; + } else { + $fbtype=''; + } + $fbfile = $basefile.'.'.$fbtype; + +// $pfbfile = substr($fontName,0,strlen($fontName)-4).'.pfb'; +// $ttffile = substr($fontName,0,strlen($fontName)-4).'.ttf'; + $this->addMessage('selectFont: checking for - '.$fbfile); + if (substr($fontName,-4)=='.afm' && strlen($fbtype) ){ + $adobeFontName = $this->fonts[$fontName]['FontName']; +// $fontObj = $this->numObj; + $this->addMessage('selectFont: adding font file - '.$fbfile.' - '.$adobeFontName); + // find the array of fond widths, and put that into an object. + $firstChar = -1; + $lastChar = 0; + $widths = array(); + foreach ($this->fonts[$fontName]['C'] as $num=>$d){ + if (intval($num)>0 || $num=='0'){ + if ($lastChar>0 && $num>$lastChar+1){ + for($i=$lastChar+1;$i<$num;$i++){ + $widths[] = 0; + } + } + $widths[] = $d['WX']; + if ($firstChar==-1){ + $firstChar = $num; + } + $lastChar = $num; + } + } + // also need to adjust the widths for the differences array + if (isset($options['differences'])){ + foreach($options['differences'] as $charNum=>$charName){ + if ($charNum>$lastChar){ + for($i=$lastChar+1;$i<=$charNum;$i++){ + $widths[]=0; + } + $lastChar=$charNum; + } + if (isset($this->fonts[$fontName]['C'][$charName])){ + $widths[$charNum-$firstChar]=$this->fonts[$fontName]['C'][$charName]['WX']; + } + } + } + $this->addMessage('selectFont: FirstChar='.$firstChar); + $this->addMessage('selectFont: LastChar='.$lastChar); + $this->numObj++; + $this->o_contents($this->numObj,'new','raw'); + $this->objects[$this->numObj]['c'].='['; + foreach($widths as $width){ + $this->objects[$this->numObj]['c'].=' '.$width; + } + $this->objects[$this->numObj]['c'].=' ]'; + $widthid = $this->numObj; + + // load the pfb file, and put that into an object too. + // note that pdf supports only binary format type 1 font files, though there is a + // simple utility to convert them from pfa to pfb. + $fp = fopen($fbfile,'rb'); + $tmp = get_magic_quotes_runtime(); + set_magic_quotes_runtime(0); + $data = fread($fp,filesize($fbfile)); + set_magic_quotes_runtime($tmp); + fclose($fp); + + // create the font descriptor + $this->numObj++; + $fontDescriptorId = $this->numObj; + $this->numObj++; + $pfbid = $this->numObj; + // determine flags (more than a little flakey, hopefully will not matter much) + $flags=0; + if ($this->fonts[$fontName]['ItalicAngle']!=0){ $flags+=pow(2,6); } + if ($this->fonts[$fontName]['IsFixedPitch']=='true'){ $flags+=1; } + $flags+=pow(2,5); // assume non-sybolic + + $list = array('Ascent'=>'Ascender','CapHeight'=>'CapHeight','Descent'=>'Descender','FontBBox'=>'FontBBox','ItalicAngle'=>'ItalicAngle'); + $fdopt = array( + 'Flags'=>$flags + ,'FontName'=>$adobeFontName + ,'StemV'=>100 // don't know what the value for this should be! + ); + foreach($list as $k=>$v){ + if (isset($this->fonts[$fontName][$v])){ + $fdopt[$k]=$this->fonts[$fontName][$v]; + } + } + + if ($fbtype=='pfb'){ + $fdopt['FontFile']=$pfbid; + } else if ($fbtype=='ttf'){ + $fdopt['FontFile2']=$pfbid; + } + $this->o_fontDescriptor($fontDescriptorId,'new',$fdopt); + + // embed the font program + $this->o_contents($this->numObj,'new'); + $this->objects[$pfbid]['c'].=$data; + // determine the cruicial lengths within this file + if ($fbtype=='pfb'){ + $l1 = strpos($data,'eexec')+6; + $l2 = strpos($data,'00000000')-$l1; + $l3 = strlen($data)-$l2-$l1; + $this->o_contents($this->numObj,'add',array('Length1'=>$l1,'Length2'=>$l2,'Length3'=>$l3)); + } else if ($fbtype=='ttf'){ + $l1 = strlen($data); + $this->o_contents($this->numObj,'add',array('Length1'=>$l1)); + } + + + // tell the font object about all this new stuff + $tmp = array('BaseFont'=>$adobeFontName,'Widths'=>$widthid + ,'FirstChar'=>$firstChar,'LastChar'=>$lastChar + ,'FontDescriptor'=>$fontDescriptorId); + if ($fbtype=='ttf'){ + $tmp['SubType']='TrueType'; + } + $this->addMessage('adding extra info to font.('.$fontObj.')'); + foreach($tmp as $fk=>$fv){ + $this->addMessage($fk." : ".$fv); + } + $this->o_font($fontObj,'add',$tmp); + + } else { + $this->addMessage('selectFont: pfb or ttf file not found, ok if this is one of the 14 standard fonts'); + } + + + // also set the differences here, note that this means that these will take effect only the + //first time that a font is selected, else they are ignored + if (isset($options['differences'])){ + $this->fonts[$fontName]['differences']=$options['differences']; + } + } + } + if ($set && isset($this->fonts[$fontName])){ + // so if for some reason the font was not set in the last one then it will not be selected + $this->currentBaseFont=$fontName; + // the next line means that if a new font is selected, then the current text state will be + // applied to it as well. + $this->setCurrentFont(); + } + return $this->currentFontNum; +} + +/** +* sets up the current font, based on the font families, and the current text state +* note that this system is quite flexible, a <<b>><<i>> font can be completely different to a +* <<i>><<b>> font, and even <<b>><<b>> will have to be defined within the family to have meaning +* This function is to be called whenever the currentTextState is changed, it will update +* the currentFont setting to whatever the appropriatte family one is. +* If the user calls selectFont themselves then that will reset the currentBaseFont, and the currentFont +* This function will change the currentFont to whatever it should be, but will not change the +* currentBaseFont. +* +* @access private +*/ +function setCurrentFont(){ + if (strlen($this->currentBaseFont)==0){ + // then assume an initial font + $this->selectFont('./fonts/Helvetica.afm'); + } + $cf = substr($this->currentBaseFont,strrpos($this->currentBaseFont,'/')+1); + if (strlen($this->currentTextState) + && isset($this->fontFamilies[$cf]) + && isset($this->fontFamilies[$cf][$this->currentTextState])){ + // then we are in some state or another + // and this font has a family, and the current setting exists within it + // select the font, then return it + $nf = substr($this->currentBaseFont,0,strrpos($this->currentBaseFont,'/')+1).$this->fontFamilies[$cf][$this->currentTextState]; + $this->selectFont($nf,'',0); + $this->currentFont = $nf; + $this->currentFontNum = $this->fonts[$nf]['fontNum']; + } else { + // the this font must not have the right family member for the current state + // simply assume the base font + $this->currentFont = $this->currentBaseFont; + $this->currentFontNum = $this->fonts[$this->currentFont]['fontNum']; + } +} + +/** +* function for the user to find out what the ID is of the first page that was created during +* startup - useful if they wish to add something to it later. +*/ +function getFirstPageId(){ + return $this->firstPageId; +} + +/** +* add content to the currently active object +* +* @access private +*/ +function addContent($content){ + $this->objects[$this->currentContents]['c'].=$content; +} + +/** +* sets the colour for fill operations +*/ +function setColor($r,$g,$b,$force=0){ + if ($r>=0 && ($force || $r!=$this->currentColour['r'] || $g!=$this->currentColour['g'] || $b!=$this->currentColour['b'])){ + $this->objects[$this->currentContents]['c'].="\n".sprintf('%.3f',$r).' '.sprintf('%.3f',$g).' '.sprintf('%.3f',$b).' rg'; + $this->currentColour=array('r'=>$r,'g'=>$g,'b'=>$b); + } +} + +/** +* sets the colour for stroke operations +*/ +function setStrokeColor($r,$g,$b,$force=0){ + if ($r>=0 && ($force || $r!=$this->currentStrokeColour['r'] || $g!=$this->currentStrokeColour['g'] || $b!=$this->currentStrokeColour['b'])){ + $this->objects[$this->currentContents]['c'].="\n".sprintf('%.3f',$r).' '.sprintf('%.3f',$g).' '.sprintf('%.3f',$b).' RG'; + $this->currentStrokeColour=array('r'=>$r,'g'=>$g,'b'=>$b); + } +} + +/** +* draw a line from one set of coordinates to another +*/ +function line($x1,$y1,$x2,$y2){ + $this->objects[$this->currentContents]['c'].="\n".sprintf('%.3f',$x1).' '.sprintf('%.3f',$y1).' m '.sprintf('%.3f',$x2).' '.sprintf('%.3f',$y2).' l S'; +} + +/** +* draw a bezier curve based on 4 control points +*/ +function curve($x0,$y0,$x1,$y1,$x2,$y2,$x3,$y3){ + // in the current line style, draw a bezier curve from (x0,y0) to (x3,y3) using the other two points + // as the control points for the curve. + $this->objects[$this->currentContents]['c'].="\n".sprintf('%.3f',$x0).' '.sprintf('%.3f',$y0).' m '.sprintf('%.3f',$x1).' '.sprintf('%.3f',$y1); + $this->objects[$this->currentContents]['c'].= ' '.sprintf('%.3f',$x2).' '.sprintf('%.3f',$y2).' '.sprintf('%.3f',$x3).' '.sprintf('%.3f',$y3).' c S'; +} + +/** +* draw a part of an ellipse +*/ +function partEllipse($x0,$y0,$astart,$afinish,$r1,$r2=0,$angle=0,$nSeg=8){ + $this->ellipse($x0,$y0,$r1,$r2,$angle,$nSeg,$astart,$afinish,0); +} + +/** +* draw a filled ellipse +*/ +function filledEllipse($x0,$y0,$r1,$r2=0,$angle=0,$nSeg=8,$astart=0,$afinish=360){ + return $this->ellipse($x0,$y0,$r1,$r2=0,$angle,$nSeg,$astart,$afinish,1,1); +} + +/** +* draw an ellipse +* note that the part and filled ellipse are just special cases of this function +* +* draws an ellipse in the current line style +* centered at $x0,$y0, radii $r1,$r2 +* if $r2 is not set, then a circle is drawn +* nSeg is not allowed to be less than 2, as this will simply draw a line (and will even draw a +* pretty crappy shape at 2, as we are approximating with bezier curves. +*/ +function ellipse($x0,$y0,$r1,$r2=0,$angle=0,$nSeg=8,$astart=0,$afinish=360,$close=1,$fill=0){ + if ($r1==0){ + return; + } + if ($r2==0){ + $r2=$r1; + } + if ($nSeg<2){ + $nSeg=2; + } + + $astart = deg2rad((float)$astart); + $afinish = deg2rad((float)$afinish); + $totalAngle =$afinish-$astart; + + $dt = $totalAngle/$nSeg; + $dtm = $dt/3; + + if ($angle != 0){ + $a = -1*deg2rad((float)$angle); + $tmp = "\n q "; + $tmp .= sprintf('%.3f',cos($a)).' '.sprintf('%.3f',(-1.0*sin($a))).' '.sprintf('%.3f',sin($a)).' '.sprintf('%.3f',cos($a)).' '; + $tmp .= sprintf('%.3f',$x0).' '.sprintf('%.3f',$y0).' cm'; + $this->objects[$this->currentContents]['c'].= $tmp; + $x0=0; + $y0=0; + } + + $t1 = $astart; + $a0 = $x0+$r1*cos($t1); + $b0 = $y0+$r2*sin($t1); + $c0 = -$r1*sin($t1); + $d0 = $r2*cos($t1); + + $this->objects[$this->currentContents]['c'].="\n".sprintf('%.3f',$a0).' '.sprintf('%.3f',$b0).' m '; + for ($i=1;$i<=$nSeg;$i++){ + // draw this bit of the total curve + $t1 = $i*$dt+$astart; + $a1 = $x0+$r1*cos($t1); + $b1 = $y0+$r2*sin($t1); + $c1 = -$r1*sin($t1); + $d1 = $r2*cos($t1); + $this->objects[$this->currentContents]['c'].="\n".sprintf('%.3f',($a0+$c0*$dtm)).' '.sprintf('%.3f',($b0+$d0*$dtm)); + $this->objects[$this->currentContents]['c'].= ' '.sprintf('%.3f',($a1-$c1*$dtm)).' '.sprintf('%.3f',($b1-$d1*$dtm)).' '.sprintf('%.3f',$a1).' '.sprintf('%.3f',$b1).' c'; + $a0=$a1; + $b0=$b1; + $c0=$c1; + $d0=$d1; + } + if ($fill){ + $this->objects[$this->currentContents]['c'].=' f'; + } else { + if ($close){ + $this->objects[$this->currentContents]['c'].=' s'; // small 's' signifies closing the path as well + } else { + $this->objects[$this->currentContents]['c'].=' S'; + } + } + if ($angle !=0){ + $this->objects[$this->currentContents]['c'].=' Q'; + } +} + +/** +* this sets the line drawing style. +* width, is the thickness of the line in user units +* cap is the type of cap to put on the line, values can be 'butt','round','square' +* where the diffference between 'square' and 'butt' is that 'square' projects a flat end past the +* end of the line. +* join can be 'miter', 'round', 'bevel' +* dash is an array which sets the dash pattern, is a series of length values, which are the lengths of the +* on and off dashes. +* (2) represents 2 on, 2 off, 2 on , 2 off ... +* (2,1) is 2 on, 1 off, 2 on, 1 off.. etc +* phase is a modifier on the dash pattern which is used to shift the point at which the pattern starts. +*/ +function setLineStyle($width=1,$cap='',$join='',$dash='',$phase=0){ + + // this is quite inefficient in that it sets all the parameters whenever 1 is changed, but will fix another day + $string = ''; + if ($width>0){ + $string.= $width.' w'; + } + $ca = array('butt'=>0,'round'=>1,'square'=>2); + if (isset($ca[$cap])){ + $string.= ' '.$ca[$cap].' J'; + } + $ja = array('miter'=>0,'round'=>1,'bevel'=>2); + if (isset($ja[$join])){ + $string.= ' '.$ja[$join].' j'; + } + if (is_array($dash)){ + $string.= ' ['; + foreach ($dash as $len){ + $string.=' '.$len; + } + $string.= ' ] '.$phase.' d'; + } + $this->currentLineStyle = $string; + $this->objects[$this->currentContents]['c'].="\n".$string; +} + +/** +* draw a polygon, the syntax for this is similar to the GD polygon command +*/ +function polygon($p,$np,$f=0){ + $this->objects[$this->currentContents]['c'].="\n"; + $this->objects[$this->currentContents]['c'].=sprintf('%.3f',$p[0]).' '.sprintf('%.3f',$p[1]).' m '; + for ($i=2;$i<$np*2;$i=$i+2){ + $this->objects[$this->currentContents]['c'].= sprintf('%.3f',$p[$i]).' '.sprintf('%.3f',$p[$i+1]).' l '; + } + if ($f==1){ + $this->objects[$this->currentContents]['c'].=' f'; + } else { + $this->objects[$this->currentContents]['c'].=' S'; + } +} + +/** +* a filled rectangle, note that it is the width and height of the rectangle which are the secondary paramaters, not +* the coordinates of the upper-right corner +*/ +function filledRectangle($x1,$y1,$width,$height){ + $this->objects[$this->currentContents]['c'].="\n".sprintf('%.3f',$x1).' '.sprintf('%.3f',$y1).' '.sprintf('%.3f',$width).' '.sprintf('%.3f',$height).' re f'; +} + +/** +* draw a rectangle, note that it is the width and height of the rectangle which are the secondary paramaters, not +* the coordinates of the upper-right corner +*/ +function rectangle($x1,$y1,$width,$height){ + $this->objects[$this->currentContents]['c'].="\n".sprintf('%.3f',$x1).' '.sprintf('%.3f',$y1).' '.sprintf('%.3f',$width).' '.sprintf('%.3f',$height).' re S'; +} + +/** +* add a new page to the document +* this also makes the new page the current active object +*/ +function newPage($insert=0,$id=0,$pos='after'){ + + // if there is a state saved, then go up the stack closing them + // then on the new page, re-open them with the right setings + + if ($this->nStateStack){ + for ($i=$this->nStateStack;$i>=1;$i--){ + $this->restoreState($i); + } + } + + $this->numObj++; + if ($insert){ + // the id from the ezPdf class is the od of the contents of the page, not the page object itself + // query that object to find the parent + $rid = $this->objects[$id]['onPage']; + $opt= array('rid'=>$rid,'pos'=>$pos); + $this->o_page($this->numObj,'new',$opt); + } else { + $this->o_page($this->numObj,'new'); + } + // if there is a stack saved, then put that onto the page + if ($this->nStateStack){ + for ($i=1;$i<=$this->nStateStack;$i++){ + $this->saveState($i); + } + } + // and if there has been a stroke or fill colour set, then transfer them + if ($this->currentColour['r']>=0){ + $this->setColor($this->currentColour['r'],$this->currentColour['g'],$this->currentColour['b'],1); + } + if ($this->currentStrokeColour['r']>=0){ + $this->setStrokeColor($this->currentStrokeColour['r'],$this->currentStrokeColour['g'],$this->currentStrokeColour['b'],1); + } + + // if there is a line style set, then put this in too + if (strlen($this->currentLineStyle)){ + $this->objects[$this->currentContents]['c'].="\n".$this->currentLineStyle; + } + + // the call to the o_page object set currentContents to the present page, so this can be returned as the page id + return $this->currentContents; +} + +/** +* output the pdf code, streaming it to the browser +* the relevant headers are set so that hopefully the browser will recognise it +*/ +function stream($options=''){ + // setting the options allows the adjustment of the headers + // values at the moment are: + // 'Content-Disposition'=>'filename' - sets the filename, though not too sure how well this will + // work as in my trial the browser seems to use the filename of the php file with .pdf on the end + // 'Accept-Ranges'=>1 or 0 - if this is not set to 1, then this header is not included, off by default + // this header seems to have caused some problems despite tha fact that it is supposed to solve + // them, so I am leaving it off by default. + // 'compress'=> 1 or 0 - apply content stream compression, this is on (1) by default + if (!is_array($options)){ + $options=array(); + } + if ( isset($options['compress']) && $options['compress']==0){ + $tmp = $this->output(1); + } else { + $tmp = $this->output(); + } + header("Content-type: application/pdf"); + header("Content-Length: ".strlen(ltrim($tmp))); + $fileName = (isset($options['Content-Disposition'])?$options['Content-Disposition']:'file.pdf'); + header("Content-Disposition: inline; filename=".$fileName); + if (isset($options['Accept-Ranges']) && $options['Accept-Ranges']==1){ + header("Accept-Ranges: ".strlen(ltrim($tmp))); + } + echo ltrim($tmp); +} + +/** +* return the height in units of the current font in the given size +*/ +function getFontHeight($size){ + if (!$this->numFonts){ + $this->selectFont('./fonts/Helvetica'); + } + // for the current font, and the given size, what is the height of the font in user units + $h = $this->fonts[$this->currentFont]['FontBBox'][3]-$this->fonts[$this->currentFont]['FontBBox'][1]; + return $size*$h/1000; +} + +/** +* return the font decender, this will normally return a negative number +* if you add this number to the baseline, you get the level of the bottom of the font +* it is in the pdf user units +*/ +function getFontDecender($size){ + // note that this will most likely return a negative value + if (!$this->numFonts){ + $this->selectFont('./fonts/Helvetica'); + } + $h = $this->fonts[$this->currentFont]['FontBBox'][1]; + return $size*$h/1000; +} + +/** +* filter the text, this is applied to all text just before being inserted into the pdf document +* it escapes the various things that need to be escaped, and so on +* +* @access private +*/ +function filterText($text){ + $text = str_replace('\\','\\\\',$text); + $text = str_replace('(','\(',$text); + $text = str_replace(')','\)',$text); + $text = str_replace('<','<',$text); + $text = str_replace('>','>',$text); + $text = str_replace(''','\'',$text); + $text = str_replace('"','"',$text); + $text = str_replace('&','&',$text); + + return $text; +} + +/** +* given a start position and information about how text is to be laid out, calculate where +* on the page the text will end +* +* @access private +*/ +function PRVTgetTextPosition($x,$y,$angle,$size,$wa,$text){ + // given this information return an array containing x and y for the end position as elements 0 and 1 + $w = $this->getTextWidth($size,$text); + // need to adjust for the number of spaces in this text + $words = explode(' ',$text); + $nspaces=count($words)-1; + $w += $wa*$nspaces; + $a = deg2rad((float)$angle); + return array(cos($a)*$w+$x,-sin($a)*$w+$y); +} + +/** +* wrapper function for PRVTcheckTextDirective1 +* +* @access private +*/ +function PRVTcheckTextDirective(&$text,$i,&$f){ + $x=0; + $y=0; + return $this->PRVTcheckTextDirective1($text,$i,$f,0,$x,$y); +} + +/** +* checks if the text stream contains a control directive +* if so then makes some changes and returns the number of characters involved in the directive +* this has been re-worked to include everything neccesary to fins the current writing point, so that +* the location can be sent to the callback function if required +* if the directive does not require a font change, then $f should be set to 0 +* +* @access private +*/ +function PRVTcheckTextDirective1(&$text,$i,&$f,$final,&$x,&$y,$size=0,$angle=0,$wordSpaceAdjust=0){ + $directive = 0; + $j=$i; + if ($text[$j]=='<'){ + $j++; + switch($text[$j]){ + case '/': + $j++; + if (strlen($text) <= $j){ + return $directive; + } + switch($text[$j]){ + case 'b': + case 'i': + $j++; + if ($text[$j]=='>'){ + $p = strrpos($this->currentTextState,$text[$j-1]); + if ($p !== false){ + // then there is one to remove + $this->currentTextState = substr($this->currentTextState,0,$p).substr($this->currentTextState,$p+1); + } + $directive=$j-$i+1; + } + break; + case 'c': + // this this might be a callback function + $j++; + $k = strpos($text,'>',$j); + if ($k!==false && $text[$j]==':'){ + // then this will be treated as a callback directive + $directive = $k-$i+1; + $f=0; + // split the remainder on colons to get the function name and the paramater + $tmp = substr($text,$j+1,$k-$j-1); + $b1 = strpos($tmp,':'); + if ($b1!==false){ + $func = substr($tmp,0,$b1); + $parm = substr($tmp,$b1+1); + } else { + $func=$tmp; + $parm=''; + } + if (!isset($func) || !strlen(trim($func))){ + $directive=0; + } else { + // only call the function if this is the final call + if ($final){ + // need to assess the text position, calculate the text width to this point + // can use getTextWidth to find the text width I think + $tmp = $this->PRVTgetTextPosition($x,$y,$angle,$size,$wordSpaceAdjust,substr($text,0,$i)); + $info = array('x'=>$tmp[0],'y'=>$tmp[1],'angle'=>$angle,'status'=>'end','p'=>$parm,'nCallback'=>$this->nCallback); + $x=$tmp[0]; + $y=$tmp[1]; + $ret = $this->$func($info); + if (is_array($ret)){ + // then the return from the callback function could set the position, to start with, later will do font colour, and font + foreach($ret as $rk=>$rv){ + switch($rk){ + case 'x': + case 'y': + $$rk=$rv; + break; + } + } + } + // also remove from to the stack + // for simplicity, just take from the end, fix this another day + $this->nCallback--; + if ($this->nCallback<0){ + $this->nCallBack=0; + } + } + } + } + break; + } + break; + case 'b': + case 'i': + $j++; + if ($text[$j]=='>'){ + $this->currentTextState.=$text[$j-1]; + $directive=$j-$i+1; + } + break; + case 'C': + $noClose=1; + case 'c': + // this this might be a callback function + $j++; + $k = strpos($text,'>',$j); + if ($k!==false && $text[$j]==':'){ + // then this will be treated as a callback directive + $directive = $k-$i+1; + $f=0; + // split the remainder on colons to get the function name and the paramater +// $bits = explode(':',substr($text,$j+1,$k-$j-1)); + $tmp = substr($text,$j+1,$k-$j-1); + $b1 = strpos($tmp,':'); + if ($b1!==false){ + $func = substr($tmp,0,$b1); + $parm = substr($tmp,$b1+1); + } else { + $func=$tmp; + $parm=''; + } + if (!isset($func) || !strlen(trim($func))){ + $directive=0; + } else { + // only call the function if this is the final call, ie, the one actually doing printing, not measurement + if ($final){ + // need to assess the text position, calculate the text width to this point + // can use getTextWidth to find the text width I think + // also add the text height and decender + $tmp = $this->PRVTgetTextPosition($x,$y,$angle,$size,$wordSpaceAdjust,substr($text,0,$i)); + $info = array('x'=>$tmp[0],'y'=>$tmp[1],'angle'=>$angle,'status'=>'start','p'=>$parm,'f'=>$func,'height'=>$this->getFontHeight($size),'decender'=>$this->getFontDecender($size)); + $x=$tmp[0]; + $y=$tmp[1]; + if (!isset($noClose) || !$noClose){ + // only add to the stack if this is a small 'c', therefore is a start-stop pair + $this->nCallback++; + $info['nCallback']=$this->nCallback; + $this->callback[$this->nCallback]=$info; + } + $ret = $this->$func($info); + if (is_array($ret)){ + // then the return from the callback function could set the position, to start with, later will do font colour, and font + foreach($ret as $rk=>$rv){ + switch($rk){ + case 'x': + case 'y': + $$rk=$rv; + break; + } + } + } + } + } + } + break; + } + } + return $directive; +} + +/** +* add text to the document, at a specified location, size and angle on the page +*/ +function addText($x,$y,$size,$text,$angle=0,$wordSpaceAdjust=0){ + if (!$this->numFonts){$this->selectFont('./fonts/Helvetica');} + + // if there are any open callbacks, then they should be called, to show the start of the line + if ($this->nCallback>0){ + for ($i=$this->nCallback;$i>0;$i--){ + // call each function + $info = array('x'=>$x,'y'=>$y,'angle'=>$angle,'status'=>'sol','p'=>$this->callback[$i]['p'],'nCallback'=>$this->callback[$i]['nCallback'],'height'=>$this->callback[$i]['height'],'decender'=>$this->callback[$i]['decender']); + $func = $this->callback[$i]['f']; + $this->$func($info); + } + } + if ($angle==0){ + $this->objects[$this->currentContents]['c'].="\n".'BT '.sprintf('%.3f',$x).' '.sprintf('%.3f',$y).' Td'; + } else { + $a = deg2rad((float)$angle); + $tmp = "\n".'BT '; + $tmp .= sprintf('%.3f',cos($a)).' '.sprintf('%.3f',(-1.0*sin($a))).' '.sprintf('%.3f',sin($a)).' '.sprintf('%.3f',cos($a)).' '; + $tmp .= sprintf('%.3f',$x).' '.sprintf('%.3f',$y).' Tm'; + $this->objects[$this->currentContents]['c'] .= $tmp; + } + if ($wordSpaceAdjust!=0 || $wordSpaceAdjust != $this->wordSpaceAdjust){ + $this->wordSpaceAdjust=$wordSpaceAdjust; + $this->objects[$this->currentContents]['c'].=' '.sprintf('%.3f',$wordSpaceAdjust).' Tw'; + } + $len=strlen($text); + $start=0; + for ($i=0;$i<$len;$i++){ + $f=1; + $directive = $this->PRVTcheckTextDirective($text,$i,$f); + if ($directive){ + // then we should write what we need to + if ($i>$start){ + $part = substr($text,$start,$i-$start); + $this->objects[$this->currentContents]['c'].=' /F'.$this->currentFontNum.' '.sprintf('%.1f',$size).' Tf '; + $this->objects[$this->currentContents]['c'].=' ('.$this->filterText($part).') Tj'; + } + if ($f){ + // then there was nothing drastic done here, restore the contents + $this->setCurrentFont(); + } else { + $this->objects[$this->currentContents]['c'] .= ' ET'; + $f=1; + $xp=$x; + $yp=$y; + $directive = $this->PRVTcheckTextDirective1($text,$i,$f,1,$xp,$yp,$size,$angle,$wordSpaceAdjust); + + // restart the text object + if ($angle==0){ + $this->objects[$this->currentContents]['c'].="\n".'BT '.sprintf('%.3f',$xp).' '.sprintf('%.3f',$yp).' Td'; + } else { + $a = deg2rad((float)$angle); + $tmp = "\n".'BT '; + $tmp .= sprintf('%.3f',cos($a)).' '.sprintf('%.3f',(-1.0*sin($a))).' '.sprintf('%.3f',sin($a)).' '.sprintf('%.3f',cos($a)).' '; + $tmp .= sprintf('%.3f',$xp).' '.sprintf('%.3f',$yp).' Tm'; + $this->objects[$this->currentContents]['c'] .= $tmp; + } + if ($wordSpaceAdjust!=0 || $wordSpaceAdjust != $this->wordSpaceAdjust){ + $this->wordSpaceAdjust=$wordSpaceAdjust; + $this->objects[$this->currentContents]['c'].=' '.sprintf('%.3f',$wordSpaceAdjust).' Tw'; + } + } + // and move the writing point to the next piece of text + $i=$i+$directive-1; + $start=$i+1; + } + + } + if ($start<$len){ + $part = substr($text,$start); + $this->objects[$this->currentContents]['c'].=' /F'.$this->currentFontNum.' '.sprintf('%.1f',$size).' Tf '; + $this->objects[$this->currentContents]['c'].=' ('.$this->filterText($part).') Tj'; + } + $this->objects[$this->currentContents]['c'].=' ET'; + + // if there are any open callbacks, then they should be called, to show the end of the line + if ($this->nCallback>0){ + for ($i=$this->nCallback;$i>0;$i--){ + // call each function + $tmp = $this->PRVTgetTextPosition($x,$y,$angle,$size,$wordSpaceAdjust,$text); + $info = array('x'=>$tmp[0],'y'=>$tmp[1],'angle'=>$angle,'status'=>'eol','p'=>$this->callback[$i]['p'],'nCallback'=>$this->callback[$i]['nCallback'],'height'=>$this->callback[$i]['height'],'decender'=>$this->callback[$i]['decender']); + $func = $this->callback[$i]['f']; + $this->$func($info); + } + } + +} + +/** +* calculate how wide a given text string will be on a page, at a given size. +* this can be called externally, but is alse used by the other class functions +*/ +function getTextWidth($size,$text){ + // this function should not change any of the settings, though it will need to + // track any directives which change during calculation, so copy them at the start + // and put them back at the end. + $store_currentTextState = $this->currentTextState; + + if (!$this->numFonts){ + $this->selectFont('./fonts/Helvetica'); + } + + // converts a number or a float to a string so it can get the width + $text = "$text"; + + // hmm, this is where it all starts to get tricky - use the font information to + // calculate the width of each character, add them up and convert to user units + $w=0; + $len=strlen($text); + $cf = $this->currentFont; + for ($i=0;$i<$len;$i++){ + $f=1; + $directive = $this->PRVTcheckTextDirective($text,$i,$f); + if ($directive){ + if ($f){ + $this->setCurrentFont(); + $cf = $this->currentFont; + } + $i=$i+$directive-1; + } else { + $char=ord($text[$i]); + if (isset($this->fonts[$cf]['differences'][$char])){ + // then this character is being replaced by another + $name = $this->fonts[$cf]['differences'][$char]; + if (isset($this->fonts[$cf]['C'][$name]['WX'])){ + $w+=$this->fonts[$cf]['C'][$name]['WX']; + } + } else if (isset($this->fonts[$cf]['C'][$char]['WX'])){ + $w+=$this->fonts[$cf]['C'][$char]['WX']; + } + } + } + + $this->currentTextState = $store_currentTextState; + $this->setCurrentFont(); + + return $w*$size/1000; +} + +/** +* do a part of the calculation for sorting out the justification of the text +* +* @access private +*/ +function PRVTadjustWrapText($text,$actual,$width,&$x,&$adjust,$justification){ + switch ($justification){ + case 'left': + return; + break; + case 'right': + $x+=$width-$actual; + break; + case 'center': + case 'centre': + $x+=($width-$actual)/2; + break; + case 'full': + // count the number of words + $words = explode(' ',$text); + $nspaces=count($words)-1; + if ($nspaces>0){ + $adjust = ($width-$actual)/$nspaces; + } else { + $adjust=0; + } + break; + } +} + +/** +* add text to the page, but ensure that it fits within a certain width +* if it does not fit then put in as much as possible, splitting at word boundaries +* and return the remainder. +* justification and angle can also be specified for the text +*/ +function addTextWrap($x,$y,$width,$size,$text,$justification='left',$angle=0,$test=0){ + // this will display the text, and if it goes beyond the width $width, will backtrack to the + // previous space or hyphen, and return the remainder of the text. + + // $justification can be set to 'left','right','center','centre','full' + + // need to store the initial text state, as this will change during the width calculation + // but will need to be re-set before printing, so that the chars work out right + $store_currentTextState = $this->currentTextState; + + if (!$this->numFonts){$this->selectFont('./fonts/Helvetica');} + if ($width<=0){ + // error, pretend it printed ok, otherwise risking a loop + return ''; + } + $w=0; + $break=0; + $breakWidth=0; + $len=strlen($text); + $cf = $this->currentFont; + $tw = $width/$size*1000; + for ($i=0;$i<$len;$i++){ + $f=1; + $directive = $this->PRVTcheckTextDirective($text,$i,$f); + if ($directive){ + if ($f){ + $this->setCurrentFont(); + $cf = $this->currentFont; + } + $i=$i+$directive-1; + } else { + $cOrd = ord($text[$i]); + if (isset($this->fonts[$cf]['differences'][$cOrd])){ + // then this character is being replaced by another + $cOrd2 = $this->fonts[$cf]['differences'][$cOrd]; + } else { + $cOrd2 = $cOrd; + } + + if (isset($this->fonts[$cf]['C'][$cOrd2]['WX'])){ + $w+=$this->fonts[$cf]['C'][$cOrd2]['WX']; + } + if ($w>$tw){ + // then we need to truncate this line + if ($break>0){ + // then we have somewhere that we can split :) + if ($text[$break]==' '){ + $tmp = substr($text,0,$break); + } else { + $tmp = substr($text,0,$break+1); + } + $adjust=0; + $this->PRVTadjustWrapText($tmp,$breakWidth,$width,$x,$adjust,$justification); + + // reset the text state + $this->currentTextState = $store_currentTextState; + $this->setCurrentFont(); + if (!$test){ + $this->addText($x,$y,$size,$tmp,$angle,$adjust); + } + return substr($text,$break+1); + } else { + // just split before the current character + $tmp = substr($text,0,$i); + $adjust=0; + $ctmp=ord($text[$i]); + if (isset($this->fonts[$cf]['differences'][$ctmp])){ + $ctmp=$this->fonts[$cf]['differences'][$ctmp]; + } + $tmpw=($w-$this->fonts[$cf]['C'][$ctmp]['WX'])*$size/1000; + $this->PRVTadjustWrapText($tmp,$tmpw,$width,$x,$adjust,$justification); + // reset the text state + $this->currentTextState = $store_currentTextState; + $this->setCurrentFont(); + if (!$test){ + $this->addText($x,$y,$size,$tmp,$angle,$adjust); + } + return substr($text,$i); + } + } + if ($text[$i]=='-'){ + $break=$i; + $breakWidth = $w*$size/1000; + } + if ($text[$i]==' '){ + $break=$i; + $ctmp=ord($text[$i]); + if (isset($this->fonts[$cf]['differences'][$ctmp])){ + $ctmp=$this->fonts[$cf]['differences'][$ctmp]; + } + $breakWidth = ($w-$this->fonts[$cf]['C'][$ctmp]['WX'])*$size/1000; + } + } + } + // then there was no need to break this line + if ($justification=='full'){ + $justification='left'; + } + $adjust=0; + $tmpw=$w*$size/1000; + $this->PRVTadjustWrapText($text,$tmpw,$width,$x,$adjust,$justification); + // reset the text state + $this->currentTextState = $store_currentTextState; + $this->setCurrentFont(); + if (!$test){ + $this->addText($x,$y,$size,$text,$angle,$adjust,$angle); + } + return ''; +} + +/** +* this will be called at a new page to return the state to what it was on the +* end of the previous page, before the stack was closed down +* This is to get around not being able to have open 'q' across pages +* +*/ +function saveState($pageEnd=0){ + if ($pageEnd){ + // this will be called at a new page to return the state to what it was on the + // end of the previous page, before the stack was closed down + // This is to get around not being able to have open 'q' across pages + $opt = $this->stateStack[$pageEnd]; // ok to use this as stack starts numbering at 1 + $this->setColor($opt['col']['r'],$opt['col']['g'],$opt['col']['b'],1); + $this->setStrokeColor($opt['str']['r'],$opt['str']['g'],$opt['str']['b'],1); + $this->objects[$this->currentContents]['c'].="\n".$opt['lin']; +// $this->currentLineStyle = $opt['lin']; + } else { + $this->nStateStack++; + $this->stateStack[$this->nStateStack]=array( + 'col'=>$this->currentColour + ,'str'=>$this->currentStrokeColour + ,'lin'=>$this->currentLineStyle + ); + } + $this->objects[$this->currentContents]['c'].="\nq"; +} + +/** +* restore a previously saved state +*/ +function restoreState($pageEnd=0){ + if (!$pageEnd){ + $n = $this->nStateStack; + $this->currentColour = $this->stateStack[$n]['col']; + $this->currentStrokeColour = $this->stateStack[$n]['str']; + $this->objects[$this->currentContents]['c'].="\n".$this->stateStack[$n]['lin']; + $this->currentLineStyle = $this->stateStack[$n]['lin']; + unset($this->stateStack[$n]); + $this->nStateStack--; + } + $this->objects[$this->currentContents]['c'].="\nQ"; +} + +/** +* make a loose object, the output will go into this object, until it is closed, then will revert to +* the current one. +* this object will not appear until it is included within a page. +* the function will return the object number +*/ +function openObject(){ + $this->nStack++; + $this->stack[$this->nStack]=array('c'=>$this->currentContents,'p'=>$this->currentPage); + // add a new object of the content type, to hold the data flow + $this->numObj++; + $this->o_contents($this->numObj,'new'); + $this->currentContents=$this->numObj; + $this->looseObjects[$this->numObj]=1; + + return $this->numObj; +} + +/** +* open an existing object for editing +*/ +function reopenObject($id){ + $this->nStack++; + $this->stack[$this->nStack]=array('c'=>$this->currentContents,'p'=>$this->currentPage); + $this->currentContents=$id; + // also if this object is the primary contents for a page, then set the current page to its parent + if (isset($this->objects[$id]['onPage'])){ + $this->currentPage = $this->objects[$id]['onPage']; + } +} + +/** +* close an object +*/ +function closeObject(){ + // close the object, as long as there was one open in the first place, which will be indicated by + // an objectId on the stack. + if ($this->nStack>0){ + $this->currentContents=$this->stack[$this->nStack]['c']; + $this->currentPage=$this->stack[$this->nStack]['p']; + $this->nStack--; + // easier to probably not worry about removing the old entries, they will be overwritten + // if there are new ones. + } +} + +/** +* stop an object from appearing on pages from this point on +*/ +function stopObject($id){ + // if an object has been appearing on pages up to now, then stop it, this page will + // be the last one that could contian it. + if (isset($this->addLooseObjects[$id])){ + $this->addLooseObjects[$id]=''; + } +} + +/** +* after an object has been created, it wil only show if it has been added, using this function. +*/ +function addObject($id,$options='add'){ + // add the specified object to the page + if (isset($this->looseObjects[$id]) && $this->currentContents!=$id){ + // then it is a valid object, and it is not being added to itself + switch($options){ + case 'all': + // then this object is to be added to this page (done in the next block) and + // all future new pages. + $this->addLooseObjects[$id]='all'; + case 'add': + if (isset($this->objects[$this->currentContents]['onPage'])){ + // then the destination contents is the primary for the page + // (though this object is actually added to that page) + $this->o_page($this->objects[$this->currentContents]['onPage'],'content',$id); + } + break; + case 'even': + $this->addLooseObjects[$id]='even'; + $pageObjectId=$this->objects[$this->currentContents]['onPage']; + if ($this->objects[$pageObjectId]['info']['pageNum']%2==0){ + $this->addObject($id); // hacky huh :) + } + break; + case 'odd': + $this->addLooseObjects[$id]='odd'; + $pageObjectId=$this->objects[$this->currentContents]['onPage']; + if ($this->objects[$pageObjectId]['info']['pageNum']%2==1){ + $this->addObject($id); // hacky huh :) + } + break; + case 'next': + $this->addLooseObjects[$id]='all'; + break; + case 'nexteven': + $this->addLooseObjects[$id]='even'; + break; + case 'nextodd': + $this->addLooseObjects[$id]='odd'; + break; + } + } +} + +/** +* add content to the documents info object +*/ +function addInfo($label,$value=0){ + // this will only work if the label is one of the valid ones. + // modify this so that arrays can be passed as well. + // if $label is an array then assume that it is key=>value pairs + // else assume that they are both scalar, anything else will probably error + if (is_array($label)){ + foreach ($label as $l=>$v){ + $this->o_info($this->infoObject,$l,$v); + } + } else { + $this->o_info($this->infoObject,$label,$value); + } +} + +/** +* set the viewer preferences of the document, it is up to the browser to obey these. +*/ +function setPreferences($label,$value=0){ + // this will only work if the label is one of the valid ones. + if (is_array($label)){ + foreach ($label as $l=>$v){ + $this->o_catalog($this->catalogId,'viewerPreferences',array($l=>$v)); + } + } else { + $this->o_catalog($this->catalogId,'viewerPreferences',array($label=>$value)); + } +} + +/** +* extract an integer from a position in a byte stream +* +* @access private +*/ +function PRVT_getBytes(&$data,$pos,$num){ + // return the integer represented by $num bytes from $pos within $data + $ret=0; + for ($i=0;$i<$num;$i++){ + $ret=$ret*256; + $ret+=ord($data[$pos+$i]); + } + return $ret; +} + +/** +* add a PNG image into the document, from a file +* this should work with remote files +*/ +function addPngFromFile($file,$x,$y,$w=0,$h=0){ + // read in a png file, interpret it, then add to the system + $error=0; + $tmp = get_magic_quotes_runtime(); + set_magic_quotes_runtime(0); + $fp = @fopen($file,'rb'); + if ($fp){ + $data=''; + while(!feof($fp)){ + $data .= fread($fp,1024); + } + fclose($fp); + } else { + $error = 1; + $errormsg = 'trouble opening file: '.$file; + } + set_magic_quotes_runtime($tmp); + + if (!$error){ + $header = chr(137).chr(80).chr(78).chr(71).chr(13).chr(10).chr(26).chr(10); + if (substr($data,0,8)!=$header){ + $error=1; + $errormsg = 'this file does not have a valid header'; + } + } + + if (!$error){ + // set pointer + $p = 8; + $len = strlen($data); + // cycle through the file, identifying chunks + $haveHeader=0; + $info=array(); + $idata=''; + $pdata=''; + while ($p<$len){ + $chunkLen = $this->PRVT_getBytes($data,$p,4); + $chunkType = substr($data,$p+4,4); +// echo $chunkType.' - '.$chunkLen.'<br>'; + + switch($chunkType){ + case 'IHDR': + // this is where all the file information comes from + $info['width']=$this->PRVT_getBytes($data,$p+8,4); + $info['height']=$this->PRVT_getBytes($data,$p+12,4); + $info['bitDepth']=ord($data[$p+16]); + $info['colorType']=ord($data[$p+17]); + $info['compressionMethod']=ord($data[$p+18]); + $info['filterMethod']=ord($data[$p+19]); + $info['interlaceMethod']=ord($data[$p+20]); +//print_r($info); + $haveHeader=1; + if ($info['compressionMethod']!=0){ + $error=1; + $errormsg = 'unsupported compression method'; + } + if ($info['filterMethod']!=0){ + $error=1; + $errormsg = 'unsupported filter method'; + } + break; + case 'PLTE': + $pdata.=substr($data,$p+8,$chunkLen); + break; + case 'IDAT': + $idata.=substr($data,$p+8,$chunkLen); + break; + case 'tRNS': + //this chunk can only occur once and it must occur after the PLTE chunk and before IDAT chunk + //print "tRNS found, color type = ".$info['colorType']."<BR>"; + $transparency = array(); + if ($info['colorType'] == 3) { // indexed color, rbg + /* corresponding to entries in the plte chunk + Alpha for palette index 0: 1 byte + Alpha for palette index 1: 1 byte + ...etc... + */ + // there will be one entry for each palette entry. up until the last non-opaque entry. + // set up an array, stretching over all palette entries which will be o (opaque) or 1 (transparent) + $transparency['type']='indexed'; + $numPalette = strlen($pdata)/3; + $trans=0; + for ($i=$chunkLen;$i>=0;$i--){ + if (ord($data[$p+8+$i])==0){ + $trans=$i; + } + } + $transparency['data'] = $trans; + + } elseif($info['colorType'] == 0) { // grayscale + /* corresponding to entries in the plte chunk + Gray: 2 bytes, range 0 .. (2^bitdepth)-1 + */ +// $transparency['grayscale']=$this->PRVT_getBytes($data,$p+8,2); // g = grayscale + $transparency['type']='indexed'; + $transparency['data'] = ord($data[$p+8+1]); + + } elseif($info['colorType'] == 2) { // truecolor + /* corresponding to entries in the plte chunk + Red: 2 bytes, range 0 .. (2^bitdepth)-1 + Green: 2 bytes, range 0 .. (2^bitdepth)-1 + Blue: 2 bytes, range 0 .. (2^bitdepth)-1 + */ + $transparency['r']=$this->PRVT_getBytes($data,$p+8,2); // r from truecolor + $transparency['g']=$this->PRVT_getBytes($data,$p+10,2); // g from truecolor + $transparency['b']=$this->PRVT_getBytes($data,$p+12,2); // b from truecolor + + } else { + //unsupported transparency type + } + // KS End new code + break; + default: + break; + } + + $p += $chunkLen+12; + } + + if(!$haveHeader){ + $error = 1; + $errormsg = 'information header is missing'; + } + if (isset($info['interlaceMethod']) && $info['interlaceMethod']){ + $error = 1; + $errormsg = 'There appears to be no support for interlaced images in pdf.'; + } + } + + if (!$error && $info['bitDepth'] > 8){ + $error = 1; + $errormsg = 'only bit depth of 8 or less is supported'; + } + + if (!$error){ + if ($info['colorType']!=2 && $info['colorType']!=0 && $info['colorType']!=3){ + $error = 1; + $errormsg = 'transparancey alpha channel not supported, transparency only supported for palette images.'; + } else { + switch ($info['colorType']){ + case 3: + $color = 'DeviceRGB'; + $ncolor=1; + break; + case 2: + $color = 'DeviceRGB'; + $ncolor=3; + break; + case 0: + $color = 'DeviceGray'; + $ncolor=1; + break; + } + } + } + if ($error){ + $this->addMessage('PNG error - ('.$file.') '.$errormsg); + return; + } + if ($w==0){ + $w=$h/$info['height']*$info['width']; + } + if ($h==0){ + $h=$w*$info['height']/$info['width']; + } +//print_r($info); + // so this image is ok... add it in. + $this->numImages++; + $im=$this->numImages; + $label='I'.$im; + $this->numObj++; +// $this->o_image($this->numObj,'new',array('label'=>$label,'data'=>$idata,'iw'=>$w,'ih'=>$h,'type'=>'png','ic'=>$info['width'])); + $options = array('label'=>$label,'data'=>$idata,'bitsPerComponent'=>$info['bitDepth'],'pdata'=>$pdata + ,'iw'=>$info['width'],'ih'=>$info['height'],'type'=>'png','color'=>$color,'ncolor'=>$ncolor); + if (isset($transparency)){ + $options['transparency']=$transparency; + } + $this->o_image($this->numObj,'new',$options); + + $this->objects[$this->currentContents]['c'].="\nq"; + $this->objects[$this->currentContents]['c'].="\n".sprintf('%.3f',$w)." 0 0 ".sprintf('%.3f',$h)." ".sprintf('%.3f',$x)." ".sprintf('%.3f',$y)." cm"; + $this->objects[$this->currentContents]['c'].="\n/".$label.' Do'; + $this->objects[$this->currentContents]['c'].="\nQ"; +} + +/** +* add a JPEG image into the document, from a file +*/ +function addJpegFromFile($img,$x,$y,$w=0,$h=0){ + // attempt to add a jpeg image straight from a file, using no GD commands + // note that this function is unable to operate on a remote file. + + if (!file_exists($img)){ + return; + } + + $tmp=getimagesize($img); + $imageWidth=$tmp[0]; + $imageHeight=$tmp[1]; + + if (isset($tmp['channels'])){ + $channels = $tmp['channels']; + } else { + $channels = 3; + } + + if ($w<=0 && $h<=0){ + $w=$imageWidth; + } + if ($w==0){ + $w=$h/$imageHeight*$imageWidth; + } + if ($h==0){ + $h=$w*$imageHeight/$imageWidth; + } + + $fp=fopen($img,'rb'); + + $tmp = get_magic_quotes_runtime(); + set_magic_quotes_runtime(0); + $data = fread($fp,filesize($img)); + set_magic_quotes_runtime($tmp); + + fclose($fp); + + $this->addJpegImage_common($data,$x,$y,$w,$h,$imageWidth,$imageHeight,$channels); +} + +/** +* add an image into the document, from a GD object +* this function is not all that reliable, and I would probably encourage people to use +* the file based functions +*/ +function addImage(&$img,$x,$y,$w=0,$h=0,$quality=75){ + // add a new image into the current location, as an external object + // add the image at $x,$y, and with width and height as defined by $w & $h + + // note that this will only work with full colour images and makes them jpg images for display + // later versions could present lossless image formats if there is interest. + + // there seems to be some problem here in that images that have quality set above 75 do not appear + // not too sure why this is, but in the meantime I have restricted this to 75. + if ($quality>75){ + $quality=75; + } + + // if the width or height are set to zero, then set the other one based on keeping the image + // height/width ratio the same, if they are both zero, then give up :) + $imageWidth=imagesx($img); + $imageHeight=imagesy($img); + + if ($w<=0 && $h<=0){ + return; + } + if ($w==0){ + $w=$h/$imageHeight*$imageWidth; + } + if ($h==0){ + $h=$w*$imageHeight/$imageWidth; + } + + // gotta get the data out of the img.. + + // so I write to a temp file, and then read it back.. soo ugly, my apologies. + $tmpDir='/tmp'; + $tmpName=tempnam($tmpDir,'img'); + imagejpeg($img,$tmpName,$quality); + $fp=fopen($tmpName,'rb'); + + $tmp = get_magic_quotes_runtime(); + set_magic_quotes_runtime(0); + $fp = @fopen($tmpName,'rb'); + if ($fp){ + $data=''; + while(!feof($fp)){ + $data .= fread($fp,1024); + } + fclose($fp); + } else { + $error = 1; + $errormsg = 'trouble opening file'; + } +// $data = fread($fp,filesize($tmpName)); + set_magic_quotes_runtime($tmp); +// fclose($fp); + unlink($tmpName); + $this->addJpegImage_common($data,$x,$y,$w,$h,$imageWidth,$imageHeight); +} + +/** +* common code used by the two JPEG adding functions +* +* @access private +*/ +function addJpegImage_common(&$data,$x,$y,$w=0,$h=0,$imageWidth,$imageHeight,$channels=3){ + // note that this function is not to be called externally + // it is just the common code between the GD and the file options + $this->numImages++; + $im=$this->numImages; + $label='I'.$im; + $this->numObj++; + $this->o_image($this->numObj,'new',array('label'=>$label,'data'=>$data,'iw'=>$imageWidth,'ih'=>$imageHeight,'channels'=>$channels)); + + $this->objects[$this->currentContents]['c'].="\nq"; + $this->objects[$this->currentContents]['c'].="\n".sprintf('%.3f',$w)." 0 0 ".sprintf('%.3f',$h)." ".sprintf('%.3f',$x)." ".sprintf('%.3f',$y)." cm"; + $this->objects[$this->currentContents]['c'].="\n/".$label.' Do'; + $this->objects[$this->currentContents]['c'].="\nQ"; +} + +/** +* specify where the document should open when it first starts +*/ +function openHere($style,$a=0,$b=0,$c=0){ + // this function will open the document at a specified page, in a specified style + // the values for style, and the required paramters are: + // 'XYZ' left, top, zoom + // 'Fit' + // 'FitH' top + // 'FitV' left + // 'FitR' left,bottom,right + // 'FitB' + // 'FitBH' top + // 'FitBV' left + $this->numObj++; + $this->o_destination($this->numObj,'new',array('page'=>$this->currentPage,'type'=>$style,'p1'=>$a,'p2'=>$b,'p3'=>$c)); + $id = $this->catalogId; + $this->o_catalog($id,'openHere',$this->numObj); +} + +/** +* create a labelled destination within the document +*/ +function addDestination($label,$style,$a=0,$b=0,$c=0){ + // associates the given label with the destination, it is done this way so that a destination can be specified after + // it has been linked to + // styles are the same as the 'openHere' function + $this->numObj++; + $this->o_destination($this->numObj,'new',array('page'=>$this->currentPage,'type'=>$style,'p1'=>$a,'p2'=>$b,'p3'=>$c)); + $id = $this->numObj; + // store the label->idf relationship, note that this means that labels can be used only once + $this->destinations["$label"]=$id; +} + +/** +* define font families, this is used to initialize the font families for the default fonts +* and for the user to add new ones for their fonts. The default bahavious can be overridden should +* that be desired. +*/ +function setFontFamily($family,$options=''){ + if (!is_array($options)){ + if ($family=='init'){ + // set the known family groups + // these font families will be used to enable bold and italic markers to be included + // within text streams. html forms will be used... <b></b> <i></i> + $this->fontFamilies['Helvetica.afm']=array( + 'b'=>'Helvetica-Bold.afm' + ,'i'=>'Helvetica-Oblique.afm' + ,'bi'=>'Helvetica-BoldOblique.afm' + ,'ib'=>'Helvetica-BoldOblique.afm' + ); + $this->fontFamilies['Courier.afm']=array( + 'b'=>'Courier-Bold.afm' + ,'i'=>'Courier-Oblique.afm' + ,'bi'=>'Courier-BoldOblique.afm' + ,'ib'=>'Courier-BoldOblique.afm' + ); + $this->fontFamilies['Times-Roman.afm']=array( + 'b'=>'Times-Bold.afm' + ,'i'=>'Times-Italic.afm' + ,'bi'=>'Times-BoldItalic.afm' + ,'ib'=>'Times-BoldItalic.afm' + ); + } + } else { + // the user is trying to set a font family + // note that this can also be used to set the base ones to something else + if (strlen($family)){ + $this->fontFamilies[$family] = $options; + } + } +} + +/** +* used to add messages for use in debugging +*/ +function addMessage($message){ + $this->messages.=$message."\n"; +} + +/** +* a few functions which should allow the document to be treated transactionally. +*/ +function transaction($action){ + switch ($action){ + case 'start': + // store all the data away into the checkpoint variable + $data = get_object_vars($this); + $this->checkpoint = $data; + unset($data); + break; + case 'commit': + if (is_array($this->checkpoint) && isset($this->checkpoint['checkpoint'])){ + $tmp = $this->checkpoint['checkpoint']; + $this->checkpoint = $tmp; + unset($tmp); + } else { + $this->checkpoint=''; + } + break; + case 'rewind': + // do not destroy the current checkpoint, but move us back to the state then, so that we can try again + if (is_array($this->checkpoint)){ + // can only abort if were inside a checkpoint + $tmp = $this->checkpoint; + foreach ($tmp as $k=>$v){ + if ($k != 'checkpoint'){ + $this->$k=$v; + } + } + unset($tmp); + } + break; + case 'abort': + if (is_array($this->checkpoint)){ + // can only abort if were inside a checkpoint + $tmp = $this->checkpoint; + foreach ($tmp as $k=>$v){ + $this->$k=$v; + } + unset($tmp); + } + break; + } + +} + +} // end of class + +?>
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/class.phpdocpdf.php b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/class.phpdocpdf.php new file mode 100755 index 00000000..ea3b2fdf --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/class.phpdocpdf.php @@ -0,0 +1,353 @@ +<?php +/** + * Cezpdf callback class customized for phpDocumentor + * + * phpDocumentor :: automatic documentation generator + * + * PHP versions 4 and 5 + * + * Copyright (c) 2000-2006 Joshua Eichorn, Gregory Beaver + * + * LICENSE: + * + * This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General + * Public License as published by the Free Software Foundation; + * either version 2.1 of the License, or (at your option) any + * later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package Converters + * @subpackage PDFdefault + * @author Greg Beaver <cellog@php.net> + * @copyright 2000-2006 Joshua Eichorn, Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version CVS: $Id: class.phpdocpdf.php 212211 2006-04-30 22:18:14Z cellog $ + * @filesource + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @since 1.2 + */ + +/** ezPdf libraries */ +include_once 'phpDocumentor/Converters/PDF/default/class.ezpdf.php'; +include_once 'phpDocumentor/Converters/PDF/default/ParserPDF.inc'; + +// define a class extension to allow the use of a callback to get the table of +// contents, and to put the dots in the toc +/** + * @package Converters + * @subpackage PDFdefault + */ +class phpdocpdf extends Cezpdf +{ + var $reportContents = array(); + var $indexContents = array(); + var $indents = array(); + var $font_dir = false; + var $set_pageNumbering = false; + var $converter; + var $_save = ''; + var $listType = 'ordered'; + var $_colorStack = array(); + + function phpdocpdf(&$pdfconverter,$fontdir,$paper='a4',$orientation='portrait') + { + Cezpdf::Cezpdf($paper,$orientation); + $this->converter = $pdfconverter; + $this->font_dir = $fontdir; + } + + /** + * This really should be in the parent class + */ + function getColor() + { + return $this->currentColour; + } + + function setColorArray($color) + { + $this->setColor($color['r'], $color['g'], $color['b']); + } + + /** + * Extract Pdfphp-format color from html-format color + * @return array + * @access private + */ + function _extractColor($htmlcolor) + { + preg_match('/#([a-fA-F0-9][a-fA-F0-9])([a-fA-F0-9][a-fA-F0-9])([a-fA-F0-9][a-fA-F0-9])/', $htmlcolor, $color); + if (count($color) != 4) + { + return false; + } + $red = hexdec($color[1]) / hexdec('FF'); + $green = hexdec($color[2]) / hexdec('FF'); + $blue = hexdec($color[3]) / hexdec('FF'); + return array('r' => $red, 'g' => $green, 'b' => $blue); + } + + function validHTMLColor($color) + { + return $this->_extractColor($htmlcolor); + } + + function setHTMLColor($color) + { + fancy_debug('toplevel setting to', $color); + $this->setColor($color['r'], $color['g'], $color['b']); + } + + function textcolor($info) + { + if ($info['status'] == 'start') + { + array_push($this->_colorStack, $this->getColor()); + $color = $this->_extractColor($info['p']); + if ($color) + { +// fancy_debug('set color to ',$info['p'],$color, $this->_colorStack); + $this->setColorArray($color); + } else + { + array_pop($this->_colorStack); + } + } elseif ($info['status'] == 'end') + { +// debug('unsetting'); + $this->setColorArray(array_pop($this->_colorStack)); + } + } + + function rf($info) + { + $tmp = $info['p']; + $lvl = $tmp[0]; + $lbl = rawurldecode(substr($tmp,1)); + $num=$this->ezWhatPageNumber($this->ezGetCurrentPageNumber()); + $this->reportContents[] = array($lbl,$num,$lvl ); + $this->addDestination('toc'.(count($this->reportContents)-1),'FitH',$info['y']+$info['height']); + } + + function index($info) + { + $res = explode('|||',rawurldecode($info['p'])); + $name = $res[0]; + $descrip = $res[1]; + $letter = $name[0]; + if ($letter == '$') $letter = $name[1]; + $this->indexContents[strtoupper($letter)][] = array($name,$descrip,$this->ezWhatPageNumber($this->ezGetCurrentPageNumber()),count($this->reportContents) - 1); + } + + function IndexLetter($info) + { + $letter = $info['p']; + $this->transaction('start'); + $ok=0; + while (!$ok){ + $thisPageNum = $this->ezPageCount; + $this->saveState(); + $this->setColor(0.9,0.9,0.9); + $this->filledRectangle($this->ez['leftMargin'],$this->y-$this->getFontHeight(18)+$this->getFontDecender(18),$this->ez['pageWidth']-$this->ez['leftMargin']-$this->ez['rightMargin'],$this->getFontHeight(18)); + $this->restoreState(); + $this->_ezText($letter,18,array('justification'=>'left')); + if ($this->ezPageCount==$thisPageNum){ + $this->transaction('commit'); + $ok=1; + } else { + // then we have moved onto a new page, bad bad, as the background colour will be on the old one + $this->transaction('rewind'); + $this->ezNewPage(); + } + } + } + + function dots($info) + { + // draw a dotted line over to the right and put on a page number + $tmp = $info['p']; + $lvl = $tmp[0]; + $lbl = substr($tmp,1); + $xpos = 520; + + switch($lvl) + { + case '1': + $size=16; + $thick=1; + break; + case '2': + $size=14; + $thick=1; + break; + case '3': + $size=12; + $thick=1; + break; + case '4': + $size=11; + $thick=1; + break; + } + + $adjust = 0; + if ($size != 16) $adjust = 1; + $this->saveState(); + $this->setLineStyle($thick,'round','',array(0,10)); + $this->line($xpos - (5*$adjust),$info['y'],$info['x']+5,$info['y']); + $this->restoreState(); + $this->addText($xpos - (5*$adjust)+5,$info['y'],$size,$lbl); + } + + /** + * @uses PDFParser extracts all meta-tags and processes text for output + */ + function ezText($text,$size=0,$options=array(),$test=0) + { + $text = str_replace("\t"," ",$text); + // paragraph breaks + $text = str_replace("<##P##>","\n ",$text); + $text = str_replace("<<c:i",'< <c:i',$text); + $text = str_replace("ilink>>","ilink> >",$text); + $this->_save .= $text; + } + + function setupTOC() + { + $parser = new PDFParser; + $parser->parse($this->_save,$this->font_dir,$this); + $this->_save = ''; + } + + function ezOutput($debug = false, $template) + { + if ($debug) return $this->_save; + $this->setupTOC(); + if ($template) + { + uksort($this->indexContents,'strnatcasecmp'); + $xpos = 520; + $z = 0; + foreach($this->indexContents as $letter => $contents) + { + if ($z++/50 == 0) {phpDocumentor_out('.');flush();} + uksort($this->indexContents[$letter],array($this->converter,'mystrnatcasecmp')); + } + $template->assign('indexcontents',$this->indexContents); + $this->ezText($template->fetch('index.tpl')); + $this->setupTOC(); + } + return parent::ezOutput(); + } + + function _ezText($text,$size=0,$options=array(),$test=0) + { + return parent::ezText($text,$size,$options,$test); + } + + function getYPlusOffset($offset) + { + return $this->y + $offset; + } + + function addMessage($message) + { + return parent::addMessage($message); + phpDocumentor_out($message."\n"); + flush(); + } + + function ezProcessText($text){ + // this function will intially be used to implement underlining support, but could be used for a range of other + // purposes + $text = parent::ezProcessText($text); + $text = str_replace(array('<UL>','</UL>','<LI>','</LI>','<OL>','</OL>','</ol>','<blockquote>','</blockquote>'), + array('<ul>','</ul>','<li>','</li>','<ol>','</ul>','</ul>',"<C:indent:20>\n","<C:indent:-20>"),$text); +// $text = str_replace("<ul>\n","<ul>",$text); + $text = preg_replace("/\n+\s*(<ul>|<ol>)/", "\n\\1", $text); + // some problemos fixed here - hack + $text = preg_replace('/<text [^]]+>/', '', $text); + $text = str_replace("<li>\n","<li>",$text); + $text = preg_replace("/\n+\s*<li>/", "<li>", $text); + $text = str_replace("<mybr>","\n",$text); + $text = str_replace('</li></ul>','</ul>',$text); + $text = preg_replace("/^\n(\d+\s+.*)/", '\\1', $text); + $search = array('<ul>','</ul>','<ol>','<li>','</li>'); + $replace = array("<C:indent:20>\n","\n<C:indent:-20>","\n<C:indent:20:ordered>\n",'<C:bullet>',"\n"); + $text = str_replace($search,$replace,$text); + $text = preg_replace("/([^\n])<C:bullet/", "\\1\n<C:bullet", $text); + if (false) { + $fp = @fopen("C:/Documents and Settings/Owner/Desktop/pdfsourceorig.txt",'a'); + if ($fp) + { + fwrite($fp, $text); + fclose($fp); + } + } + return $text; + } + + function indent($info) + { + $stuff = explode(':', $info['p']); + $margin = $stuff[0]; + if (count($stuff) - 1) + { + $this->listType = 'ordered'; + $this->listIndex = 1; + } else + { + if ($margin > 0) + { + $this->listIndex = 1; + } + $this->listType = 'unordered'; + } + $this->ez['leftMargin'] += $margin; + } + + /** + * @author Murray Shields + */ + function bullet($Data) + { + if ($this->listType == 'ordered') + { + return $this->orderedBullet($Data); + } + $D = abs($Data["decender"]); + $X = $Data["x"] - ($D * 2) - 10; + $Y = $Data["y"] + ($D * 1.5); + $this->setLineStyle($D, "butt", "miter", array()); + $this->setColor(0,0,0); + $this->ellipse($X, $Y, 1); + } + + function orderedBullet($info) + { + $this->addText($info['x']-20, $info['y']-1, 10, $this->listIndex++ . '.'); + } + + function ezNewPage($debug=false) + { + parent::ezNewPage(); + if (!$this->set_pageNumbering) + { + $template = $this->converter->newSmarty(); + $parser = new PDFParser; + $parser->parse($template->fetch('pagenumbering.tpl'),$this->font_dir,$this); + } + $this->set_pageNumbering = true; + } +} +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/options.ini b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/options.ini new file mode 100755 index 00000000..fd9c6414 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/options.ini @@ -0,0 +1,431 @@ +preservedocbooktags = false + +;; used to highlight the {@source} inline tag +[highlightSourceTokens] +;; format: +;; T_CONSTANTNAME = open +;; /T_CONSTANTNAME = close +T_FUNCTION = <b><c:textcolor:#0000FF> +/T_FUNCTION = </c:textcolor></b> +T_CLONE = <b><c:textcolor:#0000FF> +/T_CLONE = </c:textcolor></b> +T_HALT_COMPILER = <b><c:textcolor:#0000FF> +/T_HALT_COMPILER = </c:textcolor></b> +T_VARIABLE = <b><i><c:textcolor:#000080> +/T_VARIABLE = </c:textcolor></i></b> +T_CONSTANT_ENCAPSED_STRING = <i> +/T_CONSTANT_ENCAPSED_STRING = </i> +T_COMMENT = <i><c:textcolor:#339999> +/T_COMMENT = </c:textcolor></i> +T_OBJECT_OPERATOR = <b> +/T_OBJECT_OPERATOR = </b> +T_RETURN = <b><c:textcolor:#0000FF> +/T_RETURN = </c:textcolor></b> +T_SWITCH = <b><c:textcolor:#0000FF> +/T_SWITCH = </c:textcolor></b> +T_STATIC = <b><c:textcolor:#0000FF> +/T_STATIC = </c:textcolor></b> +T_IF = <b><c:textcolor:#0000FF> +/T_IF = </c:textcolor></b> +T_FOREACH = <b><c:textcolor:#0000FF> +/T_FOREACH = </c:textcolor></b> +T_FOR = <b><c:textcolor:#0000FF> +/T_FOR = </c:textcolor></b> +T_WHILE = <b><c:textcolor:#0000FF> +/T_WHILE = </c:textcolor></b> +T_DO = <b><c:textcolor:#0000FF> +/T_DO = </c:textcolor></b> +T_CLASS = <b><c:textcolor:#0000FF> +/T_CLASS = </c:textcolor></b> +T_EXTENDS = <b><c:textcolor:#0000FF> +/T_EXTENDS = </c:textcolor></b> +T_VAR = <b><c:textcolor:#0000FF> +/T_VAR = </c:textcolor></b> +T_GLOBAL = <b><c:textcolor:#0000FF> +/T_GLOBAL = </c:textcolor></b> +T_ELSE = <b><c:textcolor:#0000FF> +/T_ELSE = </c:textcolor></b> +T_ELSEIF = <b><c:textcolor:#0000FF> +/T_ELSEIF = </c:textcolor></b> +T_NEW = <b><c:textcolor:#0000FF> +/T_NEW = </c:textcolor></b> +T_CONSTANT_ENCAPSED_STRING = <c:textcolor:#339999> +/T_CONSTANT_ENCAPSED_STRING = </c:textcolor> +T_STRING_VARNAME = <c:textcolor:#339999> +/T_STRING_VARNAME = </c:textcolor> +T_INCLUDE = <b><c:textcolor:#0000FF> +/T_INCLUDE = </c:textcolor></b> +T_INCLUDE_ONCE = <b><c:textcolor:#0000FF> +/T_INCLUDE_ONCE = </c:textcolor></b> +T_REQUIRE = <b><c:textcolor:#0000FF> +/T_REQUIRE = </c:textcolor></b> +T_REQUIRE_ONCE = <b><c:textcolor:#0000FF> +/T_REQUIRE_ONCE = </c:textcolor></b> +T_DNUMBER = <c:textcolor:#53AC46> +/T_DNUMBER = </c:textcolor> +T_LNUMBER = <c:textcolor:#53AC46> +/T_LNUMBER = </c:textcolor> +T_AS = <b><c:textcolor:#0000FF> +/T_AS = </c:textcolor></b> +T_BREAK = <b><c:textcolor:#0000FF> +/T_BREAK = </c:textcolor></b> +T_CASE = <b><c:textcolor:#0000FF> +/T_CASE = </c:textcolor></b> +T_CONTINUE = <b><c:textcolor:#0000FF> +/T_CONTINUE = </c:textcolor></b> +T_DECLARE = <b><c:textcolor:#0000FF> +/T_DECLARE = </c:textcolor></b> +T_DEFAULT = <b><c:textcolor:#0000FF> +/T_DEFAULT = </c:textcolor></b> +T_ENDDECLARE = <b><c:textcolor:#0000FF> +/T_ENDDECLARE = </c:textcolor></b> +T_ENDFOR = <b><c:textcolor:#0000FF> +/T_ENDFOR = </c:textcolor></b> +T_ENDFOREACH = <b><c:textcolor:#0000FF> +/T_ENDFOREACH = </c:textcolor></b> +T_ENDSWITCH = <b><c:textcolor:#0000FF> +/T_ENDSWITCH = </c:textcolor></b> +T_ENDWHILE = <b><c:textcolor:#0000FF> +/T_ENDWHILE = </c:textcolor></b> +T_EXIT = <b><c:textcolor:#0000FF> +/T_EXIT = </c:textcolor></b> +T_STRING = <c:textcolor:#FF8000> +/T_STRING = </c:textcolor> + +[highlightDocBlockSourceTokens] +;; this is for docblock tokens, using by phpDocumentor_HighlightParser +;; tagphptype is for "string" in @param string description, for example +docblock = <i><c:textcolor:#8080FF> +/docblock = </c:textcolor></i> +tagphptype = <i><c:textcolor:#A428CC> +/tagphptype = </c:textcolor></i> +tagvarname = <b><c:textcolor:#A428CC> +/tagvarname = </c:textcolor></b> +coretag = <c:textcolor:#A428CC> +/coretag = </c:textcolor> +tag = <c:textcolor:#A428CC> +/tag = </c:textcolor> +inlinetag = <i><c:textcolor:#A428CC> +/inlinetag = </c:textcolor></i> +internal = <i><c:textcolor:#808080> +/internal = </c:textcolor></i> +closetemplate = <c:textcolor:#5BACEE> +/closetemplate = </c:textcolor> +docblocktemplate = <c:textcolor:#5BACEE> +/docblocktemplate = </c:textcolor> + +[highlightSource] +;; this is for highlighting things that aren't tokens like "&" +;; format: +;; word = open +;; /word = close +& = <b> +/& = </b> +[ = <b> +/[ = </b> +] = <b> +/] = </b> +! = <b> +/! = </b> +";" = <b> +/; = </b> +( = <b> +/( = </b> +) = <b> +/) = </b> +, = <b> +/, = </b> +{ = <b> +/{ = </b> +} = <b> +/} = </b> +""" = <c:textcolor:#339999> +/" = </c:textcolor> + +[highlightTutorialSourceTokens] +;; this is for XML DocBook-based tutorials, highlighted by phpDocumentor_TutorialHighlightParser +;; <tag> +opentag = <c:textcolor:#8080FF> +/opentag = </c:textcolor> +;; </tag> +closetag = <c:textcolor:#8080FF> +/closetag = </c:textcolor> +;; <tag attribute="value"> +attribute = <c:textcolor:#A428CC> +/attribute = </c:textcolor> +;; <tag attribute="value"> +attributevalue = <c:textcolor:#5BACEE> +/attributevalue = </c:textcolor> +;; &entity; +entity = <b> +/entity = </b> +;; <!-- comment --> +comment = <i> +/comment = </i> +;; {@inline tag} +itag = <b><i> +/itag = </b></i> + +[desctranslate] +ul = <ul> +/ul = </ul> +ol = <ol> +/ol = </ol> +li = <li> +/li = </li> +code = </text><text size="8"><font face="Courier" /> +/code = </text><text size="10"><font face="Helvetica" /> +var = <i> +/var = </i> +samp = <font face="Courier" /><i> +/samp = </i><font face="Helvetica" /> +kbd = <font face="Courier" /><b> +/kbd = </b><font face="Helvetica" /> +pre = +/pre = +p = +/p = "\n\n" +b = <b> +/b = </b> +i = <i> +/i = </i> +br = "\n" + +[ppage] +;; this is the DocBook package page translation section. All DocBook tags +;; that have a corresponding html tag must be listed here +;; +;; examples: +;; 1) +;; tagname = newtagname +;; +;; This is the simplest case, where all attributes will be added into the +;; starting tag and the ending tag will be html/xml style </tranlatedtagname> +;; <tagname></tagname> becomes <newtagname></newtagname> and +;; <tagname attr="value"></tagname> becomes +;; <newtagname attr="value"></newtagname> +;; +;; 2) +;; tagname = newtagname +;; tagname->attr = newattrname +;; +;; in this case, everything will be like the first case, except tags like: +;; <tagname attr="value"></tagname> will become +;; <newtagname newattrname="value"></newtagname> +;; +;; 3) +;; tagname = newtagname +;; tagname->attr = newattrname +;; tagname->attr+value = newvalue +;; +;; in this case, the value is also translated to another. This can be useful +;; for instances such as focus="middle" changing to align="center" or something +;; of that nature. +;; <tagname attr="value"></tagname> will become +;; <newtagname newattrname="newvalue"></newtagname> +;; +;; 4) +;; tagname = newtagname +;; tagname!attr = dummy +;; +;; here, the attribute will be ignored. dummy is not used and may be any value +;; <tagname attr="value"></tagname> will become +;; <newtagname></newtagname> +;; +;; 5) +;; tagname = newtagname +;; tagname! = dummy +;; +;; here, all attributes will be ignored. dummy is not used and may be any value +;; <tagname attr1="value" attr2="foo"></tagname> will become +;; <newtagname></newtagname> +;; +;; 6) +;; $attr$my_attribute = newattrname +;; +;; tagname = newtagname +;; +;; in this case, all occurences of my_attribute in any tag will be changed to +;; newattrname. This is useful for changing things like role="php" to +;; class="php," for example. Note that the text "$attr$" MUST be on the line +;; start for phpDocumentor to recognize it. +;; +;; 7) +;; &entity; = translation text +;; " = " +;; " = """ +;; < = < +;; +;; Use this to control translation of entities to their appropriate values + + = " " +" = """ +” = """ +“ = """ +& = & +< = < +> = > +© = © + +author = <i> +author! +/author = "</i>\n" + +authorgroup = <text size="10"><b>Authors:</b> +/authorgroup = </text> +authorgroup! + +blockquote = blockquote +blockquote! + +authorblurb = blockquote +authorblurb! + +caution = "\n<b>Caution</b>\n<blockquote>" +/caution = "</blockquote>\n" +caution! + +command = b +command! + +copyright = i +copyright! + +emphasis = b +emphasis! + +example = "<b>Example:</b>\n<C:indent:20>\n" +/example = "\n<C:indent:-20>\n" +example! + +formalpara = " " +/formalpara = "\n\n" +formalpara! + +graphic = pdffunction:ezImage +graphic/ = 1 + +important = u +important! + +informalequation = blockquote +informalequation! + +inlineequation = i +inlineequation! + +itemizedlist = ul +itemizedlist! + +literal = <font face="Courier" /> +/literal = <font face="Helvetica" /> +literal! + +option = " " +/option = +option! + +listitem = li +listitem! + +orderedlist = ol +orderedlist! + +para = +/para = "\n\n" +para! + +programlisting = "\n</text><text size="8"><font face="Courier" />" +/programlisting = "</text><text size="10">\n<font face="Helvetica" />" +programlisting! + +refsect1 = "<text size="10" justification="left">" +/refsect1 = "\n</text>" +refsect1! + +refsect2 = "<text size="10" justification="left">" +/refsect2 = "\n</text>" +refsect2! + +refsect3 = "<text size="10" justification="left">" +/refsect3 = "\n</text>" +refsect3! + +refpurpose = <text size="13" justification="center"><i> +/refpurpose = "</i>\n</text>" +refpurpose! + +simpara = "<text size="10" justification="left"> " +/simpara = "</text>" +simpara! + +warning = "<b>Warning:</b>\n<blockquote>" +/warning = "</blockquote>\n" +warning! + +;; now begins the attributes that should be tags in cdata +[$attr$id] +open = <pdffunction:addDestination arg=" +close = " arg="FitH" arg=$this->y /> +cdata! = true +quotevalues = true +separator = "=" +;separateall = true +$id = id + +;; now begins the sections that deal with <title> +[refentry_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = </text><text size="20" justification="centre"><b> +close = "\n</b></text><text size="10" justification="left">" + +[refsect1_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = </text><text size="15" justification="centre"><b> +close = "\n</b></text><text size="10" justification="left">" + +[refsect2_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = </text><text size="13" justification="centre"><b> +close = "\n</b></text><text size="10" justification="left">" + +[refsect3_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = </text><text size="11" justification="centre"><i> +close = "\n</i></text><text size="10" justification="left">" + +[para_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = </text><text size="11" justification="left"><b> +close = "\n</b></text><text size="10" justification="left">" + +[formalpara_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = </text><text size="11" justification="centre"><b> +close = "\n</b></text><text size="10" justification="left">" + +[example_title] +;tag_attr = true +;attr_name = title +cdata_start = true +;cdata_end = true +open = </text><text size="11" justification="centre"> +close = "\n</text><text size="10" justification="left">" diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/appendix_title_page.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/appendix_title_page.tpl new file mode 100755 index 00000000..a18b32b6 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/appendix_title_page.tpl @@ -0,0 +1,4 @@ +<newpage /> +<text size="26" justification="centre"><C:rf:1Appendices><b>Appendices</b> +</text> +<newpage /> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/class.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/class.tpl new file mode 100755 index 00000000..17db4f0a --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/class.tpl @@ -0,0 +1,12 @@ +{capture name="clink"}{if $is_interface}Interface{else}Class{/if} {$name}{/capture} +{capture name="cindex"}{$name}|||{$sdesc}{/capture} +{capture name="classeslink"}Package {$package} Classes{/capture} +{if $plink}{capture name="plink"}Package {$package}{/capture}{/if} +{if $includeheader}{include file="newpackage_header.tpl" isclass=true}{/if} +<text size="11"> + + + +</text> +<pdffunction:addDestination arg="{$dest}" arg="FitH" arg=$this->y /> +<text size="20" justification="centre">{if $is_interface}Interface{else}Class{/if} {$name} <i></text><text size="11" justification="centre">[line {if $slink}{$slink}{else}{$linenumber}{/if}]</i><C:rf:2{$smarty.capture.clink|rawurlencode}><C:index:{$smarty.capture.cindex|rawurlencode}></text> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/classtree.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/classtree.tpl new file mode 100755 index 00000000..42063dc2 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/classtree.tpl @@ -0,0 +1,11 @@ +{* Class Trees template for the PDF Converter *} +<text size="26" justification="centre"><C:rf:2Appendix A - Class Trees>Appendix A - Class Trees +</text> +{section name=classtrees loop=$trees} +<text size="16" justification="centre"><C:rf:3{$trees[classtrees].package}>Package {$trees[classtrees].package} +</text> +{section name=trees loop=$trees[classtrees].trees} +<text size="12"><C:IndexLetter:{$trees[classtrees].trees[trees].class}> +{$trees[classtrees].trees[trees].class_tree}</text> +{/section} +{/section}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/const.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/const.tpl new file mode 100644 index 00000000..0236dfd0 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/const.tpl @@ -0,0 +1,7 @@ +{capture name="vlink"}Class Constant {$name}{/capture} +{capture name="vindex"}{$class}::{$name}|||{$sdesc}{/capture} +<pdffunction:addDestination arg="{$dest}" arg="FitH" arg=$this->y /> +<text size="10" justification="left"><b>{$class}::{$name}</b> +<C:indent:25> + = {$value} <i>[line {if $slink}{$slink}{else}{$linenumber}{/if}]</i><C:rf:3{$smarty.capture.vlink|rawurlencode}><C:index:{$smarty.capture.vindex|rawurlencode}> +<C:indent:-25></text> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/define.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/define.tpl new file mode 100755 index 00000000..8ae570cb --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/define.tpl @@ -0,0 +1,4 @@ +{capture name="dlink"}Define {$name}{/capture} +{capture name="dindex"}{$name}|||{$sdesc}{/capture} +<pdffunction:addDestination arg="{$dest}" arg="FitH" arg=$this->y /> +<text size="10" justification="left">{$name} = {$value} <i>[line {if $slink}{$slink}{else}{$linenumber}{/if}]</i><C:rf:3{$smarty.capture.dlink|rawurlencode}><C:index:{$smarty.capture.dindex|rawurlencode}></text> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/docblock.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/docblock.tpl new file mode 100755 index 00000000..8cc8d004 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/docblock.tpl @@ -0,0 +1,10 @@ +{if $sdesc}<text size="12" justification="full" left="10"><C:indent:25><b>{$sdesc}</b> +<C:indent:-25>{$desc} +</text>{/if} +{if $tags} +<text size="10" left="15"> +<C:indent:40> +<ul>{section name=tags loop=$tags}<li><b>{$tags[tags].keyword}</b> {$tags[tags].data}</li> +{/section}</ul> +<C:indent:-40></text> +{/if} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/examplesource.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/examplesource.tpl new file mode 100755 index 00000000..8da4c782 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/examplesource.tpl @@ -0,0 +1,5 @@ +<text size="15" justification="centre"><C:rf:3example: {$title}>{$title} +</text> +<font face="Courier" /> +<text size="8">{$source}</text> +<font face="Helvetica" /> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/filesource.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/filesource.tpl new file mode 100755 index 00000000..bbe40d41 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/filesource.tpl @@ -0,0 +1,11 @@ +{capture name="gindex"}{$name}|||Source code{/capture} +<newpage /> +<pdffunction:addDestination arg="{$dest}" arg="FitH" arg=$this->y /> +<text size="26" justification="centre"><C:index:{$smarty.capture.gindex|rawurlencode}><C:rf:3source code: {$name}>File Source for {$name} +</text> +<text size="12"><i>Documentation for this file is available at {$docs}</i> + +</text> +<font face="Courier" /> +<text size="8">{$source}</text> +<font face="Helvetica" /> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/footer.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/footer.tpl new file mode 100755 index 00000000..56994872 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/footer.tpl @@ -0,0 +1,11 @@ +<pdffunction:openObject return="all" /> +<pdffunction:saveState /> +<pdffunction:setStrokeColor arg="0" arg="0" arg="0" arg="1" /> +<pdffunction:line arg="20" arg="40" arg="578" arg="40" /> +<pdffunction:line arg="20" arg="822" arg="578" arg="822" /> +<pdffunction:addText arg="50" arg="34" arg="6" arg="Generated by phpDocumentor v{$phpdocversion} http://www.phpdoc.org - http://pear.php.net/package/PhpDocumentor - http://www.sourceforge.net/projects/phpdocu" /> +<pdffunction:restoreState /> +<pdffunction:closeObject /> +{* note that object can be told to appear on just odd or even pages by changing +'all' to 'odd' or 'even'. *} +<pdffunction:addObject arg=$all arg="all" />
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/function.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/function.tpl new file mode 100755 index 00000000..a5595dff --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/function.tpl @@ -0,0 +1,4 @@ +{capture name="flink"}Function {$intricatefunctioncall.name}{/capture} +{capture name="findex"}{$intricatefunctioncall.name}()|||{$sdesc}{/capture} +<pdffunction:addDestination arg="{$dest}" arg="FitH" arg=$this->y /> +<text size="10" justification="left"><i>{$return}</i> function {$intricatefunctioncall.name}({section name=params loop=$intricatefunctioncall.params}{if $smarty.section.params.index > 0}, {/if}{if $intricatefunctioncall.params[params].hasdefault}[{/if}{$intricatefunctioncall.params[params].name}{if $intricatefunctioncall.params[params].hasdefault} = {$intricatefunctioncall.params[params].default}]{/if}{/section}) <i>[line {if $slink}{$slink}{else}{$linenumber}{/if}]</i><C:rf:3{$smarty.capture.flink|rawurlencode}><C:index:{$smarty.capture.findex|rawurlencode}></text> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/global.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/global.tpl new file mode 100755 index 00000000..61852043 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/global.tpl @@ -0,0 +1,7 @@ +{capture name="glink"}Global Variable {$name}{/capture} +{capture name="gindex"}global {$name}|||{$sdesc}{/capture} +<pdffunction:addDestination arg="{$dest}" arg="FitH" arg=$this->y /> +<text size="10" justification="left"><b>{$name}</b> +<C:indent:25> +<i>{$type}</i> = {$value} <i>[line {if $slink}{$slink}{else}{$linenumber}{/if}]</i><C:rf:3{$smarty.capture.glink|rawurlencode}><C:index:{$smarty.capture.gindex|rawurlencode}> +<C:indent:-25></text> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/include.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/include.tpl new file mode 100755 index 00000000..399f04d8 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/include.tpl @@ -0,0 +1,3 @@ +<text size="10" justification="left">{$name} <b>{$value}</b> <i>[line {if $slink}{$slink}{else}{$linenumber}{/if}]</i> + +</text>
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/index.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/index.tpl new file mode 100755 index 00000000..03961713 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/index.tpl @@ -0,0 +1,14 @@ +<pdffunction:ezInsertMode arg="0" /> +<newpage /> +<text size="26" justification="centre"><C:rf:1Index>Index +</text> +{foreach item="contents" key="letter" from=$indexcontents} +<text size="26"><C:IndexLetter:{$letter}></text> +{foreach item="arr" from=$contents} +<text size="11" aright="520"><c:ilink:toc{$arr[3]}>{$arr[0]}</c:ilink><C:dots:4{$arr[2]}></text> +{if $arr[1]} +<text size="11" left="50"><i>{$arr[1]}</i></text> +{/if} +{/foreach} +{/foreach} + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/media/logo.jpg b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/media/logo.jpg Binary files differnew file mode 100644 index 00000000..c9924091 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/media/logo.jpg diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/method.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/method.tpl new file mode 100755 index 00000000..dcc72f9f --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/method.tpl @@ -0,0 +1,4 @@ +{capture name="mlink"}{if $constructor}Constructor {else}Method {/if}{$intricatefunctioncall.name}{/capture} +{capture name="mindex"}{if $constructor}constructor {/if}{$class}::{$intricatefunctioncall.name}()|||{$sdesc}{/capture} +<pdffunction:addDestination arg="{$dest}" arg="FitH" arg=$this->y /> +<text size="10" justification="left">{if $constructor}Constructor {else}{/if}<i>{$return}</i> function {$class}::{$intricatefunctioncall.name}({section name=params loop=$intricatefunctioncall.params}{if $smarty.section.params.index > 0}, {/if}{if $intricatefunctioncall.params[params].hasdefault}[{/if}{$intricatefunctioncall.params[params].name}{if $intricatefunctioncall.params[params].hasdefault} = {$intricatefunctioncall.params[params].default}]{/if}{/section}) <i>[line {if $slink}{$slink}{else}{$linenumber}{/if}]</i><C:rf:3{$smarty.capture.mlink|rawurlencode}><C:index:{$smarty.capture.mindex|rawurlencode}></text> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/newpackage_header.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/newpackage_header.tpl new file mode 100755 index 00000000..c12c3e5d --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/newpackage_header.tpl @@ -0,0 +1,6 @@ +<newpage /> +{if $ppage}{include file="packagepage.tpl" package=$package plink=$smarty.capture.plink ppage=$ppage}{/if} +<text size="26" justification="centre">Package {$package} {if $isclass}Classes{else}Procedural Elements{/if}<C:rf:1{$smarty.capture.classeslink|rawurlencode}> + + +</text> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/packagepage.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/packagepage.tpl new file mode 100755 index 00000000..94accf30 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/packagepage.tpl @@ -0,0 +1,5 @@ +<text size="26" justification="centre">Package {$package}<C:rf:1{$plink|rawurlencode}> + + +</text> +<text size="12">{$ppage}</text>
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/page.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/page.tpl new file mode 100755 index 00000000..73d33c1c --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/page.tpl @@ -0,0 +1,7 @@ +{capture name="pagelink"}{$name}{/capture} +{capture name="pageindex"}{$name}|||{$sdesc}{/capture} +{capture name="classeslink"}Package {$package} Procedural Elements{/capture} +<newpage /> +{if $includeheader}{include file="newpackage_header.tpl" isclass=false}{/if} +<pdffunction:addDestination arg="{$dest}" arg="FitH" arg=$this->y /> +<text size="18" justification="center">{$name}<C:rf:2{$smarty.capture.pagelink|rawurlencode}><C:index:{$smarty.capture.pageindex|rawurlencode}></text>
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/pagenumbering.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/pagenumbering.tpl new file mode 100755 index 00000000..bb260c38 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/pagenumbering.tpl @@ -0,0 +1 @@ +<pdffunction:ezStartPageNumbers x="500" y="28" size="10" pos="" pattern="Page {ldelim}PAGENUM{rdelim} of {ldelim}TOTALPAGENUM{rdelim}" num="1" /> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/params.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/params.tpl new file mode 100755 index 00000000..64be39c3 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/params.tpl @@ -0,0 +1,4 @@ +{if count($params)}<text size="10" left="15"><b><i>Function Parameters:</i></b> +</text><text size="11" left="20"><ul>{section name=params loop=$params} +<li><i>{$params[params].type}</i> <b>{$params[params].name}</b> {$params[params].description}</li> +{/section}</ul></text>{/if} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/ric.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/ric.tpl new file mode 100755 index 00000000..427e0afb --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/ric.tpl @@ -0,0 +1,7 @@ +{capture name="tlink"}{$name}{/capture} +{capture name="tindex"}{$name}|||{/capture} +<text size="20" justification="centre"><C:rf:3{$smarty.capture.tlink|rawurlencode}><C:index:{$smarty.capture.tindex|rawurlencode}>{$name} + +</text> +<text size="10" justification="left"> +{$contents|htmlentities}</text>
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/ric_title_page.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/ric_title_page.tpl new file mode 100755 index 00000000..5a604b7f --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/ric_title_page.tpl @@ -0,0 +1,5 @@ +<newpage /> +{* Class Trees template for the PDF Converter *} +<text size="26" justification="centre"><C:rf:2Appendix B - README/CHANGELOG/INSTALL>Appendix B - README/CHANGELOG/INSTALL +</text> +<newpage /> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/source_loop.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/source_loop.tpl new file mode 100755 index 00000000..7d85c2e3 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/source_loop.tpl @@ -0,0 +1,8 @@ +{* Source Code template for the PDF Converter *} +{foreach from=$source item=code id=$package} +<text size="16" justification="centre"><C:rf:3Package {$package}>Package {$package} +</text> +{section name=code loop=$code} +{$code[code]} +{/section} +{/foreach}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/source_title_page.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/source_title_page.tpl new file mode 100755 index 00000000..42f868f7 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/source_title_page.tpl @@ -0,0 +1,5 @@ +<newpage /> +{* Class Trees template for the PDF Converter *} +<text size="26" justification="centre"><C:rf:2Appendix C - Source Code>Appendix C - Source Code +</text> +<newpage /> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/title_page.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/title_page.tpl new file mode 100755 index 00000000..91d50cfc --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/title_page.tpl @@ -0,0 +1,7 @@ +<pdffunction:ezSetDy arg="-100" /> +<text size="30" justification="centre"><b>{$title}</b></text> +<pdffunction:ezSetDy arg="-150" /> +{if $logo} +<pdffunction:getYPlusOffset return="newy" offset="0" /> +<pdffunction:addJpegFromFile arg="{$logo}" x="250" y=$newy /> +{/if}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/toc.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/toc.tpl new file mode 100755 index 00000000..e632ad16 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/toc.tpl @@ -0,0 +1,15 @@ +<pdffunction:ezStopPageNumbers arg="1" arg="1" /> +<pdffunction:ezInsertMode arg="1" arg="1" arg="after" /> +<newpage /> +<text size="26" justification="centre">Contents +</text> +{assign var="xpos" value="520"} +{foreach item=v key=k from=$contents} +{if $v[2] == '1'} +<text size="16" aright="{$xpos}"><c:ilink:toc{$k}>{$v[0]}</c:ilink><C:dots:3{$v[1]}></text> +{elseif $v[2] == '2'} +<text size="12" aright="{$xpos}" left="30"><c:ilink:toc{$k}>{$v[0]}</c:ilink><C:dots:3{$v[1]}></text> +{elseif $v[2] == '3'} +<text size="12" aright="{$xpos}" left="40"><c:ilink:toc{$k}>{$v[0]}</c:ilink><C:dots:3{$v[1]}></text> +{/if} +{/foreach} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/todolist.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/todolist.tpl new file mode 100755 index 00000000..2652c1c6 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/todolist.tpl @@ -0,0 +1,17 @@ +<newpage /> +{* Todo List template for the PDF Converter *} +<text size="26" justification="centre"><C:rf:2Appendix D - Todo List>Appendix D - Todo List +</text> +{foreach from=$todos key=todopackage item=todo} +<text size="16" justification="centre">In Package {$todopackage} + +</text> +{section name=todo loop=$todo} +<text size="12">In <b>{$todo[todo].link}</b>: +</text> +<text size="11"><ul>{section name=t loop=$todo[todo].todos} + <li>{$todo[todo].todos[t]}</li>{/section} +</ul> +</text> +{/section} +{/foreach}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/tutorial.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/tutorial.tpl new file mode 100755 index 00000000..c5f8a2dc --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/tutorial.tpl @@ -0,0 +1,7 @@ +{capture name="tlink"}{$title|strip_tags}{/capture} +{capture name="tindex"}{$title|strip_tags}|||{/capture} +{capture name="dest"}tutorial{$package}{$subpackage}{$element->name}{/capture} +<newpage /> +<pdffunction:addDestination arg="{$smarty.capture.dest|urlencode}" arg="FitH" arg=$this->y /> +<text size="26" justification="centre">{$title}<C:rf:{if $hasparent}3{elseif $child}2{else}1{/if}{$smarty.capture.tlink|rawurlencode}><C:index:{$smarty.capture.tindex|rawurlencode}> +</text>{$contents}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/var.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/var.tpl new file mode 100755 index 00000000..0a9fe927 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/var.tpl @@ -0,0 +1,7 @@ +{capture name="vlink"}Var {$name}{/capture} +{capture name="vindex"}{$class}::{$name}|||{$sdesc}{/capture} +<pdffunction:addDestination arg="{$dest}" arg="FitH" arg=$this->y /> +<text size="10" justification="left"><b>{$class}::{$name}</b> +<C:indent:25> +<i>{$type}</i> = {$value} <i>[line {if $slink}{$slink}{else}{$linenumber}{/if}]</i><C:rf:3{$smarty.capture.vlink|rawurlencode}><C:index:{$smarty.capture.vindex|rawurlencode}> +<C:indent:-25></text> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/Courier-Bold.afm b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/Courier-Bold.afm new file mode 100755 index 00000000..eb80542b --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/Courier-Bold.afm @@ -0,0 +1,342 @@ +StartFontMetrics 4.1 +Comment Copyright (c) 1989, 1990, 1991, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved. +Comment Creation Date: Mon Jun 23 16:28:00 1997 +Comment UniqueID 43048 +Comment VMusage 41139 52164 +FontName Courier-Bold +FullName Courier Bold +FamilyName Courier +Weight Bold +ItalicAngle 0 +IsFixedPitch true +CharacterSet ExtendedRoman +FontBBox -113 -250 749 801 +UnderlinePosition -100 +UnderlineThickness 50 +Version 003.000 +Notice Copyright (c) 1989, 1990, 1991, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved. +EncodingScheme AdobeStandardEncoding +CapHeight 562 +XHeight 439 +Ascender 629 +Descender -157 +StdHW 84 +StdVW 106 +StartCharMetrics 315 +C 32 ; WX 600 ; N space ; B 0 0 0 0 ; +C 33 ; WX 600 ; N exclam ; B 202 -15 398 572 ; +C 34 ; WX 600 ; N quotedbl ; B 135 277 465 562 ; +C 35 ; WX 600 ; N numbersign ; B 56 -45 544 651 ; +C 36 ; WX 600 ; N dollar ; B 82 -126 519 666 ; +C 37 ; WX 600 ; N percent ; B 5 -15 595 616 ; +C 38 ; WX 600 ; N ampersand ; B 36 -15 546 543 ; +C 39 ; WX 600 ; N quoteright ; B 171 277 423 562 ; +C 40 ; WX 600 ; N parenleft ; B 219 -102 461 616 ; +C 41 ; WX 600 ; N parenright ; B 139 -102 381 616 ; +C 42 ; WX 600 ; N asterisk ; B 91 219 509 601 ; +C 43 ; WX 600 ; N plus ; B 71 39 529 478 ; +C 44 ; WX 600 ; N comma ; B 123 -111 393 174 ; +C 45 ; WX 600 ; N hyphen ; B 100 203 500 313 ; +C 46 ; WX 600 ; N period ; B 192 -15 408 171 ; +C 47 ; WX 600 ; N slash ; B 98 -77 502 626 ; +C 48 ; WX 600 ; N zero ; B 87 -15 513 616 ; +C 49 ; WX 600 ; N one ; B 81 0 539 616 ; +C 50 ; WX 600 ; N two ; B 61 0 499 616 ; +C 51 ; WX 600 ; N three ; B 63 -15 501 616 ; +C 52 ; WX 600 ; N four ; B 53 0 507 616 ; +C 53 ; WX 600 ; N five ; B 70 -15 521 601 ; +C 54 ; WX 600 ; N six ; B 90 -15 521 616 ; +C 55 ; WX 600 ; N seven ; B 55 0 494 601 ; +C 56 ; WX 600 ; N eight ; B 83 -15 517 616 ; +C 57 ; WX 600 ; N nine ; B 79 -15 510 616 ; +C 58 ; WX 600 ; N colon ; B 191 -15 407 425 ; +C 59 ; WX 600 ; N semicolon ; B 123 -111 408 425 ; +C 60 ; WX 600 ; N less ; B 66 15 523 501 ; +C 61 ; WX 600 ; N equal ; B 71 118 529 398 ; +C 62 ; WX 600 ; N greater ; B 77 15 534 501 ; +C 63 ; WX 600 ; N question ; B 98 -14 501 580 ; +C 64 ; WX 600 ; N at ; B 16 -15 584 616 ; +C 65 ; WX 600 ; N A ; B -9 0 609 562 ; +C 66 ; WX 600 ; N B ; B 30 0 573 562 ; +C 67 ; WX 600 ; N C ; B 22 -18 560 580 ; +C 68 ; WX 600 ; N D ; B 30 0 594 562 ; +C 69 ; WX 600 ; N E ; B 25 0 560 562 ; +C 70 ; WX 600 ; N F ; B 39 0 570 562 ; +C 71 ; WX 600 ; N G ; B 22 -18 594 580 ; +C 72 ; WX 600 ; N H ; B 20 0 580 562 ; +C 73 ; WX 600 ; N I ; B 77 0 523 562 ; +C 74 ; WX 600 ; N J ; B 37 -18 601 562 ; +C 75 ; WX 600 ; N K ; B 21 0 599 562 ; +C 76 ; WX 600 ; N L ; B 39 0 578 562 ; +C 77 ; WX 600 ; N M ; B -2 0 602 562 ; +C 78 ; WX 600 ; N N ; B 8 -12 610 562 ; +C 79 ; WX 600 ; N O ; B 22 -18 578 580 ; +C 80 ; WX 600 ; N P ; B 48 0 559 562 ; +C 81 ; WX 600 ; N Q ; B 32 -138 578 580 ; +C 82 ; WX 600 ; N R ; B 24 0 599 562 ; +C 83 ; WX 600 ; N S ; B 47 -22 553 582 ; +C 84 ; WX 600 ; N T ; B 21 0 579 562 ; +C 85 ; WX 600 ; N U ; B 4 -18 596 562 ; +C 86 ; WX 600 ; N V ; B -13 0 613 562 ; +C 87 ; WX 600 ; N W ; B -18 0 618 562 ; +C 88 ; WX 600 ; N X ; B 12 0 588 562 ; +C 89 ; WX 600 ; N Y ; B 12 0 589 562 ; +C 90 ; WX 600 ; N Z ; B 62 0 539 562 ; +C 91 ; WX 600 ; N bracketleft ; B 245 -102 475 616 ; +C 92 ; WX 600 ; N backslash ; B 99 -77 503 626 ; +C 93 ; WX 600 ; N bracketright ; B 125 -102 355 616 ; +C 94 ; WX 600 ; N asciicircum ; B 108 250 492 616 ; +C 95 ; WX 600 ; N underscore ; B 0 -125 600 -75 ; +C 96 ; WX 600 ; N quoteleft ; B 178 277 428 562 ; +C 97 ; WX 600 ; N a ; B 35 -15 570 454 ; +C 98 ; WX 600 ; N b ; B 0 -15 584 626 ; +C 99 ; WX 600 ; N c ; B 40 -15 545 459 ; +C 100 ; WX 600 ; N d ; B 20 -15 591 626 ; +C 101 ; WX 600 ; N e ; B 40 -15 563 454 ; +C 102 ; WX 600 ; N f ; B 83 0 547 626 ; L i fi ; L l fl ; +C 103 ; WX 600 ; N g ; B 30 -146 580 454 ; +C 104 ; WX 600 ; N h ; B 5 0 592 626 ; +C 105 ; WX 600 ; N i ; B 77 0 523 658 ; +C 106 ; WX 600 ; N j ; B 63 -146 440 658 ; +C 107 ; WX 600 ; N k ; B 20 0 585 626 ; +C 108 ; WX 600 ; N l ; B 77 0 523 626 ; +C 109 ; WX 600 ; N m ; B -22 0 626 454 ; +C 110 ; WX 600 ; N n ; B 18 0 592 454 ; +C 111 ; WX 600 ; N o ; B 30 -15 570 454 ; +C 112 ; WX 600 ; N p ; B -1 -142 570 454 ; +C 113 ; WX 600 ; N q ; B 20 -142 591 454 ; +C 114 ; WX 600 ; N r ; B 47 0 580 454 ; +C 115 ; WX 600 ; N s ; B 68 -17 535 459 ; +C 116 ; WX 600 ; N t ; B 47 -15 532 562 ; +C 117 ; WX 600 ; N u ; B -1 -15 569 439 ; +C 118 ; WX 600 ; N v ; B -1 0 601 439 ; +C 119 ; WX 600 ; N w ; B -18 0 618 439 ; +C 120 ; WX 600 ; N x ; B 6 0 594 439 ; +C 121 ; WX 600 ; N y ; B -4 -142 601 439 ; +C 122 ; WX 600 ; N z ; B 81 0 520 439 ; +C 123 ; WX 600 ; N braceleft ; B 160 -102 464 616 ; +C 124 ; WX 600 ; N bar ; B 255 -250 345 750 ; +C 125 ; WX 600 ; N braceright ; B 136 -102 440 616 ; +C 126 ; WX 600 ; N asciitilde ; B 71 153 530 356 ; +C 161 ; WX 600 ; N exclamdown ; B 202 -146 398 449 ; +C 162 ; WX 600 ; N cent ; B 66 -49 518 614 ; +C 163 ; WX 600 ; N sterling ; B 72 -28 558 611 ; +C 164 ; WX 600 ; N fraction ; B 25 -60 576 661 ; +C 165 ; WX 600 ; N yen ; B 10 0 590 562 ; +C 166 ; WX 600 ; N florin ; B -30 -131 572 616 ; +C 167 ; WX 600 ; N section ; B 83 -70 517 580 ; +C 168 ; WX 600 ; N currency ; B 54 49 546 517 ; +C 169 ; WX 600 ; N quotesingle ; B 227 277 373 562 ; +C 170 ; WX 600 ; N quotedblleft ; B 71 277 535 562 ; +C 171 ; WX 600 ; N guillemotleft ; B 8 70 553 446 ; +C 172 ; WX 600 ; N guilsinglleft ; B 141 70 459 446 ; +C 173 ; WX 600 ; N guilsinglright ; B 141 70 459 446 ; +C 174 ; WX 600 ; N fi ; B 12 0 593 626 ; +C 175 ; WX 600 ; N fl ; B 12 0 593 626 ; +C 177 ; WX 600 ; N endash ; B 65 203 535 313 ; +C 178 ; WX 600 ; N dagger ; B 106 -70 494 580 ; +C 179 ; WX 600 ; N daggerdbl ; B 106 -70 494 580 ; +C 180 ; WX 600 ; N periodcentered ; B 196 165 404 351 ; +C 182 ; WX 600 ; N paragraph ; B 6 -70 576 580 ; +C 183 ; WX 600 ; N bullet ; B 140 132 460 430 ; +C 184 ; WX 600 ; N quotesinglbase ; B 175 -142 427 143 ; +C 185 ; WX 600 ; N quotedblbase ; B 65 -142 529 143 ; +C 186 ; WX 600 ; N quotedblright ; B 61 277 525 562 ; +C 187 ; WX 600 ; N guillemotright ; B 47 70 592 446 ; +C 188 ; WX 600 ; N ellipsis ; B 26 -15 574 116 ; +C 189 ; WX 600 ; N perthousand ; B -113 -15 713 616 ; +C 191 ; WX 600 ; N questiondown ; B 99 -146 502 449 ; +C 193 ; WX 600 ; N grave ; B 132 508 395 661 ; +C 194 ; WX 600 ; N acute ; B 205 508 468 661 ; +C 195 ; WX 600 ; N circumflex ; B 103 483 497 657 ; +C 196 ; WX 600 ; N tilde ; B 89 493 512 636 ; +C 197 ; WX 600 ; N macron ; B 88 505 512 585 ; +C 198 ; WX 600 ; N breve ; B 83 468 517 631 ; +C 199 ; WX 600 ; N dotaccent ; B 230 498 370 638 ; +C 200 ; WX 600 ; N dieresis ; B 128 498 472 638 ; +C 202 ; WX 600 ; N ring ; B 198 481 402 678 ; +C 203 ; WX 600 ; N cedilla ; B 205 -206 387 0 ; +C 205 ; WX 600 ; N hungarumlaut ; B 68 488 588 661 ; +C 206 ; WX 600 ; N ogonek ; B 169 -199 400 0 ; +C 207 ; WX 600 ; N caron ; B 103 493 497 667 ; +C 208 ; WX 600 ; N emdash ; B -10 203 610 313 ; +C 225 ; WX 600 ; N AE ; B -29 0 602 562 ; +C 227 ; WX 600 ; N ordfeminine ; B 147 196 453 580 ; +C 232 ; WX 600 ; N Lslash ; B 39 0 578 562 ; +C 233 ; WX 600 ; N Oslash ; B 22 -22 578 584 ; +C 234 ; WX 600 ; N OE ; B -25 0 595 562 ; +C 235 ; WX 600 ; N ordmasculine ; B 147 196 453 580 ; +C 241 ; WX 600 ; N ae ; B -4 -15 601 454 ; +C 245 ; WX 600 ; N dotlessi ; B 77 0 523 439 ; +C 248 ; WX 600 ; N lslash ; B 77 0 523 626 ; +C 249 ; WX 600 ; N oslash ; B 30 -24 570 463 ; +C 250 ; WX 600 ; N oe ; B -18 -15 611 454 ; +C 251 ; WX 600 ; N germandbls ; B 22 -15 596 626 ; +C -1 ; WX 600 ; N Idieresis ; B 77 0 523 761 ; +C -1 ; WX 600 ; N eacute ; B 40 -15 563 661 ; +C -1 ; WX 600 ; N abreve ; B 35 -15 570 661 ; +C -1 ; WX 600 ; N uhungarumlaut ; B -1 -15 628 661 ; +C -1 ; WX 600 ; N ecaron ; B 40 -15 563 667 ; +C -1 ; WX 600 ; N Ydieresis ; B 12 0 589 761 ; +C -1 ; WX 600 ; N divide ; B 71 16 529 500 ; +C -1 ; WX 600 ; N Yacute ; B 12 0 589 784 ; +C -1 ; WX 600 ; N Acircumflex ; B -9 0 609 780 ; +C -1 ; WX 600 ; N aacute ; B 35 -15 570 661 ; +C -1 ; WX 600 ; N Ucircumflex ; B 4 -18 596 780 ; +C -1 ; WX 600 ; N yacute ; B -4 -142 601 661 ; +C -1 ; WX 600 ; N scommaaccent ; B 68 -250 535 459 ; +C -1 ; WX 600 ; N ecircumflex ; B 40 -15 563 657 ; +C -1 ; WX 600 ; N Uring ; B 4 -18 596 801 ; +C -1 ; WX 600 ; N Udieresis ; B 4 -18 596 761 ; +C -1 ; WX 600 ; N aogonek ; B 35 -199 586 454 ; +C -1 ; WX 600 ; N Uacute ; B 4 -18 596 784 ; +C -1 ; WX 600 ; N uogonek ; B -1 -199 585 439 ; +C -1 ; WX 600 ; N Edieresis ; B 25 0 560 761 ; +C -1 ; WX 600 ; N Dcroat ; B 30 0 594 562 ; +C -1 ; WX 600 ; N commaaccent ; B 205 -250 397 -57 ; +C -1 ; WX 600 ; N copyright ; B 0 -18 600 580 ; +C -1 ; WX 600 ; N Emacron ; B 25 0 560 708 ; +C -1 ; WX 600 ; N ccaron ; B 40 -15 545 667 ; +C -1 ; WX 600 ; N aring ; B 35 -15 570 678 ; +C -1 ; WX 600 ; N Ncommaaccent ; B 8 -250 610 562 ; +C -1 ; WX 600 ; N lacute ; B 77 0 523 801 ; +C -1 ; WX 600 ; N agrave ; B 35 -15 570 661 ; +C -1 ; WX 600 ; N Tcommaaccent ; B 21 -250 579 562 ; +C -1 ; WX 600 ; N Cacute ; B 22 -18 560 784 ; +C -1 ; WX 600 ; N atilde ; B 35 -15 570 636 ; +C -1 ; WX 600 ; N Edotaccent ; B 25 0 560 761 ; +C -1 ; WX 600 ; N scaron ; B 68 -17 535 667 ; +C -1 ; WX 600 ; N scedilla ; B 68 -206 535 459 ; +C -1 ; WX 600 ; N iacute ; B 77 0 523 661 ; +C -1 ; WX 600 ; N lozenge ; B 66 0 534 740 ; +C -1 ; WX 600 ; N Rcaron ; B 24 0 599 790 ; +C -1 ; WX 600 ; N Gcommaaccent ; B 22 -250 594 580 ; +C -1 ; WX 600 ; N ucircumflex ; B -1 -15 569 657 ; +C -1 ; WX 600 ; N acircumflex ; B 35 -15 570 657 ; +C -1 ; WX 600 ; N Amacron ; B -9 0 609 708 ; +C -1 ; WX 600 ; N rcaron ; B 47 0 580 667 ; +C -1 ; WX 600 ; N ccedilla ; B 40 -206 545 459 ; +C -1 ; WX 600 ; N Zdotaccent ; B 62 0 539 761 ; +C -1 ; WX 600 ; N Thorn ; B 48 0 557 562 ; +C -1 ; WX 600 ; N Omacron ; B 22 -18 578 708 ; +C -1 ; WX 600 ; N Racute ; B 24 0 599 784 ; +C -1 ; WX 600 ; N Sacute ; B 47 -22 553 784 ; +C -1 ; WX 600 ; N dcaron ; B 20 -15 727 626 ; +C -1 ; WX 600 ; N Umacron ; B 4 -18 596 708 ; +C -1 ; WX 600 ; N uring ; B -1 -15 569 678 ; +C -1 ; WX 600 ; N threesuperior ; B 138 222 433 616 ; +C -1 ; WX 600 ; N Ograve ; B 22 -18 578 784 ; +C -1 ; WX 600 ; N Agrave ; B -9 0 609 784 ; +C -1 ; WX 600 ; N Abreve ; B -9 0 609 784 ; +C -1 ; WX 600 ; N multiply ; B 81 39 520 478 ; +C -1 ; WX 600 ; N uacute ; B -1 -15 569 661 ; +C -1 ; WX 600 ; N Tcaron ; B 21 0 579 790 ; +C -1 ; WX 600 ; N partialdiff ; B 63 -38 537 728 ; +C -1 ; WX 600 ; N ydieresis ; B -4 -142 601 638 ; +C -1 ; WX 600 ; N Nacute ; B 8 -12 610 784 ; +C -1 ; WX 600 ; N icircumflex ; B 73 0 523 657 ; +C -1 ; WX 600 ; N Ecircumflex ; B 25 0 560 780 ; +C -1 ; WX 600 ; N adieresis ; B 35 -15 570 638 ; +C -1 ; WX 600 ; N edieresis ; B 40 -15 563 638 ; +C -1 ; WX 600 ; N cacute ; B 40 -15 545 661 ; +C -1 ; WX 600 ; N nacute ; B 18 0 592 661 ; +C -1 ; WX 600 ; N umacron ; B -1 -15 569 585 ; +C -1 ; WX 600 ; N Ncaron ; B 8 -12 610 790 ; +C -1 ; WX 600 ; N Iacute ; B 77 0 523 784 ; +C -1 ; WX 600 ; N plusminus ; B 71 24 529 515 ; +C -1 ; WX 600 ; N brokenbar ; B 255 -175 345 675 ; +C -1 ; WX 600 ; N registered ; B 0 -18 600 580 ; +C -1 ; WX 600 ; N Gbreve ; B 22 -18 594 784 ; +C -1 ; WX 600 ; N Idotaccent ; B 77 0 523 761 ; +C -1 ; WX 600 ; N summation ; B 15 -10 586 706 ; +C -1 ; WX 600 ; N Egrave ; B 25 0 560 784 ; +C -1 ; WX 600 ; N racute ; B 47 0 580 661 ; +C -1 ; WX 600 ; N omacron ; B 30 -15 570 585 ; +C -1 ; WX 600 ; N Zacute ; B 62 0 539 784 ; +C -1 ; WX 600 ; N Zcaron ; B 62 0 539 790 ; +C -1 ; WX 600 ; N greaterequal ; B 26 0 523 696 ; +C -1 ; WX 600 ; N Eth ; B 30 0 594 562 ; +C -1 ; WX 600 ; N Ccedilla ; B 22 -206 560 580 ; +C -1 ; WX 600 ; N lcommaaccent ; B 77 -250 523 626 ; +C -1 ; WX 600 ; N tcaron ; B 47 -15 532 703 ; +C -1 ; WX 600 ; N eogonek ; B 40 -199 563 454 ; +C -1 ; WX 600 ; N Uogonek ; B 4 -199 596 562 ; +C -1 ; WX 600 ; N Aacute ; B -9 0 609 784 ; +C -1 ; WX 600 ; N Adieresis ; B -9 0 609 761 ; +C -1 ; WX 600 ; N egrave ; B 40 -15 563 661 ; +C -1 ; WX 600 ; N zacute ; B 81 0 520 661 ; +C -1 ; WX 600 ; N iogonek ; B 77 -199 523 658 ; +C -1 ; WX 600 ; N Oacute ; B 22 -18 578 784 ; +C -1 ; WX 600 ; N oacute ; B 30 -15 570 661 ; +C -1 ; WX 600 ; N amacron ; B 35 -15 570 585 ; +C -1 ; WX 600 ; N sacute ; B 68 -17 535 661 ; +C -1 ; WX 600 ; N idieresis ; B 77 0 523 618 ; +C -1 ; WX 600 ; N Ocircumflex ; B 22 -18 578 780 ; +C -1 ; WX 600 ; N Ugrave ; B 4 -18 596 784 ; +C -1 ; WX 600 ; N Delta ; B 6 0 594 688 ; +C -1 ; WX 600 ; N thorn ; B -14 -142 570 626 ; +C -1 ; WX 600 ; N twosuperior ; B 143 230 436 616 ; +C -1 ; WX 600 ; N Odieresis ; B 22 -18 578 761 ; +C -1 ; WX 600 ; N mu ; B -1 -142 569 439 ; +C -1 ; WX 600 ; N igrave ; B 77 0 523 661 ; +C -1 ; WX 600 ; N ohungarumlaut ; B 30 -15 668 661 ; +C -1 ; WX 600 ; N Eogonek ; B 25 -199 576 562 ; +C -1 ; WX 600 ; N dcroat ; B 20 -15 591 626 ; +C -1 ; WX 600 ; N threequarters ; B -47 -60 648 661 ; +C -1 ; WX 600 ; N Scedilla ; B 47 -206 553 582 ; +C -1 ; WX 600 ; N lcaron ; B 77 0 597 626 ; +C -1 ; WX 600 ; N Kcommaaccent ; B 21 -250 599 562 ; +C -1 ; WX 600 ; N Lacute ; B 39 0 578 784 ; +C -1 ; WX 600 ; N trademark ; B -9 230 749 562 ; +C -1 ; WX 600 ; N edotaccent ; B 40 -15 563 638 ; +C -1 ; WX 600 ; N Igrave ; B 77 0 523 784 ; +C -1 ; WX 600 ; N Imacron ; B 77 0 523 708 ; +C -1 ; WX 600 ; N Lcaron ; B 39 0 637 562 ; +C -1 ; WX 600 ; N onehalf ; B -47 -60 648 661 ; +C -1 ; WX 600 ; N lessequal ; B 26 0 523 696 ; +C -1 ; WX 600 ; N ocircumflex ; B 30 -15 570 657 ; +C -1 ; WX 600 ; N ntilde ; B 18 0 592 636 ; +C -1 ; WX 600 ; N Uhungarumlaut ; B 4 -18 638 784 ; +C -1 ; WX 600 ; N Eacute ; B 25 0 560 784 ; +C -1 ; WX 600 ; N emacron ; B 40 -15 563 585 ; +C -1 ; WX 600 ; N gbreve ; B 30 -146 580 661 ; +C -1 ; WX 600 ; N onequarter ; B -56 -60 656 661 ; +C -1 ; WX 600 ; N Scaron ; B 47 -22 553 790 ; +C -1 ; WX 600 ; N Scommaaccent ; B 47 -250 553 582 ; +C -1 ; WX 600 ; N Ohungarumlaut ; B 22 -18 628 784 ; +C -1 ; WX 600 ; N degree ; B 86 243 474 616 ; +C -1 ; WX 600 ; N ograve ; B 30 -15 570 661 ; +C -1 ; WX 600 ; N Ccaron ; B 22 -18 560 790 ; +C -1 ; WX 600 ; N ugrave ; B -1 -15 569 661 ; +C -1 ; WX 600 ; N radical ; B -19 -104 473 778 ; +C -1 ; WX 600 ; N Dcaron ; B 30 0 594 790 ; +C -1 ; WX 600 ; N rcommaaccent ; B 47 -250 580 454 ; +C -1 ; WX 600 ; N Ntilde ; B 8 -12 610 759 ; +C -1 ; WX 600 ; N otilde ; B 30 -15 570 636 ; +C -1 ; WX 600 ; N Rcommaaccent ; B 24 -250 599 562 ; +C -1 ; WX 600 ; N Lcommaaccent ; B 39 -250 578 562 ; +C -1 ; WX 600 ; N Atilde ; B -9 0 609 759 ; +C -1 ; WX 600 ; N Aogonek ; B -9 -199 625 562 ; +C -1 ; WX 600 ; N Aring ; B -9 0 609 801 ; +C -1 ; WX 600 ; N Otilde ; B 22 -18 578 759 ; +C -1 ; WX 600 ; N zdotaccent ; B 81 0 520 638 ; +C -1 ; WX 600 ; N Ecaron ; B 25 0 560 790 ; +C -1 ; WX 600 ; N Iogonek ; B 77 -199 523 562 ; +C -1 ; WX 600 ; N kcommaaccent ; B 20 -250 585 626 ; +C -1 ; WX 600 ; N minus ; B 71 203 529 313 ; +C -1 ; WX 600 ; N Icircumflex ; B 77 0 523 780 ; +C -1 ; WX 600 ; N ncaron ; B 18 0 592 667 ; +C -1 ; WX 600 ; N tcommaaccent ; B 47 -250 532 562 ; +C -1 ; WX 600 ; N logicalnot ; B 71 103 529 413 ; +C -1 ; WX 600 ; N odieresis ; B 30 -15 570 638 ; +C -1 ; WX 600 ; N udieresis ; B -1 -15 569 638 ; +C -1 ; WX 600 ; N notequal ; B 12 -47 537 563 ; +C -1 ; WX 600 ; N gcommaaccent ; B 30 -146 580 714 ; +C -1 ; WX 600 ; N eth ; B 58 -27 543 626 ; +C -1 ; WX 600 ; N zcaron ; B 81 0 520 667 ; +C -1 ; WX 600 ; N ncommaaccent ; B 18 -250 592 454 ; +C -1 ; WX 600 ; N onesuperior ; B 153 230 447 616 ; +C -1 ; WX 600 ; N imacron ; B 77 0 523 585 ; +C -1 ; WX 600 ; N Euro ; B 0 0 0 0 ; +EndCharMetrics +EndFontMetrics diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/Courier-BoldOblique.afm b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/Courier-BoldOblique.afm new file mode 100755 index 00000000..29d3b8b1 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/Courier-BoldOblique.afm @@ -0,0 +1,342 @@ +StartFontMetrics 4.1 +Comment Copyright (c) 1989, 1990, 1991, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved. +Comment Creation Date: Mon Jun 23 16:28:46 1997 +Comment UniqueID 43049 +Comment VMusage 17529 79244 +FontName Courier-BoldOblique +FullName Courier Bold Oblique +FamilyName Courier +Weight Bold +ItalicAngle -12 +IsFixedPitch true +CharacterSet ExtendedRoman +FontBBox -57 -250 869 801 +UnderlinePosition -100 +UnderlineThickness 50 +Version 003.000 +Notice Copyright (c) 1989, 1990, 1991, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved. +EncodingScheme AdobeStandardEncoding +CapHeight 562 +XHeight 439 +Ascender 629 +Descender -157 +StdHW 84 +StdVW 106 +StartCharMetrics 315 +C 32 ; WX 600 ; N space ; B 0 0 0 0 ; +C 33 ; WX 600 ; N exclam ; B 215 -15 495 572 ; +C 34 ; WX 600 ; N quotedbl ; B 211 277 585 562 ; +C 35 ; WX 600 ; N numbersign ; B 88 -45 641 651 ; +C 36 ; WX 600 ; N dollar ; B 87 -126 630 666 ; +C 37 ; WX 600 ; N percent ; B 101 -15 625 616 ; +C 38 ; WX 600 ; N ampersand ; B 61 -15 595 543 ; +C 39 ; WX 600 ; N quoteright ; B 229 277 543 562 ; +C 40 ; WX 600 ; N parenleft ; B 265 -102 592 616 ; +C 41 ; WX 600 ; N parenright ; B 117 -102 444 616 ; +C 42 ; WX 600 ; N asterisk ; B 179 219 598 601 ; +C 43 ; WX 600 ; N plus ; B 114 39 596 478 ; +C 44 ; WX 600 ; N comma ; B 99 -111 430 174 ; +C 45 ; WX 600 ; N hyphen ; B 143 203 567 313 ; +C 46 ; WX 600 ; N period ; B 206 -15 427 171 ; +C 47 ; WX 600 ; N slash ; B 90 -77 626 626 ; +C 48 ; WX 600 ; N zero ; B 135 -15 593 616 ; +C 49 ; WX 600 ; N one ; B 93 0 562 616 ; +C 50 ; WX 600 ; N two ; B 61 0 594 616 ; +C 51 ; WX 600 ; N three ; B 71 -15 571 616 ; +C 52 ; WX 600 ; N four ; B 81 0 559 616 ; +C 53 ; WX 600 ; N five ; B 77 -15 621 601 ; +C 54 ; WX 600 ; N six ; B 135 -15 652 616 ; +C 55 ; WX 600 ; N seven ; B 147 0 622 601 ; +C 56 ; WX 600 ; N eight ; B 115 -15 604 616 ; +C 57 ; WX 600 ; N nine ; B 75 -15 592 616 ; +C 58 ; WX 600 ; N colon ; B 205 -15 480 425 ; +C 59 ; WX 600 ; N semicolon ; B 99 -111 481 425 ; +C 60 ; WX 600 ; N less ; B 120 15 613 501 ; +C 61 ; WX 600 ; N equal ; B 96 118 614 398 ; +C 62 ; WX 600 ; N greater ; B 97 15 589 501 ; +C 63 ; WX 600 ; N question ; B 183 -14 592 580 ; +C 64 ; WX 600 ; N at ; B 65 -15 642 616 ; +C 65 ; WX 600 ; N A ; B -9 0 632 562 ; +C 66 ; WX 600 ; N B ; B 30 0 630 562 ; +C 67 ; WX 600 ; N C ; B 74 -18 675 580 ; +C 68 ; WX 600 ; N D ; B 30 0 664 562 ; +C 69 ; WX 600 ; N E ; B 25 0 670 562 ; +C 70 ; WX 600 ; N F ; B 39 0 684 562 ; +C 71 ; WX 600 ; N G ; B 74 -18 675 580 ; +C 72 ; WX 600 ; N H ; B 20 0 700 562 ; +C 73 ; WX 600 ; N I ; B 77 0 643 562 ; +C 74 ; WX 600 ; N J ; B 58 -18 721 562 ; +C 75 ; WX 600 ; N K ; B 21 0 692 562 ; +C 76 ; WX 600 ; N L ; B 39 0 636 562 ; +C 77 ; WX 600 ; N M ; B -2 0 722 562 ; +C 78 ; WX 600 ; N N ; B 8 -12 730 562 ; +C 79 ; WX 600 ; N O ; B 74 -18 645 580 ; +C 80 ; WX 600 ; N P ; B 48 0 643 562 ; +C 81 ; WX 600 ; N Q ; B 83 -138 636 580 ; +C 82 ; WX 600 ; N R ; B 24 0 617 562 ; +C 83 ; WX 600 ; N S ; B 54 -22 673 582 ; +C 84 ; WX 600 ; N T ; B 86 0 679 562 ; +C 85 ; WX 600 ; N U ; B 101 -18 716 562 ; +C 86 ; WX 600 ; N V ; B 84 0 733 562 ; +C 87 ; WX 600 ; N W ; B 79 0 738 562 ; +C 88 ; WX 600 ; N X ; B 12 0 690 562 ; +C 89 ; WX 600 ; N Y ; B 109 0 709 562 ; +C 90 ; WX 600 ; N Z ; B 62 0 637 562 ; +C 91 ; WX 600 ; N bracketleft ; B 223 -102 606 616 ; +C 92 ; WX 600 ; N backslash ; B 222 -77 496 626 ; +C 93 ; WX 600 ; N bracketright ; B 103 -102 486 616 ; +C 94 ; WX 600 ; N asciicircum ; B 171 250 556 616 ; +C 95 ; WX 600 ; N underscore ; B -27 -125 585 -75 ; +C 96 ; WX 600 ; N quoteleft ; B 297 277 487 562 ; +C 97 ; WX 600 ; N a ; B 61 -15 593 454 ; +C 98 ; WX 600 ; N b ; B 13 -15 636 626 ; +C 99 ; WX 600 ; N c ; B 81 -15 631 459 ; +C 100 ; WX 600 ; N d ; B 60 -15 645 626 ; +C 101 ; WX 600 ; N e ; B 81 -15 605 454 ; +C 102 ; WX 600 ; N f ; B 83 0 677 626 ; L i fi ; L l fl ; +C 103 ; WX 600 ; N g ; B 40 -146 674 454 ; +C 104 ; WX 600 ; N h ; B 18 0 615 626 ; +C 105 ; WX 600 ; N i ; B 77 0 546 658 ; +C 106 ; WX 600 ; N j ; B 36 -146 580 658 ; +C 107 ; WX 600 ; N k ; B 33 0 643 626 ; +C 108 ; WX 600 ; N l ; B 77 0 546 626 ; +C 109 ; WX 600 ; N m ; B -22 0 649 454 ; +C 110 ; WX 600 ; N n ; B 18 0 615 454 ; +C 111 ; WX 600 ; N o ; B 71 -15 622 454 ; +C 112 ; WX 600 ; N p ; B -32 -142 622 454 ; +C 113 ; WX 600 ; N q ; B 60 -142 685 454 ; +C 114 ; WX 600 ; N r ; B 47 0 655 454 ; +C 115 ; WX 600 ; N s ; B 66 -17 608 459 ; +C 116 ; WX 600 ; N t ; B 118 -15 567 562 ; +C 117 ; WX 600 ; N u ; B 70 -15 592 439 ; +C 118 ; WX 600 ; N v ; B 70 0 695 439 ; +C 119 ; WX 600 ; N w ; B 53 0 712 439 ; +C 120 ; WX 600 ; N x ; B 6 0 671 439 ; +C 121 ; WX 600 ; N y ; B -21 -142 695 439 ; +C 122 ; WX 600 ; N z ; B 81 0 614 439 ; +C 123 ; WX 600 ; N braceleft ; B 203 -102 595 616 ; +C 124 ; WX 600 ; N bar ; B 201 -250 505 750 ; +C 125 ; WX 600 ; N braceright ; B 114 -102 506 616 ; +C 126 ; WX 600 ; N asciitilde ; B 120 153 590 356 ; +C 161 ; WX 600 ; N exclamdown ; B 196 -146 477 449 ; +C 162 ; WX 600 ; N cent ; B 121 -49 605 614 ; +C 163 ; WX 600 ; N sterling ; B 106 -28 650 611 ; +C 164 ; WX 600 ; N fraction ; B 22 -60 708 661 ; +C 165 ; WX 600 ; N yen ; B 98 0 710 562 ; +C 166 ; WX 600 ; N florin ; B -57 -131 702 616 ; +C 167 ; WX 600 ; N section ; B 74 -70 620 580 ; +C 168 ; WX 600 ; N currency ; B 77 49 644 517 ; +C 169 ; WX 600 ; N quotesingle ; B 303 277 493 562 ; +C 170 ; WX 600 ; N quotedblleft ; B 190 277 594 562 ; +C 171 ; WX 600 ; N guillemotleft ; B 62 70 639 446 ; +C 172 ; WX 600 ; N guilsinglleft ; B 195 70 545 446 ; +C 173 ; WX 600 ; N guilsinglright ; B 165 70 514 446 ; +C 174 ; WX 600 ; N fi ; B 12 0 644 626 ; +C 175 ; WX 600 ; N fl ; B 12 0 644 626 ; +C 177 ; WX 600 ; N endash ; B 108 203 602 313 ; +C 178 ; WX 600 ; N dagger ; B 175 -70 586 580 ; +C 179 ; WX 600 ; N daggerdbl ; B 121 -70 587 580 ; +C 180 ; WX 600 ; N periodcentered ; B 248 165 461 351 ; +C 182 ; WX 600 ; N paragraph ; B 61 -70 700 580 ; +C 183 ; WX 600 ; N bullet ; B 196 132 523 430 ; +C 184 ; WX 600 ; N quotesinglbase ; B 144 -142 458 143 ; +C 185 ; WX 600 ; N quotedblbase ; B 34 -142 560 143 ; +C 186 ; WX 600 ; N quotedblright ; B 119 277 645 562 ; +C 187 ; WX 600 ; N guillemotright ; B 71 70 647 446 ; +C 188 ; WX 600 ; N ellipsis ; B 35 -15 587 116 ; +C 189 ; WX 600 ; N perthousand ; B -45 -15 743 616 ; +C 191 ; WX 600 ; N questiondown ; B 100 -146 509 449 ; +C 193 ; WX 600 ; N grave ; B 272 508 503 661 ; +C 194 ; WX 600 ; N acute ; B 312 508 609 661 ; +C 195 ; WX 600 ; N circumflex ; B 212 483 607 657 ; +C 196 ; WX 600 ; N tilde ; B 199 493 643 636 ; +C 197 ; WX 600 ; N macron ; B 195 505 637 585 ; +C 198 ; WX 600 ; N breve ; B 217 468 652 631 ; +C 199 ; WX 600 ; N dotaccent ; B 348 498 493 638 ; +C 200 ; WX 600 ; N dieresis ; B 246 498 595 638 ; +C 202 ; WX 600 ; N ring ; B 319 481 528 678 ; +C 203 ; WX 600 ; N cedilla ; B 168 -206 368 0 ; +C 205 ; WX 600 ; N hungarumlaut ; B 171 488 729 661 ; +C 206 ; WX 600 ; N ogonek ; B 143 -199 367 0 ; +C 207 ; WX 600 ; N caron ; B 238 493 633 667 ; +C 208 ; WX 600 ; N emdash ; B 33 203 677 313 ; +C 225 ; WX 600 ; N AE ; B -29 0 708 562 ; +C 227 ; WX 600 ; N ordfeminine ; B 188 196 526 580 ; +C 232 ; WX 600 ; N Lslash ; B 39 0 636 562 ; +C 233 ; WX 600 ; N Oslash ; B 48 -22 673 584 ; +C 234 ; WX 600 ; N OE ; B 26 0 701 562 ; +C 235 ; WX 600 ; N ordmasculine ; B 188 196 543 580 ; +C 241 ; WX 600 ; N ae ; B 21 -15 652 454 ; +C 245 ; WX 600 ; N dotlessi ; B 77 0 546 439 ; +C 248 ; WX 600 ; N lslash ; B 77 0 587 626 ; +C 249 ; WX 600 ; N oslash ; B 54 -24 638 463 ; +C 250 ; WX 600 ; N oe ; B 18 -15 662 454 ; +C 251 ; WX 600 ; N germandbls ; B 22 -15 629 626 ; +C -1 ; WX 600 ; N Idieresis ; B 77 0 643 761 ; +C -1 ; WX 600 ; N eacute ; B 81 -15 609 661 ; +C -1 ; WX 600 ; N abreve ; B 61 -15 658 661 ; +C -1 ; WX 600 ; N uhungarumlaut ; B 70 -15 769 661 ; +C -1 ; WX 600 ; N ecaron ; B 81 -15 633 667 ; +C -1 ; WX 600 ; N Ydieresis ; B 109 0 709 761 ; +C -1 ; WX 600 ; N divide ; B 114 16 596 500 ; +C -1 ; WX 600 ; N Yacute ; B 109 0 709 784 ; +C -1 ; WX 600 ; N Acircumflex ; B -9 0 632 780 ; +C -1 ; WX 600 ; N aacute ; B 61 -15 609 661 ; +C -1 ; WX 600 ; N Ucircumflex ; B 101 -18 716 780 ; +C -1 ; WX 600 ; N yacute ; B -21 -142 695 661 ; +C -1 ; WX 600 ; N scommaaccent ; B 66 -250 608 459 ; +C -1 ; WX 600 ; N ecircumflex ; B 81 -15 607 657 ; +C -1 ; WX 600 ; N Uring ; B 101 -18 716 801 ; +C -1 ; WX 600 ; N Udieresis ; B 101 -18 716 761 ; +C -1 ; WX 600 ; N aogonek ; B 61 -199 593 454 ; +C -1 ; WX 600 ; N Uacute ; B 101 -18 716 784 ; +C -1 ; WX 600 ; N uogonek ; B 70 -199 592 439 ; +C -1 ; WX 600 ; N Edieresis ; B 25 0 670 761 ; +C -1 ; WX 600 ; N Dcroat ; B 30 0 664 562 ; +C -1 ; WX 600 ; N commaaccent ; B 151 -250 385 -57 ; +C -1 ; WX 600 ; N copyright ; B 53 -18 667 580 ; +C -1 ; WX 600 ; N Emacron ; B 25 0 670 708 ; +C -1 ; WX 600 ; N ccaron ; B 81 -15 633 667 ; +C -1 ; WX 600 ; N aring ; B 61 -15 593 678 ; +C -1 ; WX 600 ; N Ncommaaccent ; B 8 -250 730 562 ; +C -1 ; WX 600 ; N lacute ; B 77 0 639 801 ; +C -1 ; WX 600 ; N agrave ; B 61 -15 593 661 ; +C -1 ; WX 600 ; N Tcommaaccent ; B 86 -250 679 562 ; +C -1 ; WX 600 ; N Cacute ; B 74 -18 675 784 ; +C -1 ; WX 600 ; N atilde ; B 61 -15 643 636 ; +C -1 ; WX 600 ; N Edotaccent ; B 25 0 670 761 ; +C -1 ; WX 600 ; N scaron ; B 66 -17 633 667 ; +C -1 ; WX 600 ; N scedilla ; B 66 -206 608 459 ; +C -1 ; WX 600 ; N iacute ; B 77 0 609 661 ; +C -1 ; WX 600 ; N lozenge ; B 145 0 614 740 ; +C -1 ; WX 600 ; N Rcaron ; B 24 0 659 790 ; +C -1 ; WX 600 ; N Gcommaaccent ; B 74 -250 675 580 ; +C -1 ; WX 600 ; N ucircumflex ; B 70 -15 597 657 ; +C -1 ; WX 600 ; N acircumflex ; B 61 -15 607 657 ; +C -1 ; WX 600 ; N Amacron ; B -9 0 633 708 ; +C -1 ; WX 600 ; N rcaron ; B 47 0 655 667 ; +C -1 ; WX 600 ; N ccedilla ; B 81 -206 631 459 ; +C -1 ; WX 600 ; N Zdotaccent ; B 62 0 637 761 ; +C -1 ; WX 600 ; N Thorn ; B 48 0 620 562 ; +C -1 ; WX 600 ; N Omacron ; B 74 -18 663 708 ; +C -1 ; WX 600 ; N Racute ; B 24 0 665 784 ; +C -1 ; WX 600 ; N Sacute ; B 54 -22 673 784 ; +C -1 ; WX 600 ; N dcaron ; B 60 -15 861 626 ; +C -1 ; WX 600 ; N Umacron ; B 101 -18 716 708 ; +C -1 ; WX 600 ; N uring ; B 70 -15 592 678 ; +C -1 ; WX 600 ; N threesuperior ; B 193 222 526 616 ; +C -1 ; WX 600 ; N Ograve ; B 74 -18 645 784 ; +C -1 ; WX 600 ; N Agrave ; B -9 0 632 784 ; +C -1 ; WX 600 ; N Abreve ; B -9 0 684 784 ; +C -1 ; WX 600 ; N multiply ; B 104 39 606 478 ; +C -1 ; WX 600 ; N uacute ; B 70 -15 599 661 ; +C -1 ; WX 600 ; N Tcaron ; B 86 0 679 790 ; +C -1 ; WX 600 ; N partialdiff ; B 91 -38 627 728 ; +C -1 ; WX 600 ; N ydieresis ; B -21 -142 695 638 ; +C -1 ; WX 600 ; N Nacute ; B 8 -12 730 784 ; +C -1 ; WX 600 ; N icircumflex ; B 77 0 577 657 ; +C -1 ; WX 600 ; N Ecircumflex ; B 25 0 670 780 ; +C -1 ; WX 600 ; N adieresis ; B 61 -15 595 638 ; +C -1 ; WX 600 ; N edieresis ; B 81 -15 605 638 ; +C -1 ; WX 600 ; N cacute ; B 81 -15 649 661 ; +C -1 ; WX 600 ; N nacute ; B 18 0 639 661 ; +C -1 ; WX 600 ; N umacron ; B 70 -15 637 585 ; +C -1 ; WX 600 ; N Ncaron ; B 8 -12 730 790 ; +C -1 ; WX 600 ; N Iacute ; B 77 0 643 784 ; +C -1 ; WX 600 ; N plusminus ; B 76 24 614 515 ; +C -1 ; WX 600 ; N brokenbar ; B 217 -175 489 675 ; +C -1 ; WX 600 ; N registered ; B 53 -18 667 580 ; +C -1 ; WX 600 ; N Gbreve ; B 74 -18 684 784 ; +C -1 ; WX 600 ; N Idotaccent ; B 77 0 643 761 ; +C -1 ; WX 600 ; N summation ; B 15 -10 672 706 ; +C -1 ; WX 600 ; N Egrave ; B 25 0 670 784 ; +C -1 ; WX 600 ; N racute ; B 47 0 655 661 ; +C -1 ; WX 600 ; N omacron ; B 71 -15 637 585 ; +C -1 ; WX 600 ; N Zacute ; B 62 0 665 784 ; +C -1 ; WX 600 ; N Zcaron ; B 62 0 659 790 ; +C -1 ; WX 600 ; N greaterequal ; B 26 0 627 696 ; +C -1 ; WX 600 ; N Eth ; B 30 0 664 562 ; +C -1 ; WX 600 ; N Ccedilla ; B 74 -206 675 580 ; +C -1 ; WX 600 ; N lcommaaccent ; B 77 -250 546 626 ; +C -1 ; WX 600 ; N tcaron ; B 118 -15 627 703 ; +C -1 ; WX 600 ; N eogonek ; B 81 -199 605 454 ; +C -1 ; WX 600 ; N Uogonek ; B 101 -199 716 562 ; +C -1 ; WX 600 ; N Aacute ; B -9 0 655 784 ; +C -1 ; WX 600 ; N Adieresis ; B -9 0 632 761 ; +C -1 ; WX 600 ; N egrave ; B 81 -15 605 661 ; +C -1 ; WX 600 ; N zacute ; B 81 0 614 661 ; +C -1 ; WX 600 ; N iogonek ; B 77 -199 546 658 ; +C -1 ; WX 600 ; N Oacute ; B 74 -18 645 784 ; +C -1 ; WX 600 ; N oacute ; B 71 -15 649 661 ; +C -1 ; WX 600 ; N amacron ; B 61 -15 637 585 ; +C -1 ; WX 600 ; N sacute ; B 66 -17 609 661 ; +C -1 ; WX 600 ; N idieresis ; B 77 0 561 618 ; +C -1 ; WX 600 ; N Ocircumflex ; B 74 -18 645 780 ; +C -1 ; WX 600 ; N Ugrave ; B 101 -18 716 784 ; +C -1 ; WX 600 ; N Delta ; B 6 0 594 688 ; +C -1 ; WX 600 ; N thorn ; B -32 -142 622 626 ; +C -1 ; WX 600 ; N twosuperior ; B 191 230 542 616 ; +C -1 ; WX 600 ; N Odieresis ; B 74 -18 645 761 ; +C -1 ; WX 600 ; N mu ; B 49 -142 592 439 ; +C -1 ; WX 600 ; N igrave ; B 77 0 546 661 ; +C -1 ; WX 600 ; N ohungarumlaut ; B 71 -15 809 661 ; +C -1 ; WX 600 ; N Eogonek ; B 25 -199 670 562 ; +C -1 ; WX 600 ; N dcroat ; B 60 -15 712 626 ; +C -1 ; WX 600 ; N threequarters ; B 8 -60 699 661 ; +C -1 ; WX 600 ; N Scedilla ; B 54 -206 673 582 ; +C -1 ; WX 600 ; N lcaron ; B 77 0 731 626 ; +C -1 ; WX 600 ; N Kcommaaccent ; B 21 -250 692 562 ; +C -1 ; WX 600 ; N Lacute ; B 39 0 636 784 ; +C -1 ; WX 600 ; N trademark ; B 86 230 869 562 ; +C -1 ; WX 600 ; N edotaccent ; B 81 -15 605 638 ; +C -1 ; WX 600 ; N Igrave ; B 77 0 643 784 ; +C -1 ; WX 600 ; N Imacron ; B 77 0 663 708 ; +C -1 ; WX 600 ; N Lcaron ; B 39 0 757 562 ; +C -1 ; WX 600 ; N onehalf ; B 22 -60 716 661 ; +C -1 ; WX 600 ; N lessequal ; B 26 0 671 696 ; +C -1 ; WX 600 ; N ocircumflex ; B 71 -15 622 657 ; +C -1 ; WX 600 ; N ntilde ; B 18 0 643 636 ; +C -1 ; WX 600 ; N Uhungarumlaut ; B 101 -18 805 784 ; +C -1 ; WX 600 ; N Eacute ; B 25 0 670 784 ; +C -1 ; WX 600 ; N emacron ; B 81 -15 637 585 ; +C -1 ; WX 600 ; N gbreve ; B 40 -146 674 661 ; +C -1 ; WX 600 ; N onequarter ; B 13 -60 707 661 ; +C -1 ; WX 600 ; N Scaron ; B 54 -22 689 790 ; +C -1 ; WX 600 ; N Scommaaccent ; B 54 -250 673 582 ; +C -1 ; WX 600 ; N Ohungarumlaut ; B 74 -18 795 784 ; +C -1 ; WX 600 ; N degree ; B 173 243 570 616 ; +C -1 ; WX 600 ; N ograve ; B 71 -15 622 661 ; +C -1 ; WX 600 ; N Ccaron ; B 74 -18 689 790 ; +C -1 ; WX 600 ; N ugrave ; B 70 -15 592 661 ; +C -1 ; WX 600 ; N radical ; B 67 -104 635 778 ; +C -1 ; WX 600 ; N Dcaron ; B 30 0 664 790 ; +C -1 ; WX 600 ; N rcommaaccent ; B 47 -250 655 454 ; +C -1 ; WX 600 ; N Ntilde ; B 8 -12 730 759 ; +C -1 ; WX 600 ; N otilde ; B 71 -15 643 636 ; +C -1 ; WX 600 ; N Rcommaaccent ; B 24 -250 617 562 ; +C -1 ; WX 600 ; N Lcommaaccent ; B 39 -250 636 562 ; +C -1 ; WX 600 ; N Atilde ; B -9 0 669 759 ; +C -1 ; WX 600 ; N Aogonek ; B -9 -199 632 562 ; +C -1 ; WX 600 ; N Aring ; B -9 0 632 801 ; +C -1 ; WX 600 ; N Otilde ; B 74 -18 669 759 ; +C -1 ; WX 600 ; N zdotaccent ; B 81 0 614 638 ; +C -1 ; WX 600 ; N Ecaron ; B 25 0 670 790 ; +C -1 ; WX 600 ; N Iogonek ; B 77 -199 643 562 ; +C -1 ; WX 600 ; N kcommaaccent ; B 33 -250 643 626 ; +C -1 ; WX 600 ; N minus ; B 114 203 596 313 ; +C -1 ; WX 600 ; N Icircumflex ; B 77 0 643 780 ; +C -1 ; WX 600 ; N ncaron ; B 18 0 633 667 ; +C -1 ; WX 600 ; N tcommaaccent ; B 118 -250 567 562 ; +C -1 ; WX 600 ; N logicalnot ; B 135 103 617 413 ; +C -1 ; WX 600 ; N odieresis ; B 71 -15 622 638 ; +C -1 ; WX 600 ; N udieresis ; B 70 -15 595 638 ; +C -1 ; WX 600 ; N notequal ; B 30 -47 626 563 ; +C -1 ; WX 600 ; N gcommaaccent ; B 40 -146 674 714 ; +C -1 ; WX 600 ; N eth ; B 93 -27 661 626 ; +C -1 ; WX 600 ; N zcaron ; B 81 0 643 667 ; +C -1 ; WX 600 ; N ncommaaccent ; B 18 -250 615 454 ; +C -1 ; WX 600 ; N onesuperior ; B 212 230 514 616 ; +C -1 ; WX 600 ; N imacron ; B 77 0 575 585 ; +C -1 ; WX 600 ; N Euro ; B 0 0 0 0 ; +EndCharMetrics +EndFontMetrics diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/Courier-Oblique.afm b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/Courier-Oblique.afm new file mode 100755 index 00000000..3dc163f7 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/Courier-Oblique.afm @@ -0,0 +1,342 @@ +StartFontMetrics 4.1 +Comment Copyright (c) 1989, 1990, 1991, 1992, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved. +Comment Creation Date: Thu May 1 17:37:52 1997 +Comment UniqueID 43051 +Comment VMusage 16248 75829 +FontName Courier-Oblique +FullName Courier Oblique +FamilyName Courier +Weight Medium +ItalicAngle -12 +IsFixedPitch true +CharacterSet ExtendedRoman +FontBBox -27 -250 849 805 +UnderlinePosition -100 +UnderlineThickness 50 +Version 003.000 +Notice Copyright (c) 1989, 1990, 1991, 1992, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved. +EncodingScheme AdobeStandardEncoding +CapHeight 562 +XHeight 426 +Ascender 629 +Descender -157 +StdHW 51 +StdVW 51 +StartCharMetrics 315 +C 32 ; WX 600 ; N space ; B 0 0 0 0 ; +C 33 ; WX 600 ; N exclam ; B 243 -15 464 572 ; +C 34 ; WX 600 ; N quotedbl ; B 273 328 532 562 ; +C 35 ; WX 600 ; N numbersign ; B 133 -32 596 639 ; +C 36 ; WX 600 ; N dollar ; B 108 -126 596 662 ; +C 37 ; WX 600 ; N percent ; B 134 -15 599 622 ; +C 38 ; WX 600 ; N ampersand ; B 87 -15 580 543 ; +C 39 ; WX 600 ; N quoteright ; B 283 328 495 562 ; +C 40 ; WX 600 ; N parenleft ; B 313 -108 572 622 ; +C 41 ; WX 600 ; N parenright ; B 137 -108 396 622 ; +C 42 ; WX 600 ; N asterisk ; B 212 257 580 607 ; +C 43 ; WX 600 ; N plus ; B 129 44 580 470 ; +C 44 ; WX 600 ; N comma ; B 157 -112 370 122 ; +C 45 ; WX 600 ; N hyphen ; B 152 231 558 285 ; +C 46 ; WX 600 ; N period ; B 238 -15 382 109 ; +C 47 ; WX 600 ; N slash ; B 112 -80 604 629 ; +C 48 ; WX 600 ; N zero ; B 154 -15 575 622 ; +C 49 ; WX 600 ; N one ; B 98 0 515 622 ; +C 50 ; WX 600 ; N two ; B 70 0 568 622 ; +C 51 ; WX 600 ; N three ; B 82 -15 538 622 ; +C 52 ; WX 600 ; N four ; B 108 0 541 622 ; +C 53 ; WX 600 ; N five ; B 99 -15 589 607 ; +C 54 ; WX 600 ; N six ; B 155 -15 629 622 ; +C 55 ; WX 600 ; N seven ; B 182 0 612 607 ; +C 56 ; WX 600 ; N eight ; B 132 -15 588 622 ; +C 57 ; WX 600 ; N nine ; B 93 -15 574 622 ; +C 58 ; WX 600 ; N colon ; B 238 -15 441 385 ; +C 59 ; WX 600 ; N semicolon ; B 157 -112 441 385 ; +C 60 ; WX 600 ; N less ; B 96 42 610 472 ; +C 61 ; WX 600 ; N equal ; B 109 138 600 376 ; +C 62 ; WX 600 ; N greater ; B 85 42 599 472 ; +C 63 ; WX 600 ; N question ; B 222 -15 583 572 ; +C 64 ; WX 600 ; N at ; B 127 -15 582 622 ; +C 65 ; WX 600 ; N A ; B 3 0 607 562 ; +C 66 ; WX 600 ; N B ; B 43 0 616 562 ; +C 67 ; WX 600 ; N C ; B 93 -18 655 580 ; +C 68 ; WX 600 ; N D ; B 43 0 645 562 ; +C 69 ; WX 600 ; N E ; B 53 0 660 562 ; +C 70 ; WX 600 ; N F ; B 53 0 660 562 ; +C 71 ; WX 600 ; N G ; B 83 -18 645 580 ; +C 72 ; WX 600 ; N H ; B 32 0 687 562 ; +C 73 ; WX 600 ; N I ; B 96 0 623 562 ; +C 74 ; WX 600 ; N J ; B 52 -18 685 562 ; +C 75 ; WX 600 ; N K ; B 38 0 671 562 ; +C 76 ; WX 600 ; N L ; B 47 0 607 562 ; +C 77 ; WX 600 ; N M ; B 4 0 715 562 ; +C 78 ; WX 600 ; N N ; B 7 -13 712 562 ; +C 79 ; WX 600 ; N O ; B 94 -18 625 580 ; +C 80 ; WX 600 ; N P ; B 79 0 644 562 ; +C 81 ; WX 600 ; N Q ; B 95 -138 625 580 ; +C 82 ; WX 600 ; N R ; B 38 0 598 562 ; +C 83 ; WX 600 ; N S ; B 76 -20 650 580 ; +C 84 ; WX 600 ; N T ; B 108 0 665 562 ; +C 85 ; WX 600 ; N U ; B 125 -18 702 562 ; +C 86 ; WX 600 ; N V ; B 105 -13 723 562 ; +C 87 ; WX 600 ; N W ; B 106 -13 722 562 ; +C 88 ; WX 600 ; N X ; B 23 0 675 562 ; +C 89 ; WX 600 ; N Y ; B 133 0 695 562 ; +C 90 ; WX 600 ; N Z ; B 86 0 610 562 ; +C 91 ; WX 600 ; N bracketleft ; B 246 -108 574 622 ; +C 92 ; WX 600 ; N backslash ; B 249 -80 468 629 ; +C 93 ; WX 600 ; N bracketright ; B 135 -108 463 622 ; +C 94 ; WX 600 ; N asciicircum ; B 175 354 587 622 ; +C 95 ; WX 600 ; N underscore ; B -27 -125 584 -75 ; +C 96 ; WX 600 ; N quoteleft ; B 343 328 457 562 ; +C 97 ; WX 600 ; N a ; B 76 -15 569 441 ; +C 98 ; WX 600 ; N b ; B 29 -15 625 629 ; +C 99 ; WX 600 ; N c ; B 106 -15 608 441 ; +C 100 ; WX 600 ; N d ; B 85 -15 640 629 ; +C 101 ; WX 600 ; N e ; B 106 -15 598 441 ; +C 102 ; WX 600 ; N f ; B 114 0 662 629 ; L i fi ; L l fl ; +C 103 ; WX 600 ; N g ; B 61 -157 657 441 ; +C 104 ; WX 600 ; N h ; B 33 0 592 629 ; +C 105 ; WX 600 ; N i ; B 95 0 515 657 ; +C 106 ; WX 600 ; N j ; B 52 -157 550 657 ; +C 107 ; WX 600 ; N k ; B 58 0 633 629 ; +C 108 ; WX 600 ; N l ; B 95 0 515 629 ; +C 109 ; WX 600 ; N m ; B -5 0 615 441 ; +C 110 ; WX 600 ; N n ; B 26 0 585 441 ; +C 111 ; WX 600 ; N o ; B 102 -15 588 441 ; +C 112 ; WX 600 ; N p ; B -24 -157 605 441 ; +C 113 ; WX 600 ; N q ; B 85 -157 682 441 ; +C 114 ; WX 600 ; N r ; B 60 0 636 441 ; +C 115 ; WX 600 ; N s ; B 78 -15 584 441 ; +C 116 ; WX 600 ; N t ; B 167 -15 561 561 ; +C 117 ; WX 600 ; N u ; B 101 -15 572 426 ; +C 118 ; WX 600 ; N v ; B 90 -10 681 426 ; +C 119 ; WX 600 ; N w ; B 76 -10 695 426 ; +C 120 ; WX 600 ; N x ; B 20 0 655 426 ; +C 121 ; WX 600 ; N y ; B -4 -157 683 426 ; +C 122 ; WX 600 ; N z ; B 99 0 593 426 ; +C 123 ; WX 600 ; N braceleft ; B 233 -108 569 622 ; +C 124 ; WX 600 ; N bar ; B 222 -250 485 750 ; +C 125 ; WX 600 ; N braceright ; B 140 -108 477 622 ; +C 126 ; WX 600 ; N asciitilde ; B 116 197 600 320 ; +C 161 ; WX 600 ; N exclamdown ; B 225 -157 445 430 ; +C 162 ; WX 600 ; N cent ; B 151 -49 588 614 ; +C 163 ; WX 600 ; N sterling ; B 124 -21 621 611 ; +C 164 ; WX 600 ; N fraction ; B 84 -57 646 665 ; +C 165 ; WX 600 ; N yen ; B 120 0 693 562 ; +C 166 ; WX 600 ; N florin ; B -26 -143 671 622 ; +C 167 ; WX 600 ; N section ; B 104 -78 590 580 ; +C 168 ; WX 600 ; N currency ; B 94 58 628 506 ; +C 169 ; WX 600 ; N quotesingle ; B 345 328 460 562 ; +C 170 ; WX 600 ; N quotedblleft ; B 262 328 541 562 ; +C 171 ; WX 600 ; N guillemotleft ; B 92 70 652 446 ; +C 172 ; WX 600 ; N guilsinglleft ; B 204 70 540 446 ; +C 173 ; WX 600 ; N guilsinglright ; B 170 70 506 446 ; +C 174 ; WX 600 ; N fi ; B 3 0 619 629 ; +C 175 ; WX 600 ; N fl ; B 3 0 619 629 ; +C 177 ; WX 600 ; N endash ; B 124 231 586 285 ; +C 178 ; WX 600 ; N dagger ; B 217 -78 546 580 ; +C 179 ; WX 600 ; N daggerdbl ; B 163 -78 546 580 ; +C 180 ; WX 600 ; N periodcentered ; B 275 189 434 327 ; +C 182 ; WX 600 ; N paragraph ; B 100 -78 630 562 ; +C 183 ; WX 600 ; N bullet ; B 224 130 485 383 ; +C 184 ; WX 600 ; N quotesinglbase ; B 185 -134 397 100 ; +C 185 ; WX 600 ; N quotedblbase ; B 115 -134 478 100 ; +C 186 ; WX 600 ; N quotedblright ; B 213 328 576 562 ; +C 187 ; WX 600 ; N guillemotright ; B 58 70 618 446 ; +C 188 ; WX 600 ; N ellipsis ; B 46 -15 575 111 ; +C 189 ; WX 600 ; N perthousand ; B 59 -15 627 622 ; +C 191 ; WX 600 ; N questiondown ; B 105 -157 466 430 ; +C 193 ; WX 600 ; N grave ; B 294 497 484 672 ; +C 194 ; WX 600 ; N acute ; B 348 497 612 672 ; +C 195 ; WX 600 ; N circumflex ; B 229 477 581 654 ; +C 196 ; WX 600 ; N tilde ; B 212 489 629 606 ; +C 197 ; WX 600 ; N macron ; B 232 525 600 565 ; +C 198 ; WX 600 ; N breve ; B 279 501 576 609 ; +C 199 ; WX 600 ; N dotaccent ; B 373 537 478 640 ; +C 200 ; WX 600 ; N dieresis ; B 272 537 579 640 ; +C 202 ; WX 600 ; N ring ; B 332 463 500 627 ; +C 203 ; WX 600 ; N cedilla ; B 197 -151 344 10 ; +C 205 ; WX 600 ; N hungarumlaut ; B 239 497 683 672 ; +C 206 ; WX 600 ; N ogonek ; B 189 -172 377 4 ; +C 207 ; WX 600 ; N caron ; B 262 492 614 669 ; +C 208 ; WX 600 ; N emdash ; B 49 231 661 285 ; +C 225 ; WX 600 ; N AE ; B 3 0 655 562 ; +C 227 ; WX 600 ; N ordfeminine ; B 209 249 512 580 ; +C 232 ; WX 600 ; N Lslash ; B 47 0 607 562 ; +C 233 ; WX 600 ; N Oslash ; B 94 -80 625 629 ; +C 234 ; WX 600 ; N OE ; B 59 0 672 562 ; +C 235 ; WX 600 ; N ordmasculine ; B 210 249 535 580 ; +C 241 ; WX 600 ; N ae ; B 41 -15 626 441 ; +C 245 ; WX 600 ; N dotlessi ; B 95 0 515 426 ; +C 248 ; WX 600 ; N lslash ; B 95 0 587 629 ; +C 249 ; WX 600 ; N oslash ; B 102 -80 588 506 ; +C 250 ; WX 600 ; N oe ; B 54 -15 615 441 ; +C 251 ; WX 600 ; N germandbls ; B 48 -15 617 629 ; +C -1 ; WX 600 ; N Idieresis ; B 96 0 623 753 ; +C -1 ; WX 600 ; N eacute ; B 106 -15 612 672 ; +C -1 ; WX 600 ; N abreve ; B 76 -15 576 609 ; +C -1 ; WX 600 ; N uhungarumlaut ; B 101 -15 723 672 ; +C -1 ; WX 600 ; N ecaron ; B 106 -15 614 669 ; +C -1 ; WX 600 ; N Ydieresis ; B 133 0 695 753 ; +C -1 ; WX 600 ; N divide ; B 136 48 573 467 ; +C -1 ; WX 600 ; N Yacute ; B 133 0 695 805 ; +C -1 ; WX 600 ; N Acircumflex ; B 3 0 607 787 ; +C -1 ; WX 600 ; N aacute ; B 76 -15 612 672 ; +C -1 ; WX 600 ; N Ucircumflex ; B 125 -18 702 787 ; +C -1 ; WX 600 ; N yacute ; B -4 -157 683 672 ; +C -1 ; WX 600 ; N scommaaccent ; B 78 -250 584 441 ; +C -1 ; WX 600 ; N ecircumflex ; B 106 -15 598 654 ; +C -1 ; WX 600 ; N Uring ; B 125 -18 702 760 ; +C -1 ; WX 600 ; N Udieresis ; B 125 -18 702 753 ; +C -1 ; WX 600 ; N aogonek ; B 76 -172 569 441 ; +C -1 ; WX 600 ; N Uacute ; B 125 -18 702 805 ; +C -1 ; WX 600 ; N uogonek ; B 101 -172 572 426 ; +C -1 ; WX 600 ; N Edieresis ; B 53 0 660 753 ; +C -1 ; WX 600 ; N Dcroat ; B 43 0 645 562 ; +C -1 ; WX 600 ; N commaaccent ; B 145 -250 323 -58 ; +C -1 ; WX 600 ; N copyright ; B 53 -18 667 580 ; +C -1 ; WX 600 ; N Emacron ; B 53 0 660 698 ; +C -1 ; WX 600 ; N ccaron ; B 106 -15 614 669 ; +C -1 ; WX 600 ; N aring ; B 76 -15 569 627 ; +C -1 ; WX 600 ; N Ncommaaccent ; B 7 -250 712 562 ; +C -1 ; WX 600 ; N lacute ; B 95 0 640 805 ; +C -1 ; WX 600 ; N agrave ; B 76 -15 569 672 ; +C -1 ; WX 600 ; N Tcommaaccent ; B 108 -250 665 562 ; +C -1 ; WX 600 ; N Cacute ; B 93 -18 655 805 ; +C -1 ; WX 600 ; N atilde ; B 76 -15 629 606 ; +C -1 ; WX 600 ; N Edotaccent ; B 53 0 660 753 ; +C -1 ; WX 600 ; N scaron ; B 78 -15 614 669 ; +C -1 ; WX 600 ; N scedilla ; B 78 -151 584 441 ; +C -1 ; WX 600 ; N iacute ; B 95 0 612 672 ; +C -1 ; WX 600 ; N lozenge ; B 94 0 519 706 ; +C -1 ; WX 600 ; N Rcaron ; B 38 0 642 802 ; +C -1 ; WX 600 ; N Gcommaaccent ; B 83 -250 645 580 ; +C -1 ; WX 600 ; N ucircumflex ; B 101 -15 572 654 ; +C -1 ; WX 600 ; N acircumflex ; B 76 -15 581 654 ; +C -1 ; WX 600 ; N Amacron ; B 3 0 607 698 ; +C -1 ; WX 600 ; N rcaron ; B 60 0 636 669 ; +C -1 ; WX 600 ; N ccedilla ; B 106 -151 614 441 ; +C -1 ; WX 600 ; N Zdotaccent ; B 86 0 610 753 ; +C -1 ; WX 600 ; N Thorn ; B 79 0 606 562 ; +C -1 ; WX 600 ; N Omacron ; B 94 -18 628 698 ; +C -1 ; WX 600 ; N Racute ; B 38 0 670 805 ; +C -1 ; WX 600 ; N Sacute ; B 76 -20 650 805 ; +C -1 ; WX 600 ; N dcaron ; B 85 -15 849 629 ; +C -1 ; WX 600 ; N Umacron ; B 125 -18 702 698 ; +C -1 ; WX 600 ; N uring ; B 101 -15 572 627 ; +C -1 ; WX 600 ; N threesuperior ; B 213 240 501 622 ; +C -1 ; WX 600 ; N Ograve ; B 94 -18 625 805 ; +C -1 ; WX 600 ; N Agrave ; B 3 0 607 805 ; +C -1 ; WX 600 ; N Abreve ; B 3 0 607 732 ; +C -1 ; WX 600 ; N multiply ; B 103 43 607 470 ; +C -1 ; WX 600 ; N uacute ; B 101 -15 602 672 ; +C -1 ; WX 600 ; N Tcaron ; B 108 0 665 802 ; +C -1 ; WX 600 ; N partialdiff ; B 45 -38 546 710 ; +C -1 ; WX 600 ; N ydieresis ; B -4 -157 683 620 ; +C -1 ; WX 600 ; N Nacute ; B 7 -13 712 805 ; +C -1 ; WX 600 ; N icircumflex ; B 95 0 551 654 ; +C -1 ; WX 600 ; N Ecircumflex ; B 53 0 660 787 ; +C -1 ; WX 600 ; N adieresis ; B 76 -15 575 620 ; +C -1 ; WX 600 ; N edieresis ; B 106 -15 598 620 ; +C -1 ; WX 600 ; N cacute ; B 106 -15 612 672 ; +C -1 ; WX 600 ; N nacute ; B 26 0 602 672 ; +C -1 ; WX 600 ; N umacron ; B 101 -15 600 565 ; +C -1 ; WX 600 ; N Ncaron ; B 7 -13 712 802 ; +C -1 ; WX 600 ; N Iacute ; B 96 0 640 805 ; +C -1 ; WX 600 ; N plusminus ; B 96 44 594 558 ; +C -1 ; WX 600 ; N brokenbar ; B 238 -175 469 675 ; +C -1 ; WX 600 ; N registered ; B 53 -18 667 580 ; +C -1 ; WX 600 ; N Gbreve ; B 83 -18 645 732 ; +C -1 ; WX 600 ; N Idotaccent ; B 96 0 623 753 ; +C -1 ; WX 600 ; N summation ; B 15 -10 670 706 ; +C -1 ; WX 600 ; N Egrave ; B 53 0 660 805 ; +C -1 ; WX 600 ; N racute ; B 60 0 636 672 ; +C -1 ; WX 600 ; N omacron ; B 102 -15 600 565 ; +C -1 ; WX 600 ; N Zacute ; B 86 0 670 805 ; +C -1 ; WX 600 ; N Zcaron ; B 86 0 642 802 ; +C -1 ; WX 600 ; N greaterequal ; B 98 0 594 710 ; +C -1 ; WX 600 ; N Eth ; B 43 0 645 562 ; +C -1 ; WX 600 ; N Ccedilla ; B 93 -151 658 580 ; +C -1 ; WX 600 ; N lcommaaccent ; B 95 -250 515 629 ; +C -1 ; WX 600 ; N tcaron ; B 167 -15 587 717 ; +C -1 ; WX 600 ; N eogonek ; B 106 -172 598 441 ; +C -1 ; WX 600 ; N Uogonek ; B 124 -172 702 562 ; +C -1 ; WX 600 ; N Aacute ; B 3 0 660 805 ; +C -1 ; WX 600 ; N Adieresis ; B 3 0 607 753 ; +C -1 ; WX 600 ; N egrave ; B 106 -15 598 672 ; +C -1 ; WX 600 ; N zacute ; B 99 0 612 672 ; +C -1 ; WX 600 ; N iogonek ; B 95 -172 515 657 ; +C -1 ; WX 600 ; N Oacute ; B 94 -18 640 805 ; +C -1 ; WX 600 ; N oacute ; B 102 -15 612 672 ; +C -1 ; WX 600 ; N amacron ; B 76 -15 600 565 ; +C -1 ; WX 600 ; N sacute ; B 78 -15 612 672 ; +C -1 ; WX 600 ; N idieresis ; B 95 0 545 620 ; +C -1 ; WX 600 ; N Ocircumflex ; B 94 -18 625 787 ; +C -1 ; WX 600 ; N Ugrave ; B 125 -18 702 805 ; +C -1 ; WX 600 ; N Delta ; B 6 0 598 688 ; +C -1 ; WX 600 ; N thorn ; B -24 -157 605 629 ; +C -1 ; WX 600 ; N twosuperior ; B 230 249 535 622 ; +C -1 ; WX 600 ; N Odieresis ; B 94 -18 625 753 ; +C -1 ; WX 600 ; N mu ; B 72 -157 572 426 ; +C -1 ; WX 600 ; N igrave ; B 95 0 515 672 ; +C -1 ; WX 600 ; N ohungarumlaut ; B 102 -15 723 672 ; +C -1 ; WX 600 ; N Eogonek ; B 53 -172 660 562 ; +C -1 ; WX 600 ; N dcroat ; B 85 -15 704 629 ; +C -1 ; WX 600 ; N threequarters ; B 73 -56 659 666 ; +C -1 ; WX 600 ; N Scedilla ; B 76 -151 650 580 ; +C -1 ; WX 600 ; N lcaron ; B 95 0 667 629 ; +C -1 ; WX 600 ; N Kcommaaccent ; B 38 -250 671 562 ; +C -1 ; WX 600 ; N Lacute ; B 47 0 607 805 ; +C -1 ; WX 600 ; N trademark ; B 75 263 742 562 ; +C -1 ; WX 600 ; N edotaccent ; B 106 -15 598 620 ; +C -1 ; WX 600 ; N Igrave ; B 96 0 623 805 ; +C -1 ; WX 600 ; N Imacron ; B 96 0 628 698 ; +C -1 ; WX 600 ; N Lcaron ; B 47 0 632 562 ; +C -1 ; WX 600 ; N onehalf ; B 65 -57 669 665 ; +C -1 ; WX 600 ; N lessequal ; B 98 0 645 710 ; +C -1 ; WX 600 ; N ocircumflex ; B 102 -15 588 654 ; +C -1 ; WX 600 ; N ntilde ; B 26 0 629 606 ; +C -1 ; WX 600 ; N Uhungarumlaut ; B 125 -18 761 805 ; +C -1 ; WX 600 ; N Eacute ; B 53 0 670 805 ; +C -1 ; WX 600 ; N emacron ; B 106 -15 600 565 ; +C -1 ; WX 600 ; N gbreve ; B 61 -157 657 609 ; +C -1 ; WX 600 ; N onequarter ; B 65 -57 674 665 ; +C -1 ; WX 600 ; N Scaron ; B 76 -20 672 802 ; +C -1 ; WX 600 ; N Scommaaccent ; B 76 -250 650 580 ; +C -1 ; WX 600 ; N Ohungarumlaut ; B 94 -18 751 805 ; +C -1 ; WX 600 ; N degree ; B 214 269 576 622 ; +C -1 ; WX 600 ; N ograve ; B 102 -15 588 672 ; +C -1 ; WX 600 ; N Ccaron ; B 93 -18 672 802 ; +C -1 ; WX 600 ; N ugrave ; B 101 -15 572 672 ; +C -1 ; WX 600 ; N radical ; B 85 -15 765 792 ; +C -1 ; WX 600 ; N Dcaron ; B 43 0 645 802 ; +C -1 ; WX 600 ; N rcommaaccent ; B 60 -250 636 441 ; +C -1 ; WX 600 ; N Ntilde ; B 7 -13 712 729 ; +C -1 ; WX 600 ; N otilde ; B 102 -15 629 606 ; +C -1 ; WX 600 ; N Rcommaaccent ; B 38 -250 598 562 ; +C -1 ; WX 600 ; N Lcommaaccent ; B 47 -250 607 562 ; +C -1 ; WX 600 ; N Atilde ; B 3 0 655 729 ; +C -1 ; WX 600 ; N Aogonek ; B 3 -172 607 562 ; +C -1 ; WX 600 ; N Aring ; B 3 0 607 750 ; +C -1 ; WX 600 ; N Otilde ; B 94 -18 655 729 ; +C -1 ; WX 600 ; N zdotaccent ; B 99 0 593 620 ; +C -1 ; WX 600 ; N Ecaron ; B 53 0 660 802 ; +C -1 ; WX 600 ; N Iogonek ; B 96 -172 623 562 ; +C -1 ; WX 600 ; N kcommaaccent ; B 58 -250 633 629 ; +C -1 ; WX 600 ; N minus ; B 129 232 580 283 ; +C -1 ; WX 600 ; N Icircumflex ; B 96 0 623 787 ; +C -1 ; WX 600 ; N ncaron ; B 26 0 614 669 ; +C -1 ; WX 600 ; N tcommaaccent ; B 165 -250 561 561 ; +C -1 ; WX 600 ; N logicalnot ; B 155 108 591 369 ; +C -1 ; WX 600 ; N odieresis ; B 102 -15 588 620 ; +C -1 ; WX 600 ; N udieresis ; B 101 -15 575 620 ; +C -1 ; WX 600 ; N notequal ; B 43 -16 621 529 ; +C -1 ; WX 600 ; N gcommaaccent ; B 61 -157 657 708 ; +C -1 ; WX 600 ; N eth ; B 102 -15 639 629 ; +C -1 ; WX 600 ; N zcaron ; B 99 0 624 669 ; +C -1 ; WX 600 ; N ncommaaccent ; B 26 -250 585 441 ; +C -1 ; WX 600 ; N onesuperior ; B 231 249 491 622 ; +C -1 ; WX 600 ; N imacron ; B 95 0 543 565 ; +C -1 ; WX 600 ; N Euro ; B 0 0 0 0 ; +EndCharMetrics +EndFontMetrics diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/Courier.afm b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/Courier.afm new file mode 100755 index 00000000..2f7be81d --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/Courier.afm @@ -0,0 +1,342 @@ +StartFontMetrics 4.1 +Comment Copyright (c) 1989, 1990, 1991, 1992, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved. +Comment Creation Date: Thu May 1 17:27:09 1997 +Comment UniqueID 43050 +Comment VMusage 39754 50779 +FontName Courier +FullName Courier +FamilyName Courier +Weight Medium +ItalicAngle 0 +IsFixedPitch true +CharacterSet ExtendedRoman +FontBBox -23 -250 715 805 +UnderlinePosition -100 +UnderlineThickness 50 +Version 003.000 +Notice Copyright (c) 1989, 1990, 1991, 1992, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved. +EncodingScheme AdobeStandardEncoding +CapHeight 562 +XHeight 426 +Ascender 629 +Descender -157 +StdHW 51 +StdVW 51 +StartCharMetrics 315 +C 32 ; WX 600 ; N space ; B 0 0 0 0 ; +C 33 ; WX 600 ; N exclam ; B 236 -15 364 572 ; +C 34 ; WX 600 ; N quotedbl ; B 187 328 413 562 ; +C 35 ; WX 600 ; N numbersign ; B 93 -32 507 639 ; +C 36 ; WX 600 ; N dollar ; B 105 -126 496 662 ; +C 37 ; WX 600 ; N percent ; B 81 -15 518 622 ; +C 38 ; WX 600 ; N ampersand ; B 63 -15 538 543 ; +C 39 ; WX 600 ; N quoteright ; B 213 328 376 562 ; +C 40 ; WX 600 ; N parenleft ; B 269 -108 440 622 ; +C 41 ; WX 600 ; N parenright ; B 160 -108 331 622 ; +C 42 ; WX 600 ; N asterisk ; B 116 257 484 607 ; +C 43 ; WX 600 ; N plus ; B 80 44 520 470 ; +C 44 ; WX 600 ; N comma ; B 181 -112 344 122 ; +C 45 ; WX 600 ; N hyphen ; B 103 231 497 285 ; +C 46 ; WX 600 ; N period ; B 229 -15 371 109 ; +C 47 ; WX 600 ; N slash ; B 125 -80 475 629 ; +C 48 ; WX 600 ; N zero ; B 106 -15 494 622 ; +C 49 ; WX 600 ; N one ; B 96 0 505 622 ; +C 50 ; WX 600 ; N two ; B 70 0 471 622 ; +C 51 ; WX 600 ; N three ; B 75 -15 466 622 ; +C 52 ; WX 600 ; N four ; B 78 0 500 622 ; +C 53 ; WX 600 ; N five ; B 92 -15 497 607 ; +C 54 ; WX 600 ; N six ; B 111 -15 497 622 ; +C 55 ; WX 600 ; N seven ; B 82 0 483 607 ; +C 56 ; WX 600 ; N eight ; B 102 -15 498 622 ; +C 57 ; WX 600 ; N nine ; B 96 -15 489 622 ; +C 58 ; WX 600 ; N colon ; B 229 -15 371 385 ; +C 59 ; WX 600 ; N semicolon ; B 181 -112 371 385 ; +C 60 ; WX 600 ; N less ; B 41 42 519 472 ; +C 61 ; WX 600 ; N equal ; B 80 138 520 376 ; +C 62 ; WX 600 ; N greater ; B 66 42 544 472 ; +C 63 ; WX 600 ; N question ; B 129 -15 492 572 ; +C 64 ; WX 600 ; N at ; B 77 -15 533 622 ; +C 65 ; WX 600 ; N A ; B 3 0 597 562 ; +C 66 ; WX 600 ; N B ; B 43 0 559 562 ; +C 67 ; WX 600 ; N C ; B 41 -18 540 580 ; +C 68 ; WX 600 ; N D ; B 43 0 574 562 ; +C 69 ; WX 600 ; N E ; B 53 0 550 562 ; +C 70 ; WX 600 ; N F ; B 53 0 545 562 ; +C 71 ; WX 600 ; N G ; B 31 -18 575 580 ; +C 72 ; WX 600 ; N H ; B 32 0 568 562 ; +C 73 ; WX 600 ; N I ; B 96 0 504 562 ; +C 74 ; WX 600 ; N J ; B 34 -18 566 562 ; +C 75 ; WX 600 ; N K ; B 38 0 582 562 ; +C 76 ; WX 600 ; N L ; B 47 0 554 562 ; +C 77 ; WX 600 ; N M ; B 4 0 596 562 ; +C 78 ; WX 600 ; N N ; B 7 -13 593 562 ; +C 79 ; WX 600 ; N O ; B 43 -18 557 580 ; +C 80 ; WX 600 ; N P ; B 79 0 558 562 ; +C 81 ; WX 600 ; N Q ; B 43 -138 557 580 ; +C 82 ; WX 600 ; N R ; B 38 0 588 562 ; +C 83 ; WX 600 ; N S ; B 72 -20 529 580 ; +C 84 ; WX 600 ; N T ; B 38 0 563 562 ; +C 85 ; WX 600 ; N U ; B 17 -18 583 562 ; +C 86 ; WX 600 ; N V ; B -4 -13 604 562 ; +C 87 ; WX 600 ; N W ; B -3 -13 603 562 ; +C 88 ; WX 600 ; N X ; B 23 0 577 562 ; +C 89 ; WX 600 ; N Y ; B 24 0 576 562 ; +C 90 ; WX 600 ; N Z ; B 86 0 514 562 ; +C 91 ; WX 600 ; N bracketleft ; B 269 -108 442 622 ; +C 92 ; WX 600 ; N backslash ; B 118 -80 482 629 ; +C 93 ; WX 600 ; N bracketright ; B 158 -108 331 622 ; +C 94 ; WX 600 ; N asciicircum ; B 94 354 506 622 ; +C 95 ; WX 600 ; N underscore ; B 0 -125 600 -75 ; +C 96 ; WX 600 ; N quoteleft ; B 224 328 387 562 ; +C 97 ; WX 600 ; N a ; B 53 -15 559 441 ; +C 98 ; WX 600 ; N b ; B 14 -15 575 629 ; +C 99 ; WX 600 ; N c ; B 66 -15 529 441 ; +C 100 ; WX 600 ; N d ; B 45 -15 591 629 ; +C 101 ; WX 600 ; N e ; B 66 -15 548 441 ; +C 102 ; WX 600 ; N f ; B 114 0 531 629 ; L i fi ; L l fl ; +C 103 ; WX 600 ; N g ; B 45 -157 566 441 ; +C 104 ; WX 600 ; N h ; B 18 0 582 629 ; +C 105 ; WX 600 ; N i ; B 95 0 505 657 ; +C 106 ; WX 600 ; N j ; B 82 -157 410 657 ; +C 107 ; WX 600 ; N k ; B 43 0 580 629 ; +C 108 ; WX 600 ; N l ; B 95 0 505 629 ; +C 109 ; WX 600 ; N m ; B -5 0 605 441 ; +C 110 ; WX 600 ; N n ; B 26 0 575 441 ; +C 111 ; WX 600 ; N o ; B 62 -15 538 441 ; +C 112 ; WX 600 ; N p ; B 9 -157 555 441 ; +C 113 ; WX 600 ; N q ; B 45 -157 591 441 ; +C 114 ; WX 600 ; N r ; B 60 0 559 441 ; +C 115 ; WX 600 ; N s ; B 80 -15 513 441 ; +C 116 ; WX 600 ; N t ; B 87 -15 530 561 ; +C 117 ; WX 600 ; N u ; B 21 -15 562 426 ; +C 118 ; WX 600 ; N v ; B 10 -10 590 426 ; +C 119 ; WX 600 ; N w ; B -4 -10 604 426 ; +C 120 ; WX 600 ; N x ; B 20 0 580 426 ; +C 121 ; WX 600 ; N y ; B 7 -157 592 426 ; +C 122 ; WX 600 ; N z ; B 99 0 502 426 ; +C 123 ; WX 600 ; N braceleft ; B 182 -108 437 622 ; +C 124 ; WX 600 ; N bar ; B 275 -250 326 750 ; +C 125 ; WX 600 ; N braceright ; B 163 -108 418 622 ; +C 126 ; WX 600 ; N asciitilde ; B 63 197 540 320 ; +C 161 ; WX 600 ; N exclamdown ; B 236 -157 364 430 ; +C 162 ; WX 600 ; N cent ; B 96 -49 500 614 ; +C 163 ; WX 600 ; N sterling ; B 84 -21 521 611 ; +C 164 ; WX 600 ; N fraction ; B 92 -57 509 665 ; +C 165 ; WX 600 ; N yen ; B 26 0 574 562 ; +C 166 ; WX 600 ; N florin ; B 4 -143 539 622 ; +C 167 ; WX 600 ; N section ; B 113 -78 488 580 ; +C 168 ; WX 600 ; N currency ; B 73 58 527 506 ; +C 169 ; WX 600 ; N quotesingle ; B 259 328 341 562 ; +C 170 ; WX 600 ; N quotedblleft ; B 143 328 471 562 ; +C 171 ; WX 600 ; N guillemotleft ; B 37 70 563 446 ; +C 172 ; WX 600 ; N guilsinglleft ; B 149 70 451 446 ; +C 173 ; WX 600 ; N guilsinglright ; B 149 70 451 446 ; +C 174 ; WX 600 ; N fi ; B 3 0 597 629 ; +C 175 ; WX 600 ; N fl ; B 3 0 597 629 ; +C 177 ; WX 600 ; N endash ; B 75 231 525 285 ; +C 178 ; WX 600 ; N dagger ; B 141 -78 459 580 ; +C 179 ; WX 600 ; N daggerdbl ; B 141 -78 459 580 ; +C 180 ; WX 600 ; N periodcentered ; B 222 189 378 327 ; +C 182 ; WX 600 ; N paragraph ; B 50 -78 511 562 ; +C 183 ; WX 600 ; N bullet ; B 172 130 428 383 ; +C 184 ; WX 600 ; N quotesinglbase ; B 213 -134 376 100 ; +C 185 ; WX 600 ; N quotedblbase ; B 143 -134 457 100 ; +C 186 ; WX 600 ; N quotedblright ; B 143 328 457 562 ; +C 187 ; WX 600 ; N guillemotright ; B 37 70 563 446 ; +C 188 ; WX 600 ; N ellipsis ; B 37 -15 563 111 ; +C 189 ; WX 600 ; N perthousand ; B 3 -15 600 622 ; +C 191 ; WX 600 ; N questiondown ; B 108 -157 471 430 ; +C 193 ; WX 600 ; N grave ; B 151 497 378 672 ; +C 194 ; WX 600 ; N acute ; B 242 497 469 672 ; +C 195 ; WX 600 ; N circumflex ; B 124 477 476 654 ; +C 196 ; WX 600 ; N tilde ; B 105 489 503 606 ; +C 197 ; WX 600 ; N macron ; B 120 525 480 565 ; +C 198 ; WX 600 ; N breve ; B 153 501 447 609 ; +C 199 ; WX 600 ; N dotaccent ; B 249 537 352 640 ; +C 200 ; WX 600 ; N dieresis ; B 148 537 453 640 ; +C 202 ; WX 600 ; N ring ; B 218 463 382 627 ; +C 203 ; WX 600 ; N cedilla ; B 224 -151 362 10 ; +C 205 ; WX 600 ; N hungarumlaut ; B 133 497 540 672 ; +C 206 ; WX 600 ; N ogonek ; B 211 -172 407 4 ; +C 207 ; WX 600 ; N caron ; B 124 492 476 669 ; +C 208 ; WX 600 ; N emdash ; B 0 231 600 285 ; +C 225 ; WX 600 ; N AE ; B 3 0 550 562 ; +C 227 ; WX 600 ; N ordfeminine ; B 156 249 442 580 ; +C 232 ; WX 600 ; N Lslash ; B 47 0 554 562 ; +C 233 ; WX 600 ; N Oslash ; B 43 -80 557 629 ; +C 234 ; WX 600 ; N OE ; B 7 0 567 562 ; +C 235 ; WX 600 ; N ordmasculine ; B 157 249 443 580 ; +C 241 ; WX 600 ; N ae ; B 19 -15 570 441 ; +C 245 ; WX 600 ; N dotlessi ; B 95 0 505 426 ; +C 248 ; WX 600 ; N lslash ; B 95 0 505 629 ; +C 249 ; WX 600 ; N oslash ; B 62 -80 538 506 ; +C 250 ; WX 600 ; N oe ; B 19 -15 559 441 ; +C 251 ; WX 600 ; N germandbls ; B 48 -15 588 629 ; +C -1 ; WX 600 ; N Idieresis ; B 96 0 504 753 ; +C -1 ; WX 600 ; N eacute ; B 66 -15 548 672 ; +C -1 ; WX 600 ; N abreve ; B 53 -15 559 609 ; +C -1 ; WX 600 ; N uhungarumlaut ; B 21 -15 580 672 ; +C -1 ; WX 600 ; N ecaron ; B 66 -15 548 669 ; +C -1 ; WX 600 ; N Ydieresis ; B 24 0 576 753 ; +C -1 ; WX 600 ; N divide ; B 87 48 513 467 ; +C -1 ; WX 600 ; N Yacute ; B 24 0 576 805 ; +C -1 ; WX 600 ; N Acircumflex ; B 3 0 597 787 ; +C -1 ; WX 600 ; N aacute ; B 53 -15 559 672 ; +C -1 ; WX 600 ; N Ucircumflex ; B 17 -18 583 787 ; +C -1 ; WX 600 ; N yacute ; B 7 -157 592 672 ; +C -1 ; WX 600 ; N scommaaccent ; B 80 -250 513 441 ; +C -1 ; WX 600 ; N ecircumflex ; B 66 -15 548 654 ; +C -1 ; WX 600 ; N Uring ; B 17 -18 583 760 ; +C -1 ; WX 600 ; N Udieresis ; B 17 -18 583 753 ; +C -1 ; WX 600 ; N aogonek ; B 53 -172 587 441 ; +C -1 ; WX 600 ; N Uacute ; B 17 -18 583 805 ; +C -1 ; WX 600 ; N uogonek ; B 21 -172 590 426 ; +C -1 ; WX 600 ; N Edieresis ; B 53 0 550 753 ; +C -1 ; WX 600 ; N Dcroat ; B 30 0 574 562 ; +C -1 ; WX 600 ; N commaaccent ; B 198 -250 335 -58 ; +C -1 ; WX 600 ; N copyright ; B 0 -18 600 580 ; +C -1 ; WX 600 ; N Emacron ; B 53 0 550 698 ; +C -1 ; WX 600 ; N ccaron ; B 66 -15 529 669 ; +C -1 ; WX 600 ; N aring ; B 53 -15 559 627 ; +C -1 ; WX 600 ; N Ncommaaccent ; B 7 -250 593 562 ; +C -1 ; WX 600 ; N lacute ; B 95 0 505 805 ; +C -1 ; WX 600 ; N agrave ; B 53 -15 559 672 ; +C -1 ; WX 600 ; N Tcommaaccent ; B 38 -250 563 562 ; +C -1 ; WX 600 ; N Cacute ; B 41 -18 540 805 ; +C -1 ; WX 600 ; N atilde ; B 53 -15 559 606 ; +C -1 ; WX 600 ; N Edotaccent ; B 53 0 550 753 ; +C -1 ; WX 600 ; N scaron ; B 80 -15 513 669 ; +C -1 ; WX 600 ; N scedilla ; B 80 -151 513 441 ; +C -1 ; WX 600 ; N iacute ; B 95 0 505 672 ; +C -1 ; WX 600 ; N lozenge ; B 18 0 443 706 ; +C -1 ; WX 600 ; N Rcaron ; B 38 0 588 802 ; +C -1 ; WX 600 ; N Gcommaaccent ; B 31 -250 575 580 ; +C -1 ; WX 600 ; N ucircumflex ; B 21 -15 562 654 ; +C -1 ; WX 600 ; N acircumflex ; B 53 -15 559 654 ; +C -1 ; WX 600 ; N Amacron ; B 3 0 597 698 ; +C -1 ; WX 600 ; N rcaron ; B 60 0 559 669 ; +C -1 ; WX 600 ; N ccedilla ; B 66 -151 529 441 ; +C -1 ; WX 600 ; N Zdotaccent ; B 86 0 514 753 ; +C -1 ; WX 600 ; N Thorn ; B 79 0 538 562 ; +C -1 ; WX 600 ; N Omacron ; B 43 -18 557 698 ; +C -1 ; WX 600 ; N Racute ; B 38 0 588 805 ; +C -1 ; WX 600 ; N Sacute ; B 72 -20 529 805 ; +C -1 ; WX 600 ; N dcaron ; B 45 -15 715 629 ; +C -1 ; WX 600 ; N Umacron ; B 17 -18 583 698 ; +C -1 ; WX 600 ; N uring ; B 21 -15 562 627 ; +C -1 ; WX 600 ; N threesuperior ; B 155 240 406 622 ; +C -1 ; WX 600 ; N Ograve ; B 43 -18 557 805 ; +C -1 ; WX 600 ; N Agrave ; B 3 0 597 805 ; +C -1 ; WX 600 ; N Abreve ; B 3 0 597 732 ; +C -1 ; WX 600 ; N multiply ; B 87 43 515 470 ; +C -1 ; WX 600 ; N uacute ; B 21 -15 562 672 ; +C -1 ; WX 600 ; N Tcaron ; B 38 0 563 802 ; +C -1 ; WX 600 ; N partialdiff ; B 17 -38 459 710 ; +C -1 ; WX 600 ; N ydieresis ; B 7 -157 592 620 ; +C -1 ; WX 600 ; N Nacute ; B 7 -13 593 805 ; +C -1 ; WX 600 ; N icircumflex ; B 94 0 505 654 ; +C -1 ; WX 600 ; N Ecircumflex ; B 53 0 550 787 ; +C -1 ; WX 600 ; N adieresis ; B 53 -15 559 620 ; +C -1 ; WX 600 ; N edieresis ; B 66 -15 548 620 ; +C -1 ; WX 600 ; N cacute ; B 66 -15 529 672 ; +C -1 ; WX 600 ; N nacute ; B 26 0 575 672 ; +C -1 ; WX 600 ; N umacron ; B 21 -15 562 565 ; +C -1 ; WX 600 ; N Ncaron ; B 7 -13 593 802 ; +C -1 ; WX 600 ; N Iacute ; B 96 0 504 805 ; +C -1 ; WX 600 ; N plusminus ; B 87 44 513 558 ; +C -1 ; WX 600 ; N brokenbar ; B 275 -175 326 675 ; +C -1 ; WX 600 ; N registered ; B 0 -18 600 580 ; +C -1 ; WX 600 ; N Gbreve ; B 31 -18 575 732 ; +C -1 ; WX 600 ; N Idotaccent ; B 96 0 504 753 ; +C -1 ; WX 600 ; N summation ; B 15 -10 585 706 ; +C -1 ; WX 600 ; N Egrave ; B 53 0 550 805 ; +C -1 ; WX 600 ; N racute ; B 60 0 559 672 ; +C -1 ; WX 600 ; N omacron ; B 62 -15 538 565 ; +C -1 ; WX 600 ; N Zacute ; B 86 0 514 805 ; +C -1 ; WX 600 ; N Zcaron ; B 86 0 514 802 ; +C -1 ; WX 600 ; N greaterequal ; B 98 0 502 710 ; +C -1 ; WX 600 ; N Eth ; B 30 0 574 562 ; +C -1 ; WX 600 ; N Ccedilla ; B 41 -151 540 580 ; +C -1 ; WX 600 ; N lcommaaccent ; B 95 -250 505 629 ; +C -1 ; WX 600 ; N tcaron ; B 87 -15 530 717 ; +C -1 ; WX 600 ; N eogonek ; B 66 -172 548 441 ; +C -1 ; WX 600 ; N Uogonek ; B 17 -172 583 562 ; +C -1 ; WX 600 ; N Aacute ; B 3 0 597 805 ; +C -1 ; WX 600 ; N Adieresis ; B 3 0 597 753 ; +C -1 ; WX 600 ; N egrave ; B 66 -15 548 672 ; +C -1 ; WX 600 ; N zacute ; B 99 0 502 672 ; +C -1 ; WX 600 ; N iogonek ; B 95 -172 505 657 ; +C -1 ; WX 600 ; N Oacute ; B 43 -18 557 805 ; +C -1 ; WX 600 ; N oacute ; B 62 -15 538 672 ; +C -1 ; WX 600 ; N amacron ; B 53 -15 559 565 ; +C -1 ; WX 600 ; N sacute ; B 80 -15 513 672 ; +C -1 ; WX 600 ; N idieresis ; B 95 0 505 620 ; +C -1 ; WX 600 ; N Ocircumflex ; B 43 -18 557 787 ; +C -1 ; WX 600 ; N Ugrave ; B 17 -18 583 805 ; +C -1 ; WX 600 ; N Delta ; B 6 0 598 688 ; +C -1 ; WX 600 ; N thorn ; B -6 -157 555 629 ; +C -1 ; WX 600 ; N twosuperior ; B 177 249 424 622 ; +C -1 ; WX 600 ; N Odieresis ; B 43 -18 557 753 ; +C -1 ; WX 600 ; N mu ; B 21 -157 562 426 ; +C -1 ; WX 600 ; N igrave ; B 95 0 505 672 ; +C -1 ; WX 600 ; N ohungarumlaut ; B 62 -15 580 672 ; +C -1 ; WX 600 ; N Eogonek ; B 53 -172 561 562 ; +C -1 ; WX 600 ; N dcroat ; B 45 -15 591 629 ; +C -1 ; WX 600 ; N threequarters ; B 8 -56 593 666 ; +C -1 ; WX 600 ; N Scedilla ; B 72 -151 529 580 ; +C -1 ; WX 600 ; N lcaron ; B 95 0 533 629 ; +C -1 ; WX 600 ; N Kcommaaccent ; B 38 -250 582 562 ; +C -1 ; WX 600 ; N Lacute ; B 47 0 554 805 ; +C -1 ; WX 600 ; N trademark ; B -23 263 623 562 ; +C -1 ; WX 600 ; N edotaccent ; B 66 -15 548 620 ; +C -1 ; WX 600 ; N Igrave ; B 96 0 504 805 ; +C -1 ; WX 600 ; N Imacron ; B 96 0 504 698 ; +C -1 ; WX 600 ; N Lcaron ; B 47 0 554 562 ; +C -1 ; WX 600 ; N onehalf ; B 0 -57 611 665 ; +C -1 ; WX 600 ; N lessequal ; B 98 0 502 710 ; +C -1 ; WX 600 ; N ocircumflex ; B 62 -15 538 654 ; +C -1 ; WX 600 ; N ntilde ; B 26 0 575 606 ; +C -1 ; WX 600 ; N Uhungarumlaut ; B 17 -18 590 805 ; +C -1 ; WX 600 ; N Eacute ; B 53 0 550 805 ; +C -1 ; WX 600 ; N emacron ; B 66 -15 548 565 ; +C -1 ; WX 600 ; N gbreve ; B 45 -157 566 609 ; +C -1 ; WX 600 ; N onequarter ; B 0 -57 600 665 ; +C -1 ; WX 600 ; N Scaron ; B 72 -20 529 802 ; +C -1 ; WX 600 ; N Scommaaccent ; B 72 -250 529 580 ; +C -1 ; WX 600 ; N Ohungarumlaut ; B 43 -18 580 805 ; +C -1 ; WX 600 ; N degree ; B 123 269 477 622 ; +C -1 ; WX 600 ; N ograve ; B 62 -15 538 672 ; +C -1 ; WX 600 ; N Ccaron ; B 41 -18 540 802 ; +C -1 ; WX 600 ; N ugrave ; B 21 -15 562 672 ; +C -1 ; WX 600 ; N radical ; B 3 -15 597 792 ; +C -1 ; WX 600 ; N Dcaron ; B 43 0 574 802 ; +C -1 ; WX 600 ; N rcommaaccent ; B 60 -250 559 441 ; +C -1 ; WX 600 ; N Ntilde ; B 7 -13 593 729 ; +C -1 ; WX 600 ; N otilde ; B 62 -15 538 606 ; +C -1 ; WX 600 ; N Rcommaaccent ; B 38 -250 588 562 ; +C -1 ; WX 600 ; N Lcommaaccent ; B 47 -250 554 562 ; +C -1 ; WX 600 ; N Atilde ; B 3 0 597 729 ; +C -1 ; WX 600 ; N Aogonek ; B 3 -172 608 562 ; +C -1 ; WX 600 ; N Aring ; B 3 0 597 750 ; +C -1 ; WX 600 ; N Otilde ; B 43 -18 557 729 ; +C -1 ; WX 600 ; N zdotaccent ; B 99 0 502 620 ; +C -1 ; WX 600 ; N Ecaron ; B 53 0 550 802 ; +C -1 ; WX 600 ; N Iogonek ; B 96 -172 504 562 ; +C -1 ; WX 600 ; N kcommaaccent ; B 43 -250 580 629 ; +C -1 ; WX 600 ; N minus ; B 80 232 520 283 ; +C -1 ; WX 600 ; N Icircumflex ; B 96 0 504 787 ; +C -1 ; WX 600 ; N ncaron ; B 26 0 575 669 ; +C -1 ; WX 600 ; N tcommaaccent ; B 87 -250 530 561 ; +C -1 ; WX 600 ; N logicalnot ; B 87 108 513 369 ; +C -1 ; WX 600 ; N odieresis ; B 62 -15 538 620 ; +C -1 ; WX 600 ; N udieresis ; B 21 -15 562 620 ; +C -1 ; WX 600 ; N notequal ; B 15 -16 540 529 ; +C -1 ; WX 600 ; N gcommaaccent ; B 45 -157 566 708 ; +C -1 ; WX 600 ; N eth ; B 62 -15 538 629 ; +C -1 ; WX 600 ; N zcaron ; B 99 0 502 669 ; +C -1 ; WX 600 ; N ncommaaccent ; B 26 -250 575 441 ; +C -1 ; WX 600 ; N onesuperior ; B 172 249 428 622 ; +C -1 ; WX 600 ; N imacron ; B 95 0 505 565 ; +C -1 ; WX 600 ; N Euro ; B 0 0 0 0 ; +EndCharMetrics +EndFontMetrics diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/Helvetica-Bold.afm b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/Helvetica-Bold.afm new file mode 100755 index 00000000..837c594e --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/Helvetica-Bold.afm @@ -0,0 +1,2827 @@ +StartFontMetrics 4.1 +Comment Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All Rights Reserved. +Comment Creation Date: Thu May 1 12:43:52 1997 +Comment UniqueID 43052 +Comment VMusage 37169 48194 +FontName Helvetica-Bold +FullName Helvetica Bold +FamilyName Helvetica +Weight Bold +ItalicAngle 0 +IsFixedPitch false +CharacterSet ExtendedRoman +FontBBox -170 -228 1003 962 +UnderlinePosition -100 +UnderlineThickness 50 +Version 002.000 +Notice Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All Rights Reserved.Helvetica is a trademark of Linotype-Hell AG and/or its subsidiaries. +EncodingScheme AdobeStandardEncoding +CapHeight 718 +XHeight 532 +Ascender 718 +Descender -207 +StdHW 118 +StdVW 140 +StartCharMetrics 315 +C 32 ; WX 278 ; N space ; B 0 0 0 0 ; +C 33 ; WX 333 ; N exclam ; B 90 0 244 718 ; +C 34 ; WX 474 ; N quotedbl ; B 98 447 376 718 ; +C 35 ; WX 556 ; N numbersign ; B 18 0 538 698 ; +C 36 ; WX 556 ; N dollar ; B 30 -115 523 775 ; +C 37 ; WX 889 ; N percent ; B 28 -19 861 710 ; +C 38 ; WX 722 ; N ampersand ; B 54 -19 701 718 ; +C 39 ; WX 278 ; N quoteright ; B 69 445 209 718 ; +C 40 ; WX 333 ; N parenleft ; B 35 -208 314 734 ; +C 41 ; WX 333 ; N parenright ; B 19 -208 298 734 ; +C 42 ; WX 389 ; N asterisk ; B 27 387 362 718 ; +C 43 ; WX 584 ; N plus ; B 40 0 544 506 ; +C 44 ; WX 278 ; N comma ; B 64 -168 214 146 ; +C 45 ; WX 333 ; N hyphen ; B 27 215 306 345 ; +C 46 ; WX 278 ; N period ; B 64 0 214 146 ; +C 47 ; WX 278 ; N slash ; B -33 -19 311 737 ; +C 48 ; WX 556 ; N zero ; B 32 -19 524 710 ; +C 49 ; WX 556 ; N one ; B 69 0 378 710 ; +C 50 ; WX 556 ; N two ; B 26 0 511 710 ; +C 51 ; WX 556 ; N three ; B 27 -19 516 710 ; +C 52 ; WX 556 ; N four ; B 27 0 526 710 ; +C 53 ; WX 556 ; N five ; B 27 -19 516 698 ; +C 54 ; WX 556 ; N six ; B 31 -19 520 710 ; +C 55 ; WX 556 ; N seven ; B 25 0 528 698 ; +C 56 ; WX 556 ; N eight ; B 32 -19 524 710 ; +C 57 ; WX 556 ; N nine ; B 30 -19 522 710 ; +C 58 ; WX 333 ; N colon ; B 92 0 242 512 ; +C 59 ; WX 333 ; N semicolon ; B 92 -168 242 512 ; +C 60 ; WX 584 ; N less ; B 38 -8 546 514 ; +C 61 ; WX 584 ; N equal ; B 40 87 544 419 ; +C 62 ; WX 584 ; N greater ; B 38 -8 546 514 ; +C 63 ; WX 611 ; N question ; B 60 0 556 727 ; +C 64 ; WX 975 ; N at ; B 118 -19 856 737 ; +C 65 ; WX 722 ; N A ; B 20 0 702 718 ; +C 66 ; WX 722 ; N B ; B 76 0 669 718 ; +C 67 ; WX 722 ; N C ; B 44 -19 684 737 ; +C 68 ; WX 722 ; N D ; B 76 0 685 718 ; +C 69 ; WX 667 ; N E ; B 76 0 621 718 ; +C 70 ; WX 611 ; N F ; B 76 0 587 718 ; +C 71 ; WX 778 ; N G ; B 44 -19 713 737 ; +C 72 ; WX 722 ; N H ; B 71 0 651 718 ; +C 73 ; WX 278 ; N I ; B 64 0 214 718 ; +C 74 ; WX 556 ; N J ; B 22 -18 484 718 ; +C 75 ; WX 722 ; N K ; B 87 0 722 718 ; +C 76 ; WX 611 ; N L ; B 76 0 583 718 ; +C 77 ; WX 833 ; N M ; B 69 0 765 718 ; +C 78 ; WX 722 ; N N ; B 69 0 654 718 ; +C 79 ; WX 778 ; N O ; B 44 -19 734 737 ; +C 80 ; WX 667 ; N P ; B 76 0 627 718 ; +C 81 ; WX 778 ; N Q ; B 44 -52 737 737 ; +C 82 ; WX 722 ; N R ; B 76 0 677 718 ; +C 83 ; WX 667 ; N S ; B 39 -19 629 737 ; +C 84 ; WX 611 ; N T ; B 14 0 598 718 ; +C 85 ; WX 722 ; N U ; B 72 -19 651 718 ; +C 86 ; WX 667 ; N V ; B 19 0 648 718 ; +C 87 ; WX 944 ; N W ; B 16 0 929 718 ; +C 88 ; WX 667 ; N X ; B 14 0 653 718 ; +C 89 ; WX 667 ; N Y ; B 15 0 653 718 ; +C 90 ; WX 611 ; N Z ; B 25 0 586 718 ; +C 91 ; WX 333 ; N bracketleft ; B 63 -196 309 722 ; +C 92 ; WX 278 ; N backslash ; B -33 -19 311 737 ; +C 93 ; WX 333 ; N bracketright ; B 24 -196 270 722 ; +C 94 ; WX 584 ; N asciicircum ; B 62 323 522 698 ; +C 95 ; WX 556 ; N underscore ; B 0 -125 556 -75 ; +C 96 ; WX 278 ; N quoteleft ; B 69 454 209 727 ; +C 97 ; WX 556 ; N a ; B 29 -14 527 546 ; +C 98 ; WX 611 ; N b ; B 61 -14 578 718 ; +C 99 ; WX 556 ; N c ; B 34 -14 524 546 ; +C 100 ; WX 611 ; N d ; B 34 -14 551 718 ; +C 101 ; WX 556 ; N e ; B 23 -14 528 546 ; +C 102 ; WX 333 ; N f ; B 10 0 318 727 ; L i fi ; L l fl ; +C 103 ; WX 611 ; N g ; B 40 -217 553 546 ; +C 104 ; WX 611 ; N h ; B 65 0 546 718 ; +C 105 ; WX 278 ; N i ; B 69 0 209 725 ; +C 106 ; WX 278 ; N j ; B 3 -214 209 725 ; +C 107 ; WX 556 ; N k ; B 69 0 562 718 ; +C 108 ; WX 278 ; N l ; B 69 0 209 718 ; +C 109 ; WX 889 ; N m ; B 64 0 826 546 ; +C 110 ; WX 611 ; N n ; B 65 0 546 546 ; +C 111 ; WX 611 ; N o ; B 34 -14 578 546 ; +C 112 ; WX 611 ; N p ; B 62 -207 578 546 ; +C 113 ; WX 611 ; N q ; B 34 -207 552 546 ; +C 114 ; WX 389 ; N r ; B 64 0 373 546 ; +C 115 ; WX 556 ; N s ; B 30 -14 519 546 ; +C 116 ; WX 333 ; N t ; B 10 -6 309 676 ; +C 117 ; WX 611 ; N u ; B 66 -14 545 532 ; +C 118 ; WX 556 ; N v ; B 13 0 543 532 ; +C 119 ; WX 778 ; N w ; B 10 0 769 532 ; +C 120 ; WX 556 ; N x ; B 15 0 541 532 ; +C 121 ; WX 556 ; N y ; B 10 -214 539 532 ; +C 122 ; WX 500 ; N z ; B 20 0 480 532 ; +C 123 ; WX 389 ; N braceleft ; B 48 -196 365 722 ; +C 124 ; WX 280 ; N bar ; B 84 -225 196 775 ; +C 125 ; WX 389 ; N braceright ; B 24 -196 341 722 ; +C 126 ; WX 584 ; N asciitilde ; B 61 163 523 343 ; +C 161 ; WX 333 ; N exclamdown ; B 90 -186 244 532 ; +C 162 ; WX 556 ; N cent ; B 34 -118 524 628 ; +C 163 ; WX 556 ; N sterling ; B 28 -16 541 718 ; +C 164 ; WX 167 ; N fraction ; B -170 -19 336 710 ; +C 165 ; WX 556 ; N yen ; B -9 0 565 698 ; +C 166 ; WX 556 ; N florin ; B -10 -210 516 737 ; +C 167 ; WX 556 ; N section ; B 34 -184 522 727 ; +C 168 ; WX 556 ; N currency ; B -3 76 559 636 ; +C 169 ; WX 238 ; N quotesingle ; B 70 447 168 718 ; +C 170 ; WX 500 ; N quotedblleft ; B 64 454 436 727 ; +C 171 ; WX 556 ; N guillemotleft ; B 88 76 468 484 ; +C 172 ; WX 333 ; N guilsinglleft ; B 83 76 250 484 ; +C 173 ; WX 333 ; N guilsinglright ; B 83 76 250 484 ; +C 174 ; WX 611 ; N fi ; B 10 0 542 727 ; +C 175 ; WX 611 ; N fl ; B 10 0 542 727 ; +C 177 ; WX 556 ; N endash ; B 0 227 556 333 ; +C 178 ; WX 556 ; N dagger ; B 36 -171 520 718 ; +C 179 ; WX 556 ; N daggerdbl ; B 36 -171 520 718 ; +C 180 ; WX 278 ; N periodcentered ; B 58 172 220 334 ; +C 182 ; WX 556 ; N paragraph ; B -8 -191 539 700 ; +C 183 ; WX 350 ; N bullet ; B 10 194 340 524 ; +C 184 ; WX 278 ; N quotesinglbase ; B 69 -146 209 127 ; +C 185 ; WX 500 ; N quotedblbase ; B 64 -146 436 127 ; +C 186 ; WX 500 ; N quotedblright ; B 64 445 436 718 ; +C 187 ; WX 556 ; N guillemotright ; B 88 76 468 484 ; +C 188 ; WX 1000 ; N ellipsis ; B 92 0 908 146 ; +C 189 ; WX 1000 ; N perthousand ; B -3 -19 1003 710 ; +C 191 ; WX 611 ; N questiondown ; B 55 -195 551 532 ; +C 193 ; WX 333 ; N grave ; B -23 604 225 750 ; +C 194 ; WX 333 ; N acute ; B 108 604 356 750 ; +C 195 ; WX 333 ; N circumflex ; B -10 604 343 750 ; +C 196 ; WX 333 ; N tilde ; B -17 610 350 737 ; +C 197 ; WX 333 ; N macron ; B -6 604 339 678 ; +C 198 ; WX 333 ; N breve ; B -2 604 335 750 ; +C 199 ; WX 333 ; N dotaccent ; B 104 614 230 729 ; +C 200 ; WX 333 ; N dieresis ; B 6 614 327 729 ; +C 202 ; WX 333 ; N ring ; B 59 568 275 776 ; +C 203 ; WX 333 ; N cedilla ; B 6 -228 245 0 ; +C 205 ; WX 333 ; N hungarumlaut ; B 9 604 486 750 ; +C 206 ; WX 333 ; N ogonek ; B 71 -228 304 0 ; +C 207 ; WX 333 ; N caron ; B -10 604 343 750 ; +C 208 ; WX 1000 ; N emdash ; B 0 227 1000 333 ; +C 225 ; WX 1000 ; N AE ; B 5 0 954 718 ; +C 227 ; WX 370 ; N ordfeminine ; B 22 401 347 737 ; +C 232 ; WX 611 ; N Lslash ; B -20 0 583 718 ; +C 233 ; WX 778 ; N Oslash ; B 33 -27 744 745 ; +C 234 ; WX 1000 ; N OE ; B 37 -19 961 737 ; +C 235 ; WX 365 ; N ordmasculine ; B 6 401 360 737 ; +C 241 ; WX 889 ; N ae ; B 29 -14 858 546 ; +C 245 ; WX 278 ; N dotlessi ; B 69 0 209 532 ; +C 248 ; WX 278 ; N lslash ; B -18 0 296 718 ; +C 249 ; WX 611 ; N oslash ; B 22 -29 589 560 ; +C 250 ; WX 944 ; N oe ; B 34 -14 912 546 ; +C 251 ; WX 611 ; N germandbls ; B 69 -14 579 731 ; +C -1 ; WX 278 ; N Idieresis ; B -21 0 300 915 ; +C -1 ; WX 556 ; N eacute ; B 23 -14 528 750 ; +C -1 ; WX 556 ; N abreve ; B 29 -14 527 750 ; +C -1 ; WX 611 ; N uhungarumlaut ; B 66 -14 625 750 ; +C -1 ; WX 556 ; N ecaron ; B 23 -14 528 750 ; +C -1 ; WX 667 ; N Ydieresis ; B 15 0 653 915 ; +C -1 ; WX 584 ; N divide ; B 40 -42 544 548 ; +C -1 ; WX 667 ; N Yacute ; B 15 0 653 936 ; +C -1 ; WX 722 ; N Acircumflex ; B 20 0 702 936 ; +C -1 ; WX 556 ; N aacute ; B 29 -14 527 750 ; +C -1 ; WX 722 ; N Ucircumflex ; B 72 -19 651 936 ; +C -1 ; WX 556 ; N yacute ; B 10 -214 539 750 ; +C -1 ; WX 556 ; N scommaaccent ; B 30 -228 519 546 ; +C -1 ; WX 556 ; N ecircumflex ; B 23 -14 528 750 ; +C -1 ; WX 722 ; N Uring ; B 72 -19 651 962 ; +C -1 ; WX 722 ; N Udieresis ; B 72 -19 651 915 ; +C -1 ; WX 556 ; N aogonek ; B 29 -224 545 546 ; +C -1 ; WX 722 ; N Uacute ; B 72 -19 651 936 ; +C -1 ; WX 611 ; N uogonek ; B 66 -228 545 532 ; +C -1 ; WX 667 ; N Edieresis ; B 76 0 621 915 ; +C -1 ; WX 722 ; N Dcroat ; B -5 0 685 718 ; +C -1 ; WX 250 ; N commaaccent ; B 64 -228 199 -50 ; +C -1 ; WX 737 ; N copyright ; B -11 -19 749 737 ; +C -1 ; WX 667 ; N Emacron ; B 76 0 621 864 ; +C -1 ; WX 556 ; N ccaron ; B 34 -14 524 750 ; +C -1 ; WX 556 ; N aring ; B 29 -14 527 776 ; +C -1 ; WX 722 ; N Ncommaaccent ; B 69 -228 654 718 ; +C -1 ; WX 278 ; N lacute ; B 69 0 329 936 ; +C -1 ; WX 556 ; N agrave ; B 29 -14 527 750 ; +C -1 ; WX 611 ; N Tcommaaccent ; B 14 -228 598 718 ; +C -1 ; WX 722 ; N Cacute ; B 44 -19 684 936 ; +C -1 ; WX 556 ; N atilde ; B 29 -14 527 737 ; +C -1 ; WX 667 ; N Edotaccent ; B 76 0 621 915 ; +C -1 ; WX 556 ; N scaron ; B 30 -14 519 750 ; +C -1 ; WX 556 ; N scedilla ; B 30 -228 519 546 ; +C -1 ; WX 278 ; N iacute ; B 69 0 329 750 ; +C -1 ; WX 494 ; N lozenge ; B 10 0 484 745 ; +C -1 ; WX 722 ; N Rcaron ; B 76 0 677 936 ; +C -1 ; WX 778 ; N Gcommaaccent ; B 44 -228 713 737 ; +C -1 ; WX 611 ; N ucircumflex ; B 66 -14 545 750 ; +C -1 ; WX 556 ; N acircumflex ; B 29 -14 527 750 ; +C -1 ; WX 722 ; N Amacron ; B 20 0 702 864 ; +C -1 ; WX 389 ; N rcaron ; B 18 0 373 750 ; +C -1 ; WX 556 ; N ccedilla ; B 34 -228 524 546 ; +C -1 ; WX 611 ; N Zdotaccent ; B 25 0 586 915 ; +C -1 ; WX 667 ; N Thorn ; B 76 0 627 718 ; +C -1 ; WX 778 ; N Omacron ; B 44 -19 734 864 ; +C -1 ; WX 722 ; N Racute ; B 76 0 677 936 ; +C -1 ; WX 667 ; N Sacute ; B 39 -19 629 936 ; +C -1 ; WX 743 ; N dcaron ; B 34 -14 750 718 ; +C -1 ; WX 722 ; N Umacron ; B 72 -19 651 864 ; +C -1 ; WX 611 ; N uring ; B 66 -14 545 776 ; +C -1 ; WX 333 ; N threesuperior ; B 8 271 326 710 ; +C -1 ; WX 778 ; N Ograve ; B 44 -19 734 936 ; +C -1 ; WX 722 ; N Agrave ; B 20 0 702 936 ; +C -1 ; WX 722 ; N Abreve ; B 20 0 702 936 ; +C -1 ; WX 584 ; N multiply ; B 40 1 545 505 ; +C -1 ; WX 611 ; N uacute ; B 66 -14 545 750 ; +C -1 ; WX 611 ; N Tcaron ; B 14 0 598 936 ; +C -1 ; WX 494 ; N partialdiff ; B 11 -21 494 750 ; +C -1 ; WX 556 ; N ydieresis ; B 10 -214 539 729 ; +C -1 ; WX 722 ; N Nacute ; B 69 0 654 936 ; +C -1 ; WX 278 ; N icircumflex ; B -37 0 316 750 ; +C -1 ; WX 667 ; N Ecircumflex ; B 76 0 621 936 ; +C -1 ; WX 556 ; N adieresis ; B 29 -14 527 729 ; +C -1 ; WX 556 ; N edieresis ; B 23 -14 528 729 ; +C -1 ; WX 556 ; N cacute ; B 34 -14 524 750 ; +C -1 ; WX 611 ; N nacute ; B 65 0 546 750 ; +C -1 ; WX 611 ; N umacron ; B 66 -14 545 678 ; +C -1 ; WX 722 ; N Ncaron ; B 69 0 654 936 ; +C -1 ; WX 278 ; N Iacute ; B 64 0 329 936 ; +C -1 ; WX 584 ; N plusminus ; B 40 0 544 506 ; +C -1 ; WX 280 ; N brokenbar ; B 84 -150 196 700 ; +C -1 ; WX 737 ; N registered ; B -11 -19 748 737 ; +C -1 ; WX 778 ; N Gbreve ; B 44 -19 713 936 ; +C -1 ; WX 278 ; N Idotaccent ; B 64 0 214 915 ; +C -1 ; WX 600 ; N summation ; B 14 -10 585 706 ; +C -1 ; WX 667 ; N Egrave ; B 76 0 621 936 ; +C -1 ; WX 389 ; N racute ; B 64 0 384 750 ; +C -1 ; WX 611 ; N omacron ; B 34 -14 578 678 ; +C -1 ; WX 611 ; N Zacute ; B 25 0 586 936 ; +C -1 ; WX 611 ; N Zcaron ; B 25 0 586 936 ; +C -1 ; WX 549 ; N greaterequal ; B 26 0 523 704 ; +C -1 ; WX 722 ; N Eth ; B -5 0 685 718 ; +C -1 ; WX 722 ; N Ccedilla ; B 44 -228 684 737 ; +C -1 ; WX 278 ; N lcommaaccent ; B 69 -228 213 718 ; +C -1 ; WX 389 ; N tcaron ; B 10 -6 421 878 ; +C -1 ; WX 556 ; N eogonek ; B 23 -228 528 546 ; +C -1 ; WX 722 ; N Uogonek ; B 72 -228 651 718 ; +C -1 ; WX 722 ; N Aacute ; B 20 0 702 936 ; +C -1 ; WX 722 ; N Adieresis ; B 20 0 702 915 ; +C -1 ; WX 556 ; N egrave ; B 23 -14 528 750 ; +C -1 ; WX 500 ; N zacute ; B 20 0 480 750 ; +C -1 ; WX 278 ; N iogonek ; B 16 -224 249 725 ; +C -1 ; WX 778 ; N Oacute ; B 44 -19 734 936 ; +C -1 ; WX 611 ; N oacute ; B 34 -14 578 750 ; +C -1 ; WX 556 ; N amacron ; B 29 -14 527 678 ; +C -1 ; WX 556 ; N sacute ; B 30 -14 519 750 ; +C -1 ; WX 278 ; N idieresis ; B -21 0 300 729 ; +C -1 ; WX 778 ; N Ocircumflex ; B 44 -19 734 936 ; +C -1 ; WX 722 ; N Ugrave ; B 72 -19 651 936 ; +C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ; +C -1 ; WX 611 ; N thorn ; B 62 -208 578 718 ; +C -1 ; WX 333 ; N twosuperior ; B 9 283 324 710 ; +C -1 ; WX 778 ; N Odieresis ; B 44 -19 734 915 ; +C -1 ; WX 611 ; N mu ; B 66 -207 545 532 ; +C -1 ; WX 278 ; N igrave ; B -50 0 209 750 ; +C -1 ; WX 611 ; N ohungarumlaut ; B 34 -14 625 750 ; +C -1 ; WX 667 ; N Eogonek ; B 76 -224 639 718 ; +C -1 ; WX 611 ; N dcroat ; B 34 -14 650 718 ; +C -1 ; WX 834 ; N threequarters ; B 16 -19 799 710 ; +C -1 ; WX 667 ; N Scedilla ; B 39 -228 629 737 ; +C -1 ; WX 400 ; N lcaron ; B 69 0 408 718 ; +C -1 ; WX 722 ; N Kcommaaccent ; B 87 -228 722 718 ; +C -1 ; WX 611 ; N Lacute ; B 76 0 583 936 ; +C -1 ; WX 1000 ; N trademark ; B 44 306 956 718 ; +C -1 ; WX 556 ; N edotaccent ; B 23 -14 528 729 ; +C -1 ; WX 278 ; N Igrave ; B -50 0 214 936 ; +C -1 ; WX 278 ; N Imacron ; B -33 0 312 864 ; +C -1 ; WX 611 ; N Lcaron ; B 76 0 583 718 ; +C -1 ; WX 834 ; N onehalf ; B 26 -19 794 710 ; +C -1 ; WX 549 ; N lessequal ; B 29 0 526 704 ; +C -1 ; WX 611 ; N ocircumflex ; B 34 -14 578 750 ; +C -1 ; WX 611 ; N ntilde ; B 65 0 546 737 ; +C -1 ; WX 722 ; N Uhungarumlaut ; B 72 -19 681 936 ; +C -1 ; WX 667 ; N Eacute ; B 76 0 621 936 ; +C -1 ; WX 556 ; N emacron ; B 23 -14 528 678 ; +C -1 ; WX 611 ; N gbreve ; B 40 -217 553 750 ; +C -1 ; WX 834 ; N onequarter ; B 26 -19 766 710 ; +C -1 ; WX 667 ; N Scaron ; B 39 -19 629 936 ; +C -1 ; WX 667 ; N Scommaaccent ; B 39 -228 629 737 ; +C -1 ; WX 778 ; N Ohungarumlaut ; B 44 -19 734 936 ; +C -1 ; WX 400 ; N degree ; B 57 426 343 712 ; +C -1 ; WX 611 ; N ograve ; B 34 -14 578 750 ; +C -1 ; WX 722 ; N Ccaron ; B 44 -19 684 936 ; +C -1 ; WX 611 ; N ugrave ; B 66 -14 545 750 ; +C -1 ; WX 549 ; N radical ; B 10 -46 512 850 ; +C -1 ; WX 722 ; N Dcaron ; B 76 0 685 936 ; +C -1 ; WX 389 ; N rcommaaccent ; B 64 -228 373 546 ; +C -1 ; WX 722 ; N Ntilde ; B 69 0 654 923 ; +C -1 ; WX 611 ; N otilde ; B 34 -14 578 737 ; +C -1 ; WX 722 ; N Rcommaaccent ; B 76 -228 677 718 ; +C -1 ; WX 611 ; N Lcommaaccent ; B 76 -228 583 718 ; +C -1 ; WX 722 ; N Atilde ; B 20 0 702 923 ; +C -1 ; WX 722 ; N Aogonek ; B 20 -224 742 718 ; +C -1 ; WX 722 ; N Aring ; B 20 0 702 962 ; +C -1 ; WX 778 ; N Otilde ; B 44 -19 734 923 ; +C -1 ; WX 500 ; N zdotaccent ; B 20 0 480 729 ; +C -1 ; WX 667 ; N Ecaron ; B 76 0 621 936 ; +C -1 ; WX 278 ; N Iogonek ; B -11 -228 222 718 ; +C -1 ; WX 556 ; N kcommaaccent ; B 69 -228 562 718 ; +C -1 ; WX 584 ; N minus ; B 40 197 544 309 ; +C -1 ; WX 278 ; N Icircumflex ; B -37 0 316 936 ; +C -1 ; WX 611 ; N ncaron ; B 65 0 546 750 ; +C -1 ; WX 333 ; N tcommaaccent ; B 10 -228 309 676 ; +C -1 ; WX 584 ; N logicalnot ; B 40 108 544 419 ; +C -1 ; WX 611 ; N odieresis ; B 34 -14 578 729 ; +C -1 ; WX 611 ; N udieresis ; B 66 -14 545 729 ; +C -1 ; WX 549 ; N notequal ; B 15 -49 540 570 ; +C -1 ; WX 611 ; N gcommaaccent ; B 40 -217 553 850 ; +C -1 ; WX 611 ; N eth ; B 34 -14 578 737 ; +C -1 ; WX 500 ; N zcaron ; B 20 0 480 750 ; +C -1 ; WX 611 ; N ncommaaccent ; B 65 -228 546 546 ; +C -1 ; WX 333 ; N onesuperior ; B 26 283 237 710 ; +C -1 ; WX 278 ; N imacron ; B -8 0 285 678 ; +C -1 ; WX 556 ; N Euro ; B 0 0 0 0 ; +EndCharMetrics +StartKernData +StartKernPairs 2481 +KPX A C -40 +KPX A Cacute -40 +KPX A Ccaron -40 +KPX A Ccedilla -40 +KPX A G -50 +KPX A Gbreve -50 +KPX A Gcommaaccent -50 +KPX A O -40 +KPX A Oacute -40 +KPX A Ocircumflex -40 +KPX A Odieresis -40 +KPX A Ograve -40 +KPX A Ohungarumlaut -40 +KPX A Omacron -40 +KPX A Oslash -40 +KPX A Otilde -40 +KPX A Q -40 +KPX A T -90 +KPX A Tcaron -90 +KPX A Tcommaaccent -90 +KPX A U -50 +KPX A Uacute -50 +KPX A Ucircumflex -50 +KPX A Udieresis -50 +KPX A Ugrave -50 +KPX A Uhungarumlaut -50 +KPX A Umacron -50 +KPX A Uogonek -50 +KPX A Uring -50 +KPX A V -80 +KPX A W -60 +KPX A Y -110 +KPX A Yacute -110 +KPX A Ydieresis -110 +KPX A u -30 +KPX A uacute -30 +KPX A ucircumflex -30 +KPX A udieresis -30 +KPX A ugrave -30 +KPX A uhungarumlaut -30 +KPX A umacron -30 +KPX A uogonek -30 +KPX A uring -30 +KPX A v -40 +KPX A w -30 +KPX A y -30 +KPX A yacute -30 +KPX A ydieresis -30 +KPX Aacute C -40 +KPX Aacute Cacute -40 +KPX Aacute Ccaron -40 +KPX Aacute Ccedilla -40 +KPX Aacute G -50 +KPX Aacute Gbreve -50 +KPX Aacute Gcommaaccent -50 +KPX Aacute O -40 +KPX Aacute Oacute -40 +KPX Aacute Ocircumflex -40 +KPX Aacute Odieresis -40 +KPX Aacute Ograve -40 +KPX Aacute Ohungarumlaut -40 +KPX Aacute Omacron -40 +KPX Aacute Oslash -40 +KPX Aacute Otilde -40 +KPX Aacute Q -40 +KPX Aacute T -90 +KPX Aacute Tcaron -90 +KPX Aacute Tcommaaccent -90 +KPX Aacute U -50 +KPX Aacute Uacute -50 +KPX Aacute Ucircumflex -50 +KPX Aacute Udieresis -50 +KPX Aacute Ugrave -50 +KPX Aacute Uhungarumlaut -50 +KPX Aacute Umacron -50 +KPX Aacute Uogonek -50 +KPX Aacute Uring -50 +KPX Aacute V -80 +KPX Aacute W -60 +KPX Aacute Y -110 +KPX Aacute Yacute -110 +KPX Aacute Ydieresis -110 +KPX Aacute u -30 +KPX Aacute uacute -30 +KPX Aacute ucircumflex -30 +KPX Aacute udieresis -30 +KPX Aacute ugrave -30 +KPX Aacute uhungarumlaut -30 +KPX Aacute umacron -30 +KPX Aacute uogonek -30 +KPX Aacute uring -30 +KPX Aacute v -40 +KPX Aacute w -30 +KPX Aacute y -30 +KPX Aacute yacute -30 +KPX Aacute ydieresis -30 +KPX Abreve C -40 +KPX Abreve Cacute -40 +KPX Abreve Ccaron -40 +KPX Abreve Ccedilla -40 +KPX Abreve G -50 +KPX Abreve Gbreve -50 +KPX Abreve Gcommaaccent -50 +KPX Abreve O -40 +KPX Abreve Oacute -40 +KPX Abreve Ocircumflex -40 +KPX Abreve Odieresis -40 +KPX Abreve Ograve -40 +KPX Abreve Ohungarumlaut -40 +KPX Abreve Omacron -40 +KPX Abreve Oslash -40 +KPX Abreve Otilde -40 +KPX Abreve Q -40 +KPX Abreve T -90 +KPX Abreve Tcaron -90 +KPX Abreve Tcommaaccent -90 +KPX Abreve U -50 +KPX Abreve Uacute -50 +KPX Abreve Ucircumflex -50 +KPX Abreve Udieresis -50 +KPX Abreve Ugrave -50 +KPX Abreve Uhungarumlaut -50 +KPX Abreve Umacron -50 +KPX Abreve Uogonek -50 +KPX Abreve Uring -50 +KPX Abreve V -80 +KPX Abreve W -60 +KPX Abreve Y -110 +KPX Abreve Yacute -110 +KPX Abreve Ydieresis -110 +KPX Abreve u -30 +KPX Abreve uacute -30 +KPX Abreve ucircumflex -30 +KPX Abreve udieresis -30 +KPX Abreve ugrave -30 +KPX Abreve uhungarumlaut -30 +KPX Abreve umacron -30 +KPX Abreve uogonek -30 +KPX Abreve uring -30 +KPX Abreve v -40 +KPX Abreve w -30 +KPX Abreve y -30 +KPX Abreve yacute -30 +KPX Abreve ydieresis -30 +KPX Acircumflex C -40 +KPX Acircumflex Cacute -40 +KPX Acircumflex Ccaron -40 +KPX Acircumflex Ccedilla -40 +KPX Acircumflex G -50 +KPX Acircumflex Gbreve -50 +KPX Acircumflex Gcommaaccent -50 +KPX Acircumflex O -40 +KPX Acircumflex Oacute -40 +KPX Acircumflex Ocircumflex -40 +KPX Acircumflex Odieresis -40 +KPX Acircumflex Ograve -40 +KPX Acircumflex Ohungarumlaut -40 +KPX Acircumflex Omacron -40 +KPX Acircumflex Oslash -40 +KPX Acircumflex Otilde -40 +KPX Acircumflex Q -40 +KPX Acircumflex T -90 +KPX Acircumflex Tcaron -90 +KPX Acircumflex Tcommaaccent -90 +KPX Acircumflex U -50 +KPX Acircumflex Uacute -50 +KPX Acircumflex Ucircumflex -50 +KPX Acircumflex Udieresis -50 +KPX Acircumflex Ugrave -50 +KPX Acircumflex Uhungarumlaut -50 +KPX Acircumflex Umacron -50 +KPX Acircumflex Uogonek -50 +KPX Acircumflex Uring -50 +KPX Acircumflex V -80 +KPX Acircumflex W -60 +KPX Acircumflex Y -110 +KPX Acircumflex Yacute -110 +KPX Acircumflex Ydieresis -110 +KPX Acircumflex u -30 +KPX Acircumflex uacute -30 +KPX Acircumflex ucircumflex -30 +KPX Acircumflex udieresis -30 +KPX Acircumflex ugrave -30 +KPX Acircumflex uhungarumlaut -30 +KPX Acircumflex umacron -30 +KPX Acircumflex uogonek -30 +KPX Acircumflex uring -30 +KPX Acircumflex v -40 +KPX Acircumflex w -30 +KPX Acircumflex y -30 +KPX Acircumflex yacute -30 +KPX Acircumflex ydieresis -30 +KPX Adieresis C -40 +KPX Adieresis Cacute -40 +KPX Adieresis Ccaron -40 +KPX Adieresis Ccedilla -40 +KPX Adieresis G -50 +KPX Adieresis Gbreve -50 +KPX Adieresis Gcommaaccent -50 +KPX Adieresis O -40 +KPX Adieresis Oacute -40 +KPX Adieresis Ocircumflex -40 +KPX Adieresis Odieresis -40 +KPX Adieresis Ograve -40 +KPX Adieresis Ohungarumlaut -40 +KPX Adieresis Omacron -40 +KPX Adieresis Oslash -40 +KPX Adieresis Otilde -40 +KPX Adieresis Q -40 +KPX Adieresis T -90 +KPX Adieresis Tcaron -90 +KPX Adieresis Tcommaaccent -90 +KPX Adieresis U -50 +KPX Adieresis Uacute -50 +KPX Adieresis Ucircumflex -50 +KPX Adieresis Udieresis -50 +KPX Adieresis Ugrave -50 +KPX Adieresis Uhungarumlaut -50 +KPX Adieresis Umacron -50 +KPX Adieresis Uogonek -50 +KPX Adieresis Uring -50 +KPX Adieresis V -80 +KPX Adieresis W -60 +KPX Adieresis Y -110 +KPX Adieresis Yacute -110 +KPX Adieresis Ydieresis -110 +KPX Adieresis u -30 +KPX Adieresis uacute -30 +KPX Adieresis ucircumflex -30 +KPX Adieresis udieresis -30 +KPX Adieresis ugrave -30 +KPX Adieresis uhungarumlaut -30 +KPX Adieresis umacron -30 +KPX Adieresis uogonek -30 +KPX Adieresis uring -30 +KPX Adieresis v -40 +KPX Adieresis w -30 +KPX Adieresis y -30 +KPX Adieresis yacute -30 +KPX Adieresis ydieresis -30 +KPX Agrave C -40 +KPX Agrave Cacute -40 +KPX Agrave Ccaron -40 +KPX Agrave Ccedilla -40 +KPX Agrave G -50 +KPX Agrave Gbreve -50 +KPX Agrave Gcommaaccent -50 +KPX Agrave O -40 +KPX Agrave Oacute -40 +KPX Agrave Ocircumflex -40 +KPX Agrave Odieresis -40 +KPX Agrave Ograve -40 +KPX Agrave Ohungarumlaut -40 +KPX Agrave Omacron -40 +KPX Agrave Oslash -40 +KPX Agrave Otilde -40 +KPX Agrave Q -40 +KPX Agrave T -90 +KPX Agrave Tcaron -90 +KPX Agrave Tcommaaccent -90 +KPX Agrave U -50 +KPX Agrave Uacute -50 +KPX Agrave Ucircumflex -50 +KPX Agrave Udieresis -50 +KPX Agrave Ugrave -50 +KPX Agrave Uhungarumlaut -50 +KPX Agrave Umacron -50 +KPX Agrave Uogonek -50 +KPX Agrave Uring -50 +KPX Agrave V -80 +KPX Agrave W -60 +KPX Agrave Y -110 +KPX Agrave Yacute -110 +KPX Agrave Ydieresis -110 +KPX Agrave u -30 +KPX Agrave uacute -30 +KPX Agrave ucircumflex -30 +KPX Agrave udieresis -30 +KPX Agrave ugrave -30 +KPX Agrave uhungarumlaut -30 +KPX Agrave umacron -30 +KPX Agrave uogonek -30 +KPX Agrave uring -30 +KPX Agrave v -40 +KPX Agrave w -30 +KPX Agrave y -30 +KPX Agrave yacute -30 +KPX Agrave ydieresis -30 +KPX Amacron C -40 +KPX Amacron Cacute -40 +KPX Amacron Ccaron -40 +KPX Amacron Ccedilla -40 +KPX Amacron G -50 +KPX Amacron Gbreve -50 +KPX Amacron Gcommaaccent -50 +KPX Amacron O -40 +KPX Amacron Oacute -40 +KPX Amacron Ocircumflex -40 +KPX Amacron Odieresis -40 +KPX Amacron Ograve -40 +KPX Amacron Ohungarumlaut -40 +KPX Amacron Omacron -40 +KPX Amacron Oslash -40 +KPX Amacron Otilde -40 +KPX Amacron Q -40 +KPX Amacron T -90 +KPX Amacron Tcaron -90 +KPX Amacron Tcommaaccent -90 +KPX Amacron U -50 +KPX Amacron Uacute -50 +KPX Amacron Ucircumflex -50 +KPX Amacron Udieresis -50 +KPX Amacron Ugrave -50 +KPX Amacron Uhungarumlaut -50 +KPX Amacron Umacron -50 +KPX Amacron Uogonek -50 +KPX Amacron Uring -50 +KPX Amacron V -80 +KPX Amacron W -60 +KPX Amacron Y -110 +KPX Amacron Yacute -110 +KPX Amacron Ydieresis -110 +KPX Amacron u -30 +KPX Amacron uacute -30 +KPX Amacron ucircumflex -30 +KPX Amacron udieresis -30 +KPX Amacron ugrave -30 +KPX Amacron uhungarumlaut -30 +KPX Amacron umacron -30 +KPX Amacron uogonek -30 +KPX Amacron uring -30 +KPX Amacron v -40 +KPX Amacron w -30 +KPX Amacron y -30 +KPX Amacron yacute -30 +KPX Amacron ydieresis -30 +KPX Aogonek C -40 +KPX Aogonek Cacute -40 +KPX Aogonek Ccaron -40 +KPX Aogonek Ccedilla -40 +KPX Aogonek G -50 +KPX Aogonek Gbreve -50 +KPX Aogonek Gcommaaccent -50 +KPX Aogonek O -40 +KPX Aogonek Oacute -40 +KPX Aogonek Ocircumflex -40 +KPX Aogonek Odieresis -40 +KPX Aogonek Ograve -40 +KPX Aogonek Ohungarumlaut -40 +KPX Aogonek Omacron -40 +KPX Aogonek Oslash -40 +KPX Aogonek Otilde -40 +KPX Aogonek Q -40 +KPX Aogonek T -90 +KPX Aogonek Tcaron -90 +KPX Aogonek Tcommaaccent -90 +KPX Aogonek U -50 +KPX Aogonek Uacute -50 +KPX Aogonek Ucircumflex -50 +KPX Aogonek Udieresis -50 +KPX Aogonek Ugrave -50 +KPX Aogonek Uhungarumlaut -50 +KPX Aogonek Umacron -50 +KPX Aogonek Uogonek -50 +KPX Aogonek Uring -50 +KPX Aogonek V -80 +KPX Aogonek W -60 +KPX Aogonek Y -110 +KPX Aogonek Yacute -110 +KPX Aogonek Ydieresis -110 +KPX Aogonek u -30 +KPX Aogonek uacute -30 +KPX Aogonek ucircumflex -30 +KPX Aogonek udieresis -30 +KPX Aogonek ugrave -30 +KPX Aogonek uhungarumlaut -30 +KPX Aogonek umacron -30 +KPX Aogonek uogonek -30 +KPX Aogonek uring -30 +KPX Aogonek v -40 +KPX Aogonek w -30 +KPX Aogonek y -30 +KPX Aogonek yacute -30 +KPX Aogonek ydieresis -30 +KPX Aring C -40 +KPX Aring Cacute -40 +KPX Aring Ccaron -40 +KPX Aring Ccedilla -40 +KPX Aring G -50 +KPX Aring Gbreve -50 +KPX Aring Gcommaaccent -50 +KPX Aring O -40 +KPX Aring Oacute -40 +KPX Aring Ocircumflex -40 +KPX Aring Odieresis -40 +KPX Aring Ograve -40 +KPX Aring Ohungarumlaut -40 +KPX Aring Omacron -40 +KPX Aring Oslash -40 +KPX Aring Otilde -40 +KPX Aring Q -40 +KPX Aring T -90 +KPX Aring Tcaron -90 +KPX Aring Tcommaaccent -90 +KPX Aring U -50 +KPX Aring Uacute -50 +KPX Aring Ucircumflex -50 +KPX Aring Udieresis -50 +KPX Aring Ugrave -50 +KPX Aring Uhungarumlaut -50 +KPX Aring Umacron -50 +KPX Aring Uogonek -50 +KPX Aring Uring -50 +KPX Aring V -80 +KPX Aring W -60 +KPX Aring Y -110 +KPX Aring Yacute -110 +KPX Aring Ydieresis -110 +KPX Aring u -30 +KPX Aring uacute -30 +KPX Aring ucircumflex -30 +KPX Aring udieresis -30 +KPX Aring ugrave -30 +KPX Aring uhungarumlaut -30 +KPX Aring umacron -30 +KPX Aring uogonek -30 +KPX Aring uring -30 +KPX Aring v -40 +KPX Aring w -30 +KPX Aring y -30 +KPX Aring yacute -30 +KPX Aring ydieresis -30 +KPX Atilde C -40 +KPX Atilde Cacute -40 +KPX Atilde Ccaron -40 +KPX Atilde Ccedilla -40 +KPX Atilde G -50 +KPX Atilde Gbreve -50 +KPX Atilde Gcommaaccent -50 +KPX Atilde O -40 +KPX Atilde Oacute -40 +KPX Atilde Ocircumflex -40 +KPX Atilde Odieresis -40 +KPX Atilde Ograve -40 +KPX Atilde Ohungarumlaut -40 +KPX Atilde Omacron -40 +KPX Atilde Oslash -40 +KPX Atilde Otilde -40 +KPX Atilde Q -40 +KPX Atilde T -90 +KPX Atilde Tcaron -90 +KPX Atilde Tcommaaccent -90 +KPX Atilde U -50 +KPX Atilde Uacute -50 +KPX Atilde Ucircumflex -50 +KPX Atilde Udieresis -50 +KPX Atilde Ugrave -50 +KPX Atilde Uhungarumlaut -50 +KPX Atilde Umacron -50 +KPX Atilde Uogonek -50 +KPX Atilde Uring -50 +KPX Atilde V -80 +KPX Atilde W -60 +KPX Atilde Y -110 +KPX Atilde Yacute -110 +KPX Atilde Ydieresis -110 +KPX Atilde u -30 +KPX Atilde uacute -30 +KPX Atilde ucircumflex -30 +KPX Atilde udieresis -30 +KPX Atilde ugrave -30 +KPX Atilde uhungarumlaut -30 +KPX Atilde umacron -30 +KPX Atilde uogonek -30 +KPX Atilde uring -30 +KPX Atilde v -40 +KPX Atilde w -30 +KPX Atilde y -30 +KPX Atilde yacute -30 +KPX Atilde ydieresis -30 +KPX B A -30 +KPX B Aacute -30 +KPX B Abreve -30 +KPX B Acircumflex -30 +KPX B Adieresis -30 +KPX B Agrave -30 +KPX B Amacron -30 +KPX B Aogonek -30 +KPX B Aring -30 +KPX B Atilde -30 +KPX B U -10 +KPX B Uacute -10 +KPX B Ucircumflex -10 +KPX B Udieresis -10 +KPX B Ugrave -10 +KPX B Uhungarumlaut -10 +KPX B Umacron -10 +KPX B Uogonek -10 +KPX B Uring -10 +KPX D A -40 +KPX D Aacute -40 +KPX D Abreve -40 +KPX D Acircumflex -40 +KPX D Adieresis -40 +KPX D Agrave -40 +KPX D Amacron -40 +KPX D Aogonek -40 +KPX D Aring -40 +KPX D Atilde -40 +KPX D V -40 +KPX D W -40 +KPX D Y -70 +KPX D Yacute -70 +KPX D Ydieresis -70 +KPX D comma -30 +KPX D period -30 +KPX Dcaron A -40 +KPX Dcaron Aacute -40 +KPX Dcaron Abreve -40 +KPX Dcaron Acircumflex -40 +KPX Dcaron Adieresis -40 +KPX Dcaron Agrave -40 +KPX Dcaron Amacron -40 +KPX Dcaron Aogonek -40 +KPX Dcaron Aring -40 +KPX Dcaron Atilde -40 +KPX Dcaron V -40 +KPX Dcaron W -40 +KPX Dcaron Y -70 +KPX Dcaron Yacute -70 +KPX Dcaron Ydieresis -70 +KPX Dcaron comma -30 +KPX Dcaron period -30 +KPX Dcroat A -40 +KPX Dcroat Aacute -40 +KPX Dcroat Abreve -40 +KPX Dcroat Acircumflex -40 +KPX Dcroat Adieresis -40 +KPX Dcroat Agrave -40 +KPX Dcroat Amacron -40 +KPX Dcroat Aogonek -40 +KPX Dcroat Aring -40 +KPX Dcroat Atilde -40 +KPX Dcroat V -40 +KPX Dcroat W -40 +KPX Dcroat Y -70 +KPX Dcroat Yacute -70 +KPX Dcroat Ydieresis -70 +KPX Dcroat comma -30 +KPX Dcroat period -30 +KPX F A -80 +KPX F Aacute -80 +KPX F Abreve -80 +KPX F Acircumflex -80 +KPX F Adieresis -80 +KPX F Agrave -80 +KPX F Amacron -80 +KPX F Aogonek -80 +KPX F Aring -80 +KPX F Atilde -80 +KPX F a -20 +KPX F aacute -20 +KPX F abreve -20 +KPX F acircumflex -20 +KPX F adieresis -20 +KPX F agrave -20 +KPX F amacron -20 +KPX F aogonek -20 +KPX F aring -20 +KPX F atilde -20 +KPX F comma -100 +KPX F period -100 +KPX J A -20 +KPX J Aacute -20 +KPX J Abreve -20 +KPX J Acircumflex -20 +KPX J Adieresis -20 +KPX J Agrave -20 +KPX J Amacron -20 +KPX J Aogonek -20 +KPX J Aring -20 +KPX J Atilde -20 +KPX J comma -20 +KPX J period -20 +KPX J u -20 +KPX J uacute -20 +KPX J ucircumflex -20 +KPX J udieresis -20 +KPX J ugrave -20 +KPX J uhungarumlaut -20 +KPX J umacron -20 +KPX J uogonek -20 +KPX J uring -20 +KPX K O -30 +KPX K Oacute -30 +KPX K Ocircumflex -30 +KPX K Odieresis -30 +KPX K Ograve -30 +KPX K Ohungarumlaut -30 +KPX K Omacron -30 +KPX K Oslash -30 +KPX K Otilde -30 +KPX K e -15 +KPX K eacute -15 +KPX K ecaron -15 +KPX K ecircumflex -15 +KPX K edieresis -15 +KPX K edotaccent -15 +KPX K egrave -15 +KPX K emacron -15 +KPX K eogonek -15 +KPX K o -35 +KPX K oacute -35 +KPX K ocircumflex -35 +KPX K odieresis -35 +KPX K ograve -35 +KPX K ohungarumlaut -35 +KPX K omacron -35 +KPX K oslash -35 +KPX K otilde -35 +KPX K u -30 +KPX K uacute -30 +KPX K ucircumflex -30 +KPX K udieresis -30 +KPX K ugrave -30 +KPX K uhungarumlaut -30 +KPX K umacron -30 +KPX K uogonek -30 +KPX K uring -30 +KPX K y -40 +KPX K yacute -40 +KPX K ydieresis -40 +KPX Kcommaaccent O -30 +KPX Kcommaaccent Oacute -30 +KPX Kcommaaccent Ocircumflex -30 +KPX Kcommaaccent Odieresis -30 +KPX Kcommaaccent Ograve -30 +KPX Kcommaaccent Ohungarumlaut -30 +KPX Kcommaaccent Omacron -30 +KPX Kcommaaccent Oslash -30 +KPX Kcommaaccent Otilde -30 +KPX Kcommaaccent e -15 +KPX Kcommaaccent eacute -15 +KPX Kcommaaccent ecaron -15 +KPX Kcommaaccent ecircumflex -15 +KPX Kcommaaccent edieresis -15 +KPX Kcommaaccent edotaccent -15 +KPX Kcommaaccent egrave -15 +KPX Kcommaaccent emacron -15 +KPX Kcommaaccent eogonek -15 +KPX Kcommaaccent o -35 +KPX Kcommaaccent oacute -35 +KPX Kcommaaccent ocircumflex -35 +KPX Kcommaaccent odieresis -35 +KPX Kcommaaccent ograve -35 +KPX Kcommaaccent ohungarumlaut -35 +KPX Kcommaaccent omacron -35 +KPX Kcommaaccent oslash -35 +KPX Kcommaaccent otilde -35 +KPX Kcommaaccent u -30 +KPX Kcommaaccent uacute -30 +KPX Kcommaaccent ucircumflex -30 +KPX Kcommaaccent udieresis -30 +KPX Kcommaaccent ugrave -30 +KPX Kcommaaccent uhungarumlaut -30 +KPX Kcommaaccent umacron -30 +KPX Kcommaaccent uogonek -30 +KPX Kcommaaccent uring -30 +KPX Kcommaaccent y -40 +KPX Kcommaaccent yacute -40 +KPX Kcommaaccent ydieresis -40 +KPX L T -90 +KPX L Tcaron -90 +KPX L Tcommaaccent -90 +KPX L V -110 +KPX L W -80 +KPX L Y -120 +KPX L Yacute -120 +KPX L Ydieresis -120 +KPX L quotedblright -140 +KPX L quoteright -140 +KPX L y -30 +KPX L yacute -30 +KPX L ydieresis -30 +KPX Lacute T -90 +KPX Lacute Tcaron -90 +KPX Lacute Tcommaaccent -90 +KPX Lacute V -110 +KPX Lacute W -80 +KPX Lacute Y -120 +KPX Lacute Yacute -120 +KPX Lacute Ydieresis -120 +KPX Lacute quotedblright -140 +KPX Lacute quoteright -140 +KPX Lacute y -30 +KPX Lacute yacute -30 +KPX Lacute ydieresis -30 +KPX Lcommaaccent T -90 +KPX Lcommaaccent Tcaron -90 +KPX Lcommaaccent Tcommaaccent -90 +KPX Lcommaaccent V -110 +KPX Lcommaaccent W -80 +KPX Lcommaaccent Y -120 +KPX Lcommaaccent Yacute -120 +KPX Lcommaaccent Ydieresis -120 +KPX Lcommaaccent quotedblright -140 +KPX Lcommaaccent quoteright -140 +KPX Lcommaaccent y -30 +KPX Lcommaaccent yacute -30 +KPX Lcommaaccent ydieresis -30 +KPX Lslash T -90 +KPX Lslash Tcaron -90 +KPX Lslash Tcommaaccent -90 +KPX Lslash V -110 +KPX Lslash W -80 +KPX Lslash Y -120 +KPX Lslash Yacute -120 +KPX Lslash Ydieresis -120 +KPX Lslash quotedblright -140 +KPX Lslash quoteright -140 +KPX Lslash y -30 +KPX Lslash yacute -30 +KPX Lslash ydieresis -30 +KPX O A -50 +KPX O Aacute -50 +KPX O Abreve -50 +KPX O Acircumflex -50 +KPX O Adieresis -50 +KPX O Agrave -50 +KPX O Amacron -50 +KPX O Aogonek -50 +KPX O Aring -50 +KPX O Atilde -50 +KPX O T -40 +KPX O Tcaron -40 +KPX O Tcommaaccent -40 +KPX O V -50 +KPX O W -50 +KPX O X -50 +KPX O Y -70 +KPX O Yacute -70 +KPX O Ydieresis -70 +KPX O comma -40 +KPX O period -40 +KPX Oacute A -50 +KPX Oacute Aacute -50 +KPX Oacute Abreve -50 +KPX Oacute Acircumflex -50 +KPX Oacute Adieresis -50 +KPX Oacute Agrave -50 +KPX Oacute Amacron -50 +KPX Oacute Aogonek -50 +KPX Oacute Aring -50 +KPX Oacute Atilde -50 +KPX Oacute T -40 +KPX Oacute Tcaron -40 +KPX Oacute Tcommaaccent -40 +KPX Oacute V -50 +KPX Oacute W -50 +KPX Oacute X -50 +KPX Oacute Y -70 +KPX Oacute Yacute -70 +KPX Oacute Ydieresis -70 +KPX Oacute comma -40 +KPX Oacute period -40 +KPX Ocircumflex A -50 +KPX Ocircumflex Aacute -50 +KPX Ocircumflex Abreve -50 +KPX Ocircumflex Acircumflex -50 +KPX Ocircumflex Adieresis -50 +KPX Ocircumflex Agrave -50 +KPX Ocircumflex Amacron -50 +KPX Ocircumflex Aogonek -50 +KPX Ocircumflex Aring -50 +KPX Ocircumflex Atilde -50 +KPX Ocircumflex T -40 +KPX Ocircumflex Tcaron -40 +KPX Ocircumflex Tcommaaccent -40 +KPX Ocircumflex V -50 +KPX Ocircumflex W -50 +KPX Ocircumflex X -50 +KPX Ocircumflex Y -70 +KPX Ocircumflex Yacute -70 +KPX Ocircumflex Ydieresis -70 +KPX Ocircumflex comma -40 +KPX Ocircumflex period -40 +KPX Odieresis A -50 +KPX Odieresis Aacute -50 +KPX Odieresis Abreve -50 +KPX Odieresis Acircumflex -50 +KPX Odieresis Adieresis -50 +KPX Odieresis Agrave -50 +KPX Odieresis Amacron -50 +KPX Odieresis Aogonek -50 +KPX Odieresis Aring -50 +KPX Odieresis Atilde -50 +KPX Odieresis T -40 +KPX Odieresis Tcaron -40 +KPX Odieresis Tcommaaccent -40 +KPX Odieresis V -50 +KPX Odieresis W -50 +KPX Odieresis X -50 +KPX Odieresis Y -70 +KPX Odieresis Yacute -70 +KPX Odieresis Ydieresis -70 +KPX Odieresis comma -40 +KPX Odieresis period -40 +KPX Ograve A -50 +KPX Ograve Aacute -50 +KPX Ograve Abreve -50 +KPX Ograve Acircumflex -50 +KPX Ograve Adieresis -50 +KPX Ograve Agrave -50 +KPX Ograve Amacron -50 +KPX Ograve Aogonek -50 +KPX Ograve Aring -50 +KPX Ograve Atilde -50 +KPX Ograve T -40 +KPX Ograve Tcaron -40 +KPX Ograve Tcommaaccent -40 +KPX Ograve V -50 +KPX Ograve W -50 +KPX Ograve X -50 +KPX Ograve Y -70 +KPX Ograve Yacute -70 +KPX Ograve Ydieresis -70 +KPX Ograve comma -40 +KPX Ograve period -40 +KPX Ohungarumlaut A -50 +KPX Ohungarumlaut Aacute -50 +KPX Ohungarumlaut Abreve -50 +KPX Ohungarumlaut Acircumflex -50 +KPX Ohungarumlaut Adieresis -50 +KPX Ohungarumlaut Agrave -50 +KPX Ohungarumlaut Amacron -50 +KPX Ohungarumlaut Aogonek -50 +KPX Ohungarumlaut Aring -50 +KPX Ohungarumlaut Atilde -50 +KPX Ohungarumlaut T -40 +KPX Ohungarumlaut Tcaron -40 +KPX Ohungarumlaut Tcommaaccent -40 +KPX Ohungarumlaut V -50 +KPX Ohungarumlaut W -50 +KPX Ohungarumlaut X -50 +KPX Ohungarumlaut Y -70 +KPX Ohungarumlaut Yacute -70 +KPX Ohungarumlaut Ydieresis -70 +KPX Ohungarumlaut comma -40 +KPX Ohungarumlaut period -40 +KPX Omacron A -50 +KPX Omacron Aacute -50 +KPX Omacron Abreve -50 +KPX Omacron Acircumflex -50 +KPX Omacron Adieresis -50 +KPX Omacron Agrave -50 +KPX Omacron Amacron -50 +KPX Omacron Aogonek -50 +KPX Omacron Aring -50 +KPX Omacron Atilde -50 +KPX Omacron T -40 +KPX Omacron Tcaron -40 +KPX Omacron Tcommaaccent -40 +KPX Omacron V -50 +KPX Omacron W -50 +KPX Omacron X -50 +KPX Omacron Y -70 +KPX Omacron Yacute -70 +KPX Omacron Ydieresis -70 +KPX Omacron comma -40 +KPX Omacron period -40 +KPX Oslash A -50 +KPX Oslash Aacute -50 +KPX Oslash Abreve -50 +KPX Oslash Acircumflex -50 +KPX Oslash Adieresis -50 +KPX Oslash Agrave -50 +KPX Oslash Amacron -50 +KPX Oslash Aogonek -50 +KPX Oslash Aring -50 +KPX Oslash Atilde -50 +KPX Oslash T -40 +KPX Oslash Tcaron -40 +KPX Oslash Tcommaaccent -40 +KPX Oslash V -50 +KPX Oslash W -50 +KPX Oslash X -50 +KPX Oslash Y -70 +KPX Oslash Yacute -70 +KPX Oslash Ydieresis -70 +KPX Oslash comma -40 +KPX Oslash period -40 +KPX Otilde A -50 +KPX Otilde Aacute -50 +KPX Otilde Abreve -50 +KPX Otilde Acircumflex -50 +KPX Otilde Adieresis -50 +KPX Otilde Agrave -50 +KPX Otilde Amacron -50 +KPX Otilde Aogonek -50 +KPX Otilde Aring -50 +KPX Otilde Atilde -50 +KPX Otilde T -40 +KPX Otilde Tcaron -40 +KPX Otilde Tcommaaccent -40 +KPX Otilde V -50 +KPX Otilde W -50 +KPX Otilde X -50 +KPX Otilde Y -70 +KPX Otilde Yacute -70 +KPX Otilde Ydieresis -70 +KPX Otilde comma -40 +KPX Otilde period -40 +KPX P A -100 +KPX P Aacute -100 +KPX P Abreve -100 +KPX P Acircumflex -100 +KPX P Adieresis -100 +KPX P Agrave -100 +KPX P Amacron -100 +KPX P Aogonek -100 +KPX P Aring -100 +KPX P Atilde -100 +KPX P a -30 +KPX P aacute -30 +KPX P abreve -30 +KPX P acircumflex -30 +KPX P adieresis -30 +KPX P agrave -30 +KPX P amacron -30 +KPX P aogonek -30 +KPX P aring -30 +KPX P atilde -30 +KPX P comma -120 +KPX P e -30 +KPX P eacute -30 +KPX P ecaron -30 +KPX P ecircumflex -30 +KPX P edieresis -30 +KPX P edotaccent -30 +KPX P egrave -30 +KPX P emacron -30 +KPX P eogonek -30 +KPX P o -40 +KPX P oacute -40 +KPX P ocircumflex -40 +KPX P odieresis -40 +KPX P ograve -40 +KPX P ohungarumlaut -40 +KPX P omacron -40 +KPX P oslash -40 +KPX P otilde -40 +KPX P period -120 +KPX Q U -10 +KPX Q Uacute -10 +KPX Q Ucircumflex -10 +KPX Q Udieresis -10 +KPX Q Ugrave -10 +KPX Q Uhungarumlaut -10 +KPX Q Umacron -10 +KPX Q Uogonek -10 +KPX Q Uring -10 +KPX Q comma 20 +KPX Q period 20 +KPX R O -20 +KPX R Oacute -20 +KPX R Ocircumflex -20 +KPX R Odieresis -20 +KPX R Ograve -20 +KPX R Ohungarumlaut -20 +KPX R Omacron -20 +KPX R Oslash -20 +KPX R Otilde -20 +KPX R T -20 +KPX R Tcaron -20 +KPX R Tcommaaccent -20 +KPX R U -20 +KPX R Uacute -20 +KPX R Ucircumflex -20 +KPX R Udieresis -20 +KPX R Ugrave -20 +KPX R Uhungarumlaut -20 +KPX R Umacron -20 +KPX R Uogonek -20 +KPX R Uring -20 +KPX R V -50 +KPX R W -40 +KPX R Y -50 +KPX R Yacute -50 +KPX R Ydieresis -50 +KPX Racute O -20 +KPX Racute Oacute -20 +KPX Racute Ocircumflex -20 +KPX Racute Odieresis -20 +KPX Racute Ograve -20 +KPX Racute Ohungarumlaut -20 +KPX Racute Omacron -20 +KPX Racute Oslash -20 +KPX Racute Otilde -20 +KPX Racute T -20 +KPX Racute Tcaron -20 +KPX Racute Tcommaaccent -20 +KPX Racute U -20 +KPX Racute Uacute -20 +KPX Racute Ucircumflex -20 +KPX Racute Udieresis -20 +KPX Racute Ugrave -20 +KPX Racute Uhungarumlaut -20 +KPX Racute Umacron -20 +KPX Racute Uogonek -20 +KPX Racute Uring -20 +KPX Racute V -50 +KPX Racute W -40 +KPX Racute Y -50 +KPX Racute Yacute -50 +KPX Racute Ydieresis -50 +KPX Rcaron O -20 +KPX Rcaron Oacute -20 +KPX Rcaron Ocircumflex -20 +KPX Rcaron Odieresis -20 +KPX Rcaron Ograve -20 +KPX Rcaron Ohungarumlaut -20 +KPX Rcaron Omacron -20 +KPX Rcaron Oslash -20 +KPX Rcaron Otilde -20 +KPX Rcaron T -20 +KPX Rcaron Tcaron -20 +KPX Rcaron Tcommaaccent -20 +KPX Rcaron U -20 +KPX Rcaron Uacute -20 +KPX Rcaron Ucircumflex -20 +KPX Rcaron Udieresis -20 +KPX Rcaron Ugrave -20 +KPX Rcaron Uhungarumlaut -20 +KPX Rcaron Umacron -20 +KPX Rcaron Uogonek -20 +KPX Rcaron Uring -20 +KPX Rcaron V -50 +KPX Rcaron W -40 +KPX Rcaron Y -50 +KPX Rcaron Yacute -50 +KPX Rcaron Ydieresis -50 +KPX Rcommaaccent O -20 +KPX Rcommaaccent Oacute -20 +KPX Rcommaaccent Ocircumflex -20 +KPX Rcommaaccent Odieresis -20 +KPX Rcommaaccent Ograve -20 +KPX Rcommaaccent Ohungarumlaut -20 +KPX Rcommaaccent Omacron -20 +KPX Rcommaaccent Oslash -20 +KPX Rcommaaccent Otilde -20 +KPX Rcommaaccent T -20 +KPX Rcommaaccent Tcaron -20 +KPX Rcommaaccent Tcommaaccent -20 +KPX Rcommaaccent U -20 +KPX Rcommaaccent Uacute -20 +KPX Rcommaaccent Ucircumflex -20 +KPX Rcommaaccent Udieresis -20 +KPX Rcommaaccent Ugrave -20 +KPX Rcommaaccent Uhungarumlaut -20 +KPX Rcommaaccent Umacron -20 +KPX Rcommaaccent Uogonek -20 +KPX Rcommaaccent Uring -20 +KPX Rcommaaccent V -50 +KPX Rcommaaccent W -40 +KPX Rcommaaccent Y -50 +KPX Rcommaaccent Yacute -50 +KPX Rcommaaccent Ydieresis -50 +KPX T A -90 +KPX T Aacute -90 +KPX T Abreve -90 +KPX T Acircumflex -90 +KPX T Adieresis -90 +KPX T Agrave -90 +KPX T Amacron -90 +KPX T Aogonek -90 +KPX T Aring -90 +KPX T Atilde -90 +KPX T O -40 +KPX T Oacute -40 +KPX T Ocircumflex -40 +KPX T Odieresis -40 +KPX T Ograve -40 +KPX T Ohungarumlaut -40 +KPX T Omacron -40 +KPX T Oslash -40 +KPX T Otilde -40 +KPX T a -80 +KPX T aacute -80 +KPX T abreve -80 +KPX T acircumflex -80 +KPX T adieresis -80 +KPX T agrave -80 +KPX T amacron -80 +KPX T aogonek -80 +KPX T aring -80 +KPX T atilde -80 +KPX T colon -40 +KPX T comma -80 +KPX T e -60 +KPX T eacute -60 +KPX T ecaron -60 +KPX T ecircumflex -60 +KPX T edieresis -60 +KPX T edotaccent -60 +KPX T egrave -60 +KPX T emacron -60 +KPX T eogonek -60 +KPX T hyphen -120 +KPX T o -80 +KPX T oacute -80 +KPX T ocircumflex -80 +KPX T odieresis -80 +KPX T ograve -80 +KPX T ohungarumlaut -80 +KPX T omacron -80 +KPX T oslash -80 +KPX T otilde -80 +KPX T period -80 +KPX T r -80 +KPX T racute -80 +KPX T rcommaaccent -80 +KPX T semicolon -40 +KPX T u -90 +KPX T uacute -90 +KPX T ucircumflex -90 +KPX T udieresis -90 +KPX T ugrave -90 +KPX T uhungarumlaut -90 +KPX T umacron -90 +KPX T uogonek -90 +KPX T uring -90 +KPX T w -60 +KPX T y -60 +KPX T yacute -60 +KPX T ydieresis -60 +KPX Tcaron A -90 +KPX Tcaron Aacute -90 +KPX Tcaron Abreve -90 +KPX Tcaron Acircumflex -90 +KPX Tcaron Adieresis -90 +KPX Tcaron Agrave -90 +KPX Tcaron Amacron -90 +KPX Tcaron Aogonek -90 +KPX Tcaron Aring -90 +KPX Tcaron Atilde -90 +KPX Tcaron O -40 +KPX Tcaron Oacute -40 +KPX Tcaron Ocircumflex -40 +KPX Tcaron Odieresis -40 +KPX Tcaron Ograve -40 +KPX Tcaron Ohungarumlaut -40 +KPX Tcaron Omacron -40 +KPX Tcaron Oslash -40 +KPX Tcaron Otilde -40 +KPX Tcaron a -80 +KPX Tcaron aacute -80 +KPX Tcaron abreve -80 +KPX Tcaron acircumflex -80 +KPX Tcaron adieresis -80 +KPX Tcaron agrave -80 +KPX Tcaron amacron -80 +KPX Tcaron aogonek -80 +KPX Tcaron aring -80 +KPX Tcaron atilde -80 +KPX Tcaron colon -40 +KPX Tcaron comma -80 +KPX Tcaron e -60 +KPX Tcaron eacute -60 +KPX Tcaron ecaron -60 +KPX Tcaron ecircumflex -60 +KPX Tcaron edieresis -60 +KPX Tcaron edotaccent -60 +KPX Tcaron egrave -60 +KPX Tcaron emacron -60 +KPX Tcaron eogonek -60 +KPX Tcaron hyphen -120 +KPX Tcaron o -80 +KPX Tcaron oacute -80 +KPX Tcaron ocircumflex -80 +KPX Tcaron odieresis -80 +KPX Tcaron ograve -80 +KPX Tcaron ohungarumlaut -80 +KPX Tcaron omacron -80 +KPX Tcaron oslash -80 +KPX Tcaron otilde -80 +KPX Tcaron period -80 +KPX Tcaron r -80 +KPX Tcaron racute -80 +KPX Tcaron rcommaaccent -80 +KPX Tcaron semicolon -40 +KPX Tcaron u -90 +KPX Tcaron uacute -90 +KPX Tcaron ucircumflex -90 +KPX Tcaron udieresis -90 +KPX Tcaron ugrave -90 +KPX Tcaron uhungarumlaut -90 +KPX Tcaron umacron -90 +KPX Tcaron uogonek -90 +KPX Tcaron uring -90 +KPX Tcaron w -60 +KPX Tcaron y -60 +KPX Tcaron yacute -60 +KPX Tcaron ydieresis -60 +KPX Tcommaaccent A -90 +KPX Tcommaaccent Aacute -90 +KPX Tcommaaccent Abreve -90 +KPX Tcommaaccent Acircumflex -90 +KPX Tcommaaccent Adieresis -90 +KPX Tcommaaccent Agrave -90 +KPX Tcommaaccent Amacron -90 +KPX Tcommaaccent Aogonek -90 +KPX Tcommaaccent Aring -90 +KPX Tcommaaccent Atilde -90 +KPX Tcommaaccent O -40 +KPX Tcommaaccent Oacute -40 +KPX Tcommaaccent Ocircumflex -40 +KPX Tcommaaccent Odieresis -40 +KPX Tcommaaccent Ograve -40 +KPX Tcommaaccent Ohungarumlaut -40 +KPX Tcommaaccent Omacron -40 +KPX Tcommaaccent Oslash -40 +KPX Tcommaaccent Otilde -40 +KPX Tcommaaccent a -80 +KPX Tcommaaccent aacute -80 +KPX Tcommaaccent abreve -80 +KPX Tcommaaccent acircumflex -80 +KPX Tcommaaccent adieresis -80 +KPX Tcommaaccent agrave -80 +KPX Tcommaaccent amacron -80 +KPX Tcommaaccent aogonek -80 +KPX Tcommaaccent aring -80 +KPX Tcommaaccent atilde -80 +KPX Tcommaaccent colon -40 +KPX Tcommaaccent comma -80 +KPX Tcommaaccent e -60 +KPX Tcommaaccent eacute -60 +KPX Tcommaaccent ecaron -60 +KPX Tcommaaccent ecircumflex -60 +KPX Tcommaaccent edieresis -60 +KPX Tcommaaccent edotaccent -60 +KPX Tcommaaccent egrave -60 +KPX Tcommaaccent emacron -60 +KPX Tcommaaccent eogonek -60 +KPX Tcommaaccent hyphen -120 +KPX Tcommaaccent o -80 +KPX Tcommaaccent oacute -80 +KPX Tcommaaccent ocircumflex -80 +KPX Tcommaaccent odieresis -80 +KPX Tcommaaccent ograve -80 +KPX Tcommaaccent ohungarumlaut -80 +KPX Tcommaaccent omacron -80 +KPX Tcommaaccent oslash -80 +KPX Tcommaaccent otilde -80 +KPX Tcommaaccent period -80 +KPX Tcommaaccent r -80 +KPX Tcommaaccent racute -80 +KPX Tcommaaccent rcommaaccent -80 +KPX Tcommaaccent semicolon -40 +KPX Tcommaaccent u -90 +KPX Tcommaaccent uacute -90 +KPX Tcommaaccent ucircumflex -90 +KPX Tcommaaccent udieresis -90 +KPX Tcommaaccent ugrave -90 +KPX Tcommaaccent uhungarumlaut -90 +KPX Tcommaaccent umacron -90 +KPX Tcommaaccent uogonek -90 +KPX Tcommaaccent uring -90 +KPX Tcommaaccent w -60 +KPX Tcommaaccent y -60 +KPX Tcommaaccent yacute -60 +KPX Tcommaaccent ydieresis -60 +KPX U A -50 +KPX U Aacute -50 +KPX U Abreve -50 +KPX U Acircumflex -50 +KPX U Adieresis -50 +KPX U Agrave -50 +KPX U Amacron -50 +KPX U Aogonek -50 +KPX U Aring -50 +KPX U Atilde -50 +KPX U comma -30 +KPX U period -30 +KPX Uacute A -50 +KPX Uacute Aacute -50 +KPX Uacute Abreve -50 +KPX Uacute Acircumflex -50 +KPX Uacute Adieresis -50 +KPX Uacute Agrave -50 +KPX Uacute Amacron -50 +KPX Uacute Aogonek -50 +KPX Uacute Aring -50 +KPX Uacute Atilde -50 +KPX Uacute comma -30 +KPX Uacute period -30 +KPX Ucircumflex A -50 +KPX Ucircumflex Aacute -50 +KPX Ucircumflex Abreve -50 +KPX Ucircumflex Acircumflex -50 +KPX Ucircumflex Adieresis -50 +KPX Ucircumflex Agrave -50 +KPX Ucircumflex Amacron -50 +KPX Ucircumflex Aogonek -50 +KPX Ucircumflex Aring -50 +KPX Ucircumflex Atilde -50 +KPX Ucircumflex comma -30 +KPX Ucircumflex period -30 +KPX Udieresis A -50 +KPX Udieresis Aacute -50 +KPX Udieresis Abreve -50 +KPX Udieresis Acircumflex -50 +KPX Udieresis Adieresis -50 +KPX Udieresis Agrave -50 +KPX Udieresis Amacron -50 +KPX Udieresis Aogonek -50 +KPX Udieresis Aring -50 +KPX Udieresis Atilde -50 +KPX Udieresis comma -30 +KPX Udieresis period -30 +KPX Ugrave A -50 +KPX Ugrave Aacute -50 +KPX Ugrave Abreve -50 +KPX Ugrave Acircumflex -50 +KPX Ugrave Adieresis -50 +KPX Ugrave Agrave -50 +KPX Ugrave Amacron -50 +KPX Ugrave Aogonek -50 +KPX Ugrave Aring -50 +KPX Ugrave Atilde -50 +KPX Ugrave comma -30 +KPX Ugrave period -30 +KPX Uhungarumlaut A -50 +KPX Uhungarumlaut Aacute -50 +KPX Uhungarumlaut Abreve -50 +KPX Uhungarumlaut Acircumflex -50 +KPX Uhungarumlaut Adieresis -50 +KPX Uhungarumlaut Agrave -50 +KPX Uhungarumlaut Amacron -50 +KPX Uhungarumlaut Aogonek -50 +KPX Uhungarumlaut Aring -50 +KPX Uhungarumlaut Atilde -50 +KPX Uhungarumlaut comma -30 +KPX Uhungarumlaut period -30 +KPX Umacron A -50 +KPX Umacron Aacute -50 +KPX Umacron Abreve -50 +KPX Umacron Acircumflex -50 +KPX Umacron Adieresis -50 +KPX Umacron Agrave -50 +KPX Umacron Amacron -50 +KPX Umacron Aogonek -50 +KPX Umacron Aring -50 +KPX Umacron Atilde -50 +KPX Umacron comma -30 +KPX Umacron period -30 +KPX Uogonek A -50 +KPX Uogonek Aacute -50 +KPX Uogonek Abreve -50 +KPX Uogonek Acircumflex -50 +KPX Uogonek Adieresis -50 +KPX Uogonek Agrave -50 +KPX Uogonek Amacron -50 +KPX Uogonek Aogonek -50 +KPX Uogonek Aring -50 +KPX Uogonek Atilde -50 +KPX Uogonek comma -30 +KPX Uogonek period -30 +KPX Uring A -50 +KPX Uring Aacute -50 +KPX Uring Abreve -50 +KPX Uring Acircumflex -50 +KPX Uring Adieresis -50 +KPX Uring Agrave -50 +KPX Uring Amacron -50 +KPX Uring Aogonek -50 +KPX Uring Aring -50 +KPX Uring Atilde -50 +KPX Uring comma -30 +KPX Uring period -30 +KPX V A -80 +KPX V Aacute -80 +KPX V Abreve -80 +KPX V Acircumflex -80 +KPX V Adieresis -80 +KPX V Agrave -80 +KPX V Amacron -80 +KPX V Aogonek -80 +KPX V Aring -80 +KPX V Atilde -80 +KPX V G -50 +KPX V Gbreve -50 +KPX V Gcommaaccent -50 +KPX V O -50 +KPX V Oacute -50 +KPX V Ocircumflex -50 +KPX V Odieresis -50 +KPX V Ograve -50 +KPX V Ohungarumlaut -50 +KPX V Omacron -50 +KPX V Oslash -50 +KPX V Otilde -50 +KPX V a -60 +KPX V aacute -60 +KPX V abreve -60 +KPX V acircumflex -60 +KPX V adieresis -60 +KPX V agrave -60 +KPX V amacron -60 +KPX V aogonek -60 +KPX V aring -60 +KPX V atilde -60 +KPX V colon -40 +KPX V comma -120 +KPX V e -50 +KPX V eacute -50 +KPX V ecaron -50 +KPX V ecircumflex -50 +KPX V edieresis -50 +KPX V edotaccent -50 +KPX V egrave -50 +KPX V emacron -50 +KPX V eogonek -50 +KPX V hyphen -80 +KPX V o -90 +KPX V oacute -90 +KPX V ocircumflex -90 +KPX V odieresis -90 +KPX V ograve -90 +KPX V ohungarumlaut -90 +KPX V omacron -90 +KPX V oslash -90 +KPX V otilde -90 +KPX V period -120 +KPX V semicolon -40 +KPX V u -60 +KPX V uacute -60 +KPX V ucircumflex -60 +KPX V udieresis -60 +KPX V ugrave -60 +KPX V uhungarumlaut -60 +KPX V umacron -60 +KPX V uogonek -60 +KPX V uring -60 +KPX W A -60 +KPX W Aacute -60 +KPX W Abreve -60 +KPX W Acircumflex -60 +KPX W Adieresis -60 +KPX W Agrave -60 +KPX W Amacron -60 +KPX W Aogonek -60 +KPX W Aring -60 +KPX W Atilde -60 +KPX W O -20 +KPX W Oacute -20 +KPX W Ocircumflex -20 +KPX W Odieresis -20 +KPX W Ograve -20 +KPX W Ohungarumlaut -20 +KPX W Omacron -20 +KPX W Oslash -20 +KPX W Otilde -20 +KPX W a -40 +KPX W aacute -40 +KPX W abreve -40 +KPX W acircumflex -40 +KPX W adieresis -40 +KPX W agrave -40 +KPX W amacron -40 +KPX W aogonek -40 +KPX W aring -40 +KPX W atilde -40 +KPX W colon -10 +KPX W comma -80 +KPX W e -35 +KPX W eacute -35 +KPX W ecaron -35 +KPX W ecircumflex -35 +KPX W edieresis -35 +KPX W edotaccent -35 +KPX W egrave -35 +KPX W emacron -35 +KPX W eogonek -35 +KPX W hyphen -40 +KPX W o -60 +KPX W oacute -60 +KPX W ocircumflex -60 +KPX W odieresis -60 +KPX W ograve -60 +KPX W ohungarumlaut -60 +KPX W omacron -60 +KPX W oslash -60 +KPX W otilde -60 +KPX W period -80 +KPX W semicolon -10 +KPX W u -45 +KPX W uacute -45 +KPX W ucircumflex -45 +KPX W udieresis -45 +KPX W ugrave -45 +KPX W uhungarumlaut -45 +KPX W umacron -45 +KPX W uogonek -45 +KPX W uring -45 +KPX W y -20 +KPX W yacute -20 +KPX W ydieresis -20 +KPX Y A -110 +KPX Y Aacute -110 +KPX Y Abreve -110 +KPX Y Acircumflex -110 +KPX Y Adieresis -110 +KPX Y Agrave -110 +KPX Y Amacron -110 +KPX Y Aogonek -110 +KPX Y Aring -110 +KPX Y Atilde -110 +KPX Y O -70 +KPX Y Oacute -70 +KPX Y Ocircumflex -70 +KPX Y Odieresis -70 +KPX Y Ograve -70 +KPX Y Ohungarumlaut -70 +KPX Y Omacron -70 +KPX Y Oslash -70 +KPX Y Otilde -70 +KPX Y a -90 +KPX Y aacute -90 +KPX Y abreve -90 +KPX Y acircumflex -90 +KPX Y adieresis -90 +KPX Y agrave -90 +KPX Y amacron -90 +KPX Y aogonek -90 +KPX Y aring -90 +KPX Y atilde -90 +KPX Y colon -50 +KPX Y comma -100 +KPX Y e -80 +KPX Y eacute -80 +KPX Y ecaron -80 +KPX Y ecircumflex -80 +KPX Y edieresis -80 +KPX Y edotaccent -80 +KPX Y egrave -80 +KPX Y emacron -80 +KPX Y eogonek -80 +KPX Y o -100 +KPX Y oacute -100 +KPX Y ocircumflex -100 +KPX Y odieresis -100 +KPX Y ograve -100 +KPX Y ohungarumlaut -100 +KPX Y omacron -100 +KPX Y oslash -100 +KPX Y otilde -100 +KPX Y period -100 +KPX Y semicolon -50 +KPX Y u -100 +KPX Y uacute -100 +KPX Y ucircumflex -100 +KPX Y udieresis -100 +KPX Y ugrave -100 +KPX Y uhungarumlaut -100 +KPX Y umacron -100 +KPX Y uogonek -100 +KPX Y uring -100 +KPX Yacute A -110 +KPX Yacute Aacute -110 +KPX Yacute Abreve -110 +KPX Yacute Acircumflex -110 +KPX Yacute Adieresis -110 +KPX Yacute Agrave -110 +KPX Yacute Amacron -110 +KPX Yacute Aogonek -110 +KPX Yacute Aring -110 +KPX Yacute Atilde -110 +KPX Yacute O -70 +KPX Yacute Oacute -70 +KPX Yacute Ocircumflex -70 +KPX Yacute Odieresis -70 +KPX Yacute Ograve -70 +KPX Yacute Ohungarumlaut -70 +KPX Yacute Omacron -70 +KPX Yacute Oslash -70 +KPX Yacute Otilde -70 +KPX Yacute a -90 +KPX Yacute aacute -90 +KPX Yacute abreve -90 +KPX Yacute acircumflex -90 +KPX Yacute adieresis -90 +KPX Yacute agrave -90 +KPX Yacute amacron -90 +KPX Yacute aogonek -90 +KPX Yacute aring -90 +KPX Yacute atilde -90 +KPX Yacute colon -50 +KPX Yacute comma -100 +KPX Yacute e -80 +KPX Yacute eacute -80 +KPX Yacute ecaron -80 +KPX Yacute ecircumflex -80 +KPX Yacute edieresis -80 +KPX Yacute edotaccent -80 +KPX Yacute egrave -80 +KPX Yacute emacron -80 +KPX Yacute eogonek -80 +KPX Yacute o -100 +KPX Yacute oacute -100 +KPX Yacute ocircumflex -100 +KPX Yacute odieresis -100 +KPX Yacute ograve -100 +KPX Yacute ohungarumlaut -100 +KPX Yacute omacron -100 +KPX Yacute oslash -100 +KPX Yacute otilde -100 +KPX Yacute period -100 +KPX Yacute semicolon -50 +KPX Yacute u -100 +KPX Yacute uacute -100 +KPX Yacute ucircumflex -100 +KPX Yacute udieresis -100 +KPX Yacute ugrave -100 +KPX Yacute uhungarumlaut -100 +KPX Yacute umacron -100 +KPX Yacute uogonek -100 +KPX Yacute uring -100 +KPX Ydieresis A -110 +KPX Ydieresis Aacute -110 +KPX Ydieresis Abreve -110 +KPX Ydieresis Acircumflex -110 +KPX Ydieresis Adieresis -110 +KPX Ydieresis Agrave -110 +KPX Ydieresis Amacron -110 +KPX Ydieresis Aogonek -110 +KPX Ydieresis Aring -110 +KPX Ydieresis Atilde -110 +KPX Ydieresis O -70 +KPX Ydieresis Oacute -70 +KPX Ydieresis Ocircumflex -70 +KPX Ydieresis Odieresis -70 +KPX Ydieresis Ograve -70 +KPX Ydieresis Ohungarumlaut -70 +KPX Ydieresis Omacron -70 +KPX Ydieresis Oslash -70 +KPX Ydieresis Otilde -70 +KPX Ydieresis a -90 +KPX Ydieresis aacute -90 +KPX Ydieresis abreve -90 +KPX Ydieresis acircumflex -90 +KPX Ydieresis adieresis -90 +KPX Ydieresis agrave -90 +KPX Ydieresis amacron -90 +KPX Ydieresis aogonek -90 +KPX Ydieresis aring -90 +KPX Ydieresis atilde -90 +KPX Ydieresis colon -50 +KPX Ydieresis comma -100 +KPX Ydieresis e -80 +KPX Ydieresis eacute -80 +KPX Ydieresis ecaron -80 +KPX Ydieresis ecircumflex -80 +KPX Ydieresis edieresis -80 +KPX Ydieresis edotaccent -80 +KPX Ydieresis egrave -80 +KPX Ydieresis emacron -80 +KPX Ydieresis eogonek -80 +KPX Ydieresis o -100 +KPX Ydieresis oacute -100 +KPX Ydieresis ocircumflex -100 +KPX Ydieresis odieresis -100 +KPX Ydieresis ograve -100 +KPX Ydieresis ohungarumlaut -100 +KPX Ydieresis omacron -100 +KPX Ydieresis oslash -100 +KPX Ydieresis otilde -100 +KPX Ydieresis period -100 +KPX Ydieresis semicolon -50 +KPX Ydieresis u -100 +KPX Ydieresis uacute -100 +KPX Ydieresis ucircumflex -100 +KPX Ydieresis udieresis -100 +KPX Ydieresis ugrave -100 +KPX Ydieresis uhungarumlaut -100 +KPX Ydieresis umacron -100 +KPX Ydieresis uogonek -100 +KPX Ydieresis uring -100 +KPX a g -10 +KPX a gbreve -10 +KPX a gcommaaccent -10 +KPX a v -15 +KPX a w -15 +KPX a y -20 +KPX a yacute -20 +KPX a ydieresis -20 +KPX aacute g -10 +KPX aacute gbreve -10 +KPX aacute gcommaaccent -10 +KPX aacute v -15 +KPX aacute w -15 +KPX aacute y -20 +KPX aacute yacute -20 +KPX aacute ydieresis -20 +KPX abreve g -10 +KPX abreve gbreve -10 +KPX abreve gcommaaccent -10 +KPX abreve v -15 +KPX abreve w -15 +KPX abreve y -20 +KPX abreve yacute -20 +KPX abreve ydieresis -20 +KPX acircumflex g -10 +KPX acircumflex gbreve -10 +KPX acircumflex gcommaaccent -10 +KPX acircumflex v -15 +KPX acircumflex w -15 +KPX acircumflex y -20 +KPX acircumflex yacute -20 +KPX acircumflex ydieresis -20 +KPX adieresis g -10 +KPX adieresis gbreve -10 +KPX adieresis gcommaaccent -10 +KPX adieresis v -15 +KPX adieresis w -15 +KPX adieresis y -20 +KPX adieresis yacute -20 +KPX adieresis ydieresis -20 +KPX agrave g -10 +KPX agrave gbreve -10 +KPX agrave gcommaaccent -10 +KPX agrave v -15 +KPX agrave w -15 +KPX agrave y -20 +KPX agrave yacute -20 +KPX agrave ydieresis -20 +KPX amacron g -10 +KPX amacron gbreve -10 +KPX amacron gcommaaccent -10 +KPX amacron v -15 +KPX amacron w -15 +KPX amacron y -20 +KPX amacron yacute -20 +KPX amacron ydieresis -20 +KPX aogonek g -10 +KPX aogonek gbreve -10 +KPX aogonek gcommaaccent -10 +KPX aogonek v -15 +KPX aogonek w -15 +KPX aogonek y -20 +KPX aogonek yacute -20 +KPX aogonek ydieresis -20 +KPX aring g -10 +KPX aring gbreve -10 +KPX aring gcommaaccent -10 +KPX aring v -15 +KPX aring w -15 +KPX aring y -20 +KPX aring yacute -20 +KPX aring ydieresis -20 +KPX atilde g -10 +KPX atilde gbreve -10 +KPX atilde gcommaaccent -10 +KPX atilde v -15 +KPX atilde w -15 +KPX atilde y -20 +KPX atilde yacute -20 +KPX atilde ydieresis -20 +KPX b l -10 +KPX b lacute -10 +KPX b lcommaaccent -10 +KPX b lslash -10 +KPX b u -20 +KPX b uacute -20 +KPX b ucircumflex -20 +KPX b udieresis -20 +KPX b ugrave -20 +KPX b uhungarumlaut -20 +KPX b umacron -20 +KPX b uogonek -20 +KPX b uring -20 +KPX b v -20 +KPX b y -20 +KPX b yacute -20 +KPX b ydieresis -20 +KPX c h -10 +KPX c k -20 +KPX c kcommaaccent -20 +KPX c l -20 +KPX c lacute -20 +KPX c lcommaaccent -20 +KPX c lslash -20 +KPX c y -10 +KPX c yacute -10 +KPX c ydieresis -10 +KPX cacute h -10 +KPX cacute k -20 +KPX cacute kcommaaccent -20 +KPX cacute l -20 +KPX cacute lacute -20 +KPX cacute lcommaaccent -20 +KPX cacute lslash -20 +KPX cacute y -10 +KPX cacute yacute -10 +KPX cacute ydieresis -10 +KPX ccaron h -10 +KPX ccaron k -20 +KPX ccaron kcommaaccent -20 +KPX ccaron l -20 +KPX ccaron lacute -20 +KPX ccaron lcommaaccent -20 +KPX ccaron lslash -20 +KPX ccaron y -10 +KPX ccaron yacute -10 +KPX ccaron ydieresis -10 +KPX ccedilla h -10 +KPX ccedilla k -20 +KPX ccedilla kcommaaccent -20 +KPX ccedilla l -20 +KPX ccedilla lacute -20 +KPX ccedilla lcommaaccent -20 +KPX ccedilla lslash -20 +KPX ccedilla y -10 +KPX ccedilla yacute -10 +KPX ccedilla ydieresis -10 +KPX colon space -40 +KPX comma quotedblright -120 +KPX comma quoteright -120 +KPX comma space -40 +KPX d d -10 +KPX d dcroat -10 +KPX d v -15 +KPX d w -15 +KPX d y -15 +KPX d yacute -15 +KPX d ydieresis -15 +KPX dcroat d -10 +KPX dcroat dcroat -10 +KPX dcroat v -15 +KPX dcroat w -15 +KPX dcroat y -15 +KPX dcroat yacute -15 +KPX dcroat ydieresis -15 +KPX e comma 10 +KPX e period 20 +KPX e v -15 +KPX e w -15 +KPX e x -15 +KPX e y -15 +KPX e yacute -15 +KPX e ydieresis -15 +KPX eacute comma 10 +KPX eacute period 20 +KPX eacute v -15 +KPX eacute w -15 +KPX eacute x -15 +KPX eacute y -15 +KPX eacute yacute -15 +KPX eacute ydieresis -15 +KPX ecaron comma 10 +KPX ecaron period 20 +KPX ecaron v -15 +KPX ecaron w -15 +KPX ecaron x -15 +KPX ecaron y -15 +KPX ecaron yacute -15 +KPX ecaron ydieresis -15 +KPX ecircumflex comma 10 +KPX ecircumflex period 20 +KPX ecircumflex v -15 +KPX ecircumflex w -15 +KPX ecircumflex x -15 +KPX ecircumflex y -15 +KPX ecircumflex yacute -15 +KPX ecircumflex ydieresis -15 +KPX edieresis comma 10 +KPX edieresis period 20 +KPX edieresis v -15 +KPX edieresis w -15 +KPX edieresis x -15 +KPX edieresis y -15 +KPX edieresis yacute -15 +KPX edieresis ydieresis -15 +KPX edotaccent comma 10 +KPX edotaccent period 20 +KPX edotaccent v -15 +KPX edotaccent w -15 +KPX edotaccent x -15 +KPX edotaccent y -15 +KPX edotaccent yacute -15 +KPX edotaccent ydieresis -15 +KPX egrave comma 10 +KPX egrave period 20 +KPX egrave v -15 +KPX egrave w -15 +KPX egrave x -15 +KPX egrave y -15 +KPX egrave yacute -15 +KPX egrave ydieresis -15 +KPX emacron comma 10 +KPX emacron period 20 +KPX emacron v -15 +KPX emacron w -15 +KPX emacron x -15 +KPX emacron y -15 +KPX emacron yacute -15 +KPX emacron ydieresis -15 +KPX eogonek comma 10 +KPX eogonek period 20 +KPX eogonek v -15 +KPX eogonek w -15 +KPX eogonek x -15 +KPX eogonek y -15 +KPX eogonek yacute -15 +KPX eogonek ydieresis -15 +KPX f comma -10 +KPX f e -10 +KPX f eacute -10 +KPX f ecaron -10 +KPX f ecircumflex -10 +KPX f edieresis -10 +KPX f edotaccent -10 +KPX f egrave -10 +KPX f emacron -10 +KPX f eogonek -10 +KPX f o -20 +KPX f oacute -20 +KPX f ocircumflex -20 +KPX f odieresis -20 +KPX f ograve -20 +KPX f ohungarumlaut -20 +KPX f omacron -20 +KPX f oslash -20 +KPX f otilde -20 +KPX f period -10 +KPX f quotedblright 30 +KPX f quoteright 30 +KPX g e 10 +KPX g eacute 10 +KPX g ecaron 10 +KPX g ecircumflex 10 +KPX g edieresis 10 +KPX g edotaccent 10 +KPX g egrave 10 +KPX g emacron 10 +KPX g eogonek 10 +KPX g g -10 +KPX g gbreve -10 +KPX g gcommaaccent -10 +KPX gbreve e 10 +KPX gbreve eacute 10 +KPX gbreve ecaron 10 +KPX gbreve ecircumflex 10 +KPX gbreve edieresis 10 +KPX gbreve edotaccent 10 +KPX gbreve egrave 10 +KPX gbreve emacron 10 +KPX gbreve eogonek 10 +KPX gbreve g -10 +KPX gbreve gbreve -10 +KPX gbreve gcommaaccent -10 +KPX gcommaaccent e 10 +KPX gcommaaccent eacute 10 +KPX gcommaaccent ecaron 10 +KPX gcommaaccent ecircumflex 10 +KPX gcommaaccent edieresis 10 +KPX gcommaaccent edotaccent 10 +KPX gcommaaccent egrave 10 +KPX gcommaaccent emacron 10 +KPX gcommaaccent eogonek 10 +KPX gcommaaccent g -10 +KPX gcommaaccent gbreve -10 +KPX gcommaaccent gcommaaccent -10 +KPX h y -20 +KPX h yacute -20 +KPX h ydieresis -20 +KPX k o -15 +KPX k oacute -15 +KPX k ocircumflex -15 +KPX k odieresis -15 +KPX k ograve -15 +KPX k ohungarumlaut -15 +KPX k omacron -15 +KPX k oslash -15 +KPX k otilde -15 +KPX kcommaaccent o -15 +KPX kcommaaccent oacute -15 +KPX kcommaaccent ocircumflex -15 +KPX kcommaaccent odieresis -15 +KPX kcommaaccent ograve -15 +KPX kcommaaccent ohungarumlaut -15 +KPX kcommaaccent omacron -15 +KPX kcommaaccent oslash -15 +KPX kcommaaccent otilde -15 +KPX l w -15 +KPX l y -15 +KPX l yacute -15 +KPX l ydieresis -15 +KPX lacute w -15 +KPX lacute y -15 +KPX lacute yacute -15 +KPX lacute ydieresis -15 +KPX lcommaaccent w -15 +KPX lcommaaccent y -15 +KPX lcommaaccent yacute -15 +KPX lcommaaccent ydieresis -15 +KPX lslash w -15 +KPX lslash y -15 +KPX lslash yacute -15 +KPX lslash ydieresis -15 +KPX m u -20 +KPX m uacute -20 +KPX m ucircumflex -20 +KPX m udieresis -20 +KPX m ugrave -20 +KPX m uhungarumlaut -20 +KPX m umacron -20 +KPX m uogonek -20 +KPX m uring -20 +KPX m y -30 +KPX m yacute -30 +KPX m ydieresis -30 +KPX n u -10 +KPX n uacute -10 +KPX n ucircumflex -10 +KPX n udieresis -10 +KPX n ugrave -10 +KPX n uhungarumlaut -10 +KPX n umacron -10 +KPX n uogonek -10 +KPX n uring -10 +KPX n v -40 +KPX n y -20 +KPX n yacute -20 +KPX n ydieresis -20 +KPX nacute u -10 +KPX nacute uacute -10 +KPX nacute ucircumflex -10 +KPX nacute udieresis -10 +KPX nacute ugrave -10 +KPX nacute uhungarumlaut -10 +KPX nacute umacron -10 +KPX nacute uogonek -10 +KPX nacute uring -10 +KPX nacute v -40 +KPX nacute y -20 +KPX nacute yacute -20 +KPX nacute ydieresis -20 +KPX ncaron u -10 +KPX ncaron uacute -10 +KPX ncaron ucircumflex -10 +KPX ncaron udieresis -10 +KPX ncaron ugrave -10 +KPX ncaron uhungarumlaut -10 +KPX ncaron umacron -10 +KPX ncaron uogonek -10 +KPX ncaron uring -10 +KPX ncaron v -40 +KPX ncaron y -20 +KPX ncaron yacute -20 +KPX ncaron ydieresis -20 +KPX ncommaaccent u -10 +KPX ncommaaccent uacute -10 +KPX ncommaaccent ucircumflex -10 +KPX ncommaaccent udieresis -10 +KPX ncommaaccent ugrave -10 +KPX ncommaaccent uhungarumlaut -10 +KPX ncommaaccent umacron -10 +KPX ncommaaccent uogonek -10 +KPX ncommaaccent uring -10 +KPX ncommaaccent v -40 +KPX ncommaaccent y -20 +KPX ncommaaccent yacute -20 +KPX ncommaaccent ydieresis -20 +KPX ntilde u -10 +KPX ntilde uacute -10 +KPX ntilde ucircumflex -10 +KPX ntilde udieresis -10 +KPX ntilde ugrave -10 +KPX ntilde uhungarumlaut -10 +KPX ntilde umacron -10 +KPX ntilde uogonek -10 +KPX ntilde uring -10 +KPX ntilde v -40 +KPX ntilde y -20 +KPX ntilde yacute -20 +KPX ntilde ydieresis -20 +KPX o v -20 +KPX o w -15 +KPX o x -30 +KPX o y -20 +KPX o yacute -20 +KPX o ydieresis -20 +KPX oacute v -20 +KPX oacute w -15 +KPX oacute x -30 +KPX oacute y -20 +KPX oacute yacute -20 +KPX oacute ydieresis -20 +KPX ocircumflex v -20 +KPX ocircumflex w -15 +KPX ocircumflex x -30 +KPX ocircumflex y -20 +KPX ocircumflex yacute -20 +KPX ocircumflex ydieresis -20 +KPX odieresis v -20 +KPX odieresis w -15 +KPX odieresis x -30 +KPX odieresis y -20 +KPX odieresis yacute -20 +KPX odieresis ydieresis -20 +KPX ograve v -20 +KPX ograve w -15 +KPX ograve x -30 +KPX ograve y -20 +KPX ograve yacute -20 +KPX ograve ydieresis -20 +KPX ohungarumlaut v -20 +KPX ohungarumlaut w -15 +KPX ohungarumlaut x -30 +KPX ohungarumlaut y -20 +KPX ohungarumlaut yacute -20 +KPX ohungarumlaut ydieresis -20 +KPX omacron v -20 +KPX omacron w -15 +KPX omacron x -30 +KPX omacron y -20 +KPX omacron yacute -20 +KPX omacron ydieresis -20 +KPX oslash v -20 +KPX oslash w -15 +KPX oslash x -30 +KPX oslash y -20 +KPX oslash yacute -20 +KPX oslash ydieresis -20 +KPX otilde v -20 +KPX otilde w -15 +KPX otilde x -30 +KPX otilde y -20 +KPX otilde yacute -20 +KPX otilde ydieresis -20 +KPX p y -15 +KPX p yacute -15 +KPX p ydieresis -15 +KPX period quotedblright -120 +KPX period quoteright -120 +KPX period space -40 +KPX quotedblright space -80 +KPX quoteleft quoteleft -46 +KPX quoteright d -80 +KPX quoteright dcroat -80 +KPX quoteright l -20 +KPX quoteright lacute -20 +KPX quoteright lcommaaccent -20 +KPX quoteright lslash -20 +KPX quoteright quoteright -46 +KPX quoteright r -40 +KPX quoteright racute -40 +KPX quoteright rcaron -40 +KPX quoteright rcommaaccent -40 +KPX quoteright s -60 +KPX quoteright sacute -60 +KPX quoteright scaron -60 +KPX quoteright scedilla -60 +KPX quoteright scommaaccent -60 +KPX quoteright space -80 +KPX quoteright v -20 +KPX r c -20 +KPX r cacute -20 +KPX r ccaron -20 +KPX r ccedilla -20 +KPX r comma -60 +KPX r d -20 +KPX r dcroat -20 +KPX r g -15 +KPX r gbreve -15 +KPX r gcommaaccent -15 +KPX r hyphen -20 +KPX r o -20 +KPX r oacute -20 +KPX r ocircumflex -20 +KPX r odieresis -20 +KPX r ograve -20 +KPX r ohungarumlaut -20 +KPX r omacron -20 +KPX r oslash -20 +KPX r otilde -20 +KPX r period -60 +KPX r q -20 +KPX r s -15 +KPX r sacute -15 +KPX r scaron -15 +KPX r scedilla -15 +KPX r scommaaccent -15 +KPX r t 20 +KPX r tcommaaccent 20 +KPX r v 10 +KPX r y 10 +KPX r yacute 10 +KPX r ydieresis 10 +KPX racute c -20 +KPX racute cacute -20 +KPX racute ccaron -20 +KPX racute ccedilla -20 +KPX racute comma -60 +KPX racute d -20 +KPX racute dcroat -20 +KPX racute g -15 +KPX racute gbreve -15 +KPX racute gcommaaccent -15 +KPX racute hyphen -20 +KPX racute o -20 +KPX racute oacute -20 +KPX racute ocircumflex -20 +KPX racute odieresis -20 +KPX racute ograve -20 +KPX racute ohungarumlaut -20 +KPX racute omacron -20 +KPX racute oslash -20 +KPX racute otilde -20 +KPX racute period -60 +KPX racute q -20 +KPX racute s -15 +KPX racute sacute -15 +KPX racute scaron -15 +KPX racute scedilla -15 +KPX racute scommaaccent -15 +KPX racute t 20 +KPX racute tcommaaccent 20 +KPX racute v 10 +KPX racute y 10 +KPX racute yacute 10 +KPX racute ydieresis 10 +KPX rcaron c -20 +KPX rcaron cacute -20 +KPX rcaron ccaron -20 +KPX rcaron ccedilla -20 +KPX rcaron comma -60 +KPX rcaron d -20 +KPX rcaron dcroat -20 +KPX rcaron g -15 +KPX rcaron gbreve -15 +KPX rcaron gcommaaccent -15 +KPX rcaron hyphen -20 +KPX rcaron o -20 +KPX rcaron oacute -20 +KPX rcaron ocircumflex -20 +KPX rcaron odieresis -20 +KPX rcaron ograve -20 +KPX rcaron ohungarumlaut -20 +KPX rcaron omacron -20 +KPX rcaron oslash -20 +KPX rcaron otilde -20 +KPX rcaron period -60 +KPX rcaron q -20 +KPX rcaron s -15 +KPX rcaron sacute -15 +KPX rcaron scaron -15 +KPX rcaron scedilla -15 +KPX rcaron scommaaccent -15 +KPX rcaron t 20 +KPX rcaron tcommaaccent 20 +KPX rcaron v 10 +KPX rcaron y 10 +KPX rcaron yacute 10 +KPX rcaron ydieresis 10 +KPX rcommaaccent c -20 +KPX rcommaaccent cacute -20 +KPX rcommaaccent ccaron -20 +KPX rcommaaccent ccedilla -20 +KPX rcommaaccent comma -60 +KPX rcommaaccent d -20 +KPX rcommaaccent dcroat -20 +KPX rcommaaccent g -15 +KPX rcommaaccent gbreve -15 +KPX rcommaaccent gcommaaccent -15 +KPX rcommaaccent hyphen -20 +KPX rcommaaccent o -20 +KPX rcommaaccent oacute -20 +KPX rcommaaccent ocircumflex -20 +KPX rcommaaccent odieresis -20 +KPX rcommaaccent ograve -20 +KPX rcommaaccent ohungarumlaut -20 +KPX rcommaaccent omacron -20 +KPX rcommaaccent oslash -20 +KPX rcommaaccent otilde -20 +KPX rcommaaccent period -60 +KPX rcommaaccent q -20 +KPX rcommaaccent s -15 +KPX rcommaaccent sacute -15 +KPX rcommaaccent scaron -15 +KPX rcommaaccent scedilla -15 +KPX rcommaaccent scommaaccent -15 +KPX rcommaaccent t 20 +KPX rcommaaccent tcommaaccent 20 +KPX rcommaaccent v 10 +KPX rcommaaccent y 10 +KPX rcommaaccent yacute 10 +KPX rcommaaccent ydieresis 10 +KPX s w -15 +KPX sacute w -15 +KPX scaron w -15 +KPX scedilla w -15 +KPX scommaaccent w -15 +KPX semicolon space -40 +KPX space T -100 +KPX space Tcaron -100 +KPX space Tcommaaccent -100 +KPX space V -80 +KPX space W -80 +KPX space Y -120 +KPX space Yacute -120 +KPX space Ydieresis -120 +KPX space quotedblleft -80 +KPX space quoteleft -60 +KPX v a -20 +KPX v aacute -20 +KPX v abreve -20 +KPX v acircumflex -20 +KPX v adieresis -20 +KPX v agrave -20 +KPX v amacron -20 +KPX v aogonek -20 +KPX v aring -20 +KPX v atilde -20 +KPX v comma -80 +KPX v o -30 +KPX v oacute -30 +KPX v ocircumflex -30 +KPX v odieresis -30 +KPX v ograve -30 +KPX v ohungarumlaut -30 +KPX v omacron -30 +KPX v oslash -30 +KPX v otilde -30 +KPX v period -80 +KPX w comma -40 +KPX w o -20 +KPX w oacute -20 +KPX w ocircumflex -20 +KPX w odieresis -20 +KPX w ograve -20 +KPX w ohungarumlaut -20 +KPX w omacron -20 +KPX w oslash -20 +KPX w otilde -20 +KPX w period -40 +KPX x e -10 +KPX x eacute -10 +KPX x ecaron -10 +KPX x ecircumflex -10 +KPX x edieresis -10 +KPX x edotaccent -10 +KPX x egrave -10 +KPX x emacron -10 +KPX x eogonek -10 +KPX y a -30 +KPX y aacute -30 +KPX y abreve -30 +KPX y acircumflex -30 +KPX y adieresis -30 +KPX y agrave -30 +KPX y amacron -30 +KPX y aogonek -30 +KPX y aring -30 +KPX y atilde -30 +KPX y comma -80 +KPX y e -10 +KPX y eacute -10 +KPX y ecaron -10 +KPX y ecircumflex -10 +KPX y edieresis -10 +KPX y edotaccent -10 +KPX y egrave -10 +KPX y emacron -10 +KPX y eogonek -10 +KPX y o -25 +KPX y oacute -25 +KPX y ocircumflex -25 +KPX y odieresis -25 +KPX y ograve -25 +KPX y ohungarumlaut -25 +KPX y omacron -25 +KPX y oslash -25 +KPX y otilde -25 +KPX y period -80 +KPX yacute a -30 +KPX yacute aacute -30 +KPX yacute abreve -30 +KPX yacute acircumflex -30 +KPX yacute adieresis -30 +KPX yacute agrave -30 +KPX yacute amacron -30 +KPX yacute aogonek -30 +KPX yacute aring -30 +KPX yacute atilde -30 +KPX yacute comma -80 +KPX yacute e -10 +KPX yacute eacute -10 +KPX yacute ecaron -10 +KPX yacute ecircumflex -10 +KPX yacute edieresis -10 +KPX yacute edotaccent -10 +KPX yacute egrave -10 +KPX yacute emacron -10 +KPX yacute eogonek -10 +KPX yacute o -25 +KPX yacute oacute -25 +KPX yacute ocircumflex -25 +KPX yacute odieresis -25 +KPX yacute ograve -25 +KPX yacute ohungarumlaut -25 +KPX yacute omacron -25 +KPX yacute oslash -25 +KPX yacute otilde -25 +KPX yacute period -80 +KPX ydieresis a -30 +KPX ydieresis aacute -30 +KPX ydieresis abreve -30 +KPX ydieresis acircumflex -30 +KPX ydieresis adieresis -30 +KPX ydieresis agrave -30 +KPX ydieresis amacron -30 +KPX ydieresis aogonek -30 +KPX ydieresis aring -30 +KPX ydieresis atilde -30 +KPX ydieresis comma -80 +KPX ydieresis e -10 +KPX ydieresis eacute -10 +KPX ydieresis ecaron -10 +KPX ydieresis ecircumflex -10 +KPX ydieresis edieresis -10 +KPX ydieresis edotaccent -10 +KPX ydieresis egrave -10 +KPX ydieresis emacron -10 +KPX ydieresis eogonek -10 +KPX ydieresis o -25 +KPX ydieresis oacute -25 +KPX ydieresis ocircumflex -25 +KPX ydieresis odieresis -25 +KPX ydieresis ograve -25 +KPX ydieresis ohungarumlaut -25 +KPX ydieresis omacron -25 +KPX ydieresis oslash -25 +KPX ydieresis otilde -25 +KPX ydieresis period -80 +KPX z e 10 +KPX z eacute 10 +KPX z ecaron 10 +KPX z ecircumflex 10 +KPX z edieresis 10 +KPX z edotaccent 10 +KPX z egrave 10 +KPX z emacron 10 +KPX z eogonek 10 +KPX zacute e 10 +KPX zacute eacute 10 +KPX zacute ecaron 10 +KPX zacute ecircumflex 10 +KPX zacute edieresis 10 +KPX zacute edotaccent 10 +KPX zacute egrave 10 +KPX zacute emacron 10 +KPX zacute eogonek 10 +KPX zcaron e 10 +KPX zcaron eacute 10 +KPX zcaron ecaron 10 +KPX zcaron ecircumflex 10 +KPX zcaron edieresis 10 +KPX zcaron edotaccent 10 +KPX zcaron egrave 10 +KPX zcaron emacron 10 +KPX zcaron eogonek 10 +KPX zdotaccent e 10 +KPX zdotaccent eacute 10 +KPX zdotaccent ecaron 10 +KPX zdotaccent ecircumflex 10 +KPX zdotaccent edieresis 10 +KPX zdotaccent edotaccent 10 +KPX zdotaccent egrave 10 +KPX zdotaccent emacron 10 +KPX zdotaccent eogonek 10 +EndKernPairs +EndKernData +EndFontMetrics diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/Helvetica-BoldOblique.afm b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/Helvetica-BoldOblique.afm new file mode 100755 index 00000000..1715b210 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/Helvetica-BoldOblique.afm @@ -0,0 +1,2827 @@ +StartFontMetrics 4.1 +Comment Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All Rights Reserved. +Comment Creation Date: Thu May 1 12:45:12 1997 +Comment UniqueID 43053 +Comment VMusage 14482 68586 +FontName Helvetica-BoldOblique +FullName Helvetica Bold Oblique +FamilyName Helvetica +Weight Bold +ItalicAngle -12 +IsFixedPitch false +CharacterSet ExtendedRoman +FontBBox -174 -228 1114 962 +UnderlinePosition -100 +UnderlineThickness 50 +Version 002.000 +Notice Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All Rights Reserved.Helvetica is a trademark of Linotype-Hell AG and/or its subsidiaries. +EncodingScheme AdobeStandardEncoding +CapHeight 718 +XHeight 532 +Ascender 718 +Descender -207 +StdHW 118 +StdVW 140 +StartCharMetrics 315 +C 32 ; WX 278 ; N space ; B 0 0 0 0 ; +C 33 ; WX 333 ; N exclam ; B 94 0 397 718 ; +C 34 ; WX 474 ; N quotedbl ; B 193 447 529 718 ; +C 35 ; WX 556 ; N numbersign ; B 60 0 644 698 ; +C 36 ; WX 556 ; N dollar ; B 67 -115 622 775 ; +C 37 ; WX 889 ; N percent ; B 136 -19 901 710 ; +C 38 ; WX 722 ; N ampersand ; B 89 -19 732 718 ; +C 39 ; WX 278 ; N quoteright ; B 167 445 362 718 ; +C 40 ; WX 333 ; N parenleft ; B 76 -208 470 734 ; +C 41 ; WX 333 ; N parenright ; B -25 -208 369 734 ; +C 42 ; WX 389 ; N asterisk ; B 146 387 481 718 ; +C 43 ; WX 584 ; N plus ; B 82 0 610 506 ; +C 44 ; WX 278 ; N comma ; B 28 -168 245 146 ; +C 45 ; WX 333 ; N hyphen ; B 73 215 379 345 ; +C 46 ; WX 278 ; N period ; B 64 0 245 146 ; +C 47 ; WX 278 ; N slash ; B -37 -19 468 737 ; +C 48 ; WX 556 ; N zero ; B 86 -19 617 710 ; +C 49 ; WX 556 ; N one ; B 173 0 529 710 ; +C 50 ; WX 556 ; N two ; B 26 0 619 710 ; +C 51 ; WX 556 ; N three ; B 65 -19 608 710 ; +C 52 ; WX 556 ; N four ; B 60 0 598 710 ; +C 53 ; WX 556 ; N five ; B 64 -19 636 698 ; +C 54 ; WX 556 ; N six ; B 85 -19 619 710 ; +C 55 ; WX 556 ; N seven ; B 125 0 676 698 ; +C 56 ; WX 556 ; N eight ; B 69 -19 616 710 ; +C 57 ; WX 556 ; N nine ; B 78 -19 615 710 ; +C 58 ; WX 333 ; N colon ; B 92 0 351 512 ; +C 59 ; WX 333 ; N semicolon ; B 56 -168 351 512 ; +C 60 ; WX 584 ; N less ; B 82 -8 655 514 ; +C 61 ; WX 584 ; N equal ; B 58 87 633 419 ; +C 62 ; WX 584 ; N greater ; B 36 -8 609 514 ; +C 63 ; WX 611 ; N question ; B 165 0 671 727 ; +C 64 ; WX 975 ; N at ; B 186 -19 954 737 ; +C 65 ; WX 722 ; N A ; B 20 0 702 718 ; +C 66 ; WX 722 ; N B ; B 76 0 764 718 ; +C 67 ; WX 722 ; N C ; B 107 -19 789 737 ; +C 68 ; WX 722 ; N D ; B 76 0 777 718 ; +C 69 ; WX 667 ; N E ; B 76 0 757 718 ; +C 70 ; WX 611 ; N F ; B 76 0 740 718 ; +C 71 ; WX 778 ; N G ; B 108 -19 817 737 ; +C 72 ; WX 722 ; N H ; B 71 0 804 718 ; +C 73 ; WX 278 ; N I ; B 64 0 367 718 ; +C 74 ; WX 556 ; N J ; B 60 -18 637 718 ; +C 75 ; WX 722 ; N K ; B 87 0 858 718 ; +C 76 ; WX 611 ; N L ; B 76 0 611 718 ; +C 77 ; WX 833 ; N M ; B 69 0 918 718 ; +C 78 ; WX 722 ; N N ; B 69 0 807 718 ; +C 79 ; WX 778 ; N O ; B 107 -19 823 737 ; +C 80 ; WX 667 ; N P ; B 76 0 738 718 ; +C 81 ; WX 778 ; N Q ; B 107 -52 823 737 ; +C 82 ; WX 722 ; N R ; B 76 0 778 718 ; +C 83 ; WX 667 ; N S ; B 81 -19 718 737 ; +C 84 ; WX 611 ; N T ; B 140 0 751 718 ; +C 85 ; WX 722 ; N U ; B 116 -19 804 718 ; +C 86 ; WX 667 ; N V ; B 172 0 801 718 ; +C 87 ; WX 944 ; N W ; B 169 0 1082 718 ; +C 88 ; WX 667 ; N X ; B 14 0 791 718 ; +C 89 ; WX 667 ; N Y ; B 168 0 806 718 ; +C 90 ; WX 611 ; N Z ; B 25 0 737 718 ; +C 91 ; WX 333 ; N bracketleft ; B 21 -196 462 722 ; +C 92 ; WX 278 ; N backslash ; B 124 -19 307 737 ; +C 93 ; WX 333 ; N bracketright ; B -18 -196 423 722 ; +C 94 ; WX 584 ; N asciicircum ; B 131 323 591 698 ; +C 95 ; WX 556 ; N underscore ; B -27 -125 540 -75 ; +C 96 ; WX 278 ; N quoteleft ; B 165 454 361 727 ; +C 97 ; WX 556 ; N a ; B 55 -14 583 546 ; +C 98 ; WX 611 ; N b ; B 61 -14 645 718 ; +C 99 ; WX 556 ; N c ; B 79 -14 599 546 ; +C 100 ; WX 611 ; N d ; B 82 -14 704 718 ; +C 101 ; WX 556 ; N e ; B 70 -14 593 546 ; +C 102 ; WX 333 ; N f ; B 87 0 469 727 ; L i fi ; L l fl ; +C 103 ; WX 611 ; N g ; B 38 -217 666 546 ; +C 104 ; WX 611 ; N h ; B 65 0 629 718 ; +C 105 ; WX 278 ; N i ; B 69 0 363 725 ; +C 106 ; WX 278 ; N j ; B -42 -214 363 725 ; +C 107 ; WX 556 ; N k ; B 69 0 670 718 ; +C 108 ; WX 278 ; N l ; B 69 0 362 718 ; +C 109 ; WX 889 ; N m ; B 64 0 909 546 ; +C 110 ; WX 611 ; N n ; B 65 0 629 546 ; +C 111 ; WX 611 ; N o ; B 82 -14 643 546 ; +C 112 ; WX 611 ; N p ; B 18 -207 645 546 ; +C 113 ; WX 611 ; N q ; B 80 -207 665 546 ; +C 114 ; WX 389 ; N r ; B 64 0 489 546 ; +C 115 ; WX 556 ; N s ; B 63 -14 584 546 ; +C 116 ; WX 333 ; N t ; B 100 -6 422 676 ; +C 117 ; WX 611 ; N u ; B 98 -14 658 532 ; +C 118 ; WX 556 ; N v ; B 126 0 656 532 ; +C 119 ; WX 778 ; N w ; B 123 0 882 532 ; +C 120 ; WX 556 ; N x ; B 15 0 648 532 ; +C 121 ; WX 556 ; N y ; B 42 -214 652 532 ; +C 122 ; WX 500 ; N z ; B 20 0 583 532 ; +C 123 ; WX 389 ; N braceleft ; B 94 -196 518 722 ; +C 124 ; WX 280 ; N bar ; B 36 -225 361 775 ; +C 125 ; WX 389 ; N braceright ; B -18 -196 407 722 ; +C 126 ; WX 584 ; N asciitilde ; B 115 163 577 343 ; +C 161 ; WX 333 ; N exclamdown ; B 50 -186 353 532 ; +C 162 ; WX 556 ; N cent ; B 79 -118 599 628 ; +C 163 ; WX 556 ; N sterling ; B 50 -16 635 718 ; +C 164 ; WX 167 ; N fraction ; B -174 -19 487 710 ; +C 165 ; WX 556 ; N yen ; B 60 0 713 698 ; +C 166 ; WX 556 ; N florin ; B -50 -210 669 737 ; +C 167 ; WX 556 ; N section ; B 61 -184 598 727 ; +C 168 ; WX 556 ; N currency ; B 27 76 680 636 ; +C 169 ; WX 238 ; N quotesingle ; B 165 447 321 718 ; +C 170 ; WX 500 ; N quotedblleft ; B 160 454 588 727 ; +C 171 ; WX 556 ; N guillemotleft ; B 135 76 571 484 ; +C 172 ; WX 333 ; N guilsinglleft ; B 130 76 353 484 ; +C 173 ; WX 333 ; N guilsinglright ; B 99 76 322 484 ; +C 174 ; WX 611 ; N fi ; B 87 0 696 727 ; +C 175 ; WX 611 ; N fl ; B 87 0 695 727 ; +C 177 ; WX 556 ; N endash ; B 48 227 627 333 ; +C 178 ; WX 556 ; N dagger ; B 118 -171 626 718 ; +C 179 ; WX 556 ; N daggerdbl ; B 46 -171 628 718 ; +C 180 ; WX 278 ; N periodcentered ; B 110 172 276 334 ; +C 182 ; WX 556 ; N paragraph ; B 98 -191 688 700 ; +C 183 ; WX 350 ; N bullet ; B 83 194 420 524 ; +C 184 ; WX 278 ; N quotesinglbase ; B 41 -146 236 127 ; +C 185 ; WX 500 ; N quotedblbase ; B 36 -146 463 127 ; +C 186 ; WX 500 ; N quotedblright ; B 162 445 589 718 ; +C 187 ; WX 556 ; N guillemotright ; B 104 76 540 484 ; +C 188 ; WX 1000 ; N ellipsis ; B 92 0 939 146 ; +C 189 ; WX 1000 ; N perthousand ; B 76 -19 1038 710 ; +C 191 ; WX 611 ; N questiondown ; B 53 -195 559 532 ; +C 193 ; WX 333 ; N grave ; B 136 604 353 750 ; +C 194 ; WX 333 ; N acute ; B 236 604 515 750 ; +C 195 ; WX 333 ; N circumflex ; B 118 604 471 750 ; +C 196 ; WX 333 ; N tilde ; B 113 610 507 737 ; +C 197 ; WX 333 ; N macron ; B 122 604 483 678 ; +C 198 ; WX 333 ; N breve ; B 156 604 494 750 ; +C 199 ; WX 333 ; N dotaccent ; B 235 614 385 729 ; +C 200 ; WX 333 ; N dieresis ; B 137 614 482 729 ; +C 202 ; WX 333 ; N ring ; B 200 568 420 776 ; +C 203 ; WX 333 ; N cedilla ; B -37 -228 220 0 ; +C 205 ; WX 333 ; N hungarumlaut ; B 137 604 645 750 ; +C 206 ; WX 333 ; N ogonek ; B 41 -228 264 0 ; +C 207 ; WX 333 ; N caron ; B 149 604 502 750 ; +C 208 ; WX 1000 ; N emdash ; B 48 227 1071 333 ; +C 225 ; WX 1000 ; N AE ; B 5 0 1100 718 ; +C 227 ; WX 370 ; N ordfeminine ; B 125 401 465 737 ; +C 232 ; WX 611 ; N Lslash ; B 34 0 611 718 ; +C 233 ; WX 778 ; N Oslash ; B 35 -27 894 745 ; +C 234 ; WX 1000 ; N OE ; B 99 -19 1114 737 ; +C 235 ; WX 365 ; N ordmasculine ; B 123 401 485 737 ; +C 241 ; WX 889 ; N ae ; B 56 -14 923 546 ; +C 245 ; WX 278 ; N dotlessi ; B 69 0 322 532 ; +C 248 ; WX 278 ; N lslash ; B 40 0 407 718 ; +C 249 ; WX 611 ; N oslash ; B 22 -29 701 560 ; +C 250 ; WX 944 ; N oe ; B 82 -14 977 546 ; +C 251 ; WX 611 ; N germandbls ; B 69 -14 657 731 ; +C -1 ; WX 278 ; N Idieresis ; B 64 0 494 915 ; +C -1 ; WX 556 ; N eacute ; B 70 -14 627 750 ; +C -1 ; WX 556 ; N abreve ; B 55 -14 606 750 ; +C -1 ; WX 611 ; N uhungarumlaut ; B 98 -14 784 750 ; +C -1 ; WX 556 ; N ecaron ; B 70 -14 614 750 ; +C -1 ; WX 667 ; N Ydieresis ; B 168 0 806 915 ; +C -1 ; WX 584 ; N divide ; B 82 -42 610 548 ; +C -1 ; WX 667 ; N Yacute ; B 168 0 806 936 ; +C -1 ; WX 722 ; N Acircumflex ; B 20 0 706 936 ; +C -1 ; WX 556 ; N aacute ; B 55 -14 627 750 ; +C -1 ; WX 722 ; N Ucircumflex ; B 116 -19 804 936 ; +C -1 ; WX 556 ; N yacute ; B 42 -214 652 750 ; +C -1 ; WX 556 ; N scommaaccent ; B 63 -228 584 546 ; +C -1 ; WX 556 ; N ecircumflex ; B 70 -14 593 750 ; +C -1 ; WX 722 ; N Uring ; B 116 -19 804 962 ; +C -1 ; WX 722 ; N Udieresis ; B 116 -19 804 915 ; +C -1 ; WX 556 ; N aogonek ; B 55 -224 583 546 ; +C -1 ; WX 722 ; N Uacute ; B 116 -19 804 936 ; +C -1 ; WX 611 ; N uogonek ; B 98 -228 658 532 ; +C -1 ; WX 667 ; N Edieresis ; B 76 0 757 915 ; +C -1 ; WX 722 ; N Dcroat ; B 62 0 777 718 ; +C -1 ; WX 250 ; N commaaccent ; B 16 -228 188 -50 ; +C -1 ; WX 737 ; N copyright ; B 56 -19 835 737 ; +C -1 ; WX 667 ; N Emacron ; B 76 0 757 864 ; +C -1 ; WX 556 ; N ccaron ; B 79 -14 614 750 ; +C -1 ; WX 556 ; N aring ; B 55 -14 583 776 ; +C -1 ; WX 722 ; N Ncommaaccent ; B 69 -228 807 718 ; +C -1 ; WX 278 ; N lacute ; B 69 0 528 936 ; +C -1 ; WX 556 ; N agrave ; B 55 -14 583 750 ; +C -1 ; WX 611 ; N Tcommaaccent ; B 140 -228 751 718 ; +C -1 ; WX 722 ; N Cacute ; B 107 -19 789 936 ; +C -1 ; WX 556 ; N atilde ; B 55 -14 619 737 ; +C -1 ; WX 667 ; N Edotaccent ; B 76 0 757 915 ; +C -1 ; WX 556 ; N scaron ; B 63 -14 614 750 ; +C -1 ; WX 556 ; N scedilla ; B 63 -228 584 546 ; +C -1 ; WX 278 ; N iacute ; B 69 0 488 750 ; +C -1 ; WX 494 ; N lozenge ; B 90 0 564 745 ; +C -1 ; WX 722 ; N Rcaron ; B 76 0 778 936 ; +C -1 ; WX 778 ; N Gcommaaccent ; B 108 -228 817 737 ; +C -1 ; WX 611 ; N ucircumflex ; B 98 -14 658 750 ; +C -1 ; WX 556 ; N acircumflex ; B 55 -14 583 750 ; +C -1 ; WX 722 ; N Amacron ; B 20 0 718 864 ; +C -1 ; WX 389 ; N rcaron ; B 64 0 530 750 ; +C -1 ; WX 556 ; N ccedilla ; B 79 -228 599 546 ; +C -1 ; WX 611 ; N Zdotaccent ; B 25 0 737 915 ; +C -1 ; WX 667 ; N Thorn ; B 76 0 716 718 ; +C -1 ; WX 778 ; N Omacron ; B 107 -19 823 864 ; +C -1 ; WX 722 ; N Racute ; B 76 0 778 936 ; +C -1 ; WX 667 ; N Sacute ; B 81 -19 722 936 ; +C -1 ; WX 743 ; N dcaron ; B 82 -14 903 718 ; +C -1 ; WX 722 ; N Umacron ; B 116 -19 804 864 ; +C -1 ; WX 611 ; N uring ; B 98 -14 658 776 ; +C -1 ; WX 333 ; N threesuperior ; B 91 271 441 710 ; +C -1 ; WX 778 ; N Ograve ; B 107 -19 823 936 ; +C -1 ; WX 722 ; N Agrave ; B 20 0 702 936 ; +C -1 ; WX 722 ; N Abreve ; B 20 0 729 936 ; +C -1 ; WX 584 ; N multiply ; B 57 1 635 505 ; +C -1 ; WX 611 ; N uacute ; B 98 -14 658 750 ; +C -1 ; WX 611 ; N Tcaron ; B 140 0 751 936 ; +C -1 ; WX 494 ; N partialdiff ; B 43 -21 585 750 ; +C -1 ; WX 556 ; N ydieresis ; B 42 -214 652 729 ; +C -1 ; WX 722 ; N Nacute ; B 69 0 807 936 ; +C -1 ; WX 278 ; N icircumflex ; B 69 0 444 750 ; +C -1 ; WX 667 ; N Ecircumflex ; B 76 0 757 936 ; +C -1 ; WX 556 ; N adieresis ; B 55 -14 594 729 ; +C -1 ; WX 556 ; N edieresis ; B 70 -14 594 729 ; +C -1 ; WX 556 ; N cacute ; B 79 -14 627 750 ; +C -1 ; WX 611 ; N nacute ; B 65 0 654 750 ; +C -1 ; WX 611 ; N umacron ; B 98 -14 658 678 ; +C -1 ; WX 722 ; N Ncaron ; B 69 0 807 936 ; +C -1 ; WX 278 ; N Iacute ; B 64 0 528 936 ; +C -1 ; WX 584 ; N plusminus ; B 40 0 625 506 ; +C -1 ; WX 280 ; N brokenbar ; B 52 -150 345 700 ; +C -1 ; WX 737 ; N registered ; B 55 -19 834 737 ; +C -1 ; WX 778 ; N Gbreve ; B 108 -19 817 936 ; +C -1 ; WX 278 ; N Idotaccent ; B 64 0 397 915 ; +C -1 ; WX 600 ; N summation ; B 14 -10 670 706 ; +C -1 ; WX 667 ; N Egrave ; B 76 0 757 936 ; +C -1 ; WX 389 ; N racute ; B 64 0 543 750 ; +C -1 ; WX 611 ; N omacron ; B 82 -14 643 678 ; +C -1 ; WX 611 ; N Zacute ; B 25 0 737 936 ; +C -1 ; WX 611 ; N Zcaron ; B 25 0 737 936 ; +C -1 ; WX 549 ; N greaterequal ; B 26 0 629 704 ; +C -1 ; WX 722 ; N Eth ; B 62 0 777 718 ; +C -1 ; WX 722 ; N Ccedilla ; B 107 -228 789 737 ; +C -1 ; WX 278 ; N lcommaaccent ; B 30 -228 362 718 ; +C -1 ; WX 389 ; N tcaron ; B 100 -6 608 878 ; +C -1 ; WX 556 ; N eogonek ; B 70 -228 593 546 ; +C -1 ; WX 722 ; N Uogonek ; B 116 -228 804 718 ; +C -1 ; WX 722 ; N Aacute ; B 20 0 750 936 ; +C -1 ; WX 722 ; N Adieresis ; B 20 0 716 915 ; +C -1 ; WX 556 ; N egrave ; B 70 -14 593 750 ; +C -1 ; WX 500 ; N zacute ; B 20 0 599 750 ; +C -1 ; WX 278 ; N iogonek ; B -14 -224 363 725 ; +C -1 ; WX 778 ; N Oacute ; B 107 -19 823 936 ; +C -1 ; WX 611 ; N oacute ; B 82 -14 654 750 ; +C -1 ; WX 556 ; N amacron ; B 55 -14 595 678 ; +C -1 ; WX 556 ; N sacute ; B 63 -14 627 750 ; +C -1 ; WX 278 ; N idieresis ; B 69 0 455 729 ; +C -1 ; WX 778 ; N Ocircumflex ; B 107 -19 823 936 ; +C -1 ; WX 722 ; N Ugrave ; B 116 -19 804 936 ; +C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ; +C -1 ; WX 611 ; N thorn ; B 18 -208 645 718 ; +C -1 ; WX 333 ; N twosuperior ; B 69 283 449 710 ; +C -1 ; WX 778 ; N Odieresis ; B 107 -19 823 915 ; +C -1 ; WX 611 ; N mu ; B 22 -207 658 532 ; +C -1 ; WX 278 ; N igrave ; B 69 0 326 750 ; +C -1 ; WX 611 ; N ohungarumlaut ; B 82 -14 784 750 ; +C -1 ; WX 667 ; N Eogonek ; B 76 -224 757 718 ; +C -1 ; WX 611 ; N dcroat ; B 82 -14 789 718 ; +C -1 ; WX 834 ; N threequarters ; B 99 -19 839 710 ; +C -1 ; WX 667 ; N Scedilla ; B 81 -228 718 737 ; +C -1 ; WX 400 ; N lcaron ; B 69 0 561 718 ; +C -1 ; WX 722 ; N Kcommaaccent ; B 87 -228 858 718 ; +C -1 ; WX 611 ; N Lacute ; B 76 0 611 936 ; +C -1 ; WX 1000 ; N trademark ; B 179 306 1109 718 ; +C -1 ; WX 556 ; N edotaccent ; B 70 -14 593 729 ; +C -1 ; WX 278 ; N Igrave ; B 64 0 367 936 ; +C -1 ; WX 278 ; N Imacron ; B 64 0 496 864 ; +C -1 ; WX 611 ; N Lcaron ; B 76 0 643 718 ; +C -1 ; WX 834 ; N onehalf ; B 132 -19 858 710 ; +C -1 ; WX 549 ; N lessequal ; B 29 0 676 704 ; +C -1 ; WX 611 ; N ocircumflex ; B 82 -14 643 750 ; +C -1 ; WX 611 ; N ntilde ; B 65 0 646 737 ; +C -1 ; WX 722 ; N Uhungarumlaut ; B 116 -19 880 936 ; +C -1 ; WX 667 ; N Eacute ; B 76 0 757 936 ; +C -1 ; WX 556 ; N emacron ; B 70 -14 595 678 ; +C -1 ; WX 611 ; N gbreve ; B 38 -217 666 750 ; +C -1 ; WX 834 ; N onequarter ; B 132 -19 806 710 ; +C -1 ; WX 667 ; N Scaron ; B 81 -19 718 936 ; +C -1 ; WX 667 ; N Scommaaccent ; B 81 -228 718 737 ; +C -1 ; WX 778 ; N Ohungarumlaut ; B 107 -19 908 936 ; +C -1 ; WX 400 ; N degree ; B 175 426 467 712 ; +C -1 ; WX 611 ; N ograve ; B 82 -14 643 750 ; +C -1 ; WX 722 ; N Ccaron ; B 107 -19 789 936 ; +C -1 ; WX 611 ; N ugrave ; B 98 -14 658 750 ; +C -1 ; WX 549 ; N radical ; B 112 -46 689 850 ; +C -1 ; WX 722 ; N Dcaron ; B 76 0 777 936 ; +C -1 ; WX 389 ; N rcommaaccent ; B 26 -228 489 546 ; +C -1 ; WX 722 ; N Ntilde ; B 69 0 807 923 ; +C -1 ; WX 611 ; N otilde ; B 82 -14 646 737 ; +C -1 ; WX 722 ; N Rcommaaccent ; B 76 -228 778 718 ; +C -1 ; WX 611 ; N Lcommaaccent ; B 76 -228 611 718 ; +C -1 ; WX 722 ; N Atilde ; B 20 0 741 923 ; +C -1 ; WX 722 ; N Aogonek ; B 20 -224 702 718 ; +C -1 ; WX 722 ; N Aring ; B 20 0 702 962 ; +C -1 ; WX 778 ; N Otilde ; B 107 -19 823 923 ; +C -1 ; WX 500 ; N zdotaccent ; B 20 0 583 729 ; +C -1 ; WX 667 ; N Ecaron ; B 76 0 757 936 ; +C -1 ; WX 278 ; N Iogonek ; B -41 -228 367 718 ; +C -1 ; WX 556 ; N kcommaaccent ; B 69 -228 670 718 ; +C -1 ; WX 584 ; N minus ; B 82 197 610 309 ; +C -1 ; WX 278 ; N Icircumflex ; B 64 0 484 936 ; +C -1 ; WX 611 ; N ncaron ; B 65 0 641 750 ; +C -1 ; WX 333 ; N tcommaaccent ; B 58 -228 422 676 ; +C -1 ; WX 584 ; N logicalnot ; B 105 108 633 419 ; +C -1 ; WX 611 ; N odieresis ; B 82 -14 643 729 ; +C -1 ; WX 611 ; N udieresis ; B 98 -14 658 729 ; +C -1 ; WX 549 ; N notequal ; B 32 -49 630 570 ; +C -1 ; WX 611 ; N gcommaaccent ; B 38 -217 666 850 ; +C -1 ; WX 611 ; N eth ; B 82 -14 670 737 ; +C -1 ; WX 500 ; N zcaron ; B 20 0 586 750 ; +C -1 ; WX 611 ; N ncommaaccent ; B 65 -228 629 546 ; +C -1 ; WX 333 ; N onesuperior ; B 148 283 388 710 ; +C -1 ; WX 278 ; N imacron ; B 69 0 429 678 ; +C -1 ; WX 556 ; N Euro ; B 0 0 0 0 ; +EndCharMetrics +StartKernData +StartKernPairs 2481 +KPX A C -40 +KPX A Cacute -40 +KPX A Ccaron -40 +KPX A Ccedilla -40 +KPX A G -50 +KPX A Gbreve -50 +KPX A Gcommaaccent -50 +KPX A O -40 +KPX A Oacute -40 +KPX A Ocircumflex -40 +KPX A Odieresis -40 +KPX A Ograve -40 +KPX A Ohungarumlaut -40 +KPX A Omacron -40 +KPX A Oslash -40 +KPX A Otilde -40 +KPX A Q -40 +KPX A T -90 +KPX A Tcaron -90 +KPX A Tcommaaccent -90 +KPX A U -50 +KPX A Uacute -50 +KPX A Ucircumflex -50 +KPX A Udieresis -50 +KPX A Ugrave -50 +KPX A Uhungarumlaut -50 +KPX A Umacron -50 +KPX A Uogonek -50 +KPX A Uring -50 +KPX A V -80 +KPX A W -60 +KPX A Y -110 +KPX A Yacute -110 +KPX A Ydieresis -110 +KPX A u -30 +KPX A uacute -30 +KPX A ucircumflex -30 +KPX A udieresis -30 +KPX A ugrave -30 +KPX A uhungarumlaut -30 +KPX A umacron -30 +KPX A uogonek -30 +KPX A uring -30 +KPX A v -40 +KPX A w -30 +KPX A y -30 +KPX A yacute -30 +KPX A ydieresis -30 +KPX Aacute C -40 +KPX Aacute Cacute -40 +KPX Aacute Ccaron -40 +KPX Aacute Ccedilla -40 +KPX Aacute G -50 +KPX Aacute Gbreve -50 +KPX Aacute Gcommaaccent -50 +KPX Aacute O -40 +KPX Aacute Oacute -40 +KPX Aacute Ocircumflex -40 +KPX Aacute Odieresis -40 +KPX Aacute Ograve -40 +KPX Aacute Ohungarumlaut -40 +KPX Aacute Omacron -40 +KPX Aacute Oslash -40 +KPX Aacute Otilde -40 +KPX Aacute Q -40 +KPX Aacute T -90 +KPX Aacute Tcaron -90 +KPX Aacute Tcommaaccent -90 +KPX Aacute U -50 +KPX Aacute Uacute -50 +KPX Aacute Ucircumflex -50 +KPX Aacute Udieresis -50 +KPX Aacute Ugrave -50 +KPX Aacute Uhungarumlaut -50 +KPX Aacute Umacron -50 +KPX Aacute Uogonek -50 +KPX Aacute Uring -50 +KPX Aacute V -80 +KPX Aacute W -60 +KPX Aacute Y -110 +KPX Aacute Yacute -110 +KPX Aacute Ydieresis -110 +KPX Aacute u -30 +KPX Aacute uacute -30 +KPX Aacute ucircumflex -30 +KPX Aacute udieresis -30 +KPX Aacute ugrave -30 +KPX Aacute uhungarumlaut -30 +KPX Aacute umacron -30 +KPX Aacute uogonek -30 +KPX Aacute uring -30 +KPX Aacute v -40 +KPX Aacute w -30 +KPX Aacute y -30 +KPX Aacute yacute -30 +KPX Aacute ydieresis -30 +KPX Abreve C -40 +KPX Abreve Cacute -40 +KPX Abreve Ccaron -40 +KPX Abreve Ccedilla -40 +KPX Abreve G -50 +KPX Abreve Gbreve -50 +KPX Abreve Gcommaaccent -50 +KPX Abreve O -40 +KPX Abreve Oacute -40 +KPX Abreve Ocircumflex -40 +KPX Abreve Odieresis -40 +KPX Abreve Ograve -40 +KPX Abreve Ohungarumlaut -40 +KPX Abreve Omacron -40 +KPX Abreve Oslash -40 +KPX Abreve Otilde -40 +KPX Abreve Q -40 +KPX Abreve T -90 +KPX Abreve Tcaron -90 +KPX Abreve Tcommaaccent -90 +KPX Abreve U -50 +KPX Abreve Uacute -50 +KPX Abreve Ucircumflex -50 +KPX Abreve Udieresis -50 +KPX Abreve Ugrave -50 +KPX Abreve Uhungarumlaut -50 +KPX Abreve Umacron -50 +KPX Abreve Uogonek -50 +KPX Abreve Uring -50 +KPX Abreve V -80 +KPX Abreve W -60 +KPX Abreve Y -110 +KPX Abreve Yacute -110 +KPX Abreve Ydieresis -110 +KPX Abreve u -30 +KPX Abreve uacute -30 +KPX Abreve ucircumflex -30 +KPX Abreve udieresis -30 +KPX Abreve ugrave -30 +KPX Abreve uhungarumlaut -30 +KPX Abreve umacron -30 +KPX Abreve uogonek -30 +KPX Abreve uring -30 +KPX Abreve v -40 +KPX Abreve w -30 +KPX Abreve y -30 +KPX Abreve yacute -30 +KPX Abreve ydieresis -30 +KPX Acircumflex C -40 +KPX Acircumflex Cacute -40 +KPX Acircumflex Ccaron -40 +KPX Acircumflex Ccedilla -40 +KPX Acircumflex G -50 +KPX Acircumflex Gbreve -50 +KPX Acircumflex Gcommaaccent -50 +KPX Acircumflex O -40 +KPX Acircumflex Oacute -40 +KPX Acircumflex Ocircumflex -40 +KPX Acircumflex Odieresis -40 +KPX Acircumflex Ograve -40 +KPX Acircumflex Ohungarumlaut -40 +KPX Acircumflex Omacron -40 +KPX Acircumflex Oslash -40 +KPX Acircumflex Otilde -40 +KPX Acircumflex Q -40 +KPX Acircumflex T -90 +KPX Acircumflex Tcaron -90 +KPX Acircumflex Tcommaaccent -90 +KPX Acircumflex U -50 +KPX Acircumflex Uacute -50 +KPX Acircumflex Ucircumflex -50 +KPX Acircumflex Udieresis -50 +KPX Acircumflex Ugrave -50 +KPX Acircumflex Uhungarumlaut -50 +KPX Acircumflex Umacron -50 +KPX Acircumflex Uogonek -50 +KPX Acircumflex Uring -50 +KPX Acircumflex V -80 +KPX Acircumflex W -60 +KPX Acircumflex Y -110 +KPX Acircumflex Yacute -110 +KPX Acircumflex Ydieresis -110 +KPX Acircumflex u -30 +KPX Acircumflex uacute -30 +KPX Acircumflex ucircumflex -30 +KPX Acircumflex udieresis -30 +KPX Acircumflex ugrave -30 +KPX Acircumflex uhungarumlaut -30 +KPX Acircumflex umacron -30 +KPX Acircumflex uogonek -30 +KPX Acircumflex uring -30 +KPX Acircumflex v -40 +KPX Acircumflex w -30 +KPX Acircumflex y -30 +KPX Acircumflex yacute -30 +KPX Acircumflex ydieresis -30 +KPX Adieresis C -40 +KPX Adieresis Cacute -40 +KPX Adieresis Ccaron -40 +KPX Adieresis Ccedilla -40 +KPX Adieresis G -50 +KPX Adieresis Gbreve -50 +KPX Adieresis Gcommaaccent -50 +KPX Adieresis O -40 +KPX Adieresis Oacute -40 +KPX Adieresis Ocircumflex -40 +KPX Adieresis Odieresis -40 +KPX Adieresis Ograve -40 +KPX Adieresis Ohungarumlaut -40 +KPX Adieresis Omacron -40 +KPX Adieresis Oslash -40 +KPX Adieresis Otilde -40 +KPX Adieresis Q -40 +KPX Adieresis T -90 +KPX Adieresis Tcaron -90 +KPX Adieresis Tcommaaccent -90 +KPX Adieresis U -50 +KPX Adieresis Uacute -50 +KPX Adieresis Ucircumflex -50 +KPX Adieresis Udieresis -50 +KPX Adieresis Ugrave -50 +KPX Adieresis Uhungarumlaut -50 +KPX Adieresis Umacron -50 +KPX Adieresis Uogonek -50 +KPX Adieresis Uring -50 +KPX Adieresis V -80 +KPX Adieresis W -60 +KPX Adieresis Y -110 +KPX Adieresis Yacute -110 +KPX Adieresis Ydieresis -110 +KPX Adieresis u -30 +KPX Adieresis uacute -30 +KPX Adieresis ucircumflex -30 +KPX Adieresis udieresis -30 +KPX Adieresis ugrave -30 +KPX Adieresis uhungarumlaut -30 +KPX Adieresis umacron -30 +KPX Adieresis uogonek -30 +KPX Adieresis uring -30 +KPX Adieresis v -40 +KPX Adieresis w -30 +KPX Adieresis y -30 +KPX Adieresis yacute -30 +KPX Adieresis ydieresis -30 +KPX Agrave C -40 +KPX Agrave Cacute -40 +KPX Agrave Ccaron -40 +KPX Agrave Ccedilla -40 +KPX Agrave G -50 +KPX Agrave Gbreve -50 +KPX Agrave Gcommaaccent -50 +KPX Agrave O -40 +KPX Agrave Oacute -40 +KPX Agrave Ocircumflex -40 +KPX Agrave Odieresis -40 +KPX Agrave Ograve -40 +KPX Agrave Ohungarumlaut -40 +KPX Agrave Omacron -40 +KPX Agrave Oslash -40 +KPX Agrave Otilde -40 +KPX Agrave Q -40 +KPX Agrave T -90 +KPX Agrave Tcaron -90 +KPX Agrave Tcommaaccent -90 +KPX Agrave U -50 +KPX Agrave Uacute -50 +KPX Agrave Ucircumflex -50 +KPX Agrave Udieresis -50 +KPX Agrave Ugrave -50 +KPX Agrave Uhungarumlaut -50 +KPX Agrave Umacron -50 +KPX Agrave Uogonek -50 +KPX Agrave Uring -50 +KPX Agrave V -80 +KPX Agrave W -60 +KPX Agrave Y -110 +KPX Agrave Yacute -110 +KPX Agrave Ydieresis -110 +KPX Agrave u -30 +KPX Agrave uacute -30 +KPX Agrave ucircumflex -30 +KPX Agrave udieresis -30 +KPX Agrave ugrave -30 +KPX Agrave uhungarumlaut -30 +KPX Agrave umacron -30 +KPX Agrave uogonek -30 +KPX Agrave uring -30 +KPX Agrave v -40 +KPX Agrave w -30 +KPX Agrave y -30 +KPX Agrave yacute -30 +KPX Agrave ydieresis -30 +KPX Amacron C -40 +KPX Amacron Cacute -40 +KPX Amacron Ccaron -40 +KPX Amacron Ccedilla -40 +KPX Amacron G -50 +KPX Amacron Gbreve -50 +KPX Amacron Gcommaaccent -50 +KPX Amacron O -40 +KPX Amacron Oacute -40 +KPX Amacron Ocircumflex -40 +KPX Amacron Odieresis -40 +KPX Amacron Ograve -40 +KPX Amacron Ohungarumlaut -40 +KPX Amacron Omacron -40 +KPX Amacron Oslash -40 +KPX Amacron Otilde -40 +KPX Amacron Q -40 +KPX Amacron T -90 +KPX Amacron Tcaron -90 +KPX Amacron Tcommaaccent -90 +KPX Amacron U -50 +KPX Amacron Uacute -50 +KPX Amacron Ucircumflex -50 +KPX Amacron Udieresis -50 +KPX Amacron Ugrave -50 +KPX Amacron Uhungarumlaut -50 +KPX Amacron Umacron -50 +KPX Amacron Uogonek -50 +KPX Amacron Uring -50 +KPX Amacron V -80 +KPX Amacron W -60 +KPX Amacron Y -110 +KPX Amacron Yacute -110 +KPX Amacron Ydieresis -110 +KPX Amacron u -30 +KPX Amacron uacute -30 +KPX Amacron ucircumflex -30 +KPX Amacron udieresis -30 +KPX Amacron ugrave -30 +KPX Amacron uhungarumlaut -30 +KPX Amacron umacron -30 +KPX Amacron uogonek -30 +KPX Amacron uring -30 +KPX Amacron v -40 +KPX Amacron w -30 +KPX Amacron y -30 +KPX Amacron yacute -30 +KPX Amacron ydieresis -30 +KPX Aogonek C -40 +KPX Aogonek Cacute -40 +KPX Aogonek Ccaron -40 +KPX Aogonek Ccedilla -40 +KPX Aogonek G -50 +KPX Aogonek Gbreve -50 +KPX Aogonek Gcommaaccent -50 +KPX Aogonek O -40 +KPX Aogonek Oacute -40 +KPX Aogonek Ocircumflex -40 +KPX Aogonek Odieresis -40 +KPX Aogonek Ograve -40 +KPX Aogonek Ohungarumlaut -40 +KPX Aogonek Omacron -40 +KPX Aogonek Oslash -40 +KPX Aogonek Otilde -40 +KPX Aogonek Q -40 +KPX Aogonek T -90 +KPX Aogonek Tcaron -90 +KPX Aogonek Tcommaaccent -90 +KPX Aogonek U -50 +KPX Aogonek Uacute -50 +KPX Aogonek Ucircumflex -50 +KPX Aogonek Udieresis -50 +KPX Aogonek Ugrave -50 +KPX Aogonek Uhungarumlaut -50 +KPX Aogonek Umacron -50 +KPX Aogonek Uogonek -50 +KPX Aogonek Uring -50 +KPX Aogonek V -80 +KPX Aogonek W -60 +KPX Aogonek Y -110 +KPX Aogonek Yacute -110 +KPX Aogonek Ydieresis -110 +KPX Aogonek u -30 +KPX Aogonek uacute -30 +KPX Aogonek ucircumflex -30 +KPX Aogonek udieresis -30 +KPX Aogonek ugrave -30 +KPX Aogonek uhungarumlaut -30 +KPX Aogonek umacron -30 +KPX Aogonek uogonek -30 +KPX Aogonek uring -30 +KPX Aogonek v -40 +KPX Aogonek w -30 +KPX Aogonek y -30 +KPX Aogonek yacute -30 +KPX Aogonek ydieresis -30 +KPX Aring C -40 +KPX Aring Cacute -40 +KPX Aring Ccaron -40 +KPX Aring Ccedilla -40 +KPX Aring G -50 +KPX Aring Gbreve -50 +KPX Aring Gcommaaccent -50 +KPX Aring O -40 +KPX Aring Oacute -40 +KPX Aring Ocircumflex -40 +KPX Aring Odieresis -40 +KPX Aring Ograve -40 +KPX Aring Ohungarumlaut -40 +KPX Aring Omacron -40 +KPX Aring Oslash -40 +KPX Aring Otilde -40 +KPX Aring Q -40 +KPX Aring T -90 +KPX Aring Tcaron -90 +KPX Aring Tcommaaccent -90 +KPX Aring U -50 +KPX Aring Uacute -50 +KPX Aring Ucircumflex -50 +KPX Aring Udieresis -50 +KPX Aring Ugrave -50 +KPX Aring Uhungarumlaut -50 +KPX Aring Umacron -50 +KPX Aring Uogonek -50 +KPX Aring Uring -50 +KPX Aring V -80 +KPX Aring W -60 +KPX Aring Y -110 +KPX Aring Yacute -110 +KPX Aring Ydieresis -110 +KPX Aring u -30 +KPX Aring uacute -30 +KPX Aring ucircumflex -30 +KPX Aring udieresis -30 +KPX Aring ugrave -30 +KPX Aring uhungarumlaut -30 +KPX Aring umacron -30 +KPX Aring uogonek -30 +KPX Aring uring -30 +KPX Aring v -40 +KPX Aring w -30 +KPX Aring y -30 +KPX Aring yacute -30 +KPX Aring ydieresis -30 +KPX Atilde C -40 +KPX Atilde Cacute -40 +KPX Atilde Ccaron -40 +KPX Atilde Ccedilla -40 +KPX Atilde G -50 +KPX Atilde Gbreve -50 +KPX Atilde Gcommaaccent -50 +KPX Atilde O -40 +KPX Atilde Oacute -40 +KPX Atilde Ocircumflex -40 +KPX Atilde Odieresis -40 +KPX Atilde Ograve -40 +KPX Atilde Ohungarumlaut -40 +KPX Atilde Omacron -40 +KPX Atilde Oslash -40 +KPX Atilde Otilde -40 +KPX Atilde Q -40 +KPX Atilde T -90 +KPX Atilde Tcaron -90 +KPX Atilde Tcommaaccent -90 +KPX Atilde U -50 +KPX Atilde Uacute -50 +KPX Atilde Ucircumflex -50 +KPX Atilde Udieresis -50 +KPX Atilde Ugrave -50 +KPX Atilde Uhungarumlaut -50 +KPX Atilde Umacron -50 +KPX Atilde Uogonek -50 +KPX Atilde Uring -50 +KPX Atilde V -80 +KPX Atilde W -60 +KPX Atilde Y -110 +KPX Atilde Yacute -110 +KPX Atilde Ydieresis -110 +KPX Atilde u -30 +KPX Atilde uacute -30 +KPX Atilde ucircumflex -30 +KPX Atilde udieresis -30 +KPX Atilde ugrave -30 +KPX Atilde uhungarumlaut -30 +KPX Atilde umacron -30 +KPX Atilde uogonek -30 +KPX Atilde uring -30 +KPX Atilde v -40 +KPX Atilde w -30 +KPX Atilde y -30 +KPX Atilde yacute -30 +KPX Atilde ydieresis -30 +KPX B A -30 +KPX B Aacute -30 +KPX B Abreve -30 +KPX B Acircumflex -30 +KPX B Adieresis -30 +KPX B Agrave -30 +KPX B Amacron -30 +KPX B Aogonek -30 +KPX B Aring -30 +KPX B Atilde -30 +KPX B U -10 +KPX B Uacute -10 +KPX B Ucircumflex -10 +KPX B Udieresis -10 +KPX B Ugrave -10 +KPX B Uhungarumlaut -10 +KPX B Umacron -10 +KPX B Uogonek -10 +KPX B Uring -10 +KPX D A -40 +KPX D Aacute -40 +KPX D Abreve -40 +KPX D Acircumflex -40 +KPX D Adieresis -40 +KPX D Agrave -40 +KPX D Amacron -40 +KPX D Aogonek -40 +KPX D Aring -40 +KPX D Atilde -40 +KPX D V -40 +KPX D W -40 +KPX D Y -70 +KPX D Yacute -70 +KPX D Ydieresis -70 +KPX D comma -30 +KPX D period -30 +KPX Dcaron A -40 +KPX Dcaron Aacute -40 +KPX Dcaron Abreve -40 +KPX Dcaron Acircumflex -40 +KPX Dcaron Adieresis -40 +KPX Dcaron Agrave -40 +KPX Dcaron Amacron -40 +KPX Dcaron Aogonek -40 +KPX Dcaron Aring -40 +KPX Dcaron Atilde -40 +KPX Dcaron V -40 +KPX Dcaron W -40 +KPX Dcaron Y -70 +KPX Dcaron Yacute -70 +KPX Dcaron Ydieresis -70 +KPX Dcaron comma -30 +KPX Dcaron period -30 +KPX Dcroat A -40 +KPX Dcroat Aacute -40 +KPX Dcroat Abreve -40 +KPX Dcroat Acircumflex -40 +KPX Dcroat Adieresis -40 +KPX Dcroat Agrave -40 +KPX Dcroat Amacron -40 +KPX Dcroat Aogonek -40 +KPX Dcroat Aring -40 +KPX Dcroat Atilde -40 +KPX Dcroat V -40 +KPX Dcroat W -40 +KPX Dcroat Y -70 +KPX Dcroat Yacute -70 +KPX Dcroat Ydieresis -70 +KPX Dcroat comma -30 +KPX Dcroat period -30 +KPX F A -80 +KPX F Aacute -80 +KPX F Abreve -80 +KPX F Acircumflex -80 +KPX F Adieresis -80 +KPX F Agrave -80 +KPX F Amacron -80 +KPX F Aogonek -80 +KPX F Aring -80 +KPX F Atilde -80 +KPX F a -20 +KPX F aacute -20 +KPX F abreve -20 +KPX F acircumflex -20 +KPX F adieresis -20 +KPX F agrave -20 +KPX F amacron -20 +KPX F aogonek -20 +KPX F aring -20 +KPX F atilde -20 +KPX F comma -100 +KPX F period -100 +KPX J A -20 +KPX J Aacute -20 +KPX J Abreve -20 +KPX J Acircumflex -20 +KPX J Adieresis -20 +KPX J Agrave -20 +KPX J Amacron -20 +KPX J Aogonek -20 +KPX J Aring -20 +KPX J Atilde -20 +KPX J comma -20 +KPX J period -20 +KPX J u -20 +KPX J uacute -20 +KPX J ucircumflex -20 +KPX J udieresis -20 +KPX J ugrave -20 +KPX J uhungarumlaut -20 +KPX J umacron -20 +KPX J uogonek -20 +KPX J uring -20 +KPX K O -30 +KPX K Oacute -30 +KPX K Ocircumflex -30 +KPX K Odieresis -30 +KPX K Ograve -30 +KPX K Ohungarumlaut -30 +KPX K Omacron -30 +KPX K Oslash -30 +KPX K Otilde -30 +KPX K e -15 +KPX K eacute -15 +KPX K ecaron -15 +KPX K ecircumflex -15 +KPX K edieresis -15 +KPX K edotaccent -15 +KPX K egrave -15 +KPX K emacron -15 +KPX K eogonek -15 +KPX K o -35 +KPX K oacute -35 +KPX K ocircumflex -35 +KPX K odieresis -35 +KPX K ograve -35 +KPX K ohungarumlaut -35 +KPX K omacron -35 +KPX K oslash -35 +KPX K otilde -35 +KPX K u -30 +KPX K uacute -30 +KPX K ucircumflex -30 +KPX K udieresis -30 +KPX K ugrave -30 +KPX K uhungarumlaut -30 +KPX K umacron -30 +KPX K uogonek -30 +KPX K uring -30 +KPX K y -40 +KPX K yacute -40 +KPX K ydieresis -40 +KPX Kcommaaccent O -30 +KPX Kcommaaccent Oacute -30 +KPX Kcommaaccent Ocircumflex -30 +KPX Kcommaaccent Odieresis -30 +KPX Kcommaaccent Ograve -30 +KPX Kcommaaccent Ohungarumlaut -30 +KPX Kcommaaccent Omacron -30 +KPX Kcommaaccent Oslash -30 +KPX Kcommaaccent Otilde -30 +KPX Kcommaaccent e -15 +KPX Kcommaaccent eacute -15 +KPX Kcommaaccent ecaron -15 +KPX Kcommaaccent ecircumflex -15 +KPX Kcommaaccent edieresis -15 +KPX Kcommaaccent edotaccent -15 +KPX Kcommaaccent egrave -15 +KPX Kcommaaccent emacron -15 +KPX Kcommaaccent eogonek -15 +KPX Kcommaaccent o -35 +KPX Kcommaaccent oacute -35 +KPX Kcommaaccent ocircumflex -35 +KPX Kcommaaccent odieresis -35 +KPX Kcommaaccent ograve -35 +KPX Kcommaaccent ohungarumlaut -35 +KPX Kcommaaccent omacron -35 +KPX Kcommaaccent oslash -35 +KPX Kcommaaccent otilde -35 +KPX Kcommaaccent u -30 +KPX Kcommaaccent uacute -30 +KPX Kcommaaccent ucircumflex -30 +KPX Kcommaaccent udieresis -30 +KPX Kcommaaccent ugrave -30 +KPX Kcommaaccent uhungarumlaut -30 +KPX Kcommaaccent umacron -30 +KPX Kcommaaccent uogonek -30 +KPX Kcommaaccent uring -30 +KPX Kcommaaccent y -40 +KPX Kcommaaccent yacute -40 +KPX Kcommaaccent ydieresis -40 +KPX L T -90 +KPX L Tcaron -90 +KPX L Tcommaaccent -90 +KPX L V -110 +KPX L W -80 +KPX L Y -120 +KPX L Yacute -120 +KPX L Ydieresis -120 +KPX L quotedblright -140 +KPX L quoteright -140 +KPX L y -30 +KPX L yacute -30 +KPX L ydieresis -30 +KPX Lacute T -90 +KPX Lacute Tcaron -90 +KPX Lacute Tcommaaccent -90 +KPX Lacute V -110 +KPX Lacute W -80 +KPX Lacute Y -120 +KPX Lacute Yacute -120 +KPX Lacute Ydieresis -120 +KPX Lacute quotedblright -140 +KPX Lacute quoteright -140 +KPX Lacute y -30 +KPX Lacute yacute -30 +KPX Lacute ydieresis -30 +KPX Lcommaaccent T -90 +KPX Lcommaaccent Tcaron -90 +KPX Lcommaaccent Tcommaaccent -90 +KPX Lcommaaccent V -110 +KPX Lcommaaccent W -80 +KPX Lcommaaccent Y -120 +KPX Lcommaaccent Yacute -120 +KPX Lcommaaccent Ydieresis -120 +KPX Lcommaaccent quotedblright -140 +KPX Lcommaaccent quoteright -140 +KPX Lcommaaccent y -30 +KPX Lcommaaccent yacute -30 +KPX Lcommaaccent ydieresis -30 +KPX Lslash T -90 +KPX Lslash Tcaron -90 +KPX Lslash Tcommaaccent -90 +KPX Lslash V -110 +KPX Lslash W -80 +KPX Lslash Y -120 +KPX Lslash Yacute -120 +KPX Lslash Ydieresis -120 +KPX Lslash quotedblright -140 +KPX Lslash quoteright -140 +KPX Lslash y -30 +KPX Lslash yacute -30 +KPX Lslash ydieresis -30 +KPX O A -50 +KPX O Aacute -50 +KPX O Abreve -50 +KPX O Acircumflex -50 +KPX O Adieresis -50 +KPX O Agrave -50 +KPX O Amacron -50 +KPX O Aogonek -50 +KPX O Aring -50 +KPX O Atilde -50 +KPX O T -40 +KPX O Tcaron -40 +KPX O Tcommaaccent -40 +KPX O V -50 +KPX O W -50 +KPX O X -50 +KPX O Y -70 +KPX O Yacute -70 +KPX O Ydieresis -70 +KPX O comma -40 +KPX O period -40 +KPX Oacute A -50 +KPX Oacute Aacute -50 +KPX Oacute Abreve -50 +KPX Oacute Acircumflex -50 +KPX Oacute Adieresis -50 +KPX Oacute Agrave -50 +KPX Oacute Amacron -50 +KPX Oacute Aogonek -50 +KPX Oacute Aring -50 +KPX Oacute Atilde -50 +KPX Oacute T -40 +KPX Oacute Tcaron -40 +KPX Oacute Tcommaaccent -40 +KPX Oacute V -50 +KPX Oacute W -50 +KPX Oacute X -50 +KPX Oacute Y -70 +KPX Oacute Yacute -70 +KPX Oacute Ydieresis -70 +KPX Oacute comma -40 +KPX Oacute period -40 +KPX Ocircumflex A -50 +KPX Ocircumflex Aacute -50 +KPX Ocircumflex Abreve -50 +KPX Ocircumflex Acircumflex -50 +KPX Ocircumflex Adieresis -50 +KPX Ocircumflex Agrave -50 +KPX Ocircumflex Amacron -50 +KPX Ocircumflex Aogonek -50 +KPX Ocircumflex Aring -50 +KPX Ocircumflex Atilde -50 +KPX Ocircumflex T -40 +KPX Ocircumflex Tcaron -40 +KPX Ocircumflex Tcommaaccent -40 +KPX Ocircumflex V -50 +KPX Ocircumflex W -50 +KPX Ocircumflex X -50 +KPX Ocircumflex Y -70 +KPX Ocircumflex Yacute -70 +KPX Ocircumflex Ydieresis -70 +KPX Ocircumflex comma -40 +KPX Ocircumflex period -40 +KPX Odieresis A -50 +KPX Odieresis Aacute -50 +KPX Odieresis Abreve -50 +KPX Odieresis Acircumflex -50 +KPX Odieresis Adieresis -50 +KPX Odieresis Agrave -50 +KPX Odieresis Amacron -50 +KPX Odieresis Aogonek -50 +KPX Odieresis Aring -50 +KPX Odieresis Atilde -50 +KPX Odieresis T -40 +KPX Odieresis Tcaron -40 +KPX Odieresis Tcommaaccent -40 +KPX Odieresis V -50 +KPX Odieresis W -50 +KPX Odieresis X -50 +KPX Odieresis Y -70 +KPX Odieresis Yacute -70 +KPX Odieresis Ydieresis -70 +KPX Odieresis comma -40 +KPX Odieresis period -40 +KPX Ograve A -50 +KPX Ograve Aacute -50 +KPX Ograve Abreve -50 +KPX Ograve Acircumflex -50 +KPX Ograve Adieresis -50 +KPX Ograve Agrave -50 +KPX Ograve Amacron -50 +KPX Ograve Aogonek -50 +KPX Ograve Aring -50 +KPX Ograve Atilde -50 +KPX Ograve T -40 +KPX Ograve Tcaron -40 +KPX Ograve Tcommaaccent -40 +KPX Ograve V -50 +KPX Ograve W -50 +KPX Ograve X -50 +KPX Ograve Y -70 +KPX Ograve Yacute -70 +KPX Ograve Ydieresis -70 +KPX Ograve comma -40 +KPX Ograve period -40 +KPX Ohungarumlaut A -50 +KPX Ohungarumlaut Aacute -50 +KPX Ohungarumlaut Abreve -50 +KPX Ohungarumlaut Acircumflex -50 +KPX Ohungarumlaut Adieresis -50 +KPX Ohungarumlaut Agrave -50 +KPX Ohungarumlaut Amacron -50 +KPX Ohungarumlaut Aogonek -50 +KPX Ohungarumlaut Aring -50 +KPX Ohungarumlaut Atilde -50 +KPX Ohungarumlaut T -40 +KPX Ohungarumlaut Tcaron -40 +KPX Ohungarumlaut Tcommaaccent -40 +KPX Ohungarumlaut V -50 +KPX Ohungarumlaut W -50 +KPX Ohungarumlaut X -50 +KPX Ohungarumlaut Y -70 +KPX Ohungarumlaut Yacute -70 +KPX Ohungarumlaut Ydieresis -70 +KPX Ohungarumlaut comma -40 +KPX Ohungarumlaut period -40 +KPX Omacron A -50 +KPX Omacron Aacute -50 +KPX Omacron Abreve -50 +KPX Omacron Acircumflex -50 +KPX Omacron Adieresis -50 +KPX Omacron Agrave -50 +KPX Omacron Amacron -50 +KPX Omacron Aogonek -50 +KPX Omacron Aring -50 +KPX Omacron Atilde -50 +KPX Omacron T -40 +KPX Omacron Tcaron -40 +KPX Omacron Tcommaaccent -40 +KPX Omacron V -50 +KPX Omacron W -50 +KPX Omacron X -50 +KPX Omacron Y -70 +KPX Omacron Yacute -70 +KPX Omacron Ydieresis -70 +KPX Omacron comma -40 +KPX Omacron period -40 +KPX Oslash A -50 +KPX Oslash Aacute -50 +KPX Oslash Abreve -50 +KPX Oslash Acircumflex -50 +KPX Oslash Adieresis -50 +KPX Oslash Agrave -50 +KPX Oslash Amacron -50 +KPX Oslash Aogonek -50 +KPX Oslash Aring -50 +KPX Oslash Atilde -50 +KPX Oslash T -40 +KPX Oslash Tcaron -40 +KPX Oslash Tcommaaccent -40 +KPX Oslash V -50 +KPX Oslash W -50 +KPX Oslash X -50 +KPX Oslash Y -70 +KPX Oslash Yacute -70 +KPX Oslash Ydieresis -70 +KPX Oslash comma -40 +KPX Oslash period -40 +KPX Otilde A -50 +KPX Otilde Aacute -50 +KPX Otilde Abreve -50 +KPX Otilde Acircumflex -50 +KPX Otilde Adieresis -50 +KPX Otilde Agrave -50 +KPX Otilde Amacron -50 +KPX Otilde Aogonek -50 +KPX Otilde Aring -50 +KPX Otilde Atilde -50 +KPX Otilde T -40 +KPX Otilde Tcaron -40 +KPX Otilde Tcommaaccent -40 +KPX Otilde V -50 +KPX Otilde W -50 +KPX Otilde X -50 +KPX Otilde Y -70 +KPX Otilde Yacute -70 +KPX Otilde Ydieresis -70 +KPX Otilde comma -40 +KPX Otilde period -40 +KPX P A -100 +KPX P Aacute -100 +KPX P Abreve -100 +KPX P Acircumflex -100 +KPX P Adieresis -100 +KPX P Agrave -100 +KPX P Amacron -100 +KPX P Aogonek -100 +KPX P Aring -100 +KPX P Atilde -100 +KPX P a -30 +KPX P aacute -30 +KPX P abreve -30 +KPX P acircumflex -30 +KPX P adieresis -30 +KPX P agrave -30 +KPX P amacron -30 +KPX P aogonek -30 +KPX P aring -30 +KPX P atilde -30 +KPX P comma -120 +KPX P e -30 +KPX P eacute -30 +KPX P ecaron -30 +KPX P ecircumflex -30 +KPX P edieresis -30 +KPX P edotaccent -30 +KPX P egrave -30 +KPX P emacron -30 +KPX P eogonek -30 +KPX P o -40 +KPX P oacute -40 +KPX P ocircumflex -40 +KPX P odieresis -40 +KPX P ograve -40 +KPX P ohungarumlaut -40 +KPX P omacron -40 +KPX P oslash -40 +KPX P otilde -40 +KPX P period -120 +KPX Q U -10 +KPX Q Uacute -10 +KPX Q Ucircumflex -10 +KPX Q Udieresis -10 +KPX Q Ugrave -10 +KPX Q Uhungarumlaut -10 +KPX Q Umacron -10 +KPX Q Uogonek -10 +KPX Q Uring -10 +KPX Q comma 20 +KPX Q period 20 +KPX R O -20 +KPX R Oacute -20 +KPX R Ocircumflex -20 +KPX R Odieresis -20 +KPX R Ograve -20 +KPX R Ohungarumlaut -20 +KPX R Omacron -20 +KPX R Oslash -20 +KPX R Otilde -20 +KPX R T -20 +KPX R Tcaron -20 +KPX R Tcommaaccent -20 +KPX R U -20 +KPX R Uacute -20 +KPX R Ucircumflex -20 +KPX R Udieresis -20 +KPX R Ugrave -20 +KPX R Uhungarumlaut -20 +KPX R Umacron -20 +KPX R Uogonek -20 +KPX R Uring -20 +KPX R V -50 +KPX R W -40 +KPX R Y -50 +KPX R Yacute -50 +KPX R Ydieresis -50 +KPX Racute O -20 +KPX Racute Oacute -20 +KPX Racute Ocircumflex -20 +KPX Racute Odieresis -20 +KPX Racute Ograve -20 +KPX Racute Ohungarumlaut -20 +KPX Racute Omacron -20 +KPX Racute Oslash -20 +KPX Racute Otilde -20 +KPX Racute T -20 +KPX Racute Tcaron -20 +KPX Racute Tcommaaccent -20 +KPX Racute U -20 +KPX Racute Uacute -20 +KPX Racute Ucircumflex -20 +KPX Racute Udieresis -20 +KPX Racute Ugrave -20 +KPX Racute Uhungarumlaut -20 +KPX Racute Umacron -20 +KPX Racute Uogonek -20 +KPX Racute Uring -20 +KPX Racute V -50 +KPX Racute W -40 +KPX Racute Y -50 +KPX Racute Yacute -50 +KPX Racute Ydieresis -50 +KPX Rcaron O -20 +KPX Rcaron Oacute -20 +KPX Rcaron Ocircumflex -20 +KPX Rcaron Odieresis -20 +KPX Rcaron Ograve -20 +KPX Rcaron Ohungarumlaut -20 +KPX Rcaron Omacron -20 +KPX Rcaron Oslash -20 +KPX Rcaron Otilde -20 +KPX Rcaron T -20 +KPX Rcaron Tcaron -20 +KPX Rcaron Tcommaaccent -20 +KPX Rcaron U -20 +KPX Rcaron Uacute -20 +KPX Rcaron Ucircumflex -20 +KPX Rcaron Udieresis -20 +KPX Rcaron Ugrave -20 +KPX Rcaron Uhungarumlaut -20 +KPX Rcaron Umacron -20 +KPX Rcaron Uogonek -20 +KPX Rcaron Uring -20 +KPX Rcaron V -50 +KPX Rcaron W -40 +KPX Rcaron Y -50 +KPX Rcaron Yacute -50 +KPX Rcaron Ydieresis -50 +KPX Rcommaaccent O -20 +KPX Rcommaaccent Oacute -20 +KPX Rcommaaccent Ocircumflex -20 +KPX Rcommaaccent Odieresis -20 +KPX Rcommaaccent Ograve -20 +KPX Rcommaaccent Ohungarumlaut -20 +KPX Rcommaaccent Omacron -20 +KPX Rcommaaccent Oslash -20 +KPX Rcommaaccent Otilde -20 +KPX Rcommaaccent T -20 +KPX Rcommaaccent Tcaron -20 +KPX Rcommaaccent Tcommaaccent -20 +KPX Rcommaaccent U -20 +KPX Rcommaaccent Uacute -20 +KPX Rcommaaccent Ucircumflex -20 +KPX Rcommaaccent Udieresis -20 +KPX Rcommaaccent Ugrave -20 +KPX Rcommaaccent Uhungarumlaut -20 +KPX Rcommaaccent Umacron -20 +KPX Rcommaaccent Uogonek -20 +KPX Rcommaaccent Uring -20 +KPX Rcommaaccent V -50 +KPX Rcommaaccent W -40 +KPX Rcommaaccent Y -50 +KPX Rcommaaccent Yacute -50 +KPX Rcommaaccent Ydieresis -50 +KPX T A -90 +KPX T Aacute -90 +KPX T Abreve -90 +KPX T Acircumflex -90 +KPX T Adieresis -90 +KPX T Agrave -90 +KPX T Amacron -90 +KPX T Aogonek -90 +KPX T Aring -90 +KPX T Atilde -90 +KPX T O -40 +KPX T Oacute -40 +KPX T Ocircumflex -40 +KPX T Odieresis -40 +KPX T Ograve -40 +KPX T Ohungarumlaut -40 +KPX T Omacron -40 +KPX T Oslash -40 +KPX T Otilde -40 +KPX T a -80 +KPX T aacute -80 +KPX T abreve -80 +KPX T acircumflex -80 +KPX T adieresis -80 +KPX T agrave -80 +KPX T amacron -80 +KPX T aogonek -80 +KPX T aring -80 +KPX T atilde -80 +KPX T colon -40 +KPX T comma -80 +KPX T e -60 +KPX T eacute -60 +KPX T ecaron -60 +KPX T ecircumflex -60 +KPX T edieresis -60 +KPX T edotaccent -60 +KPX T egrave -60 +KPX T emacron -60 +KPX T eogonek -60 +KPX T hyphen -120 +KPX T o -80 +KPX T oacute -80 +KPX T ocircumflex -80 +KPX T odieresis -80 +KPX T ograve -80 +KPX T ohungarumlaut -80 +KPX T omacron -80 +KPX T oslash -80 +KPX T otilde -80 +KPX T period -80 +KPX T r -80 +KPX T racute -80 +KPX T rcommaaccent -80 +KPX T semicolon -40 +KPX T u -90 +KPX T uacute -90 +KPX T ucircumflex -90 +KPX T udieresis -90 +KPX T ugrave -90 +KPX T uhungarumlaut -90 +KPX T umacron -90 +KPX T uogonek -90 +KPX T uring -90 +KPX T w -60 +KPX T y -60 +KPX T yacute -60 +KPX T ydieresis -60 +KPX Tcaron A -90 +KPX Tcaron Aacute -90 +KPX Tcaron Abreve -90 +KPX Tcaron Acircumflex -90 +KPX Tcaron Adieresis -90 +KPX Tcaron Agrave -90 +KPX Tcaron Amacron -90 +KPX Tcaron Aogonek -90 +KPX Tcaron Aring -90 +KPX Tcaron Atilde -90 +KPX Tcaron O -40 +KPX Tcaron Oacute -40 +KPX Tcaron Ocircumflex -40 +KPX Tcaron Odieresis -40 +KPX Tcaron Ograve -40 +KPX Tcaron Ohungarumlaut -40 +KPX Tcaron Omacron -40 +KPX Tcaron Oslash -40 +KPX Tcaron Otilde -40 +KPX Tcaron a -80 +KPX Tcaron aacute -80 +KPX Tcaron abreve -80 +KPX Tcaron acircumflex -80 +KPX Tcaron adieresis -80 +KPX Tcaron agrave -80 +KPX Tcaron amacron -80 +KPX Tcaron aogonek -80 +KPX Tcaron aring -80 +KPX Tcaron atilde -80 +KPX Tcaron colon -40 +KPX Tcaron comma -80 +KPX Tcaron e -60 +KPX Tcaron eacute -60 +KPX Tcaron ecaron -60 +KPX Tcaron ecircumflex -60 +KPX Tcaron edieresis -60 +KPX Tcaron edotaccent -60 +KPX Tcaron egrave -60 +KPX Tcaron emacron -60 +KPX Tcaron eogonek -60 +KPX Tcaron hyphen -120 +KPX Tcaron o -80 +KPX Tcaron oacute -80 +KPX Tcaron ocircumflex -80 +KPX Tcaron odieresis -80 +KPX Tcaron ograve -80 +KPX Tcaron ohungarumlaut -80 +KPX Tcaron omacron -80 +KPX Tcaron oslash -80 +KPX Tcaron otilde -80 +KPX Tcaron period -80 +KPX Tcaron r -80 +KPX Tcaron racute -80 +KPX Tcaron rcommaaccent -80 +KPX Tcaron semicolon -40 +KPX Tcaron u -90 +KPX Tcaron uacute -90 +KPX Tcaron ucircumflex -90 +KPX Tcaron udieresis -90 +KPX Tcaron ugrave -90 +KPX Tcaron uhungarumlaut -90 +KPX Tcaron umacron -90 +KPX Tcaron uogonek -90 +KPX Tcaron uring -90 +KPX Tcaron w -60 +KPX Tcaron y -60 +KPX Tcaron yacute -60 +KPX Tcaron ydieresis -60 +KPX Tcommaaccent A -90 +KPX Tcommaaccent Aacute -90 +KPX Tcommaaccent Abreve -90 +KPX Tcommaaccent Acircumflex -90 +KPX Tcommaaccent Adieresis -90 +KPX Tcommaaccent Agrave -90 +KPX Tcommaaccent Amacron -90 +KPX Tcommaaccent Aogonek -90 +KPX Tcommaaccent Aring -90 +KPX Tcommaaccent Atilde -90 +KPX Tcommaaccent O -40 +KPX Tcommaaccent Oacute -40 +KPX Tcommaaccent Ocircumflex -40 +KPX Tcommaaccent Odieresis -40 +KPX Tcommaaccent Ograve -40 +KPX Tcommaaccent Ohungarumlaut -40 +KPX Tcommaaccent Omacron -40 +KPX Tcommaaccent Oslash -40 +KPX Tcommaaccent Otilde -40 +KPX Tcommaaccent a -80 +KPX Tcommaaccent aacute -80 +KPX Tcommaaccent abreve -80 +KPX Tcommaaccent acircumflex -80 +KPX Tcommaaccent adieresis -80 +KPX Tcommaaccent agrave -80 +KPX Tcommaaccent amacron -80 +KPX Tcommaaccent aogonek -80 +KPX Tcommaaccent aring -80 +KPX Tcommaaccent atilde -80 +KPX Tcommaaccent colon -40 +KPX Tcommaaccent comma -80 +KPX Tcommaaccent e -60 +KPX Tcommaaccent eacute -60 +KPX Tcommaaccent ecaron -60 +KPX Tcommaaccent ecircumflex -60 +KPX Tcommaaccent edieresis -60 +KPX Tcommaaccent edotaccent -60 +KPX Tcommaaccent egrave -60 +KPX Tcommaaccent emacron -60 +KPX Tcommaaccent eogonek -60 +KPX Tcommaaccent hyphen -120 +KPX Tcommaaccent o -80 +KPX Tcommaaccent oacute -80 +KPX Tcommaaccent ocircumflex -80 +KPX Tcommaaccent odieresis -80 +KPX Tcommaaccent ograve -80 +KPX Tcommaaccent ohungarumlaut -80 +KPX Tcommaaccent omacron -80 +KPX Tcommaaccent oslash -80 +KPX Tcommaaccent otilde -80 +KPX Tcommaaccent period -80 +KPX Tcommaaccent r -80 +KPX Tcommaaccent racute -80 +KPX Tcommaaccent rcommaaccent -80 +KPX Tcommaaccent semicolon -40 +KPX Tcommaaccent u -90 +KPX Tcommaaccent uacute -90 +KPX Tcommaaccent ucircumflex -90 +KPX Tcommaaccent udieresis -90 +KPX Tcommaaccent ugrave -90 +KPX Tcommaaccent uhungarumlaut -90 +KPX Tcommaaccent umacron -90 +KPX Tcommaaccent uogonek -90 +KPX Tcommaaccent uring -90 +KPX Tcommaaccent w -60 +KPX Tcommaaccent y -60 +KPX Tcommaaccent yacute -60 +KPX Tcommaaccent ydieresis -60 +KPX U A -50 +KPX U Aacute -50 +KPX U Abreve -50 +KPX U Acircumflex -50 +KPX U Adieresis -50 +KPX U Agrave -50 +KPX U Amacron -50 +KPX U Aogonek -50 +KPX U Aring -50 +KPX U Atilde -50 +KPX U comma -30 +KPX U period -30 +KPX Uacute A -50 +KPX Uacute Aacute -50 +KPX Uacute Abreve -50 +KPX Uacute Acircumflex -50 +KPX Uacute Adieresis -50 +KPX Uacute Agrave -50 +KPX Uacute Amacron -50 +KPX Uacute Aogonek -50 +KPX Uacute Aring -50 +KPX Uacute Atilde -50 +KPX Uacute comma -30 +KPX Uacute period -30 +KPX Ucircumflex A -50 +KPX Ucircumflex Aacute -50 +KPX Ucircumflex Abreve -50 +KPX Ucircumflex Acircumflex -50 +KPX Ucircumflex Adieresis -50 +KPX Ucircumflex Agrave -50 +KPX Ucircumflex Amacron -50 +KPX Ucircumflex Aogonek -50 +KPX Ucircumflex Aring -50 +KPX Ucircumflex Atilde -50 +KPX Ucircumflex comma -30 +KPX Ucircumflex period -30 +KPX Udieresis A -50 +KPX Udieresis Aacute -50 +KPX Udieresis Abreve -50 +KPX Udieresis Acircumflex -50 +KPX Udieresis Adieresis -50 +KPX Udieresis Agrave -50 +KPX Udieresis Amacron -50 +KPX Udieresis Aogonek -50 +KPX Udieresis Aring -50 +KPX Udieresis Atilde -50 +KPX Udieresis comma -30 +KPX Udieresis period -30 +KPX Ugrave A -50 +KPX Ugrave Aacute -50 +KPX Ugrave Abreve -50 +KPX Ugrave Acircumflex -50 +KPX Ugrave Adieresis -50 +KPX Ugrave Agrave -50 +KPX Ugrave Amacron -50 +KPX Ugrave Aogonek -50 +KPX Ugrave Aring -50 +KPX Ugrave Atilde -50 +KPX Ugrave comma -30 +KPX Ugrave period -30 +KPX Uhungarumlaut A -50 +KPX Uhungarumlaut Aacute -50 +KPX Uhungarumlaut Abreve -50 +KPX Uhungarumlaut Acircumflex -50 +KPX Uhungarumlaut Adieresis -50 +KPX Uhungarumlaut Agrave -50 +KPX Uhungarumlaut Amacron -50 +KPX Uhungarumlaut Aogonek -50 +KPX Uhungarumlaut Aring -50 +KPX Uhungarumlaut Atilde -50 +KPX Uhungarumlaut comma -30 +KPX Uhungarumlaut period -30 +KPX Umacron A -50 +KPX Umacron Aacute -50 +KPX Umacron Abreve -50 +KPX Umacron Acircumflex -50 +KPX Umacron Adieresis -50 +KPX Umacron Agrave -50 +KPX Umacron Amacron -50 +KPX Umacron Aogonek -50 +KPX Umacron Aring -50 +KPX Umacron Atilde -50 +KPX Umacron comma -30 +KPX Umacron period -30 +KPX Uogonek A -50 +KPX Uogonek Aacute -50 +KPX Uogonek Abreve -50 +KPX Uogonek Acircumflex -50 +KPX Uogonek Adieresis -50 +KPX Uogonek Agrave -50 +KPX Uogonek Amacron -50 +KPX Uogonek Aogonek -50 +KPX Uogonek Aring -50 +KPX Uogonek Atilde -50 +KPX Uogonek comma -30 +KPX Uogonek period -30 +KPX Uring A -50 +KPX Uring Aacute -50 +KPX Uring Abreve -50 +KPX Uring Acircumflex -50 +KPX Uring Adieresis -50 +KPX Uring Agrave -50 +KPX Uring Amacron -50 +KPX Uring Aogonek -50 +KPX Uring Aring -50 +KPX Uring Atilde -50 +KPX Uring comma -30 +KPX Uring period -30 +KPX V A -80 +KPX V Aacute -80 +KPX V Abreve -80 +KPX V Acircumflex -80 +KPX V Adieresis -80 +KPX V Agrave -80 +KPX V Amacron -80 +KPX V Aogonek -80 +KPX V Aring -80 +KPX V Atilde -80 +KPX V G -50 +KPX V Gbreve -50 +KPX V Gcommaaccent -50 +KPX V O -50 +KPX V Oacute -50 +KPX V Ocircumflex -50 +KPX V Odieresis -50 +KPX V Ograve -50 +KPX V Ohungarumlaut -50 +KPX V Omacron -50 +KPX V Oslash -50 +KPX V Otilde -50 +KPX V a -60 +KPX V aacute -60 +KPX V abreve -60 +KPX V acircumflex -60 +KPX V adieresis -60 +KPX V agrave -60 +KPX V amacron -60 +KPX V aogonek -60 +KPX V aring -60 +KPX V atilde -60 +KPX V colon -40 +KPX V comma -120 +KPX V e -50 +KPX V eacute -50 +KPX V ecaron -50 +KPX V ecircumflex -50 +KPX V edieresis -50 +KPX V edotaccent -50 +KPX V egrave -50 +KPX V emacron -50 +KPX V eogonek -50 +KPX V hyphen -80 +KPX V o -90 +KPX V oacute -90 +KPX V ocircumflex -90 +KPX V odieresis -90 +KPX V ograve -90 +KPX V ohungarumlaut -90 +KPX V omacron -90 +KPX V oslash -90 +KPX V otilde -90 +KPX V period -120 +KPX V semicolon -40 +KPX V u -60 +KPX V uacute -60 +KPX V ucircumflex -60 +KPX V udieresis -60 +KPX V ugrave -60 +KPX V uhungarumlaut -60 +KPX V umacron -60 +KPX V uogonek -60 +KPX V uring -60 +KPX W A -60 +KPX W Aacute -60 +KPX W Abreve -60 +KPX W Acircumflex -60 +KPX W Adieresis -60 +KPX W Agrave -60 +KPX W Amacron -60 +KPX W Aogonek -60 +KPX W Aring -60 +KPX W Atilde -60 +KPX W O -20 +KPX W Oacute -20 +KPX W Ocircumflex -20 +KPX W Odieresis -20 +KPX W Ograve -20 +KPX W Ohungarumlaut -20 +KPX W Omacron -20 +KPX W Oslash -20 +KPX W Otilde -20 +KPX W a -40 +KPX W aacute -40 +KPX W abreve -40 +KPX W acircumflex -40 +KPX W adieresis -40 +KPX W agrave -40 +KPX W amacron -40 +KPX W aogonek -40 +KPX W aring -40 +KPX W atilde -40 +KPX W colon -10 +KPX W comma -80 +KPX W e -35 +KPX W eacute -35 +KPX W ecaron -35 +KPX W ecircumflex -35 +KPX W edieresis -35 +KPX W edotaccent -35 +KPX W egrave -35 +KPX W emacron -35 +KPX W eogonek -35 +KPX W hyphen -40 +KPX W o -60 +KPX W oacute -60 +KPX W ocircumflex -60 +KPX W odieresis -60 +KPX W ograve -60 +KPX W ohungarumlaut -60 +KPX W omacron -60 +KPX W oslash -60 +KPX W otilde -60 +KPX W period -80 +KPX W semicolon -10 +KPX W u -45 +KPX W uacute -45 +KPX W ucircumflex -45 +KPX W udieresis -45 +KPX W ugrave -45 +KPX W uhungarumlaut -45 +KPX W umacron -45 +KPX W uogonek -45 +KPX W uring -45 +KPX W y -20 +KPX W yacute -20 +KPX W ydieresis -20 +KPX Y A -110 +KPX Y Aacute -110 +KPX Y Abreve -110 +KPX Y Acircumflex -110 +KPX Y Adieresis -110 +KPX Y Agrave -110 +KPX Y Amacron -110 +KPX Y Aogonek -110 +KPX Y Aring -110 +KPX Y Atilde -110 +KPX Y O -70 +KPX Y Oacute -70 +KPX Y Ocircumflex -70 +KPX Y Odieresis -70 +KPX Y Ograve -70 +KPX Y Ohungarumlaut -70 +KPX Y Omacron -70 +KPX Y Oslash -70 +KPX Y Otilde -70 +KPX Y a -90 +KPX Y aacute -90 +KPX Y abreve -90 +KPX Y acircumflex -90 +KPX Y adieresis -90 +KPX Y agrave -90 +KPX Y amacron -90 +KPX Y aogonek -90 +KPX Y aring -90 +KPX Y atilde -90 +KPX Y colon -50 +KPX Y comma -100 +KPX Y e -80 +KPX Y eacute -80 +KPX Y ecaron -80 +KPX Y ecircumflex -80 +KPX Y edieresis -80 +KPX Y edotaccent -80 +KPX Y egrave -80 +KPX Y emacron -80 +KPX Y eogonek -80 +KPX Y o -100 +KPX Y oacute -100 +KPX Y ocircumflex -100 +KPX Y odieresis -100 +KPX Y ograve -100 +KPX Y ohungarumlaut -100 +KPX Y omacron -100 +KPX Y oslash -100 +KPX Y otilde -100 +KPX Y period -100 +KPX Y semicolon -50 +KPX Y u -100 +KPX Y uacute -100 +KPX Y ucircumflex -100 +KPX Y udieresis -100 +KPX Y ugrave -100 +KPX Y uhungarumlaut -100 +KPX Y umacron -100 +KPX Y uogonek -100 +KPX Y uring -100 +KPX Yacute A -110 +KPX Yacute Aacute -110 +KPX Yacute Abreve -110 +KPX Yacute Acircumflex -110 +KPX Yacute Adieresis -110 +KPX Yacute Agrave -110 +KPX Yacute Amacron -110 +KPX Yacute Aogonek -110 +KPX Yacute Aring -110 +KPX Yacute Atilde -110 +KPX Yacute O -70 +KPX Yacute Oacute -70 +KPX Yacute Ocircumflex -70 +KPX Yacute Odieresis -70 +KPX Yacute Ograve -70 +KPX Yacute Ohungarumlaut -70 +KPX Yacute Omacron -70 +KPX Yacute Oslash -70 +KPX Yacute Otilde -70 +KPX Yacute a -90 +KPX Yacute aacute -90 +KPX Yacute abreve -90 +KPX Yacute acircumflex -90 +KPX Yacute adieresis -90 +KPX Yacute agrave -90 +KPX Yacute amacron -90 +KPX Yacute aogonek -90 +KPX Yacute aring -90 +KPX Yacute atilde -90 +KPX Yacute colon -50 +KPX Yacute comma -100 +KPX Yacute e -80 +KPX Yacute eacute -80 +KPX Yacute ecaron -80 +KPX Yacute ecircumflex -80 +KPX Yacute edieresis -80 +KPX Yacute edotaccent -80 +KPX Yacute egrave -80 +KPX Yacute emacron -80 +KPX Yacute eogonek -80 +KPX Yacute o -100 +KPX Yacute oacute -100 +KPX Yacute ocircumflex -100 +KPX Yacute odieresis -100 +KPX Yacute ograve -100 +KPX Yacute ohungarumlaut -100 +KPX Yacute omacron -100 +KPX Yacute oslash -100 +KPX Yacute otilde -100 +KPX Yacute period -100 +KPX Yacute semicolon -50 +KPX Yacute u -100 +KPX Yacute uacute -100 +KPX Yacute ucircumflex -100 +KPX Yacute udieresis -100 +KPX Yacute ugrave -100 +KPX Yacute uhungarumlaut -100 +KPX Yacute umacron -100 +KPX Yacute uogonek -100 +KPX Yacute uring -100 +KPX Ydieresis A -110 +KPX Ydieresis Aacute -110 +KPX Ydieresis Abreve -110 +KPX Ydieresis Acircumflex -110 +KPX Ydieresis Adieresis -110 +KPX Ydieresis Agrave -110 +KPX Ydieresis Amacron -110 +KPX Ydieresis Aogonek -110 +KPX Ydieresis Aring -110 +KPX Ydieresis Atilde -110 +KPX Ydieresis O -70 +KPX Ydieresis Oacute -70 +KPX Ydieresis Ocircumflex -70 +KPX Ydieresis Odieresis -70 +KPX Ydieresis Ograve -70 +KPX Ydieresis Ohungarumlaut -70 +KPX Ydieresis Omacron -70 +KPX Ydieresis Oslash -70 +KPX Ydieresis Otilde -70 +KPX Ydieresis a -90 +KPX Ydieresis aacute -90 +KPX Ydieresis abreve -90 +KPX Ydieresis acircumflex -90 +KPX Ydieresis adieresis -90 +KPX Ydieresis agrave -90 +KPX Ydieresis amacron -90 +KPX Ydieresis aogonek -90 +KPX Ydieresis aring -90 +KPX Ydieresis atilde -90 +KPX Ydieresis colon -50 +KPX Ydieresis comma -100 +KPX Ydieresis e -80 +KPX Ydieresis eacute -80 +KPX Ydieresis ecaron -80 +KPX Ydieresis ecircumflex -80 +KPX Ydieresis edieresis -80 +KPX Ydieresis edotaccent -80 +KPX Ydieresis egrave -80 +KPX Ydieresis emacron -80 +KPX Ydieresis eogonek -80 +KPX Ydieresis o -100 +KPX Ydieresis oacute -100 +KPX Ydieresis ocircumflex -100 +KPX Ydieresis odieresis -100 +KPX Ydieresis ograve -100 +KPX Ydieresis ohungarumlaut -100 +KPX Ydieresis omacron -100 +KPX Ydieresis oslash -100 +KPX Ydieresis otilde -100 +KPX Ydieresis period -100 +KPX Ydieresis semicolon -50 +KPX Ydieresis u -100 +KPX Ydieresis uacute -100 +KPX Ydieresis ucircumflex -100 +KPX Ydieresis udieresis -100 +KPX Ydieresis ugrave -100 +KPX Ydieresis uhungarumlaut -100 +KPX Ydieresis umacron -100 +KPX Ydieresis uogonek -100 +KPX Ydieresis uring -100 +KPX a g -10 +KPX a gbreve -10 +KPX a gcommaaccent -10 +KPX a v -15 +KPX a w -15 +KPX a y -20 +KPX a yacute -20 +KPX a ydieresis -20 +KPX aacute g -10 +KPX aacute gbreve -10 +KPX aacute gcommaaccent -10 +KPX aacute v -15 +KPX aacute w -15 +KPX aacute y -20 +KPX aacute yacute -20 +KPX aacute ydieresis -20 +KPX abreve g -10 +KPX abreve gbreve -10 +KPX abreve gcommaaccent -10 +KPX abreve v -15 +KPX abreve w -15 +KPX abreve y -20 +KPX abreve yacute -20 +KPX abreve ydieresis -20 +KPX acircumflex g -10 +KPX acircumflex gbreve -10 +KPX acircumflex gcommaaccent -10 +KPX acircumflex v -15 +KPX acircumflex w -15 +KPX acircumflex y -20 +KPX acircumflex yacute -20 +KPX acircumflex ydieresis -20 +KPX adieresis g -10 +KPX adieresis gbreve -10 +KPX adieresis gcommaaccent -10 +KPX adieresis v -15 +KPX adieresis w -15 +KPX adieresis y -20 +KPX adieresis yacute -20 +KPX adieresis ydieresis -20 +KPX agrave g -10 +KPX agrave gbreve -10 +KPX agrave gcommaaccent -10 +KPX agrave v -15 +KPX agrave w -15 +KPX agrave y -20 +KPX agrave yacute -20 +KPX agrave ydieresis -20 +KPX amacron g -10 +KPX amacron gbreve -10 +KPX amacron gcommaaccent -10 +KPX amacron v -15 +KPX amacron w -15 +KPX amacron y -20 +KPX amacron yacute -20 +KPX amacron ydieresis -20 +KPX aogonek g -10 +KPX aogonek gbreve -10 +KPX aogonek gcommaaccent -10 +KPX aogonek v -15 +KPX aogonek w -15 +KPX aogonek y -20 +KPX aogonek yacute -20 +KPX aogonek ydieresis -20 +KPX aring g -10 +KPX aring gbreve -10 +KPX aring gcommaaccent -10 +KPX aring v -15 +KPX aring w -15 +KPX aring y -20 +KPX aring yacute -20 +KPX aring ydieresis -20 +KPX atilde g -10 +KPX atilde gbreve -10 +KPX atilde gcommaaccent -10 +KPX atilde v -15 +KPX atilde w -15 +KPX atilde y -20 +KPX atilde yacute -20 +KPX atilde ydieresis -20 +KPX b l -10 +KPX b lacute -10 +KPX b lcommaaccent -10 +KPX b lslash -10 +KPX b u -20 +KPX b uacute -20 +KPX b ucircumflex -20 +KPX b udieresis -20 +KPX b ugrave -20 +KPX b uhungarumlaut -20 +KPX b umacron -20 +KPX b uogonek -20 +KPX b uring -20 +KPX b v -20 +KPX b y -20 +KPX b yacute -20 +KPX b ydieresis -20 +KPX c h -10 +KPX c k -20 +KPX c kcommaaccent -20 +KPX c l -20 +KPX c lacute -20 +KPX c lcommaaccent -20 +KPX c lslash -20 +KPX c y -10 +KPX c yacute -10 +KPX c ydieresis -10 +KPX cacute h -10 +KPX cacute k -20 +KPX cacute kcommaaccent -20 +KPX cacute l -20 +KPX cacute lacute -20 +KPX cacute lcommaaccent -20 +KPX cacute lslash -20 +KPX cacute y -10 +KPX cacute yacute -10 +KPX cacute ydieresis -10 +KPX ccaron h -10 +KPX ccaron k -20 +KPX ccaron kcommaaccent -20 +KPX ccaron l -20 +KPX ccaron lacute -20 +KPX ccaron lcommaaccent -20 +KPX ccaron lslash -20 +KPX ccaron y -10 +KPX ccaron yacute -10 +KPX ccaron ydieresis -10 +KPX ccedilla h -10 +KPX ccedilla k -20 +KPX ccedilla kcommaaccent -20 +KPX ccedilla l -20 +KPX ccedilla lacute -20 +KPX ccedilla lcommaaccent -20 +KPX ccedilla lslash -20 +KPX ccedilla y -10 +KPX ccedilla yacute -10 +KPX ccedilla ydieresis -10 +KPX colon space -40 +KPX comma quotedblright -120 +KPX comma quoteright -120 +KPX comma space -40 +KPX d d -10 +KPX d dcroat -10 +KPX d v -15 +KPX d w -15 +KPX d y -15 +KPX d yacute -15 +KPX d ydieresis -15 +KPX dcroat d -10 +KPX dcroat dcroat -10 +KPX dcroat v -15 +KPX dcroat w -15 +KPX dcroat y -15 +KPX dcroat yacute -15 +KPX dcroat ydieresis -15 +KPX e comma 10 +KPX e period 20 +KPX e v -15 +KPX e w -15 +KPX e x -15 +KPX e y -15 +KPX e yacute -15 +KPX e ydieresis -15 +KPX eacute comma 10 +KPX eacute period 20 +KPX eacute v -15 +KPX eacute w -15 +KPX eacute x -15 +KPX eacute y -15 +KPX eacute yacute -15 +KPX eacute ydieresis -15 +KPX ecaron comma 10 +KPX ecaron period 20 +KPX ecaron v -15 +KPX ecaron w -15 +KPX ecaron x -15 +KPX ecaron y -15 +KPX ecaron yacute -15 +KPX ecaron ydieresis -15 +KPX ecircumflex comma 10 +KPX ecircumflex period 20 +KPX ecircumflex v -15 +KPX ecircumflex w -15 +KPX ecircumflex x -15 +KPX ecircumflex y -15 +KPX ecircumflex yacute -15 +KPX ecircumflex ydieresis -15 +KPX edieresis comma 10 +KPX edieresis period 20 +KPX edieresis v -15 +KPX edieresis w -15 +KPX edieresis x -15 +KPX edieresis y -15 +KPX edieresis yacute -15 +KPX edieresis ydieresis -15 +KPX edotaccent comma 10 +KPX edotaccent period 20 +KPX edotaccent v -15 +KPX edotaccent w -15 +KPX edotaccent x -15 +KPX edotaccent y -15 +KPX edotaccent yacute -15 +KPX edotaccent ydieresis -15 +KPX egrave comma 10 +KPX egrave period 20 +KPX egrave v -15 +KPX egrave w -15 +KPX egrave x -15 +KPX egrave y -15 +KPX egrave yacute -15 +KPX egrave ydieresis -15 +KPX emacron comma 10 +KPX emacron period 20 +KPX emacron v -15 +KPX emacron w -15 +KPX emacron x -15 +KPX emacron y -15 +KPX emacron yacute -15 +KPX emacron ydieresis -15 +KPX eogonek comma 10 +KPX eogonek period 20 +KPX eogonek v -15 +KPX eogonek w -15 +KPX eogonek x -15 +KPX eogonek y -15 +KPX eogonek yacute -15 +KPX eogonek ydieresis -15 +KPX f comma -10 +KPX f e -10 +KPX f eacute -10 +KPX f ecaron -10 +KPX f ecircumflex -10 +KPX f edieresis -10 +KPX f edotaccent -10 +KPX f egrave -10 +KPX f emacron -10 +KPX f eogonek -10 +KPX f o -20 +KPX f oacute -20 +KPX f ocircumflex -20 +KPX f odieresis -20 +KPX f ograve -20 +KPX f ohungarumlaut -20 +KPX f omacron -20 +KPX f oslash -20 +KPX f otilde -20 +KPX f period -10 +KPX f quotedblright 30 +KPX f quoteright 30 +KPX g e 10 +KPX g eacute 10 +KPX g ecaron 10 +KPX g ecircumflex 10 +KPX g edieresis 10 +KPX g edotaccent 10 +KPX g egrave 10 +KPX g emacron 10 +KPX g eogonek 10 +KPX g g -10 +KPX g gbreve -10 +KPX g gcommaaccent -10 +KPX gbreve e 10 +KPX gbreve eacute 10 +KPX gbreve ecaron 10 +KPX gbreve ecircumflex 10 +KPX gbreve edieresis 10 +KPX gbreve edotaccent 10 +KPX gbreve egrave 10 +KPX gbreve emacron 10 +KPX gbreve eogonek 10 +KPX gbreve g -10 +KPX gbreve gbreve -10 +KPX gbreve gcommaaccent -10 +KPX gcommaaccent e 10 +KPX gcommaaccent eacute 10 +KPX gcommaaccent ecaron 10 +KPX gcommaaccent ecircumflex 10 +KPX gcommaaccent edieresis 10 +KPX gcommaaccent edotaccent 10 +KPX gcommaaccent egrave 10 +KPX gcommaaccent emacron 10 +KPX gcommaaccent eogonek 10 +KPX gcommaaccent g -10 +KPX gcommaaccent gbreve -10 +KPX gcommaaccent gcommaaccent -10 +KPX h y -20 +KPX h yacute -20 +KPX h ydieresis -20 +KPX k o -15 +KPX k oacute -15 +KPX k ocircumflex -15 +KPX k odieresis -15 +KPX k ograve -15 +KPX k ohungarumlaut -15 +KPX k omacron -15 +KPX k oslash -15 +KPX k otilde -15 +KPX kcommaaccent o -15 +KPX kcommaaccent oacute -15 +KPX kcommaaccent ocircumflex -15 +KPX kcommaaccent odieresis -15 +KPX kcommaaccent ograve -15 +KPX kcommaaccent ohungarumlaut -15 +KPX kcommaaccent omacron -15 +KPX kcommaaccent oslash -15 +KPX kcommaaccent otilde -15 +KPX l w -15 +KPX l y -15 +KPX l yacute -15 +KPX l ydieresis -15 +KPX lacute w -15 +KPX lacute y -15 +KPX lacute yacute -15 +KPX lacute ydieresis -15 +KPX lcommaaccent w -15 +KPX lcommaaccent y -15 +KPX lcommaaccent yacute -15 +KPX lcommaaccent ydieresis -15 +KPX lslash w -15 +KPX lslash y -15 +KPX lslash yacute -15 +KPX lslash ydieresis -15 +KPX m u -20 +KPX m uacute -20 +KPX m ucircumflex -20 +KPX m udieresis -20 +KPX m ugrave -20 +KPX m uhungarumlaut -20 +KPX m umacron -20 +KPX m uogonek -20 +KPX m uring -20 +KPX m y -30 +KPX m yacute -30 +KPX m ydieresis -30 +KPX n u -10 +KPX n uacute -10 +KPX n ucircumflex -10 +KPX n udieresis -10 +KPX n ugrave -10 +KPX n uhungarumlaut -10 +KPX n umacron -10 +KPX n uogonek -10 +KPX n uring -10 +KPX n v -40 +KPX n y -20 +KPX n yacute -20 +KPX n ydieresis -20 +KPX nacute u -10 +KPX nacute uacute -10 +KPX nacute ucircumflex -10 +KPX nacute udieresis -10 +KPX nacute ugrave -10 +KPX nacute uhungarumlaut -10 +KPX nacute umacron -10 +KPX nacute uogonek -10 +KPX nacute uring -10 +KPX nacute v -40 +KPX nacute y -20 +KPX nacute yacute -20 +KPX nacute ydieresis -20 +KPX ncaron u -10 +KPX ncaron uacute -10 +KPX ncaron ucircumflex -10 +KPX ncaron udieresis -10 +KPX ncaron ugrave -10 +KPX ncaron uhungarumlaut -10 +KPX ncaron umacron -10 +KPX ncaron uogonek -10 +KPX ncaron uring -10 +KPX ncaron v -40 +KPX ncaron y -20 +KPX ncaron yacute -20 +KPX ncaron ydieresis -20 +KPX ncommaaccent u -10 +KPX ncommaaccent uacute -10 +KPX ncommaaccent ucircumflex -10 +KPX ncommaaccent udieresis -10 +KPX ncommaaccent ugrave -10 +KPX ncommaaccent uhungarumlaut -10 +KPX ncommaaccent umacron -10 +KPX ncommaaccent uogonek -10 +KPX ncommaaccent uring -10 +KPX ncommaaccent v -40 +KPX ncommaaccent y -20 +KPX ncommaaccent yacute -20 +KPX ncommaaccent ydieresis -20 +KPX ntilde u -10 +KPX ntilde uacute -10 +KPX ntilde ucircumflex -10 +KPX ntilde udieresis -10 +KPX ntilde ugrave -10 +KPX ntilde uhungarumlaut -10 +KPX ntilde umacron -10 +KPX ntilde uogonek -10 +KPX ntilde uring -10 +KPX ntilde v -40 +KPX ntilde y -20 +KPX ntilde yacute -20 +KPX ntilde ydieresis -20 +KPX o v -20 +KPX o w -15 +KPX o x -30 +KPX o y -20 +KPX o yacute -20 +KPX o ydieresis -20 +KPX oacute v -20 +KPX oacute w -15 +KPX oacute x -30 +KPX oacute y -20 +KPX oacute yacute -20 +KPX oacute ydieresis -20 +KPX ocircumflex v -20 +KPX ocircumflex w -15 +KPX ocircumflex x -30 +KPX ocircumflex y -20 +KPX ocircumflex yacute -20 +KPX ocircumflex ydieresis -20 +KPX odieresis v -20 +KPX odieresis w -15 +KPX odieresis x -30 +KPX odieresis y -20 +KPX odieresis yacute -20 +KPX odieresis ydieresis -20 +KPX ograve v -20 +KPX ograve w -15 +KPX ograve x -30 +KPX ograve y -20 +KPX ograve yacute -20 +KPX ograve ydieresis -20 +KPX ohungarumlaut v -20 +KPX ohungarumlaut w -15 +KPX ohungarumlaut x -30 +KPX ohungarumlaut y -20 +KPX ohungarumlaut yacute -20 +KPX ohungarumlaut ydieresis -20 +KPX omacron v -20 +KPX omacron w -15 +KPX omacron x -30 +KPX omacron y -20 +KPX omacron yacute -20 +KPX omacron ydieresis -20 +KPX oslash v -20 +KPX oslash w -15 +KPX oslash x -30 +KPX oslash y -20 +KPX oslash yacute -20 +KPX oslash ydieresis -20 +KPX otilde v -20 +KPX otilde w -15 +KPX otilde x -30 +KPX otilde y -20 +KPX otilde yacute -20 +KPX otilde ydieresis -20 +KPX p y -15 +KPX p yacute -15 +KPX p ydieresis -15 +KPX period quotedblright -120 +KPX period quoteright -120 +KPX period space -40 +KPX quotedblright space -80 +KPX quoteleft quoteleft -46 +KPX quoteright d -80 +KPX quoteright dcroat -80 +KPX quoteright l -20 +KPX quoteright lacute -20 +KPX quoteright lcommaaccent -20 +KPX quoteright lslash -20 +KPX quoteright quoteright -46 +KPX quoteright r -40 +KPX quoteright racute -40 +KPX quoteright rcaron -40 +KPX quoteright rcommaaccent -40 +KPX quoteright s -60 +KPX quoteright sacute -60 +KPX quoteright scaron -60 +KPX quoteright scedilla -60 +KPX quoteright scommaaccent -60 +KPX quoteright space -80 +KPX quoteright v -20 +KPX r c -20 +KPX r cacute -20 +KPX r ccaron -20 +KPX r ccedilla -20 +KPX r comma -60 +KPX r d -20 +KPX r dcroat -20 +KPX r g -15 +KPX r gbreve -15 +KPX r gcommaaccent -15 +KPX r hyphen -20 +KPX r o -20 +KPX r oacute -20 +KPX r ocircumflex -20 +KPX r odieresis -20 +KPX r ograve -20 +KPX r ohungarumlaut -20 +KPX r omacron -20 +KPX r oslash -20 +KPX r otilde -20 +KPX r period -60 +KPX r q -20 +KPX r s -15 +KPX r sacute -15 +KPX r scaron -15 +KPX r scedilla -15 +KPX r scommaaccent -15 +KPX r t 20 +KPX r tcommaaccent 20 +KPX r v 10 +KPX r y 10 +KPX r yacute 10 +KPX r ydieresis 10 +KPX racute c -20 +KPX racute cacute -20 +KPX racute ccaron -20 +KPX racute ccedilla -20 +KPX racute comma -60 +KPX racute d -20 +KPX racute dcroat -20 +KPX racute g -15 +KPX racute gbreve -15 +KPX racute gcommaaccent -15 +KPX racute hyphen -20 +KPX racute o -20 +KPX racute oacute -20 +KPX racute ocircumflex -20 +KPX racute odieresis -20 +KPX racute ograve -20 +KPX racute ohungarumlaut -20 +KPX racute omacron -20 +KPX racute oslash -20 +KPX racute otilde -20 +KPX racute period -60 +KPX racute q -20 +KPX racute s -15 +KPX racute sacute -15 +KPX racute scaron -15 +KPX racute scedilla -15 +KPX racute scommaaccent -15 +KPX racute t 20 +KPX racute tcommaaccent 20 +KPX racute v 10 +KPX racute y 10 +KPX racute yacute 10 +KPX racute ydieresis 10 +KPX rcaron c -20 +KPX rcaron cacute -20 +KPX rcaron ccaron -20 +KPX rcaron ccedilla -20 +KPX rcaron comma -60 +KPX rcaron d -20 +KPX rcaron dcroat -20 +KPX rcaron g -15 +KPX rcaron gbreve -15 +KPX rcaron gcommaaccent -15 +KPX rcaron hyphen -20 +KPX rcaron o -20 +KPX rcaron oacute -20 +KPX rcaron ocircumflex -20 +KPX rcaron odieresis -20 +KPX rcaron ograve -20 +KPX rcaron ohungarumlaut -20 +KPX rcaron omacron -20 +KPX rcaron oslash -20 +KPX rcaron otilde -20 +KPX rcaron period -60 +KPX rcaron q -20 +KPX rcaron s -15 +KPX rcaron sacute -15 +KPX rcaron scaron -15 +KPX rcaron scedilla -15 +KPX rcaron scommaaccent -15 +KPX rcaron t 20 +KPX rcaron tcommaaccent 20 +KPX rcaron v 10 +KPX rcaron y 10 +KPX rcaron yacute 10 +KPX rcaron ydieresis 10 +KPX rcommaaccent c -20 +KPX rcommaaccent cacute -20 +KPX rcommaaccent ccaron -20 +KPX rcommaaccent ccedilla -20 +KPX rcommaaccent comma -60 +KPX rcommaaccent d -20 +KPX rcommaaccent dcroat -20 +KPX rcommaaccent g -15 +KPX rcommaaccent gbreve -15 +KPX rcommaaccent gcommaaccent -15 +KPX rcommaaccent hyphen -20 +KPX rcommaaccent o -20 +KPX rcommaaccent oacute -20 +KPX rcommaaccent ocircumflex -20 +KPX rcommaaccent odieresis -20 +KPX rcommaaccent ograve -20 +KPX rcommaaccent ohungarumlaut -20 +KPX rcommaaccent omacron -20 +KPX rcommaaccent oslash -20 +KPX rcommaaccent otilde -20 +KPX rcommaaccent period -60 +KPX rcommaaccent q -20 +KPX rcommaaccent s -15 +KPX rcommaaccent sacute -15 +KPX rcommaaccent scaron -15 +KPX rcommaaccent scedilla -15 +KPX rcommaaccent scommaaccent -15 +KPX rcommaaccent t 20 +KPX rcommaaccent tcommaaccent 20 +KPX rcommaaccent v 10 +KPX rcommaaccent y 10 +KPX rcommaaccent yacute 10 +KPX rcommaaccent ydieresis 10 +KPX s w -15 +KPX sacute w -15 +KPX scaron w -15 +KPX scedilla w -15 +KPX scommaaccent w -15 +KPX semicolon space -40 +KPX space T -100 +KPX space Tcaron -100 +KPX space Tcommaaccent -100 +KPX space V -80 +KPX space W -80 +KPX space Y -120 +KPX space Yacute -120 +KPX space Ydieresis -120 +KPX space quotedblleft -80 +KPX space quoteleft -60 +KPX v a -20 +KPX v aacute -20 +KPX v abreve -20 +KPX v acircumflex -20 +KPX v adieresis -20 +KPX v agrave -20 +KPX v amacron -20 +KPX v aogonek -20 +KPX v aring -20 +KPX v atilde -20 +KPX v comma -80 +KPX v o -30 +KPX v oacute -30 +KPX v ocircumflex -30 +KPX v odieresis -30 +KPX v ograve -30 +KPX v ohungarumlaut -30 +KPX v omacron -30 +KPX v oslash -30 +KPX v otilde -30 +KPX v period -80 +KPX w comma -40 +KPX w o -20 +KPX w oacute -20 +KPX w ocircumflex -20 +KPX w odieresis -20 +KPX w ograve -20 +KPX w ohungarumlaut -20 +KPX w omacron -20 +KPX w oslash -20 +KPX w otilde -20 +KPX w period -40 +KPX x e -10 +KPX x eacute -10 +KPX x ecaron -10 +KPX x ecircumflex -10 +KPX x edieresis -10 +KPX x edotaccent -10 +KPX x egrave -10 +KPX x emacron -10 +KPX x eogonek -10 +KPX y a -30 +KPX y aacute -30 +KPX y abreve -30 +KPX y acircumflex -30 +KPX y adieresis -30 +KPX y agrave -30 +KPX y amacron -30 +KPX y aogonek -30 +KPX y aring -30 +KPX y atilde -30 +KPX y comma -80 +KPX y e -10 +KPX y eacute -10 +KPX y ecaron -10 +KPX y ecircumflex -10 +KPX y edieresis -10 +KPX y edotaccent -10 +KPX y egrave -10 +KPX y emacron -10 +KPX y eogonek -10 +KPX y o -25 +KPX y oacute -25 +KPX y ocircumflex -25 +KPX y odieresis -25 +KPX y ograve -25 +KPX y ohungarumlaut -25 +KPX y omacron -25 +KPX y oslash -25 +KPX y otilde -25 +KPX y period -80 +KPX yacute a -30 +KPX yacute aacute -30 +KPX yacute abreve -30 +KPX yacute acircumflex -30 +KPX yacute adieresis -30 +KPX yacute agrave -30 +KPX yacute amacron -30 +KPX yacute aogonek -30 +KPX yacute aring -30 +KPX yacute atilde -30 +KPX yacute comma -80 +KPX yacute e -10 +KPX yacute eacute -10 +KPX yacute ecaron -10 +KPX yacute ecircumflex -10 +KPX yacute edieresis -10 +KPX yacute edotaccent -10 +KPX yacute egrave -10 +KPX yacute emacron -10 +KPX yacute eogonek -10 +KPX yacute o -25 +KPX yacute oacute -25 +KPX yacute ocircumflex -25 +KPX yacute odieresis -25 +KPX yacute ograve -25 +KPX yacute ohungarumlaut -25 +KPX yacute omacron -25 +KPX yacute oslash -25 +KPX yacute otilde -25 +KPX yacute period -80 +KPX ydieresis a -30 +KPX ydieresis aacute -30 +KPX ydieresis abreve -30 +KPX ydieresis acircumflex -30 +KPX ydieresis adieresis -30 +KPX ydieresis agrave -30 +KPX ydieresis amacron -30 +KPX ydieresis aogonek -30 +KPX ydieresis aring -30 +KPX ydieresis atilde -30 +KPX ydieresis comma -80 +KPX ydieresis e -10 +KPX ydieresis eacute -10 +KPX ydieresis ecaron -10 +KPX ydieresis ecircumflex -10 +KPX ydieresis edieresis -10 +KPX ydieresis edotaccent -10 +KPX ydieresis egrave -10 +KPX ydieresis emacron -10 +KPX ydieresis eogonek -10 +KPX ydieresis o -25 +KPX ydieresis oacute -25 +KPX ydieresis ocircumflex -25 +KPX ydieresis odieresis -25 +KPX ydieresis ograve -25 +KPX ydieresis ohungarumlaut -25 +KPX ydieresis omacron -25 +KPX ydieresis oslash -25 +KPX ydieresis otilde -25 +KPX ydieresis period -80 +KPX z e 10 +KPX z eacute 10 +KPX z ecaron 10 +KPX z ecircumflex 10 +KPX z edieresis 10 +KPX z edotaccent 10 +KPX z egrave 10 +KPX z emacron 10 +KPX z eogonek 10 +KPX zacute e 10 +KPX zacute eacute 10 +KPX zacute ecaron 10 +KPX zacute ecircumflex 10 +KPX zacute edieresis 10 +KPX zacute edotaccent 10 +KPX zacute egrave 10 +KPX zacute emacron 10 +KPX zacute eogonek 10 +KPX zcaron e 10 +KPX zcaron eacute 10 +KPX zcaron ecaron 10 +KPX zcaron ecircumflex 10 +KPX zcaron edieresis 10 +KPX zcaron edotaccent 10 +KPX zcaron egrave 10 +KPX zcaron emacron 10 +KPX zcaron eogonek 10 +KPX zdotaccent e 10 +KPX zdotaccent eacute 10 +KPX zdotaccent ecaron 10 +KPX zdotaccent ecircumflex 10 +KPX zdotaccent edieresis 10 +KPX zdotaccent edotaccent 10 +KPX zdotaccent egrave 10 +KPX zdotaccent emacron 10 +KPX zdotaccent eogonek 10 +EndKernPairs +EndKernData +EndFontMetrics diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/Helvetica-Oblique.afm b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/Helvetica-Oblique.afm new file mode 100755 index 00000000..7a7af001 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/Helvetica-Oblique.afm @@ -0,0 +1,3051 @@ +StartFontMetrics 4.1 +Comment Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All Rights Reserved. +Comment Creation Date: Thu May 1 12:44:31 1997 +Comment UniqueID 43055 +Comment VMusage 14960 69346 +FontName Helvetica-Oblique +FullName Helvetica Oblique +FamilyName Helvetica +Weight Medium +ItalicAngle -12 +IsFixedPitch false +CharacterSet ExtendedRoman +FontBBox -170 -225 1116 931 +UnderlinePosition -100 +UnderlineThickness 50 +Version 002.000 +Notice Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All Rights Reserved.Helvetica is a trademark of Linotype-Hell AG and/or its subsidiaries. +EncodingScheme AdobeStandardEncoding +CapHeight 718 +XHeight 523 +Ascender 718 +Descender -207 +StdHW 76 +StdVW 88 +StartCharMetrics 315 +C 32 ; WX 278 ; N space ; B 0 0 0 0 ; +C 33 ; WX 278 ; N exclam ; B 90 0 340 718 ; +C 34 ; WX 355 ; N quotedbl ; B 168 463 438 718 ; +C 35 ; WX 556 ; N numbersign ; B 73 0 631 688 ; +C 36 ; WX 556 ; N dollar ; B 69 -115 617 775 ; +C 37 ; WX 889 ; N percent ; B 147 -19 889 703 ; +C 38 ; WX 667 ; N ampersand ; B 77 -15 647 718 ; +C 39 ; WX 222 ; N quoteright ; B 151 463 310 718 ; +C 40 ; WX 333 ; N parenleft ; B 108 -207 454 733 ; +C 41 ; WX 333 ; N parenright ; B -9 -207 337 733 ; +C 42 ; WX 389 ; N asterisk ; B 165 431 475 718 ; +C 43 ; WX 584 ; N plus ; B 85 0 606 505 ; +C 44 ; WX 278 ; N comma ; B 56 -147 214 106 ; +C 45 ; WX 333 ; N hyphen ; B 93 232 357 322 ; +C 46 ; WX 278 ; N period ; B 87 0 214 106 ; +C 47 ; WX 278 ; N slash ; B -21 -19 452 737 ; +C 48 ; WX 556 ; N zero ; B 93 -19 608 703 ; +C 49 ; WX 556 ; N one ; B 207 0 508 703 ; +C 50 ; WX 556 ; N two ; B 26 0 617 703 ; +C 51 ; WX 556 ; N three ; B 75 -19 610 703 ; +C 52 ; WX 556 ; N four ; B 61 0 576 703 ; +C 53 ; WX 556 ; N five ; B 68 -19 621 688 ; +C 54 ; WX 556 ; N six ; B 91 -19 615 703 ; +C 55 ; WX 556 ; N seven ; B 137 0 669 688 ; +C 56 ; WX 556 ; N eight ; B 74 -19 607 703 ; +C 57 ; WX 556 ; N nine ; B 82 -19 609 703 ; +C 58 ; WX 278 ; N colon ; B 87 0 301 516 ; +C 59 ; WX 278 ; N semicolon ; B 56 -147 301 516 ; +C 60 ; WX 584 ; N less ; B 94 11 641 495 ; +C 61 ; WX 584 ; N equal ; B 63 115 628 390 ; +C 62 ; WX 584 ; N greater ; B 50 11 597 495 ; +C 63 ; WX 556 ; N question ; B 161 0 610 727 ; +C 64 ; WX 1015 ; N at ; B 215 -19 965 737 ; +C 65 ; WX 667 ; N A ; B 14 0 654 718 ; +C 66 ; WX 667 ; N B ; B 74 0 712 718 ; +C 67 ; WX 722 ; N C ; B 108 -19 782 737 ; +C 68 ; WX 722 ; N D ; B 81 0 764 718 ; +C 69 ; WX 667 ; N E ; B 86 0 762 718 ; +C 70 ; WX 611 ; N F ; B 86 0 736 718 ; +C 71 ; WX 778 ; N G ; B 111 -19 799 737 ; +C 72 ; WX 722 ; N H ; B 77 0 799 718 ; +C 73 ; WX 278 ; N I ; B 91 0 341 718 ; +C 74 ; WX 500 ; N J ; B 47 -19 581 718 ; +C 75 ; WX 667 ; N K ; B 76 0 808 718 ; +C 76 ; WX 556 ; N L ; B 76 0 555 718 ; +C 77 ; WX 833 ; N M ; B 73 0 914 718 ; +C 78 ; WX 722 ; N N ; B 76 0 799 718 ; +C 79 ; WX 778 ; N O ; B 105 -19 826 737 ; +C 80 ; WX 667 ; N P ; B 86 0 737 718 ; +C 81 ; WX 778 ; N Q ; B 105 -56 826 737 ; +C 82 ; WX 722 ; N R ; B 88 0 773 718 ; +C 83 ; WX 667 ; N S ; B 90 -19 713 737 ; +C 84 ; WX 611 ; N T ; B 148 0 750 718 ; +C 85 ; WX 722 ; N U ; B 123 -19 797 718 ; +C 86 ; WX 667 ; N V ; B 173 0 800 718 ; +C 87 ; WX 944 ; N W ; B 169 0 1081 718 ; +C 88 ; WX 667 ; N X ; B 19 0 790 718 ; +C 89 ; WX 667 ; N Y ; B 167 0 806 718 ; +C 90 ; WX 611 ; N Z ; B 23 0 741 718 ; +C 91 ; WX 278 ; N bracketleft ; B 21 -196 403 722 ; +C 92 ; WX 278 ; N backslash ; B 140 -19 291 737 ; +C 93 ; WX 278 ; N bracketright ; B -14 -196 368 722 ; +C 94 ; WX 469 ; N asciicircum ; B 42 264 539 688 ; +C 95 ; WX 556 ; N underscore ; B -27 -125 540 -75 ; +C 96 ; WX 222 ; N quoteleft ; B 165 470 323 725 ; +C 97 ; WX 556 ; N a ; B 61 -15 559 538 ; +C 98 ; WX 556 ; N b ; B 58 -15 584 718 ; +C 99 ; WX 500 ; N c ; B 74 -15 553 538 ; +C 100 ; WX 556 ; N d ; B 84 -15 652 718 ; +C 101 ; WX 556 ; N e ; B 84 -15 578 538 ; +C 102 ; WX 278 ; N f ; B 86 0 416 728 ; L i fi ; L l fl ; +C 103 ; WX 556 ; N g ; B 42 -220 610 538 ; +C 104 ; WX 556 ; N h ; B 65 0 573 718 ; +C 105 ; WX 222 ; N i ; B 67 0 308 718 ; +C 106 ; WX 222 ; N j ; B -60 -210 308 718 ; +C 107 ; WX 500 ; N k ; B 67 0 600 718 ; +C 108 ; WX 222 ; N l ; B 67 0 308 718 ; +C 109 ; WX 833 ; N m ; B 65 0 852 538 ; +C 110 ; WX 556 ; N n ; B 65 0 573 538 ; +C 111 ; WX 556 ; N o ; B 83 -14 585 538 ; +C 112 ; WX 556 ; N p ; B 14 -207 584 538 ; +C 113 ; WX 556 ; N q ; B 84 -207 605 538 ; +C 114 ; WX 333 ; N r ; B 77 0 446 538 ; +C 115 ; WX 500 ; N s ; B 63 -15 529 538 ; +C 116 ; WX 278 ; N t ; B 102 -7 368 669 ; +C 117 ; WX 556 ; N u ; B 94 -15 600 523 ; +C 118 ; WX 500 ; N v ; B 119 0 603 523 ; +C 119 ; WX 722 ; N w ; B 125 0 820 523 ; +C 120 ; WX 500 ; N x ; B 11 0 594 523 ; +C 121 ; WX 500 ; N y ; B 15 -214 600 523 ; +C 122 ; WX 500 ; N z ; B 31 0 571 523 ; +C 123 ; WX 334 ; N braceleft ; B 92 -196 445 722 ; +C 124 ; WX 260 ; N bar ; B 46 -225 332 775 ; +C 125 ; WX 334 ; N braceright ; B 0 -196 354 722 ; +C 126 ; WX 584 ; N asciitilde ; B 111 180 580 326 ; +C 161 ; WX 333 ; N exclamdown ; B 77 -195 326 523 ; +C 162 ; WX 556 ; N cent ; B 95 -115 584 623 ; +C 163 ; WX 556 ; N sterling ; B 49 -16 634 718 ; +C 164 ; WX 167 ; N fraction ; B -170 -19 482 703 ; +C 165 ; WX 556 ; N yen ; B 81 0 699 688 ; +C 166 ; WX 556 ; N florin ; B -52 -207 654 737 ; +C 167 ; WX 556 ; N section ; B 76 -191 584 737 ; +C 168 ; WX 556 ; N currency ; B 60 99 646 603 ; +C 169 ; WX 191 ; N quotesingle ; B 157 463 285 718 ; +C 170 ; WX 333 ; N quotedblleft ; B 138 470 461 725 ; +C 171 ; WX 556 ; N guillemotleft ; B 146 108 554 446 ; +C 172 ; WX 333 ; N guilsinglleft ; B 137 108 340 446 ; +C 173 ; WX 333 ; N guilsinglright ; B 111 108 314 446 ; +C 174 ; WX 500 ; N fi ; B 86 0 587 728 ; +C 175 ; WX 500 ; N fl ; B 86 0 585 728 ; +C 177 ; WX 556 ; N endash ; B 51 240 623 313 ; +C 178 ; WX 556 ; N dagger ; B 135 -159 622 718 ; +C 179 ; WX 556 ; N daggerdbl ; B 52 -159 623 718 ; +C 180 ; WX 278 ; N periodcentered ; B 129 190 257 315 ; +C 182 ; WX 537 ; N paragraph ; B 126 -173 650 718 ; +C 183 ; WX 350 ; N bullet ; B 91 202 413 517 ; +C 184 ; WX 222 ; N quotesinglbase ; B 21 -149 180 106 ; +C 185 ; WX 333 ; N quotedblbase ; B -6 -149 318 106 ; +C 186 ; WX 333 ; N quotedblright ; B 124 463 448 718 ; +C 187 ; WX 556 ; N guillemotright ; B 120 108 528 446 ; +C 188 ; WX 1000 ; N ellipsis ; B 115 0 908 106 ; +C 189 ; WX 1000 ; N perthousand ; B 88 -19 1029 703 ; +C 191 ; WX 611 ; N questiondown ; B 85 -201 534 525 ; +C 193 ; WX 333 ; N grave ; B 170 593 337 734 ; +C 194 ; WX 333 ; N acute ; B 248 593 475 734 ; +C 195 ; WX 333 ; N circumflex ; B 147 593 438 734 ; +C 196 ; WX 333 ; N tilde ; B 125 606 490 722 ; +C 197 ; WX 333 ; N macron ; B 143 627 468 684 ; +C 198 ; WX 333 ; N breve ; B 167 595 476 731 ; +C 199 ; WX 333 ; N dotaccent ; B 249 604 362 706 ; +C 200 ; WX 333 ; N dieresis ; B 168 604 443 706 ; +C 202 ; WX 333 ; N ring ; B 214 572 402 756 ; +C 203 ; WX 333 ; N cedilla ; B 2 -225 232 0 ; +C 205 ; WX 333 ; N hungarumlaut ; B 157 593 565 734 ; +C 206 ; WX 333 ; N ogonek ; B 43 -225 249 0 ; +C 207 ; WX 333 ; N caron ; B 177 593 468 734 ; +C 208 ; WX 1000 ; N emdash ; B 51 240 1067 313 ; +C 225 ; WX 1000 ; N AE ; B 8 0 1097 718 ; +C 227 ; WX 370 ; N ordfeminine ; B 127 405 449 737 ; +C 232 ; WX 556 ; N Lslash ; B 41 0 555 718 ; +C 233 ; WX 778 ; N Oslash ; B 43 -19 890 737 ; +C 234 ; WX 1000 ; N OE ; B 98 -19 1116 737 ; +C 235 ; WX 365 ; N ordmasculine ; B 141 405 468 737 ; +C 241 ; WX 889 ; N ae ; B 61 -15 909 538 ; +C 245 ; WX 278 ; N dotlessi ; B 95 0 294 523 ; +C 248 ; WX 222 ; N lslash ; B 41 0 347 718 ; +C 249 ; WX 611 ; N oslash ; B 29 -22 647 545 ; +C 250 ; WX 944 ; N oe ; B 83 -15 964 538 ; +C 251 ; WX 611 ; N germandbls ; B 67 -15 658 728 ; +C -1 ; WX 278 ; N Idieresis ; B 91 0 458 901 ; +C -1 ; WX 556 ; N eacute ; B 84 -15 587 734 ; +C -1 ; WX 556 ; N abreve ; B 61 -15 578 731 ; +C -1 ; WX 556 ; N uhungarumlaut ; B 94 -15 677 734 ; +C -1 ; WX 556 ; N ecaron ; B 84 -15 580 734 ; +C -1 ; WX 667 ; N Ydieresis ; B 167 0 806 901 ; +C -1 ; WX 584 ; N divide ; B 85 -19 606 524 ; +C -1 ; WX 667 ; N Yacute ; B 167 0 806 929 ; +C -1 ; WX 667 ; N Acircumflex ; B 14 0 654 929 ; +C -1 ; WX 556 ; N aacute ; B 61 -15 587 734 ; +C -1 ; WX 722 ; N Ucircumflex ; B 123 -19 797 929 ; +C -1 ; WX 500 ; N yacute ; B 15 -214 600 734 ; +C -1 ; WX 500 ; N scommaaccent ; B 63 -225 529 538 ; +C -1 ; WX 556 ; N ecircumflex ; B 84 -15 578 734 ; +C -1 ; WX 722 ; N Uring ; B 123 -19 797 931 ; +C -1 ; WX 722 ; N Udieresis ; B 123 -19 797 901 ; +C -1 ; WX 556 ; N aogonek ; B 61 -220 559 538 ; +C -1 ; WX 722 ; N Uacute ; B 123 -19 797 929 ; +C -1 ; WX 556 ; N uogonek ; B 94 -225 600 523 ; +C -1 ; WX 667 ; N Edieresis ; B 86 0 762 901 ; +C -1 ; WX 722 ; N Dcroat ; B 69 0 764 718 ; +C -1 ; WX 250 ; N commaaccent ; B 39 -225 172 -40 ; +C -1 ; WX 737 ; N copyright ; B 54 -19 837 737 ; +C -1 ; WX 667 ; N Emacron ; B 86 0 762 879 ; +C -1 ; WX 500 ; N ccaron ; B 74 -15 553 734 ; +C -1 ; WX 556 ; N aring ; B 61 -15 559 756 ; +C -1 ; WX 722 ; N Ncommaaccent ; B 76 -225 799 718 ; +C -1 ; WX 222 ; N lacute ; B 67 0 461 929 ; +C -1 ; WX 556 ; N agrave ; B 61 -15 559 734 ; +C -1 ; WX 611 ; N Tcommaaccent ; B 148 -225 750 718 ; +C -1 ; WX 722 ; N Cacute ; B 108 -19 782 929 ; +C -1 ; WX 556 ; N atilde ; B 61 -15 592 722 ; +C -1 ; WX 667 ; N Edotaccent ; B 86 0 762 901 ; +C -1 ; WX 500 ; N scaron ; B 63 -15 552 734 ; +C -1 ; WX 500 ; N scedilla ; B 63 -225 529 538 ; +C -1 ; WX 278 ; N iacute ; B 95 0 448 734 ; +C -1 ; WX 471 ; N lozenge ; B 88 0 540 728 ; +C -1 ; WX 722 ; N Rcaron ; B 88 0 773 929 ; +C -1 ; WX 778 ; N Gcommaaccent ; B 111 -225 799 737 ; +C -1 ; WX 556 ; N ucircumflex ; B 94 -15 600 734 ; +C -1 ; WX 556 ; N acircumflex ; B 61 -15 559 734 ; +C -1 ; WX 667 ; N Amacron ; B 14 0 677 879 ; +C -1 ; WX 333 ; N rcaron ; B 77 0 508 734 ; +C -1 ; WX 500 ; N ccedilla ; B 74 -225 553 538 ; +C -1 ; WX 611 ; N Zdotaccent ; B 23 0 741 901 ; +C -1 ; WX 667 ; N Thorn ; B 86 0 712 718 ; +C -1 ; WX 778 ; N Omacron ; B 105 -19 826 879 ; +C -1 ; WX 722 ; N Racute ; B 88 0 773 929 ; +C -1 ; WX 667 ; N Sacute ; B 90 -19 713 929 ; +C -1 ; WX 643 ; N dcaron ; B 84 -15 808 718 ; +C -1 ; WX 722 ; N Umacron ; B 123 -19 797 879 ; +C -1 ; WX 556 ; N uring ; B 94 -15 600 756 ; +C -1 ; WX 333 ; N threesuperior ; B 90 270 436 703 ; +C -1 ; WX 778 ; N Ograve ; B 105 -19 826 929 ; +C -1 ; WX 667 ; N Agrave ; B 14 0 654 929 ; +C -1 ; WX 667 ; N Abreve ; B 14 0 685 926 ; +C -1 ; WX 584 ; N multiply ; B 50 0 642 506 ; +C -1 ; WX 556 ; N uacute ; B 94 -15 600 734 ; +C -1 ; WX 611 ; N Tcaron ; B 148 0 750 929 ; +C -1 ; WX 476 ; N partialdiff ; B 41 -38 550 714 ; +C -1 ; WX 500 ; N ydieresis ; B 15 -214 600 706 ; +C -1 ; WX 722 ; N Nacute ; B 76 0 799 929 ; +C -1 ; WX 278 ; N icircumflex ; B 95 0 411 734 ; +C -1 ; WX 667 ; N Ecircumflex ; B 86 0 762 929 ; +C -1 ; WX 556 ; N adieresis ; B 61 -15 559 706 ; +C -1 ; WX 556 ; N edieresis ; B 84 -15 578 706 ; +C -1 ; WX 500 ; N cacute ; B 74 -15 559 734 ; +C -1 ; WX 556 ; N nacute ; B 65 0 587 734 ; +C -1 ; WX 556 ; N umacron ; B 94 -15 600 684 ; +C -1 ; WX 722 ; N Ncaron ; B 76 0 799 929 ; +C -1 ; WX 278 ; N Iacute ; B 91 0 489 929 ; +C -1 ; WX 584 ; N plusminus ; B 39 0 618 506 ; +C -1 ; WX 260 ; N brokenbar ; B 62 -150 316 700 ; +C -1 ; WX 737 ; N registered ; B 54 -19 837 737 ; +C -1 ; WX 778 ; N Gbreve ; B 111 -19 799 926 ; +C -1 ; WX 278 ; N Idotaccent ; B 91 0 377 901 ; +C -1 ; WX 600 ; N summation ; B 15 -10 671 706 ; +C -1 ; WX 667 ; N Egrave ; B 86 0 762 929 ; +C -1 ; WX 333 ; N racute ; B 77 0 475 734 ; +C -1 ; WX 556 ; N omacron ; B 83 -14 585 684 ; +C -1 ; WX 611 ; N Zacute ; B 23 0 741 929 ; +C -1 ; WX 611 ; N Zcaron ; B 23 0 741 929 ; +C -1 ; WX 549 ; N greaterequal ; B 26 0 620 674 ; +C -1 ; WX 722 ; N Eth ; B 69 0 764 718 ; +C -1 ; WX 722 ; N Ccedilla ; B 108 -225 782 737 ; +C -1 ; WX 222 ; N lcommaaccent ; B 25 -225 308 718 ; +C -1 ; WX 317 ; N tcaron ; B 102 -7 501 808 ; +C -1 ; WX 556 ; N eogonek ; B 84 -225 578 538 ; +C -1 ; WX 722 ; N Uogonek ; B 123 -225 797 718 ; +C -1 ; WX 667 ; N Aacute ; B 14 0 683 929 ; +C -1 ; WX 667 ; N Adieresis ; B 14 0 654 901 ; +C -1 ; WX 556 ; N egrave ; B 84 -15 578 734 ; +C -1 ; WX 500 ; N zacute ; B 31 0 571 734 ; +C -1 ; WX 222 ; N iogonek ; B -61 -225 308 718 ; +C -1 ; WX 778 ; N Oacute ; B 105 -19 826 929 ; +C -1 ; WX 556 ; N oacute ; B 83 -14 587 734 ; +C -1 ; WX 556 ; N amacron ; B 61 -15 580 684 ; +C -1 ; WX 500 ; N sacute ; B 63 -15 559 734 ; +C -1 ; WX 278 ; N idieresis ; B 95 0 416 706 ; +C -1 ; WX 778 ; N Ocircumflex ; B 105 -19 826 929 ; +C -1 ; WX 722 ; N Ugrave ; B 123 -19 797 929 ; +C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ; +C -1 ; WX 556 ; N thorn ; B 14 -207 584 718 ; +C -1 ; WX 333 ; N twosuperior ; B 64 281 449 703 ; +C -1 ; WX 778 ; N Odieresis ; B 105 -19 826 901 ; +C -1 ; WX 556 ; N mu ; B 24 -207 600 523 ; +C -1 ; WX 278 ; N igrave ; B 95 0 310 734 ; +C -1 ; WX 556 ; N ohungarumlaut ; B 83 -14 677 734 ; +C -1 ; WX 667 ; N Eogonek ; B 86 -220 762 718 ; +C -1 ; WX 556 ; N dcroat ; B 84 -15 689 718 ; +C -1 ; WX 834 ; N threequarters ; B 130 -19 861 703 ; +C -1 ; WX 667 ; N Scedilla ; B 90 -225 713 737 ; +C -1 ; WX 299 ; N lcaron ; B 67 0 464 718 ; +C -1 ; WX 667 ; N Kcommaaccent ; B 76 -225 808 718 ; +C -1 ; WX 556 ; N Lacute ; B 76 0 555 929 ; +C -1 ; WX 1000 ; N trademark ; B 186 306 1056 718 ; +C -1 ; WX 556 ; N edotaccent ; B 84 -15 578 706 ; +C -1 ; WX 278 ; N Igrave ; B 91 0 351 929 ; +C -1 ; WX 278 ; N Imacron ; B 91 0 483 879 ; +C -1 ; WX 556 ; N Lcaron ; B 76 0 570 718 ; +C -1 ; WX 834 ; N onehalf ; B 114 -19 839 703 ; +C -1 ; WX 549 ; N lessequal ; B 26 0 666 674 ; +C -1 ; WX 556 ; N ocircumflex ; B 83 -14 585 734 ; +C -1 ; WX 556 ; N ntilde ; B 65 0 592 722 ; +C -1 ; WX 722 ; N Uhungarumlaut ; B 123 -19 801 929 ; +C -1 ; WX 667 ; N Eacute ; B 86 0 762 929 ; +C -1 ; WX 556 ; N emacron ; B 84 -15 580 684 ; +C -1 ; WX 556 ; N gbreve ; B 42 -220 610 731 ; +C -1 ; WX 834 ; N onequarter ; B 150 -19 802 703 ; +C -1 ; WX 667 ; N Scaron ; B 90 -19 713 929 ; +C -1 ; WX 667 ; N Scommaaccent ; B 90 -225 713 737 ; +C -1 ; WX 778 ; N Ohungarumlaut ; B 105 -19 829 929 ; +C -1 ; WX 400 ; N degree ; B 169 411 468 703 ; +C -1 ; WX 556 ; N ograve ; B 83 -14 585 734 ; +C -1 ; WX 722 ; N Ccaron ; B 108 -19 782 929 ; +C -1 ; WX 556 ; N ugrave ; B 94 -15 600 734 ; +C -1 ; WX 453 ; N radical ; B 79 -80 617 762 ; +C -1 ; WX 722 ; N Dcaron ; B 81 0 764 929 ; +C -1 ; WX 333 ; N rcommaaccent ; B 30 -225 446 538 ; +C -1 ; WX 722 ; N Ntilde ; B 76 0 799 917 ; +C -1 ; WX 556 ; N otilde ; B 83 -14 602 722 ; +C -1 ; WX 722 ; N Rcommaaccent ; B 88 -225 773 718 ; +C -1 ; WX 556 ; N Lcommaaccent ; B 76 -225 555 718 ; +C -1 ; WX 667 ; N Atilde ; B 14 0 699 917 ; +C -1 ; WX 667 ; N Aogonek ; B 14 -225 654 718 ; +C -1 ; WX 667 ; N Aring ; B 14 0 654 931 ; +C -1 ; WX 778 ; N Otilde ; B 105 -19 826 917 ; +C -1 ; WX 500 ; N zdotaccent ; B 31 0 571 706 ; +C -1 ; WX 667 ; N Ecaron ; B 86 0 762 929 ; +C -1 ; WX 278 ; N Iogonek ; B -33 -225 341 718 ; +C -1 ; WX 500 ; N kcommaaccent ; B 67 -225 600 718 ; +C -1 ; WX 584 ; N minus ; B 85 216 606 289 ; +C -1 ; WX 278 ; N Icircumflex ; B 91 0 452 929 ; +C -1 ; WX 556 ; N ncaron ; B 65 0 580 734 ; +C -1 ; WX 278 ; N tcommaaccent ; B 63 -225 368 669 ; +C -1 ; WX 584 ; N logicalnot ; B 106 108 628 390 ; +C -1 ; WX 556 ; N odieresis ; B 83 -14 585 706 ; +C -1 ; WX 556 ; N udieresis ; B 94 -15 600 706 ; +C -1 ; WX 549 ; N notequal ; B 34 -35 623 551 ; +C -1 ; WX 556 ; N gcommaaccent ; B 42 -220 610 822 ; +C -1 ; WX 556 ; N eth ; B 81 -15 617 737 ; +C -1 ; WX 500 ; N zcaron ; B 31 0 571 734 ; +C -1 ; WX 556 ; N ncommaaccent ; B 65 -225 573 538 ; +C -1 ; WX 333 ; N onesuperior ; B 166 281 371 703 ; +C -1 ; WX 278 ; N imacron ; B 95 0 417 684 ; +C -1 ; WX 556 ; N Euro ; B 0 0 0 0 ; +EndCharMetrics +StartKernData +StartKernPairs 2705 +KPX A C -30 +KPX A Cacute -30 +KPX A Ccaron -30 +KPX A Ccedilla -30 +KPX A G -30 +KPX A Gbreve -30 +KPX A Gcommaaccent -30 +KPX A O -30 +KPX A Oacute -30 +KPX A Ocircumflex -30 +KPX A Odieresis -30 +KPX A Ograve -30 +KPX A Ohungarumlaut -30 +KPX A Omacron -30 +KPX A Oslash -30 +KPX A Otilde -30 +KPX A Q -30 +KPX A T -120 +KPX A Tcaron -120 +KPX A Tcommaaccent -120 +KPX A U -50 +KPX A Uacute -50 +KPX A Ucircumflex -50 +KPX A Udieresis -50 +KPX A Ugrave -50 +KPX A Uhungarumlaut -50 +KPX A Umacron -50 +KPX A Uogonek -50 +KPX A Uring -50 +KPX A V -70 +KPX A W -50 +KPX A Y -100 +KPX A Yacute -100 +KPX A Ydieresis -100 +KPX A u -30 +KPX A uacute -30 +KPX A ucircumflex -30 +KPX A udieresis -30 +KPX A ugrave -30 +KPX A uhungarumlaut -30 +KPX A umacron -30 +KPX A uogonek -30 +KPX A uring -30 +KPX A v -40 +KPX A w -40 +KPX A y -40 +KPX A yacute -40 +KPX A ydieresis -40 +KPX Aacute C -30 +KPX Aacute Cacute -30 +KPX Aacute Ccaron -30 +KPX Aacute Ccedilla -30 +KPX Aacute G -30 +KPX Aacute Gbreve -30 +KPX Aacute Gcommaaccent -30 +KPX Aacute O -30 +KPX Aacute Oacute -30 +KPX Aacute Ocircumflex -30 +KPX Aacute Odieresis -30 +KPX Aacute Ograve -30 +KPX Aacute Ohungarumlaut -30 +KPX Aacute Omacron -30 +KPX Aacute Oslash -30 +KPX Aacute Otilde -30 +KPX Aacute Q -30 +KPX Aacute T -120 +KPX Aacute Tcaron -120 +KPX Aacute Tcommaaccent -120 +KPX Aacute U -50 +KPX Aacute Uacute -50 +KPX Aacute Ucircumflex -50 +KPX Aacute Udieresis -50 +KPX Aacute Ugrave -50 +KPX Aacute Uhungarumlaut -50 +KPX Aacute Umacron -50 +KPX Aacute Uogonek -50 +KPX Aacute Uring -50 +KPX Aacute V -70 +KPX Aacute W -50 +KPX Aacute Y -100 +KPX Aacute Yacute -100 +KPX Aacute Ydieresis -100 +KPX Aacute u -30 +KPX Aacute uacute -30 +KPX Aacute ucircumflex -30 +KPX Aacute udieresis -30 +KPX Aacute ugrave -30 +KPX Aacute uhungarumlaut -30 +KPX Aacute umacron -30 +KPX Aacute uogonek -30 +KPX Aacute uring -30 +KPX Aacute v -40 +KPX Aacute w -40 +KPX Aacute y -40 +KPX Aacute yacute -40 +KPX Aacute ydieresis -40 +KPX Abreve C -30 +KPX Abreve Cacute -30 +KPX Abreve Ccaron -30 +KPX Abreve Ccedilla -30 +KPX Abreve G -30 +KPX Abreve Gbreve -30 +KPX Abreve Gcommaaccent -30 +KPX Abreve O -30 +KPX Abreve Oacute -30 +KPX Abreve Ocircumflex -30 +KPX Abreve Odieresis -30 +KPX Abreve Ograve -30 +KPX Abreve Ohungarumlaut -30 +KPX Abreve Omacron -30 +KPX Abreve Oslash -30 +KPX Abreve Otilde -30 +KPX Abreve Q -30 +KPX Abreve T -120 +KPX Abreve Tcaron -120 +KPX Abreve Tcommaaccent -120 +KPX Abreve U -50 +KPX Abreve Uacute -50 +KPX Abreve Ucircumflex -50 +KPX Abreve Udieresis -50 +KPX Abreve Ugrave -50 +KPX Abreve Uhungarumlaut -50 +KPX Abreve Umacron -50 +KPX Abreve Uogonek -50 +KPX Abreve Uring -50 +KPX Abreve V -70 +KPX Abreve W -50 +KPX Abreve Y -100 +KPX Abreve Yacute -100 +KPX Abreve Ydieresis -100 +KPX Abreve u -30 +KPX Abreve uacute -30 +KPX Abreve ucircumflex -30 +KPX Abreve udieresis -30 +KPX Abreve ugrave -30 +KPX Abreve uhungarumlaut -30 +KPX Abreve umacron -30 +KPX Abreve uogonek -30 +KPX Abreve uring -30 +KPX Abreve v -40 +KPX Abreve w -40 +KPX Abreve y -40 +KPX Abreve yacute -40 +KPX Abreve ydieresis -40 +KPX Acircumflex C -30 +KPX Acircumflex Cacute -30 +KPX Acircumflex Ccaron -30 +KPX Acircumflex Ccedilla -30 +KPX Acircumflex G -30 +KPX Acircumflex Gbreve -30 +KPX Acircumflex Gcommaaccent -30 +KPX Acircumflex O -30 +KPX Acircumflex Oacute -30 +KPX Acircumflex Ocircumflex -30 +KPX Acircumflex Odieresis -30 +KPX Acircumflex Ograve -30 +KPX Acircumflex Ohungarumlaut -30 +KPX Acircumflex Omacron -30 +KPX Acircumflex Oslash -30 +KPX Acircumflex Otilde -30 +KPX Acircumflex Q -30 +KPX Acircumflex T -120 +KPX Acircumflex Tcaron -120 +KPX Acircumflex Tcommaaccent -120 +KPX Acircumflex U -50 +KPX Acircumflex Uacute -50 +KPX Acircumflex Ucircumflex -50 +KPX Acircumflex Udieresis -50 +KPX Acircumflex Ugrave -50 +KPX Acircumflex Uhungarumlaut -50 +KPX Acircumflex Umacron -50 +KPX Acircumflex Uogonek -50 +KPX Acircumflex Uring -50 +KPX Acircumflex V -70 +KPX Acircumflex W -50 +KPX Acircumflex Y -100 +KPX Acircumflex Yacute -100 +KPX Acircumflex Ydieresis -100 +KPX Acircumflex u -30 +KPX Acircumflex uacute -30 +KPX Acircumflex ucircumflex -30 +KPX Acircumflex udieresis -30 +KPX Acircumflex ugrave -30 +KPX Acircumflex uhungarumlaut -30 +KPX Acircumflex umacron -30 +KPX Acircumflex uogonek -30 +KPX Acircumflex uring -30 +KPX Acircumflex v -40 +KPX Acircumflex w -40 +KPX Acircumflex y -40 +KPX Acircumflex yacute -40 +KPX Acircumflex ydieresis -40 +KPX Adieresis C -30 +KPX Adieresis Cacute -30 +KPX Adieresis Ccaron -30 +KPX Adieresis Ccedilla -30 +KPX Adieresis G -30 +KPX Adieresis Gbreve -30 +KPX Adieresis Gcommaaccent -30 +KPX Adieresis O -30 +KPX Adieresis Oacute -30 +KPX Adieresis Ocircumflex -30 +KPX Adieresis Odieresis -30 +KPX Adieresis Ograve -30 +KPX Adieresis Ohungarumlaut -30 +KPX Adieresis Omacron -30 +KPX Adieresis Oslash -30 +KPX Adieresis Otilde -30 +KPX Adieresis Q -30 +KPX Adieresis T -120 +KPX Adieresis Tcaron -120 +KPX Adieresis Tcommaaccent -120 +KPX Adieresis U -50 +KPX Adieresis Uacute -50 +KPX Adieresis Ucircumflex -50 +KPX Adieresis Udieresis -50 +KPX Adieresis Ugrave -50 +KPX Adieresis Uhungarumlaut -50 +KPX Adieresis Umacron -50 +KPX Adieresis Uogonek -50 +KPX Adieresis Uring -50 +KPX Adieresis V -70 +KPX Adieresis W -50 +KPX Adieresis Y -100 +KPX Adieresis Yacute -100 +KPX Adieresis Ydieresis -100 +KPX Adieresis u -30 +KPX Adieresis uacute -30 +KPX Adieresis ucircumflex -30 +KPX Adieresis udieresis -30 +KPX Adieresis ugrave -30 +KPX Adieresis uhungarumlaut -30 +KPX Adieresis umacron -30 +KPX Adieresis uogonek -30 +KPX Adieresis uring -30 +KPX Adieresis v -40 +KPX Adieresis w -40 +KPX Adieresis y -40 +KPX Adieresis yacute -40 +KPX Adieresis ydieresis -40 +KPX Agrave C -30 +KPX Agrave Cacute -30 +KPX Agrave Ccaron -30 +KPX Agrave Ccedilla -30 +KPX Agrave G -30 +KPX Agrave Gbreve -30 +KPX Agrave Gcommaaccent -30 +KPX Agrave O -30 +KPX Agrave Oacute -30 +KPX Agrave Ocircumflex -30 +KPX Agrave Odieresis -30 +KPX Agrave Ograve -30 +KPX Agrave Ohungarumlaut -30 +KPX Agrave Omacron -30 +KPX Agrave Oslash -30 +KPX Agrave Otilde -30 +KPX Agrave Q -30 +KPX Agrave T -120 +KPX Agrave Tcaron -120 +KPX Agrave Tcommaaccent -120 +KPX Agrave U -50 +KPX Agrave Uacute -50 +KPX Agrave Ucircumflex -50 +KPX Agrave Udieresis -50 +KPX Agrave Ugrave -50 +KPX Agrave Uhungarumlaut -50 +KPX Agrave Umacron -50 +KPX Agrave Uogonek -50 +KPX Agrave Uring -50 +KPX Agrave V -70 +KPX Agrave W -50 +KPX Agrave Y -100 +KPX Agrave Yacute -100 +KPX Agrave Ydieresis -100 +KPX Agrave u -30 +KPX Agrave uacute -30 +KPX Agrave ucircumflex -30 +KPX Agrave udieresis -30 +KPX Agrave ugrave -30 +KPX Agrave uhungarumlaut -30 +KPX Agrave umacron -30 +KPX Agrave uogonek -30 +KPX Agrave uring -30 +KPX Agrave v -40 +KPX Agrave w -40 +KPX Agrave y -40 +KPX Agrave yacute -40 +KPX Agrave ydieresis -40 +KPX Amacron C -30 +KPX Amacron Cacute -30 +KPX Amacron Ccaron -30 +KPX Amacron Ccedilla -30 +KPX Amacron G -30 +KPX Amacron Gbreve -30 +KPX Amacron Gcommaaccent -30 +KPX Amacron O -30 +KPX Amacron Oacute -30 +KPX Amacron Ocircumflex -30 +KPX Amacron Odieresis -30 +KPX Amacron Ograve -30 +KPX Amacron Ohungarumlaut -30 +KPX Amacron Omacron -30 +KPX Amacron Oslash -30 +KPX Amacron Otilde -30 +KPX Amacron Q -30 +KPX Amacron T -120 +KPX Amacron Tcaron -120 +KPX Amacron Tcommaaccent -120 +KPX Amacron U -50 +KPX Amacron Uacute -50 +KPX Amacron Ucircumflex -50 +KPX Amacron Udieresis -50 +KPX Amacron Ugrave -50 +KPX Amacron Uhungarumlaut -50 +KPX Amacron Umacron -50 +KPX Amacron Uogonek -50 +KPX Amacron Uring -50 +KPX Amacron V -70 +KPX Amacron W -50 +KPX Amacron Y -100 +KPX Amacron Yacute -100 +KPX Amacron Ydieresis -100 +KPX Amacron u -30 +KPX Amacron uacute -30 +KPX Amacron ucircumflex -30 +KPX Amacron udieresis -30 +KPX Amacron ugrave -30 +KPX Amacron uhungarumlaut -30 +KPX Amacron umacron -30 +KPX Amacron uogonek -30 +KPX Amacron uring -30 +KPX Amacron v -40 +KPX Amacron w -40 +KPX Amacron y -40 +KPX Amacron yacute -40 +KPX Amacron ydieresis -40 +KPX Aogonek C -30 +KPX Aogonek Cacute -30 +KPX Aogonek Ccaron -30 +KPX Aogonek Ccedilla -30 +KPX Aogonek G -30 +KPX Aogonek Gbreve -30 +KPX Aogonek Gcommaaccent -30 +KPX Aogonek O -30 +KPX Aogonek Oacute -30 +KPX Aogonek Ocircumflex -30 +KPX Aogonek Odieresis -30 +KPX Aogonek Ograve -30 +KPX Aogonek Ohungarumlaut -30 +KPX Aogonek Omacron -30 +KPX Aogonek Oslash -30 +KPX Aogonek Otilde -30 +KPX Aogonek Q -30 +KPX Aogonek T -120 +KPX Aogonek Tcaron -120 +KPX Aogonek Tcommaaccent -120 +KPX Aogonek U -50 +KPX Aogonek Uacute -50 +KPX Aogonek Ucircumflex -50 +KPX Aogonek Udieresis -50 +KPX Aogonek Ugrave -50 +KPX Aogonek Uhungarumlaut -50 +KPX Aogonek Umacron -50 +KPX Aogonek Uogonek -50 +KPX Aogonek Uring -50 +KPX Aogonek V -70 +KPX Aogonek W -50 +KPX Aogonek Y -100 +KPX Aogonek Yacute -100 +KPX Aogonek Ydieresis -100 +KPX Aogonek u -30 +KPX Aogonek uacute -30 +KPX Aogonek ucircumflex -30 +KPX Aogonek udieresis -30 +KPX Aogonek ugrave -30 +KPX Aogonek uhungarumlaut -30 +KPX Aogonek umacron -30 +KPX Aogonek uogonek -30 +KPX Aogonek uring -30 +KPX Aogonek v -40 +KPX Aogonek w -40 +KPX Aogonek y -40 +KPX Aogonek yacute -40 +KPX Aogonek ydieresis -40 +KPX Aring C -30 +KPX Aring Cacute -30 +KPX Aring Ccaron -30 +KPX Aring Ccedilla -30 +KPX Aring G -30 +KPX Aring Gbreve -30 +KPX Aring Gcommaaccent -30 +KPX Aring O -30 +KPX Aring Oacute -30 +KPX Aring Ocircumflex -30 +KPX Aring Odieresis -30 +KPX Aring Ograve -30 +KPX Aring Ohungarumlaut -30 +KPX Aring Omacron -30 +KPX Aring Oslash -30 +KPX Aring Otilde -30 +KPX Aring Q -30 +KPX Aring T -120 +KPX Aring Tcaron -120 +KPX Aring Tcommaaccent -120 +KPX Aring U -50 +KPX Aring Uacute -50 +KPX Aring Ucircumflex -50 +KPX Aring Udieresis -50 +KPX Aring Ugrave -50 +KPX Aring Uhungarumlaut -50 +KPX Aring Umacron -50 +KPX Aring Uogonek -50 +KPX Aring Uring -50 +KPX Aring V -70 +KPX Aring W -50 +KPX Aring Y -100 +KPX Aring Yacute -100 +KPX Aring Ydieresis -100 +KPX Aring u -30 +KPX Aring uacute -30 +KPX Aring ucircumflex -30 +KPX Aring udieresis -30 +KPX Aring ugrave -30 +KPX Aring uhungarumlaut -30 +KPX Aring umacron -30 +KPX Aring uogonek -30 +KPX Aring uring -30 +KPX Aring v -40 +KPX Aring w -40 +KPX Aring y -40 +KPX Aring yacute -40 +KPX Aring ydieresis -40 +KPX Atilde C -30 +KPX Atilde Cacute -30 +KPX Atilde Ccaron -30 +KPX Atilde Ccedilla -30 +KPX Atilde G -30 +KPX Atilde Gbreve -30 +KPX Atilde Gcommaaccent -30 +KPX Atilde O -30 +KPX Atilde Oacute -30 +KPX Atilde Ocircumflex -30 +KPX Atilde Odieresis -30 +KPX Atilde Ograve -30 +KPX Atilde Ohungarumlaut -30 +KPX Atilde Omacron -30 +KPX Atilde Oslash -30 +KPX Atilde Otilde -30 +KPX Atilde Q -30 +KPX Atilde T -120 +KPX Atilde Tcaron -120 +KPX Atilde Tcommaaccent -120 +KPX Atilde U -50 +KPX Atilde Uacute -50 +KPX Atilde Ucircumflex -50 +KPX Atilde Udieresis -50 +KPX Atilde Ugrave -50 +KPX Atilde Uhungarumlaut -50 +KPX Atilde Umacron -50 +KPX Atilde Uogonek -50 +KPX Atilde Uring -50 +KPX Atilde V -70 +KPX Atilde W -50 +KPX Atilde Y -100 +KPX Atilde Yacute -100 +KPX Atilde Ydieresis -100 +KPX Atilde u -30 +KPX Atilde uacute -30 +KPX Atilde ucircumflex -30 +KPX Atilde udieresis -30 +KPX Atilde ugrave -30 +KPX Atilde uhungarumlaut -30 +KPX Atilde umacron -30 +KPX Atilde uogonek -30 +KPX Atilde uring -30 +KPX Atilde v -40 +KPX Atilde w -40 +KPX Atilde y -40 +KPX Atilde yacute -40 +KPX Atilde ydieresis -40 +KPX B U -10 +KPX B Uacute -10 +KPX B Ucircumflex -10 +KPX B Udieresis -10 +KPX B Ugrave -10 +KPX B Uhungarumlaut -10 +KPX B Umacron -10 +KPX B Uogonek -10 +KPX B Uring -10 +KPX B comma -20 +KPX B period -20 +KPX C comma -30 +KPX C period -30 +KPX Cacute comma -30 +KPX Cacute period -30 +KPX Ccaron comma -30 +KPX Ccaron period -30 +KPX Ccedilla comma -30 +KPX Ccedilla period -30 +KPX D A -40 +KPX D Aacute -40 +KPX D Abreve -40 +KPX D Acircumflex -40 +KPX D Adieresis -40 +KPX D Agrave -40 +KPX D Amacron -40 +KPX D Aogonek -40 +KPX D Aring -40 +KPX D Atilde -40 +KPX D V -70 +KPX D W -40 +KPX D Y -90 +KPX D Yacute -90 +KPX D Ydieresis -90 +KPX D comma -70 +KPX D period -70 +KPX Dcaron A -40 +KPX Dcaron Aacute -40 +KPX Dcaron Abreve -40 +KPX Dcaron Acircumflex -40 +KPX Dcaron Adieresis -40 +KPX Dcaron Agrave -40 +KPX Dcaron Amacron -40 +KPX Dcaron Aogonek -40 +KPX Dcaron Aring -40 +KPX Dcaron Atilde -40 +KPX Dcaron V -70 +KPX Dcaron W -40 +KPX Dcaron Y -90 +KPX Dcaron Yacute -90 +KPX Dcaron Ydieresis -90 +KPX Dcaron comma -70 +KPX Dcaron period -70 +KPX Dcroat A -40 +KPX Dcroat Aacute -40 +KPX Dcroat Abreve -40 +KPX Dcroat Acircumflex -40 +KPX Dcroat Adieresis -40 +KPX Dcroat Agrave -40 +KPX Dcroat Amacron -40 +KPX Dcroat Aogonek -40 +KPX Dcroat Aring -40 +KPX Dcroat Atilde -40 +KPX Dcroat V -70 +KPX Dcroat W -40 +KPX Dcroat Y -90 +KPX Dcroat Yacute -90 +KPX Dcroat Ydieresis -90 +KPX Dcroat comma -70 +KPX Dcroat period -70 +KPX F A -80 +KPX F Aacute -80 +KPX F Abreve -80 +KPX F Acircumflex -80 +KPX F Adieresis -80 +KPX F Agrave -80 +KPX F Amacron -80 +KPX F Aogonek -80 +KPX F Aring -80 +KPX F Atilde -80 +KPX F a -50 +KPX F aacute -50 +KPX F abreve -50 +KPX F acircumflex -50 +KPX F adieresis -50 +KPX F agrave -50 +KPX F amacron -50 +KPX F aogonek -50 +KPX F aring -50 +KPX F atilde -50 +KPX F comma -150 +KPX F e -30 +KPX F eacute -30 +KPX F ecaron -30 +KPX F ecircumflex -30 +KPX F edieresis -30 +KPX F edotaccent -30 +KPX F egrave -30 +KPX F emacron -30 +KPX F eogonek -30 +KPX F o -30 +KPX F oacute -30 +KPX F ocircumflex -30 +KPX F odieresis -30 +KPX F ograve -30 +KPX F ohungarumlaut -30 +KPX F omacron -30 +KPX F oslash -30 +KPX F otilde -30 +KPX F period -150 +KPX F r -45 +KPX F racute -45 +KPX F rcaron -45 +KPX F rcommaaccent -45 +KPX J A -20 +KPX J Aacute -20 +KPX J Abreve -20 +KPX J Acircumflex -20 +KPX J Adieresis -20 +KPX J Agrave -20 +KPX J Amacron -20 +KPX J Aogonek -20 +KPX J Aring -20 +KPX J Atilde -20 +KPX J a -20 +KPX J aacute -20 +KPX J abreve -20 +KPX J acircumflex -20 +KPX J adieresis -20 +KPX J agrave -20 +KPX J amacron -20 +KPX J aogonek -20 +KPX J aring -20 +KPX J atilde -20 +KPX J comma -30 +KPX J period -30 +KPX J u -20 +KPX J uacute -20 +KPX J ucircumflex -20 +KPX J udieresis -20 +KPX J ugrave -20 +KPX J uhungarumlaut -20 +KPX J umacron -20 +KPX J uogonek -20 +KPX J uring -20 +KPX K O -50 +KPX K Oacute -50 +KPX K Ocircumflex -50 +KPX K Odieresis -50 +KPX K Ograve -50 +KPX K Ohungarumlaut -50 +KPX K Omacron -50 +KPX K Oslash -50 +KPX K Otilde -50 +KPX K e -40 +KPX K eacute -40 +KPX K ecaron -40 +KPX K ecircumflex -40 +KPX K edieresis -40 +KPX K edotaccent -40 +KPX K egrave -40 +KPX K emacron -40 +KPX K eogonek -40 +KPX K o -40 +KPX K oacute -40 +KPX K ocircumflex -40 +KPX K odieresis -40 +KPX K ograve -40 +KPX K ohungarumlaut -40 +KPX K omacron -40 +KPX K oslash -40 +KPX K otilde -40 +KPX K u -30 +KPX K uacute -30 +KPX K ucircumflex -30 +KPX K udieresis -30 +KPX K ugrave -30 +KPX K uhungarumlaut -30 +KPX K umacron -30 +KPX K uogonek -30 +KPX K uring -30 +KPX K y -50 +KPX K yacute -50 +KPX K ydieresis -50 +KPX Kcommaaccent O -50 +KPX Kcommaaccent Oacute -50 +KPX Kcommaaccent Ocircumflex -50 +KPX Kcommaaccent Odieresis -50 +KPX Kcommaaccent Ograve -50 +KPX Kcommaaccent Ohungarumlaut -50 +KPX Kcommaaccent Omacron -50 +KPX Kcommaaccent Oslash -50 +KPX Kcommaaccent Otilde -50 +KPX Kcommaaccent e -40 +KPX Kcommaaccent eacute -40 +KPX Kcommaaccent ecaron -40 +KPX Kcommaaccent ecircumflex -40 +KPX Kcommaaccent edieresis -40 +KPX Kcommaaccent edotaccent -40 +KPX Kcommaaccent egrave -40 +KPX Kcommaaccent emacron -40 +KPX Kcommaaccent eogonek -40 +KPX Kcommaaccent o -40 +KPX Kcommaaccent oacute -40 +KPX Kcommaaccent ocircumflex -40 +KPX Kcommaaccent odieresis -40 +KPX Kcommaaccent ograve -40 +KPX Kcommaaccent ohungarumlaut -40 +KPX Kcommaaccent omacron -40 +KPX Kcommaaccent oslash -40 +KPX Kcommaaccent otilde -40 +KPX Kcommaaccent u -30 +KPX Kcommaaccent uacute -30 +KPX Kcommaaccent ucircumflex -30 +KPX Kcommaaccent udieresis -30 +KPX Kcommaaccent ugrave -30 +KPX Kcommaaccent uhungarumlaut -30 +KPX Kcommaaccent umacron -30 +KPX Kcommaaccent uogonek -30 +KPX Kcommaaccent uring -30 +KPX Kcommaaccent y -50 +KPX Kcommaaccent yacute -50 +KPX Kcommaaccent ydieresis -50 +KPX L T -110 +KPX L Tcaron -110 +KPX L Tcommaaccent -110 +KPX L V -110 +KPX L W -70 +KPX L Y -140 +KPX L Yacute -140 +KPX L Ydieresis -140 +KPX L quotedblright -140 +KPX L quoteright -160 +KPX L y -30 +KPX L yacute -30 +KPX L ydieresis -30 +KPX Lacute T -110 +KPX Lacute Tcaron -110 +KPX Lacute Tcommaaccent -110 +KPX Lacute V -110 +KPX Lacute W -70 +KPX Lacute Y -140 +KPX Lacute Yacute -140 +KPX Lacute Ydieresis -140 +KPX Lacute quotedblright -140 +KPX Lacute quoteright -160 +KPX Lacute y -30 +KPX Lacute yacute -30 +KPX Lacute ydieresis -30 +KPX Lcaron T -110 +KPX Lcaron Tcaron -110 +KPX Lcaron Tcommaaccent -110 +KPX Lcaron V -110 +KPX Lcaron W -70 +KPX Lcaron Y -140 +KPX Lcaron Yacute -140 +KPX Lcaron Ydieresis -140 +KPX Lcaron quotedblright -140 +KPX Lcaron quoteright -160 +KPX Lcaron y -30 +KPX Lcaron yacute -30 +KPX Lcaron ydieresis -30 +KPX Lcommaaccent T -110 +KPX Lcommaaccent Tcaron -110 +KPX Lcommaaccent Tcommaaccent -110 +KPX Lcommaaccent V -110 +KPX Lcommaaccent W -70 +KPX Lcommaaccent Y -140 +KPX Lcommaaccent Yacute -140 +KPX Lcommaaccent Ydieresis -140 +KPX Lcommaaccent quotedblright -140 +KPX Lcommaaccent quoteright -160 +KPX Lcommaaccent y -30 +KPX Lcommaaccent yacute -30 +KPX Lcommaaccent ydieresis -30 +KPX Lslash T -110 +KPX Lslash Tcaron -110 +KPX Lslash Tcommaaccent -110 +KPX Lslash V -110 +KPX Lslash W -70 +KPX Lslash Y -140 +KPX Lslash Yacute -140 +KPX Lslash Ydieresis -140 +KPX Lslash quotedblright -140 +KPX Lslash quoteright -160 +KPX Lslash y -30 +KPX Lslash yacute -30 +KPX Lslash ydieresis -30 +KPX O A -20 +KPX O Aacute -20 +KPX O Abreve -20 +KPX O Acircumflex -20 +KPX O Adieresis -20 +KPX O Agrave -20 +KPX O Amacron -20 +KPX O Aogonek -20 +KPX O Aring -20 +KPX O Atilde -20 +KPX O T -40 +KPX O Tcaron -40 +KPX O Tcommaaccent -40 +KPX O V -50 +KPX O W -30 +KPX O X -60 +KPX O Y -70 +KPX O Yacute -70 +KPX O Ydieresis -70 +KPX O comma -40 +KPX O period -40 +KPX Oacute A -20 +KPX Oacute Aacute -20 +KPX Oacute Abreve -20 +KPX Oacute Acircumflex -20 +KPX Oacute Adieresis -20 +KPX Oacute Agrave -20 +KPX Oacute Amacron -20 +KPX Oacute Aogonek -20 +KPX Oacute Aring -20 +KPX Oacute Atilde -20 +KPX Oacute T -40 +KPX Oacute Tcaron -40 +KPX Oacute Tcommaaccent -40 +KPX Oacute V -50 +KPX Oacute W -30 +KPX Oacute X -60 +KPX Oacute Y -70 +KPX Oacute Yacute -70 +KPX Oacute Ydieresis -70 +KPX Oacute comma -40 +KPX Oacute period -40 +KPX Ocircumflex A -20 +KPX Ocircumflex Aacute -20 +KPX Ocircumflex Abreve -20 +KPX Ocircumflex Acircumflex -20 +KPX Ocircumflex Adieresis -20 +KPX Ocircumflex Agrave -20 +KPX Ocircumflex Amacron -20 +KPX Ocircumflex Aogonek -20 +KPX Ocircumflex Aring -20 +KPX Ocircumflex Atilde -20 +KPX Ocircumflex T -40 +KPX Ocircumflex Tcaron -40 +KPX Ocircumflex Tcommaaccent -40 +KPX Ocircumflex V -50 +KPX Ocircumflex W -30 +KPX Ocircumflex X -60 +KPX Ocircumflex Y -70 +KPX Ocircumflex Yacute -70 +KPX Ocircumflex Ydieresis -70 +KPX Ocircumflex comma -40 +KPX Ocircumflex period -40 +KPX Odieresis A -20 +KPX Odieresis Aacute -20 +KPX Odieresis Abreve -20 +KPX Odieresis Acircumflex -20 +KPX Odieresis Adieresis -20 +KPX Odieresis Agrave -20 +KPX Odieresis Amacron -20 +KPX Odieresis Aogonek -20 +KPX Odieresis Aring -20 +KPX Odieresis Atilde -20 +KPX Odieresis T -40 +KPX Odieresis Tcaron -40 +KPX Odieresis Tcommaaccent -40 +KPX Odieresis V -50 +KPX Odieresis W -30 +KPX Odieresis X -60 +KPX Odieresis Y -70 +KPX Odieresis Yacute -70 +KPX Odieresis Ydieresis -70 +KPX Odieresis comma -40 +KPX Odieresis period -40 +KPX Ograve A -20 +KPX Ograve Aacute -20 +KPX Ograve Abreve -20 +KPX Ograve Acircumflex -20 +KPX Ograve Adieresis -20 +KPX Ograve Agrave -20 +KPX Ograve Amacron -20 +KPX Ograve Aogonek -20 +KPX Ograve Aring -20 +KPX Ograve Atilde -20 +KPX Ograve T -40 +KPX Ograve Tcaron -40 +KPX Ograve Tcommaaccent -40 +KPX Ograve V -50 +KPX Ograve W -30 +KPX Ograve X -60 +KPX Ograve Y -70 +KPX Ograve Yacute -70 +KPX Ograve Ydieresis -70 +KPX Ograve comma -40 +KPX Ograve period -40 +KPX Ohungarumlaut A -20 +KPX Ohungarumlaut Aacute -20 +KPX Ohungarumlaut Abreve -20 +KPX Ohungarumlaut Acircumflex -20 +KPX Ohungarumlaut Adieresis -20 +KPX Ohungarumlaut Agrave -20 +KPX Ohungarumlaut Amacron -20 +KPX Ohungarumlaut Aogonek -20 +KPX Ohungarumlaut Aring -20 +KPX Ohungarumlaut Atilde -20 +KPX Ohungarumlaut T -40 +KPX Ohungarumlaut Tcaron -40 +KPX Ohungarumlaut Tcommaaccent -40 +KPX Ohungarumlaut V -50 +KPX Ohungarumlaut W -30 +KPX Ohungarumlaut X -60 +KPX Ohungarumlaut Y -70 +KPX Ohungarumlaut Yacute -70 +KPX Ohungarumlaut Ydieresis -70 +KPX Ohungarumlaut comma -40 +KPX Ohungarumlaut period -40 +KPX Omacron A -20 +KPX Omacron Aacute -20 +KPX Omacron Abreve -20 +KPX Omacron Acircumflex -20 +KPX Omacron Adieresis -20 +KPX Omacron Agrave -20 +KPX Omacron Amacron -20 +KPX Omacron Aogonek -20 +KPX Omacron Aring -20 +KPX Omacron Atilde -20 +KPX Omacron T -40 +KPX Omacron Tcaron -40 +KPX Omacron Tcommaaccent -40 +KPX Omacron V -50 +KPX Omacron W -30 +KPX Omacron X -60 +KPX Omacron Y -70 +KPX Omacron Yacute -70 +KPX Omacron Ydieresis -70 +KPX Omacron comma -40 +KPX Omacron period -40 +KPX Oslash A -20 +KPX Oslash Aacute -20 +KPX Oslash Abreve -20 +KPX Oslash Acircumflex -20 +KPX Oslash Adieresis -20 +KPX Oslash Agrave -20 +KPX Oslash Amacron -20 +KPX Oslash Aogonek -20 +KPX Oslash Aring -20 +KPX Oslash Atilde -20 +KPX Oslash T -40 +KPX Oslash Tcaron -40 +KPX Oslash Tcommaaccent -40 +KPX Oslash V -50 +KPX Oslash W -30 +KPX Oslash X -60 +KPX Oslash Y -70 +KPX Oslash Yacute -70 +KPX Oslash Ydieresis -70 +KPX Oslash comma -40 +KPX Oslash period -40 +KPX Otilde A -20 +KPX Otilde Aacute -20 +KPX Otilde Abreve -20 +KPX Otilde Acircumflex -20 +KPX Otilde Adieresis -20 +KPX Otilde Agrave -20 +KPX Otilde Amacron -20 +KPX Otilde Aogonek -20 +KPX Otilde Aring -20 +KPX Otilde Atilde -20 +KPX Otilde T -40 +KPX Otilde Tcaron -40 +KPX Otilde Tcommaaccent -40 +KPX Otilde V -50 +KPX Otilde W -30 +KPX Otilde X -60 +KPX Otilde Y -70 +KPX Otilde Yacute -70 +KPX Otilde Ydieresis -70 +KPX Otilde comma -40 +KPX Otilde period -40 +KPX P A -120 +KPX P Aacute -120 +KPX P Abreve -120 +KPX P Acircumflex -120 +KPX P Adieresis -120 +KPX P Agrave -120 +KPX P Amacron -120 +KPX P Aogonek -120 +KPX P Aring -120 +KPX P Atilde -120 +KPX P a -40 +KPX P aacute -40 +KPX P abreve -40 +KPX P acircumflex -40 +KPX P adieresis -40 +KPX P agrave -40 +KPX P amacron -40 +KPX P aogonek -40 +KPX P aring -40 +KPX P atilde -40 +KPX P comma -180 +KPX P e -50 +KPX P eacute -50 +KPX P ecaron -50 +KPX P ecircumflex -50 +KPX P edieresis -50 +KPX P edotaccent -50 +KPX P egrave -50 +KPX P emacron -50 +KPX P eogonek -50 +KPX P o -50 +KPX P oacute -50 +KPX P ocircumflex -50 +KPX P odieresis -50 +KPX P ograve -50 +KPX P ohungarumlaut -50 +KPX P omacron -50 +KPX P oslash -50 +KPX P otilde -50 +KPX P period -180 +KPX Q U -10 +KPX Q Uacute -10 +KPX Q Ucircumflex -10 +KPX Q Udieresis -10 +KPX Q Ugrave -10 +KPX Q Uhungarumlaut -10 +KPX Q Umacron -10 +KPX Q Uogonek -10 +KPX Q Uring -10 +KPX R O -20 +KPX R Oacute -20 +KPX R Ocircumflex -20 +KPX R Odieresis -20 +KPX R Ograve -20 +KPX R Ohungarumlaut -20 +KPX R Omacron -20 +KPX R Oslash -20 +KPX R Otilde -20 +KPX R T -30 +KPX R Tcaron -30 +KPX R Tcommaaccent -30 +KPX R U -40 +KPX R Uacute -40 +KPX R Ucircumflex -40 +KPX R Udieresis -40 +KPX R Ugrave -40 +KPX R Uhungarumlaut -40 +KPX R Umacron -40 +KPX R Uogonek -40 +KPX R Uring -40 +KPX R V -50 +KPX R W -30 +KPX R Y -50 +KPX R Yacute -50 +KPX R Ydieresis -50 +KPX Racute O -20 +KPX Racute Oacute -20 +KPX Racute Ocircumflex -20 +KPX Racute Odieresis -20 +KPX Racute Ograve -20 +KPX Racute Ohungarumlaut -20 +KPX Racute Omacron -20 +KPX Racute Oslash -20 +KPX Racute Otilde -20 +KPX Racute T -30 +KPX Racute Tcaron -30 +KPX Racute Tcommaaccent -30 +KPX Racute U -40 +KPX Racute Uacute -40 +KPX Racute Ucircumflex -40 +KPX Racute Udieresis -40 +KPX Racute Ugrave -40 +KPX Racute Uhungarumlaut -40 +KPX Racute Umacron -40 +KPX Racute Uogonek -40 +KPX Racute Uring -40 +KPX Racute V -50 +KPX Racute W -30 +KPX Racute Y -50 +KPX Racute Yacute -50 +KPX Racute Ydieresis -50 +KPX Rcaron O -20 +KPX Rcaron Oacute -20 +KPX Rcaron Ocircumflex -20 +KPX Rcaron Odieresis -20 +KPX Rcaron Ograve -20 +KPX Rcaron Ohungarumlaut -20 +KPX Rcaron Omacron -20 +KPX Rcaron Oslash -20 +KPX Rcaron Otilde -20 +KPX Rcaron T -30 +KPX Rcaron Tcaron -30 +KPX Rcaron Tcommaaccent -30 +KPX Rcaron U -40 +KPX Rcaron Uacute -40 +KPX Rcaron Ucircumflex -40 +KPX Rcaron Udieresis -40 +KPX Rcaron Ugrave -40 +KPX Rcaron Uhungarumlaut -40 +KPX Rcaron Umacron -40 +KPX Rcaron Uogonek -40 +KPX Rcaron Uring -40 +KPX Rcaron V -50 +KPX Rcaron W -30 +KPX Rcaron Y -50 +KPX Rcaron Yacute -50 +KPX Rcaron Ydieresis -50 +KPX Rcommaaccent O -20 +KPX Rcommaaccent Oacute -20 +KPX Rcommaaccent Ocircumflex -20 +KPX Rcommaaccent Odieresis -20 +KPX Rcommaaccent Ograve -20 +KPX Rcommaaccent Ohungarumlaut -20 +KPX Rcommaaccent Omacron -20 +KPX Rcommaaccent Oslash -20 +KPX Rcommaaccent Otilde -20 +KPX Rcommaaccent T -30 +KPX Rcommaaccent Tcaron -30 +KPX Rcommaaccent Tcommaaccent -30 +KPX Rcommaaccent U -40 +KPX Rcommaaccent Uacute -40 +KPX Rcommaaccent Ucircumflex -40 +KPX Rcommaaccent Udieresis -40 +KPX Rcommaaccent Ugrave -40 +KPX Rcommaaccent Uhungarumlaut -40 +KPX Rcommaaccent Umacron -40 +KPX Rcommaaccent Uogonek -40 +KPX Rcommaaccent Uring -40 +KPX Rcommaaccent V -50 +KPX Rcommaaccent W -30 +KPX Rcommaaccent Y -50 +KPX Rcommaaccent Yacute -50 +KPX Rcommaaccent Ydieresis -50 +KPX S comma -20 +KPX S period -20 +KPX Sacute comma -20 +KPX Sacute period -20 +KPX Scaron comma -20 +KPX Scaron period -20 +KPX Scedilla comma -20 +KPX Scedilla period -20 +KPX Scommaaccent comma -20 +KPX Scommaaccent period -20 +KPX T A -120 +KPX T Aacute -120 +KPX T Abreve -120 +KPX T Acircumflex -120 +KPX T Adieresis -120 +KPX T Agrave -120 +KPX T Amacron -120 +KPX T Aogonek -120 +KPX T Aring -120 +KPX T Atilde -120 +KPX T O -40 +KPX T Oacute -40 +KPX T Ocircumflex -40 +KPX T Odieresis -40 +KPX T Ograve -40 +KPX T Ohungarumlaut -40 +KPX T Omacron -40 +KPX T Oslash -40 +KPX T Otilde -40 +KPX T a -120 +KPX T aacute -120 +KPX T abreve -60 +KPX T acircumflex -120 +KPX T adieresis -120 +KPX T agrave -120 +KPX T amacron -60 +KPX T aogonek -120 +KPX T aring -120 +KPX T atilde -60 +KPX T colon -20 +KPX T comma -120 +KPX T e -120 +KPX T eacute -120 +KPX T ecaron -120 +KPX T ecircumflex -120 +KPX T edieresis -120 +KPX T edotaccent -120 +KPX T egrave -60 +KPX T emacron -60 +KPX T eogonek -120 +KPX T hyphen -140 +KPX T o -120 +KPX T oacute -120 +KPX T ocircumflex -120 +KPX T odieresis -120 +KPX T ograve -120 +KPX T ohungarumlaut -120 +KPX T omacron -60 +KPX T oslash -120 +KPX T otilde -60 +KPX T period -120 +KPX T r -120 +KPX T racute -120 +KPX T rcaron -120 +KPX T rcommaaccent -120 +KPX T semicolon -20 +KPX T u -120 +KPX T uacute -120 +KPX T ucircumflex -120 +KPX T udieresis -120 +KPX T ugrave -120 +KPX T uhungarumlaut -120 +KPX T umacron -60 +KPX T uogonek -120 +KPX T uring -120 +KPX T w -120 +KPX T y -120 +KPX T yacute -120 +KPX T ydieresis -60 +KPX Tcaron A -120 +KPX Tcaron Aacute -120 +KPX Tcaron Abreve -120 +KPX Tcaron Acircumflex -120 +KPX Tcaron Adieresis -120 +KPX Tcaron Agrave -120 +KPX Tcaron Amacron -120 +KPX Tcaron Aogonek -120 +KPX Tcaron Aring -120 +KPX Tcaron Atilde -120 +KPX Tcaron O -40 +KPX Tcaron Oacute -40 +KPX Tcaron Ocircumflex -40 +KPX Tcaron Odieresis -40 +KPX Tcaron Ograve -40 +KPX Tcaron Ohungarumlaut -40 +KPX Tcaron Omacron -40 +KPX Tcaron Oslash -40 +KPX Tcaron Otilde -40 +KPX Tcaron a -120 +KPX Tcaron aacute -120 +KPX Tcaron abreve -60 +KPX Tcaron acircumflex -120 +KPX Tcaron adieresis -120 +KPX Tcaron agrave -120 +KPX Tcaron amacron -60 +KPX Tcaron aogonek -120 +KPX Tcaron aring -120 +KPX Tcaron atilde -60 +KPX Tcaron colon -20 +KPX Tcaron comma -120 +KPX Tcaron e -120 +KPX Tcaron eacute -120 +KPX Tcaron ecaron -120 +KPX Tcaron ecircumflex -120 +KPX Tcaron edieresis -120 +KPX Tcaron edotaccent -120 +KPX Tcaron egrave -60 +KPX Tcaron emacron -60 +KPX Tcaron eogonek -120 +KPX Tcaron hyphen -140 +KPX Tcaron o -120 +KPX Tcaron oacute -120 +KPX Tcaron ocircumflex -120 +KPX Tcaron odieresis -120 +KPX Tcaron ograve -120 +KPX Tcaron ohungarumlaut -120 +KPX Tcaron omacron -60 +KPX Tcaron oslash -120 +KPX Tcaron otilde -60 +KPX Tcaron period -120 +KPX Tcaron r -120 +KPX Tcaron racute -120 +KPX Tcaron rcaron -120 +KPX Tcaron rcommaaccent -120 +KPX Tcaron semicolon -20 +KPX Tcaron u -120 +KPX Tcaron uacute -120 +KPX Tcaron ucircumflex -120 +KPX Tcaron udieresis -120 +KPX Tcaron ugrave -120 +KPX Tcaron uhungarumlaut -120 +KPX Tcaron umacron -60 +KPX Tcaron uogonek -120 +KPX Tcaron uring -120 +KPX Tcaron w -120 +KPX Tcaron y -120 +KPX Tcaron yacute -120 +KPX Tcaron ydieresis -60 +KPX Tcommaaccent A -120 +KPX Tcommaaccent Aacute -120 +KPX Tcommaaccent Abreve -120 +KPX Tcommaaccent Acircumflex -120 +KPX Tcommaaccent Adieresis -120 +KPX Tcommaaccent Agrave -120 +KPX Tcommaaccent Amacron -120 +KPX Tcommaaccent Aogonek -120 +KPX Tcommaaccent Aring -120 +KPX Tcommaaccent Atilde -120 +KPX Tcommaaccent O -40 +KPX Tcommaaccent Oacute -40 +KPX Tcommaaccent Ocircumflex -40 +KPX Tcommaaccent Odieresis -40 +KPX Tcommaaccent Ograve -40 +KPX Tcommaaccent Ohungarumlaut -40 +KPX Tcommaaccent Omacron -40 +KPX Tcommaaccent Oslash -40 +KPX Tcommaaccent Otilde -40 +KPX Tcommaaccent a -120 +KPX Tcommaaccent aacute -120 +KPX Tcommaaccent abreve -60 +KPX Tcommaaccent acircumflex -120 +KPX Tcommaaccent adieresis -120 +KPX Tcommaaccent agrave -120 +KPX Tcommaaccent amacron -60 +KPX Tcommaaccent aogonek -120 +KPX Tcommaaccent aring -120 +KPX Tcommaaccent atilde -60 +KPX Tcommaaccent colon -20 +KPX Tcommaaccent comma -120 +KPX Tcommaaccent e -120 +KPX Tcommaaccent eacute -120 +KPX Tcommaaccent ecaron -120 +KPX Tcommaaccent ecircumflex -120 +KPX Tcommaaccent edieresis -120 +KPX Tcommaaccent edotaccent -120 +KPX Tcommaaccent egrave -60 +KPX Tcommaaccent emacron -60 +KPX Tcommaaccent eogonek -120 +KPX Tcommaaccent hyphen -140 +KPX Tcommaaccent o -120 +KPX Tcommaaccent oacute -120 +KPX Tcommaaccent ocircumflex -120 +KPX Tcommaaccent odieresis -120 +KPX Tcommaaccent ograve -120 +KPX Tcommaaccent ohungarumlaut -120 +KPX Tcommaaccent omacron -60 +KPX Tcommaaccent oslash -120 +KPX Tcommaaccent otilde -60 +KPX Tcommaaccent period -120 +KPX Tcommaaccent r -120 +KPX Tcommaaccent racute -120 +KPX Tcommaaccent rcaron -120 +KPX Tcommaaccent rcommaaccent -120 +KPX Tcommaaccent semicolon -20 +KPX Tcommaaccent u -120 +KPX Tcommaaccent uacute -120 +KPX Tcommaaccent ucircumflex -120 +KPX Tcommaaccent udieresis -120 +KPX Tcommaaccent ugrave -120 +KPX Tcommaaccent uhungarumlaut -120 +KPX Tcommaaccent umacron -60 +KPX Tcommaaccent uogonek -120 +KPX Tcommaaccent uring -120 +KPX Tcommaaccent w -120 +KPX Tcommaaccent y -120 +KPX Tcommaaccent yacute -120 +KPX Tcommaaccent ydieresis -60 +KPX U A -40 +KPX U Aacute -40 +KPX U Abreve -40 +KPX U Acircumflex -40 +KPX U Adieresis -40 +KPX U Agrave -40 +KPX U Amacron -40 +KPX U Aogonek -40 +KPX U Aring -40 +KPX U Atilde -40 +KPX U comma -40 +KPX U period -40 +KPX Uacute A -40 +KPX Uacute Aacute -40 +KPX Uacute Abreve -40 +KPX Uacute Acircumflex -40 +KPX Uacute Adieresis -40 +KPX Uacute Agrave -40 +KPX Uacute Amacron -40 +KPX Uacute Aogonek -40 +KPX Uacute Aring -40 +KPX Uacute Atilde -40 +KPX Uacute comma -40 +KPX Uacute period -40 +KPX Ucircumflex A -40 +KPX Ucircumflex Aacute -40 +KPX Ucircumflex Abreve -40 +KPX Ucircumflex Acircumflex -40 +KPX Ucircumflex Adieresis -40 +KPX Ucircumflex Agrave -40 +KPX Ucircumflex Amacron -40 +KPX Ucircumflex Aogonek -40 +KPX Ucircumflex Aring -40 +KPX Ucircumflex Atilde -40 +KPX Ucircumflex comma -40 +KPX Ucircumflex period -40 +KPX Udieresis A -40 +KPX Udieresis Aacute -40 +KPX Udieresis Abreve -40 +KPX Udieresis Acircumflex -40 +KPX Udieresis Adieresis -40 +KPX Udieresis Agrave -40 +KPX Udieresis Amacron -40 +KPX Udieresis Aogonek -40 +KPX Udieresis Aring -40 +KPX Udieresis Atilde -40 +KPX Udieresis comma -40 +KPX Udieresis period -40 +KPX Ugrave A -40 +KPX Ugrave Aacute -40 +KPX Ugrave Abreve -40 +KPX Ugrave Acircumflex -40 +KPX Ugrave Adieresis -40 +KPX Ugrave Agrave -40 +KPX Ugrave Amacron -40 +KPX Ugrave Aogonek -40 +KPX Ugrave Aring -40 +KPX Ugrave Atilde -40 +KPX Ugrave comma -40 +KPX Ugrave period -40 +KPX Uhungarumlaut A -40 +KPX Uhungarumlaut Aacute -40 +KPX Uhungarumlaut Abreve -40 +KPX Uhungarumlaut Acircumflex -40 +KPX Uhungarumlaut Adieresis -40 +KPX Uhungarumlaut Agrave -40 +KPX Uhungarumlaut Amacron -40 +KPX Uhungarumlaut Aogonek -40 +KPX Uhungarumlaut Aring -40 +KPX Uhungarumlaut Atilde -40 +KPX Uhungarumlaut comma -40 +KPX Uhungarumlaut period -40 +KPX Umacron A -40 +KPX Umacron Aacute -40 +KPX Umacron Abreve -40 +KPX Umacron Acircumflex -40 +KPX Umacron Adieresis -40 +KPX Umacron Agrave -40 +KPX Umacron Amacron -40 +KPX Umacron Aogonek -40 +KPX Umacron Aring -40 +KPX Umacron Atilde -40 +KPX Umacron comma -40 +KPX Umacron period -40 +KPX Uogonek A -40 +KPX Uogonek Aacute -40 +KPX Uogonek Abreve -40 +KPX Uogonek Acircumflex -40 +KPX Uogonek Adieresis -40 +KPX Uogonek Agrave -40 +KPX Uogonek Amacron -40 +KPX Uogonek Aogonek -40 +KPX Uogonek Aring -40 +KPX Uogonek Atilde -40 +KPX Uogonek comma -40 +KPX Uogonek period -40 +KPX Uring A -40 +KPX Uring Aacute -40 +KPX Uring Abreve -40 +KPX Uring Acircumflex -40 +KPX Uring Adieresis -40 +KPX Uring Agrave -40 +KPX Uring Amacron -40 +KPX Uring Aogonek -40 +KPX Uring Aring -40 +KPX Uring Atilde -40 +KPX Uring comma -40 +KPX Uring period -40 +KPX V A -80 +KPX V Aacute -80 +KPX V Abreve -80 +KPX V Acircumflex -80 +KPX V Adieresis -80 +KPX V Agrave -80 +KPX V Amacron -80 +KPX V Aogonek -80 +KPX V Aring -80 +KPX V Atilde -80 +KPX V G -40 +KPX V Gbreve -40 +KPX V Gcommaaccent -40 +KPX V O -40 +KPX V Oacute -40 +KPX V Ocircumflex -40 +KPX V Odieresis -40 +KPX V Ograve -40 +KPX V Ohungarumlaut -40 +KPX V Omacron -40 +KPX V Oslash -40 +KPX V Otilde -40 +KPX V a -70 +KPX V aacute -70 +KPX V abreve -70 +KPX V acircumflex -70 +KPX V adieresis -70 +KPX V agrave -70 +KPX V amacron -70 +KPX V aogonek -70 +KPX V aring -70 +KPX V atilde -70 +KPX V colon -40 +KPX V comma -125 +KPX V e -80 +KPX V eacute -80 +KPX V ecaron -80 +KPX V ecircumflex -80 +KPX V edieresis -80 +KPX V edotaccent -80 +KPX V egrave -80 +KPX V emacron -80 +KPX V eogonek -80 +KPX V hyphen -80 +KPX V o -80 +KPX V oacute -80 +KPX V ocircumflex -80 +KPX V odieresis -80 +KPX V ograve -80 +KPX V ohungarumlaut -80 +KPX V omacron -80 +KPX V oslash -80 +KPX V otilde -80 +KPX V period -125 +KPX V semicolon -40 +KPX V u -70 +KPX V uacute -70 +KPX V ucircumflex -70 +KPX V udieresis -70 +KPX V ugrave -70 +KPX V uhungarumlaut -70 +KPX V umacron -70 +KPX V uogonek -70 +KPX V uring -70 +KPX W A -50 +KPX W Aacute -50 +KPX W Abreve -50 +KPX W Acircumflex -50 +KPX W Adieresis -50 +KPX W Agrave -50 +KPX W Amacron -50 +KPX W Aogonek -50 +KPX W Aring -50 +KPX W Atilde -50 +KPX W O -20 +KPX W Oacute -20 +KPX W Ocircumflex -20 +KPX W Odieresis -20 +KPX W Ograve -20 +KPX W Ohungarumlaut -20 +KPX W Omacron -20 +KPX W Oslash -20 +KPX W Otilde -20 +KPX W a -40 +KPX W aacute -40 +KPX W abreve -40 +KPX W acircumflex -40 +KPX W adieresis -40 +KPX W agrave -40 +KPX W amacron -40 +KPX W aogonek -40 +KPX W aring -40 +KPX W atilde -40 +KPX W comma -80 +KPX W e -30 +KPX W eacute -30 +KPX W ecaron -30 +KPX W ecircumflex -30 +KPX W edieresis -30 +KPX W edotaccent -30 +KPX W egrave -30 +KPX W emacron -30 +KPX W eogonek -30 +KPX W hyphen -40 +KPX W o -30 +KPX W oacute -30 +KPX W ocircumflex -30 +KPX W odieresis -30 +KPX W ograve -30 +KPX W ohungarumlaut -30 +KPX W omacron -30 +KPX W oslash -30 +KPX W otilde -30 +KPX W period -80 +KPX W u -30 +KPX W uacute -30 +KPX W ucircumflex -30 +KPX W udieresis -30 +KPX W ugrave -30 +KPX W uhungarumlaut -30 +KPX W umacron -30 +KPX W uogonek -30 +KPX W uring -30 +KPX W y -20 +KPX W yacute -20 +KPX W ydieresis -20 +KPX Y A -110 +KPX Y Aacute -110 +KPX Y Abreve -110 +KPX Y Acircumflex -110 +KPX Y Adieresis -110 +KPX Y Agrave -110 +KPX Y Amacron -110 +KPX Y Aogonek -110 +KPX Y Aring -110 +KPX Y Atilde -110 +KPX Y O -85 +KPX Y Oacute -85 +KPX Y Ocircumflex -85 +KPX Y Odieresis -85 +KPX Y Ograve -85 +KPX Y Ohungarumlaut -85 +KPX Y Omacron -85 +KPX Y Oslash -85 +KPX Y Otilde -85 +KPX Y a -140 +KPX Y aacute -140 +KPX Y abreve -70 +KPX Y acircumflex -140 +KPX Y adieresis -140 +KPX Y agrave -140 +KPX Y amacron -70 +KPX Y aogonek -140 +KPX Y aring -140 +KPX Y atilde -140 +KPX Y colon -60 +KPX Y comma -140 +KPX Y e -140 +KPX Y eacute -140 +KPX Y ecaron -140 +KPX Y ecircumflex -140 +KPX Y edieresis -140 +KPX Y edotaccent -140 +KPX Y egrave -140 +KPX Y emacron -70 +KPX Y eogonek -140 +KPX Y hyphen -140 +KPX Y i -20 +KPX Y iacute -20 +KPX Y iogonek -20 +KPX Y o -140 +KPX Y oacute -140 +KPX Y ocircumflex -140 +KPX Y odieresis -140 +KPX Y ograve -140 +KPX Y ohungarumlaut -140 +KPX Y omacron -140 +KPX Y oslash -140 +KPX Y otilde -140 +KPX Y period -140 +KPX Y semicolon -60 +KPX Y u -110 +KPX Y uacute -110 +KPX Y ucircumflex -110 +KPX Y udieresis -110 +KPX Y ugrave -110 +KPX Y uhungarumlaut -110 +KPX Y umacron -110 +KPX Y uogonek -110 +KPX Y uring -110 +KPX Yacute A -110 +KPX Yacute Aacute -110 +KPX Yacute Abreve -110 +KPX Yacute Acircumflex -110 +KPX Yacute Adieresis -110 +KPX Yacute Agrave -110 +KPX Yacute Amacron -110 +KPX Yacute Aogonek -110 +KPX Yacute Aring -110 +KPX Yacute Atilde -110 +KPX Yacute O -85 +KPX Yacute Oacute -85 +KPX Yacute Ocircumflex -85 +KPX Yacute Odieresis -85 +KPX Yacute Ograve -85 +KPX Yacute Ohungarumlaut -85 +KPX Yacute Omacron -85 +KPX Yacute Oslash -85 +KPX Yacute Otilde -85 +KPX Yacute a -140 +KPX Yacute aacute -140 +KPX Yacute abreve -70 +KPX Yacute acircumflex -140 +KPX Yacute adieresis -140 +KPX Yacute agrave -140 +KPX Yacute amacron -70 +KPX Yacute aogonek -140 +KPX Yacute aring -140 +KPX Yacute atilde -70 +KPX Yacute colon -60 +KPX Yacute comma -140 +KPX Yacute e -140 +KPX Yacute eacute -140 +KPX Yacute ecaron -140 +KPX Yacute ecircumflex -140 +KPX Yacute edieresis -140 +KPX Yacute edotaccent -140 +KPX Yacute egrave -140 +KPX Yacute emacron -70 +KPX Yacute eogonek -140 +KPX Yacute hyphen -140 +KPX Yacute i -20 +KPX Yacute iacute -20 +KPX Yacute iogonek -20 +KPX Yacute o -140 +KPX Yacute oacute -140 +KPX Yacute ocircumflex -140 +KPX Yacute odieresis -140 +KPX Yacute ograve -140 +KPX Yacute ohungarumlaut -140 +KPX Yacute omacron -70 +KPX Yacute oslash -140 +KPX Yacute otilde -140 +KPX Yacute period -140 +KPX Yacute semicolon -60 +KPX Yacute u -110 +KPX Yacute uacute -110 +KPX Yacute ucircumflex -110 +KPX Yacute udieresis -110 +KPX Yacute ugrave -110 +KPX Yacute uhungarumlaut -110 +KPX Yacute umacron -110 +KPX Yacute uogonek -110 +KPX Yacute uring -110 +KPX Ydieresis A -110 +KPX Ydieresis Aacute -110 +KPX Ydieresis Abreve -110 +KPX Ydieresis Acircumflex -110 +KPX Ydieresis Adieresis -110 +KPX Ydieresis Agrave -110 +KPX Ydieresis Amacron -110 +KPX Ydieresis Aogonek -110 +KPX Ydieresis Aring -110 +KPX Ydieresis Atilde -110 +KPX Ydieresis O -85 +KPX Ydieresis Oacute -85 +KPX Ydieresis Ocircumflex -85 +KPX Ydieresis Odieresis -85 +KPX Ydieresis Ograve -85 +KPX Ydieresis Ohungarumlaut -85 +KPX Ydieresis Omacron -85 +KPX Ydieresis Oslash -85 +KPX Ydieresis Otilde -85 +KPX Ydieresis a -140 +KPX Ydieresis aacute -140 +KPX Ydieresis abreve -70 +KPX Ydieresis acircumflex -140 +KPX Ydieresis adieresis -140 +KPX Ydieresis agrave -140 +KPX Ydieresis amacron -70 +KPX Ydieresis aogonek -140 +KPX Ydieresis aring -140 +KPX Ydieresis atilde -70 +KPX Ydieresis colon -60 +KPX Ydieresis comma -140 +KPX Ydieresis e -140 +KPX Ydieresis eacute -140 +KPX Ydieresis ecaron -140 +KPX Ydieresis ecircumflex -140 +KPX Ydieresis edieresis -140 +KPX Ydieresis edotaccent -140 +KPX Ydieresis egrave -140 +KPX Ydieresis emacron -70 +KPX Ydieresis eogonek -140 +KPX Ydieresis hyphen -140 +KPX Ydieresis i -20 +KPX Ydieresis iacute -20 +KPX Ydieresis iogonek -20 +KPX Ydieresis o -140 +KPX Ydieresis oacute -140 +KPX Ydieresis ocircumflex -140 +KPX Ydieresis odieresis -140 +KPX Ydieresis ograve -140 +KPX Ydieresis ohungarumlaut -140 +KPX Ydieresis omacron -140 +KPX Ydieresis oslash -140 +KPX Ydieresis otilde -140 +KPX Ydieresis period -140 +KPX Ydieresis semicolon -60 +KPX Ydieresis u -110 +KPX Ydieresis uacute -110 +KPX Ydieresis ucircumflex -110 +KPX Ydieresis udieresis -110 +KPX Ydieresis ugrave -110 +KPX Ydieresis uhungarumlaut -110 +KPX Ydieresis umacron -110 +KPX Ydieresis uogonek -110 +KPX Ydieresis uring -110 +KPX a v -20 +KPX a w -20 +KPX a y -30 +KPX a yacute -30 +KPX a ydieresis -30 +KPX aacute v -20 +KPX aacute w -20 +KPX aacute y -30 +KPX aacute yacute -30 +KPX aacute ydieresis -30 +KPX abreve v -20 +KPX abreve w -20 +KPX abreve y -30 +KPX abreve yacute -30 +KPX abreve ydieresis -30 +KPX acircumflex v -20 +KPX acircumflex w -20 +KPX acircumflex y -30 +KPX acircumflex yacute -30 +KPX acircumflex ydieresis -30 +KPX adieresis v -20 +KPX adieresis w -20 +KPX adieresis y -30 +KPX adieresis yacute -30 +KPX adieresis ydieresis -30 +KPX agrave v -20 +KPX agrave w -20 +KPX agrave y -30 +KPX agrave yacute -30 +KPX agrave ydieresis -30 +KPX amacron v -20 +KPX amacron w -20 +KPX amacron y -30 +KPX amacron yacute -30 +KPX amacron ydieresis -30 +KPX aogonek v -20 +KPX aogonek w -20 +KPX aogonek y -30 +KPX aogonek yacute -30 +KPX aogonek ydieresis -30 +KPX aring v -20 +KPX aring w -20 +KPX aring y -30 +KPX aring yacute -30 +KPX aring ydieresis -30 +KPX atilde v -20 +KPX atilde w -20 +KPX atilde y -30 +KPX atilde yacute -30 +KPX atilde ydieresis -30 +KPX b b -10 +KPX b comma -40 +KPX b l -20 +KPX b lacute -20 +KPX b lcommaaccent -20 +KPX b lslash -20 +KPX b period -40 +KPX b u -20 +KPX b uacute -20 +KPX b ucircumflex -20 +KPX b udieresis -20 +KPX b ugrave -20 +KPX b uhungarumlaut -20 +KPX b umacron -20 +KPX b uogonek -20 +KPX b uring -20 +KPX b v -20 +KPX b y -20 +KPX b yacute -20 +KPX b ydieresis -20 +KPX c comma -15 +KPX c k -20 +KPX c kcommaaccent -20 +KPX cacute comma -15 +KPX cacute k -20 +KPX cacute kcommaaccent -20 +KPX ccaron comma -15 +KPX ccaron k -20 +KPX ccaron kcommaaccent -20 +KPX ccedilla comma -15 +KPX ccedilla k -20 +KPX ccedilla kcommaaccent -20 +KPX colon space -50 +KPX comma quotedblright -100 +KPX comma quoteright -100 +KPX e comma -15 +KPX e period -15 +KPX e v -30 +KPX e w -20 +KPX e x -30 +KPX e y -20 +KPX e yacute -20 +KPX e ydieresis -20 +KPX eacute comma -15 +KPX eacute period -15 +KPX eacute v -30 +KPX eacute w -20 +KPX eacute x -30 +KPX eacute y -20 +KPX eacute yacute -20 +KPX eacute ydieresis -20 +KPX ecaron comma -15 +KPX ecaron period -15 +KPX ecaron v -30 +KPX ecaron w -20 +KPX ecaron x -30 +KPX ecaron y -20 +KPX ecaron yacute -20 +KPX ecaron ydieresis -20 +KPX ecircumflex comma -15 +KPX ecircumflex period -15 +KPX ecircumflex v -30 +KPX ecircumflex w -20 +KPX ecircumflex x -30 +KPX ecircumflex y -20 +KPX ecircumflex yacute -20 +KPX ecircumflex ydieresis -20 +KPX edieresis comma -15 +KPX edieresis period -15 +KPX edieresis v -30 +KPX edieresis w -20 +KPX edieresis x -30 +KPX edieresis y -20 +KPX edieresis yacute -20 +KPX edieresis ydieresis -20 +KPX edotaccent comma -15 +KPX edotaccent period -15 +KPX edotaccent v -30 +KPX edotaccent w -20 +KPX edotaccent x -30 +KPX edotaccent y -20 +KPX edotaccent yacute -20 +KPX edotaccent ydieresis -20 +KPX egrave comma -15 +KPX egrave period -15 +KPX egrave v -30 +KPX egrave w -20 +KPX egrave x -30 +KPX egrave y -20 +KPX egrave yacute -20 +KPX egrave ydieresis -20 +KPX emacron comma -15 +KPX emacron period -15 +KPX emacron v -30 +KPX emacron w -20 +KPX emacron x -30 +KPX emacron y -20 +KPX emacron yacute -20 +KPX emacron ydieresis -20 +KPX eogonek comma -15 +KPX eogonek period -15 +KPX eogonek v -30 +KPX eogonek w -20 +KPX eogonek x -30 +KPX eogonek y -20 +KPX eogonek yacute -20 +KPX eogonek ydieresis -20 +KPX f a -30 +KPX f aacute -30 +KPX f abreve -30 +KPX f acircumflex -30 +KPX f adieresis -30 +KPX f agrave -30 +KPX f amacron -30 +KPX f aogonek -30 +KPX f aring -30 +KPX f atilde -30 +KPX f comma -30 +KPX f dotlessi -28 +KPX f e -30 +KPX f eacute -30 +KPX f ecaron -30 +KPX f ecircumflex -30 +KPX f edieresis -30 +KPX f edotaccent -30 +KPX f egrave -30 +KPX f emacron -30 +KPX f eogonek -30 +KPX f o -30 +KPX f oacute -30 +KPX f ocircumflex -30 +KPX f odieresis -30 +KPX f ograve -30 +KPX f ohungarumlaut -30 +KPX f omacron -30 +KPX f oslash -30 +KPX f otilde -30 +KPX f period -30 +KPX f quotedblright 60 +KPX f quoteright 50 +KPX g r -10 +KPX g racute -10 +KPX g rcaron -10 +KPX g rcommaaccent -10 +KPX gbreve r -10 +KPX gbreve racute -10 +KPX gbreve rcaron -10 +KPX gbreve rcommaaccent -10 +KPX gcommaaccent r -10 +KPX gcommaaccent racute -10 +KPX gcommaaccent rcaron -10 +KPX gcommaaccent rcommaaccent -10 +KPX h y -30 +KPX h yacute -30 +KPX h ydieresis -30 +KPX k e -20 +KPX k eacute -20 +KPX k ecaron -20 +KPX k ecircumflex -20 +KPX k edieresis -20 +KPX k edotaccent -20 +KPX k egrave -20 +KPX k emacron -20 +KPX k eogonek -20 +KPX k o -20 +KPX k oacute -20 +KPX k ocircumflex -20 +KPX k odieresis -20 +KPX k ograve -20 +KPX k ohungarumlaut -20 +KPX k omacron -20 +KPX k oslash -20 +KPX k otilde -20 +KPX kcommaaccent e -20 +KPX kcommaaccent eacute -20 +KPX kcommaaccent ecaron -20 +KPX kcommaaccent ecircumflex -20 +KPX kcommaaccent edieresis -20 +KPX kcommaaccent edotaccent -20 +KPX kcommaaccent egrave -20 +KPX kcommaaccent emacron -20 +KPX kcommaaccent eogonek -20 +KPX kcommaaccent o -20 +KPX kcommaaccent oacute -20 +KPX kcommaaccent ocircumflex -20 +KPX kcommaaccent odieresis -20 +KPX kcommaaccent ograve -20 +KPX kcommaaccent ohungarumlaut -20 +KPX kcommaaccent omacron -20 +KPX kcommaaccent oslash -20 +KPX kcommaaccent otilde -20 +KPX m u -10 +KPX m uacute -10 +KPX m ucircumflex -10 +KPX m udieresis -10 +KPX m ugrave -10 +KPX m uhungarumlaut -10 +KPX m umacron -10 +KPX m uogonek -10 +KPX m uring -10 +KPX m y -15 +KPX m yacute -15 +KPX m ydieresis -15 +KPX n u -10 +KPX n uacute -10 +KPX n ucircumflex -10 +KPX n udieresis -10 +KPX n ugrave -10 +KPX n uhungarumlaut -10 +KPX n umacron -10 +KPX n uogonek -10 +KPX n uring -10 +KPX n v -20 +KPX n y -15 +KPX n yacute -15 +KPX n ydieresis -15 +KPX nacute u -10 +KPX nacute uacute -10 +KPX nacute ucircumflex -10 +KPX nacute udieresis -10 +KPX nacute ugrave -10 +KPX nacute uhungarumlaut -10 +KPX nacute umacron -10 +KPX nacute uogonek -10 +KPX nacute uring -10 +KPX nacute v -20 +KPX nacute y -15 +KPX nacute yacute -15 +KPX nacute ydieresis -15 +KPX ncaron u -10 +KPX ncaron uacute -10 +KPX ncaron ucircumflex -10 +KPX ncaron udieresis -10 +KPX ncaron ugrave -10 +KPX ncaron uhungarumlaut -10 +KPX ncaron umacron -10 +KPX ncaron uogonek -10 +KPX ncaron uring -10 +KPX ncaron v -20 +KPX ncaron y -15 +KPX ncaron yacute -15 +KPX ncaron ydieresis -15 +KPX ncommaaccent u -10 +KPX ncommaaccent uacute -10 +KPX ncommaaccent ucircumflex -10 +KPX ncommaaccent udieresis -10 +KPX ncommaaccent ugrave -10 +KPX ncommaaccent uhungarumlaut -10 +KPX ncommaaccent umacron -10 +KPX ncommaaccent uogonek -10 +KPX ncommaaccent uring -10 +KPX ncommaaccent v -20 +KPX ncommaaccent y -15 +KPX ncommaaccent yacute -15 +KPX ncommaaccent ydieresis -15 +KPX ntilde u -10 +KPX ntilde uacute -10 +KPX ntilde ucircumflex -10 +KPX ntilde udieresis -10 +KPX ntilde ugrave -10 +KPX ntilde uhungarumlaut -10 +KPX ntilde umacron -10 +KPX ntilde uogonek -10 +KPX ntilde uring -10 +KPX ntilde v -20 +KPX ntilde y -15 +KPX ntilde yacute -15 +KPX ntilde ydieresis -15 +KPX o comma -40 +KPX o period -40 +KPX o v -15 +KPX o w -15 +KPX o x -30 +KPX o y -30 +KPX o yacute -30 +KPX o ydieresis -30 +KPX oacute comma -40 +KPX oacute period -40 +KPX oacute v -15 +KPX oacute w -15 +KPX oacute x -30 +KPX oacute y -30 +KPX oacute yacute -30 +KPX oacute ydieresis -30 +KPX ocircumflex comma -40 +KPX ocircumflex period -40 +KPX ocircumflex v -15 +KPX ocircumflex w -15 +KPX ocircumflex x -30 +KPX ocircumflex y -30 +KPX ocircumflex yacute -30 +KPX ocircumflex ydieresis -30 +KPX odieresis comma -40 +KPX odieresis period -40 +KPX odieresis v -15 +KPX odieresis w -15 +KPX odieresis x -30 +KPX odieresis y -30 +KPX odieresis yacute -30 +KPX odieresis ydieresis -30 +KPX ograve comma -40 +KPX ograve period -40 +KPX ograve v -15 +KPX ograve w -15 +KPX ograve x -30 +KPX ograve y -30 +KPX ograve yacute -30 +KPX ograve ydieresis -30 +KPX ohungarumlaut comma -40 +KPX ohungarumlaut period -40 +KPX ohungarumlaut v -15 +KPX ohungarumlaut w -15 +KPX ohungarumlaut x -30 +KPX ohungarumlaut y -30 +KPX ohungarumlaut yacute -30 +KPX ohungarumlaut ydieresis -30 +KPX omacron comma -40 +KPX omacron period -40 +KPX omacron v -15 +KPX omacron w -15 +KPX omacron x -30 +KPX omacron y -30 +KPX omacron yacute -30 +KPX omacron ydieresis -30 +KPX oslash a -55 +KPX oslash aacute -55 +KPX oslash abreve -55 +KPX oslash acircumflex -55 +KPX oslash adieresis -55 +KPX oslash agrave -55 +KPX oslash amacron -55 +KPX oslash aogonek -55 +KPX oslash aring -55 +KPX oslash atilde -55 +KPX oslash b -55 +KPX oslash c -55 +KPX oslash cacute -55 +KPX oslash ccaron -55 +KPX oslash ccedilla -55 +KPX oslash comma -95 +KPX oslash d -55 +KPX oslash dcroat -55 +KPX oslash e -55 +KPX oslash eacute -55 +KPX oslash ecaron -55 +KPX oslash ecircumflex -55 +KPX oslash edieresis -55 +KPX oslash edotaccent -55 +KPX oslash egrave -55 +KPX oslash emacron -55 +KPX oslash eogonek -55 +KPX oslash f -55 +KPX oslash g -55 +KPX oslash gbreve -55 +KPX oslash gcommaaccent -55 +KPX oslash h -55 +KPX oslash i -55 +KPX oslash iacute -55 +KPX oslash icircumflex -55 +KPX oslash idieresis -55 +KPX oslash igrave -55 +KPX oslash imacron -55 +KPX oslash iogonek -55 +KPX oslash j -55 +KPX oslash k -55 +KPX oslash kcommaaccent -55 +KPX oslash l -55 +KPX oslash lacute -55 +KPX oslash lcommaaccent -55 +KPX oslash lslash -55 +KPX oslash m -55 +KPX oslash n -55 +KPX oslash nacute -55 +KPX oslash ncaron -55 +KPX oslash ncommaaccent -55 +KPX oslash ntilde -55 +KPX oslash o -55 +KPX oslash oacute -55 +KPX oslash ocircumflex -55 +KPX oslash odieresis -55 +KPX oslash ograve -55 +KPX oslash ohungarumlaut -55 +KPX oslash omacron -55 +KPX oslash oslash -55 +KPX oslash otilde -55 +KPX oslash p -55 +KPX oslash period -95 +KPX oslash q -55 +KPX oslash r -55 +KPX oslash racute -55 +KPX oslash rcaron -55 +KPX oslash rcommaaccent -55 +KPX oslash s -55 +KPX oslash sacute -55 +KPX oslash scaron -55 +KPX oslash scedilla -55 +KPX oslash scommaaccent -55 +KPX oslash t -55 +KPX oslash tcommaaccent -55 +KPX oslash u -55 +KPX oslash uacute -55 +KPX oslash ucircumflex -55 +KPX oslash udieresis -55 +KPX oslash ugrave -55 +KPX oslash uhungarumlaut -55 +KPX oslash umacron -55 +KPX oslash uogonek -55 +KPX oslash uring -55 +KPX oslash v -70 +KPX oslash w -70 +KPX oslash x -85 +KPX oslash y -70 +KPX oslash yacute -70 +KPX oslash ydieresis -70 +KPX oslash z -55 +KPX oslash zacute -55 +KPX oslash zcaron -55 +KPX oslash zdotaccent -55 +KPX otilde comma -40 +KPX otilde period -40 +KPX otilde v -15 +KPX otilde w -15 +KPX otilde x -30 +KPX otilde y -30 +KPX otilde yacute -30 +KPX otilde ydieresis -30 +KPX p comma -35 +KPX p period -35 +KPX p y -30 +KPX p yacute -30 +KPX p ydieresis -30 +KPX period quotedblright -100 +KPX period quoteright -100 +KPX period space -60 +KPX quotedblright space -40 +KPX quoteleft quoteleft -57 +KPX quoteright d -50 +KPX quoteright dcroat -50 +KPX quoteright quoteright -57 +KPX quoteright r -50 +KPX quoteright racute -50 +KPX quoteright rcaron -50 +KPX quoteright rcommaaccent -50 +KPX quoteright s -50 +KPX quoteright sacute -50 +KPX quoteright scaron -50 +KPX quoteright scedilla -50 +KPX quoteright scommaaccent -50 +KPX quoteright space -70 +KPX r a -10 +KPX r aacute -10 +KPX r abreve -10 +KPX r acircumflex -10 +KPX r adieresis -10 +KPX r agrave -10 +KPX r amacron -10 +KPX r aogonek -10 +KPX r aring -10 +KPX r atilde -10 +KPX r colon 30 +KPX r comma -50 +KPX r i 15 +KPX r iacute 15 +KPX r icircumflex 15 +KPX r idieresis 15 +KPX r igrave 15 +KPX r imacron 15 +KPX r iogonek 15 +KPX r k 15 +KPX r kcommaaccent 15 +KPX r l 15 +KPX r lacute 15 +KPX r lcommaaccent 15 +KPX r lslash 15 +KPX r m 25 +KPX r n 25 +KPX r nacute 25 +KPX r ncaron 25 +KPX r ncommaaccent 25 +KPX r ntilde 25 +KPX r p 30 +KPX r period -50 +KPX r semicolon 30 +KPX r t 40 +KPX r tcommaaccent 40 +KPX r u 15 +KPX r uacute 15 +KPX r ucircumflex 15 +KPX r udieresis 15 +KPX r ugrave 15 +KPX r uhungarumlaut 15 +KPX r umacron 15 +KPX r uogonek 15 +KPX r uring 15 +KPX r v 30 +KPX r y 30 +KPX r yacute 30 +KPX r ydieresis 30 +KPX racute a -10 +KPX racute aacute -10 +KPX racute abreve -10 +KPX racute acircumflex -10 +KPX racute adieresis -10 +KPX racute agrave -10 +KPX racute amacron -10 +KPX racute aogonek -10 +KPX racute aring -10 +KPX racute atilde -10 +KPX racute colon 30 +KPX racute comma -50 +KPX racute i 15 +KPX racute iacute 15 +KPX racute icircumflex 15 +KPX racute idieresis 15 +KPX racute igrave 15 +KPX racute imacron 15 +KPX racute iogonek 15 +KPX racute k 15 +KPX racute kcommaaccent 15 +KPX racute l 15 +KPX racute lacute 15 +KPX racute lcommaaccent 15 +KPX racute lslash 15 +KPX racute m 25 +KPX racute n 25 +KPX racute nacute 25 +KPX racute ncaron 25 +KPX racute ncommaaccent 25 +KPX racute ntilde 25 +KPX racute p 30 +KPX racute period -50 +KPX racute semicolon 30 +KPX racute t 40 +KPX racute tcommaaccent 40 +KPX racute u 15 +KPX racute uacute 15 +KPX racute ucircumflex 15 +KPX racute udieresis 15 +KPX racute ugrave 15 +KPX racute uhungarumlaut 15 +KPX racute umacron 15 +KPX racute uogonek 15 +KPX racute uring 15 +KPX racute v 30 +KPX racute y 30 +KPX racute yacute 30 +KPX racute ydieresis 30 +KPX rcaron a -10 +KPX rcaron aacute -10 +KPX rcaron abreve -10 +KPX rcaron acircumflex -10 +KPX rcaron adieresis -10 +KPX rcaron agrave -10 +KPX rcaron amacron -10 +KPX rcaron aogonek -10 +KPX rcaron aring -10 +KPX rcaron atilde -10 +KPX rcaron colon 30 +KPX rcaron comma -50 +KPX rcaron i 15 +KPX rcaron iacute 15 +KPX rcaron icircumflex 15 +KPX rcaron idieresis 15 +KPX rcaron igrave 15 +KPX rcaron imacron 15 +KPX rcaron iogonek 15 +KPX rcaron k 15 +KPX rcaron kcommaaccent 15 +KPX rcaron l 15 +KPX rcaron lacute 15 +KPX rcaron lcommaaccent 15 +KPX rcaron lslash 15 +KPX rcaron m 25 +KPX rcaron n 25 +KPX rcaron nacute 25 +KPX rcaron ncaron 25 +KPX rcaron ncommaaccent 25 +KPX rcaron ntilde 25 +KPX rcaron p 30 +KPX rcaron period -50 +KPX rcaron semicolon 30 +KPX rcaron t 40 +KPX rcaron tcommaaccent 40 +KPX rcaron u 15 +KPX rcaron uacute 15 +KPX rcaron ucircumflex 15 +KPX rcaron udieresis 15 +KPX rcaron ugrave 15 +KPX rcaron uhungarumlaut 15 +KPX rcaron umacron 15 +KPX rcaron uogonek 15 +KPX rcaron uring 15 +KPX rcaron v 30 +KPX rcaron y 30 +KPX rcaron yacute 30 +KPX rcaron ydieresis 30 +KPX rcommaaccent a -10 +KPX rcommaaccent aacute -10 +KPX rcommaaccent abreve -10 +KPX rcommaaccent acircumflex -10 +KPX rcommaaccent adieresis -10 +KPX rcommaaccent agrave -10 +KPX rcommaaccent amacron -10 +KPX rcommaaccent aogonek -10 +KPX rcommaaccent aring -10 +KPX rcommaaccent atilde -10 +KPX rcommaaccent colon 30 +KPX rcommaaccent comma -50 +KPX rcommaaccent i 15 +KPX rcommaaccent iacute 15 +KPX rcommaaccent icircumflex 15 +KPX rcommaaccent idieresis 15 +KPX rcommaaccent igrave 15 +KPX rcommaaccent imacron 15 +KPX rcommaaccent iogonek 15 +KPX rcommaaccent k 15 +KPX rcommaaccent kcommaaccent 15 +KPX rcommaaccent l 15 +KPX rcommaaccent lacute 15 +KPX rcommaaccent lcommaaccent 15 +KPX rcommaaccent lslash 15 +KPX rcommaaccent m 25 +KPX rcommaaccent n 25 +KPX rcommaaccent nacute 25 +KPX rcommaaccent ncaron 25 +KPX rcommaaccent ncommaaccent 25 +KPX rcommaaccent ntilde 25 +KPX rcommaaccent p 30 +KPX rcommaaccent period -50 +KPX rcommaaccent semicolon 30 +KPX rcommaaccent t 40 +KPX rcommaaccent tcommaaccent 40 +KPX rcommaaccent u 15 +KPX rcommaaccent uacute 15 +KPX rcommaaccent ucircumflex 15 +KPX rcommaaccent udieresis 15 +KPX rcommaaccent ugrave 15 +KPX rcommaaccent uhungarumlaut 15 +KPX rcommaaccent umacron 15 +KPX rcommaaccent uogonek 15 +KPX rcommaaccent uring 15 +KPX rcommaaccent v 30 +KPX rcommaaccent y 30 +KPX rcommaaccent yacute 30 +KPX rcommaaccent ydieresis 30 +KPX s comma -15 +KPX s period -15 +KPX s w -30 +KPX sacute comma -15 +KPX sacute period -15 +KPX sacute w -30 +KPX scaron comma -15 +KPX scaron period -15 +KPX scaron w -30 +KPX scedilla comma -15 +KPX scedilla period -15 +KPX scedilla w -30 +KPX scommaaccent comma -15 +KPX scommaaccent period -15 +KPX scommaaccent w -30 +KPX semicolon space -50 +KPX space T -50 +KPX space Tcaron -50 +KPX space Tcommaaccent -50 +KPX space V -50 +KPX space W -40 +KPX space Y -90 +KPX space Yacute -90 +KPX space Ydieresis -90 +KPX space quotedblleft -30 +KPX space quoteleft -60 +KPX v a -25 +KPX v aacute -25 +KPX v abreve -25 +KPX v acircumflex -25 +KPX v adieresis -25 +KPX v agrave -25 +KPX v amacron -25 +KPX v aogonek -25 +KPX v aring -25 +KPX v atilde -25 +KPX v comma -80 +KPX v e -25 +KPX v eacute -25 +KPX v ecaron -25 +KPX v ecircumflex -25 +KPX v edieresis -25 +KPX v edotaccent -25 +KPX v egrave -25 +KPX v emacron -25 +KPX v eogonek -25 +KPX v o -25 +KPX v oacute -25 +KPX v ocircumflex -25 +KPX v odieresis -25 +KPX v ograve -25 +KPX v ohungarumlaut -25 +KPX v omacron -25 +KPX v oslash -25 +KPX v otilde -25 +KPX v period -80 +KPX w a -15 +KPX w aacute -15 +KPX w abreve -15 +KPX w acircumflex -15 +KPX w adieresis -15 +KPX w agrave -15 +KPX w amacron -15 +KPX w aogonek -15 +KPX w aring -15 +KPX w atilde -15 +KPX w comma -60 +KPX w e -10 +KPX w eacute -10 +KPX w ecaron -10 +KPX w ecircumflex -10 +KPX w edieresis -10 +KPX w edotaccent -10 +KPX w egrave -10 +KPX w emacron -10 +KPX w eogonek -10 +KPX w o -10 +KPX w oacute -10 +KPX w ocircumflex -10 +KPX w odieresis -10 +KPX w ograve -10 +KPX w ohungarumlaut -10 +KPX w omacron -10 +KPX w oslash -10 +KPX w otilde -10 +KPX w period -60 +KPX x e -30 +KPX x eacute -30 +KPX x ecaron -30 +KPX x ecircumflex -30 +KPX x edieresis -30 +KPX x edotaccent -30 +KPX x egrave -30 +KPX x emacron -30 +KPX x eogonek -30 +KPX y a -20 +KPX y aacute -20 +KPX y abreve -20 +KPX y acircumflex -20 +KPX y adieresis -20 +KPX y agrave -20 +KPX y amacron -20 +KPX y aogonek -20 +KPX y aring -20 +KPX y atilde -20 +KPX y comma -100 +KPX y e -20 +KPX y eacute -20 +KPX y ecaron -20 +KPX y ecircumflex -20 +KPX y edieresis -20 +KPX y edotaccent -20 +KPX y egrave -20 +KPX y emacron -20 +KPX y eogonek -20 +KPX y o -20 +KPX y oacute -20 +KPX y ocircumflex -20 +KPX y odieresis -20 +KPX y ograve -20 +KPX y ohungarumlaut -20 +KPX y omacron -20 +KPX y oslash -20 +KPX y otilde -20 +KPX y period -100 +KPX yacute a -20 +KPX yacute aacute -20 +KPX yacute abreve -20 +KPX yacute acircumflex -20 +KPX yacute adieresis -20 +KPX yacute agrave -20 +KPX yacute amacron -20 +KPX yacute aogonek -20 +KPX yacute aring -20 +KPX yacute atilde -20 +KPX yacute comma -100 +KPX yacute e -20 +KPX yacute eacute -20 +KPX yacute ecaron -20 +KPX yacute ecircumflex -20 +KPX yacute edieresis -20 +KPX yacute edotaccent -20 +KPX yacute egrave -20 +KPX yacute emacron -20 +KPX yacute eogonek -20 +KPX yacute o -20 +KPX yacute oacute -20 +KPX yacute ocircumflex -20 +KPX yacute odieresis -20 +KPX yacute ograve -20 +KPX yacute ohungarumlaut -20 +KPX yacute omacron -20 +KPX yacute oslash -20 +KPX yacute otilde -20 +KPX yacute period -100 +KPX ydieresis a -20 +KPX ydieresis aacute -20 +KPX ydieresis abreve -20 +KPX ydieresis acircumflex -20 +KPX ydieresis adieresis -20 +KPX ydieresis agrave -20 +KPX ydieresis amacron -20 +KPX ydieresis aogonek -20 +KPX ydieresis aring -20 +KPX ydieresis atilde -20 +KPX ydieresis comma -100 +KPX ydieresis e -20 +KPX ydieresis eacute -20 +KPX ydieresis ecaron -20 +KPX ydieresis ecircumflex -20 +KPX ydieresis edieresis -20 +KPX ydieresis edotaccent -20 +KPX ydieresis egrave -20 +KPX ydieresis emacron -20 +KPX ydieresis eogonek -20 +KPX ydieresis o -20 +KPX ydieresis oacute -20 +KPX ydieresis ocircumflex -20 +KPX ydieresis odieresis -20 +KPX ydieresis ograve -20 +KPX ydieresis ohungarumlaut -20 +KPX ydieresis omacron -20 +KPX ydieresis oslash -20 +KPX ydieresis otilde -20 +KPX ydieresis period -100 +KPX z e -15 +KPX z eacute -15 +KPX z ecaron -15 +KPX z ecircumflex -15 +KPX z edieresis -15 +KPX z edotaccent -15 +KPX z egrave -15 +KPX z emacron -15 +KPX z eogonek -15 +KPX z o -15 +KPX z oacute -15 +KPX z ocircumflex -15 +KPX z odieresis -15 +KPX z ograve -15 +KPX z ohungarumlaut -15 +KPX z omacron -15 +KPX z oslash -15 +KPX z otilde -15 +KPX zacute e -15 +KPX zacute eacute -15 +KPX zacute ecaron -15 +KPX zacute ecircumflex -15 +KPX zacute edieresis -15 +KPX zacute edotaccent -15 +KPX zacute egrave -15 +KPX zacute emacron -15 +KPX zacute eogonek -15 +KPX zacute o -15 +KPX zacute oacute -15 +KPX zacute ocircumflex -15 +KPX zacute odieresis -15 +KPX zacute ograve -15 +KPX zacute ohungarumlaut -15 +KPX zacute omacron -15 +KPX zacute oslash -15 +KPX zacute otilde -15 +KPX zcaron e -15 +KPX zcaron eacute -15 +KPX zcaron ecaron -15 +KPX zcaron ecircumflex -15 +KPX zcaron edieresis -15 +KPX zcaron edotaccent -15 +KPX zcaron egrave -15 +KPX zcaron emacron -15 +KPX zcaron eogonek -15 +KPX zcaron o -15 +KPX zcaron oacute -15 +KPX zcaron ocircumflex -15 +KPX zcaron odieresis -15 +KPX zcaron ograve -15 +KPX zcaron ohungarumlaut -15 +KPX zcaron omacron -15 +KPX zcaron oslash -15 +KPX zcaron otilde -15 +KPX zdotaccent e -15 +KPX zdotaccent eacute -15 +KPX zdotaccent ecaron -15 +KPX zdotaccent ecircumflex -15 +KPX zdotaccent edieresis -15 +KPX zdotaccent edotaccent -15 +KPX zdotaccent egrave -15 +KPX zdotaccent emacron -15 +KPX zdotaccent eogonek -15 +KPX zdotaccent o -15 +KPX zdotaccent oacute -15 +KPX zdotaccent ocircumflex -15 +KPX zdotaccent odieresis -15 +KPX zdotaccent ograve -15 +KPX zdotaccent ohungarumlaut -15 +KPX zdotaccent omacron -15 +KPX zdotaccent oslash -15 +KPX zdotaccent otilde -15 +EndKernPairs +EndKernData +EndFontMetrics diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/Helvetica.afm b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/Helvetica.afm new file mode 100755 index 00000000..bd32af54 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/Helvetica.afm @@ -0,0 +1,3051 @@ +StartFontMetrics 4.1 +Comment Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All Rights Reserved. +Comment Creation Date: Thu May 1 12:38:23 1997 +Comment UniqueID 43054 +Comment VMusage 37069 48094 +FontName Helvetica +FullName Helvetica +FamilyName Helvetica +Weight Medium +ItalicAngle 0 +IsFixedPitch false +CharacterSet ExtendedRoman +FontBBox -166 -225 1000 931 +UnderlinePosition -100 +UnderlineThickness 50 +Version 002.000 +Notice Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All Rights Reserved.Helvetica is a trademark of Linotype-Hell AG and/or its subsidiaries. +EncodingScheme AdobeStandardEncoding +CapHeight 718 +XHeight 523 +Ascender 718 +Descender -207 +StdHW 76 +StdVW 88 +StartCharMetrics 315 +C 32 ; WX 278 ; N space ; B 0 0 0 0 ; +C 33 ; WX 278 ; N exclam ; B 90 0 187 718 ; +C 34 ; WX 355 ; N quotedbl ; B 70 463 285 718 ; +C 35 ; WX 556 ; N numbersign ; B 28 0 529 688 ; +C 36 ; WX 556 ; N dollar ; B 32 -115 520 775 ; +C 37 ; WX 889 ; N percent ; B 39 -19 850 703 ; +C 38 ; WX 667 ; N ampersand ; B 44 -15 645 718 ; +C 39 ; WX 222 ; N quoteright ; B 53 463 157 718 ; +C 40 ; WX 333 ; N parenleft ; B 68 -207 299 733 ; +C 41 ; WX 333 ; N parenright ; B 34 -207 265 733 ; +C 42 ; WX 389 ; N asterisk ; B 39 431 349 718 ; +C 43 ; WX 584 ; N plus ; B 39 0 545 505 ; +C 44 ; WX 278 ; N comma ; B 87 -147 191 106 ; +C 45 ; WX 333 ; N hyphen ; B 44 232 289 322 ; +C 46 ; WX 278 ; N period ; B 87 0 191 106 ; +C 47 ; WX 278 ; N slash ; B -17 -19 295 737 ; +C 48 ; WX 556 ; N zero ; B 37 -19 519 703 ; +C 49 ; WX 556 ; N one ; B 101 0 359 703 ; +C 50 ; WX 556 ; N two ; B 26 0 507 703 ; +C 51 ; WX 556 ; N three ; B 34 -19 522 703 ; +C 52 ; WX 556 ; N four ; B 25 0 523 703 ; +C 53 ; WX 556 ; N five ; B 32 -19 514 688 ; +C 54 ; WX 556 ; N six ; B 38 -19 518 703 ; +C 55 ; WX 556 ; N seven ; B 37 0 523 688 ; +C 56 ; WX 556 ; N eight ; B 38 -19 517 703 ; +C 57 ; WX 556 ; N nine ; B 42 -19 514 703 ; +C 58 ; WX 278 ; N colon ; B 87 0 191 516 ; +C 59 ; WX 278 ; N semicolon ; B 87 -147 191 516 ; +C 60 ; WX 584 ; N less ; B 48 11 536 495 ; +C 61 ; WX 584 ; N equal ; B 39 115 545 390 ; +C 62 ; WX 584 ; N greater ; B 48 11 536 495 ; +C 63 ; WX 556 ; N question ; B 56 0 492 727 ; +C 64 ; WX 1015 ; N at ; B 147 -19 868 737 ; +C 65 ; WX 667 ; N A ; B 14 0 654 718 ; +C 66 ; WX 667 ; N B ; B 74 0 627 718 ; +C 67 ; WX 722 ; N C ; B 44 -19 681 737 ; +C 68 ; WX 722 ; N D ; B 81 0 674 718 ; +C 69 ; WX 667 ; N E ; B 86 0 616 718 ; +C 70 ; WX 611 ; N F ; B 86 0 583 718 ; +C 71 ; WX 778 ; N G ; B 48 -19 704 737 ; +C 72 ; WX 722 ; N H ; B 77 0 646 718 ; +C 73 ; WX 278 ; N I ; B 91 0 188 718 ; +C 74 ; WX 500 ; N J ; B 17 -19 428 718 ; +C 75 ; WX 667 ; N K ; B 76 0 663 718 ; +C 76 ; WX 556 ; N L ; B 76 0 537 718 ; +C 77 ; WX 833 ; N M ; B 73 0 761 718 ; +C 78 ; WX 722 ; N N ; B 76 0 646 718 ; +C 79 ; WX 778 ; N O ; B 39 -19 739 737 ; +C 80 ; WX 667 ; N P ; B 86 0 622 718 ; +C 81 ; WX 778 ; N Q ; B 39 -56 739 737 ; +C 82 ; WX 722 ; N R ; B 88 0 684 718 ; +C 83 ; WX 667 ; N S ; B 49 -19 620 737 ; +C 84 ; WX 611 ; N T ; B 14 0 597 718 ; +C 85 ; WX 722 ; N U ; B 79 -19 644 718 ; +C 86 ; WX 667 ; N V ; B 20 0 647 718 ; +C 87 ; WX 944 ; N W ; B 16 0 928 718 ; +C 88 ; WX 667 ; N X ; B 19 0 648 718 ; +C 89 ; WX 667 ; N Y ; B 14 0 653 718 ; +C 90 ; WX 611 ; N Z ; B 23 0 588 718 ; +C 91 ; WX 278 ; N bracketleft ; B 63 -196 250 722 ; +C 92 ; WX 278 ; N backslash ; B -17 -19 295 737 ; +C 93 ; WX 278 ; N bracketright ; B 28 -196 215 722 ; +C 94 ; WX 469 ; N asciicircum ; B -14 264 483 688 ; +C 95 ; WX 556 ; N underscore ; B 0 -125 556 -75 ; +C 96 ; WX 222 ; N quoteleft ; B 65 470 169 725 ; +C 97 ; WX 556 ; N a ; B 36 -15 530 538 ; +C 98 ; WX 556 ; N b ; B 58 -15 517 718 ; +C 99 ; WX 500 ; N c ; B 30 -15 477 538 ; +C 100 ; WX 556 ; N d ; B 35 -15 499 718 ; +C 101 ; WX 556 ; N e ; B 40 -15 516 538 ; +C 102 ; WX 278 ; N f ; B 14 0 262 728 ; L i fi ; L l fl ; +C 103 ; WX 556 ; N g ; B 40 -220 499 538 ; +C 104 ; WX 556 ; N h ; B 65 0 491 718 ; +C 105 ; WX 222 ; N i ; B 67 0 155 718 ; +C 106 ; WX 222 ; N j ; B -16 -210 155 718 ; +C 107 ; WX 500 ; N k ; B 67 0 501 718 ; +C 108 ; WX 222 ; N l ; B 67 0 155 718 ; +C 109 ; WX 833 ; N m ; B 65 0 769 538 ; +C 110 ; WX 556 ; N n ; B 65 0 491 538 ; +C 111 ; WX 556 ; N o ; B 35 -14 521 538 ; +C 112 ; WX 556 ; N p ; B 58 -207 517 538 ; +C 113 ; WX 556 ; N q ; B 35 -207 494 538 ; +C 114 ; WX 333 ; N r ; B 77 0 332 538 ; +C 115 ; WX 500 ; N s ; B 32 -15 464 538 ; +C 116 ; WX 278 ; N t ; B 14 -7 257 669 ; +C 117 ; WX 556 ; N u ; B 68 -15 489 523 ; +C 118 ; WX 500 ; N v ; B 8 0 492 523 ; +C 119 ; WX 722 ; N w ; B 14 0 709 523 ; +C 120 ; WX 500 ; N x ; B 11 0 490 523 ; +C 121 ; WX 500 ; N y ; B 11 -214 489 523 ; +C 122 ; WX 500 ; N z ; B 31 0 469 523 ; +C 123 ; WX 334 ; N braceleft ; B 42 -196 292 722 ; +C 124 ; WX 260 ; N bar ; B 94 -225 167 775 ; +C 125 ; WX 334 ; N braceright ; B 42 -196 292 722 ; +C 126 ; WX 584 ; N asciitilde ; B 61 180 523 326 ; +C 161 ; WX 333 ; N exclamdown ; B 118 -195 215 523 ; +C 162 ; WX 556 ; N cent ; B 51 -115 513 623 ; +C 163 ; WX 556 ; N sterling ; B 33 -16 539 718 ; +C 164 ; WX 167 ; N fraction ; B -166 -19 333 703 ; +C 165 ; WX 556 ; N yen ; B 3 0 553 688 ; +C 166 ; WX 556 ; N florin ; B -11 -207 501 737 ; +C 167 ; WX 556 ; N section ; B 43 -191 512 737 ; +C 168 ; WX 556 ; N currency ; B 28 99 528 603 ; +C 169 ; WX 191 ; N quotesingle ; B 59 463 132 718 ; +C 170 ; WX 333 ; N quotedblleft ; B 38 470 307 725 ; +C 171 ; WX 556 ; N guillemotleft ; B 97 108 459 446 ; +C 172 ; WX 333 ; N guilsinglleft ; B 88 108 245 446 ; +C 173 ; WX 333 ; N guilsinglright ; B 88 108 245 446 ; +C 174 ; WX 500 ; N fi ; B 14 0 434 728 ; +C 175 ; WX 500 ; N fl ; B 14 0 432 728 ; +C 177 ; WX 556 ; N endash ; B 0 240 556 313 ; +C 178 ; WX 556 ; N dagger ; B 43 -159 514 718 ; +C 179 ; WX 556 ; N daggerdbl ; B 43 -159 514 718 ; +C 180 ; WX 278 ; N periodcentered ; B 77 190 202 315 ; +C 182 ; WX 537 ; N paragraph ; B 18 -173 497 718 ; +C 183 ; WX 350 ; N bullet ; B 18 202 333 517 ; +C 184 ; WX 222 ; N quotesinglbase ; B 53 -149 157 106 ; +C 185 ; WX 333 ; N quotedblbase ; B 26 -149 295 106 ; +C 186 ; WX 333 ; N quotedblright ; B 26 463 295 718 ; +C 187 ; WX 556 ; N guillemotright ; B 97 108 459 446 ; +C 188 ; WX 1000 ; N ellipsis ; B 115 0 885 106 ; +C 189 ; WX 1000 ; N perthousand ; B 7 -19 994 703 ; +C 191 ; WX 611 ; N questiondown ; B 91 -201 527 525 ; +C 193 ; WX 333 ; N grave ; B 14 593 211 734 ; +C 194 ; WX 333 ; N acute ; B 122 593 319 734 ; +C 195 ; WX 333 ; N circumflex ; B 21 593 312 734 ; +C 196 ; WX 333 ; N tilde ; B -4 606 337 722 ; +C 197 ; WX 333 ; N macron ; B 10 627 323 684 ; +C 198 ; WX 333 ; N breve ; B 13 595 321 731 ; +C 199 ; WX 333 ; N dotaccent ; B 121 604 212 706 ; +C 200 ; WX 333 ; N dieresis ; B 40 604 293 706 ; +C 202 ; WX 333 ; N ring ; B 75 572 259 756 ; +C 203 ; WX 333 ; N cedilla ; B 45 -225 259 0 ; +C 205 ; WX 333 ; N hungarumlaut ; B 31 593 409 734 ; +C 206 ; WX 333 ; N ogonek ; B 73 -225 287 0 ; +C 207 ; WX 333 ; N caron ; B 21 593 312 734 ; +C 208 ; WX 1000 ; N emdash ; B 0 240 1000 313 ; +C 225 ; WX 1000 ; N AE ; B 8 0 951 718 ; +C 227 ; WX 370 ; N ordfeminine ; B 24 405 346 737 ; +C 232 ; WX 556 ; N Lslash ; B -20 0 537 718 ; +C 233 ; WX 778 ; N Oslash ; B 39 -19 740 737 ; +C 234 ; WX 1000 ; N OE ; B 36 -19 965 737 ; +C 235 ; WX 365 ; N ordmasculine ; B 25 405 341 737 ; +C 241 ; WX 889 ; N ae ; B 36 -15 847 538 ; +C 245 ; WX 278 ; N dotlessi ; B 95 0 183 523 ; +C 248 ; WX 222 ; N lslash ; B -20 0 242 718 ; +C 249 ; WX 611 ; N oslash ; B 28 -22 537 545 ; +C 250 ; WX 944 ; N oe ; B 35 -15 902 538 ; +C 251 ; WX 611 ; N germandbls ; B 67 -15 571 728 ; +C -1 ; WX 278 ; N Idieresis ; B 13 0 266 901 ; +C -1 ; WX 556 ; N eacute ; B 40 -15 516 734 ; +C -1 ; WX 556 ; N abreve ; B 36 -15 530 731 ; +C -1 ; WX 556 ; N uhungarumlaut ; B 68 -15 521 734 ; +C -1 ; WX 556 ; N ecaron ; B 40 -15 516 734 ; +C -1 ; WX 667 ; N Ydieresis ; B 14 0 653 901 ; +C -1 ; WX 584 ; N divide ; B 39 -19 545 524 ; +C -1 ; WX 667 ; N Yacute ; B 14 0 653 929 ; +C -1 ; WX 667 ; N Acircumflex ; B 14 0 654 929 ; +C -1 ; WX 556 ; N aacute ; B 36 -15 530 734 ; +C -1 ; WX 722 ; N Ucircumflex ; B 79 -19 644 929 ; +C -1 ; WX 500 ; N yacute ; B 11 -214 489 734 ; +C -1 ; WX 500 ; N scommaaccent ; B 32 -225 464 538 ; +C -1 ; WX 556 ; N ecircumflex ; B 40 -15 516 734 ; +C -1 ; WX 722 ; N Uring ; B 79 -19 644 931 ; +C -1 ; WX 722 ; N Udieresis ; B 79 -19 644 901 ; +C -1 ; WX 556 ; N aogonek ; B 36 -220 547 538 ; +C -1 ; WX 722 ; N Uacute ; B 79 -19 644 929 ; +C -1 ; WX 556 ; N uogonek ; B 68 -225 519 523 ; +C -1 ; WX 667 ; N Edieresis ; B 86 0 616 901 ; +C -1 ; WX 722 ; N Dcroat ; B 0 0 674 718 ; +C -1 ; WX 250 ; N commaaccent ; B 87 -225 181 -40 ; +C -1 ; WX 737 ; N copyright ; B -14 -19 752 737 ; +C -1 ; WX 667 ; N Emacron ; B 86 0 616 879 ; +C -1 ; WX 500 ; N ccaron ; B 30 -15 477 734 ; +C -1 ; WX 556 ; N aring ; B 36 -15 530 756 ; +C -1 ; WX 722 ; N Ncommaaccent ; B 76 -225 646 718 ; +C -1 ; WX 222 ; N lacute ; B 67 0 264 929 ; +C -1 ; WX 556 ; N agrave ; B 36 -15 530 734 ; +C -1 ; WX 611 ; N Tcommaaccent ; B 14 -225 597 718 ; +C -1 ; WX 722 ; N Cacute ; B 44 -19 681 929 ; +C -1 ; WX 556 ; N atilde ; B 36 -15 530 722 ; +C -1 ; WX 667 ; N Edotaccent ; B 86 0 616 901 ; +C -1 ; WX 500 ; N scaron ; B 32 -15 464 734 ; +C -1 ; WX 500 ; N scedilla ; B 32 -225 464 538 ; +C -1 ; WX 278 ; N iacute ; B 95 0 292 734 ; +C -1 ; WX 471 ; N lozenge ; B 10 0 462 728 ; +C -1 ; WX 722 ; N Rcaron ; B 88 0 684 929 ; +C -1 ; WX 778 ; N Gcommaaccent ; B 48 -225 704 737 ; +C -1 ; WX 556 ; N ucircumflex ; B 68 -15 489 734 ; +C -1 ; WX 556 ; N acircumflex ; B 36 -15 530 734 ; +C -1 ; WX 667 ; N Amacron ; B 14 0 654 879 ; +C -1 ; WX 333 ; N rcaron ; B 61 0 352 734 ; +C -1 ; WX 500 ; N ccedilla ; B 30 -225 477 538 ; +C -1 ; WX 611 ; N Zdotaccent ; B 23 0 588 901 ; +C -1 ; WX 667 ; N Thorn ; B 86 0 622 718 ; +C -1 ; WX 778 ; N Omacron ; B 39 -19 739 879 ; +C -1 ; WX 722 ; N Racute ; B 88 0 684 929 ; +C -1 ; WX 667 ; N Sacute ; B 49 -19 620 929 ; +C -1 ; WX 643 ; N dcaron ; B 35 -15 655 718 ; +C -1 ; WX 722 ; N Umacron ; B 79 -19 644 879 ; +C -1 ; WX 556 ; N uring ; B 68 -15 489 756 ; +C -1 ; WX 333 ; N threesuperior ; B 5 270 325 703 ; +C -1 ; WX 778 ; N Ograve ; B 39 -19 739 929 ; +C -1 ; WX 667 ; N Agrave ; B 14 0 654 929 ; +C -1 ; WX 667 ; N Abreve ; B 14 0 654 926 ; +C -1 ; WX 584 ; N multiply ; B 39 0 545 506 ; +C -1 ; WX 556 ; N uacute ; B 68 -15 489 734 ; +C -1 ; WX 611 ; N Tcaron ; B 14 0 597 929 ; +C -1 ; WX 476 ; N partialdiff ; B 13 -38 463 714 ; +C -1 ; WX 500 ; N ydieresis ; B 11 -214 489 706 ; +C -1 ; WX 722 ; N Nacute ; B 76 0 646 929 ; +C -1 ; WX 278 ; N icircumflex ; B -6 0 285 734 ; +C -1 ; WX 667 ; N Ecircumflex ; B 86 0 616 929 ; +C -1 ; WX 556 ; N adieresis ; B 36 -15 530 706 ; +C -1 ; WX 556 ; N edieresis ; B 40 -15 516 706 ; +C -1 ; WX 500 ; N cacute ; B 30 -15 477 734 ; +C -1 ; WX 556 ; N nacute ; B 65 0 491 734 ; +C -1 ; WX 556 ; N umacron ; B 68 -15 489 684 ; +C -1 ; WX 722 ; N Ncaron ; B 76 0 646 929 ; +C -1 ; WX 278 ; N Iacute ; B 91 0 292 929 ; +C -1 ; WX 584 ; N plusminus ; B 39 0 545 506 ; +C -1 ; WX 260 ; N brokenbar ; B 94 -150 167 700 ; +C -1 ; WX 737 ; N registered ; B -14 -19 752 737 ; +C -1 ; WX 778 ; N Gbreve ; B 48 -19 704 926 ; +C -1 ; WX 278 ; N Idotaccent ; B 91 0 188 901 ; +C -1 ; WX 600 ; N summation ; B 15 -10 586 706 ; +C -1 ; WX 667 ; N Egrave ; B 86 0 616 929 ; +C -1 ; WX 333 ; N racute ; B 77 0 332 734 ; +C -1 ; WX 556 ; N omacron ; B 35 -14 521 684 ; +C -1 ; WX 611 ; N Zacute ; B 23 0 588 929 ; +C -1 ; WX 611 ; N Zcaron ; B 23 0 588 929 ; +C -1 ; WX 549 ; N greaterequal ; B 26 0 523 674 ; +C -1 ; WX 722 ; N Eth ; B 0 0 674 718 ; +C -1 ; WX 722 ; N Ccedilla ; B 44 -225 681 737 ; +C -1 ; WX 222 ; N lcommaaccent ; B 67 -225 167 718 ; +C -1 ; WX 317 ; N tcaron ; B 14 -7 329 808 ; +C -1 ; WX 556 ; N eogonek ; B 40 -225 516 538 ; +C -1 ; WX 722 ; N Uogonek ; B 79 -225 644 718 ; +C -1 ; WX 667 ; N Aacute ; B 14 0 654 929 ; +C -1 ; WX 667 ; N Adieresis ; B 14 0 654 901 ; +C -1 ; WX 556 ; N egrave ; B 40 -15 516 734 ; +C -1 ; WX 500 ; N zacute ; B 31 0 469 734 ; +C -1 ; WX 222 ; N iogonek ; B -31 -225 183 718 ; +C -1 ; WX 778 ; N Oacute ; B 39 -19 739 929 ; +C -1 ; WX 556 ; N oacute ; B 35 -14 521 734 ; +C -1 ; WX 556 ; N amacron ; B 36 -15 530 684 ; +C -1 ; WX 500 ; N sacute ; B 32 -15 464 734 ; +C -1 ; WX 278 ; N idieresis ; B 13 0 266 706 ; +C -1 ; WX 778 ; N Ocircumflex ; B 39 -19 739 929 ; +C -1 ; WX 722 ; N Ugrave ; B 79 -19 644 929 ; +C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ; +C -1 ; WX 556 ; N thorn ; B 58 -207 517 718 ; +C -1 ; WX 333 ; N twosuperior ; B 4 281 323 703 ; +C -1 ; WX 778 ; N Odieresis ; B 39 -19 739 901 ; +C -1 ; WX 556 ; N mu ; B 68 -207 489 523 ; +C -1 ; WX 278 ; N igrave ; B -13 0 184 734 ; +C -1 ; WX 556 ; N ohungarumlaut ; B 35 -14 521 734 ; +C -1 ; WX 667 ; N Eogonek ; B 86 -220 633 718 ; +C -1 ; WX 556 ; N dcroat ; B 35 -15 550 718 ; +C -1 ; WX 834 ; N threequarters ; B 45 -19 810 703 ; +C -1 ; WX 667 ; N Scedilla ; B 49 -225 620 737 ; +C -1 ; WX 299 ; N lcaron ; B 67 0 311 718 ; +C -1 ; WX 667 ; N Kcommaaccent ; B 76 -225 663 718 ; +C -1 ; WX 556 ; N Lacute ; B 76 0 537 929 ; +C -1 ; WX 1000 ; N trademark ; B 46 306 903 718 ; +C -1 ; WX 556 ; N edotaccent ; B 40 -15 516 706 ; +C -1 ; WX 278 ; N Igrave ; B -13 0 188 929 ; +C -1 ; WX 278 ; N Imacron ; B -17 0 296 879 ; +C -1 ; WX 556 ; N Lcaron ; B 76 0 537 718 ; +C -1 ; WX 834 ; N onehalf ; B 43 -19 773 703 ; +C -1 ; WX 549 ; N lessequal ; B 26 0 523 674 ; +C -1 ; WX 556 ; N ocircumflex ; B 35 -14 521 734 ; +C -1 ; WX 556 ; N ntilde ; B 65 0 491 722 ; +C -1 ; WX 722 ; N Uhungarumlaut ; B 79 -19 644 929 ; +C -1 ; WX 667 ; N Eacute ; B 86 0 616 929 ; +C -1 ; WX 556 ; N emacron ; B 40 -15 516 684 ; +C -1 ; WX 556 ; N gbreve ; B 40 -220 499 731 ; +C -1 ; WX 834 ; N onequarter ; B 73 -19 756 703 ; +C -1 ; WX 667 ; N Scaron ; B 49 -19 620 929 ; +C -1 ; WX 667 ; N Scommaaccent ; B 49 -225 620 737 ; +C -1 ; WX 778 ; N Ohungarumlaut ; B 39 -19 739 929 ; +C -1 ; WX 400 ; N degree ; B 54 411 346 703 ; +C -1 ; WX 556 ; N ograve ; B 35 -14 521 734 ; +C -1 ; WX 722 ; N Ccaron ; B 44 -19 681 929 ; +C -1 ; WX 556 ; N ugrave ; B 68 -15 489 734 ; +C -1 ; WX 453 ; N radical ; B -4 -80 458 762 ; +C -1 ; WX 722 ; N Dcaron ; B 81 0 674 929 ; +C -1 ; WX 333 ; N rcommaaccent ; B 77 -225 332 538 ; +C -1 ; WX 722 ; N Ntilde ; B 76 0 646 917 ; +C -1 ; WX 556 ; N otilde ; B 35 -14 521 722 ; +C -1 ; WX 722 ; N Rcommaaccent ; B 88 -225 684 718 ; +C -1 ; WX 556 ; N Lcommaaccent ; B 76 -225 537 718 ; +C -1 ; WX 667 ; N Atilde ; B 14 0 654 917 ; +C -1 ; WX 667 ; N Aogonek ; B 14 -225 654 718 ; +C -1 ; WX 667 ; N Aring ; B 14 0 654 931 ; +C -1 ; WX 778 ; N Otilde ; B 39 -19 739 917 ; +C -1 ; WX 500 ; N zdotaccent ; B 31 0 469 706 ; +C -1 ; WX 667 ; N Ecaron ; B 86 0 616 929 ; +C -1 ; WX 278 ; N Iogonek ; B -3 -225 211 718 ; +C -1 ; WX 500 ; N kcommaaccent ; B 67 -225 501 718 ; +C -1 ; WX 584 ; N minus ; B 39 216 545 289 ; +C -1 ; WX 278 ; N Icircumflex ; B -6 0 285 929 ; +C -1 ; WX 556 ; N ncaron ; B 65 0 491 734 ; +C -1 ; WX 278 ; N tcommaaccent ; B 14 -225 257 669 ; +C -1 ; WX 584 ; N logicalnot ; B 39 108 545 390 ; +C -1 ; WX 556 ; N odieresis ; B 35 -14 521 706 ; +C -1 ; WX 556 ; N udieresis ; B 68 -15 489 706 ; +C -1 ; WX 549 ; N notequal ; B 12 -35 537 551 ; +C -1 ; WX 556 ; N gcommaaccent ; B 40 -220 499 822 ; +C -1 ; WX 556 ; N eth ; B 35 -15 522 737 ; +C -1 ; WX 500 ; N zcaron ; B 31 0 469 734 ; +C -1 ; WX 556 ; N ncommaaccent ; B 65 -225 491 538 ; +C -1 ; WX 333 ; N onesuperior ; B 43 281 222 703 ; +C -1 ; WX 278 ; N imacron ; B 5 0 272 684 ; +C -1 ; WX 556 ; N Euro ; B 0 0 0 0 ; +EndCharMetrics +StartKernData +StartKernPairs 2705 +KPX A C -30 +KPX A Cacute -30 +KPX A Ccaron -30 +KPX A Ccedilla -30 +KPX A G -30 +KPX A Gbreve -30 +KPX A Gcommaaccent -30 +KPX A O -30 +KPX A Oacute -30 +KPX A Ocircumflex -30 +KPX A Odieresis -30 +KPX A Ograve -30 +KPX A Ohungarumlaut -30 +KPX A Omacron -30 +KPX A Oslash -30 +KPX A Otilde -30 +KPX A Q -30 +KPX A T -120 +KPX A Tcaron -120 +KPX A Tcommaaccent -120 +KPX A U -50 +KPX A Uacute -50 +KPX A Ucircumflex -50 +KPX A Udieresis -50 +KPX A Ugrave -50 +KPX A Uhungarumlaut -50 +KPX A Umacron -50 +KPX A Uogonek -50 +KPX A Uring -50 +KPX A V -70 +KPX A W -50 +KPX A Y -100 +KPX A Yacute -100 +KPX A Ydieresis -100 +KPX A u -30 +KPX A uacute -30 +KPX A ucircumflex -30 +KPX A udieresis -30 +KPX A ugrave -30 +KPX A uhungarumlaut -30 +KPX A umacron -30 +KPX A uogonek -30 +KPX A uring -30 +KPX A v -40 +KPX A w -40 +KPX A y -40 +KPX A yacute -40 +KPX A ydieresis -40 +KPX Aacute C -30 +KPX Aacute Cacute -30 +KPX Aacute Ccaron -30 +KPX Aacute Ccedilla -30 +KPX Aacute G -30 +KPX Aacute Gbreve -30 +KPX Aacute Gcommaaccent -30 +KPX Aacute O -30 +KPX Aacute Oacute -30 +KPX Aacute Ocircumflex -30 +KPX Aacute Odieresis -30 +KPX Aacute Ograve -30 +KPX Aacute Ohungarumlaut -30 +KPX Aacute Omacron -30 +KPX Aacute Oslash -30 +KPX Aacute Otilde -30 +KPX Aacute Q -30 +KPX Aacute T -120 +KPX Aacute Tcaron -120 +KPX Aacute Tcommaaccent -120 +KPX Aacute U -50 +KPX Aacute Uacute -50 +KPX Aacute Ucircumflex -50 +KPX Aacute Udieresis -50 +KPX Aacute Ugrave -50 +KPX Aacute Uhungarumlaut -50 +KPX Aacute Umacron -50 +KPX Aacute Uogonek -50 +KPX Aacute Uring -50 +KPX Aacute V -70 +KPX Aacute W -50 +KPX Aacute Y -100 +KPX Aacute Yacute -100 +KPX Aacute Ydieresis -100 +KPX Aacute u -30 +KPX Aacute uacute -30 +KPX Aacute ucircumflex -30 +KPX Aacute udieresis -30 +KPX Aacute ugrave -30 +KPX Aacute uhungarumlaut -30 +KPX Aacute umacron -30 +KPX Aacute uogonek -30 +KPX Aacute uring -30 +KPX Aacute v -40 +KPX Aacute w -40 +KPX Aacute y -40 +KPX Aacute yacute -40 +KPX Aacute ydieresis -40 +KPX Abreve C -30 +KPX Abreve Cacute -30 +KPX Abreve Ccaron -30 +KPX Abreve Ccedilla -30 +KPX Abreve G -30 +KPX Abreve Gbreve -30 +KPX Abreve Gcommaaccent -30 +KPX Abreve O -30 +KPX Abreve Oacute -30 +KPX Abreve Ocircumflex -30 +KPX Abreve Odieresis -30 +KPX Abreve Ograve -30 +KPX Abreve Ohungarumlaut -30 +KPX Abreve Omacron -30 +KPX Abreve Oslash -30 +KPX Abreve Otilde -30 +KPX Abreve Q -30 +KPX Abreve T -120 +KPX Abreve Tcaron -120 +KPX Abreve Tcommaaccent -120 +KPX Abreve U -50 +KPX Abreve Uacute -50 +KPX Abreve Ucircumflex -50 +KPX Abreve Udieresis -50 +KPX Abreve Ugrave -50 +KPX Abreve Uhungarumlaut -50 +KPX Abreve Umacron -50 +KPX Abreve Uogonek -50 +KPX Abreve Uring -50 +KPX Abreve V -70 +KPX Abreve W -50 +KPX Abreve Y -100 +KPX Abreve Yacute -100 +KPX Abreve Ydieresis -100 +KPX Abreve u -30 +KPX Abreve uacute -30 +KPX Abreve ucircumflex -30 +KPX Abreve udieresis -30 +KPX Abreve ugrave -30 +KPX Abreve uhungarumlaut -30 +KPX Abreve umacron -30 +KPX Abreve uogonek -30 +KPX Abreve uring -30 +KPX Abreve v -40 +KPX Abreve w -40 +KPX Abreve y -40 +KPX Abreve yacute -40 +KPX Abreve ydieresis -40 +KPX Acircumflex C -30 +KPX Acircumflex Cacute -30 +KPX Acircumflex Ccaron -30 +KPX Acircumflex Ccedilla -30 +KPX Acircumflex G -30 +KPX Acircumflex Gbreve -30 +KPX Acircumflex Gcommaaccent -30 +KPX Acircumflex O -30 +KPX Acircumflex Oacute -30 +KPX Acircumflex Ocircumflex -30 +KPX Acircumflex Odieresis -30 +KPX Acircumflex Ograve -30 +KPX Acircumflex Ohungarumlaut -30 +KPX Acircumflex Omacron -30 +KPX Acircumflex Oslash -30 +KPX Acircumflex Otilde -30 +KPX Acircumflex Q -30 +KPX Acircumflex T -120 +KPX Acircumflex Tcaron -120 +KPX Acircumflex Tcommaaccent -120 +KPX Acircumflex U -50 +KPX Acircumflex Uacute -50 +KPX Acircumflex Ucircumflex -50 +KPX Acircumflex Udieresis -50 +KPX Acircumflex Ugrave -50 +KPX Acircumflex Uhungarumlaut -50 +KPX Acircumflex Umacron -50 +KPX Acircumflex Uogonek -50 +KPX Acircumflex Uring -50 +KPX Acircumflex V -70 +KPX Acircumflex W -50 +KPX Acircumflex Y -100 +KPX Acircumflex Yacute -100 +KPX Acircumflex Ydieresis -100 +KPX Acircumflex u -30 +KPX Acircumflex uacute -30 +KPX Acircumflex ucircumflex -30 +KPX Acircumflex udieresis -30 +KPX Acircumflex ugrave -30 +KPX Acircumflex uhungarumlaut -30 +KPX Acircumflex umacron -30 +KPX Acircumflex uogonek -30 +KPX Acircumflex uring -30 +KPX Acircumflex v -40 +KPX Acircumflex w -40 +KPX Acircumflex y -40 +KPX Acircumflex yacute -40 +KPX Acircumflex ydieresis -40 +KPX Adieresis C -30 +KPX Adieresis Cacute -30 +KPX Adieresis Ccaron -30 +KPX Adieresis Ccedilla -30 +KPX Adieresis G -30 +KPX Adieresis Gbreve -30 +KPX Adieresis Gcommaaccent -30 +KPX Adieresis O -30 +KPX Adieresis Oacute -30 +KPX Adieresis Ocircumflex -30 +KPX Adieresis Odieresis -30 +KPX Adieresis Ograve -30 +KPX Adieresis Ohungarumlaut -30 +KPX Adieresis Omacron -30 +KPX Adieresis Oslash -30 +KPX Adieresis Otilde -30 +KPX Adieresis Q -30 +KPX Adieresis T -120 +KPX Adieresis Tcaron -120 +KPX Adieresis Tcommaaccent -120 +KPX Adieresis U -50 +KPX Adieresis Uacute -50 +KPX Adieresis Ucircumflex -50 +KPX Adieresis Udieresis -50 +KPX Adieresis Ugrave -50 +KPX Adieresis Uhungarumlaut -50 +KPX Adieresis Umacron -50 +KPX Adieresis Uogonek -50 +KPX Adieresis Uring -50 +KPX Adieresis V -70 +KPX Adieresis W -50 +KPX Adieresis Y -100 +KPX Adieresis Yacute -100 +KPX Adieresis Ydieresis -100 +KPX Adieresis u -30 +KPX Adieresis uacute -30 +KPX Adieresis ucircumflex -30 +KPX Adieresis udieresis -30 +KPX Adieresis ugrave -30 +KPX Adieresis uhungarumlaut -30 +KPX Adieresis umacron -30 +KPX Adieresis uogonek -30 +KPX Adieresis uring -30 +KPX Adieresis v -40 +KPX Adieresis w -40 +KPX Adieresis y -40 +KPX Adieresis yacute -40 +KPX Adieresis ydieresis -40 +KPX Agrave C -30 +KPX Agrave Cacute -30 +KPX Agrave Ccaron -30 +KPX Agrave Ccedilla -30 +KPX Agrave G -30 +KPX Agrave Gbreve -30 +KPX Agrave Gcommaaccent -30 +KPX Agrave O -30 +KPX Agrave Oacute -30 +KPX Agrave Ocircumflex -30 +KPX Agrave Odieresis -30 +KPX Agrave Ograve -30 +KPX Agrave Ohungarumlaut -30 +KPX Agrave Omacron -30 +KPX Agrave Oslash -30 +KPX Agrave Otilde -30 +KPX Agrave Q -30 +KPX Agrave T -120 +KPX Agrave Tcaron -120 +KPX Agrave Tcommaaccent -120 +KPX Agrave U -50 +KPX Agrave Uacute -50 +KPX Agrave Ucircumflex -50 +KPX Agrave Udieresis -50 +KPX Agrave Ugrave -50 +KPX Agrave Uhungarumlaut -50 +KPX Agrave Umacron -50 +KPX Agrave Uogonek -50 +KPX Agrave Uring -50 +KPX Agrave V -70 +KPX Agrave W -50 +KPX Agrave Y -100 +KPX Agrave Yacute -100 +KPX Agrave Ydieresis -100 +KPX Agrave u -30 +KPX Agrave uacute -30 +KPX Agrave ucircumflex -30 +KPX Agrave udieresis -30 +KPX Agrave ugrave -30 +KPX Agrave uhungarumlaut -30 +KPX Agrave umacron -30 +KPX Agrave uogonek -30 +KPX Agrave uring -30 +KPX Agrave v -40 +KPX Agrave w -40 +KPX Agrave y -40 +KPX Agrave yacute -40 +KPX Agrave ydieresis -40 +KPX Amacron C -30 +KPX Amacron Cacute -30 +KPX Amacron Ccaron -30 +KPX Amacron Ccedilla -30 +KPX Amacron G -30 +KPX Amacron Gbreve -30 +KPX Amacron Gcommaaccent -30 +KPX Amacron O -30 +KPX Amacron Oacute -30 +KPX Amacron Ocircumflex -30 +KPX Amacron Odieresis -30 +KPX Amacron Ograve -30 +KPX Amacron Ohungarumlaut -30 +KPX Amacron Omacron -30 +KPX Amacron Oslash -30 +KPX Amacron Otilde -30 +KPX Amacron Q -30 +KPX Amacron T -120 +KPX Amacron Tcaron -120 +KPX Amacron Tcommaaccent -120 +KPX Amacron U -50 +KPX Amacron Uacute -50 +KPX Amacron Ucircumflex -50 +KPX Amacron Udieresis -50 +KPX Amacron Ugrave -50 +KPX Amacron Uhungarumlaut -50 +KPX Amacron Umacron -50 +KPX Amacron Uogonek -50 +KPX Amacron Uring -50 +KPX Amacron V -70 +KPX Amacron W -50 +KPX Amacron Y -100 +KPX Amacron Yacute -100 +KPX Amacron Ydieresis -100 +KPX Amacron u -30 +KPX Amacron uacute -30 +KPX Amacron ucircumflex -30 +KPX Amacron udieresis -30 +KPX Amacron ugrave -30 +KPX Amacron uhungarumlaut -30 +KPX Amacron umacron -30 +KPX Amacron uogonek -30 +KPX Amacron uring -30 +KPX Amacron v -40 +KPX Amacron w -40 +KPX Amacron y -40 +KPX Amacron yacute -40 +KPX Amacron ydieresis -40 +KPX Aogonek C -30 +KPX Aogonek Cacute -30 +KPX Aogonek Ccaron -30 +KPX Aogonek Ccedilla -30 +KPX Aogonek G -30 +KPX Aogonek Gbreve -30 +KPX Aogonek Gcommaaccent -30 +KPX Aogonek O -30 +KPX Aogonek Oacute -30 +KPX Aogonek Ocircumflex -30 +KPX Aogonek Odieresis -30 +KPX Aogonek Ograve -30 +KPX Aogonek Ohungarumlaut -30 +KPX Aogonek Omacron -30 +KPX Aogonek Oslash -30 +KPX Aogonek Otilde -30 +KPX Aogonek Q -30 +KPX Aogonek T -120 +KPX Aogonek Tcaron -120 +KPX Aogonek Tcommaaccent -120 +KPX Aogonek U -50 +KPX Aogonek Uacute -50 +KPX Aogonek Ucircumflex -50 +KPX Aogonek Udieresis -50 +KPX Aogonek Ugrave -50 +KPX Aogonek Uhungarumlaut -50 +KPX Aogonek Umacron -50 +KPX Aogonek Uogonek -50 +KPX Aogonek Uring -50 +KPX Aogonek V -70 +KPX Aogonek W -50 +KPX Aogonek Y -100 +KPX Aogonek Yacute -100 +KPX Aogonek Ydieresis -100 +KPX Aogonek u -30 +KPX Aogonek uacute -30 +KPX Aogonek ucircumflex -30 +KPX Aogonek udieresis -30 +KPX Aogonek ugrave -30 +KPX Aogonek uhungarumlaut -30 +KPX Aogonek umacron -30 +KPX Aogonek uogonek -30 +KPX Aogonek uring -30 +KPX Aogonek v -40 +KPX Aogonek w -40 +KPX Aogonek y -40 +KPX Aogonek yacute -40 +KPX Aogonek ydieresis -40 +KPX Aring C -30 +KPX Aring Cacute -30 +KPX Aring Ccaron -30 +KPX Aring Ccedilla -30 +KPX Aring G -30 +KPX Aring Gbreve -30 +KPX Aring Gcommaaccent -30 +KPX Aring O -30 +KPX Aring Oacute -30 +KPX Aring Ocircumflex -30 +KPX Aring Odieresis -30 +KPX Aring Ograve -30 +KPX Aring Ohungarumlaut -30 +KPX Aring Omacron -30 +KPX Aring Oslash -30 +KPX Aring Otilde -30 +KPX Aring Q -30 +KPX Aring T -120 +KPX Aring Tcaron -120 +KPX Aring Tcommaaccent -120 +KPX Aring U -50 +KPX Aring Uacute -50 +KPX Aring Ucircumflex -50 +KPX Aring Udieresis -50 +KPX Aring Ugrave -50 +KPX Aring Uhungarumlaut -50 +KPX Aring Umacron -50 +KPX Aring Uogonek -50 +KPX Aring Uring -50 +KPX Aring V -70 +KPX Aring W -50 +KPX Aring Y -100 +KPX Aring Yacute -100 +KPX Aring Ydieresis -100 +KPX Aring u -30 +KPX Aring uacute -30 +KPX Aring ucircumflex -30 +KPX Aring udieresis -30 +KPX Aring ugrave -30 +KPX Aring uhungarumlaut -30 +KPX Aring umacron -30 +KPX Aring uogonek -30 +KPX Aring uring -30 +KPX Aring v -40 +KPX Aring w -40 +KPX Aring y -40 +KPX Aring yacute -40 +KPX Aring ydieresis -40 +KPX Atilde C -30 +KPX Atilde Cacute -30 +KPX Atilde Ccaron -30 +KPX Atilde Ccedilla -30 +KPX Atilde G -30 +KPX Atilde Gbreve -30 +KPX Atilde Gcommaaccent -30 +KPX Atilde O -30 +KPX Atilde Oacute -30 +KPX Atilde Ocircumflex -30 +KPX Atilde Odieresis -30 +KPX Atilde Ograve -30 +KPX Atilde Ohungarumlaut -30 +KPX Atilde Omacron -30 +KPX Atilde Oslash -30 +KPX Atilde Otilde -30 +KPX Atilde Q -30 +KPX Atilde T -120 +KPX Atilde Tcaron -120 +KPX Atilde Tcommaaccent -120 +KPX Atilde U -50 +KPX Atilde Uacute -50 +KPX Atilde Ucircumflex -50 +KPX Atilde Udieresis -50 +KPX Atilde Ugrave -50 +KPX Atilde Uhungarumlaut -50 +KPX Atilde Umacron -50 +KPX Atilde Uogonek -50 +KPX Atilde Uring -50 +KPX Atilde V -70 +KPX Atilde W -50 +KPX Atilde Y -100 +KPX Atilde Yacute -100 +KPX Atilde Ydieresis -100 +KPX Atilde u -30 +KPX Atilde uacute -30 +KPX Atilde ucircumflex -30 +KPX Atilde udieresis -30 +KPX Atilde ugrave -30 +KPX Atilde uhungarumlaut -30 +KPX Atilde umacron -30 +KPX Atilde uogonek -30 +KPX Atilde uring -30 +KPX Atilde v -40 +KPX Atilde w -40 +KPX Atilde y -40 +KPX Atilde yacute -40 +KPX Atilde ydieresis -40 +KPX B U -10 +KPX B Uacute -10 +KPX B Ucircumflex -10 +KPX B Udieresis -10 +KPX B Ugrave -10 +KPX B Uhungarumlaut -10 +KPX B Umacron -10 +KPX B Uogonek -10 +KPX B Uring -10 +KPX B comma -20 +KPX B period -20 +KPX C comma -30 +KPX C period -30 +KPX Cacute comma -30 +KPX Cacute period -30 +KPX Ccaron comma -30 +KPX Ccaron period -30 +KPX Ccedilla comma -30 +KPX Ccedilla period -30 +KPX D A -40 +KPX D Aacute -40 +KPX D Abreve -40 +KPX D Acircumflex -40 +KPX D Adieresis -40 +KPX D Agrave -40 +KPX D Amacron -40 +KPX D Aogonek -40 +KPX D Aring -40 +KPX D Atilde -40 +KPX D V -70 +KPX D W -40 +KPX D Y -90 +KPX D Yacute -90 +KPX D Ydieresis -90 +KPX D comma -70 +KPX D period -70 +KPX Dcaron A -40 +KPX Dcaron Aacute -40 +KPX Dcaron Abreve -40 +KPX Dcaron Acircumflex -40 +KPX Dcaron Adieresis -40 +KPX Dcaron Agrave -40 +KPX Dcaron Amacron -40 +KPX Dcaron Aogonek -40 +KPX Dcaron Aring -40 +KPX Dcaron Atilde -40 +KPX Dcaron V -70 +KPX Dcaron W -40 +KPX Dcaron Y -90 +KPX Dcaron Yacute -90 +KPX Dcaron Ydieresis -90 +KPX Dcaron comma -70 +KPX Dcaron period -70 +KPX Dcroat A -40 +KPX Dcroat Aacute -40 +KPX Dcroat Abreve -40 +KPX Dcroat Acircumflex -40 +KPX Dcroat Adieresis -40 +KPX Dcroat Agrave -40 +KPX Dcroat Amacron -40 +KPX Dcroat Aogonek -40 +KPX Dcroat Aring -40 +KPX Dcroat Atilde -40 +KPX Dcroat V -70 +KPX Dcroat W -40 +KPX Dcroat Y -90 +KPX Dcroat Yacute -90 +KPX Dcroat Ydieresis -90 +KPX Dcroat comma -70 +KPX Dcroat period -70 +KPX F A -80 +KPX F Aacute -80 +KPX F Abreve -80 +KPX F Acircumflex -80 +KPX F Adieresis -80 +KPX F Agrave -80 +KPX F Amacron -80 +KPX F Aogonek -80 +KPX F Aring -80 +KPX F Atilde -80 +KPX F a -50 +KPX F aacute -50 +KPX F abreve -50 +KPX F acircumflex -50 +KPX F adieresis -50 +KPX F agrave -50 +KPX F amacron -50 +KPX F aogonek -50 +KPX F aring -50 +KPX F atilde -50 +KPX F comma -150 +KPX F e -30 +KPX F eacute -30 +KPX F ecaron -30 +KPX F ecircumflex -30 +KPX F edieresis -30 +KPX F edotaccent -30 +KPX F egrave -30 +KPX F emacron -30 +KPX F eogonek -30 +KPX F o -30 +KPX F oacute -30 +KPX F ocircumflex -30 +KPX F odieresis -30 +KPX F ograve -30 +KPX F ohungarumlaut -30 +KPX F omacron -30 +KPX F oslash -30 +KPX F otilde -30 +KPX F period -150 +KPX F r -45 +KPX F racute -45 +KPX F rcaron -45 +KPX F rcommaaccent -45 +KPX J A -20 +KPX J Aacute -20 +KPX J Abreve -20 +KPX J Acircumflex -20 +KPX J Adieresis -20 +KPX J Agrave -20 +KPX J Amacron -20 +KPX J Aogonek -20 +KPX J Aring -20 +KPX J Atilde -20 +KPX J a -20 +KPX J aacute -20 +KPX J abreve -20 +KPX J acircumflex -20 +KPX J adieresis -20 +KPX J agrave -20 +KPX J amacron -20 +KPX J aogonek -20 +KPX J aring -20 +KPX J atilde -20 +KPX J comma -30 +KPX J period -30 +KPX J u -20 +KPX J uacute -20 +KPX J ucircumflex -20 +KPX J udieresis -20 +KPX J ugrave -20 +KPX J uhungarumlaut -20 +KPX J umacron -20 +KPX J uogonek -20 +KPX J uring -20 +KPX K O -50 +KPX K Oacute -50 +KPX K Ocircumflex -50 +KPX K Odieresis -50 +KPX K Ograve -50 +KPX K Ohungarumlaut -50 +KPX K Omacron -50 +KPX K Oslash -50 +KPX K Otilde -50 +KPX K e -40 +KPX K eacute -40 +KPX K ecaron -40 +KPX K ecircumflex -40 +KPX K edieresis -40 +KPX K edotaccent -40 +KPX K egrave -40 +KPX K emacron -40 +KPX K eogonek -40 +KPX K o -40 +KPX K oacute -40 +KPX K ocircumflex -40 +KPX K odieresis -40 +KPX K ograve -40 +KPX K ohungarumlaut -40 +KPX K omacron -40 +KPX K oslash -40 +KPX K otilde -40 +KPX K u -30 +KPX K uacute -30 +KPX K ucircumflex -30 +KPX K udieresis -30 +KPX K ugrave -30 +KPX K uhungarumlaut -30 +KPX K umacron -30 +KPX K uogonek -30 +KPX K uring -30 +KPX K y -50 +KPX K yacute -50 +KPX K ydieresis -50 +KPX Kcommaaccent O -50 +KPX Kcommaaccent Oacute -50 +KPX Kcommaaccent Ocircumflex -50 +KPX Kcommaaccent Odieresis -50 +KPX Kcommaaccent Ograve -50 +KPX Kcommaaccent Ohungarumlaut -50 +KPX Kcommaaccent Omacron -50 +KPX Kcommaaccent Oslash -50 +KPX Kcommaaccent Otilde -50 +KPX Kcommaaccent e -40 +KPX Kcommaaccent eacute -40 +KPX Kcommaaccent ecaron -40 +KPX Kcommaaccent ecircumflex -40 +KPX Kcommaaccent edieresis -40 +KPX Kcommaaccent edotaccent -40 +KPX Kcommaaccent egrave -40 +KPX Kcommaaccent emacron -40 +KPX Kcommaaccent eogonek -40 +KPX Kcommaaccent o -40 +KPX Kcommaaccent oacute -40 +KPX Kcommaaccent ocircumflex -40 +KPX Kcommaaccent odieresis -40 +KPX Kcommaaccent ograve -40 +KPX Kcommaaccent ohungarumlaut -40 +KPX Kcommaaccent omacron -40 +KPX Kcommaaccent oslash -40 +KPX Kcommaaccent otilde -40 +KPX Kcommaaccent u -30 +KPX Kcommaaccent uacute -30 +KPX Kcommaaccent ucircumflex -30 +KPX Kcommaaccent udieresis -30 +KPX Kcommaaccent ugrave -30 +KPX Kcommaaccent uhungarumlaut -30 +KPX Kcommaaccent umacron -30 +KPX Kcommaaccent uogonek -30 +KPX Kcommaaccent uring -30 +KPX Kcommaaccent y -50 +KPX Kcommaaccent yacute -50 +KPX Kcommaaccent ydieresis -50 +KPX L T -110 +KPX L Tcaron -110 +KPX L Tcommaaccent -110 +KPX L V -110 +KPX L W -70 +KPX L Y -140 +KPX L Yacute -140 +KPX L Ydieresis -140 +KPX L quotedblright -140 +KPX L quoteright -160 +KPX L y -30 +KPX L yacute -30 +KPX L ydieresis -30 +KPX Lacute T -110 +KPX Lacute Tcaron -110 +KPX Lacute Tcommaaccent -110 +KPX Lacute V -110 +KPX Lacute W -70 +KPX Lacute Y -140 +KPX Lacute Yacute -140 +KPX Lacute Ydieresis -140 +KPX Lacute quotedblright -140 +KPX Lacute quoteright -160 +KPX Lacute y -30 +KPX Lacute yacute -30 +KPX Lacute ydieresis -30 +KPX Lcaron T -110 +KPX Lcaron Tcaron -110 +KPX Lcaron Tcommaaccent -110 +KPX Lcaron V -110 +KPX Lcaron W -70 +KPX Lcaron Y -140 +KPX Lcaron Yacute -140 +KPX Lcaron Ydieresis -140 +KPX Lcaron quotedblright -140 +KPX Lcaron quoteright -160 +KPX Lcaron y -30 +KPX Lcaron yacute -30 +KPX Lcaron ydieresis -30 +KPX Lcommaaccent T -110 +KPX Lcommaaccent Tcaron -110 +KPX Lcommaaccent Tcommaaccent -110 +KPX Lcommaaccent V -110 +KPX Lcommaaccent W -70 +KPX Lcommaaccent Y -140 +KPX Lcommaaccent Yacute -140 +KPX Lcommaaccent Ydieresis -140 +KPX Lcommaaccent quotedblright -140 +KPX Lcommaaccent quoteright -160 +KPX Lcommaaccent y -30 +KPX Lcommaaccent yacute -30 +KPX Lcommaaccent ydieresis -30 +KPX Lslash T -110 +KPX Lslash Tcaron -110 +KPX Lslash Tcommaaccent -110 +KPX Lslash V -110 +KPX Lslash W -70 +KPX Lslash Y -140 +KPX Lslash Yacute -140 +KPX Lslash Ydieresis -140 +KPX Lslash quotedblright -140 +KPX Lslash quoteright -160 +KPX Lslash y -30 +KPX Lslash yacute -30 +KPX Lslash ydieresis -30 +KPX O A -20 +KPX O Aacute -20 +KPX O Abreve -20 +KPX O Acircumflex -20 +KPX O Adieresis -20 +KPX O Agrave -20 +KPX O Amacron -20 +KPX O Aogonek -20 +KPX O Aring -20 +KPX O Atilde -20 +KPX O T -40 +KPX O Tcaron -40 +KPX O Tcommaaccent -40 +KPX O V -50 +KPX O W -30 +KPX O X -60 +KPX O Y -70 +KPX O Yacute -70 +KPX O Ydieresis -70 +KPX O comma -40 +KPX O period -40 +KPX Oacute A -20 +KPX Oacute Aacute -20 +KPX Oacute Abreve -20 +KPX Oacute Acircumflex -20 +KPX Oacute Adieresis -20 +KPX Oacute Agrave -20 +KPX Oacute Amacron -20 +KPX Oacute Aogonek -20 +KPX Oacute Aring -20 +KPX Oacute Atilde -20 +KPX Oacute T -40 +KPX Oacute Tcaron -40 +KPX Oacute Tcommaaccent -40 +KPX Oacute V -50 +KPX Oacute W -30 +KPX Oacute X -60 +KPX Oacute Y -70 +KPX Oacute Yacute -70 +KPX Oacute Ydieresis -70 +KPX Oacute comma -40 +KPX Oacute period -40 +KPX Ocircumflex A -20 +KPX Ocircumflex Aacute -20 +KPX Ocircumflex Abreve -20 +KPX Ocircumflex Acircumflex -20 +KPX Ocircumflex Adieresis -20 +KPX Ocircumflex Agrave -20 +KPX Ocircumflex Amacron -20 +KPX Ocircumflex Aogonek -20 +KPX Ocircumflex Aring -20 +KPX Ocircumflex Atilde -20 +KPX Ocircumflex T -40 +KPX Ocircumflex Tcaron -40 +KPX Ocircumflex Tcommaaccent -40 +KPX Ocircumflex V -50 +KPX Ocircumflex W -30 +KPX Ocircumflex X -60 +KPX Ocircumflex Y -70 +KPX Ocircumflex Yacute -70 +KPX Ocircumflex Ydieresis -70 +KPX Ocircumflex comma -40 +KPX Ocircumflex period -40 +KPX Odieresis A -20 +KPX Odieresis Aacute -20 +KPX Odieresis Abreve -20 +KPX Odieresis Acircumflex -20 +KPX Odieresis Adieresis -20 +KPX Odieresis Agrave -20 +KPX Odieresis Amacron -20 +KPX Odieresis Aogonek -20 +KPX Odieresis Aring -20 +KPX Odieresis Atilde -20 +KPX Odieresis T -40 +KPX Odieresis Tcaron -40 +KPX Odieresis Tcommaaccent -40 +KPX Odieresis V -50 +KPX Odieresis W -30 +KPX Odieresis X -60 +KPX Odieresis Y -70 +KPX Odieresis Yacute -70 +KPX Odieresis Ydieresis -70 +KPX Odieresis comma -40 +KPX Odieresis period -40 +KPX Ograve A -20 +KPX Ograve Aacute -20 +KPX Ograve Abreve -20 +KPX Ograve Acircumflex -20 +KPX Ograve Adieresis -20 +KPX Ograve Agrave -20 +KPX Ograve Amacron -20 +KPX Ograve Aogonek -20 +KPX Ograve Aring -20 +KPX Ograve Atilde -20 +KPX Ograve T -40 +KPX Ograve Tcaron -40 +KPX Ograve Tcommaaccent -40 +KPX Ograve V -50 +KPX Ograve W -30 +KPX Ograve X -60 +KPX Ograve Y -70 +KPX Ograve Yacute -70 +KPX Ograve Ydieresis -70 +KPX Ograve comma -40 +KPX Ograve period -40 +KPX Ohungarumlaut A -20 +KPX Ohungarumlaut Aacute -20 +KPX Ohungarumlaut Abreve -20 +KPX Ohungarumlaut Acircumflex -20 +KPX Ohungarumlaut Adieresis -20 +KPX Ohungarumlaut Agrave -20 +KPX Ohungarumlaut Amacron -20 +KPX Ohungarumlaut Aogonek -20 +KPX Ohungarumlaut Aring -20 +KPX Ohungarumlaut Atilde -20 +KPX Ohungarumlaut T -40 +KPX Ohungarumlaut Tcaron -40 +KPX Ohungarumlaut Tcommaaccent -40 +KPX Ohungarumlaut V -50 +KPX Ohungarumlaut W -30 +KPX Ohungarumlaut X -60 +KPX Ohungarumlaut Y -70 +KPX Ohungarumlaut Yacute -70 +KPX Ohungarumlaut Ydieresis -70 +KPX Ohungarumlaut comma -40 +KPX Ohungarumlaut period -40 +KPX Omacron A -20 +KPX Omacron Aacute -20 +KPX Omacron Abreve -20 +KPX Omacron Acircumflex -20 +KPX Omacron Adieresis -20 +KPX Omacron Agrave -20 +KPX Omacron Amacron -20 +KPX Omacron Aogonek -20 +KPX Omacron Aring -20 +KPX Omacron Atilde -20 +KPX Omacron T -40 +KPX Omacron Tcaron -40 +KPX Omacron Tcommaaccent -40 +KPX Omacron V -50 +KPX Omacron W -30 +KPX Omacron X -60 +KPX Omacron Y -70 +KPX Omacron Yacute -70 +KPX Omacron Ydieresis -70 +KPX Omacron comma -40 +KPX Omacron period -40 +KPX Oslash A -20 +KPX Oslash Aacute -20 +KPX Oslash Abreve -20 +KPX Oslash Acircumflex -20 +KPX Oslash Adieresis -20 +KPX Oslash Agrave -20 +KPX Oslash Amacron -20 +KPX Oslash Aogonek -20 +KPX Oslash Aring -20 +KPX Oslash Atilde -20 +KPX Oslash T -40 +KPX Oslash Tcaron -40 +KPX Oslash Tcommaaccent -40 +KPX Oslash V -50 +KPX Oslash W -30 +KPX Oslash X -60 +KPX Oslash Y -70 +KPX Oslash Yacute -70 +KPX Oslash Ydieresis -70 +KPX Oslash comma -40 +KPX Oslash period -40 +KPX Otilde A -20 +KPX Otilde Aacute -20 +KPX Otilde Abreve -20 +KPX Otilde Acircumflex -20 +KPX Otilde Adieresis -20 +KPX Otilde Agrave -20 +KPX Otilde Amacron -20 +KPX Otilde Aogonek -20 +KPX Otilde Aring -20 +KPX Otilde Atilde -20 +KPX Otilde T -40 +KPX Otilde Tcaron -40 +KPX Otilde Tcommaaccent -40 +KPX Otilde V -50 +KPX Otilde W -30 +KPX Otilde X -60 +KPX Otilde Y -70 +KPX Otilde Yacute -70 +KPX Otilde Ydieresis -70 +KPX Otilde comma -40 +KPX Otilde period -40 +KPX P A -120 +KPX P Aacute -120 +KPX P Abreve -120 +KPX P Acircumflex -120 +KPX P Adieresis -120 +KPX P Agrave -120 +KPX P Amacron -120 +KPX P Aogonek -120 +KPX P Aring -120 +KPX P Atilde -120 +KPX P a -40 +KPX P aacute -40 +KPX P abreve -40 +KPX P acircumflex -40 +KPX P adieresis -40 +KPX P agrave -40 +KPX P amacron -40 +KPX P aogonek -40 +KPX P aring -40 +KPX P atilde -40 +KPX P comma -180 +KPX P e -50 +KPX P eacute -50 +KPX P ecaron -50 +KPX P ecircumflex -50 +KPX P edieresis -50 +KPX P edotaccent -50 +KPX P egrave -50 +KPX P emacron -50 +KPX P eogonek -50 +KPX P o -50 +KPX P oacute -50 +KPX P ocircumflex -50 +KPX P odieresis -50 +KPX P ograve -50 +KPX P ohungarumlaut -50 +KPX P omacron -50 +KPX P oslash -50 +KPX P otilde -50 +KPX P period -180 +KPX Q U -10 +KPX Q Uacute -10 +KPX Q Ucircumflex -10 +KPX Q Udieresis -10 +KPX Q Ugrave -10 +KPX Q Uhungarumlaut -10 +KPX Q Umacron -10 +KPX Q Uogonek -10 +KPX Q Uring -10 +KPX R O -20 +KPX R Oacute -20 +KPX R Ocircumflex -20 +KPX R Odieresis -20 +KPX R Ograve -20 +KPX R Ohungarumlaut -20 +KPX R Omacron -20 +KPX R Oslash -20 +KPX R Otilde -20 +KPX R T -30 +KPX R Tcaron -30 +KPX R Tcommaaccent -30 +KPX R U -40 +KPX R Uacute -40 +KPX R Ucircumflex -40 +KPX R Udieresis -40 +KPX R Ugrave -40 +KPX R Uhungarumlaut -40 +KPX R Umacron -40 +KPX R Uogonek -40 +KPX R Uring -40 +KPX R V -50 +KPX R W -30 +KPX R Y -50 +KPX R Yacute -50 +KPX R Ydieresis -50 +KPX Racute O -20 +KPX Racute Oacute -20 +KPX Racute Ocircumflex -20 +KPX Racute Odieresis -20 +KPX Racute Ograve -20 +KPX Racute Ohungarumlaut -20 +KPX Racute Omacron -20 +KPX Racute Oslash -20 +KPX Racute Otilde -20 +KPX Racute T -30 +KPX Racute Tcaron -30 +KPX Racute Tcommaaccent -30 +KPX Racute U -40 +KPX Racute Uacute -40 +KPX Racute Ucircumflex -40 +KPX Racute Udieresis -40 +KPX Racute Ugrave -40 +KPX Racute Uhungarumlaut -40 +KPX Racute Umacron -40 +KPX Racute Uogonek -40 +KPX Racute Uring -40 +KPX Racute V -50 +KPX Racute W -30 +KPX Racute Y -50 +KPX Racute Yacute -50 +KPX Racute Ydieresis -50 +KPX Rcaron O -20 +KPX Rcaron Oacute -20 +KPX Rcaron Ocircumflex -20 +KPX Rcaron Odieresis -20 +KPX Rcaron Ograve -20 +KPX Rcaron Ohungarumlaut -20 +KPX Rcaron Omacron -20 +KPX Rcaron Oslash -20 +KPX Rcaron Otilde -20 +KPX Rcaron T -30 +KPX Rcaron Tcaron -30 +KPX Rcaron Tcommaaccent -30 +KPX Rcaron U -40 +KPX Rcaron Uacute -40 +KPX Rcaron Ucircumflex -40 +KPX Rcaron Udieresis -40 +KPX Rcaron Ugrave -40 +KPX Rcaron Uhungarumlaut -40 +KPX Rcaron Umacron -40 +KPX Rcaron Uogonek -40 +KPX Rcaron Uring -40 +KPX Rcaron V -50 +KPX Rcaron W -30 +KPX Rcaron Y -50 +KPX Rcaron Yacute -50 +KPX Rcaron Ydieresis -50 +KPX Rcommaaccent O -20 +KPX Rcommaaccent Oacute -20 +KPX Rcommaaccent Ocircumflex -20 +KPX Rcommaaccent Odieresis -20 +KPX Rcommaaccent Ograve -20 +KPX Rcommaaccent Ohungarumlaut -20 +KPX Rcommaaccent Omacron -20 +KPX Rcommaaccent Oslash -20 +KPX Rcommaaccent Otilde -20 +KPX Rcommaaccent T -30 +KPX Rcommaaccent Tcaron -30 +KPX Rcommaaccent Tcommaaccent -30 +KPX Rcommaaccent U -40 +KPX Rcommaaccent Uacute -40 +KPX Rcommaaccent Ucircumflex -40 +KPX Rcommaaccent Udieresis -40 +KPX Rcommaaccent Ugrave -40 +KPX Rcommaaccent Uhungarumlaut -40 +KPX Rcommaaccent Umacron -40 +KPX Rcommaaccent Uogonek -40 +KPX Rcommaaccent Uring -40 +KPX Rcommaaccent V -50 +KPX Rcommaaccent W -30 +KPX Rcommaaccent Y -50 +KPX Rcommaaccent Yacute -50 +KPX Rcommaaccent Ydieresis -50 +KPX S comma -20 +KPX S period -20 +KPX Sacute comma -20 +KPX Sacute period -20 +KPX Scaron comma -20 +KPX Scaron period -20 +KPX Scedilla comma -20 +KPX Scedilla period -20 +KPX Scommaaccent comma -20 +KPX Scommaaccent period -20 +KPX T A -120 +KPX T Aacute -120 +KPX T Abreve -120 +KPX T Acircumflex -120 +KPX T Adieresis -120 +KPX T Agrave -120 +KPX T Amacron -120 +KPX T Aogonek -120 +KPX T Aring -120 +KPX T Atilde -120 +KPX T O -40 +KPX T Oacute -40 +KPX T Ocircumflex -40 +KPX T Odieresis -40 +KPX T Ograve -40 +KPX T Ohungarumlaut -40 +KPX T Omacron -40 +KPX T Oslash -40 +KPX T Otilde -40 +KPX T a -120 +KPX T aacute -120 +KPX T abreve -60 +KPX T acircumflex -120 +KPX T adieresis -120 +KPX T agrave -120 +KPX T amacron -60 +KPX T aogonek -120 +KPX T aring -120 +KPX T atilde -60 +KPX T colon -20 +KPX T comma -120 +KPX T e -120 +KPX T eacute -120 +KPX T ecaron -120 +KPX T ecircumflex -120 +KPX T edieresis -120 +KPX T edotaccent -120 +KPX T egrave -60 +KPX T emacron -60 +KPX T eogonek -120 +KPX T hyphen -140 +KPX T o -120 +KPX T oacute -120 +KPX T ocircumflex -120 +KPX T odieresis -120 +KPX T ograve -120 +KPX T ohungarumlaut -120 +KPX T omacron -60 +KPX T oslash -120 +KPX T otilde -60 +KPX T period -120 +KPX T r -120 +KPX T racute -120 +KPX T rcaron -120 +KPX T rcommaaccent -120 +KPX T semicolon -20 +KPX T u -120 +KPX T uacute -120 +KPX T ucircumflex -120 +KPX T udieresis -120 +KPX T ugrave -120 +KPX T uhungarumlaut -120 +KPX T umacron -60 +KPX T uogonek -120 +KPX T uring -120 +KPX T w -120 +KPX T y -120 +KPX T yacute -120 +KPX T ydieresis -60 +KPX Tcaron A -120 +KPX Tcaron Aacute -120 +KPX Tcaron Abreve -120 +KPX Tcaron Acircumflex -120 +KPX Tcaron Adieresis -120 +KPX Tcaron Agrave -120 +KPX Tcaron Amacron -120 +KPX Tcaron Aogonek -120 +KPX Tcaron Aring -120 +KPX Tcaron Atilde -120 +KPX Tcaron O -40 +KPX Tcaron Oacute -40 +KPX Tcaron Ocircumflex -40 +KPX Tcaron Odieresis -40 +KPX Tcaron Ograve -40 +KPX Tcaron Ohungarumlaut -40 +KPX Tcaron Omacron -40 +KPX Tcaron Oslash -40 +KPX Tcaron Otilde -40 +KPX Tcaron a -120 +KPX Tcaron aacute -120 +KPX Tcaron abreve -60 +KPX Tcaron acircumflex -120 +KPX Tcaron adieresis -120 +KPX Tcaron agrave -120 +KPX Tcaron amacron -60 +KPX Tcaron aogonek -120 +KPX Tcaron aring -120 +KPX Tcaron atilde -60 +KPX Tcaron colon -20 +KPX Tcaron comma -120 +KPX Tcaron e -120 +KPX Tcaron eacute -120 +KPX Tcaron ecaron -120 +KPX Tcaron ecircumflex -120 +KPX Tcaron edieresis -120 +KPX Tcaron edotaccent -120 +KPX Tcaron egrave -60 +KPX Tcaron emacron -60 +KPX Tcaron eogonek -120 +KPX Tcaron hyphen -140 +KPX Tcaron o -120 +KPX Tcaron oacute -120 +KPX Tcaron ocircumflex -120 +KPX Tcaron odieresis -120 +KPX Tcaron ograve -120 +KPX Tcaron ohungarumlaut -120 +KPX Tcaron omacron -60 +KPX Tcaron oslash -120 +KPX Tcaron otilde -60 +KPX Tcaron period -120 +KPX Tcaron r -120 +KPX Tcaron racute -120 +KPX Tcaron rcaron -120 +KPX Tcaron rcommaaccent -120 +KPX Tcaron semicolon -20 +KPX Tcaron u -120 +KPX Tcaron uacute -120 +KPX Tcaron ucircumflex -120 +KPX Tcaron udieresis -120 +KPX Tcaron ugrave -120 +KPX Tcaron uhungarumlaut -120 +KPX Tcaron umacron -60 +KPX Tcaron uogonek -120 +KPX Tcaron uring -120 +KPX Tcaron w -120 +KPX Tcaron y -120 +KPX Tcaron yacute -120 +KPX Tcaron ydieresis -60 +KPX Tcommaaccent A -120 +KPX Tcommaaccent Aacute -120 +KPX Tcommaaccent Abreve -120 +KPX Tcommaaccent Acircumflex -120 +KPX Tcommaaccent Adieresis -120 +KPX Tcommaaccent Agrave -120 +KPX Tcommaaccent Amacron -120 +KPX Tcommaaccent Aogonek -120 +KPX Tcommaaccent Aring -120 +KPX Tcommaaccent Atilde -120 +KPX Tcommaaccent O -40 +KPX Tcommaaccent Oacute -40 +KPX Tcommaaccent Ocircumflex -40 +KPX Tcommaaccent Odieresis -40 +KPX Tcommaaccent Ograve -40 +KPX Tcommaaccent Ohungarumlaut -40 +KPX Tcommaaccent Omacron -40 +KPX Tcommaaccent Oslash -40 +KPX Tcommaaccent Otilde -40 +KPX Tcommaaccent a -120 +KPX Tcommaaccent aacute -120 +KPX Tcommaaccent abreve -60 +KPX Tcommaaccent acircumflex -120 +KPX Tcommaaccent adieresis -120 +KPX Tcommaaccent agrave -120 +KPX Tcommaaccent amacron -60 +KPX Tcommaaccent aogonek -120 +KPX Tcommaaccent aring -120 +KPX Tcommaaccent atilde -60 +KPX Tcommaaccent colon -20 +KPX Tcommaaccent comma -120 +KPX Tcommaaccent e -120 +KPX Tcommaaccent eacute -120 +KPX Tcommaaccent ecaron -120 +KPX Tcommaaccent ecircumflex -120 +KPX Tcommaaccent edieresis -120 +KPX Tcommaaccent edotaccent -120 +KPX Tcommaaccent egrave -60 +KPX Tcommaaccent emacron -60 +KPX Tcommaaccent eogonek -120 +KPX Tcommaaccent hyphen -140 +KPX Tcommaaccent o -120 +KPX Tcommaaccent oacute -120 +KPX Tcommaaccent ocircumflex -120 +KPX Tcommaaccent odieresis -120 +KPX Tcommaaccent ograve -120 +KPX Tcommaaccent ohungarumlaut -120 +KPX Tcommaaccent omacron -60 +KPX Tcommaaccent oslash -120 +KPX Tcommaaccent otilde -60 +KPX Tcommaaccent period -120 +KPX Tcommaaccent r -120 +KPX Tcommaaccent racute -120 +KPX Tcommaaccent rcaron -120 +KPX Tcommaaccent rcommaaccent -120 +KPX Tcommaaccent semicolon -20 +KPX Tcommaaccent u -120 +KPX Tcommaaccent uacute -120 +KPX Tcommaaccent ucircumflex -120 +KPX Tcommaaccent udieresis -120 +KPX Tcommaaccent ugrave -120 +KPX Tcommaaccent uhungarumlaut -120 +KPX Tcommaaccent umacron -60 +KPX Tcommaaccent uogonek -120 +KPX Tcommaaccent uring -120 +KPX Tcommaaccent w -120 +KPX Tcommaaccent y -120 +KPX Tcommaaccent yacute -120 +KPX Tcommaaccent ydieresis -60 +KPX U A -40 +KPX U Aacute -40 +KPX U Abreve -40 +KPX U Acircumflex -40 +KPX U Adieresis -40 +KPX U Agrave -40 +KPX U Amacron -40 +KPX U Aogonek -40 +KPX U Aring -40 +KPX U Atilde -40 +KPX U comma -40 +KPX U period -40 +KPX Uacute A -40 +KPX Uacute Aacute -40 +KPX Uacute Abreve -40 +KPX Uacute Acircumflex -40 +KPX Uacute Adieresis -40 +KPX Uacute Agrave -40 +KPX Uacute Amacron -40 +KPX Uacute Aogonek -40 +KPX Uacute Aring -40 +KPX Uacute Atilde -40 +KPX Uacute comma -40 +KPX Uacute period -40 +KPX Ucircumflex A -40 +KPX Ucircumflex Aacute -40 +KPX Ucircumflex Abreve -40 +KPX Ucircumflex Acircumflex -40 +KPX Ucircumflex Adieresis -40 +KPX Ucircumflex Agrave -40 +KPX Ucircumflex Amacron -40 +KPX Ucircumflex Aogonek -40 +KPX Ucircumflex Aring -40 +KPX Ucircumflex Atilde -40 +KPX Ucircumflex comma -40 +KPX Ucircumflex period -40 +KPX Udieresis A -40 +KPX Udieresis Aacute -40 +KPX Udieresis Abreve -40 +KPX Udieresis Acircumflex -40 +KPX Udieresis Adieresis -40 +KPX Udieresis Agrave -40 +KPX Udieresis Amacron -40 +KPX Udieresis Aogonek -40 +KPX Udieresis Aring -40 +KPX Udieresis Atilde -40 +KPX Udieresis comma -40 +KPX Udieresis period -40 +KPX Ugrave A -40 +KPX Ugrave Aacute -40 +KPX Ugrave Abreve -40 +KPX Ugrave Acircumflex -40 +KPX Ugrave Adieresis -40 +KPX Ugrave Agrave -40 +KPX Ugrave Amacron -40 +KPX Ugrave Aogonek -40 +KPX Ugrave Aring -40 +KPX Ugrave Atilde -40 +KPX Ugrave comma -40 +KPX Ugrave period -40 +KPX Uhungarumlaut A -40 +KPX Uhungarumlaut Aacute -40 +KPX Uhungarumlaut Abreve -40 +KPX Uhungarumlaut Acircumflex -40 +KPX Uhungarumlaut Adieresis -40 +KPX Uhungarumlaut Agrave -40 +KPX Uhungarumlaut Amacron -40 +KPX Uhungarumlaut Aogonek -40 +KPX Uhungarumlaut Aring -40 +KPX Uhungarumlaut Atilde -40 +KPX Uhungarumlaut comma -40 +KPX Uhungarumlaut period -40 +KPX Umacron A -40 +KPX Umacron Aacute -40 +KPX Umacron Abreve -40 +KPX Umacron Acircumflex -40 +KPX Umacron Adieresis -40 +KPX Umacron Agrave -40 +KPX Umacron Amacron -40 +KPX Umacron Aogonek -40 +KPX Umacron Aring -40 +KPX Umacron Atilde -40 +KPX Umacron comma -40 +KPX Umacron period -40 +KPX Uogonek A -40 +KPX Uogonek Aacute -40 +KPX Uogonek Abreve -40 +KPX Uogonek Acircumflex -40 +KPX Uogonek Adieresis -40 +KPX Uogonek Agrave -40 +KPX Uogonek Amacron -40 +KPX Uogonek Aogonek -40 +KPX Uogonek Aring -40 +KPX Uogonek Atilde -40 +KPX Uogonek comma -40 +KPX Uogonek period -40 +KPX Uring A -40 +KPX Uring Aacute -40 +KPX Uring Abreve -40 +KPX Uring Acircumflex -40 +KPX Uring Adieresis -40 +KPX Uring Agrave -40 +KPX Uring Amacron -40 +KPX Uring Aogonek -40 +KPX Uring Aring -40 +KPX Uring Atilde -40 +KPX Uring comma -40 +KPX Uring period -40 +KPX V A -80 +KPX V Aacute -80 +KPX V Abreve -80 +KPX V Acircumflex -80 +KPX V Adieresis -80 +KPX V Agrave -80 +KPX V Amacron -80 +KPX V Aogonek -80 +KPX V Aring -80 +KPX V Atilde -80 +KPX V G -40 +KPX V Gbreve -40 +KPX V Gcommaaccent -40 +KPX V O -40 +KPX V Oacute -40 +KPX V Ocircumflex -40 +KPX V Odieresis -40 +KPX V Ograve -40 +KPX V Ohungarumlaut -40 +KPX V Omacron -40 +KPX V Oslash -40 +KPX V Otilde -40 +KPX V a -70 +KPX V aacute -70 +KPX V abreve -70 +KPX V acircumflex -70 +KPX V adieresis -70 +KPX V agrave -70 +KPX V amacron -70 +KPX V aogonek -70 +KPX V aring -70 +KPX V atilde -70 +KPX V colon -40 +KPX V comma -125 +KPX V e -80 +KPX V eacute -80 +KPX V ecaron -80 +KPX V ecircumflex -80 +KPX V edieresis -80 +KPX V edotaccent -80 +KPX V egrave -80 +KPX V emacron -80 +KPX V eogonek -80 +KPX V hyphen -80 +KPX V o -80 +KPX V oacute -80 +KPX V ocircumflex -80 +KPX V odieresis -80 +KPX V ograve -80 +KPX V ohungarumlaut -80 +KPX V omacron -80 +KPX V oslash -80 +KPX V otilde -80 +KPX V period -125 +KPX V semicolon -40 +KPX V u -70 +KPX V uacute -70 +KPX V ucircumflex -70 +KPX V udieresis -70 +KPX V ugrave -70 +KPX V uhungarumlaut -70 +KPX V umacron -70 +KPX V uogonek -70 +KPX V uring -70 +KPX W A -50 +KPX W Aacute -50 +KPX W Abreve -50 +KPX W Acircumflex -50 +KPX W Adieresis -50 +KPX W Agrave -50 +KPX W Amacron -50 +KPX W Aogonek -50 +KPX W Aring -50 +KPX W Atilde -50 +KPX W O -20 +KPX W Oacute -20 +KPX W Ocircumflex -20 +KPX W Odieresis -20 +KPX W Ograve -20 +KPX W Ohungarumlaut -20 +KPX W Omacron -20 +KPX W Oslash -20 +KPX W Otilde -20 +KPX W a -40 +KPX W aacute -40 +KPX W abreve -40 +KPX W acircumflex -40 +KPX W adieresis -40 +KPX W agrave -40 +KPX W amacron -40 +KPX W aogonek -40 +KPX W aring -40 +KPX W atilde -40 +KPX W comma -80 +KPX W e -30 +KPX W eacute -30 +KPX W ecaron -30 +KPX W ecircumflex -30 +KPX W edieresis -30 +KPX W edotaccent -30 +KPX W egrave -30 +KPX W emacron -30 +KPX W eogonek -30 +KPX W hyphen -40 +KPX W o -30 +KPX W oacute -30 +KPX W ocircumflex -30 +KPX W odieresis -30 +KPX W ograve -30 +KPX W ohungarumlaut -30 +KPX W omacron -30 +KPX W oslash -30 +KPX W otilde -30 +KPX W period -80 +KPX W u -30 +KPX W uacute -30 +KPX W ucircumflex -30 +KPX W udieresis -30 +KPX W ugrave -30 +KPX W uhungarumlaut -30 +KPX W umacron -30 +KPX W uogonek -30 +KPX W uring -30 +KPX W y -20 +KPX W yacute -20 +KPX W ydieresis -20 +KPX Y A -110 +KPX Y Aacute -110 +KPX Y Abreve -110 +KPX Y Acircumflex -110 +KPX Y Adieresis -110 +KPX Y Agrave -110 +KPX Y Amacron -110 +KPX Y Aogonek -110 +KPX Y Aring -110 +KPX Y Atilde -110 +KPX Y O -85 +KPX Y Oacute -85 +KPX Y Ocircumflex -85 +KPX Y Odieresis -85 +KPX Y Ograve -85 +KPX Y Ohungarumlaut -85 +KPX Y Omacron -85 +KPX Y Oslash -85 +KPX Y Otilde -85 +KPX Y a -140 +KPX Y aacute -140 +KPX Y abreve -70 +KPX Y acircumflex -140 +KPX Y adieresis -140 +KPX Y agrave -140 +KPX Y amacron -70 +KPX Y aogonek -140 +KPX Y aring -140 +KPX Y atilde -140 +KPX Y colon -60 +KPX Y comma -140 +KPX Y e -140 +KPX Y eacute -140 +KPX Y ecaron -140 +KPX Y ecircumflex -140 +KPX Y edieresis -140 +KPX Y edotaccent -140 +KPX Y egrave -140 +KPX Y emacron -70 +KPX Y eogonek -140 +KPX Y hyphen -140 +KPX Y i -20 +KPX Y iacute -20 +KPX Y iogonek -20 +KPX Y o -140 +KPX Y oacute -140 +KPX Y ocircumflex -140 +KPX Y odieresis -140 +KPX Y ograve -140 +KPX Y ohungarumlaut -140 +KPX Y omacron -140 +KPX Y oslash -140 +KPX Y otilde -140 +KPX Y period -140 +KPX Y semicolon -60 +KPX Y u -110 +KPX Y uacute -110 +KPX Y ucircumflex -110 +KPX Y udieresis -110 +KPX Y ugrave -110 +KPX Y uhungarumlaut -110 +KPX Y umacron -110 +KPX Y uogonek -110 +KPX Y uring -110 +KPX Yacute A -110 +KPX Yacute Aacute -110 +KPX Yacute Abreve -110 +KPX Yacute Acircumflex -110 +KPX Yacute Adieresis -110 +KPX Yacute Agrave -110 +KPX Yacute Amacron -110 +KPX Yacute Aogonek -110 +KPX Yacute Aring -110 +KPX Yacute Atilde -110 +KPX Yacute O -85 +KPX Yacute Oacute -85 +KPX Yacute Ocircumflex -85 +KPX Yacute Odieresis -85 +KPX Yacute Ograve -85 +KPX Yacute Ohungarumlaut -85 +KPX Yacute Omacron -85 +KPX Yacute Oslash -85 +KPX Yacute Otilde -85 +KPX Yacute a -140 +KPX Yacute aacute -140 +KPX Yacute abreve -70 +KPX Yacute acircumflex -140 +KPX Yacute adieresis -140 +KPX Yacute agrave -140 +KPX Yacute amacron -70 +KPX Yacute aogonek -140 +KPX Yacute aring -140 +KPX Yacute atilde -70 +KPX Yacute colon -60 +KPX Yacute comma -140 +KPX Yacute e -140 +KPX Yacute eacute -140 +KPX Yacute ecaron -140 +KPX Yacute ecircumflex -140 +KPX Yacute edieresis -140 +KPX Yacute edotaccent -140 +KPX Yacute egrave -140 +KPX Yacute emacron -70 +KPX Yacute eogonek -140 +KPX Yacute hyphen -140 +KPX Yacute i -20 +KPX Yacute iacute -20 +KPX Yacute iogonek -20 +KPX Yacute o -140 +KPX Yacute oacute -140 +KPX Yacute ocircumflex -140 +KPX Yacute odieresis -140 +KPX Yacute ograve -140 +KPX Yacute ohungarumlaut -140 +KPX Yacute omacron -70 +KPX Yacute oslash -140 +KPX Yacute otilde -140 +KPX Yacute period -140 +KPX Yacute semicolon -60 +KPX Yacute u -110 +KPX Yacute uacute -110 +KPX Yacute ucircumflex -110 +KPX Yacute udieresis -110 +KPX Yacute ugrave -110 +KPX Yacute uhungarumlaut -110 +KPX Yacute umacron -110 +KPX Yacute uogonek -110 +KPX Yacute uring -110 +KPX Ydieresis A -110 +KPX Ydieresis Aacute -110 +KPX Ydieresis Abreve -110 +KPX Ydieresis Acircumflex -110 +KPX Ydieresis Adieresis -110 +KPX Ydieresis Agrave -110 +KPX Ydieresis Amacron -110 +KPX Ydieresis Aogonek -110 +KPX Ydieresis Aring -110 +KPX Ydieresis Atilde -110 +KPX Ydieresis O -85 +KPX Ydieresis Oacute -85 +KPX Ydieresis Ocircumflex -85 +KPX Ydieresis Odieresis -85 +KPX Ydieresis Ograve -85 +KPX Ydieresis Ohungarumlaut -85 +KPX Ydieresis Omacron -85 +KPX Ydieresis Oslash -85 +KPX Ydieresis Otilde -85 +KPX Ydieresis a -140 +KPX Ydieresis aacute -140 +KPX Ydieresis abreve -70 +KPX Ydieresis acircumflex -140 +KPX Ydieresis adieresis -140 +KPX Ydieresis agrave -140 +KPX Ydieresis amacron -70 +KPX Ydieresis aogonek -140 +KPX Ydieresis aring -140 +KPX Ydieresis atilde -70 +KPX Ydieresis colon -60 +KPX Ydieresis comma -140 +KPX Ydieresis e -140 +KPX Ydieresis eacute -140 +KPX Ydieresis ecaron -140 +KPX Ydieresis ecircumflex -140 +KPX Ydieresis edieresis -140 +KPX Ydieresis edotaccent -140 +KPX Ydieresis egrave -140 +KPX Ydieresis emacron -70 +KPX Ydieresis eogonek -140 +KPX Ydieresis hyphen -140 +KPX Ydieresis i -20 +KPX Ydieresis iacute -20 +KPX Ydieresis iogonek -20 +KPX Ydieresis o -140 +KPX Ydieresis oacute -140 +KPX Ydieresis ocircumflex -140 +KPX Ydieresis odieresis -140 +KPX Ydieresis ograve -140 +KPX Ydieresis ohungarumlaut -140 +KPX Ydieresis omacron -140 +KPX Ydieresis oslash -140 +KPX Ydieresis otilde -140 +KPX Ydieresis period -140 +KPX Ydieresis semicolon -60 +KPX Ydieresis u -110 +KPX Ydieresis uacute -110 +KPX Ydieresis ucircumflex -110 +KPX Ydieresis udieresis -110 +KPX Ydieresis ugrave -110 +KPX Ydieresis uhungarumlaut -110 +KPX Ydieresis umacron -110 +KPX Ydieresis uogonek -110 +KPX Ydieresis uring -110 +KPX a v -20 +KPX a w -20 +KPX a y -30 +KPX a yacute -30 +KPX a ydieresis -30 +KPX aacute v -20 +KPX aacute w -20 +KPX aacute y -30 +KPX aacute yacute -30 +KPX aacute ydieresis -30 +KPX abreve v -20 +KPX abreve w -20 +KPX abreve y -30 +KPX abreve yacute -30 +KPX abreve ydieresis -30 +KPX acircumflex v -20 +KPX acircumflex w -20 +KPX acircumflex y -30 +KPX acircumflex yacute -30 +KPX acircumflex ydieresis -30 +KPX adieresis v -20 +KPX adieresis w -20 +KPX adieresis y -30 +KPX adieresis yacute -30 +KPX adieresis ydieresis -30 +KPX agrave v -20 +KPX agrave w -20 +KPX agrave y -30 +KPX agrave yacute -30 +KPX agrave ydieresis -30 +KPX amacron v -20 +KPX amacron w -20 +KPX amacron y -30 +KPX amacron yacute -30 +KPX amacron ydieresis -30 +KPX aogonek v -20 +KPX aogonek w -20 +KPX aogonek y -30 +KPX aogonek yacute -30 +KPX aogonek ydieresis -30 +KPX aring v -20 +KPX aring w -20 +KPX aring y -30 +KPX aring yacute -30 +KPX aring ydieresis -30 +KPX atilde v -20 +KPX atilde w -20 +KPX atilde y -30 +KPX atilde yacute -30 +KPX atilde ydieresis -30 +KPX b b -10 +KPX b comma -40 +KPX b l -20 +KPX b lacute -20 +KPX b lcommaaccent -20 +KPX b lslash -20 +KPX b period -40 +KPX b u -20 +KPX b uacute -20 +KPX b ucircumflex -20 +KPX b udieresis -20 +KPX b ugrave -20 +KPX b uhungarumlaut -20 +KPX b umacron -20 +KPX b uogonek -20 +KPX b uring -20 +KPX b v -20 +KPX b y -20 +KPX b yacute -20 +KPX b ydieresis -20 +KPX c comma -15 +KPX c k -20 +KPX c kcommaaccent -20 +KPX cacute comma -15 +KPX cacute k -20 +KPX cacute kcommaaccent -20 +KPX ccaron comma -15 +KPX ccaron k -20 +KPX ccaron kcommaaccent -20 +KPX ccedilla comma -15 +KPX ccedilla k -20 +KPX ccedilla kcommaaccent -20 +KPX colon space -50 +KPX comma quotedblright -100 +KPX comma quoteright -100 +KPX e comma -15 +KPX e period -15 +KPX e v -30 +KPX e w -20 +KPX e x -30 +KPX e y -20 +KPX e yacute -20 +KPX e ydieresis -20 +KPX eacute comma -15 +KPX eacute period -15 +KPX eacute v -30 +KPX eacute w -20 +KPX eacute x -30 +KPX eacute y -20 +KPX eacute yacute -20 +KPX eacute ydieresis -20 +KPX ecaron comma -15 +KPX ecaron period -15 +KPX ecaron v -30 +KPX ecaron w -20 +KPX ecaron x -30 +KPX ecaron y -20 +KPX ecaron yacute -20 +KPX ecaron ydieresis -20 +KPX ecircumflex comma -15 +KPX ecircumflex period -15 +KPX ecircumflex v -30 +KPX ecircumflex w -20 +KPX ecircumflex x -30 +KPX ecircumflex y -20 +KPX ecircumflex yacute -20 +KPX ecircumflex ydieresis -20 +KPX edieresis comma -15 +KPX edieresis period -15 +KPX edieresis v -30 +KPX edieresis w -20 +KPX edieresis x -30 +KPX edieresis y -20 +KPX edieresis yacute -20 +KPX edieresis ydieresis -20 +KPX edotaccent comma -15 +KPX edotaccent period -15 +KPX edotaccent v -30 +KPX edotaccent w -20 +KPX edotaccent x -30 +KPX edotaccent y -20 +KPX edotaccent yacute -20 +KPX edotaccent ydieresis -20 +KPX egrave comma -15 +KPX egrave period -15 +KPX egrave v -30 +KPX egrave w -20 +KPX egrave x -30 +KPX egrave y -20 +KPX egrave yacute -20 +KPX egrave ydieresis -20 +KPX emacron comma -15 +KPX emacron period -15 +KPX emacron v -30 +KPX emacron w -20 +KPX emacron x -30 +KPX emacron y -20 +KPX emacron yacute -20 +KPX emacron ydieresis -20 +KPX eogonek comma -15 +KPX eogonek period -15 +KPX eogonek v -30 +KPX eogonek w -20 +KPX eogonek x -30 +KPX eogonek y -20 +KPX eogonek yacute -20 +KPX eogonek ydieresis -20 +KPX f a -30 +KPX f aacute -30 +KPX f abreve -30 +KPX f acircumflex -30 +KPX f adieresis -30 +KPX f agrave -30 +KPX f amacron -30 +KPX f aogonek -30 +KPX f aring -30 +KPX f atilde -30 +KPX f comma -30 +KPX f dotlessi -28 +KPX f e -30 +KPX f eacute -30 +KPX f ecaron -30 +KPX f ecircumflex -30 +KPX f edieresis -30 +KPX f edotaccent -30 +KPX f egrave -30 +KPX f emacron -30 +KPX f eogonek -30 +KPX f o -30 +KPX f oacute -30 +KPX f ocircumflex -30 +KPX f odieresis -30 +KPX f ograve -30 +KPX f ohungarumlaut -30 +KPX f omacron -30 +KPX f oslash -30 +KPX f otilde -30 +KPX f period -30 +KPX f quotedblright 60 +KPX f quoteright 50 +KPX g r -10 +KPX g racute -10 +KPX g rcaron -10 +KPX g rcommaaccent -10 +KPX gbreve r -10 +KPX gbreve racute -10 +KPX gbreve rcaron -10 +KPX gbreve rcommaaccent -10 +KPX gcommaaccent r -10 +KPX gcommaaccent racute -10 +KPX gcommaaccent rcaron -10 +KPX gcommaaccent rcommaaccent -10 +KPX h y -30 +KPX h yacute -30 +KPX h ydieresis -30 +KPX k e -20 +KPX k eacute -20 +KPX k ecaron -20 +KPX k ecircumflex -20 +KPX k edieresis -20 +KPX k edotaccent -20 +KPX k egrave -20 +KPX k emacron -20 +KPX k eogonek -20 +KPX k o -20 +KPX k oacute -20 +KPX k ocircumflex -20 +KPX k odieresis -20 +KPX k ograve -20 +KPX k ohungarumlaut -20 +KPX k omacron -20 +KPX k oslash -20 +KPX k otilde -20 +KPX kcommaaccent e -20 +KPX kcommaaccent eacute -20 +KPX kcommaaccent ecaron -20 +KPX kcommaaccent ecircumflex -20 +KPX kcommaaccent edieresis -20 +KPX kcommaaccent edotaccent -20 +KPX kcommaaccent egrave -20 +KPX kcommaaccent emacron -20 +KPX kcommaaccent eogonek -20 +KPX kcommaaccent o -20 +KPX kcommaaccent oacute -20 +KPX kcommaaccent ocircumflex -20 +KPX kcommaaccent odieresis -20 +KPX kcommaaccent ograve -20 +KPX kcommaaccent ohungarumlaut -20 +KPX kcommaaccent omacron -20 +KPX kcommaaccent oslash -20 +KPX kcommaaccent otilde -20 +KPX m u -10 +KPX m uacute -10 +KPX m ucircumflex -10 +KPX m udieresis -10 +KPX m ugrave -10 +KPX m uhungarumlaut -10 +KPX m umacron -10 +KPX m uogonek -10 +KPX m uring -10 +KPX m y -15 +KPX m yacute -15 +KPX m ydieresis -15 +KPX n u -10 +KPX n uacute -10 +KPX n ucircumflex -10 +KPX n udieresis -10 +KPX n ugrave -10 +KPX n uhungarumlaut -10 +KPX n umacron -10 +KPX n uogonek -10 +KPX n uring -10 +KPX n v -20 +KPX n y -15 +KPX n yacute -15 +KPX n ydieresis -15 +KPX nacute u -10 +KPX nacute uacute -10 +KPX nacute ucircumflex -10 +KPX nacute udieresis -10 +KPX nacute ugrave -10 +KPX nacute uhungarumlaut -10 +KPX nacute umacron -10 +KPX nacute uogonek -10 +KPX nacute uring -10 +KPX nacute v -20 +KPX nacute y -15 +KPX nacute yacute -15 +KPX nacute ydieresis -15 +KPX ncaron u -10 +KPX ncaron uacute -10 +KPX ncaron ucircumflex -10 +KPX ncaron udieresis -10 +KPX ncaron ugrave -10 +KPX ncaron uhungarumlaut -10 +KPX ncaron umacron -10 +KPX ncaron uogonek -10 +KPX ncaron uring -10 +KPX ncaron v -20 +KPX ncaron y -15 +KPX ncaron yacute -15 +KPX ncaron ydieresis -15 +KPX ncommaaccent u -10 +KPX ncommaaccent uacute -10 +KPX ncommaaccent ucircumflex -10 +KPX ncommaaccent udieresis -10 +KPX ncommaaccent ugrave -10 +KPX ncommaaccent uhungarumlaut -10 +KPX ncommaaccent umacron -10 +KPX ncommaaccent uogonek -10 +KPX ncommaaccent uring -10 +KPX ncommaaccent v -20 +KPX ncommaaccent y -15 +KPX ncommaaccent yacute -15 +KPX ncommaaccent ydieresis -15 +KPX ntilde u -10 +KPX ntilde uacute -10 +KPX ntilde ucircumflex -10 +KPX ntilde udieresis -10 +KPX ntilde ugrave -10 +KPX ntilde uhungarumlaut -10 +KPX ntilde umacron -10 +KPX ntilde uogonek -10 +KPX ntilde uring -10 +KPX ntilde v -20 +KPX ntilde y -15 +KPX ntilde yacute -15 +KPX ntilde ydieresis -15 +KPX o comma -40 +KPX o period -40 +KPX o v -15 +KPX o w -15 +KPX o x -30 +KPX o y -30 +KPX o yacute -30 +KPX o ydieresis -30 +KPX oacute comma -40 +KPX oacute period -40 +KPX oacute v -15 +KPX oacute w -15 +KPX oacute x -30 +KPX oacute y -30 +KPX oacute yacute -30 +KPX oacute ydieresis -30 +KPX ocircumflex comma -40 +KPX ocircumflex period -40 +KPX ocircumflex v -15 +KPX ocircumflex w -15 +KPX ocircumflex x -30 +KPX ocircumflex y -30 +KPX ocircumflex yacute -30 +KPX ocircumflex ydieresis -30 +KPX odieresis comma -40 +KPX odieresis period -40 +KPX odieresis v -15 +KPX odieresis w -15 +KPX odieresis x -30 +KPX odieresis y -30 +KPX odieresis yacute -30 +KPX odieresis ydieresis -30 +KPX ograve comma -40 +KPX ograve period -40 +KPX ograve v -15 +KPX ograve w -15 +KPX ograve x -30 +KPX ograve y -30 +KPX ograve yacute -30 +KPX ograve ydieresis -30 +KPX ohungarumlaut comma -40 +KPX ohungarumlaut period -40 +KPX ohungarumlaut v -15 +KPX ohungarumlaut w -15 +KPX ohungarumlaut x -30 +KPX ohungarumlaut y -30 +KPX ohungarumlaut yacute -30 +KPX ohungarumlaut ydieresis -30 +KPX omacron comma -40 +KPX omacron period -40 +KPX omacron v -15 +KPX omacron w -15 +KPX omacron x -30 +KPX omacron y -30 +KPX omacron yacute -30 +KPX omacron ydieresis -30 +KPX oslash a -55 +KPX oslash aacute -55 +KPX oslash abreve -55 +KPX oslash acircumflex -55 +KPX oslash adieresis -55 +KPX oslash agrave -55 +KPX oslash amacron -55 +KPX oslash aogonek -55 +KPX oslash aring -55 +KPX oslash atilde -55 +KPX oslash b -55 +KPX oslash c -55 +KPX oslash cacute -55 +KPX oslash ccaron -55 +KPX oslash ccedilla -55 +KPX oslash comma -95 +KPX oslash d -55 +KPX oslash dcroat -55 +KPX oslash e -55 +KPX oslash eacute -55 +KPX oslash ecaron -55 +KPX oslash ecircumflex -55 +KPX oslash edieresis -55 +KPX oslash edotaccent -55 +KPX oslash egrave -55 +KPX oslash emacron -55 +KPX oslash eogonek -55 +KPX oslash f -55 +KPX oslash g -55 +KPX oslash gbreve -55 +KPX oslash gcommaaccent -55 +KPX oslash h -55 +KPX oslash i -55 +KPX oslash iacute -55 +KPX oslash icircumflex -55 +KPX oslash idieresis -55 +KPX oslash igrave -55 +KPX oslash imacron -55 +KPX oslash iogonek -55 +KPX oslash j -55 +KPX oslash k -55 +KPX oslash kcommaaccent -55 +KPX oslash l -55 +KPX oslash lacute -55 +KPX oslash lcommaaccent -55 +KPX oslash lslash -55 +KPX oslash m -55 +KPX oslash n -55 +KPX oslash nacute -55 +KPX oslash ncaron -55 +KPX oslash ncommaaccent -55 +KPX oslash ntilde -55 +KPX oslash o -55 +KPX oslash oacute -55 +KPX oslash ocircumflex -55 +KPX oslash odieresis -55 +KPX oslash ograve -55 +KPX oslash ohungarumlaut -55 +KPX oslash omacron -55 +KPX oslash oslash -55 +KPX oslash otilde -55 +KPX oslash p -55 +KPX oslash period -95 +KPX oslash q -55 +KPX oslash r -55 +KPX oslash racute -55 +KPX oslash rcaron -55 +KPX oslash rcommaaccent -55 +KPX oslash s -55 +KPX oslash sacute -55 +KPX oslash scaron -55 +KPX oslash scedilla -55 +KPX oslash scommaaccent -55 +KPX oslash t -55 +KPX oslash tcommaaccent -55 +KPX oslash u -55 +KPX oslash uacute -55 +KPX oslash ucircumflex -55 +KPX oslash udieresis -55 +KPX oslash ugrave -55 +KPX oslash uhungarumlaut -55 +KPX oslash umacron -55 +KPX oslash uogonek -55 +KPX oslash uring -55 +KPX oslash v -70 +KPX oslash w -70 +KPX oslash x -85 +KPX oslash y -70 +KPX oslash yacute -70 +KPX oslash ydieresis -70 +KPX oslash z -55 +KPX oslash zacute -55 +KPX oslash zcaron -55 +KPX oslash zdotaccent -55 +KPX otilde comma -40 +KPX otilde period -40 +KPX otilde v -15 +KPX otilde w -15 +KPX otilde x -30 +KPX otilde y -30 +KPX otilde yacute -30 +KPX otilde ydieresis -30 +KPX p comma -35 +KPX p period -35 +KPX p y -30 +KPX p yacute -30 +KPX p ydieresis -30 +KPX period quotedblright -100 +KPX period quoteright -100 +KPX period space -60 +KPX quotedblright space -40 +KPX quoteleft quoteleft -57 +KPX quoteright d -50 +KPX quoteright dcroat -50 +KPX quoteright quoteright -57 +KPX quoteright r -50 +KPX quoteright racute -50 +KPX quoteright rcaron -50 +KPX quoteright rcommaaccent -50 +KPX quoteright s -50 +KPX quoteright sacute -50 +KPX quoteright scaron -50 +KPX quoteright scedilla -50 +KPX quoteright scommaaccent -50 +KPX quoteright space -70 +KPX r a -10 +KPX r aacute -10 +KPX r abreve -10 +KPX r acircumflex -10 +KPX r adieresis -10 +KPX r agrave -10 +KPX r amacron -10 +KPX r aogonek -10 +KPX r aring -10 +KPX r atilde -10 +KPX r colon 30 +KPX r comma -50 +KPX r i 15 +KPX r iacute 15 +KPX r icircumflex 15 +KPX r idieresis 15 +KPX r igrave 15 +KPX r imacron 15 +KPX r iogonek 15 +KPX r k 15 +KPX r kcommaaccent 15 +KPX r l 15 +KPX r lacute 15 +KPX r lcommaaccent 15 +KPX r lslash 15 +KPX r m 25 +KPX r n 25 +KPX r nacute 25 +KPX r ncaron 25 +KPX r ncommaaccent 25 +KPX r ntilde 25 +KPX r p 30 +KPX r period -50 +KPX r semicolon 30 +KPX r t 40 +KPX r tcommaaccent 40 +KPX r u 15 +KPX r uacute 15 +KPX r ucircumflex 15 +KPX r udieresis 15 +KPX r ugrave 15 +KPX r uhungarumlaut 15 +KPX r umacron 15 +KPX r uogonek 15 +KPX r uring 15 +KPX r v 30 +KPX r y 30 +KPX r yacute 30 +KPX r ydieresis 30 +KPX racute a -10 +KPX racute aacute -10 +KPX racute abreve -10 +KPX racute acircumflex -10 +KPX racute adieresis -10 +KPX racute agrave -10 +KPX racute amacron -10 +KPX racute aogonek -10 +KPX racute aring -10 +KPX racute atilde -10 +KPX racute colon 30 +KPX racute comma -50 +KPX racute i 15 +KPX racute iacute 15 +KPX racute icircumflex 15 +KPX racute idieresis 15 +KPX racute igrave 15 +KPX racute imacron 15 +KPX racute iogonek 15 +KPX racute k 15 +KPX racute kcommaaccent 15 +KPX racute l 15 +KPX racute lacute 15 +KPX racute lcommaaccent 15 +KPX racute lslash 15 +KPX racute m 25 +KPX racute n 25 +KPX racute nacute 25 +KPX racute ncaron 25 +KPX racute ncommaaccent 25 +KPX racute ntilde 25 +KPX racute p 30 +KPX racute period -50 +KPX racute semicolon 30 +KPX racute t 40 +KPX racute tcommaaccent 40 +KPX racute u 15 +KPX racute uacute 15 +KPX racute ucircumflex 15 +KPX racute udieresis 15 +KPX racute ugrave 15 +KPX racute uhungarumlaut 15 +KPX racute umacron 15 +KPX racute uogonek 15 +KPX racute uring 15 +KPX racute v 30 +KPX racute y 30 +KPX racute yacute 30 +KPX racute ydieresis 30 +KPX rcaron a -10 +KPX rcaron aacute -10 +KPX rcaron abreve -10 +KPX rcaron acircumflex -10 +KPX rcaron adieresis -10 +KPX rcaron agrave -10 +KPX rcaron amacron -10 +KPX rcaron aogonek -10 +KPX rcaron aring -10 +KPX rcaron atilde -10 +KPX rcaron colon 30 +KPX rcaron comma -50 +KPX rcaron i 15 +KPX rcaron iacute 15 +KPX rcaron icircumflex 15 +KPX rcaron idieresis 15 +KPX rcaron igrave 15 +KPX rcaron imacron 15 +KPX rcaron iogonek 15 +KPX rcaron k 15 +KPX rcaron kcommaaccent 15 +KPX rcaron l 15 +KPX rcaron lacute 15 +KPX rcaron lcommaaccent 15 +KPX rcaron lslash 15 +KPX rcaron m 25 +KPX rcaron n 25 +KPX rcaron nacute 25 +KPX rcaron ncaron 25 +KPX rcaron ncommaaccent 25 +KPX rcaron ntilde 25 +KPX rcaron p 30 +KPX rcaron period -50 +KPX rcaron semicolon 30 +KPX rcaron t 40 +KPX rcaron tcommaaccent 40 +KPX rcaron u 15 +KPX rcaron uacute 15 +KPX rcaron ucircumflex 15 +KPX rcaron udieresis 15 +KPX rcaron ugrave 15 +KPX rcaron uhungarumlaut 15 +KPX rcaron umacron 15 +KPX rcaron uogonek 15 +KPX rcaron uring 15 +KPX rcaron v 30 +KPX rcaron y 30 +KPX rcaron yacute 30 +KPX rcaron ydieresis 30 +KPX rcommaaccent a -10 +KPX rcommaaccent aacute -10 +KPX rcommaaccent abreve -10 +KPX rcommaaccent acircumflex -10 +KPX rcommaaccent adieresis -10 +KPX rcommaaccent agrave -10 +KPX rcommaaccent amacron -10 +KPX rcommaaccent aogonek -10 +KPX rcommaaccent aring -10 +KPX rcommaaccent atilde -10 +KPX rcommaaccent colon 30 +KPX rcommaaccent comma -50 +KPX rcommaaccent i 15 +KPX rcommaaccent iacute 15 +KPX rcommaaccent icircumflex 15 +KPX rcommaaccent idieresis 15 +KPX rcommaaccent igrave 15 +KPX rcommaaccent imacron 15 +KPX rcommaaccent iogonek 15 +KPX rcommaaccent k 15 +KPX rcommaaccent kcommaaccent 15 +KPX rcommaaccent l 15 +KPX rcommaaccent lacute 15 +KPX rcommaaccent lcommaaccent 15 +KPX rcommaaccent lslash 15 +KPX rcommaaccent m 25 +KPX rcommaaccent n 25 +KPX rcommaaccent nacute 25 +KPX rcommaaccent ncaron 25 +KPX rcommaaccent ncommaaccent 25 +KPX rcommaaccent ntilde 25 +KPX rcommaaccent p 30 +KPX rcommaaccent period -50 +KPX rcommaaccent semicolon 30 +KPX rcommaaccent t 40 +KPX rcommaaccent tcommaaccent 40 +KPX rcommaaccent u 15 +KPX rcommaaccent uacute 15 +KPX rcommaaccent ucircumflex 15 +KPX rcommaaccent udieresis 15 +KPX rcommaaccent ugrave 15 +KPX rcommaaccent uhungarumlaut 15 +KPX rcommaaccent umacron 15 +KPX rcommaaccent uogonek 15 +KPX rcommaaccent uring 15 +KPX rcommaaccent v 30 +KPX rcommaaccent y 30 +KPX rcommaaccent yacute 30 +KPX rcommaaccent ydieresis 30 +KPX s comma -15 +KPX s period -15 +KPX s w -30 +KPX sacute comma -15 +KPX sacute period -15 +KPX sacute w -30 +KPX scaron comma -15 +KPX scaron period -15 +KPX scaron w -30 +KPX scedilla comma -15 +KPX scedilla period -15 +KPX scedilla w -30 +KPX scommaaccent comma -15 +KPX scommaaccent period -15 +KPX scommaaccent w -30 +KPX semicolon space -50 +KPX space T -50 +KPX space Tcaron -50 +KPX space Tcommaaccent -50 +KPX space V -50 +KPX space W -40 +KPX space Y -90 +KPX space Yacute -90 +KPX space Ydieresis -90 +KPX space quotedblleft -30 +KPX space quoteleft -60 +KPX v a -25 +KPX v aacute -25 +KPX v abreve -25 +KPX v acircumflex -25 +KPX v adieresis -25 +KPX v agrave -25 +KPX v amacron -25 +KPX v aogonek -25 +KPX v aring -25 +KPX v atilde -25 +KPX v comma -80 +KPX v e -25 +KPX v eacute -25 +KPX v ecaron -25 +KPX v ecircumflex -25 +KPX v edieresis -25 +KPX v edotaccent -25 +KPX v egrave -25 +KPX v emacron -25 +KPX v eogonek -25 +KPX v o -25 +KPX v oacute -25 +KPX v ocircumflex -25 +KPX v odieresis -25 +KPX v ograve -25 +KPX v ohungarumlaut -25 +KPX v omacron -25 +KPX v oslash -25 +KPX v otilde -25 +KPX v period -80 +KPX w a -15 +KPX w aacute -15 +KPX w abreve -15 +KPX w acircumflex -15 +KPX w adieresis -15 +KPX w agrave -15 +KPX w amacron -15 +KPX w aogonek -15 +KPX w aring -15 +KPX w atilde -15 +KPX w comma -60 +KPX w e -10 +KPX w eacute -10 +KPX w ecaron -10 +KPX w ecircumflex -10 +KPX w edieresis -10 +KPX w edotaccent -10 +KPX w egrave -10 +KPX w emacron -10 +KPX w eogonek -10 +KPX w o -10 +KPX w oacute -10 +KPX w ocircumflex -10 +KPX w odieresis -10 +KPX w ograve -10 +KPX w ohungarumlaut -10 +KPX w omacron -10 +KPX w oslash -10 +KPX w otilde -10 +KPX w period -60 +KPX x e -30 +KPX x eacute -30 +KPX x ecaron -30 +KPX x ecircumflex -30 +KPX x edieresis -30 +KPX x edotaccent -30 +KPX x egrave -30 +KPX x emacron -30 +KPX x eogonek -30 +KPX y a -20 +KPX y aacute -20 +KPX y abreve -20 +KPX y acircumflex -20 +KPX y adieresis -20 +KPX y agrave -20 +KPX y amacron -20 +KPX y aogonek -20 +KPX y aring -20 +KPX y atilde -20 +KPX y comma -100 +KPX y e -20 +KPX y eacute -20 +KPX y ecaron -20 +KPX y ecircumflex -20 +KPX y edieresis -20 +KPX y edotaccent -20 +KPX y egrave -20 +KPX y emacron -20 +KPX y eogonek -20 +KPX y o -20 +KPX y oacute -20 +KPX y ocircumflex -20 +KPX y odieresis -20 +KPX y ograve -20 +KPX y ohungarumlaut -20 +KPX y omacron -20 +KPX y oslash -20 +KPX y otilde -20 +KPX y period -100 +KPX yacute a -20 +KPX yacute aacute -20 +KPX yacute abreve -20 +KPX yacute acircumflex -20 +KPX yacute adieresis -20 +KPX yacute agrave -20 +KPX yacute amacron -20 +KPX yacute aogonek -20 +KPX yacute aring -20 +KPX yacute atilde -20 +KPX yacute comma -100 +KPX yacute e -20 +KPX yacute eacute -20 +KPX yacute ecaron -20 +KPX yacute ecircumflex -20 +KPX yacute edieresis -20 +KPX yacute edotaccent -20 +KPX yacute egrave -20 +KPX yacute emacron -20 +KPX yacute eogonek -20 +KPX yacute o -20 +KPX yacute oacute -20 +KPX yacute ocircumflex -20 +KPX yacute odieresis -20 +KPX yacute ograve -20 +KPX yacute ohungarumlaut -20 +KPX yacute omacron -20 +KPX yacute oslash -20 +KPX yacute otilde -20 +KPX yacute period -100 +KPX ydieresis a -20 +KPX ydieresis aacute -20 +KPX ydieresis abreve -20 +KPX ydieresis acircumflex -20 +KPX ydieresis adieresis -20 +KPX ydieresis agrave -20 +KPX ydieresis amacron -20 +KPX ydieresis aogonek -20 +KPX ydieresis aring -20 +KPX ydieresis atilde -20 +KPX ydieresis comma -100 +KPX ydieresis e -20 +KPX ydieresis eacute -20 +KPX ydieresis ecaron -20 +KPX ydieresis ecircumflex -20 +KPX ydieresis edieresis -20 +KPX ydieresis edotaccent -20 +KPX ydieresis egrave -20 +KPX ydieresis emacron -20 +KPX ydieresis eogonek -20 +KPX ydieresis o -20 +KPX ydieresis oacute -20 +KPX ydieresis ocircumflex -20 +KPX ydieresis odieresis -20 +KPX ydieresis ograve -20 +KPX ydieresis ohungarumlaut -20 +KPX ydieresis omacron -20 +KPX ydieresis oslash -20 +KPX ydieresis otilde -20 +KPX ydieresis period -100 +KPX z e -15 +KPX z eacute -15 +KPX z ecaron -15 +KPX z ecircumflex -15 +KPX z edieresis -15 +KPX z edotaccent -15 +KPX z egrave -15 +KPX z emacron -15 +KPX z eogonek -15 +KPX z o -15 +KPX z oacute -15 +KPX z ocircumflex -15 +KPX z odieresis -15 +KPX z ograve -15 +KPX z ohungarumlaut -15 +KPX z omacron -15 +KPX z oslash -15 +KPX z otilde -15 +KPX zacute e -15 +KPX zacute eacute -15 +KPX zacute ecaron -15 +KPX zacute ecircumflex -15 +KPX zacute edieresis -15 +KPX zacute edotaccent -15 +KPX zacute egrave -15 +KPX zacute emacron -15 +KPX zacute eogonek -15 +KPX zacute o -15 +KPX zacute oacute -15 +KPX zacute ocircumflex -15 +KPX zacute odieresis -15 +KPX zacute ograve -15 +KPX zacute ohungarumlaut -15 +KPX zacute omacron -15 +KPX zacute oslash -15 +KPX zacute otilde -15 +KPX zcaron e -15 +KPX zcaron eacute -15 +KPX zcaron ecaron -15 +KPX zcaron ecircumflex -15 +KPX zcaron edieresis -15 +KPX zcaron edotaccent -15 +KPX zcaron egrave -15 +KPX zcaron emacron -15 +KPX zcaron eogonek -15 +KPX zcaron o -15 +KPX zcaron oacute -15 +KPX zcaron ocircumflex -15 +KPX zcaron odieresis -15 +KPX zcaron ograve -15 +KPX zcaron ohungarumlaut -15 +KPX zcaron omacron -15 +KPX zcaron oslash -15 +KPX zcaron otilde -15 +KPX zdotaccent e -15 +KPX zdotaccent eacute -15 +KPX zdotaccent ecaron -15 +KPX zdotaccent ecircumflex -15 +KPX zdotaccent edieresis -15 +KPX zdotaccent edotaccent -15 +KPX zdotaccent egrave -15 +KPX zdotaccent emacron -15 +KPX zdotaccent eogonek -15 +KPX zdotaccent o -15 +KPX zdotaccent oacute -15 +KPX zdotaccent ocircumflex -15 +KPX zdotaccent odieresis -15 +KPX zdotaccent ograve -15 +KPX zdotaccent ohungarumlaut -15 +KPX zdotaccent omacron -15 +KPX zdotaccent oslash -15 +KPX zdotaccent otilde -15 +EndKernPairs +EndKernData +EndFontMetrics diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/Symbol.afm b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/Symbol.afm new file mode 100755 index 00000000..6a5386a9 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/Symbol.afm @@ -0,0 +1,213 @@ +StartFontMetrics 4.1 +Comment Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All rights reserved. +Comment Creation Date: Thu May 1 15:12:25 1997 +Comment UniqueID 43064 +Comment VMusage 30820 39997 +FontName Symbol +FullName Symbol +FamilyName Symbol +Weight Medium +ItalicAngle 0 +IsFixedPitch false +CharacterSet Special +FontBBox -180 -293 1090 1010 +UnderlinePosition -100 +UnderlineThickness 50 +Version 001.008 +Notice Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All rights reserved. +EncodingScheme FontSpecific +StdHW 92 +StdVW 85 +StartCharMetrics 190 +C 32 ; WX 250 ; N space ; B 0 0 0 0 ; +C 33 ; WX 333 ; N exclam ; B 128 -17 240 672 ; +C 34 ; WX 713 ; N universal ; B 31 0 681 705 ; +C 35 ; WX 500 ; N numbersign ; B 20 -16 481 673 ; +C 36 ; WX 549 ; N existential ; B 25 0 478 707 ; +C 37 ; WX 833 ; N percent ; B 63 -36 771 655 ; +C 38 ; WX 778 ; N ampersand ; B 41 -18 750 661 ; +C 39 ; WX 439 ; N suchthat ; B 48 -17 414 500 ; +C 40 ; WX 333 ; N parenleft ; B 53 -191 300 673 ; +C 41 ; WX 333 ; N parenright ; B 30 -191 277 673 ; +C 42 ; WX 500 ; N asteriskmath ; B 65 134 427 551 ; +C 43 ; WX 549 ; N plus ; B 10 0 539 533 ; +C 44 ; WX 250 ; N comma ; B 56 -152 194 104 ; +C 45 ; WX 549 ; N minus ; B 11 233 535 288 ; +C 46 ; WX 250 ; N period ; B 69 -17 181 95 ; +C 47 ; WX 278 ; N slash ; B 0 -18 254 646 ; +C 48 ; WX 500 ; N zero ; B 24 -14 476 685 ; +C 49 ; WX 500 ; N one ; B 117 0 390 673 ; +C 50 ; WX 500 ; N two ; B 25 0 475 685 ; +C 51 ; WX 500 ; N three ; B 43 -14 435 685 ; +C 52 ; WX 500 ; N four ; B 15 0 469 685 ; +C 53 ; WX 500 ; N five ; B 32 -14 445 690 ; +C 54 ; WX 500 ; N six ; B 34 -14 468 685 ; +C 55 ; WX 500 ; N seven ; B 24 -16 448 673 ; +C 56 ; WX 500 ; N eight ; B 56 -14 445 685 ; +C 57 ; WX 500 ; N nine ; B 30 -18 459 685 ; +C 58 ; WX 278 ; N colon ; B 81 -17 193 460 ; +C 59 ; WX 278 ; N semicolon ; B 83 -152 221 460 ; +C 60 ; WX 549 ; N less ; B 26 0 523 522 ; +C 61 ; WX 549 ; N equal ; B 11 141 537 390 ; +C 62 ; WX 549 ; N greater ; B 26 0 523 522 ; +C 63 ; WX 444 ; N question ; B 70 -17 412 686 ; +C 64 ; WX 549 ; N congruent ; B 11 0 537 475 ; +C 65 ; WX 722 ; N Alpha ; B 4 0 684 673 ; +C 66 ; WX 667 ; N Beta ; B 29 0 592 673 ; +C 67 ; WX 722 ; N Chi ; B -9 0 704 673 ; +C 68 ; WX 612 ; N Delta ; B 6 0 608 688 ; +C 69 ; WX 611 ; N Epsilon ; B 32 0 617 673 ; +C 70 ; WX 763 ; N Phi ; B 26 0 741 673 ; +C 71 ; WX 603 ; N Gamma ; B 24 0 609 673 ; +C 72 ; WX 722 ; N Eta ; B 39 0 729 673 ; +C 73 ; WX 333 ; N Iota ; B 32 0 316 673 ; +C 74 ; WX 631 ; N theta1 ; B 18 -18 623 689 ; +C 75 ; WX 722 ; N Kappa ; B 35 0 722 673 ; +C 76 ; WX 686 ; N Lambda ; B 6 0 680 688 ; +C 77 ; WX 889 ; N Mu ; B 28 0 887 673 ; +C 78 ; WX 722 ; N Nu ; B 29 -8 720 673 ; +C 79 ; WX 722 ; N Omicron ; B 41 -17 715 685 ; +C 80 ; WX 768 ; N Pi ; B 25 0 745 673 ; +C 81 ; WX 741 ; N Theta ; B 41 -17 715 685 ; +C 82 ; WX 556 ; N Rho ; B 28 0 563 673 ; +C 83 ; WX 592 ; N Sigma ; B 5 0 589 673 ; +C 84 ; WX 611 ; N Tau ; B 33 0 607 673 ; +C 85 ; WX 690 ; N Upsilon ; B -8 0 694 673 ; +C 86 ; WX 439 ; N sigma1 ; B 40 -233 436 500 ; +C 87 ; WX 768 ; N Omega ; B 34 0 736 688 ; +C 88 ; WX 645 ; N Xi ; B 40 0 599 673 ; +C 89 ; WX 795 ; N Psi ; B 15 0 781 684 ; +C 90 ; WX 611 ; N Zeta ; B 44 0 636 673 ; +C 91 ; WX 333 ; N bracketleft ; B 86 -155 299 674 ; +C 92 ; WX 863 ; N therefore ; B 163 0 701 487 ; +C 93 ; WX 333 ; N bracketright ; B 33 -155 246 674 ; +C 94 ; WX 658 ; N perpendicular ; B 15 0 652 674 ; +C 95 ; WX 500 ; N underscore ; B -2 -125 502 -75 ; +C 96 ; WX 500 ; N radicalex ; B 480 881 1090 917 ; +C 97 ; WX 631 ; N alpha ; B 41 -18 622 500 ; +C 98 ; WX 549 ; N beta ; B 61 -223 515 741 ; +C 99 ; WX 549 ; N chi ; B 12 -231 522 499 ; +C 100 ; WX 494 ; N delta ; B 40 -19 481 740 ; +C 101 ; WX 439 ; N epsilon ; B 22 -19 427 502 ; +C 102 ; WX 521 ; N phi ; B 28 -224 492 673 ; +C 103 ; WX 411 ; N gamma ; B 5 -225 484 499 ; +C 104 ; WX 603 ; N eta ; B 0 -202 527 514 ; +C 105 ; WX 329 ; N iota ; B 0 -17 301 503 ; +C 106 ; WX 603 ; N phi1 ; B 36 -224 587 499 ; +C 107 ; WX 549 ; N kappa ; B 33 0 558 501 ; +C 108 ; WX 549 ; N lambda ; B 24 -17 548 739 ; +C 109 ; WX 576 ; N mu ; B 33 -223 567 500 ; +C 110 ; WX 521 ; N nu ; B -9 -16 475 507 ; +C 111 ; WX 549 ; N omicron ; B 35 -19 501 499 ; +C 112 ; WX 549 ; N pi ; B 10 -19 530 487 ; +C 113 ; WX 521 ; N theta ; B 43 -17 485 690 ; +C 114 ; WX 549 ; N rho ; B 50 -230 490 499 ; +C 115 ; WX 603 ; N sigma ; B 30 -21 588 500 ; +C 116 ; WX 439 ; N tau ; B 10 -19 418 500 ; +C 117 ; WX 576 ; N upsilon ; B 7 -18 535 507 ; +C 118 ; WX 713 ; N omega1 ; B 12 -18 671 583 ; +C 119 ; WX 686 ; N omega ; B 42 -17 684 500 ; +C 120 ; WX 493 ; N xi ; B 27 -224 469 766 ; +C 121 ; WX 686 ; N psi ; B 12 -228 701 500 ; +C 122 ; WX 494 ; N zeta ; B 60 -225 467 756 ; +C 123 ; WX 480 ; N braceleft ; B 58 -183 397 673 ; +C 124 ; WX 200 ; N bar ; B 65 -293 135 707 ; +C 125 ; WX 480 ; N braceright ; B 79 -183 418 673 ; +C 126 ; WX 549 ; N similar ; B 17 203 529 307 ; +C 160 ; WX 750 ; N Euro ; B 20 -12 714 685 ; +C 161 ; WX 620 ; N Upsilon1 ; B -2 0 610 685 ; +C 162 ; WX 247 ; N minute ; B 27 459 228 735 ; +C 163 ; WX 549 ; N lessequal ; B 29 0 526 639 ; +C 164 ; WX 167 ; N fraction ; B -180 -12 340 677 ; +C 165 ; WX 713 ; N infinity ; B 26 124 688 404 ; +C 166 ; WX 500 ; N florin ; B 2 -193 494 686 ; +C 167 ; WX 753 ; N club ; B 86 -26 660 533 ; +C 168 ; WX 753 ; N diamond ; B 142 -36 600 550 ; +C 169 ; WX 753 ; N heart ; B 117 -33 631 532 ; +C 170 ; WX 753 ; N spade ; B 113 -36 629 548 ; +C 171 ; WX 1042 ; N arrowboth ; B 24 -15 1024 511 ; +C 172 ; WX 987 ; N arrowleft ; B 32 -15 942 511 ; +C 173 ; WX 603 ; N arrowup ; B 45 0 571 910 ; +C 174 ; WX 987 ; N arrowright ; B 49 -15 959 511 ; +C 175 ; WX 603 ; N arrowdown ; B 45 -22 571 888 ; +C 176 ; WX 400 ; N degree ; B 50 385 350 685 ; +C 177 ; WX 549 ; N plusminus ; B 10 0 539 645 ; +C 178 ; WX 411 ; N second ; B 20 459 413 737 ; +C 179 ; WX 549 ; N greaterequal ; B 29 0 526 639 ; +C 180 ; WX 549 ; N multiply ; B 17 8 533 524 ; +C 181 ; WX 713 ; N proportional ; B 27 123 639 404 ; +C 182 ; WX 494 ; N partialdiff ; B 26 -20 462 746 ; +C 183 ; WX 460 ; N bullet ; B 50 113 410 473 ; +C 184 ; WX 549 ; N divide ; B 10 71 536 456 ; +C 185 ; WX 549 ; N notequal ; B 15 -25 540 549 ; +C 186 ; WX 549 ; N equivalence ; B 14 82 538 443 ; +C 187 ; WX 549 ; N approxequal ; B 14 135 527 394 ; +C 188 ; WX 1000 ; N ellipsis ; B 111 -17 889 95 ; +C 189 ; WX 603 ; N arrowvertex ; B 280 -120 336 1010 ; +C 190 ; WX 1000 ; N arrowhorizex ; B -60 220 1050 276 ; +C 191 ; WX 658 ; N carriagereturn ; B 15 -16 602 629 ; +C 192 ; WX 823 ; N aleph ; B 175 -18 661 658 ; +C 193 ; WX 686 ; N Ifraktur ; B 10 -53 578 740 ; +C 194 ; WX 795 ; N Rfraktur ; B 26 -15 759 734 ; +C 195 ; WX 987 ; N weierstrass ; B 159 -211 870 573 ; +C 196 ; WX 768 ; N circlemultiply ; B 43 -17 733 673 ; +C 197 ; WX 768 ; N circleplus ; B 43 -15 733 675 ; +C 198 ; WX 823 ; N emptyset ; B 39 -24 781 719 ; +C 199 ; WX 768 ; N intersection ; B 40 0 732 509 ; +C 200 ; WX 768 ; N union ; B 40 -17 732 492 ; +C 201 ; WX 713 ; N propersuperset ; B 20 0 673 470 ; +C 202 ; WX 713 ; N reflexsuperset ; B 20 -125 673 470 ; +C 203 ; WX 713 ; N notsubset ; B 36 -70 690 540 ; +C 204 ; WX 713 ; N propersubset ; B 37 0 690 470 ; +C 205 ; WX 713 ; N reflexsubset ; B 37 -125 690 470 ; +C 206 ; WX 713 ; N element ; B 45 0 505 468 ; +C 207 ; WX 713 ; N notelement ; B 45 -58 505 555 ; +C 208 ; WX 768 ; N angle ; B 26 0 738 673 ; +C 209 ; WX 713 ; N gradient ; B 36 -19 681 718 ; +C 210 ; WX 790 ; N registerserif ; B 50 -17 740 673 ; +C 211 ; WX 790 ; N copyrightserif ; B 51 -15 741 675 ; +C 212 ; WX 890 ; N trademarkserif ; B 18 293 855 673 ; +C 213 ; WX 823 ; N product ; B 25 -101 803 751 ; +C 214 ; WX 549 ; N radical ; B 10 -38 515 917 ; +C 215 ; WX 250 ; N dotmath ; B 69 210 169 310 ; +C 216 ; WX 713 ; N logicalnot ; B 15 0 680 288 ; +C 217 ; WX 603 ; N logicaland ; B 23 0 583 454 ; +C 218 ; WX 603 ; N logicalor ; B 30 0 578 477 ; +C 219 ; WX 1042 ; N arrowdblboth ; B 27 -20 1023 510 ; +C 220 ; WX 987 ; N arrowdblleft ; B 30 -15 939 513 ; +C 221 ; WX 603 ; N arrowdblup ; B 39 2 567 911 ; +C 222 ; WX 987 ; N arrowdblright ; B 45 -20 954 508 ; +C 223 ; WX 603 ; N arrowdbldown ; B 44 -19 572 890 ; +C 224 ; WX 494 ; N lozenge ; B 18 0 466 745 ; +C 225 ; WX 329 ; N angleleft ; B 25 -198 306 746 ; +C 226 ; WX 790 ; N registersans ; B 50 -20 740 670 ; +C 227 ; WX 790 ; N copyrightsans ; B 49 -15 739 675 ; +C 228 ; WX 786 ; N trademarksans ; B 5 293 725 673 ; +C 229 ; WX 713 ; N summation ; B 14 -108 695 752 ; +C 230 ; WX 384 ; N parenlefttp ; B 24 -293 436 926 ; +C 231 ; WX 384 ; N parenleftex ; B 24 -85 108 925 ; +C 232 ; WX 384 ; N parenleftbt ; B 24 -293 436 926 ; +C 233 ; WX 384 ; N bracketlefttp ; B 0 -80 349 926 ; +C 234 ; WX 384 ; N bracketleftex ; B 0 -79 77 925 ; +C 235 ; WX 384 ; N bracketleftbt ; B 0 -80 349 926 ; +C 236 ; WX 494 ; N bracelefttp ; B 209 -85 445 925 ; +C 237 ; WX 494 ; N braceleftmid ; B 20 -85 284 935 ; +C 238 ; WX 494 ; N braceleftbt ; B 209 -75 445 935 ; +C 239 ; WX 494 ; N braceex ; B 209 -85 284 935 ; +C 241 ; WX 329 ; N angleright ; B 21 -198 302 746 ; +C 242 ; WX 274 ; N integral ; B 2 -107 291 916 ; +C 243 ; WX 686 ; N integraltp ; B 308 -88 675 920 ; +C 244 ; WX 686 ; N integralex ; B 308 -88 378 975 ; +C 245 ; WX 686 ; N integralbt ; B 11 -87 378 921 ; +C 246 ; WX 384 ; N parenrighttp ; B 54 -293 466 926 ; +C 247 ; WX 384 ; N parenrightex ; B 382 -85 466 925 ; +C 248 ; WX 384 ; N parenrightbt ; B 54 -293 466 926 ; +C 249 ; WX 384 ; N bracketrighttp ; B 22 -80 371 926 ; +C 250 ; WX 384 ; N bracketrightex ; B 294 -79 371 925 ; +C 251 ; WX 384 ; N bracketrightbt ; B 22 -80 371 926 ; +C 252 ; WX 494 ; N bracerighttp ; B 48 -85 284 925 ; +C 253 ; WX 494 ; N bracerightmid ; B 209 -85 473 935 ; +C 254 ; WX 494 ; N bracerightbt ; B 48 -75 284 935 ; +C -1 ; WX 790 ; N apple ; B 56 -3 733 808 ; +EndCharMetrics +EndFontMetrics diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/Times-Bold.afm b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/Times-Bold.afm new file mode 100755 index 00000000..559ebaeb --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/Times-Bold.afm @@ -0,0 +1,2588 @@ +StartFontMetrics 4.1 +Comment Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved. +Comment Creation Date: Thu May 1 12:52:56 1997 +Comment UniqueID 43065 +Comment VMusage 41636 52661 +FontName Times-Bold +FullName Times Bold +FamilyName Times +Weight Bold +ItalicAngle 0 +IsFixedPitch false +CharacterSet ExtendedRoman +FontBBox -168 -218 1000 935 +UnderlinePosition -100 +UnderlineThickness 50 +Version 002.000 +Notice Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.Times is a trademark of Linotype-Hell AG and/or its subsidiaries. +EncodingScheme AdobeStandardEncoding +CapHeight 676 +XHeight 461 +Ascender 683 +Descender -217 +StdHW 44 +StdVW 139 +StartCharMetrics 315 +C 32 ; WX 250 ; N space ; B 0 0 0 0 ; +C 33 ; WX 333 ; N exclam ; B 81 -13 251 691 ; +C 34 ; WX 555 ; N quotedbl ; B 83 404 472 691 ; +C 35 ; WX 500 ; N numbersign ; B 4 0 496 700 ; +C 36 ; WX 500 ; N dollar ; B 29 -99 472 750 ; +C 37 ; WX 1000 ; N percent ; B 124 -14 877 692 ; +C 38 ; WX 833 ; N ampersand ; B 62 -16 787 691 ; +C 39 ; WX 333 ; N quoteright ; B 79 356 263 691 ; +C 40 ; WX 333 ; N parenleft ; B 46 -168 306 694 ; +C 41 ; WX 333 ; N parenright ; B 27 -168 287 694 ; +C 42 ; WX 500 ; N asterisk ; B 56 255 447 691 ; +C 43 ; WX 570 ; N plus ; B 33 0 537 506 ; +C 44 ; WX 250 ; N comma ; B 39 -180 223 155 ; +C 45 ; WX 333 ; N hyphen ; B 44 171 287 287 ; +C 46 ; WX 250 ; N period ; B 41 -13 210 156 ; +C 47 ; WX 278 ; N slash ; B -24 -19 302 691 ; +C 48 ; WX 500 ; N zero ; B 24 -13 476 688 ; +C 49 ; WX 500 ; N one ; B 65 0 442 688 ; +C 50 ; WX 500 ; N two ; B 17 0 478 688 ; +C 51 ; WX 500 ; N three ; B 16 -14 468 688 ; +C 52 ; WX 500 ; N four ; B 19 0 475 688 ; +C 53 ; WX 500 ; N five ; B 22 -8 470 676 ; +C 54 ; WX 500 ; N six ; B 28 -13 475 688 ; +C 55 ; WX 500 ; N seven ; B 17 0 477 676 ; +C 56 ; WX 500 ; N eight ; B 28 -13 472 688 ; +C 57 ; WX 500 ; N nine ; B 26 -13 473 688 ; +C 58 ; WX 333 ; N colon ; B 82 -13 251 472 ; +C 59 ; WX 333 ; N semicolon ; B 82 -180 266 472 ; +C 60 ; WX 570 ; N less ; B 31 -8 539 514 ; +C 61 ; WX 570 ; N equal ; B 33 107 537 399 ; +C 62 ; WX 570 ; N greater ; B 31 -8 539 514 ; +C 63 ; WX 500 ; N question ; B 57 -13 445 689 ; +C 64 ; WX 930 ; N at ; B 108 -19 822 691 ; +C 65 ; WX 722 ; N A ; B 9 0 689 690 ; +C 66 ; WX 667 ; N B ; B 16 0 619 676 ; +C 67 ; WX 722 ; N C ; B 49 -19 687 691 ; +C 68 ; WX 722 ; N D ; B 14 0 690 676 ; +C 69 ; WX 667 ; N E ; B 16 0 641 676 ; +C 70 ; WX 611 ; N F ; B 16 0 583 676 ; +C 71 ; WX 778 ; N G ; B 37 -19 755 691 ; +C 72 ; WX 778 ; N H ; B 21 0 759 676 ; +C 73 ; WX 389 ; N I ; B 20 0 370 676 ; +C 74 ; WX 500 ; N J ; B 3 -96 479 676 ; +C 75 ; WX 778 ; N K ; B 30 0 769 676 ; +C 76 ; WX 667 ; N L ; B 19 0 638 676 ; +C 77 ; WX 944 ; N M ; B 14 0 921 676 ; +C 78 ; WX 722 ; N N ; B 16 -18 701 676 ; +C 79 ; WX 778 ; N O ; B 35 -19 743 691 ; +C 80 ; WX 611 ; N P ; B 16 0 600 676 ; +C 81 ; WX 778 ; N Q ; B 35 -176 743 691 ; +C 82 ; WX 722 ; N R ; B 26 0 715 676 ; +C 83 ; WX 556 ; N S ; B 35 -19 513 692 ; +C 84 ; WX 667 ; N T ; B 31 0 636 676 ; +C 85 ; WX 722 ; N U ; B 16 -19 701 676 ; +C 86 ; WX 722 ; N V ; B 16 -18 701 676 ; +C 87 ; WX 1000 ; N W ; B 19 -15 981 676 ; +C 88 ; WX 722 ; N X ; B 16 0 699 676 ; +C 89 ; WX 722 ; N Y ; B 15 0 699 676 ; +C 90 ; WX 667 ; N Z ; B 28 0 634 676 ; +C 91 ; WX 333 ; N bracketleft ; B 67 -149 301 678 ; +C 92 ; WX 278 ; N backslash ; B -25 -19 303 691 ; +C 93 ; WX 333 ; N bracketright ; B 32 -149 266 678 ; +C 94 ; WX 581 ; N asciicircum ; B 73 311 509 676 ; +C 95 ; WX 500 ; N underscore ; B 0 -125 500 -75 ; +C 96 ; WX 333 ; N quoteleft ; B 70 356 254 691 ; +C 97 ; WX 500 ; N a ; B 25 -14 488 473 ; +C 98 ; WX 556 ; N b ; B 17 -14 521 676 ; +C 99 ; WX 444 ; N c ; B 25 -14 430 473 ; +C 100 ; WX 556 ; N d ; B 25 -14 534 676 ; +C 101 ; WX 444 ; N e ; B 25 -14 426 473 ; +C 102 ; WX 333 ; N f ; B 14 0 389 691 ; L i fi ; L l fl ; +C 103 ; WX 500 ; N g ; B 28 -206 483 473 ; +C 104 ; WX 556 ; N h ; B 16 0 534 676 ; +C 105 ; WX 278 ; N i ; B 16 0 255 691 ; +C 106 ; WX 333 ; N j ; B -57 -203 263 691 ; +C 107 ; WX 556 ; N k ; B 22 0 543 676 ; +C 108 ; WX 278 ; N l ; B 16 0 255 676 ; +C 109 ; WX 833 ; N m ; B 16 0 814 473 ; +C 110 ; WX 556 ; N n ; B 21 0 539 473 ; +C 111 ; WX 500 ; N o ; B 25 -14 476 473 ; +C 112 ; WX 556 ; N p ; B 19 -205 524 473 ; +C 113 ; WX 556 ; N q ; B 34 -205 536 473 ; +C 114 ; WX 444 ; N r ; B 29 0 434 473 ; +C 115 ; WX 389 ; N s ; B 25 -14 361 473 ; +C 116 ; WX 333 ; N t ; B 20 -12 332 630 ; +C 117 ; WX 556 ; N u ; B 16 -14 537 461 ; +C 118 ; WX 500 ; N v ; B 21 -14 485 461 ; +C 119 ; WX 722 ; N w ; B 23 -14 707 461 ; +C 120 ; WX 500 ; N x ; B 12 0 484 461 ; +C 121 ; WX 500 ; N y ; B 16 -205 480 461 ; +C 122 ; WX 444 ; N z ; B 21 0 420 461 ; +C 123 ; WX 394 ; N braceleft ; B 22 -175 340 698 ; +C 124 ; WX 220 ; N bar ; B 66 -218 154 782 ; +C 125 ; WX 394 ; N braceright ; B 54 -175 372 698 ; +C 126 ; WX 520 ; N asciitilde ; B 29 173 491 333 ; +C 161 ; WX 333 ; N exclamdown ; B 82 -203 252 501 ; +C 162 ; WX 500 ; N cent ; B 53 -140 458 588 ; +C 163 ; WX 500 ; N sterling ; B 21 -14 477 684 ; +C 164 ; WX 167 ; N fraction ; B -168 -12 329 688 ; +C 165 ; WX 500 ; N yen ; B -64 0 547 676 ; +C 166 ; WX 500 ; N florin ; B 0 -155 498 706 ; +C 167 ; WX 500 ; N section ; B 57 -132 443 691 ; +C 168 ; WX 500 ; N currency ; B -26 61 526 613 ; +C 169 ; WX 278 ; N quotesingle ; B 75 404 204 691 ; +C 170 ; WX 500 ; N quotedblleft ; B 32 356 486 691 ; +C 171 ; WX 500 ; N guillemotleft ; B 23 36 473 415 ; +C 172 ; WX 333 ; N guilsinglleft ; B 51 36 305 415 ; +C 173 ; WX 333 ; N guilsinglright ; B 28 36 282 415 ; +C 174 ; WX 556 ; N fi ; B 14 0 536 691 ; +C 175 ; WX 556 ; N fl ; B 14 0 536 691 ; +C 177 ; WX 500 ; N endash ; B 0 181 500 271 ; +C 178 ; WX 500 ; N dagger ; B 47 -134 453 691 ; +C 179 ; WX 500 ; N daggerdbl ; B 45 -132 456 691 ; +C 180 ; WX 250 ; N periodcentered ; B 41 248 210 417 ; +C 182 ; WX 540 ; N paragraph ; B 0 -186 519 676 ; +C 183 ; WX 350 ; N bullet ; B 35 198 315 478 ; +C 184 ; WX 333 ; N quotesinglbase ; B 79 -180 263 155 ; +C 185 ; WX 500 ; N quotedblbase ; B 14 -180 468 155 ; +C 186 ; WX 500 ; N quotedblright ; B 14 356 468 691 ; +C 187 ; WX 500 ; N guillemotright ; B 27 36 477 415 ; +C 188 ; WX 1000 ; N ellipsis ; B 82 -13 917 156 ; +C 189 ; WX 1000 ; N perthousand ; B 7 -29 995 706 ; +C 191 ; WX 500 ; N questiondown ; B 55 -201 443 501 ; +C 193 ; WX 333 ; N grave ; B 8 528 246 713 ; +C 194 ; WX 333 ; N acute ; B 86 528 324 713 ; +C 195 ; WX 333 ; N circumflex ; B -2 528 335 704 ; +C 196 ; WX 333 ; N tilde ; B -16 547 349 674 ; +C 197 ; WX 333 ; N macron ; B 1 565 331 637 ; +C 198 ; WX 333 ; N breve ; B 15 528 318 691 ; +C 199 ; WX 333 ; N dotaccent ; B 103 536 258 691 ; +C 200 ; WX 333 ; N dieresis ; B -2 537 335 667 ; +C 202 ; WX 333 ; N ring ; B 60 527 273 740 ; +C 203 ; WX 333 ; N cedilla ; B 68 -218 294 0 ; +C 205 ; WX 333 ; N hungarumlaut ; B -13 528 425 713 ; +C 206 ; WX 333 ; N ogonek ; B 90 -193 319 24 ; +C 207 ; WX 333 ; N caron ; B -2 528 335 704 ; +C 208 ; WX 1000 ; N emdash ; B 0 181 1000 271 ; +C 225 ; WX 1000 ; N AE ; B 4 0 951 676 ; +C 227 ; WX 300 ; N ordfeminine ; B -1 397 301 688 ; +C 232 ; WX 667 ; N Lslash ; B 19 0 638 676 ; +C 233 ; WX 778 ; N Oslash ; B 35 -74 743 737 ; +C 234 ; WX 1000 ; N OE ; B 22 -5 981 684 ; +C 235 ; WX 330 ; N ordmasculine ; B 18 397 312 688 ; +C 241 ; WX 722 ; N ae ; B 33 -14 693 473 ; +C 245 ; WX 278 ; N dotlessi ; B 16 0 255 461 ; +C 248 ; WX 278 ; N lslash ; B -22 0 303 676 ; +C 249 ; WX 500 ; N oslash ; B 25 -92 476 549 ; +C 250 ; WX 722 ; N oe ; B 22 -14 696 473 ; +C 251 ; WX 556 ; N germandbls ; B 19 -12 517 691 ; +C -1 ; WX 389 ; N Idieresis ; B 20 0 370 877 ; +C -1 ; WX 444 ; N eacute ; B 25 -14 426 713 ; +C -1 ; WX 500 ; N abreve ; B 25 -14 488 691 ; +C -1 ; WX 556 ; N uhungarumlaut ; B 16 -14 557 713 ; +C -1 ; WX 444 ; N ecaron ; B 25 -14 426 704 ; +C -1 ; WX 722 ; N Ydieresis ; B 15 0 699 877 ; +C -1 ; WX 570 ; N divide ; B 33 -31 537 537 ; +C -1 ; WX 722 ; N Yacute ; B 15 0 699 923 ; +C -1 ; WX 722 ; N Acircumflex ; B 9 0 689 914 ; +C -1 ; WX 500 ; N aacute ; B 25 -14 488 713 ; +C -1 ; WX 722 ; N Ucircumflex ; B 16 -19 701 914 ; +C -1 ; WX 500 ; N yacute ; B 16 -205 480 713 ; +C -1 ; WX 389 ; N scommaaccent ; B 25 -218 361 473 ; +C -1 ; WX 444 ; N ecircumflex ; B 25 -14 426 704 ; +C -1 ; WX 722 ; N Uring ; B 16 -19 701 935 ; +C -1 ; WX 722 ; N Udieresis ; B 16 -19 701 877 ; +C -1 ; WX 500 ; N aogonek ; B 25 -193 504 473 ; +C -1 ; WX 722 ; N Uacute ; B 16 -19 701 923 ; +C -1 ; WX 556 ; N uogonek ; B 16 -193 539 461 ; +C -1 ; WX 667 ; N Edieresis ; B 16 0 641 877 ; +C -1 ; WX 722 ; N Dcroat ; B 6 0 690 676 ; +C -1 ; WX 250 ; N commaaccent ; B 47 -218 203 -50 ; +C -1 ; WX 747 ; N copyright ; B 26 -19 721 691 ; +C -1 ; WX 667 ; N Emacron ; B 16 0 641 847 ; +C -1 ; WX 444 ; N ccaron ; B 25 -14 430 704 ; +C -1 ; WX 500 ; N aring ; B 25 -14 488 740 ; +C -1 ; WX 722 ; N Ncommaaccent ; B 16 -188 701 676 ; +C -1 ; WX 278 ; N lacute ; B 16 0 297 923 ; +C -1 ; WX 500 ; N agrave ; B 25 -14 488 713 ; +C -1 ; WX 667 ; N Tcommaaccent ; B 31 -218 636 676 ; +C -1 ; WX 722 ; N Cacute ; B 49 -19 687 923 ; +C -1 ; WX 500 ; N atilde ; B 25 -14 488 674 ; +C -1 ; WX 667 ; N Edotaccent ; B 16 0 641 901 ; +C -1 ; WX 389 ; N scaron ; B 25 -14 363 704 ; +C -1 ; WX 389 ; N scedilla ; B 25 -218 361 473 ; +C -1 ; WX 278 ; N iacute ; B 16 0 289 713 ; +C -1 ; WX 494 ; N lozenge ; B 10 0 484 745 ; +C -1 ; WX 722 ; N Rcaron ; B 26 0 715 914 ; +C -1 ; WX 778 ; N Gcommaaccent ; B 37 -218 755 691 ; +C -1 ; WX 556 ; N ucircumflex ; B 16 -14 537 704 ; +C -1 ; WX 500 ; N acircumflex ; B 25 -14 488 704 ; +C -1 ; WX 722 ; N Amacron ; B 9 0 689 847 ; +C -1 ; WX 444 ; N rcaron ; B 29 0 434 704 ; +C -1 ; WX 444 ; N ccedilla ; B 25 -218 430 473 ; +C -1 ; WX 667 ; N Zdotaccent ; B 28 0 634 901 ; +C -1 ; WX 611 ; N Thorn ; B 16 0 600 676 ; +C -1 ; WX 778 ; N Omacron ; B 35 -19 743 847 ; +C -1 ; WX 722 ; N Racute ; B 26 0 715 923 ; +C -1 ; WX 556 ; N Sacute ; B 35 -19 513 923 ; +C -1 ; WX 672 ; N dcaron ; B 25 -14 681 682 ; +C -1 ; WX 722 ; N Umacron ; B 16 -19 701 847 ; +C -1 ; WX 556 ; N uring ; B 16 -14 537 740 ; +C -1 ; WX 300 ; N threesuperior ; B 3 268 297 688 ; +C -1 ; WX 778 ; N Ograve ; B 35 -19 743 923 ; +C -1 ; WX 722 ; N Agrave ; B 9 0 689 923 ; +C -1 ; WX 722 ; N Abreve ; B 9 0 689 901 ; +C -1 ; WX 570 ; N multiply ; B 48 16 522 490 ; +C -1 ; WX 556 ; N uacute ; B 16 -14 537 713 ; +C -1 ; WX 667 ; N Tcaron ; B 31 0 636 914 ; +C -1 ; WX 494 ; N partialdiff ; B 11 -21 494 750 ; +C -1 ; WX 500 ; N ydieresis ; B 16 -205 480 667 ; +C -1 ; WX 722 ; N Nacute ; B 16 -18 701 923 ; +C -1 ; WX 278 ; N icircumflex ; B -37 0 300 704 ; +C -1 ; WX 667 ; N Ecircumflex ; B 16 0 641 914 ; +C -1 ; WX 500 ; N adieresis ; B 25 -14 488 667 ; +C -1 ; WX 444 ; N edieresis ; B 25 -14 426 667 ; +C -1 ; WX 444 ; N cacute ; B 25 -14 430 713 ; +C -1 ; WX 556 ; N nacute ; B 21 0 539 713 ; +C -1 ; WX 556 ; N umacron ; B 16 -14 537 637 ; +C -1 ; WX 722 ; N Ncaron ; B 16 -18 701 914 ; +C -1 ; WX 389 ; N Iacute ; B 20 0 370 923 ; +C -1 ; WX 570 ; N plusminus ; B 33 0 537 506 ; +C -1 ; WX 220 ; N brokenbar ; B 66 -143 154 707 ; +C -1 ; WX 747 ; N registered ; B 26 -19 721 691 ; +C -1 ; WX 778 ; N Gbreve ; B 37 -19 755 901 ; +C -1 ; WX 389 ; N Idotaccent ; B 20 0 370 901 ; +C -1 ; WX 600 ; N summation ; B 14 -10 585 706 ; +C -1 ; WX 667 ; N Egrave ; B 16 0 641 923 ; +C -1 ; WX 444 ; N racute ; B 29 0 434 713 ; +C -1 ; WX 500 ; N omacron ; B 25 -14 476 637 ; +C -1 ; WX 667 ; N Zacute ; B 28 0 634 923 ; +C -1 ; WX 667 ; N Zcaron ; B 28 0 634 914 ; +C -1 ; WX 549 ; N greaterequal ; B 26 0 523 704 ; +C -1 ; WX 722 ; N Eth ; B 6 0 690 676 ; +C -1 ; WX 722 ; N Ccedilla ; B 49 -218 687 691 ; +C -1 ; WX 278 ; N lcommaaccent ; B 16 -218 255 676 ; +C -1 ; WX 416 ; N tcaron ; B 20 -12 425 815 ; +C -1 ; WX 444 ; N eogonek ; B 25 -193 426 473 ; +C -1 ; WX 722 ; N Uogonek ; B 16 -193 701 676 ; +C -1 ; WX 722 ; N Aacute ; B 9 0 689 923 ; +C -1 ; WX 722 ; N Adieresis ; B 9 0 689 877 ; +C -1 ; WX 444 ; N egrave ; B 25 -14 426 713 ; +C -1 ; WX 444 ; N zacute ; B 21 0 420 713 ; +C -1 ; WX 278 ; N iogonek ; B 16 -193 274 691 ; +C -1 ; WX 778 ; N Oacute ; B 35 -19 743 923 ; +C -1 ; WX 500 ; N oacute ; B 25 -14 476 713 ; +C -1 ; WX 500 ; N amacron ; B 25 -14 488 637 ; +C -1 ; WX 389 ; N sacute ; B 25 -14 361 713 ; +C -1 ; WX 278 ; N idieresis ; B -37 0 300 667 ; +C -1 ; WX 778 ; N Ocircumflex ; B 35 -19 743 914 ; +C -1 ; WX 722 ; N Ugrave ; B 16 -19 701 923 ; +C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ; +C -1 ; WX 556 ; N thorn ; B 19 -205 524 676 ; +C -1 ; WX 300 ; N twosuperior ; B 0 275 300 688 ; +C -1 ; WX 778 ; N Odieresis ; B 35 -19 743 877 ; +C -1 ; WX 556 ; N mu ; B 33 -206 536 461 ; +C -1 ; WX 278 ; N igrave ; B -27 0 255 713 ; +C -1 ; WX 500 ; N ohungarumlaut ; B 25 -14 529 713 ; +C -1 ; WX 667 ; N Eogonek ; B 16 -193 644 676 ; +C -1 ; WX 556 ; N dcroat ; B 25 -14 534 676 ; +C -1 ; WX 750 ; N threequarters ; B 23 -12 733 688 ; +C -1 ; WX 556 ; N Scedilla ; B 35 -218 513 692 ; +C -1 ; WX 394 ; N lcaron ; B 16 0 412 682 ; +C -1 ; WX 778 ; N Kcommaaccent ; B 30 -218 769 676 ; +C -1 ; WX 667 ; N Lacute ; B 19 0 638 923 ; +C -1 ; WX 1000 ; N trademark ; B 24 271 977 676 ; +C -1 ; WX 444 ; N edotaccent ; B 25 -14 426 691 ; +C -1 ; WX 389 ; N Igrave ; B 20 0 370 923 ; +C -1 ; WX 389 ; N Imacron ; B 20 0 370 847 ; +C -1 ; WX 667 ; N Lcaron ; B 19 0 652 682 ; +C -1 ; WX 750 ; N onehalf ; B -7 -12 775 688 ; +C -1 ; WX 549 ; N lessequal ; B 29 0 526 704 ; +C -1 ; WX 500 ; N ocircumflex ; B 25 -14 476 704 ; +C -1 ; WX 556 ; N ntilde ; B 21 0 539 674 ; +C -1 ; WX 722 ; N Uhungarumlaut ; B 16 -19 701 923 ; +C -1 ; WX 667 ; N Eacute ; B 16 0 641 923 ; +C -1 ; WX 444 ; N emacron ; B 25 -14 426 637 ; +C -1 ; WX 500 ; N gbreve ; B 28 -206 483 691 ; +C -1 ; WX 750 ; N onequarter ; B 28 -12 743 688 ; +C -1 ; WX 556 ; N Scaron ; B 35 -19 513 914 ; +C -1 ; WX 556 ; N Scommaaccent ; B 35 -218 513 692 ; +C -1 ; WX 778 ; N Ohungarumlaut ; B 35 -19 743 923 ; +C -1 ; WX 400 ; N degree ; B 57 402 343 688 ; +C -1 ; WX 500 ; N ograve ; B 25 -14 476 713 ; +C -1 ; WX 722 ; N Ccaron ; B 49 -19 687 914 ; +C -1 ; WX 556 ; N ugrave ; B 16 -14 537 713 ; +C -1 ; WX 549 ; N radical ; B 10 -46 512 850 ; +C -1 ; WX 722 ; N Dcaron ; B 14 0 690 914 ; +C -1 ; WX 444 ; N rcommaaccent ; B 29 -218 434 473 ; +C -1 ; WX 722 ; N Ntilde ; B 16 -18 701 884 ; +C -1 ; WX 500 ; N otilde ; B 25 -14 476 674 ; +C -1 ; WX 722 ; N Rcommaaccent ; B 26 -218 715 676 ; +C -1 ; WX 667 ; N Lcommaaccent ; B 19 -218 638 676 ; +C -1 ; WX 722 ; N Atilde ; B 9 0 689 884 ; +C -1 ; WX 722 ; N Aogonek ; B 9 -193 699 690 ; +C -1 ; WX 722 ; N Aring ; B 9 0 689 935 ; +C -1 ; WX 778 ; N Otilde ; B 35 -19 743 884 ; +C -1 ; WX 444 ; N zdotaccent ; B 21 0 420 691 ; +C -1 ; WX 667 ; N Ecaron ; B 16 0 641 914 ; +C -1 ; WX 389 ; N Iogonek ; B 20 -193 370 676 ; +C -1 ; WX 556 ; N kcommaaccent ; B 22 -218 543 676 ; +C -1 ; WX 570 ; N minus ; B 33 209 537 297 ; +C -1 ; WX 389 ; N Icircumflex ; B 20 0 370 914 ; +C -1 ; WX 556 ; N ncaron ; B 21 0 539 704 ; +C -1 ; WX 333 ; N tcommaaccent ; B 20 -218 332 630 ; +C -1 ; WX 570 ; N logicalnot ; B 33 108 537 399 ; +C -1 ; WX 500 ; N odieresis ; B 25 -14 476 667 ; +C -1 ; WX 556 ; N udieresis ; B 16 -14 537 667 ; +C -1 ; WX 549 ; N notequal ; B 15 -49 540 570 ; +C -1 ; WX 500 ; N gcommaaccent ; B 28 -206 483 829 ; +C -1 ; WX 500 ; N eth ; B 25 -14 476 691 ; +C -1 ; WX 444 ; N zcaron ; B 21 0 420 704 ; +C -1 ; WX 556 ; N ncommaaccent ; B 21 -218 539 473 ; +C -1 ; WX 300 ; N onesuperior ; B 28 275 273 688 ; +C -1 ; WX 278 ; N imacron ; B -8 0 272 637 ; +C -1 ; WX 500 ; N Euro ; B 0 0 0 0 ; +EndCharMetrics +StartKernData +StartKernPairs 2242 +KPX A C -55 +KPX A Cacute -55 +KPX A Ccaron -55 +KPX A Ccedilla -55 +KPX A G -55 +KPX A Gbreve -55 +KPX A Gcommaaccent -55 +KPX A O -45 +KPX A Oacute -45 +KPX A Ocircumflex -45 +KPX A Odieresis -45 +KPX A Ograve -45 +KPX A Ohungarumlaut -45 +KPX A Omacron -45 +KPX A Oslash -45 +KPX A Otilde -45 +KPX A Q -45 +KPX A T -95 +KPX A Tcaron -95 +KPX A Tcommaaccent -95 +KPX A U -50 +KPX A Uacute -50 +KPX A Ucircumflex -50 +KPX A Udieresis -50 +KPX A Ugrave -50 +KPX A Uhungarumlaut -50 +KPX A Umacron -50 +KPX A Uogonek -50 +KPX A Uring -50 +KPX A V -145 +KPX A W -130 +KPX A Y -100 +KPX A Yacute -100 +KPX A Ydieresis -100 +KPX A p -25 +KPX A quoteright -74 +KPX A u -50 +KPX A uacute -50 +KPX A ucircumflex -50 +KPX A udieresis -50 +KPX A ugrave -50 +KPX A uhungarumlaut -50 +KPX A umacron -50 +KPX A uogonek -50 +KPX A uring -50 +KPX A v -100 +KPX A w -90 +KPX A y -74 +KPX A yacute -74 +KPX A ydieresis -74 +KPX Aacute C -55 +KPX Aacute Cacute -55 +KPX Aacute Ccaron -55 +KPX Aacute Ccedilla -55 +KPX Aacute G -55 +KPX Aacute Gbreve -55 +KPX Aacute Gcommaaccent -55 +KPX Aacute O -45 +KPX Aacute Oacute -45 +KPX Aacute Ocircumflex -45 +KPX Aacute Odieresis -45 +KPX Aacute Ograve -45 +KPX Aacute Ohungarumlaut -45 +KPX Aacute Omacron -45 +KPX Aacute Oslash -45 +KPX Aacute Otilde -45 +KPX Aacute Q -45 +KPX Aacute T -95 +KPX Aacute Tcaron -95 +KPX Aacute Tcommaaccent -95 +KPX Aacute U -50 +KPX Aacute Uacute -50 +KPX Aacute Ucircumflex -50 +KPX Aacute Udieresis -50 +KPX Aacute Ugrave -50 +KPX Aacute Uhungarumlaut -50 +KPX Aacute Umacron -50 +KPX Aacute Uogonek -50 +KPX Aacute Uring -50 +KPX Aacute V -145 +KPX Aacute W -130 +KPX Aacute Y -100 +KPX Aacute Yacute -100 +KPX Aacute Ydieresis -100 +KPX Aacute p -25 +KPX Aacute quoteright -74 +KPX Aacute u -50 +KPX Aacute uacute -50 +KPX Aacute ucircumflex -50 +KPX Aacute udieresis -50 +KPX Aacute ugrave -50 +KPX Aacute uhungarumlaut -50 +KPX Aacute umacron -50 +KPX Aacute uogonek -50 +KPX Aacute uring -50 +KPX Aacute v -100 +KPX Aacute w -90 +KPX Aacute y -74 +KPX Aacute yacute -74 +KPX Aacute ydieresis -74 +KPX Abreve C -55 +KPX Abreve Cacute -55 +KPX Abreve Ccaron -55 +KPX Abreve Ccedilla -55 +KPX Abreve G -55 +KPX Abreve Gbreve -55 +KPX Abreve Gcommaaccent -55 +KPX Abreve O -45 +KPX Abreve Oacute -45 +KPX Abreve Ocircumflex -45 +KPX Abreve Odieresis -45 +KPX Abreve Ograve -45 +KPX Abreve Ohungarumlaut -45 +KPX Abreve Omacron -45 +KPX Abreve Oslash -45 +KPX Abreve Otilde -45 +KPX Abreve Q -45 +KPX Abreve T -95 +KPX Abreve Tcaron -95 +KPX Abreve Tcommaaccent -95 +KPX Abreve U -50 +KPX Abreve Uacute -50 +KPX Abreve Ucircumflex -50 +KPX Abreve Udieresis -50 +KPX Abreve Ugrave -50 +KPX Abreve Uhungarumlaut -50 +KPX Abreve Umacron -50 +KPX Abreve Uogonek -50 +KPX Abreve Uring -50 +KPX Abreve V -145 +KPX Abreve W -130 +KPX Abreve Y -100 +KPX Abreve Yacute -100 +KPX Abreve Ydieresis -100 +KPX Abreve p -25 +KPX Abreve quoteright -74 +KPX Abreve u -50 +KPX Abreve uacute -50 +KPX Abreve ucircumflex -50 +KPX Abreve udieresis -50 +KPX Abreve ugrave -50 +KPX Abreve uhungarumlaut -50 +KPX Abreve umacron -50 +KPX Abreve uogonek -50 +KPX Abreve uring -50 +KPX Abreve v -100 +KPX Abreve w -90 +KPX Abreve y -74 +KPX Abreve yacute -74 +KPX Abreve ydieresis -74 +KPX Acircumflex C -55 +KPX Acircumflex Cacute -55 +KPX Acircumflex Ccaron -55 +KPX Acircumflex Ccedilla -55 +KPX Acircumflex G -55 +KPX Acircumflex Gbreve -55 +KPX Acircumflex Gcommaaccent -55 +KPX Acircumflex O -45 +KPX Acircumflex Oacute -45 +KPX Acircumflex Ocircumflex -45 +KPX Acircumflex Odieresis -45 +KPX Acircumflex Ograve -45 +KPX Acircumflex Ohungarumlaut -45 +KPX Acircumflex Omacron -45 +KPX Acircumflex Oslash -45 +KPX Acircumflex Otilde -45 +KPX Acircumflex Q -45 +KPX Acircumflex T -95 +KPX Acircumflex Tcaron -95 +KPX Acircumflex Tcommaaccent -95 +KPX Acircumflex U -50 +KPX Acircumflex Uacute -50 +KPX Acircumflex Ucircumflex -50 +KPX Acircumflex Udieresis -50 +KPX Acircumflex Ugrave -50 +KPX Acircumflex Uhungarumlaut -50 +KPX Acircumflex Umacron -50 +KPX Acircumflex Uogonek -50 +KPX Acircumflex Uring -50 +KPX Acircumflex V -145 +KPX Acircumflex W -130 +KPX Acircumflex Y -100 +KPX Acircumflex Yacute -100 +KPX Acircumflex Ydieresis -100 +KPX Acircumflex p -25 +KPX Acircumflex quoteright -74 +KPX Acircumflex u -50 +KPX Acircumflex uacute -50 +KPX Acircumflex ucircumflex -50 +KPX Acircumflex udieresis -50 +KPX Acircumflex ugrave -50 +KPX Acircumflex uhungarumlaut -50 +KPX Acircumflex umacron -50 +KPX Acircumflex uogonek -50 +KPX Acircumflex uring -50 +KPX Acircumflex v -100 +KPX Acircumflex w -90 +KPX Acircumflex y -74 +KPX Acircumflex yacute -74 +KPX Acircumflex ydieresis -74 +KPX Adieresis C -55 +KPX Adieresis Cacute -55 +KPX Adieresis Ccaron -55 +KPX Adieresis Ccedilla -55 +KPX Adieresis G -55 +KPX Adieresis Gbreve -55 +KPX Adieresis Gcommaaccent -55 +KPX Adieresis O -45 +KPX Adieresis Oacute -45 +KPX Adieresis Ocircumflex -45 +KPX Adieresis Odieresis -45 +KPX Adieresis Ograve -45 +KPX Adieresis Ohungarumlaut -45 +KPX Adieresis Omacron -45 +KPX Adieresis Oslash -45 +KPX Adieresis Otilde -45 +KPX Adieresis Q -45 +KPX Adieresis T -95 +KPX Adieresis Tcaron -95 +KPX Adieresis Tcommaaccent -95 +KPX Adieresis U -50 +KPX Adieresis Uacute -50 +KPX Adieresis Ucircumflex -50 +KPX Adieresis Udieresis -50 +KPX Adieresis Ugrave -50 +KPX Adieresis Uhungarumlaut -50 +KPX Adieresis Umacron -50 +KPX Adieresis Uogonek -50 +KPX Adieresis Uring -50 +KPX Adieresis V -145 +KPX Adieresis W -130 +KPX Adieresis Y -100 +KPX Adieresis Yacute -100 +KPX Adieresis Ydieresis -100 +KPX Adieresis p -25 +KPX Adieresis quoteright -74 +KPX Adieresis u -50 +KPX Adieresis uacute -50 +KPX Adieresis ucircumflex -50 +KPX Adieresis udieresis -50 +KPX Adieresis ugrave -50 +KPX Adieresis uhungarumlaut -50 +KPX Adieresis umacron -50 +KPX Adieresis uogonek -50 +KPX Adieresis uring -50 +KPX Adieresis v -100 +KPX Adieresis w -90 +KPX Adieresis y -74 +KPX Adieresis yacute -74 +KPX Adieresis ydieresis -74 +KPX Agrave C -55 +KPX Agrave Cacute -55 +KPX Agrave Ccaron -55 +KPX Agrave Ccedilla -55 +KPX Agrave G -55 +KPX Agrave Gbreve -55 +KPX Agrave Gcommaaccent -55 +KPX Agrave O -45 +KPX Agrave Oacute -45 +KPX Agrave Ocircumflex -45 +KPX Agrave Odieresis -45 +KPX Agrave Ograve -45 +KPX Agrave Ohungarumlaut -45 +KPX Agrave Omacron -45 +KPX Agrave Oslash -45 +KPX Agrave Otilde -45 +KPX Agrave Q -45 +KPX Agrave T -95 +KPX Agrave Tcaron -95 +KPX Agrave Tcommaaccent -95 +KPX Agrave U -50 +KPX Agrave Uacute -50 +KPX Agrave Ucircumflex -50 +KPX Agrave Udieresis -50 +KPX Agrave Ugrave -50 +KPX Agrave Uhungarumlaut -50 +KPX Agrave Umacron -50 +KPX Agrave Uogonek -50 +KPX Agrave Uring -50 +KPX Agrave V -145 +KPX Agrave W -130 +KPX Agrave Y -100 +KPX Agrave Yacute -100 +KPX Agrave Ydieresis -100 +KPX Agrave p -25 +KPX Agrave quoteright -74 +KPX Agrave u -50 +KPX Agrave uacute -50 +KPX Agrave ucircumflex -50 +KPX Agrave udieresis -50 +KPX Agrave ugrave -50 +KPX Agrave uhungarumlaut -50 +KPX Agrave umacron -50 +KPX Agrave uogonek -50 +KPX Agrave uring -50 +KPX Agrave v -100 +KPX Agrave w -90 +KPX Agrave y -74 +KPX Agrave yacute -74 +KPX Agrave ydieresis -74 +KPX Amacron C -55 +KPX Amacron Cacute -55 +KPX Amacron Ccaron -55 +KPX Amacron Ccedilla -55 +KPX Amacron G -55 +KPX Amacron Gbreve -55 +KPX Amacron Gcommaaccent -55 +KPX Amacron O -45 +KPX Amacron Oacute -45 +KPX Amacron Ocircumflex -45 +KPX Amacron Odieresis -45 +KPX Amacron Ograve -45 +KPX Amacron Ohungarumlaut -45 +KPX Amacron Omacron -45 +KPX Amacron Oslash -45 +KPX Amacron Otilde -45 +KPX Amacron Q -45 +KPX Amacron T -95 +KPX Amacron Tcaron -95 +KPX Amacron Tcommaaccent -95 +KPX Amacron U -50 +KPX Amacron Uacute -50 +KPX Amacron Ucircumflex -50 +KPX Amacron Udieresis -50 +KPX Amacron Ugrave -50 +KPX Amacron Uhungarumlaut -50 +KPX Amacron Umacron -50 +KPX Amacron Uogonek -50 +KPX Amacron Uring -50 +KPX Amacron V -145 +KPX Amacron W -130 +KPX Amacron Y -100 +KPX Amacron Yacute -100 +KPX Amacron Ydieresis -100 +KPX Amacron p -25 +KPX Amacron quoteright -74 +KPX Amacron u -50 +KPX Amacron uacute -50 +KPX Amacron ucircumflex -50 +KPX Amacron udieresis -50 +KPX Amacron ugrave -50 +KPX Amacron uhungarumlaut -50 +KPX Amacron umacron -50 +KPX Amacron uogonek -50 +KPX Amacron uring -50 +KPX Amacron v -100 +KPX Amacron w -90 +KPX Amacron y -74 +KPX Amacron yacute -74 +KPX Amacron ydieresis -74 +KPX Aogonek C -55 +KPX Aogonek Cacute -55 +KPX Aogonek Ccaron -55 +KPX Aogonek Ccedilla -55 +KPX Aogonek G -55 +KPX Aogonek Gbreve -55 +KPX Aogonek Gcommaaccent -55 +KPX Aogonek O -45 +KPX Aogonek Oacute -45 +KPX Aogonek Ocircumflex -45 +KPX Aogonek Odieresis -45 +KPX Aogonek Ograve -45 +KPX Aogonek Ohungarumlaut -45 +KPX Aogonek Omacron -45 +KPX Aogonek Oslash -45 +KPX Aogonek Otilde -45 +KPX Aogonek Q -45 +KPX Aogonek T -95 +KPX Aogonek Tcaron -95 +KPX Aogonek Tcommaaccent -95 +KPX Aogonek U -50 +KPX Aogonek Uacute -50 +KPX Aogonek Ucircumflex -50 +KPX Aogonek Udieresis -50 +KPX Aogonek Ugrave -50 +KPX Aogonek Uhungarumlaut -50 +KPX Aogonek Umacron -50 +KPX Aogonek Uogonek -50 +KPX Aogonek Uring -50 +KPX Aogonek V -145 +KPX Aogonek W -130 +KPX Aogonek Y -100 +KPX Aogonek Yacute -100 +KPX Aogonek Ydieresis -100 +KPX Aogonek p -25 +KPX Aogonek quoteright -74 +KPX Aogonek u -50 +KPX Aogonek uacute -50 +KPX Aogonek ucircumflex -50 +KPX Aogonek udieresis -50 +KPX Aogonek ugrave -50 +KPX Aogonek uhungarumlaut -50 +KPX Aogonek umacron -50 +KPX Aogonek uogonek -50 +KPX Aogonek uring -50 +KPX Aogonek v -100 +KPX Aogonek w -90 +KPX Aogonek y -34 +KPX Aogonek yacute -34 +KPX Aogonek ydieresis -34 +KPX Aring C -55 +KPX Aring Cacute -55 +KPX Aring Ccaron -55 +KPX Aring Ccedilla -55 +KPX Aring G -55 +KPX Aring Gbreve -55 +KPX Aring Gcommaaccent -55 +KPX Aring O -45 +KPX Aring Oacute -45 +KPX Aring Ocircumflex -45 +KPX Aring Odieresis -45 +KPX Aring Ograve -45 +KPX Aring Ohungarumlaut -45 +KPX Aring Omacron -45 +KPX Aring Oslash -45 +KPX Aring Otilde -45 +KPX Aring Q -45 +KPX Aring T -95 +KPX Aring Tcaron -95 +KPX Aring Tcommaaccent -95 +KPX Aring U -50 +KPX Aring Uacute -50 +KPX Aring Ucircumflex -50 +KPX Aring Udieresis -50 +KPX Aring Ugrave -50 +KPX Aring Uhungarumlaut -50 +KPX Aring Umacron -50 +KPX Aring Uogonek -50 +KPX Aring Uring -50 +KPX Aring V -145 +KPX Aring W -130 +KPX Aring Y -100 +KPX Aring Yacute -100 +KPX Aring Ydieresis -100 +KPX Aring p -25 +KPX Aring quoteright -74 +KPX Aring u -50 +KPX Aring uacute -50 +KPX Aring ucircumflex -50 +KPX Aring udieresis -50 +KPX Aring ugrave -50 +KPX Aring uhungarumlaut -50 +KPX Aring umacron -50 +KPX Aring uogonek -50 +KPX Aring uring -50 +KPX Aring v -100 +KPX Aring w -90 +KPX Aring y -74 +KPX Aring yacute -74 +KPX Aring ydieresis -74 +KPX Atilde C -55 +KPX Atilde Cacute -55 +KPX Atilde Ccaron -55 +KPX Atilde Ccedilla -55 +KPX Atilde G -55 +KPX Atilde Gbreve -55 +KPX Atilde Gcommaaccent -55 +KPX Atilde O -45 +KPX Atilde Oacute -45 +KPX Atilde Ocircumflex -45 +KPX Atilde Odieresis -45 +KPX Atilde Ograve -45 +KPX Atilde Ohungarumlaut -45 +KPX Atilde Omacron -45 +KPX Atilde Oslash -45 +KPX Atilde Otilde -45 +KPX Atilde Q -45 +KPX Atilde T -95 +KPX Atilde Tcaron -95 +KPX Atilde Tcommaaccent -95 +KPX Atilde U -50 +KPX Atilde Uacute -50 +KPX Atilde Ucircumflex -50 +KPX Atilde Udieresis -50 +KPX Atilde Ugrave -50 +KPX Atilde Uhungarumlaut -50 +KPX Atilde Umacron -50 +KPX Atilde Uogonek -50 +KPX Atilde Uring -50 +KPX Atilde V -145 +KPX Atilde W -130 +KPX Atilde Y -100 +KPX Atilde Yacute -100 +KPX Atilde Ydieresis -100 +KPX Atilde p -25 +KPX Atilde quoteright -74 +KPX Atilde u -50 +KPX Atilde uacute -50 +KPX Atilde ucircumflex -50 +KPX Atilde udieresis -50 +KPX Atilde ugrave -50 +KPX Atilde uhungarumlaut -50 +KPX Atilde umacron -50 +KPX Atilde uogonek -50 +KPX Atilde uring -50 +KPX Atilde v -100 +KPX Atilde w -90 +KPX Atilde y -74 +KPX Atilde yacute -74 +KPX Atilde ydieresis -74 +KPX B A -30 +KPX B Aacute -30 +KPX B Abreve -30 +KPX B Acircumflex -30 +KPX B Adieresis -30 +KPX B Agrave -30 +KPX B Amacron -30 +KPX B Aogonek -30 +KPX B Aring -30 +KPX B Atilde -30 +KPX B U -10 +KPX B Uacute -10 +KPX B Ucircumflex -10 +KPX B Udieresis -10 +KPX B Ugrave -10 +KPX B Uhungarumlaut -10 +KPX B Umacron -10 +KPX B Uogonek -10 +KPX B Uring -10 +KPX D A -35 +KPX D Aacute -35 +KPX D Abreve -35 +KPX D Acircumflex -35 +KPX D Adieresis -35 +KPX D Agrave -35 +KPX D Amacron -35 +KPX D Aogonek -35 +KPX D Aring -35 +KPX D Atilde -35 +KPX D V -40 +KPX D W -40 +KPX D Y -40 +KPX D Yacute -40 +KPX D Ydieresis -40 +KPX D period -20 +KPX Dcaron A -35 +KPX Dcaron Aacute -35 +KPX Dcaron Abreve -35 +KPX Dcaron Acircumflex -35 +KPX Dcaron Adieresis -35 +KPX Dcaron Agrave -35 +KPX Dcaron Amacron -35 +KPX Dcaron Aogonek -35 +KPX Dcaron Aring -35 +KPX Dcaron Atilde -35 +KPX Dcaron V -40 +KPX Dcaron W -40 +KPX Dcaron Y -40 +KPX Dcaron Yacute -40 +KPX Dcaron Ydieresis -40 +KPX Dcaron period -20 +KPX Dcroat A -35 +KPX Dcroat Aacute -35 +KPX Dcroat Abreve -35 +KPX Dcroat Acircumflex -35 +KPX Dcroat Adieresis -35 +KPX Dcroat Agrave -35 +KPX Dcroat Amacron -35 +KPX Dcroat Aogonek -35 +KPX Dcroat Aring -35 +KPX Dcroat Atilde -35 +KPX Dcroat V -40 +KPX Dcroat W -40 +KPX Dcroat Y -40 +KPX Dcroat Yacute -40 +KPX Dcroat Ydieresis -40 +KPX Dcroat period -20 +KPX F A -90 +KPX F Aacute -90 +KPX F Abreve -90 +KPX F Acircumflex -90 +KPX F Adieresis -90 +KPX F Agrave -90 +KPX F Amacron -90 +KPX F Aogonek -90 +KPX F Aring -90 +KPX F Atilde -90 +KPX F a -25 +KPX F aacute -25 +KPX F abreve -25 +KPX F acircumflex -25 +KPX F adieresis -25 +KPX F agrave -25 +KPX F amacron -25 +KPX F aogonek -25 +KPX F aring -25 +KPX F atilde -25 +KPX F comma -92 +KPX F e -25 +KPX F eacute -25 +KPX F ecaron -25 +KPX F ecircumflex -25 +KPX F edieresis -25 +KPX F edotaccent -25 +KPX F egrave -25 +KPX F emacron -25 +KPX F eogonek -25 +KPX F o -25 +KPX F oacute -25 +KPX F ocircumflex -25 +KPX F odieresis -25 +KPX F ograve -25 +KPX F ohungarumlaut -25 +KPX F omacron -25 +KPX F oslash -25 +KPX F otilde -25 +KPX F period -110 +KPX J A -30 +KPX J Aacute -30 +KPX J Abreve -30 +KPX J Acircumflex -30 +KPX J Adieresis -30 +KPX J Agrave -30 +KPX J Amacron -30 +KPX J Aogonek -30 +KPX J Aring -30 +KPX J Atilde -30 +KPX J a -15 +KPX J aacute -15 +KPX J abreve -15 +KPX J acircumflex -15 +KPX J adieresis -15 +KPX J agrave -15 +KPX J amacron -15 +KPX J aogonek -15 +KPX J aring -15 +KPX J atilde -15 +KPX J e -15 +KPX J eacute -15 +KPX J ecaron -15 +KPX J ecircumflex -15 +KPX J edieresis -15 +KPX J edotaccent -15 +KPX J egrave -15 +KPX J emacron -15 +KPX J eogonek -15 +KPX J o -15 +KPX J oacute -15 +KPX J ocircumflex -15 +KPX J odieresis -15 +KPX J ograve -15 +KPX J ohungarumlaut -15 +KPX J omacron -15 +KPX J oslash -15 +KPX J otilde -15 +KPX J period -20 +KPX J u -15 +KPX J uacute -15 +KPX J ucircumflex -15 +KPX J udieresis -15 +KPX J ugrave -15 +KPX J uhungarumlaut -15 +KPX J umacron -15 +KPX J uogonek -15 +KPX J uring -15 +KPX K O -30 +KPX K Oacute -30 +KPX K Ocircumflex -30 +KPX K Odieresis -30 +KPX K Ograve -30 +KPX K Ohungarumlaut -30 +KPX K Omacron -30 +KPX K Oslash -30 +KPX K Otilde -30 +KPX K e -25 +KPX K eacute -25 +KPX K ecaron -25 +KPX K ecircumflex -25 +KPX K edieresis -25 +KPX K edotaccent -25 +KPX K egrave -25 +KPX K emacron -25 +KPX K eogonek -25 +KPX K o -25 +KPX K oacute -25 +KPX K ocircumflex -25 +KPX K odieresis -25 +KPX K ograve -25 +KPX K ohungarumlaut -25 +KPX K omacron -25 +KPX K oslash -25 +KPX K otilde -25 +KPX K u -15 +KPX K uacute -15 +KPX K ucircumflex -15 +KPX K udieresis -15 +KPX K ugrave -15 +KPX K uhungarumlaut -15 +KPX K umacron -15 +KPX K uogonek -15 +KPX K uring -15 +KPX K y -45 +KPX K yacute -45 +KPX K ydieresis -45 +KPX Kcommaaccent O -30 +KPX Kcommaaccent Oacute -30 +KPX Kcommaaccent Ocircumflex -30 +KPX Kcommaaccent Odieresis -30 +KPX Kcommaaccent Ograve -30 +KPX Kcommaaccent Ohungarumlaut -30 +KPX Kcommaaccent Omacron -30 +KPX Kcommaaccent Oslash -30 +KPX Kcommaaccent Otilde -30 +KPX Kcommaaccent e -25 +KPX Kcommaaccent eacute -25 +KPX Kcommaaccent ecaron -25 +KPX Kcommaaccent ecircumflex -25 +KPX Kcommaaccent edieresis -25 +KPX Kcommaaccent edotaccent -25 +KPX Kcommaaccent egrave -25 +KPX Kcommaaccent emacron -25 +KPX Kcommaaccent eogonek -25 +KPX Kcommaaccent o -25 +KPX Kcommaaccent oacute -25 +KPX Kcommaaccent ocircumflex -25 +KPX Kcommaaccent odieresis -25 +KPX Kcommaaccent ograve -25 +KPX Kcommaaccent ohungarumlaut -25 +KPX Kcommaaccent omacron -25 +KPX Kcommaaccent oslash -25 +KPX Kcommaaccent otilde -25 +KPX Kcommaaccent u -15 +KPX Kcommaaccent uacute -15 +KPX Kcommaaccent ucircumflex -15 +KPX Kcommaaccent udieresis -15 +KPX Kcommaaccent ugrave -15 +KPX Kcommaaccent uhungarumlaut -15 +KPX Kcommaaccent umacron -15 +KPX Kcommaaccent uogonek -15 +KPX Kcommaaccent uring -15 +KPX Kcommaaccent y -45 +KPX Kcommaaccent yacute -45 +KPX Kcommaaccent ydieresis -45 +KPX L T -92 +KPX L Tcaron -92 +KPX L Tcommaaccent -92 +KPX L V -92 +KPX L W -92 +KPX L Y -92 +KPX L Yacute -92 +KPX L Ydieresis -92 +KPX L quotedblright -20 +KPX L quoteright -110 +KPX L y -55 +KPX L yacute -55 +KPX L ydieresis -55 +KPX Lacute T -92 +KPX Lacute Tcaron -92 +KPX Lacute Tcommaaccent -92 +KPX Lacute V -92 +KPX Lacute W -92 +KPX Lacute Y -92 +KPX Lacute Yacute -92 +KPX Lacute Ydieresis -92 +KPX Lacute quotedblright -20 +KPX Lacute quoteright -110 +KPX Lacute y -55 +KPX Lacute yacute -55 +KPX Lacute ydieresis -55 +KPX Lcommaaccent T -92 +KPX Lcommaaccent Tcaron -92 +KPX Lcommaaccent Tcommaaccent -92 +KPX Lcommaaccent V -92 +KPX Lcommaaccent W -92 +KPX Lcommaaccent Y -92 +KPX Lcommaaccent Yacute -92 +KPX Lcommaaccent Ydieresis -92 +KPX Lcommaaccent quotedblright -20 +KPX Lcommaaccent quoteright -110 +KPX Lcommaaccent y -55 +KPX Lcommaaccent yacute -55 +KPX Lcommaaccent ydieresis -55 +KPX Lslash T -92 +KPX Lslash Tcaron -92 +KPX Lslash Tcommaaccent -92 +KPX Lslash V -92 +KPX Lslash W -92 +KPX Lslash Y -92 +KPX Lslash Yacute -92 +KPX Lslash Ydieresis -92 +KPX Lslash quotedblright -20 +KPX Lslash quoteright -110 +KPX Lslash y -55 +KPX Lslash yacute -55 +KPX Lslash ydieresis -55 +KPX N A -20 +KPX N Aacute -20 +KPX N Abreve -20 +KPX N Acircumflex -20 +KPX N Adieresis -20 +KPX N Agrave -20 +KPX N Amacron -20 +KPX N Aogonek -20 +KPX N Aring -20 +KPX N Atilde -20 +KPX Nacute A -20 +KPX Nacute Aacute -20 +KPX Nacute Abreve -20 +KPX Nacute Acircumflex -20 +KPX Nacute Adieresis -20 +KPX Nacute Agrave -20 +KPX Nacute Amacron -20 +KPX Nacute Aogonek -20 +KPX Nacute Aring -20 +KPX Nacute Atilde -20 +KPX Ncaron A -20 +KPX Ncaron Aacute -20 +KPX Ncaron Abreve -20 +KPX Ncaron Acircumflex -20 +KPX Ncaron Adieresis -20 +KPX Ncaron Agrave -20 +KPX Ncaron Amacron -20 +KPX Ncaron Aogonek -20 +KPX Ncaron Aring -20 +KPX Ncaron Atilde -20 +KPX Ncommaaccent A -20 +KPX Ncommaaccent Aacute -20 +KPX Ncommaaccent Abreve -20 +KPX Ncommaaccent Acircumflex -20 +KPX Ncommaaccent Adieresis -20 +KPX Ncommaaccent Agrave -20 +KPX Ncommaaccent Amacron -20 +KPX Ncommaaccent Aogonek -20 +KPX Ncommaaccent Aring -20 +KPX Ncommaaccent Atilde -20 +KPX Ntilde A -20 +KPX Ntilde Aacute -20 +KPX Ntilde Abreve -20 +KPX Ntilde Acircumflex -20 +KPX Ntilde Adieresis -20 +KPX Ntilde Agrave -20 +KPX Ntilde Amacron -20 +KPX Ntilde Aogonek -20 +KPX Ntilde Aring -20 +KPX Ntilde Atilde -20 +KPX O A -40 +KPX O Aacute -40 +KPX O Abreve -40 +KPX O Acircumflex -40 +KPX O Adieresis -40 +KPX O Agrave -40 +KPX O Amacron -40 +KPX O Aogonek -40 +KPX O Aring -40 +KPX O Atilde -40 +KPX O T -40 +KPX O Tcaron -40 +KPX O Tcommaaccent -40 +KPX O V -50 +KPX O W -50 +KPX O X -40 +KPX O Y -50 +KPX O Yacute -50 +KPX O Ydieresis -50 +KPX Oacute A -40 +KPX Oacute Aacute -40 +KPX Oacute Abreve -40 +KPX Oacute Acircumflex -40 +KPX Oacute Adieresis -40 +KPX Oacute Agrave -40 +KPX Oacute Amacron -40 +KPX Oacute Aogonek -40 +KPX Oacute Aring -40 +KPX Oacute Atilde -40 +KPX Oacute T -40 +KPX Oacute Tcaron -40 +KPX Oacute Tcommaaccent -40 +KPX Oacute V -50 +KPX Oacute W -50 +KPX Oacute X -40 +KPX Oacute Y -50 +KPX Oacute Yacute -50 +KPX Oacute Ydieresis -50 +KPX Ocircumflex A -40 +KPX Ocircumflex Aacute -40 +KPX Ocircumflex Abreve -40 +KPX Ocircumflex Acircumflex -40 +KPX Ocircumflex Adieresis -40 +KPX Ocircumflex Agrave -40 +KPX Ocircumflex Amacron -40 +KPX Ocircumflex Aogonek -40 +KPX Ocircumflex Aring -40 +KPX Ocircumflex Atilde -40 +KPX Ocircumflex T -40 +KPX Ocircumflex Tcaron -40 +KPX Ocircumflex Tcommaaccent -40 +KPX Ocircumflex V -50 +KPX Ocircumflex W -50 +KPX Ocircumflex X -40 +KPX Ocircumflex Y -50 +KPX Ocircumflex Yacute -50 +KPX Ocircumflex Ydieresis -50 +KPX Odieresis A -40 +KPX Odieresis Aacute -40 +KPX Odieresis Abreve -40 +KPX Odieresis Acircumflex -40 +KPX Odieresis Adieresis -40 +KPX Odieresis Agrave -40 +KPX Odieresis Amacron -40 +KPX Odieresis Aogonek -40 +KPX Odieresis Aring -40 +KPX Odieresis Atilde -40 +KPX Odieresis T -40 +KPX Odieresis Tcaron -40 +KPX Odieresis Tcommaaccent -40 +KPX Odieresis V -50 +KPX Odieresis W -50 +KPX Odieresis X -40 +KPX Odieresis Y -50 +KPX Odieresis Yacute -50 +KPX Odieresis Ydieresis -50 +KPX Ograve A -40 +KPX Ograve Aacute -40 +KPX Ograve Abreve -40 +KPX Ograve Acircumflex -40 +KPX Ograve Adieresis -40 +KPX Ograve Agrave -40 +KPX Ograve Amacron -40 +KPX Ograve Aogonek -40 +KPX Ograve Aring -40 +KPX Ograve Atilde -40 +KPX Ograve T -40 +KPX Ograve Tcaron -40 +KPX Ograve Tcommaaccent -40 +KPX Ograve V -50 +KPX Ograve W -50 +KPX Ograve X -40 +KPX Ograve Y -50 +KPX Ograve Yacute -50 +KPX Ograve Ydieresis -50 +KPX Ohungarumlaut A -40 +KPX Ohungarumlaut Aacute -40 +KPX Ohungarumlaut Abreve -40 +KPX Ohungarumlaut Acircumflex -40 +KPX Ohungarumlaut Adieresis -40 +KPX Ohungarumlaut Agrave -40 +KPX Ohungarumlaut Amacron -40 +KPX Ohungarumlaut Aogonek -40 +KPX Ohungarumlaut Aring -40 +KPX Ohungarumlaut Atilde -40 +KPX Ohungarumlaut T -40 +KPX Ohungarumlaut Tcaron -40 +KPX Ohungarumlaut Tcommaaccent -40 +KPX Ohungarumlaut V -50 +KPX Ohungarumlaut W -50 +KPX Ohungarumlaut X -40 +KPX Ohungarumlaut Y -50 +KPX Ohungarumlaut Yacute -50 +KPX Ohungarumlaut Ydieresis -50 +KPX Omacron A -40 +KPX Omacron Aacute -40 +KPX Omacron Abreve -40 +KPX Omacron Acircumflex -40 +KPX Omacron Adieresis -40 +KPX Omacron Agrave -40 +KPX Omacron Amacron -40 +KPX Omacron Aogonek -40 +KPX Omacron Aring -40 +KPX Omacron Atilde -40 +KPX Omacron T -40 +KPX Omacron Tcaron -40 +KPX Omacron Tcommaaccent -40 +KPX Omacron V -50 +KPX Omacron W -50 +KPX Omacron X -40 +KPX Omacron Y -50 +KPX Omacron Yacute -50 +KPX Omacron Ydieresis -50 +KPX Oslash A -40 +KPX Oslash Aacute -40 +KPX Oslash Abreve -40 +KPX Oslash Acircumflex -40 +KPX Oslash Adieresis -40 +KPX Oslash Agrave -40 +KPX Oslash Amacron -40 +KPX Oslash Aogonek -40 +KPX Oslash Aring -40 +KPX Oslash Atilde -40 +KPX Oslash T -40 +KPX Oslash Tcaron -40 +KPX Oslash Tcommaaccent -40 +KPX Oslash V -50 +KPX Oslash W -50 +KPX Oslash X -40 +KPX Oslash Y -50 +KPX Oslash Yacute -50 +KPX Oslash Ydieresis -50 +KPX Otilde A -40 +KPX Otilde Aacute -40 +KPX Otilde Abreve -40 +KPX Otilde Acircumflex -40 +KPX Otilde Adieresis -40 +KPX Otilde Agrave -40 +KPX Otilde Amacron -40 +KPX Otilde Aogonek -40 +KPX Otilde Aring -40 +KPX Otilde Atilde -40 +KPX Otilde T -40 +KPX Otilde Tcaron -40 +KPX Otilde Tcommaaccent -40 +KPX Otilde V -50 +KPX Otilde W -50 +KPX Otilde X -40 +KPX Otilde Y -50 +KPX Otilde Yacute -50 +KPX Otilde Ydieresis -50 +KPX P A -74 +KPX P Aacute -74 +KPX P Abreve -74 +KPX P Acircumflex -74 +KPX P Adieresis -74 +KPX P Agrave -74 +KPX P Amacron -74 +KPX P Aogonek -74 +KPX P Aring -74 +KPX P Atilde -74 +KPX P a -10 +KPX P aacute -10 +KPX P abreve -10 +KPX P acircumflex -10 +KPX P adieresis -10 +KPX P agrave -10 +KPX P amacron -10 +KPX P aogonek -10 +KPX P aring -10 +KPX P atilde -10 +KPX P comma -92 +KPX P e -20 +KPX P eacute -20 +KPX P ecaron -20 +KPX P ecircumflex -20 +KPX P edieresis -20 +KPX P edotaccent -20 +KPX P egrave -20 +KPX P emacron -20 +KPX P eogonek -20 +KPX P o -20 +KPX P oacute -20 +KPX P ocircumflex -20 +KPX P odieresis -20 +KPX P ograve -20 +KPX P ohungarumlaut -20 +KPX P omacron -20 +KPX P oslash -20 +KPX P otilde -20 +KPX P period -110 +KPX Q U -10 +KPX Q Uacute -10 +KPX Q Ucircumflex -10 +KPX Q Udieresis -10 +KPX Q Ugrave -10 +KPX Q Uhungarumlaut -10 +KPX Q Umacron -10 +KPX Q Uogonek -10 +KPX Q Uring -10 +KPX Q period -20 +KPX R O -30 +KPX R Oacute -30 +KPX R Ocircumflex -30 +KPX R Odieresis -30 +KPX R Ograve -30 +KPX R Ohungarumlaut -30 +KPX R Omacron -30 +KPX R Oslash -30 +KPX R Otilde -30 +KPX R T -40 +KPX R Tcaron -40 +KPX R Tcommaaccent -40 +KPX R U -30 +KPX R Uacute -30 +KPX R Ucircumflex -30 +KPX R Udieresis -30 +KPX R Ugrave -30 +KPX R Uhungarumlaut -30 +KPX R Umacron -30 +KPX R Uogonek -30 +KPX R Uring -30 +KPX R V -55 +KPX R W -35 +KPX R Y -35 +KPX R Yacute -35 +KPX R Ydieresis -35 +KPX Racute O -30 +KPX Racute Oacute -30 +KPX Racute Ocircumflex -30 +KPX Racute Odieresis -30 +KPX Racute Ograve -30 +KPX Racute Ohungarumlaut -30 +KPX Racute Omacron -30 +KPX Racute Oslash -30 +KPX Racute Otilde -30 +KPX Racute T -40 +KPX Racute Tcaron -40 +KPX Racute Tcommaaccent -40 +KPX Racute U -30 +KPX Racute Uacute -30 +KPX Racute Ucircumflex -30 +KPX Racute Udieresis -30 +KPX Racute Ugrave -30 +KPX Racute Uhungarumlaut -30 +KPX Racute Umacron -30 +KPX Racute Uogonek -30 +KPX Racute Uring -30 +KPX Racute V -55 +KPX Racute W -35 +KPX Racute Y -35 +KPX Racute Yacute -35 +KPX Racute Ydieresis -35 +KPX Rcaron O -30 +KPX Rcaron Oacute -30 +KPX Rcaron Ocircumflex -30 +KPX Rcaron Odieresis -30 +KPX Rcaron Ograve -30 +KPX Rcaron Ohungarumlaut -30 +KPX Rcaron Omacron -30 +KPX Rcaron Oslash -30 +KPX Rcaron Otilde -30 +KPX Rcaron T -40 +KPX Rcaron Tcaron -40 +KPX Rcaron Tcommaaccent -40 +KPX Rcaron U -30 +KPX Rcaron Uacute -30 +KPX Rcaron Ucircumflex -30 +KPX Rcaron Udieresis -30 +KPX Rcaron Ugrave -30 +KPX Rcaron Uhungarumlaut -30 +KPX Rcaron Umacron -30 +KPX Rcaron Uogonek -30 +KPX Rcaron Uring -30 +KPX Rcaron V -55 +KPX Rcaron W -35 +KPX Rcaron Y -35 +KPX Rcaron Yacute -35 +KPX Rcaron Ydieresis -35 +KPX Rcommaaccent O -30 +KPX Rcommaaccent Oacute -30 +KPX Rcommaaccent Ocircumflex -30 +KPX Rcommaaccent Odieresis -30 +KPX Rcommaaccent Ograve -30 +KPX Rcommaaccent Ohungarumlaut -30 +KPX Rcommaaccent Omacron -30 +KPX Rcommaaccent Oslash -30 +KPX Rcommaaccent Otilde -30 +KPX Rcommaaccent T -40 +KPX Rcommaaccent Tcaron -40 +KPX Rcommaaccent Tcommaaccent -40 +KPX Rcommaaccent U -30 +KPX Rcommaaccent Uacute -30 +KPX Rcommaaccent Ucircumflex -30 +KPX Rcommaaccent Udieresis -30 +KPX Rcommaaccent Ugrave -30 +KPX Rcommaaccent Uhungarumlaut -30 +KPX Rcommaaccent Umacron -30 +KPX Rcommaaccent Uogonek -30 +KPX Rcommaaccent Uring -30 +KPX Rcommaaccent V -55 +KPX Rcommaaccent W -35 +KPX Rcommaaccent Y -35 +KPX Rcommaaccent Yacute -35 +KPX Rcommaaccent Ydieresis -35 +KPX T A -90 +KPX T Aacute -90 +KPX T Abreve -90 +KPX T Acircumflex -90 +KPX T Adieresis -90 +KPX T Agrave -90 +KPX T Amacron -90 +KPX T Aogonek -90 +KPX T Aring -90 +KPX T Atilde -90 +KPX T O -18 +KPX T Oacute -18 +KPX T Ocircumflex -18 +KPX T Odieresis -18 +KPX T Ograve -18 +KPX T Ohungarumlaut -18 +KPX T Omacron -18 +KPX T Oslash -18 +KPX T Otilde -18 +KPX T a -92 +KPX T aacute -92 +KPX T abreve -52 +KPX T acircumflex -52 +KPX T adieresis -52 +KPX T agrave -52 +KPX T amacron -52 +KPX T aogonek -92 +KPX T aring -92 +KPX T atilde -52 +KPX T colon -74 +KPX T comma -74 +KPX T e -92 +KPX T eacute -92 +KPX T ecaron -92 +KPX T ecircumflex -92 +KPX T edieresis -52 +KPX T edotaccent -92 +KPX T egrave -52 +KPX T emacron -52 +KPX T eogonek -92 +KPX T hyphen -92 +KPX T i -18 +KPX T iacute -18 +KPX T iogonek -18 +KPX T o -92 +KPX T oacute -92 +KPX T ocircumflex -92 +KPX T odieresis -92 +KPX T ograve -92 +KPX T ohungarumlaut -92 +KPX T omacron -92 +KPX T oslash -92 +KPX T otilde -92 +KPX T period -90 +KPX T r -74 +KPX T racute -74 +KPX T rcaron -74 +KPX T rcommaaccent -74 +KPX T semicolon -74 +KPX T u -92 +KPX T uacute -92 +KPX T ucircumflex -92 +KPX T udieresis -92 +KPX T ugrave -92 +KPX T uhungarumlaut -92 +KPX T umacron -92 +KPX T uogonek -92 +KPX T uring -92 +KPX T w -74 +KPX T y -34 +KPX T yacute -34 +KPX T ydieresis -34 +KPX Tcaron A -90 +KPX Tcaron Aacute -90 +KPX Tcaron Abreve -90 +KPX Tcaron Acircumflex -90 +KPX Tcaron Adieresis -90 +KPX Tcaron Agrave -90 +KPX Tcaron Amacron -90 +KPX Tcaron Aogonek -90 +KPX Tcaron Aring -90 +KPX Tcaron Atilde -90 +KPX Tcaron O -18 +KPX Tcaron Oacute -18 +KPX Tcaron Ocircumflex -18 +KPX Tcaron Odieresis -18 +KPX Tcaron Ograve -18 +KPX Tcaron Ohungarumlaut -18 +KPX Tcaron Omacron -18 +KPX Tcaron Oslash -18 +KPX Tcaron Otilde -18 +KPX Tcaron a -92 +KPX Tcaron aacute -92 +KPX Tcaron abreve -52 +KPX Tcaron acircumflex -52 +KPX Tcaron adieresis -52 +KPX Tcaron agrave -52 +KPX Tcaron amacron -52 +KPX Tcaron aogonek -92 +KPX Tcaron aring -92 +KPX Tcaron atilde -52 +KPX Tcaron colon -74 +KPX Tcaron comma -74 +KPX Tcaron e -92 +KPX Tcaron eacute -92 +KPX Tcaron ecaron -92 +KPX Tcaron ecircumflex -92 +KPX Tcaron edieresis -52 +KPX Tcaron edotaccent -92 +KPX Tcaron egrave -52 +KPX Tcaron emacron -52 +KPX Tcaron eogonek -92 +KPX Tcaron hyphen -92 +KPX Tcaron i -18 +KPX Tcaron iacute -18 +KPX Tcaron iogonek -18 +KPX Tcaron o -92 +KPX Tcaron oacute -92 +KPX Tcaron ocircumflex -92 +KPX Tcaron odieresis -92 +KPX Tcaron ograve -92 +KPX Tcaron ohungarumlaut -92 +KPX Tcaron omacron -92 +KPX Tcaron oslash -92 +KPX Tcaron otilde -92 +KPX Tcaron period -90 +KPX Tcaron r -74 +KPX Tcaron racute -74 +KPX Tcaron rcaron -74 +KPX Tcaron rcommaaccent -74 +KPX Tcaron semicolon -74 +KPX Tcaron u -92 +KPX Tcaron uacute -92 +KPX Tcaron ucircumflex -92 +KPX Tcaron udieresis -92 +KPX Tcaron ugrave -92 +KPX Tcaron uhungarumlaut -92 +KPX Tcaron umacron -92 +KPX Tcaron uogonek -92 +KPX Tcaron uring -92 +KPX Tcaron w -74 +KPX Tcaron y -34 +KPX Tcaron yacute -34 +KPX Tcaron ydieresis -34 +KPX Tcommaaccent A -90 +KPX Tcommaaccent Aacute -90 +KPX Tcommaaccent Abreve -90 +KPX Tcommaaccent Acircumflex -90 +KPX Tcommaaccent Adieresis -90 +KPX Tcommaaccent Agrave -90 +KPX Tcommaaccent Amacron -90 +KPX Tcommaaccent Aogonek -90 +KPX Tcommaaccent Aring -90 +KPX Tcommaaccent Atilde -90 +KPX Tcommaaccent O -18 +KPX Tcommaaccent Oacute -18 +KPX Tcommaaccent Ocircumflex -18 +KPX Tcommaaccent Odieresis -18 +KPX Tcommaaccent Ograve -18 +KPX Tcommaaccent Ohungarumlaut -18 +KPX Tcommaaccent Omacron -18 +KPX Tcommaaccent Oslash -18 +KPX Tcommaaccent Otilde -18 +KPX Tcommaaccent a -92 +KPX Tcommaaccent aacute -92 +KPX Tcommaaccent abreve -52 +KPX Tcommaaccent acircumflex -52 +KPX Tcommaaccent adieresis -52 +KPX Tcommaaccent agrave -52 +KPX Tcommaaccent amacron -52 +KPX Tcommaaccent aogonek -92 +KPX Tcommaaccent aring -92 +KPX Tcommaaccent atilde -52 +KPX Tcommaaccent colon -74 +KPX Tcommaaccent comma -74 +KPX Tcommaaccent e -92 +KPX Tcommaaccent eacute -92 +KPX Tcommaaccent ecaron -92 +KPX Tcommaaccent ecircumflex -92 +KPX Tcommaaccent edieresis -52 +KPX Tcommaaccent edotaccent -92 +KPX Tcommaaccent egrave -52 +KPX Tcommaaccent emacron -52 +KPX Tcommaaccent eogonek -92 +KPX Tcommaaccent hyphen -92 +KPX Tcommaaccent i -18 +KPX Tcommaaccent iacute -18 +KPX Tcommaaccent iogonek -18 +KPX Tcommaaccent o -92 +KPX Tcommaaccent oacute -92 +KPX Tcommaaccent ocircumflex -92 +KPX Tcommaaccent odieresis -92 +KPX Tcommaaccent ograve -92 +KPX Tcommaaccent ohungarumlaut -92 +KPX Tcommaaccent omacron -92 +KPX Tcommaaccent oslash -92 +KPX Tcommaaccent otilde -92 +KPX Tcommaaccent period -90 +KPX Tcommaaccent r -74 +KPX Tcommaaccent racute -74 +KPX Tcommaaccent rcaron -74 +KPX Tcommaaccent rcommaaccent -74 +KPX Tcommaaccent semicolon -74 +KPX Tcommaaccent u -92 +KPX Tcommaaccent uacute -92 +KPX Tcommaaccent ucircumflex -92 +KPX Tcommaaccent udieresis -92 +KPX Tcommaaccent ugrave -92 +KPX Tcommaaccent uhungarumlaut -92 +KPX Tcommaaccent umacron -92 +KPX Tcommaaccent uogonek -92 +KPX Tcommaaccent uring -92 +KPX Tcommaaccent w -74 +KPX Tcommaaccent y -34 +KPX Tcommaaccent yacute -34 +KPX Tcommaaccent ydieresis -34 +KPX U A -60 +KPX U Aacute -60 +KPX U Abreve -60 +KPX U Acircumflex -60 +KPX U Adieresis -60 +KPX U Agrave -60 +KPX U Amacron -60 +KPX U Aogonek -60 +KPX U Aring -60 +KPX U Atilde -60 +KPX U comma -50 +KPX U period -50 +KPX Uacute A -60 +KPX Uacute Aacute -60 +KPX Uacute Abreve -60 +KPX Uacute Acircumflex -60 +KPX Uacute Adieresis -60 +KPX Uacute Agrave -60 +KPX Uacute Amacron -60 +KPX Uacute Aogonek -60 +KPX Uacute Aring -60 +KPX Uacute Atilde -60 +KPX Uacute comma -50 +KPX Uacute period -50 +KPX Ucircumflex A -60 +KPX Ucircumflex Aacute -60 +KPX Ucircumflex Abreve -60 +KPX Ucircumflex Acircumflex -60 +KPX Ucircumflex Adieresis -60 +KPX Ucircumflex Agrave -60 +KPX Ucircumflex Amacron -60 +KPX Ucircumflex Aogonek -60 +KPX Ucircumflex Aring -60 +KPX Ucircumflex Atilde -60 +KPX Ucircumflex comma -50 +KPX Ucircumflex period -50 +KPX Udieresis A -60 +KPX Udieresis Aacute -60 +KPX Udieresis Abreve -60 +KPX Udieresis Acircumflex -60 +KPX Udieresis Adieresis -60 +KPX Udieresis Agrave -60 +KPX Udieresis Amacron -60 +KPX Udieresis Aogonek -60 +KPX Udieresis Aring -60 +KPX Udieresis Atilde -60 +KPX Udieresis comma -50 +KPX Udieresis period -50 +KPX Ugrave A -60 +KPX Ugrave Aacute -60 +KPX Ugrave Abreve -60 +KPX Ugrave Acircumflex -60 +KPX Ugrave Adieresis -60 +KPX Ugrave Agrave -60 +KPX Ugrave Amacron -60 +KPX Ugrave Aogonek -60 +KPX Ugrave Aring -60 +KPX Ugrave Atilde -60 +KPX Ugrave comma -50 +KPX Ugrave period -50 +KPX Uhungarumlaut A -60 +KPX Uhungarumlaut Aacute -60 +KPX Uhungarumlaut Abreve -60 +KPX Uhungarumlaut Acircumflex -60 +KPX Uhungarumlaut Adieresis -60 +KPX Uhungarumlaut Agrave -60 +KPX Uhungarumlaut Amacron -60 +KPX Uhungarumlaut Aogonek -60 +KPX Uhungarumlaut Aring -60 +KPX Uhungarumlaut Atilde -60 +KPX Uhungarumlaut comma -50 +KPX Uhungarumlaut period -50 +KPX Umacron A -60 +KPX Umacron Aacute -60 +KPX Umacron Abreve -60 +KPX Umacron Acircumflex -60 +KPX Umacron Adieresis -60 +KPX Umacron Agrave -60 +KPX Umacron Amacron -60 +KPX Umacron Aogonek -60 +KPX Umacron Aring -60 +KPX Umacron Atilde -60 +KPX Umacron comma -50 +KPX Umacron period -50 +KPX Uogonek A -60 +KPX Uogonek Aacute -60 +KPX Uogonek Abreve -60 +KPX Uogonek Acircumflex -60 +KPX Uogonek Adieresis -60 +KPX Uogonek Agrave -60 +KPX Uogonek Amacron -60 +KPX Uogonek Aogonek -60 +KPX Uogonek Aring -60 +KPX Uogonek Atilde -60 +KPX Uogonek comma -50 +KPX Uogonek period -50 +KPX Uring A -60 +KPX Uring Aacute -60 +KPX Uring Abreve -60 +KPX Uring Acircumflex -60 +KPX Uring Adieresis -60 +KPX Uring Agrave -60 +KPX Uring Amacron -60 +KPX Uring Aogonek -60 +KPX Uring Aring -60 +KPX Uring Atilde -60 +KPX Uring comma -50 +KPX Uring period -50 +KPX V A -135 +KPX V Aacute -135 +KPX V Abreve -135 +KPX V Acircumflex -135 +KPX V Adieresis -135 +KPX V Agrave -135 +KPX V Amacron -135 +KPX V Aogonek -135 +KPX V Aring -135 +KPX V Atilde -135 +KPX V G -30 +KPX V Gbreve -30 +KPX V Gcommaaccent -30 +KPX V O -45 +KPX V Oacute -45 +KPX V Ocircumflex -45 +KPX V Odieresis -45 +KPX V Ograve -45 +KPX V Ohungarumlaut -45 +KPX V Omacron -45 +KPX V Oslash -45 +KPX V Otilde -45 +KPX V a -92 +KPX V aacute -92 +KPX V abreve -92 +KPX V acircumflex -92 +KPX V adieresis -92 +KPX V agrave -92 +KPX V amacron -92 +KPX V aogonek -92 +KPX V aring -92 +KPX V atilde -92 +KPX V colon -92 +KPX V comma -129 +KPX V e -100 +KPX V eacute -100 +KPX V ecaron -100 +KPX V ecircumflex -100 +KPX V edieresis -100 +KPX V edotaccent -100 +KPX V egrave -100 +KPX V emacron -100 +KPX V eogonek -100 +KPX V hyphen -74 +KPX V i -37 +KPX V iacute -37 +KPX V icircumflex -37 +KPX V idieresis -37 +KPX V igrave -37 +KPX V imacron -37 +KPX V iogonek -37 +KPX V o -100 +KPX V oacute -100 +KPX V ocircumflex -100 +KPX V odieresis -100 +KPX V ograve -100 +KPX V ohungarumlaut -100 +KPX V omacron -100 +KPX V oslash -100 +KPX V otilde -100 +KPX V period -145 +KPX V semicolon -92 +KPX V u -92 +KPX V uacute -92 +KPX V ucircumflex -92 +KPX V udieresis -92 +KPX V ugrave -92 +KPX V uhungarumlaut -92 +KPX V umacron -92 +KPX V uogonek -92 +KPX V uring -92 +KPX W A -120 +KPX W Aacute -120 +KPX W Abreve -120 +KPX W Acircumflex -120 +KPX W Adieresis -120 +KPX W Agrave -120 +KPX W Amacron -120 +KPX W Aogonek -120 +KPX W Aring -120 +KPX W Atilde -120 +KPX W O -10 +KPX W Oacute -10 +KPX W Ocircumflex -10 +KPX W Odieresis -10 +KPX W Ograve -10 +KPX W Ohungarumlaut -10 +KPX W Omacron -10 +KPX W Oslash -10 +KPX W Otilde -10 +KPX W a -65 +KPX W aacute -65 +KPX W abreve -65 +KPX W acircumflex -65 +KPX W adieresis -65 +KPX W agrave -65 +KPX W amacron -65 +KPX W aogonek -65 +KPX W aring -65 +KPX W atilde -65 +KPX W colon -55 +KPX W comma -92 +KPX W e -65 +KPX W eacute -65 +KPX W ecaron -65 +KPX W ecircumflex -65 +KPX W edieresis -65 +KPX W edotaccent -65 +KPX W egrave -65 +KPX W emacron -65 +KPX W eogonek -65 +KPX W hyphen -37 +KPX W i -18 +KPX W iacute -18 +KPX W iogonek -18 +KPX W o -75 +KPX W oacute -75 +KPX W ocircumflex -75 +KPX W odieresis -75 +KPX W ograve -75 +KPX W ohungarumlaut -75 +KPX W omacron -75 +KPX W oslash -75 +KPX W otilde -75 +KPX W period -92 +KPX W semicolon -55 +KPX W u -50 +KPX W uacute -50 +KPX W ucircumflex -50 +KPX W udieresis -50 +KPX W ugrave -50 +KPX W uhungarumlaut -50 +KPX W umacron -50 +KPX W uogonek -50 +KPX W uring -50 +KPX W y -60 +KPX W yacute -60 +KPX W ydieresis -60 +KPX Y A -110 +KPX Y Aacute -110 +KPX Y Abreve -110 +KPX Y Acircumflex -110 +KPX Y Adieresis -110 +KPX Y Agrave -110 +KPX Y Amacron -110 +KPX Y Aogonek -110 +KPX Y Aring -110 +KPX Y Atilde -110 +KPX Y O -35 +KPX Y Oacute -35 +KPX Y Ocircumflex -35 +KPX Y Odieresis -35 +KPX Y Ograve -35 +KPX Y Ohungarumlaut -35 +KPX Y Omacron -35 +KPX Y Oslash -35 +KPX Y Otilde -35 +KPX Y a -85 +KPX Y aacute -85 +KPX Y abreve -85 +KPX Y acircumflex -85 +KPX Y adieresis -85 +KPX Y agrave -85 +KPX Y amacron -85 +KPX Y aogonek -85 +KPX Y aring -85 +KPX Y atilde -85 +KPX Y colon -92 +KPX Y comma -92 +KPX Y e -111 +KPX Y eacute -111 +KPX Y ecaron -111 +KPX Y ecircumflex -111 +KPX Y edieresis -71 +KPX Y edotaccent -111 +KPX Y egrave -71 +KPX Y emacron -71 +KPX Y eogonek -111 +KPX Y hyphen -92 +KPX Y i -37 +KPX Y iacute -37 +KPX Y iogonek -37 +KPX Y o -111 +KPX Y oacute -111 +KPX Y ocircumflex -111 +KPX Y odieresis -111 +KPX Y ograve -111 +KPX Y ohungarumlaut -111 +KPX Y omacron -111 +KPX Y oslash -111 +KPX Y otilde -111 +KPX Y period -92 +KPX Y semicolon -92 +KPX Y u -92 +KPX Y uacute -92 +KPX Y ucircumflex -92 +KPX Y udieresis -92 +KPX Y ugrave -92 +KPX Y uhungarumlaut -92 +KPX Y umacron -92 +KPX Y uogonek -92 +KPX Y uring -92 +KPX Yacute A -110 +KPX Yacute Aacute -110 +KPX Yacute Abreve -110 +KPX Yacute Acircumflex -110 +KPX Yacute Adieresis -110 +KPX Yacute Agrave -110 +KPX Yacute Amacron -110 +KPX Yacute Aogonek -110 +KPX Yacute Aring -110 +KPX Yacute Atilde -110 +KPX Yacute O -35 +KPX Yacute Oacute -35 +KPX Yacute Ocircumflex -35 +KPX Yacute Odieresis -35 +KPX Yacute Ograve -35 +KPX Yacute Ohungarumlaut -35 +KPX Yacute Omacron -35 +KPX Yacute Oslash -35 +KPX Yacute Otilde -35 +KPX Yacute a -85 +KPX Yacute aacute -85 +KPX Yacute abreve -85 +KPX Yacute acircumflex -85 +KPX Yacute adieresis -85 +KPX Yacute agrave -85 +KPX Yacute amacron -85 +KPX Yacute aogonek -85 +KPX Yacute aring -85 +KPX Yacute atilde -85 +KPX Yacute colon -92 +KPX Yacute comma -92 +KPX Yacute e -111 +KPX Yacute eacute -111 +KPX Yacute ecaron -111 +KPX Yacute ecircumflex -111 +KPX Yacute edieresis -71 +KPX Yacute edotaccent -111 +KPX Yacute egrave -71 +KPX Yacute emacron -71 +KPX Yacute eogonek -111 +KPX Yacute hyphen -92 +KPX Yacute i -37 +KPX Yacute iacute -37 +KPX Yacute iogonek -37 +KPX Yacute o -111 +KPX Yacute oacute -111 +KPX Yacute ocircumflex -111 +KPX Yacute odieresis -111 +KPX Yacute ograve -111 +KPX Yacute ohungarumlaut -111 +KPX Yacute omacron -111 +KPX Yacute oslash -111 +KPX Yacute otilde -111 +KPX Yacute period -92 +KPX Yacute semicolon -92 +KPX Yacute u -92 +KPX Yacute uacute -92 +KPX Yacute ucircumflex -92 +KPX Yacute udieresis -92 +KPX Yacute ugrave -92 +KPX Yacute uhungarumlaut -92 +KPX Yacute umacron -92 +KPX Yacute uogonek -92 +KPX Yacute uring -92 +KPX Ydieresis A -110 +KPX Ydieresis Aacute -110 +KPX Ydieresis Abreve -110 +KPX Ydieresis Acircumflex -110 +KPX Ydieresis Adieresis -110 +KPX Ydieresis Agrave -110 +KPX Ydieresis Amacron -110 +KPX Ydieresis Aogonek -110 +KPX Ydieresis Aring -110 +KPX Ydieresis Atilde -110 +KPX Ydieresis O -35 +KPX Ydieresis Oacute -35 +KPX Ydieresis Ocircumflex -35 +KPX Ydieresis Odieresis -35 +KPX Ydieresis Ograve -35 +KPX Ydieresis Ohungarumlaut -35 +KPX Ydieresis Omacron -35 +KPX Ydieresis Oslash -35 +KPX Ydieresis Otilde -35 +KPX Ydieresis a -85 +KPX Ydieresis aacute -85 +KPX Ydieresis abreve -85 +KPX Ydieresis acircumflex -85 +KPX Ydieresis adieresis -85 +KPX Ydieresis agrave -85 +KPX Ydieresis amacron -85 +KPX Ydieresis aogonek -85 +KPX Ydieresis aring -85 +KPX Ydieresis atilde -85 +KPX Ydieresis colon -92 +KPX Ydieresis comma -92 +KPX Ydieresis e -111 +KPX Ydieresis eacute -111 +KPX Ydieresis ecaron -111 +KPX Ydieresis ecircumflex -111 +KPX Ydieresis edieresis -71 +KPX Ydieresis edotaccent -111 +KPX Ydieresis egrave -71 +KPX Ydieresis emacron -71 +KPX Ydieresis eogonek -111 +KPX Ydieresis hyphen -92 +KPX Ydieresis i -37 +KPX Ydieresis iacute -37 +KPX Ydieresis iogonek -37 +KPX Ydieresis o -111 +KPX Ydieresis oacute -111 +KPX Ydieresis ocircumflex -111 +KPX Ydieresis odieresis -111 +KPX Ydieresis ograve -111 +KPX Ydieresis ohungarumlaut -111 +KPX Ydieresis omacron -111 +KPX Ydieresis oslash -111 +KPX Ydieresis otilde -111 +KPX Ydieresis period -92 +KPX Ydieresis semicolon -92 +KPX Ydieresis u -92 +KPX Ydieresis uacute -92 +KPX Ydieresis ucircumflex -92 +KPX Ydieresis udieresis -92 +KPX Ydieresis ugrave -92 +KPX Ydieresis uhungarumlaut -92 +KPX Ydieresis umacron -92 +KPX Ydieresis uogonek -92 +KPX Ydieresis uring -92 +KPX a v -25 +KPX aacute v -25 +KPX abreve v -25 +KPX acircumflex v -25 +KPX adieresis v -25 +KPX agrave v -25 +KPX amacron v -25 +KPX aogonek v -25 +KPX aring v -25 +KPX atilde v -25 +KPX b b -10 +KPX b period -40 +KPX b u -20 +KPX b uacute -20 +KPX b ucircumflex -20 +KPX b udieresis -20 +KPX b ugrave -20 +KPX b uhungarumlaut -20 +KPX b umacron -20 +KPX b uogonek -20 +KPX b uring -20 +KPX b v -15 +KPX comma quotedblright -45 +KPX comma quoteright -55 +KPX d w -15 +KPX dcroat w -15 +KPX e v -15 +KPX eacute v -15 +KPX ecaron v -15 +KPX ecircumflex v -15 +KPX edieresis v -15 +KPX edotaccent v -15 +KPX egrave v -15 +KPX emacron v -15 +KPX eogonek v -15 +KPX f comma -15 +KPX f dotlessi -35 +KPX f i -25 +KPX f o -25 +KPX f oacute -25 +KPX f ocircumflex -25 +KPX f odieresis -25 +KPX f ograve -25 +KPX f ohungarumlaut -25 +KPX f omacron -25 +KPX f oslash -25 +KPX f otilde -25 +KPX f period -15 +KPX f quotedblright 50 +KPX f quoteright 55 +KPX g period -15 +KPX gbreve period -15 +KPX gcommaaccent period -15 +KPX h y -15 +KPX h yacute -15 +KPX h ydieresis -15 +KPX i v -10 +KPX iacute v -10 +KPX icircumflex v -10 +KPX idieresis v -10 +KPX igrave v -10 +KPX imacron v -10 +KPX iogonek v -10 +KPX k e -10 +KPX k eacute -10 +KPX k ecaron -10 +KPX k ecircumflex -10 +KPX k edieresis -10 +KPX k edotaccent -10 +KPX k egrave -10 +KPX k emacron -10 +KPX k eogonek -10 +KPX k o -15 +KPX k oacute -15 +KPX k ocircumflex -15 +KPX k odieresis -15 +KPX k ograve -15 +KPX k ohungarumlaut -15 +KPX k omacron -15 +KPX k oslash -15 +KPX k otilde -15 +KPX k y -15 +KPX k yacute -15 +KPX k ydieresis -15 +KPX kcommaaccent e -10 +KPX kcommaaccent eacute -10 +KPX kcommaaccent ecaron -10 +KPX kcommaaccent ecircumflex -10 +KPX kcommaaccent edieresis -10 +KPX kcommaaccent edotaccent -10 +KPX kcommaaccent egrave -10 +KPX kcommaaccent emacron -10 +KPX kcommaaccent eogonek -10 +KPX kcommaaccent o -15 +KPX kcommaaccent oacute -15 +KPX kcommaaccent ocircumflex -15 +KPX kcommaaccent odieresis -15 +KPX kcommaaccent ograve -15 +KPX kcommaaccent ohungarumlaut -15 +KPX kcommaaccent omacron -15 +KPX kcommaaccent oslash -15 +KPX kcommaaccent otilde -15 +KPX kcommaaccent y -15 +KPX kcommaaccent yacute -15 +KPX kcommaaccent ydieresis -15 +KPX n v -40 +KPX nacute v -40 +KPX ncaron v -40 +KPX ncommaaccent v -40 +KPX ntilde v -40 +KPX o v -10 +KPX o w -10 +KPX oacute v -10 +KPX oacute w -10 +KPX ocircumflex v -10 +KPX ocircumflex w -10 +KPX odieresis v -10 +KPX odieresis w -10 +KPX ograve v -10 +KPX ograve w -10 +KPX ohungarumlaut v -10 +KPX ohungarumlaut w -10 +KPX omacron v -10 +KPX omacron w -10 +KPX oslash v -10 +KPX oslash w -10 +KPX otilde v -10 +KPX otilde w -10 +KPX period quotedblright -55 +KPX period quoteright -55 +KPX quotedblleft A -10 +KPX quotedblleft Aacute -10 +KPX quotedblleft Abreve -10 +KPX quotedblleft Acircumflex -10 +KPX quotedblleft Adieresis -10 +KPX quotedblleft Agrave -10 +KPX quotedblleft Amacron -10 +KPX quotedblleft Aogonek -10 +KPX quotedblleft Aring -10 +KPX quotedblleft Atilde -10 +KPX quoteleft A -10 +KPX quoteleft Aacute -10 +KPX quoteleft Abreve -10 +KPX quoteleft Acircumflex -10 +KPX quoteleft Adieresis -10 +KPX quoteleft Agrave -10 +KPX quoteleft Amacron -10 +KPX quoteleft Aogonek -10 +KPX quoteleft Aring -10 +KPX quoteleft Atilde -10 +KPX quoteleft quoteleft -63 +KPX quoteright d -20 +KPX quoteright dcroat -20 +KPX quoteright quoteright -63 +KPX quoteright r -20 +KPX quoteright racute -20 +KPX quoteright rcaron -20 +KPX quoteright rcommaaccent -20 +KPX quoteright s -37 +KPX quoteright sacute -37 +KPX quoteright scaron -37 +KPX quoteright scedilla -37 +KPX quoteright scommaaccent -37 +KPX quoteright space -74 +KPX quoteright v -20 +KPX r c -18 +KPX r cacute -18 +KPX r ccaron -18 +KPX r ccedilla -18 +KPX r comma -92 +KPX r e -18 +KPX r eacute -18 +KPX r ecaron -18 +KPX r ecircumflex -18 +KPX r edieresis -18 +KPX r edotaccent -18 +KPX r egrave -18 +KPX r emacron -18 +KPX r eogonek -18 +KPX r g -10 +KPX r gbreve -10 +KPX r gcommaaccent -10 +KPX r hyphen -37 +KPX r n -15 +KPX r nacute -15 +KPX r ncaron -15 +KPX r ncommaaccent -15 +KPX r ntilde -15 +KPX r o -18 +KPX r oacute -18 +KPX r ocircumflex -18 +KPX r odieresis -18 +KPX r ograve -18 +KPX r ohungarumlaut -18 +KPX r omacron -18 +KPX r oslash -18 +KPX r otilde -18 +KPX r p -10 +KPX r period -100 +KPX r q -18 +KPX r v -10 +KPX racute c -18 +KPX racute cacute -18 +KPX racute ccaron -18 +KPX racute ccedilla -18 +KPX racute comma -92 +KPX racute e -18 +KPX racute eacute -18 +KPX racute ecaron -18 +KPX racute ecircumflex -18 +KPX racute edieresis -18 +KPX racute edotaccent -18 +KPX racute egrave -18 +KPX racute emacron -18 +KPX racute eogonek -18 +KPX racute g -10 +KPX racute gbreve -10 +KPX racute gcommaaccent -10 +KPX racute hyphen -37 +KPX racute n -15 +KPX racute nacute -15 +KPX racute ncaron -15 +KPX racute ncommaaccent -15 +KPX racute ntilde -15 +KPX racute o -18 +KPX racute oacute -18 +KPX racute ocircumflex -18 +KPX racute odieresis -18 +KPX racute ograve -18 +KPX racute ohungarumlaut -18 +KPX racute omacron -18 +KPX racute oslash -18 +KPX racute otilde -18 +KPX racute p -10 +KPX racute period -100 +KPX racute q -18 +KPX racute v -10 +KPX rcaron c -18 +KPX rcaron cacute -18 +KPX rcaron ccaron -18 +KPX rcaron ccedilla -18 +KPX rcaron comma -92 +KPX rcaron e -18 +KPX rcaron eacute -18 +KPX rcaron ecaron -18 +KPX rcaron ecircumflex -18 +KPX rcaron edieresis -18 +KPX rcaron edotaccent -18 +KPX rcaron egrave -18 +KPX rcaron emacron -18 +KPX rcaron eogonek -18 +KPX rcaron g -10 +KPX rcaron gbreve -10 +KPX rcaron gcommaaccent -10 +KPX rcaron hyphen -37 +KPX rcaron n -15 +KPX rcaron nacute -15 +KPX rcaron ncaron -15 +KPX rcaron ncommaaccent -15 +KPX rcaron ntilde -15 +KPX rcaron o -18 +KPX rcaron oacute -18 +KPX rcaron ocircumflex -18 +KPX rcaron odieresis -18 +KPX rcaron ograve -18 +KPX rcaron ohungarumlaut -18 +KPX rcaron omacron -18 +KPX rcaron oslash -18 +KPX rcaron otilde -18 +KPX rcaron p -10 +KPX rcaron period -100 +KPX rcaron q -18 +KPX rcaron v -10 +KPX rcommaaccent c -18 +KPX rcommaaccent cacute -18 +KPX rcommaaccent ccaron -18 +KPX rcommaaccent ccedilla -18 +KPX rcommaaccent comma -92 +KPX rcommaaccent e -18 +KPX rcommaaccent eacute -18 +KPX rcommaaccent ecaron -18 +KPX rcommaaccent ecircumflex -18 +KPX rcommaaccent edieresis -18 +KPX rcommaaccent edotaccent -18 +KPX rcommaaccent egrave -18 +KPX rcommaaccent emacron -18 +KPX rcommaaccent eogonek -18 +KPX rcommaaccent g -10 +KPX rcommaaccent gbreve -10 +KPX rcommaaccent gcommaaccent -10 +KPX rcommaaccent hyphen -37 +KPX rcommaaccent n -15 +KPX rcommaaccent nacute -15 +KPX rcommaaccent ncaron -15 +KPX rcommaaccent ncommaaccent -15 +KPX rcommaaccent ntilde -15 +KPX rcommaaccent o -18 +KPX rcommaaccent oacute -18 +KPX rcommaaccent ocircumflex -18 +KPX rcommaaccent odieresis -18 +KPX rcommaaccent ograve -18 +KPX rcommaaccent ohungarumlaut -18 +KPX rcommaaccent omacron -18 +KPX rcommaaccent oslash -18 +KPX rcommaaccent otilde -18 +KPX rcommaaccent p -10 +KPX rcommaaccent period -100 +KPX rcommaaccent q -18 +KPX rcommaaccent v -10 +KPX space A -55 +KPX space Aacute -55 +KPX space Abreve -55 +KPX space Acircumflex -55 +KPX space Adieresis -55 +KPX space Agrave -55 +KPX space Amacron -55 +KPX space Aogonek -55 +KPX space Aring -55 +KPX space Atilde -55 +KPX space T -30 +KPX space Tcaron -30 +KPX space Tcommaaccent -30 +KPX space V -45 +KPX space W -30 +KPX space Y -55 +KPX space Yacute -55 +KPX space Ydieresis -55 +KPX v a -10 +KPX v aacute -10 +KPX v abreve -10 +KPX v acircumflex -10 +KPX v adieresis -10 +KPX v agrave -10 +KPX v amacron -10 +KPX v aogonek -10 +KPX v aring -10 +KPX v atilde -10 +KPX v comma -55 +KPX v e -10 +KPX v eacute -10 +KPX v ecaron -10 +KPX v ecircumflex -10 +KPX v edieresis -10 +KPX v edotaccent -10 +KPX v egrave -10 +KPX v emacron -10 +KPX v eogonek -10 +KPX v o -10 +KPX v oacute -10 +KPX v ocircumflex -10 +KPX v odieresis -10 +KPX v ograve -10 +KPX v ohungarumlaut -10 +KPX v omacron -10 +KPX v oslash -10 +KPX v otilde -10 +KPX v period -70 +KPX w comma -55 +KPX w o -10 +KPX w oacute -10 +KPX w ocircumflex -10 +KPX w odieresis -10 +KPX w ograve -10 +KPX w ohungarumlaut -10 +KPX w omacron -10 +KPX w oslash -10 +KPX w otilde -10 +KPX w period -70 +KPX y comma -55 +KPX y e -10 +KPX y eacute -10 +KPX y ecaron -10 +KPX y ecircumflex -10 +KPX y edieresis -10 +KPX y edotaccent -10 +KPX y egrave -10 +KPX y emacron -10 +KPX y eogonek -10 +KPX y o -25 +KPX y oacute -25 +KPX y ocircumflex -25 +KPX y odieresis -25 +KPX y ograve -25 +KPX y ohungarumlaut -25 +KPX y omacron -25 +KPX y oslash -25 +KPX y otilde -25 +KPX y period -70 +KPX yacute comma -55 +KPX yacute e -10 +KPX yacute eacute -10 +KPX yacute ecaron -10 +KPX yacute ecircumflex -10 +KPX yacute edieresis -10 +KPX yacute edotaccent -10 +KPX yacute egrave -10 +KPX yacute emacron -10 +KPX yacute eogonek -10 +KPX yacute o -25 +KPX yacute oacute -25 +KPX yacute ocircumflex -25 +KPX yacute odieresis -25 +KPX yacute ograve -25 +KPX yacute ohungarumlaut -25 +KPX yacute omacron -25 +KPX yacute oslash -25 +KPX yacute otilde -25 +KPX yacute period -70 +KPX ydieresis comma -55 +KPX ydieresis e -10 +KPX ydieresis eacute -10 +KPX ydieresis ecaron -10 +KPX ydieresis ecircumflex -10 +KPX ydieresis edieresis -10 +KPX ydieresis edotaccent -10 +KPX ydieresis egrave -10 +KPX ydieresis emacron -10 +KPX ydieresis eogonek -10 +KPX ydieresis o -25 +KPX ydieresis oacute -25 +KPX ydieresis ocircumflex -25 +KPX ydieresis odieresis -25 +KPX ydieresis ograve -25 +KPX ydieresis ohungarumlaut -25 +KPX ydieresis omacron -25 +KPX ydieresis oslash -25 +KPX ydieresis otilde -25 +KPX ydieresis period -70 +EndKernPairs +EndKernData +EndFontMetrics diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/Times-BoldItalic.afm b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/Times-BoldItalic.afm new file mode 100755 index 00000000..2301dfd2 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/Times-BoldItalic.afm @@ -0,0 +1,2384 @@ +StartFontMetrics 4.1 +Comment Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved. +Comment Creation Date: Thu May 1 13:04:06 1997 +Comment UniqueID 43066 +Comment VMusage 45874 56899 +FontName Times-BoldItalic +FullName Times Bold Italic +FamilyName Times +Weight Bold +ItalicAngle -15 +IsFixedPitch false +CharacterSet ExtendedRoman +FontBBox -200 -218 996 921 +UnderlinePosition -100 +UnderlineThickness 50 +Version 002.000 +Notice Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.Times is a trademark of Linotype-Hell AG and/or its subsidiaries. +EncodingScheme AdobeStandardEncoding +CapHeight 669 +XHeight 462 +Ascender 683 +Descender -217 +StdHW 42 +StdVW 121 +StartCharMetrics 315 +C 32 ; WX 250 ; N space ; B 0 0 0 0 ; +C 33 ; WX 389 ; N exclam ; B 67 -13 370 684 ; +C 34 ; WX 555 ; N quotedbl ; B 136 398 536 685 ; +C 35 ; WX 500 ; N numbersign ; B -33 0 533 700 ; +C 36 ; WX 500 ; N dollar ; B -20 -100 497 733 ; +C 37 ; WX 833 ; N percent ; B 39 -10 793 692 ; +C 38 ; WX 778 ; N ampersand ; B 5 -19 699 682 ; +C 39 ; WX 333 ; N quoteright ; B 98 369 302 685 ; +C 40 ; WX 333 ; N parenleft ; B 28 -179 344 685 ; +C 41 ; WX 333 ; N parenright ; B -44 -179 271 685 ; +C 42 ; WX 500 ; N asterisk ; B 65 249 456 685 ; +C 43 ; WX 570 ; N plus ; B 33 0 537 506 ; +C 44 ; WX 250 ; N comma ; B -60 -182 144 134 ; +C 45 ; WX 333 ; N hyphen ; B 2 166 271 282 ; +C 46 ; WX 250 ; N period ; B -9 -13 139 135 ; +C 47 ; WX 278 ; N slash ; B -64 -18 342 685 ; +C 48 ; WX 500 ; N zero ; B 17 -14 477 683 ; +C 49 ; WX 500 ; N one ; B 5 0 419 683 ; +C 50 ; WX 500 ; N two ; B -27 0 446 683 ; +C 51 ; WX 500 ; N three ; B -15 -13 450 683 ; +C 52 ; WX 500 ; N four ; B -15 0 503 683 ; +C 53 ; WX 500 ; N five ; B -11 -13 487 669 ; +C 54 ; WX 500 ; N six ; B 23 -15 509 679 ; +C 55 ; WX 500 ; N seven ; B 52 0 525 669 ; +C 56 ; WX 500 ; N eight ; B 3 -13 476 683 ; +C 57 ; WX 500 ; N nine ; B -12 -10 475 683 ; +C 58 ; WX 333 ; N colon ; B 23 -13 264 459 ; +C 59 ; WX 333 ; N semicolon ; B -25 -183 264 459 ; +C 60 ; WX 570 ; N less ; B 31 -8 539 514 ; +C 61 ; WX 570 ; N equal ; B 33 107 537 399 ; +C 62 ; WX 570 ; N greater ; B 31 -8 539 514 ; +C 63 ; WX 500 ; N question ; B 79 -13 470 684 ; +C 64 ; WX 832 ; N at ; B 63 -18 770 685 ; +C 65 ; WX 667 ; N A ; B -67 0 593 683 ; +C 66 ; WX 667 ; N B ; B -24 0 624 669 ; +C 67 ; WX 667 ; N C ; B 32 -18 677 685 ; +C 68 ; WX 722 ; N D ; B -46 0 685 669 ; +C 69 ; WX 667 ; N E ; B -27 0 653 669 ; +C 70 ; WX 667 ; N F ; B -13 0 660 669 ; +C 71 ; WX 722 ; N G ; B 21 -18 706 685 ; +C 72 ; WX 778 ; N H ; B -24 0 799 669 ; +C 73 ; WX 389 ; N I ; B -32 0 406 669 ; +C 74 ; WX 500 ; N J ; B -46 -99 524 669 ; +C 75 ; WX 667 ; N K ; B -21 0 702 669 ; +C 76 ; WX 611 ; N L ; B -22 0 590 669 ; +C 77 ; WX 889 ; N M ; B -29 -12 917 669 ; +C 78 ; WX 722 ; N N ; B -27 -15 748 669 ; +C 79 ; WX 722 ; N O ; B 27 -18 691 685 ; +C 80 ; WX 611 ; N P ; B -27 0 613 669 ; +C 81 ; WX 722 ; N Q ; B 27 -208 691 685 ; +C 82 ; WX 667 ; N R ; B -29 0 623 669 ; +C 83 ; WX 556 ; N S ; B 2 -18 526 685 ; +C 84 ; WX 611 ; N T ; B 50 0 650 669 ; +C 85 ; WX 722 ; N U ; B 67 -18 744 669 ; +C 86 ; WX 667 ; N V ; B 65 -18 715 669 ; +C 87 ; WX 889 ; N W ; B 65 -18 940 669 ; +C 88 ; WX 667 ; N X ; B -24 0 694 669 ; +C 89 ; WX 611 ; N Y ; B 73 0 659 669 ; +C 90 ; WX 611 ; N Z ; B -11 0 590 669 ; +C 91 ; WX 333 ; N bracketleft ; B -37 -159 362 674 ; +C 92 ; WX 278 ; N backslash ; B -1 -18 279 685 ; +C 93 ; WX 333 ; N bracketright ; B -56 -157 343 674 ; +C 94 ; WX 570 ; N asciicircum ; B 67 304 503 669 ; +C 95 ; WX 500 ; N underscore ; B 0 -125 500 -75 ; +C 96 ; WX 333 ; N quoteleft ; B 128 369 332 685 ; +C 97 ; WX 500 ; N a ; B -21 -14 455 462 ; +C 98 ; WX 500 ; N b ; B -14 -13 444 699 ; +C 99 ; WX 444 ; N c ; B -5 -13 392 462 ; +C 100 ; WX 500 ; N d ; B -21 -13 517 699 ; +C 101 ; WX 444 ; N e ; B 5 -13 398 462 ; +C 102 ; WX 333 ; N f ; B -169 -205 446 698 ; L i fi ; L l fl ; +C 103 ; WX 500 ; N g ; B -52 -203 478 462 ; +C 104 ; WX 556 ; N h ; B -13 -9 498 699 ; +C 105 ; WX 278 ; N i ; B 2 -9 263 684 ; +C 106 ; WX 278 ; N j ; B -189 -207 279 684 ; +C 107 ; WX 500 ; N k ; B -23 -8 483 699 ; +C 108 ; WX 278 ; N l ; B 2 -9 290 699 ; +C 109 ; WX 778 ; N m ; B -14 -9 722 462 ; +C 110 ; WX 556 ; N n ; B -6 -9 493 462 ; +C 111 ; WX 500 ; N o ; B -3 -13 441 462 ; +C 112 ; WX 500 ; N p ; B -120 -205 446 462 ; +C 113 ; WX 500 ; N q ; B 1 -205 471 462 ; +C 114 ; WX 389 ; N r ; B -21 0 389 462 ; +C 115 ; WX 389 ; N s ; B -19 -13 333 462 ; +C 116 ; WX 278 ; N t ; B -11 -9 281 594 ; +C 117 ; WX 556 ; N u ; B 15 -9 492 462 ; +C 118 ; WX 444 ; N v ; B 16 -13 401 462 ; +C 119 ; WX 667 ; N w ; B 16 -13 614 462 ; +C 120 ; WX 500 ; N x ; B -46 -13 469 462 ; +C 121 ; WX 444 ; N y ; B -94 -205 392 462 ; +C 122 ; WX 389 ; N z ; B -43 -78 368 449 ; +C 123 ; WX 348 ; N braceleft ; B 5 -187 436 686 ; +C 124 ; WX 220 ; N bar ; B 66 -218 154 782 ; +C 125 ; WX 348 ; N braceright ; B -129 -187 302 686 ; +C 126 ; WX 570 ; N asciitilde ; B 54 173 516 333 ; +C 161 ; WX 389 ; N exclamdown ; B 19 -205 322 492 ; +C 162 ; WX 500 ; N cent ; B 42 -143 439 576 ; +C 163 ; WX 500 ; N sterling ; B -32 -12 510 683 ; +C 164 ; WX 167 ; N fraction ; B -169 -14 324 683 ; +C 165 ; WX 500 ; N yen ; B 33 0 628 669 ; +C 166 ; WX 500 ; N florin ; B -87 -156 537 707 ; +C 167 ; WX 500 ; N section ; B 36 -143 459 685 ; +C 168 ; WX 500 ; N currency ; B -26 34 526 586 ; +C 169 ; WX 278 ; N quotesingle ; B 128 398 268 685 ; +C 170 ; WX 500 ; N quotedblleft ; B 53 369 513 685 ; +C 171 ; WX 500 ; N guillemotleft ; B 12 32 468 415 ; +C 172 ; WX 333 ; N guilsinglleft ; B 32 32 303 415 ; +C 173 ; WX 333 ; N guilsinglright ; B 10 32 281 415 ; +C 174 ; WX 556 ; N fi ; B -188 -205 514 703 ; +C 175 ; WX 556 ; N fl ; B -186 -205 553 704 ; +C 177 ; WX 500 ; N endash ; B -40 178 477 269 ; +C 178 ; WX 500 ; N dagger ; B 91 -145 494 685 ; +C 179 ; WX 500 ; N daggerdbl ; B 10 -139 493 685 ; +C 180 ; WX 250 ; N periodcentered ; B 51 257 199 405 ; +C 182 ; WX 500 ; N paragraph ; B -57 -193 562 669 ; +C 183 ; WX 350 ; N bullet ; B 0 175 350 525 ; +C 184 ; WX 333 ; N quotesinglbase ; B -5 -182 199 134 ; +C 185 ; WX 500 ; N quotedblbase ; B -57 -182 403 134 ; +C 186 ; WX 500 ; N quotedblright ; B 53 369 513 685 ; +C 187 ; WX 500 ; N guillemotright ; B 12 32 468 415 ; +C 188 ; WX 1000 ; N ellipsis ; B 40 -13 852 135 ; +C 189 ; WX 1000 ; N perthousand ; B 7 -29 996 706 ; +C 191 ; WX 500 ; N questiondown ; B 30 -205 421 492 ; +C 193 ; WX 333 ; N grave ; B 85 516 297 697 ; +C 194 ; WX 333 ; N acute ; B 139 516 379 697 ; +C 195 ; WX 333 ; N circumflex ; B 40 516 367 690 ; +C 196 ; WX 333 ; N tilde ; B 48 536 407 655 ; +C 197 ; WX 333 ; N macron ; B 51 553 393 623 ; +C 198 ; WX 333 ; N breve ; B 71 516 387 678 ; +C 199 ; WX 333 ; N dotaccent ; B 163 550 298 684 ; +C 200 ; WX 333 ; N dieresis ; B 55 550 402 684 ; +C 202 ; WX 333 ; N ring ; B 127 516 340 729 ; +C 203 ; WX 333 ; N cedilla ; B -80 -218 156 5 ; +C 205 ; WX 333 ; N hungarumlaut ; B 69 516 498 697 ; +C 206 ; WX 333 ; N ogonek ; B 15 -183 244 34 ; +C 207 ; WX 333 ; N caron ; B 79 516 411 690 ; +C 208 ; WX 1000 ; N emdash ; B -40 178 977 269 ; +C 225 ; WX 944 ; N AE ; B -64 0 918 669 ; +C 227 ; WX 266 ; N ordfeminine ; B 16 399 330 685 ; +C 232 ; WX 611 ; N Lslash ; B -22 0 590 669 ; +C 233 ; WX 722 ; N Oslash ; B 27 -125 691 764 ; +C 234 ; WX 944 ; N OE ; B 23 -8 946 677 ; +C 235 ; WX 300 ; N ordmasculine ; B 56 400 347 685 ; +C 241 ; WX 722 ; N ae ; B -5 -13 673 462 ; +C 245 ; WX 278 ; N dotlessi ; B 2 -9 238 462 ; +C 248 ; WX 278 ; N lslash ; B -7 -9 307 699 ; +C 249 ; WX 500 ; N oslash ; B -3 -119 441 560 ; +C 250 ; WX 722 ; N oe ; B 6 -13 674 462 ; +C 251 ; WX 500 ; N germandbls ; B -200 -200 473 705 ; +C -1 ; WX 389 ; N Idieresis ; B -32 0 450 862 ; +C -1 ; WX 444 ; N eacute ; B 5 -13 435 697 ; +C -1 ; WX 500 ; N abreve ; B -21 -14 471 678 ; +C -1 ; WX 556 ; N uhungarumlaut ; B 15 -9 610 697 ; +C -1 ; WX 444 ; N ecaron ; B 5 -13 467 690 ; +C -1 ; WX 611 ; N Ydieresis ; B 73 0 659 862 ; +C -1 ; WX 570 ; N divide ; B 33 -29 537 535 ; +C -1 ; WX 611 ; N Yacute ; B 73 0 659 904 ; +C -1 ; WX 667 ; N Acircumflex ; B -67 0 593 897 ; +C -1 ; WX 500 ; N aacute ; B -21 -14 463 697 ; +C -1 ; WX 722 ; N Ucircumflex ; B 67 -18 744 897 ; +C -1 ; WX 444 ; N yacute ; B -94 -205 435 697 ; +C -1 ; WX 389 ; N scommaaccent ; B -19 -218 333 462 ; +C -1 ; WX 444 ; N ecircumflex ; B 5 -13 423 690 ; +C -1 ; WX 722 ; N Uring ; B 67 -18 744 921 ; +C -1 ; WX 722 ; N Udieresis ; B 67 -18 744 862 ; +C -1 ; WX 500 ; N aogonek ; B -21 -183 455 462 ; +C -1 ; WX 722 ; N Uacute ; B 67 -18 744 904 ; +C -1 ; WX 556 ; N uogonek ; B 15 -183 492 462 ; +C -1 ; WX 667 ; N Edieresis ; B -27 0 653 862 ; +C -1 ; WX 722 ; N Dcroat ; B -31 0 700 669 ; +C -1 ; WX 250 ; N commaaccent ; B -36 -218 131 -50 ; +C -1 ; WX 747 ; N copyright ; B 30 -18 718 685 ; +C -1 ; WX 667 ; N Emacron ; B -27 0 653 830 ; +C -1 ; WX 444 ; N ccaron ; B -5 -13 467 690 ; +C -1 ; WX 500 ; N aring ; B -21 -14 455 729 ; +C -1 ; WX 722 ; N Ncommaaccent ; B -27 -218 748 669 ; +C -1 ; WX 278 ; N lacute ; B 2 -9 392 904 ; +C -1 ; WX 500 ; N agrave ; B -21 -14 455 697 ; +C -1 ; WX 611 ; N Tcommaaccent ; B 50 -218 650 669 ; +C -1 ; WX 667 ; N Cacute ; B 32 -18 677 904 ; +C -1 ; WX 500 ; N atilde ; B -21 -14 491 655 ; +C -1 ; WX 667 ; N Edotaccent ; B -27 0 653 862 ; +C -1 ; WX 389 ; N scaron ; B -19 -13 424 690 ; +C -1 ; WX 389 ; N scedilla ; B -19 -218 333 462 ; +C -1 ; WX 278 ; N iacute ; B 2 -9 352 697 ; +C -1 ; WX 494 ; N lozenge ; B 10 0 484 745 ; +C -1 ; WX 667 ; N Rcaron ; B -29 0 623 897 ; +C -1 ; WX 722 ; N Gcommaaccent ; B 21 -218 706 685 ; +C -1 ; WX 556 ; N ucircumflex ; B 15 -9 492 690 ; +C -1 ; WX 500 ; N acircumflex ; B -21 -14 455 690 ; +C -1 ; WX 667 ; N Amacron ; B -67 0 593 830 ; +C -1 ; WX 389 ; N rcaron ; B -21 0 424 690 ; +C -1 ; WX 444 ; N ccedilla ; B -5 -218 392 462 ; +C -1 ; WX 611 ; N Zdotaccent ; B -11 0 590 862 ; +C -1 ; WX 611 ; N Thorn ; B -27 0 573 669 ; +C -1 ; WX 722 ; N Omacron ; B 27 -18 691 830 ; +C -1 ; WX 667 ; N Racute ; B -29 0 623 904 ; +C -1 ; WX 556 ; N Sacute ; B 2 -18 531 904 ; +C -1 ; WX 608 ; N dcaron ; B -21 -13 675 708 ; +C -1 ; WX 722 ; N Umacron ; B 67 -18 744 830 ; +C -1 ; WX 556 ; N uring ; B 15 -9 492 729 ; +C -1 ; WX 300 ; N threesuperior ; B 17 265 321 683 ; +C -1 ; WX 722 ; N Ograve ; B 27 -18 691 904 ; +C -1 ; WX 667 ; N Agrave ; B -67 0 593 904 ; +C -1 ; WX 667 ; N Abreve ; B -67 0 593 885 ; +C -1 ; WX 570 ; N multiply ; B 48 16 522 490 ; +C -1 ; WX 556 ; N uacute ; B 15 -9 492 697 ; +C -1 ; WX 611 ; N Tcaron ; B 50 0 650 897 ; +C -1 ; WX 494 ; N partialdiff ; B 11 -21 494 750 ; +C -1 ; WX 444 ; N ydieresis ; B -94 -205 443 655 ; +C -1 ; WX 722 ; N Nacute ; B -27 -15 748 904 ; +C -1 ; WX 278 ; N icircumflex ; B -3 -9 324 690 ; +C -1 ; WX 667 ; N Ecircumflex ; B -27 0 653 897 ; +C -1 ; WX 500 ; N adieresis ; B -21 -14 476 655 ; +C -1 ; WX 444 ; N edieresis ; B 5 -13 448 655 ; +C -1 ; WX 444 ; N cacute ; B -5 -13 435 697 ; +C -1 ; WX 556 ; N nacute ; B -6 -9 493 697 ; +C -1 ; WX 556 ; N umacron ; B 15 -9 492 623 ; +C -1 ; WX 722 ; N Ncaron ; B -27 -15 748 897 ; +C -1 ; WX 389 ; N Iacute ; B -32 0 432 904 ; +C -1 ; WX 570 ; N plusminus ; B 33 0 537 506 ; +C -1 ; WX 220 ; N brokenbar ; B 66 -143 154 707 ; +C -1 ; WX 747 ; N registered ; B 30 -18 718 685 ; +C -1 ; WX 722 ; N Gbreve ; B 21 -18 706 885 ; +C -1 ; WX 389 ; N Idotaccent ; B -32 0 406 862 ; +C -1 ; WX 600 ; N summation ; B 14 -10 585 706 ; +C -1 ; WX 667 ; N Egrave ; B -27 0 653 904 ; +C -1 ; WX 389 ; N racute ; B -21 0 407 697 ; +C -1 ; WX 500 ; N omacron ; B -3 -13 462 623 ; +C -1 ; WX 611 ; N Zacute ; B -11 0 590 904 ; +C -1 ; WX 611 ; N Zcaron ; B -11 0 590 897 ; +C -1 ; WX 549 ; N greaterequal ; B 26 0 523 704 ; +C -1 ; WX 722 ; N Eth ; B -31 0 700 669 ; +C -1 ; WX 667 ; N Ccedilla ; B 32 -218 677 685 ; +C -1 ; WX 278 ; N lcommaaccent ; B -42 -218 290 699 ; +C -1 ; WX 366 ; N tcaron ; B -11 -9 434 754 ; +C -1 ; WX 444 ; N eogonek ; B 5 -183 398 462 ; +C -1 ; WX 722 ; N Uogonek ; B 67 -183 744 669 ; +C -1 ; WX 667 ; N Aacute ; B -67 0 593 904 ; +C -1 ; WX 667 ; N Adieresis ; B -67 0 593 862 ; +C -1 ; WX 444 ; N egrave ; B 5 -13 398 697 ; +C -1 ; WX 389 ; N zacute ; B -43 -78 407 697 ; +C -1 ; WX 278 ; N iogonek ; B -20 -183 263 684 ; +C -1 ; WX 722 ; N Oacute ; B 27 -18 691 904 ; +C -1 ; WX 500 ; N oacute ; B -3 -13 463 697 ; +C -1 ; WX 500 ; N amacron ; B -21 -14 467 623 ; +C -1 ; WX 389 ; N sacute ; B -19 -13 407 697 ; +C -1 ; WX 278 ; N idieresis ; B 2 -9 364 655 ; +C -1 ; WX 722 ; N Ocircumflex ; B 27 -18 691 897 ; +C -1 ; WX 722 ; N Ugrave ; B 67 -18 744 904 ; +C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ; +C -1 ; WX 500 ; N thorn ; B -120 -205 446 699 ; +C -1 ; WX 300 ; N twosuperior ; B 2 274 313 683 ; +C -1 ; WX 722 ; N Odieresis ; B 27 -18 691 862 ; +C -1 ; WX 576 ; N mu ; B -60 -207 516 449 ; +C -1 ; WX 278 ; N igrave ; B 2 -9 259 697 ; +C -1 ; WX 500 ; N ohungarumlaut ; B -3 -13 582 697 ; +C -1 ; WX 667 ; N Eogonek ; B -27 -183 653 669 ; +C -1 ; WX 500 ; N dcroat ; B -21 -13 552 699 ; +C -1 ; WX 750 ; N threequarters ; B 7 -14 726 683 ; +C -1 ; WX 556 ; N Scedilla ; B 2 -218 526 685 ; +C -1 ; WX 382 ; N lcaron ; B 2 -9 448 708 ; +C -1 ; WX 667 ; N Kcommaaccent ; B -21 -218 702 669 ; +C -1 ; WX 611 ; N Lacute ; B -22 0 590 904 ; +C -1 ; WX 1000 ; N trademark ; B 32 263 968 669 ; +C -1 ; WX 444 ; N edotaccent ; B 5 -13 398 655 ; +C -1 ; WX 389 ; N Igrave ; B -32 0 406 904 ; +C -1 ; WX 389 ; N Imacron ; B -32 0 461 830 ; +C -1 ; WX 611 ; N Lcaron ; B -22 0 671 718 ; +C -1 ; WX 750 ; N onehalf ; B -9 -14 723 683 ; +C -1 ; WX 549 ; N lessequal ; B 29 0 526 704 ; +C -1 ; WX 500 ; N ocircumflex ; B -3 -13 451 690 ; +C -1 ; WX 556 ; N ntilde ; B -6 -9 504 655 ; +C -1 ; WX 722 ; N Uhungarumlaut ; B 67 -18 744 904 ; +C -1 ; WX 667 ; N Eacute ; B -27 0 653 904 ; +C -1 ; WX 444 ; N emacron ; B 5 -13 439 623 ; +C -1 ; WX 500 ; N gbreve ; B -52 -203 478 678 ; +C -1 ; WX 750 ; N onequarter ; B 7 -14 721 683 ; +C -1 ; WX 556 ; N Scaron ; B 2 -18 553 897 ; +C -1 ; WX 556 ; N Scommaaccent ; B 2 -218 526 685 ; +C -1 ; WX 722 ; N Ohungarumlaut ; B 27 -18 723 904 ; +C -1 ; WX 400 ; N degree ; B 83 397 369 683 ; +C -1 ; WX 500 ; N ograve ; B -3 -13 441 697 ; +C -1 ; WX 667 ; N Ccaron ; B 32 -18 677 897 ; +C -1 ; WX 556 ; N ugrave ; B 15 -9 492 697 ; +C -1 ; WX 549 ; N radical ; B 10 -46 512 850 ; +C -1 ; WX 722 ; N Dcaron ; B -46 0 685 897 ; +C -1 ; WX 389 ; N rcommaaccent ; B -67 -218 389 462 ; +C -1 ; WX 722 ; N Ntilde ; B -27 -15 748 862 ; +C -1 ; WX 500 ; N otilde ; B -3 -13 491 655 ; +C -1 ; WX 667 ; N Rcommaaccent ; B -29 -218 623 669 ; +C -1 ; WX 611 ; N Lcommaaccent ; B -22 -218 590 669 ; +C -1 ; WX 667 ; N Atilde ; B -67 0 593 862 ; +C -1 ; WX 667 ; N Aogonek ; B -67 -183 604 683 ; +C -1 ; WX 667 ; N Aring ; B -67 0 593 921 ; +C -1 ; WX 722 ; N Otilde ; B 27 -18 691 862 ; +C -1 ; WX 389 ; N zdotaccent ; B -43 -78 368 655 ; +C -1 ; WX 667 ; N Ecaron ; B -27 0 653 897 ; +C -1 ; WX 389 ; N Iogonek ; B -32 -183 406 669 ; +C -1 ; WX 500 ; N kcommaaccent ; B -23 -218 483 699 ; +C -1 ; WX 606 ; N minus ; B 51 209 555 297 ; +C -1 ; WX 389 ; N Icircumflex ; B -32 0 450 897 ; +C -1 ; WX 556 ; N ncaron ; B -6 -9 523 690 ; +C -1 ; WX 278 ; N tcommaaccent ; B -62 -218 281 594 ; +C -1 ; WX 606 ; N logicalnot ; B 51 108 555 399 ; +C -1 ; WX 500 ; N odieresis ; B -3 -13 471 655 ; +C -1 ; WX 556 ; N udieresis ; B 15 -9 499 655 ; +C -1 ; WX 549 ; N notequal ; B 15 -49 540 570 ; +C -1 ; WX 500 ; N gcommaaccent ; B -52 -203 478 767 ; +C -1 ; WX 500 ; N eth ; B -3 -13 454 699 ; +C -1 ; WX 389 ; N zcaron ; B -43 -78 424 690 ; +C -1 ; WX 556 ; N ncommaaccent ; B -6 -218 493 462 ; +C -1 ; WX 300 ; N onesuperior ; B 30 274 301 683 ; +C -1 ; WX 278 ; N imacron ; B 2 -9 294 623 ; +C -1 ; WX 500 ; N Euro ; B 0 0 0 0 ; +EndCharMetrics +StartKernData +StartKernPairs 2038 +KPX A C -65 +KPX A Cacute -65 +KPX A Ccaron -65 +KPX A Ccedilla -65 +KPX A G -60 +KPX A Gbreve -60 +KPX A Gcommaaccent -60 +KPX A O -50 +KPX A Oacute -50 +KPX A Ocircumflex -50 +KPX A Odieresis -50 +KPX A Ograve -50 +KPX A Ohungarumlaut -50 +KPX A Omacron -50 +KPX A Oslash -50 +KPX A Otilde -50 +KPX A Q -55 +KPX A T -55 +KPX A Tcaron -55 +KPX A Tcommaaccent -55 +KPX A U -50 +KPX A Uacute -50 +KPX A Ucircumflex -50 +KPX A Udieresis -50 +KPX A Ugrave -50 +KPX A Uhungarumlaut -50 +KPX A Umacron -50 +KPX A Uogonek -50 +KPX A Uring -50 +KPX A V -95 +KPX A W -100 +KPX A Y -70 +KPX A Yacute -70 +KPX A Ydieresis -70 +KPX A quoteright -74 +KPX A u -30 +KPX A uacute -30 +KPX A ucircumflex -30 +KPX A udieresis -30 +KPX A ugrave -30 +KPX A uhungarumlaut -30 +KPX A umacron -30 +KPX A uogonek -30 +KPX A uring -30 +KPX A v -74 +KPX A w -74 +KPX A y -74 +KPX A yacute -74 +KPX A ydieresis -74 +KPX Aacute C -65 +KPX Aacute Cacute -65 +KPX Aacute Ccaron -65 +KPX Aacute Ccedilla -65 +KPX Aacute G -60 +KPX Aacute Gbreve -60 +KPX Aacute Gcommaaccent -60 +KPX Aacute O -50 +KPX Aacute Oacute -50 +KPX Aacute Ocircumflex -50 +KPX Aacute Odieresis -50 +KPX Aacute Ograve -50 +KPX Aacute Ohungarumlaut -50 +KPX Aacute Omacron -50 +KPX Aacute Oslash -50 +KPX Aacute Otilde -50 +KPX Aacute Q -55 +KPX Aacute T -55 +KPX Aacute Tcaron -55 +KPX Aacute Tcommaaccent -55 +KPX Aacute U -50 +KPX Aacute Uacute -50 +KPX Aacute Ucircumflex -50 +KPX Aacute Udieresis -50 +KPX Aacute Ugrave -50 +KPX Aacute Uhungarumlaut -50 +KPX Aacute Umacron -50 +KPX Aacute Uogonek -50 +KPX Aacute Uring -50 +KPX Aacute V -95 +KPX Aacute W -100 +KPX Aacute Y -70 +KPX Aacute Yacute -70 +KPX Aacute Ydieresis -70 +KPX Aacute quoteright -74 +KPX Aacute u -30 +KPX Aacute uacute -30 +KPX Aacute ucircumflex -30 +KPX Aacute udieresis -30 +KPX Aacute ugrave -30 +KPX Aacute uhungarumlaut -30 +KPX Aacute umacron -30 +KPX Aacute uogonek -30 +KPX Aacute uring -30 +KPX Aacute v -74 +KPX Aacute w -74 +KPX Aacute y -74 +KPX Aacute yacute -74 +KPX Aacute ydieresis -74 +KPX Abreve C -65 +KPX Abreve Cacute -65 +KPX Abreve Ccaron -65 +KPX Abreve Ccedilla -65 +KPX Abreve G -60 +KPX Abreve Gbreve -60 +KPX Abreve Gcommaaccent -60 +KPX Abreve O -50 +KPX Abreve Oacute -50 +KPX Abreve Ocircumflex -50 +KPX Abreve Odieresis -50 +KPX Abreve Ograve -50 +KPX Abreve Ohungarumlaut -50 +KPX Abreve Omacron -50 +KPX Abreve Oslash -50 +KPX Abreve Otilde -50 +KPX Abreve Q -55 +KPX Abreve T -55 +KPX Abreve Tcaron -55 +KPX Abreve Tcommaaccent -55 +KPX Abreve U -50 +KPX Abreve Uacute -50 +KPX Abreve Ucircumflex -50 +KPX Abreve Udieresis -50 +KPX Abreve Ugrave -50 +KPX Abreve Uhungarumlaut -50 +KPX Abreve Umacron -50 +KPX Abreve Uogonek -50 +KPX Abreve Uring -50 +KPX Abreve V -95 +KPX Abreve W -100 +KPX Abreve Y -70 +KPX Abreve Yacute -70 +KPX Abreve Ydieresis -70 +KPX Abreve quoteright -74 +KPX Abreve u -30 +KPX Abreve uacute -30 +KPX Abreve ucircumflex -30 +KPX Abreve udieresis -30 +KPX Abreve ugrave -30 +KPX Abreve uhungarumlaut -30 +KPX Abreve umacron -30 +KPX Abreve uogonek -30 +KPX Abreve uring -30 +KPX Abreve v -74 +KPX Abreve w -74 +KPX Abreve y -74 +KPX Abreve yacute -74 +KPX Abreve ydieresis -74 +KPX Acircumflex C -65 +KPX Acircumflex Cacute -65 +KPX Acircumflex Ccaron -65 +KPX Acircumflex Ccedilla -65 +KPX Acircumflex G -60 +KPX Acircumflex Gbreve -60 +KPX Acircumflex Gcommaaccent -60 +KPX Acircumflex O -50 +KPX Acircumflex Oacute -50 +KPX Acircumflex Ocircumflex -50 +KPX Acircumflex Odieresis -50 +KPX Acircumflex Ograve -50 +KPX Acircumflex Ohungarumlaut -50 +KPX Acircumflex Omacron -50 +KPX Acircumflex Oslash -50 +KPX Acircumflex Otilde -50 +KPX Acircumflex Q -55 +KPX Acircumflex T -55 +KPX Acircumflex Tcaron -55 +KPX Acircumflex Tcommaaccent -55 +KPX Acircumflex U -50 +KPX Acircumflex Uacute -50 +KPX Acircumflex Ucircumflex -50 +KPX Acircumflex Udieresis -50 +KPX Acircumflex Ugrave -50 +KPX Acircumflex Uhungarumlaut -50 +KPX Acircumflex Umacron -50 +KPX Acircumflex Uogonek -50 +KPX Acircumflex Uring -50 +KPX Acircumflex V -95 +KPX Acircumflex W -100 +KPX Acircumflex Y -70 +KPX Acircumflex Yacute -70 +KPX Acircumflex Ydieresis -70 +KPX Acircumflex quoteright -74 +KPX Acircumflex u -30 +KPX Acircumflex uacute -30 +KPX Acircumflex ucircumflex -30 +KPX Acircumflex udieresis -30 +KPX Acircumflex ugrave -30 +KPX Acircumflex uhungarumlaut -30 +KPX Acircumflex umacron -30 +KPX Acircumflex uogonek -30 +KPX Acircumflex uring -30 +KPX Acircumflex v -74 +KPX Acircumflex w -74 +KPX Acircumflex y -74 +KPX Acircumflex yacute -74 +KPX Acircumflex ydieresis -74 +KPX Adieresis C -65 +KPX Adieresis Cacute -65 +KPX Adieresis Ccaron -65 +KPX Adieresis Ccedilla -65 +KPX Adieresis G -60 +KPX Adieresis Gbreve -60 +KPX Adieresis Gcommaaccent -60 +KPX Adieresis O -50 +KPX Adieresis Oacute -50 +KPX Adieresis Ocircumflex -50 +KPX Adieresis Odieresis -50 +KPX Adieresis Ograve -50 +KPX Adieresis Ohungarumlaut -50 +KPX Adieresis Omacron -50 +KPX Adieresis Oslash -50 +KPX Adieresis Otilde -50 +KPX Adieresis Q -55 +KPX Adieresis T -55 +KPX Adieresis Tcaron -55 +KPX Adieresis Tcommaaccent -55 +KPX Adieresis U -50 +KPX Adieresis Uacute -50 +KPX Adieresis Ucircumflex -50 +KPX Adieresis Udieresis -50 +KPX Adieresis Ugrave -50 +KPX Adieresis Uhungarumlaut -50 +KPX Adieresis Umacron -50 +KPX Adieresis Uogonek -50 +KPX Adieresis Uring -50 +KPX Adieresis V -95 +KPX Adieresis W -100 +KPX Adieresis Y -70 +KPX Adieresis Yacute -70 +KPX Adieresis Ydieresis -70 +KPX Adieresis quoteright -74 +KPX Adieresis u -30 +KPX Adieresis uacute -30 +KPX Adieresis ucircumflex -30 +KPX Adieresis udieresis -30 +KPX Adieresis ugrave -30 +KPX Adieresis uhungarumlaut -30 +KPX Adieresis umacron -30 +KPX Adieresis uogonek -30 +KPX Adieresis uring -30 +KPX Adieresis v -74 +KPX Adieresis w -74 +KPX Adieresis y -74 +KPX Adieresis yacute -74 +KPX Adieresis ydieresis -74 +KPX Agrave C -65 +KPX Agrave Cacute -65 +KPX Agrave Ccaron -65 +KPX Agrave Ccedilla -65 +KPX Agrave G -60 +KPX Agrave Gbreve -60 +KPX Agrave Gcommaaccent -60 +KPX Agrave O -50 +KPX Agrave Oacute -50 +KPX Agrave Ocircumflex -50 +KPX Agrave Odieresis -50 +KPX Agrave Ograve -50 +KPX Agrave Ohungarumlaut -50 +KPX Agrave Omacron -50 +KPX Agrave Oslash -50 +KPX Agrave Otilde -50 +KPX Agrave Q -55 +KPX Agrave T -55 +KPX Agrave Tcaron -55 +KPX Agrave Tcommaaccent -55 +KPX Agrave U -50 +KPX Agrave Uacute -50 +KPX Agrave Ucircumflex -50 +KPX Agrave Udieresis -50 +KPX Agrave Ugrave -50 +KPX Agrave Uhungarumlaut -50 +KPX Agrave Umacron -50 +KPX Agrave Uogonek -50 +KPX Agrave Uring -50 +KPX Agrave V -95 +KPX Agrave W -100 +KPX Agrave Y -70 +KPX Agrave Yacute -70 +KPX Agrave Ydieresis -70 +KPX Agrave quoteright -74 +KPX Agrave u -30 +KPX Agrave uacute -30 +KPX Agrave ucircumflex -30 +KPX Agrave udieresis -30 +KPX Agrave ugrave -30 +KPX Agrave uhungarumlaut -30 +KPX Agrave umacron -30 +KPX Agrave uogonek -30 +KPX Agrave uring -30 +KPX Agrave v -74 +KPX Agrave w -74 +KPX Agrave y -74 +KPX Agrave yacute -74 +KPX Agrave ydieresis -74 +KPX Amacron C -65 +KPX Amacron Cacute -65 +KPX Amacron Ccaron -65 +KPX Amacron Ccedilla -65 +KPX Amacron G -60 +KPX Amacron Gbreve -60 +KPX Amacron Gcommaaccent -60 +KPX Amacron O -50 +KPX Amacron Oacute -50 +KPX Amacron Ocircumflex -50 +KPX Amacron Odieresis -50 +KPX Amacron Ograve -50 +KPX Amacron Ohungarumlaut -50 +KPX Amacron Omacron -50 +KPX Amacron Oslash -50 +KPX Amacron Otilde -50 +KPX Amacron Q -55 +KPX Amacron T -55 +KPX Amacron Tcaron -55 +KPX Amacron Tcommaaccent -55 +KPX Amacron U -50 +KPX Amacron Uacute -50 +KPX Amacron Ucircumflex -50 +KPX Amacron Udieresis -50 +KPX Amacron Ugrave -50 +KPX Amacron Uhungarumlaut -50 +KPX Amacron Umacron -50 +KPX Amacron Uogonek -50 +KPX Amacron Uring -50 +KPX Amacron V -95 +KPX Amacron W -100 +KPX Amacron Y -70 +KPX Amacron Yacute -70 +KPX Amacron Ydieresis -70 +KPX Amacron quoteright -74 +KPX Amacron u -30 +KPX Amacron uacute -30 +KPX Amacron ucircumflex -30 +KPX Amacron udieresis -30 +KPX Amacron ugrave -30 +KPX Amacron uhungarumlaut -30 +KPX Amacron umacron -30 +KPX Amacron uogonek -30 +KPX Amacron uring -30 +KPX Amacron v -74 +KPX Amacron w -74 +KPX Amacron y -74 +KPX Amacron yacute -74 +KPX Amacron ydieresis -74 +KPX Aogonek C -65 +KPX Aogonek Cacute -65 +KPX Aogonek Ccaron -65 +KPX Aogonek Ccedilla -65 +KPX Aogonek G -60 +KPX Aogonek Gbreve -60 +KPX Aogonek Gcommaaccent -60 +KPX Aogonek O -50 +KPX Aogonek Oacute -50 +KPX Aogonek Ocircumflex -50 +KPX Aogonek Odieresis -50 +KPX Aogonek Ograve -50 +KPX Aogonek Ohungarumlaut -50 +KPX Aogonek Omacron -50 +KPX Aogonek Oslash -50 +KPX Aogonek Otilde -50 +KPX Aogonek Q -55 +KPX Aogonek T -55 +KPX Aogonek Tcaron -55 +KPX Aogonek Tcommaaccent -55 +KPX Aogonek U -50 +KPX Aogonek Uacute -50 +KPX Aogonek Ucircumflex -50 +KPX Aogonek Udieresis -50 +KPX Aogonek Ugrave -50 +KPX Aogonek Uhungarumlaut -50 +KPX Aogonek Umacron -50 +KPX Aogonek Uogonek -50 +KPX Aogonek Uring -50 +KPX Aogonek V -95 +KPX Aogonek W -100 +KPX Aogonek Y -70 +KPX Aogonek Yacute -70 +KPX Aogonek Ydieresis -70 +KPX Aogonek quoteright -74 +KPX Aogonek u -30 +KPX Aogonek uacute -30 +KPX Aogonek ucircumflex -30 +KPX Aogonek udieresis -30 +KPX Aogonek ugrave -30 +KPX Aogonek uhungarumlaut -30 +KPX Aogonek umacron -30 +KPX Aogonek uogonek -30 +KPX Aogonek uring -30 +KPX Aogonek v -74 +KPX Aogonek w -74 +KPX Aogonek y -34 +KPX Aogonek yacute -34 +KPX Aogonek ydieresis -34 +KPX Aring C -65 +KPX Aring Cacute -65 +KPX Aring Ccaron -65 +KPX Aring Ccedilla -65 +KPX Aring G -60 +KPX Aring Gbreve -60 +KPX Aring Gcommaaccent -60 +KPX Aring O -50 +KPX Aring Oacute -50 +KPX Aring Ocircumflex -50 +KPX Aring Odieresis -50 +KPX Aring Ograve -50 +KPX Aring Ohungarumlaut -50 +KPX Aring Omacron -50 +KPX Aring Oslash -50 +KPX Aring Otilde -50 +KPX Aring Q -55 +KPX Aring T -55 +KPX Aring Tcaron -55 +KPX Aring Tcommaaccent -55 +KPX Aring U -50 +KPX Aring Uacute -50 +KPX Aring Ucircumflex -50 +KPX Aring Udieresis -50 +KPX Aring Ugrave -50 +KPX Aring Uhungarumlaut -50 +KPX Aring Umacron -50 +KPX Aring Uogonek -50 +KPX Aring Uring -50 +KPX Aring V -95 +KPX Aring W -100 +KPX Aring Y -70 +KPX Aring Yacute -70 +KPX Aring Ydieresis -70 +KPX Aring quoteright -74 +KPX Aring u -30 +KPX Aring uacute -30 +KPX Aring ucircumflex -30 +KPX Aring udieresis -30 +KPX Aring ugrave -30 +KPX Aring uhungarumlaut -30 +KPX Aring umacron -30 +KPX Aring uogonek -30 +KPX Aring uring -30 +KPX Aring v -74 +KPX Aring w -74 +KPX Aring y -74 +KPX Aring yacute -74 +KPX Aring ydieresis -74 +KPX Atilde C -65 +KPX Atilde Cacute -65 +KPX Atilde Ccaron -65 +KPX Atilde Ccedilla -65 +KPX Atilde G -60 +KPX Atilde Gbreve -60 +KPX Atilde Gcommaaccent -60 +KPX Atilde O -50 +KPX Atilde Oacute -50 +KPX Atilde Ocircumflex -50 +KPX Atilde Odieresis -50 +KPX Atilde Ograve -50 +KPX Atilde Ohungarumlaut -50 +KPX Atilde Omacron -50 +KPX Atilde Oslash -50 +KPX Atilde Otilde -50 +KPX Atilde Q -55 +KPX Atilde T -55 +KPX Atilde Tcaron -55 +KPX Atilde Tcommaaccent -55 +KPX Atilde U -50 +KPX Atilde Uacute -50 +KPX Atilde Ucircumflex -50 +KPX Atilde Udieresis -50 +KPX Atilde Ugrave -50 +KPX Atilde Uhungarumlaut -50 +KPX Atilde Umacron -50 +KPX Atilde Uogonek -50 +KPX Atilde Uring -50 +KPX Atilde V -95 +KPX Atilde W -100 +KPX Atilde Y -70 +KPX Atilde Yacute -70 +KPX Atilde Ydieresis -70 +KPX Atilde quoteright -74 +KPX Atilde u -30 +KPX Atilde uacute -30 +KPX Atilde ucircumflex -30 +KPX Atilde udieresis -30 +KPX Atilde ugrave -30 +KPX Atilde uhungarumlaut -30 +KPX Atilde umacron -30 +KPX Atilde uogonek -30 +KPX Atilde uring -30 +KPX Atilde v -74 +KPX Atilde w -74 +KPX Atilde y -74 +KPX Atilde yacute -74 +KPX Atilde ydieresis -74 +KPX B A -25 +KPX B Aacute -25 +KPX B Abreve -25 +KPX B Acircumflex -25 +KPX B Adieresis -25 +KPX B Agrave -25 +KPX B Amacron -25 +KPX B Aogonek -25 +KPX B Aring -25 +KPX B Atilde -25 +KPX B U -10 +KPX B Uacute -10 +KPX B Ucircumflex -10 +KPX B Udieresis -10 +KPX B Ugrave -10 +KPX B Uhungarumlaut -10 +KPX B Umacron -10 +KPX B Uogonek -10 +KPX B Uring -10 +KPX D A -25 +KPX D Aacute -25 +KPX D Abreve -25 +KPX D Acircumflex -25 +KPX D Adieresis -25 +KPX D Agrave -25 +KPX D Amacron -25 +KPX D Aogonek -25 +KPX D Aring -25 +KPX D Atilde -25 +KPX D V -50 +KPX D W -40 +KPX D Y -50 +KPX D Yacute -50 +KPX D Ydieresis -50 +KPX Dcaron A -25 +KPX Dcaron Aacute -25 +KPX Dcaron Abreve -25 +KPX Dcaron Acircumflex -25 +KPX Dcaron Adieresis -25 +KPX Dcaron Agrave -25 +KPX Dcaron Amacron -25 +KPX Dcaron Aogonek -25 +KPX Dcaron Aring -25 +KPX Dcaron Atilde -25 +KPX Dcaron V -50 +KPX Dcaron W -40 +KPX Dcaron Y -50 +KPX Dcaron Yacute -50 +KPX Dcaron Ydieresis -50 +KPX Dcroat A -25 +KPX Dcroat Aacute -25 +KPX Dcroat Abreve -25 +KPX Dcroat Acircumflex -25 +KPX Dcroat Adieresis -25 +KPX Dcroat Agrave -25 +KPX Dcroat Amacron -25 +KPX Dcroat Aogonek -25 +KPX Dcroat Aring -25 +KPX Dcroat Atilde -25 +KPX Dcroat V -50 +KPX Dcroat W -40 +KPX Dcroat Y -50 +KPX Dcroat Yacute -50 +KPX Dcroat Ydieresis -50 +KPX F A -100 +KPX F Aacute -100 +KPX F Abreve -100 +KPX F Acircumflex -100 +KPX F Adieresis -100 +KPX F Agrave -100 +KPX F Amacron -100 +KPX F Aogonek -100 +KPX F Aring -100 +KPX F Atilde -100 +KPX F a -95 +KPX F aacute -95 +KPX F abreve -95 +KPX F acircumflex -95 +KPX F adieresis -95 +KPX F agrave -95 +KPX F amacron -95 +KPX F aogonek -95 +KPX F aring -95 +KPX F atilde -95 +KPX F comma -129 +KPX F e -100 +KPX F eacute -100 +KPX F ecaron -100 +KPX F ecircumflex -100 +KPX F edieresis -100 +KPX F edotaccent -100 +KPX F egrave -100 +KPX F emacron -100 +KPX F eogonek -100 +KPX F i -40 +KPX F iacute -40 +KPX F icircumflex -40 +KPX F idieresis -40 +KPX F igrave -40 +KPX F imacron -40 +KPX F iogonek -40 +KPX F o -70 +KPX F oacute -70 +KPX F ocircumflex -70 +KPX F odieresis -70 +KPX F ograve -70 +KPX F ohungarumlaut -70 +KPX F omacron -70 +KPX F oslash -70 +KPX F otilde -70 +KPX F period -129 +KPX F r -50 +KPX F racute -50 +KPX F rcaron -50 +KPX F rcommaaccent -50 +KPX J A -25 +KPX J Aacute -25 +KPX J Abreve -25 +KPX J Acircumflex -25 +KPX J Adieresis -25 +KPX J Agrave -25 +KPX J Amacron -25 +KPX J Aogonek -25 +KPX J Aring -25 +KPX J Atilde -25 +KPX J a -40 +KPX J aacute -40 +KPX J abreve -40 +KPX J acircumflex -40 +KPX J adieresis -40 +KPX J agrave -40 +KPX J amacron -40 +KPX J aogonek -40 +KPX J aring -40 +KPX J atilde -40 +KPX J comma -10 +KPX J e -40 +KPX J eacute -40 +KPX J ecaron -40 +KPX J ecircumflex -40 +KPX J edieresis -40 +KPX J edotaccent -40 +KPX J egrave -40 +KPX J emacron -40 +KPX J eogonek -40 +KPX J o -40 +KPX J oacute -40 +KPX J ocircumflex -40 +KPX J odieresis -40 +KPX J ograve -40 +KPX J ohungarumlaut -40 +KPX J omacron -40 +KPX J oslash -40 +KPX J otilde -40 +KPX J period -10 +KPX J u -40 +KPX J uacute -40 +KPX J ucircumflex -40 +KPX J udieresis -40 +KPX J ugrave -40 +KPX J uhungarumlaut -40 +KPX J umacron -40 +KPX J uogonek -40 +KPX J uring -40 +KPX K O -30 +KPX K Oacute -30 +KPX K Ocircumflex -30 +KPX K Odieresis -30 +KPX K Ograve -30 +KPX K Ohungarumlaut -30 +KPX K Omacron -30 +KPX K Oslash -30 +KPX K Otilde -30 +KPX K e -25 +KPX K eacute -25 +KPX K ecaron -25 +KPX K ecircumflex -25 +KPX K edieresis -25 +KPX K edotaccent -25 +KPX K egrave -25 +KPX K emacron -25 +KPX K eogonek -25 +KPX K o -25 +KPX K oacute -25 +KPX K ocircumflex -25 +KPX K odieresis -25 +KPX K ograve -25 +KPX K ohungarumlaut -25 +KPX K omacron -25 +KPX K oslash -25 +KPX K otilde -25 +KPX K u -20 +KPX K uacute -20 +KPX K ucircumflex -20 +KPX K udieresis -20 +KPX K ugrave -20 +KPX K uhungarumlaut -20 +KPX K umacron -20 +KPX K uogonek -20 +KPX K uring -20 +KPX K y -20 +KPX K yacute -20 +KPX K ydieresis -20 +KPX Kcommaaccent O -30 +KPX Kcommaaccent Oacute -30 +KPX Kcommaaccent Ocircumflex -30 +KPX Kcommaaccent Odieresis -30 +KPX Kcommaaccent Ograve -30 +KPX Kcommaaccent Ohungarumlaut -30 +KPX Kcommaaccent Omacron -30 +KPX Kcommaaccent Oslash -30 +KPX Kcommaaccent Otilde -30 +KPX Kcommaaccent e -25 +KPX Kcommaaccent eacute -25 +KPX Kcommaaccent ecaron -25 +KPX Kcommaaccent ecircumflex -25 +KPX Kcommaaccent edieresis -25 +KPX Kcommaaccent edotaccent -25 +KPX Kcommaaccent egrave -25 +KPX Kcommaaccent emacron -25 +KPX Kcommaaccent eogonek -25 +KPX Kcommaaccent o -25 +KPX Kcommaaccent oacute -25 +KPX Kcommaaccent ocircumflex -25 +KPX Kcommaaccent odieresis -25 +KPX Kcommaaccent ograve -25 +KPX Kcommaaccent ohungarumlaut -25 +KPX Kcommaaccent omacron -25 +KPX Kcommaaccent oslash -25 +KPX Kcommaaccent otilde -25 +KPX Kcommaaccent u -20 +KPX Kcommaaccent uacute -20 +KPX Kcommaaccent ucircumflex -20 +KPX Kcommaaccent udieresis -20 +KPX Kcommaaccent ugrave -20 +KPX Kcommaaccent uhungarumlaut -20 +KPX Kcommaaccent umacron -20 +KPX Kcommaaccent uogonek -20 +KPX Kcommaaccent uring -20 +KPX Kcommaaccent y -20 +KPX Kcommaaccent yacute -20 +KPX Kcommaaccent ydieresis -20 +KPX L T -18 +KPX L Tcaron -18 +KPX L Tcommaaccent -18 +KPX L V -37 +KPX L W -37 +KPX L Y -37 +KPX L Yacute -37 +KPX L Ydieresis -37 +KPX L quoteright -55 +KPX L y -37 +KPX L yacute -37 +KPX L ydieresis -37 +KPX Lacute T -18 +KPX Lacute Tcaron -18 +KPX Lacute Tcommaaccent -18 +KPX Lacute V -37 +KPX Lacute W -37 +KPX Lacute Y -37 +KPX Lacute Yacute -37 +KPX Lacute Ydieresis -37 +KPX Lacute quoteright -55 +KPX Lacute y -37 +KPX Lacute yacute -37 +KPX Lacute ydieresis -37 +KPX Lcommaaccent T -18 +KPX Lcommaaccent Tcaron -18 +KPX Lcommaaccent Tcommaaccent -18 +KPX Lcommaaccent V -37 +KPX Lcommaaccent W -37 +KPX Lcommaaccent Y -37 +KPX Lcommaaccent Yacute -37 +KPX Lcommaaccent Ydieresis -37 +KPX Lcommaaccent quoteright -55 +KPX Lcommaaccent y -37 +KPX Lcommaaccent yacute -37 +KPX Lcommaaccent ydieresis -37 +KPX Lslash T -18 +KPX Lslash Tcaron -18 +KPX Lslash Tcommaaccent -18 +KPX Lslash V -37 +KPX Lslash W -37 +KPX Lslash Y -37 +KPX Lslash Yacute -37 +KPX Lslash Ydieresis -37 +KPX Lslash quoteright -55 +KPX Lslash y -37 +KPX Lslash yacute -37 +KPX Lslash ydieresis -37 +KPX N A -30 +KPX N Aacute -30 +KPX N Abreve -30 +KPX N Acircumflex -30 +KPX N Adieresis -30 +KPX N Agrave -30 +KPX N Amacron -30 +KPX N Aogonek -30 +KPX N Aring -30 +KPX N Atilde -30 +KPX Nacute A -30 +KPX Nacute Aacute -30 +KPX Nacute Abreve -30 +KPX Nacute Acircumflex -30 +KPX Nacute Adieresis -30 +KPX Nacute Agrave -30 +KPX Nacute Amacron -30 +KPX Nacute Aogonek -30 +KPX Nacute Aring -30 +KPX Nacute Atilde -30 +KPX Ncaron A -30 +KPX Ncaron Aacute -30 +KPX Ncaron Abreve -30 +KPX Ncaron Acircumflex -30 +KPX Ncaron Adieresis -30 +KPX Ncaron Agrave -30 +KPX Ncaron Amacron -30 +KPX Ncaron Aogonek -30 +KPX Ncaron Aring -30 +KPX Ncaron Atilde -30 +KPX Ncommaaccent A -30 +KPX Ncommaaccent Aacute -30 +KPX Ncommaaccent Abreve -30 +KPX Ncommaaccent Acircumflex -30 +KPX Ncommaaccent Adieresis -30 +KPX Ncommaaccent Agrave -30 +KPX Ncommaaccent Amacron -30 +KPX Ncommaaccent Aogonek -30 +KPX Ncommaaccent Aring -30 +KPX Ncommaaccent Atilde -30 +KPX Ntilde A -30 +KPX Ntilde Aacute -30 +KPX Ntilde Abreve -30 +KPX Ntilde Acircumflex -30 +KPX Ntilde Adieresis -30 +KPX Ntilde Agrave -30 +KPX Ntilde Amacron -30 +KPX Ntilde Aogonek -30 +KPX Ntilde Aring -30 +KPX Ntilde Atilde -30 +KPX O A -40 +KPX O Aacute -40 +KPX O Abreve -40 +KPX O Acircumflex -40 +KPX O Adieresis -40 +KPX O Agrave -40 +KPX O Amacron -40 +KPX O Aogonek -40 +KPX O Aring -40 +KPX O Atilde -40 +KPX O T -40 +KPX O Tcaron -40 +KPX O Tcommaaccent -40 +KPX O V -50 +KPX O W -50 +KPX O X -40 +KPX O Y -50 +KPX O Yacute -50 +KPX O Ydieresis -50 +KPX Oacute A -40 +KPX Oacute Aacute -40 +KPX Oacute Abreve -40 +KPX Oacute Acircumflex -40 +KPX Oacute Adieresis -40 +KPX Oacute Agrave -40 +KPX Oacute Amacron -40 +KPX Oacute Aogonek -40 +KPX Oacute Aring -40 +KPX Oacute Atilde -40 +KPX Oacute T -40 +KPX Oacute Tcaron -40 +KPX Oacute Tcommaaccent -40 +KPX Oacute V -50 +KPX Oacute W -50 +KPX Oacute X -40 +KPX Oacute Y -50 +KPX Oacute Yacute -50 +KPX Oacute Ydieresis -50 +KPX Ocircumflex A -40 +KPX Ocircumflex Aacute -40 +KPX Ocircumflex Abreve -40 +KPX Ocircumflex Acircumflex -40 +KPX Ocircumflex Adieresis -40 +KPX Ocircumflex Agrave -40 +KPX Ocircumflex Amacron -40 +KPX Ocircumflex Aogonek -40 +KPX Ocircumflex Aring -40 +KPX Ocircumflex Atilde -40 +KPX Ocircumflex T -40 +KPX Ocircumflex Tcaron -40 +KPX Ocircumflex Tcommaaccent -40 +KPX Ocircumflex V -50 +KPX Ocircumflex W -50 +KPX Ocircumflex X -40 +KPX Ocircumflex Y -50 +KPX Ocircumflex Yacute -50 +KPX Ocircumflex Ydieresis -50 +KPX Odieresis A -40 +KPX Odieresis Aacute -40 +KPX Odieresis Abreve -40 +KPX Odieresis Acircumflex -40 +KPX Odieresis Adieresis -40 +KPX Odieresis Agrave -40 +KPX Odieresis Amacron -40 +KPX Odieresis Aogonek -40 +KPX Odieresis Aring -40 +KPX Odieresis Atilde -40 +KPX Odieresis T -40 +KPX Odieresis Tcaron -40 +KPX Odieresis Tcommaaccent -40 +KPX Odieresis V -50 +KPX Odieresis W -50 +KPX Odieresis X -40 +KPX Odieresis Y -50 +KPX Odieresis Yacute -50 +KPX Odieresis Ydieresis -50 +KPX Ograve A -40 +KPX Ograve Aacute -40 +KPX Ograve Abreve -40 +KPX Ograve Acircumflex -40 +KPX Ograve Adieresis -40 +KPX Ograve Agrave -40 +KPX Ograve Amacron -40 +KPX Ograve Aogonek -40 +KPX Ograve Aring -40 +KPX Ograve Atilde -40 +KPX Ograve T -40 +KPX Ograve Tcaron -40 +KPX Ograve Tcommaaccent -40 +KPX Ograve V -50 +KPX Ograve W -50 +KPX Ograve X -40 +KPX Ograve Y -50 +KPX Ograve Yacute -50 +KPX Ograve Ydieresis -50 +KPX Ohungarumlaut A -40 +KPX Ohungarumlaut Aacute -40 +KPX Ohungarumlaut Abreve -40 +KPX Ohungarumlaut Acircumflex -40 +KPX Ohungarumlaut Adieresis -40 +KPX Ohungarumlaut Agrave -40 +KPX Ohungarumlaut Amacron -40 +KPX Ohungarumlaut Aogonek -40 +KPX Ohungarumlaut Aring -40 +KPX Ohungarumlaut Atilde -40 +KPX Ohungarumlaut T -40 +KPX Ohungarumlaut Tcaron -40 +KPX Ohungarumlaut Tcommaaccent -40 +KPX Ohungarumlaut V -50 +KPX Ohungarumlaut W -50 +KPX Ohungarumlaut X -40 +KPX Ohungarumlaut Y -50 +KPX Ohungarumlaut Yacute -50 +KPX Ohungarumlaut Ydieresis -50 +KPX Omacron A -40 +KPX Omacron Aacute -40 +KPX Omacron Abreve -40 +KPX Omacron Acircumflex -40 +KPX Omacron Adieresis -40 +KPX Omacron Agrave -40 +KPX Omacron Amacron -40 +KPX Omacron Aogonek -40 +KPX Omacron Aring -40 +KPX Omacron Atilde -40 +KPX Omacron T -40 +KPX Omacron Tcaron -40 +KPX Omacron Tcommaaccent -40 +KPX Omacron V -50 +KPX Omacron W -50 +KPX Omacron X -40 +KPX Omacron Y -50 +KPX Omacron Yacute -50 +KPX Omacron Ydieresis -50 +KPX Oslash A -40 +KPX Oslash Aacute -40 +KPX Oslash Abreve -40 +KPX Oslash Acircumflex -40 +KPX Oslash Adieresis -40 +KPX Oslash Agrave -40 +KPX Oslash Amacron -40 +KPX Oslash Aogonek -40 +KPX Oslash Aring -40 +KPX Oslash Atilde -40 +KPX Oslash T -40 +KPX Oslash Tcaron -40 +KPX Oslash Tcommaaccent -40 +KPX Oslash V -50 +KPX Oslash W -50 +KPX Oslash X -40 +KPX Oslash Y -50 +KPX Oslash Yacute -50 +KPX Oslash Ydieresis -50 +KPX Otilde A -40 +KPX Otilde Aacute -40 +KPX Otilde Abreve -40 +KPX Otilde Acircumflex -40 +KPX Otilde Adieresis -40 +KPX Otilde Agrave -40 +KPX Otilde Amacron -40 +KPX Otilde Aogonek -40 +KPX Otilde Aring -40 +KPX Otilde Atilde -40 +KPX Otilde T -40 +KPX Otilde Tcaron -40 +KPX Otilde Tcommaaccent -40 +KPX Otilde V -50 +KPX Otilde W -50 +KPX Otilde X -40 +KPX Otilde Y -50 +KPX Otilde Yacute -50 +KPX Otilde Ydieresis -50 +KPX P A -85 +KPX P Aacute -85 +KPX P Abreve -85 +KPX P Acircumflex -85 +KPX P Adieresis -85 +KPX P Agrave -85 +KPX P Amacron -85 +KPX P Aogonek -85 +KPX P Aring -85 +KPX P Atilde -85 +KPX P a -40 +KPX P aacute -40 +KPX P abreve -40 +KPX P acircumflex -40 +KPX P adieresis -40 +KPX P agrave -40 +KPX P amacron -40 +KPX P aogonek -40 +KPX P aring -40 +KPX P atilde -40 +KPX P comma -129 +KPX P e -50 +KPX P eacute -50 +KPX P ecaron -50 +KPX P ecircumflex -50 +KPX P edieresis -50 +KPX P edotaccent -50 +KPX P egrave -50 +KPX P emacron -50 +KPX P eogonek -50 +KPX P o -55 +KPX P oacute -55 +KPX P ocircumflex -55 +KPX P odieresis -55 +KPX P ograve -55 +KPX P ohungarumlaut -55 +KPX P omacron -55 +KPX P oslash -55 +KPX P otilde -55 +KPX P period -129 +KPX Q U -10 +KPX Q Uacute -10 +KPX Q Ucircumflex -10 +KPX Q Udieresis -10 +KPX Q Ugrave -10 +KPX Q Uhungarumlaut -10 +KPX Q Umacron -10 +KPX Q Uogonek -10 +KPX Q Uring -10 +KPX R O -40 +KPX R Oacute -40 +KPX R Ocircumflex -40 +KPX R Odieresis -40 +KPX R Ograve -40 +KPX R Ohungarumlaut -40 +KPX R Omacron -40 +KPX R Oslash -40 +KPX R Otilde -40 +KPX R T -30 +KPX R Tcaron -30 +KPX R Tcommaaccent -30 +KPX R U -40 +KPX R Uacute -40 +KPX R Ucircumflex -40 +KPX R Udieresis -40 +KPX R Ugrave -40 +KPX R Uhungarumlaut -40 +KPX R Umacron -40 +KPX R Uogonek -40 +KPX R Uring -40 +KPX R V -18 +KPX R W -18 +KPX R Y -18 +KPX R Yacute -18 +KPX R Ydieresis -18 +KPX Racute O -40 +KPX Racute Oacute -40 +KPX Racute Ocircumflex -40 +KPX Racute Odieresis -40 +KPX Racute Ograve -40 +KPX Racute Ohungarumlaut -40 +KPX Racute Omacron -40 +KPX Racute Oslash -40 +KPX Racute Otilde -40 +KPX Racute T -30 +KPX Racute Tcaron -30 +KPX Racute Tcommaaccent -30 +KPX Racute U -40 +KPX Racute Uacute -40 +KPX Racute Ucircumflex -40 +KPX Racute Udieresis -40 +KPX Racute Ugrave -40 +KPX Racute Uhungarumlaut -40 +KPX Racute Umacron -40 +KPX Racute Uogonek -40 +KPX Racute Uring -40 +KPX Racute V -18 +KPX Racute W -18 +KPX Racute Y -18 +KPX Racute Yacute -18 +KPX Racute Ydieresis -18 +KPX Rcaron O -40 +KPX Rcaron Oacute -40 +KPX Rcaron Ocircumflex -40 +KPX Rcaron Odieresis -40 +KPX Rcaron Ograve -40 +KPX Rcaron Ohungarumlaut -40 +KPX Rcaron Omacron -40 +KPX Rcaron Oslash -40 +KPX Rcaron Otilde -40 +KPX Rcaron T -30 +KPX Rcaron Tcaron -30 +KPX Rcaron Tcommaaccent -30 +KPX Rcaron U -40 +KPX Rcaron Uacute -40 +KPX Rcaron Ucircumflex -40 +KPX Rcaron Udieresis -40 +KPX Rcaron Ugrave -40 +KPX Rcaron Uhungarumlaut -40 +KPX Rcaron Umacron -40 +KPX Rcaron Uogonek -40 +KPX Rcaron Uring -40 +KPX Rcaron V -18 +KPX Rcaron W -18 +KPX Rcaron Y -18 +KPX Rcaron Yacute -18 +KPX Rcaron Ydieresis -18 +KPX Rcommaaccent O -40 +KPX Rcommaaccent Oacute -40 +KPX Rcommaaccent Ocircumflex -40 +KPX Rcommaaccent Odieresis -40 +KPX Rcommaaccent Ograve -40 +KPX Rcommaaccent Ohungarumlaut -40 +KPX Rcommaaccent Omacron -40 +KPX Rcommaaccent Oslash -40 +KPX Rcommaaccent Otilde -40 +KPX Rcommaaccent T -30 +KPX Rcommaaccent Tcaron -30 +KPX Rcommaaccent Tcommaaccent -30 +KPX Rcommaaccent U -40 +KPX Rcommaaccent Uacute -40 +KPX Rcommaaccent Ucircumflex -40 +KPX Rcommaaccent Udieresis -40 +KPX Rcommaaccent Ugrave -40 +KPX Rcommaaccent Uhungarumlaut -40 +KPX Rcommaaccent Umacron -40 +KPX Rcommaaccent Uogonek -40 +KPX Rcommaaccent Uring -40 +KPX Rcommaaccent V -18 +KPX Rcommaaccent W -18 +KPX Rcommaaccent Y -18 +KPX Rcommaaccent Yacute -18 +KPX Rcommaaccent Ydieresis -18 +KPX T A -55 +KPX T Aacute -55 +KPX T Abreve -55 +KPX T Acircumflex -55 +KPX T Adieresis -55 +KPX T Agrave -55 +KPX T Amacron -55 +KPX T Aogonek -55 +KPX T Aring -55 +KPX T Atilde -55 +KPX T O -18 +KPX T Oacute -18 +KPX T Ocircumflex -18 +KPX T Odieresis -18 +KPX T Ograve -18 +KPX T Ohungarumlaut -18 +KPX T Omacron -18 +KPX T Oslash -18 +KPX T Otilde -18 +KPX T a -92 +KPX T aacute -92 +KPX T abreve -92 +KPX T acircumflex -92 +KPX T adieresis -92 +KPX T agrave -92 +KPX T amacron -92 +KPX T aogonek -92 +KPX T aring -92 +KPX T atilde -92 +KPX T colon -74 +KPX T comma -92 +KPX T e -92 +KPX T eacute -92 +KPX T ecaron -92 +KPX T ecircumflex -92 +KPX T edieresis -52 +KPX T edotaccent -92 +KPX T egrave -52 +KPX T emacron -52 +KPX T eogonek -92 +KPX T hyphen -92 +KPX T i -37 +KPX T iacute -37 +KPX T iogonek -37 +KPX T o -95 +KPX T oacute -95 +KPX T ocircumflex -95 +KPX T odieresis -95 +KPX T ograve -95 +KPX T ohungarumlaut -95 +KPX T omacron -95 +KPX T oslash -95 +KPX T otilde -95 +KPX T period -92 +KPX T r -37 +KPX T racute -37 +KPX T rcaron -37 +KPX T rcommaaccent -37 +KPX T semicolon -74 +KPX T u -37 +KPX T uacute -37 +KPX T ucircumflex -37 +KPX T udieresis -37 +KPX T ugrave -37 +KPX T uhungarumlaut -37 +KPX T umacron -37 +KPX T uogonek -37 +KPX T uring -37 +KPX T w -37 +KPX T y -37 +KPX T yacute -37 +KPX T ydieresis -37 +KPX Tcaron A -55 +KPX Tcaron Aacute -55 +KPX Tcaron Abreve -55 +KPX Tcaron Acircumflex -55 +KPX Tcaron Adieresis -55 +KPX Tcaron Agrave -55 +KPX Tcaron Amacron -55 +KPX Tcaron Aogonek -55 +KPX Tcaron Aring -55 +KPX Tcaron Atilde -55 +KPX Tcaron O -18 +KPX Tcaron Oacute -18 +KPX Tcaron Ocircumflex -18 +KPX Tcaron Odieresis -18 +KPX Tcaron Ograve -18 +KPX Tcaron Ohungarumlaut -18 +KPX Tcaron Omacron -18 +KPX Tcaron Oslash -18 +KPX Tcaron Otilde -18 +KPX Tcaron a -92 +KPX Tcaron aacute -92 +KPX Tcaron abreve -92 +KPX Tcaron acircumflex -92 +KPX Tcaron adieresis -92 +KPX Tcaron agrave -92 +KPX Tcaron amacron -92 +KPX Tcaron aogonek -92 +KPX Tcaron aring -92 +KPX Tcaron atilde -92 +KPX Tcaron colon -74 +KPX Tcaron comma -92 +KPX Tcaron e -92 +KPX Tcaron eacute -92 +KPX Tcaron ecaron -92 +KPX Tcaron ecircumflex -92 +KPX Tcaron edieresis -52 +KPX Tcaron edotaccent -92 +KPX Tcaron egrave -52 +KPX Tcaron emacron -52 +KPX Tcaron eogonek -92 +KPX Tcaron hyphen -92 +KPX Tcaron i -37 +KPX Tcaron iacute -37 +KPX Tcaron iogonek -37 +KPX Tcaron o -95 +KPX Tcaron oacute -95 +KPX Tcaron ocircumflex -95 +KPX Tcaron odieresis -95 +KPX Tcaron ograve -95 +KPX Tcaron ohungarumlaut -95 +KPX Tcaron omacron -95 +KPX Tcaron oslash -95 +KPX Tcaron otilde -95 +KPX Tcaron period -92 +KPX Tcaron r -37 +KPX Tcaron racute -37 +KPX Tcaron rcaron -37 +KPX Tcaron rcommaaccent -37 +KPX Tcaron semicolon -74 +KPX Tcaron u -37 +KPX Tcaron uacute -37 +KPX Tcaron ucircumflex -37 +KPX Tcaron udieresis -37 +KPX Tcaron ugrave -37 +KPX Tcaron uhungarumlaut -37 +KPX Tcaron umacron -37 +KPX Tcaron uogonek -37 +KPX Tcaron uring -37 +KPX Tcaron w -37 +KPX Tcaron y -37 +KPX Tcaron yacute -37 +KPX Tcaron ydieresis -37 +KPX Tcommaaccent A -55 +KPX Tcommaaccent Aacute -55 +KPX Tcommaaccent Abreve -55 +KPX Tcommaaccent Acircumflex -55 +KPX Tcommaaccent Adieresis -55 +KPX Tcommaaccent Agrave -55 +KPX Tcommaaccent Amacron -55 +KPX Tcommaaccent Aogonek -55 +KPX Tcommaaccent Aring -55 +KPX Tcommaaccent Atilde -55 +KPX Tcommaaccent O -18 +KPX Tcommaaccent Oacute -18 +KPX Tcommaaccent Ocircumflex -18 +KPX Tcommaaccent Odieresis -18 +KPX Tcommaaccent Ograve -18 +KPX Tcommaaccent Ohungarumlaut -18 +KPX Tcommaaccent Omacron -18 +KPX Tcommaaccent Oslash -18 +KPX Tcommaaccent Otilde -18 +KPX Tcommaaccent a -92 +KPX Tcommaaccent aacute -92 +KPX Tcommaaccent abreve -92 +KPX Tcommaaccent acircumflex -92 +KPX Tcommaaccent adieresis -92 +KPX Tcommaaccent agrave -92 +KPX Tcommaaccent amacron -92 +KPX Tcommaaccent aogonek -92 +KPX Tcommaaccent aring -92 +KPX Tcommaaccent atilde -92 +KPX Tcommaaccent colon -74 +KPX Tcommaaccent comma -92 +KPX Tcommaaccent e -92 +KPX Tcommaaccent eacute -92 +KPX Tcommaaccent ecaron -92 +KPX Tcommaaccent ecircumflex -92 +KPX Tcommaaccent edieresis -52 +KPX Tcommaaccent edotaccent -92 +KPX Tcommaaccent egrave -52 +KPX Tcommaaccent emacron -52 +KPX Tcommaaccent eogonek -92 +KPX Tcommaaccent hyphen -92 +KPX Tcommaaccent i -37 +KPX Tcommaaccent iacute -37 +KPX Tcommaaccent iogonek -37 +KPX Tcommaaccent o -95 +KPX Tcommaaccent oacute -95 +KPX Tcommaaccent ocircumflex -95 +KPX Tcommaaccent odieresis -95 +KPX Tcommaaccent ograve -95 +KPX Tcommaaccent ohungarumlaut -95 +KPX Tcommaaccent omacron -95 +KPX Tcommaaccent oslash -95 +KPX Tcommaaccent otilde -95 +KPX Tcommaaccent period -92 +KPX Tcommaaccent r -37 +KPX Tcommaaccent racute -37 +KPX Tcommaaccent rcaron -37 +KPX Tcommaaccent rcommaaccent -37 +KPX Tcommaaccent semicolon -74 +KPX Tcommaaccent u -37 +KPX Tcommaaccent uacute -37 +KPX Tcommaaccent ucircumflex -37 +KPX Tcommaaccent udieresis -37 +KPX Tcommaaccent ugrave -37 +KPX Tcommaaccent uhungarumlaut -37 +KPX Tcommaaccent umacron -37 +KPX Tcommaaccent uogonek -37 +KPX Tcommaaccent uring -37 +KPX Tcommaaccent w -37 +KPX Tcommaaccent y -37 +KPX Tcommaaccent yacute -37 +KPX Tcommaaccent ydieresis -37 +KPX U A -45 +KPX U Aacute -45 +KPX U Abreve -45 +KPX U Acircumflex -45 +KPX U Adieresis -45 +KPX U Agrave -45 +KPX U Amacron -45 +KPX U Aogonek -45 +KPX U Aring -45 +KPX U Atilde -45 +KPX Uacute A -45 +KPX Uacute Aacute -45 +KPX Uacute Abreve -45 +KPX Uacute Acircumflex -45 +KPX Uacute Adieresis -45 +KPX Uacute Agrave -45 +KPX Uacute Amacron -45 +KPX Uacute Aogonek -45 +KPX Uacute Aring -45 +KPX Uacute Atilde -45 +KPX Ucircumflex A -45 +KPX Ucircumflex Aacute -45 +KPX Ucircumflex Abreve -45 +KPX Ucircumflex Acircumflex -45 +KPX Ucircumflex Adieresis -45 +KPX Ucircumflex Agrave -45 +KPX Ucircumflex Amacron -45 +KPX Ucircumflex Aogonek -45 +KPX Ucircumflex Aring -45 +KPX Ucircumflex Atilde -45 +KPX Udieresis A -45 +KPX Udieresis Aacute -45 +KPX Udieresis Abreve -45 +KPX Udieresis Acircumflex -45 +KPX Udieresis Adieresis -45 +KPX Udieresis Agrave -45 +KPX Udieresis Amacron -45 +KPX Udieresis Aogonek -45 +KPX Udieresis Aring -45 +KPX Udieresis Atilde -45 +KPX Ugrave A -45 +KPX Ugrave Aacute -45 +KPX Ugrave Abreve -45 +KPX Ugrave Acircumflex -45 +KPX Ugrave Adieresis -45 +KPX Ugrave Agrave -45 +KPX Ugrave Amacron -45 +KPX Ugrave Aogonek -45 +KPX Ugrave Aring -45 +KPX Ugrave Atilde -45 +KPX Uhungarumlaut A -45 +KPX Uhungarumlaut Aacute -45 +KPX Uhungarumlaut Abreve -45 +KPX Uhungarumlaut Acircumflex -45 +KPX Uhungarumlaut Adieresis -45 +KPX Uhungarumlaut Agrave -45 +KPX Uhungarumlaut Amacron -45 +KPX Uhungarumlaut Aogonek -45 +KPX Uhungarumlaut Aring -45 +KPX Uhungarumlaut Atilde -45 +KPX Umacron A -45 +KPX Umacron Aacute -45 +KPX Umacron Abreve -45 +KPX Umacron Acircumflex -45 +KPX Umacron Adieresis -45 +KPX Umacron Agrave -45 +KPX Umacron Amacron -45 +KPX Umacron Aogonek -45 +KPX Umacron Aring -45 +KPX Umacron Atilde -45 +KPX Uogonek A -45 +KPX Uogonek Aacute -45 +KPX Uogonek Abreve -45 +KPX Uogonek Acircumflex -45 +KPX Uogonek Adieresis -45 +KPX Uogonek Agrave -45 +KPX Uogonek Amacron -45 +KPX Uogonek Aogonek -45 +KPX Uogonek Aring -45 +KPX Uogonek Atilde -45 +KPX Uring A -45 +KPX Uring Aacute -45 +KPX Uring Abreve -45 +KPX Uring Acircumflex -45 +KPX Uring Adieresis -45 +KPX Uring Agrave -45 +KPX Uring Amacron -45 +KPX Uring Aogonek -45 +KPX Uring Aring -45 +KPX Uring Atilde -45 +KPX V A -85 +KPX V Aacute -85 +KPX V Abreve -85 +KPX V Acircumflex -85 +KPX V Adieresis -85 +KPX V Agrave -85 +KPX V Amacron -85 +KPX V Aogonek -85 +KPX V Aring -85 +KPX V Atilde -85 +KPX V G -10 +KPX V Gbreve -10 +KPX V Gcommaaccent -10 +KPX V O -30 +KPX V Oacute -30 +KPX V Ocircumflex -30 +KPX V Odieresis -30 +KPX V Ograve -30 +KPX V Ohungarumlaut -30 +KPX V Omacron -30 +KPX V Oslash -30 +KPX V Otilde -30 +KPX V a -111 +KPX V aacute -111 +KPX V abreve -111 +KPX V acircumflex -111 +KPX V adieresis -111 +KPX V agrave -111 +KPX V amacron -111 +KPX V aogonek -111 +KPX V aring -111 +KPX V atilde -111 +KPX V colon -74 +KPX V comma -129 +KPX V e -111 +KPX V eacute -111 +KPX V ecaron -111 +KPX V ecircumflex -111 +KPX V edieresis -71 +KPX V edotaccent -111 +KPX V egrave -71 +KPX V emacron -71 +KPX V eogonek -111 +KPX V hyphen -70 +KPX V i -55 +KPX V iacute -55 +KPX V iogonek -55 +KPX V o -111 +KPX V oacute -111 +KPX V ocircumflex -111 +KPX V odieresis -111 +KPX V ograve -111 +KPX V ohungarumlaut -111 +KPX V omacron -111 +KPX V oslash -111 +KPX V otilde -111 +KPX V period -129 +KPX V semicolon -74 +KPX V u -55 +KPX V uacute -55 +KPX V ucircumflex -55 +KPX V udieresis -55 +KPX V ugrave -55 +KPX V uhungarumlaut -55 +KPX V umacron -55 +KPX V uogonek -55 +KPX V uring -55 +KPX W A -74 +KPX W Aacute -74 +KPX W Abreve -74 +KPX W Acircumflex -74 +KPX W Adieresis -74 +KPX W Agrave -74 +KPX W Amacron -74 +KPX W Aogonek -74 +KPX W Aring -74 +KPX W Atilde -74 +KPX W O -15 +KPX W Oacute -15 +KPX W Ocircumflex -15 +KPX W Odieresis -15 +KPX W Ograve -15 +KPX W Ohungarumlaut -15 +KPX W Omacron -15 +KPX W Oslash -15 +KPX W Otilde -15 +KPX W a -85 +KPX W aacute -85 +KPX W abreve -85 +KPX W acircumflex -85 +KPX W adieresis -85 +KPX W agrave -85 +KPX W amacron -85 +KPX W aogonek -85 +KPX W aring -85 +KPX W atilde -85 +KPX W colon -55 +KPX W comma -74 +KPX W e -90 +KPX W eacute -90 +KPX W ecaron -90 +KPX W ecircumflex -90 +KPX W edieresis -50 +KPX W edotaccent -90 +KPX W egrave -50 +KPX W emacron -50 +KPX W eogonek -90 +KPX W hyphen -50 +KPX W i -37 +KPX W iacute -37 +KPX W iogonek -37 +KPX W o -80 +KPX W oacute -80 +KPX W ocircumflex -80 +KPX W odieresis -80 +KPX W ograve -80 +KPX W ohungarumlaut -80 +KPX W omacron -80 +KPX W oslash -80 +KPX W otilde -80 +KPX W period -74 +KPX W semicolon -55 +KPX W u -55 +KPX W uacute -55 +KPX W ucircumflex -55 +KPX W udieresis -55 +KPX W ugrave -55 +KPX W uhungarumlaut -55 +KPX W umacron -55 +KPX W uogonek -55 +KPX W uring -55 +KPX W y -55 +KPX W yacute -55 +KPX W ydieresis -55 +KPX Y A -74 +KPX Y Aacute -74 +KPX Y Abreve -74 +KPX Y Acircumflex -74 +KPX Y Adieresis -74 +KPX Y Agrave -74 +KPX Y Amacron -74 +KPX Y Aogonek -74 +KPX Y Aring -74 +KPX Y Atilde -74 +KPX Y O -25 +KPX Y Oacute -25 +KPX Y Ocircumflex -25 +KPX Y Odieresis -25 +KPX Y Ograve -25 +KPX Y Ohungarumlaut -25 +KPX Y Omacron -25 +KPX Y Oslash -25 +KPX Y Otilde -25 +KPX Y a -92 +KPX Y aacute -92 +KPX Y abreve -92 +KPX Y acircumflex -92 +KPX Y adieresis -92 +KPX Y agrave -92 +KPX Y amacron -92 +KPX Y aogonek -92 +KPX Y aring -92 +KPX Y atilde -92 +KPX Y colon -92 +KPX Y comma -92 +KPX Y e -111 +KPX Y eacute -111 +KPX Y ecaron -111 +KPX Y ecircumflex -71 +KPX Y edieresis -71 +KPX Y edotaccent -111 +KPX Y egrave -71 +KPX Y emacron -71 +KPX Y eogonek -111 +KPX Y hyphen -92 +KPX Y i -55 +KPX Y iacute -55 +KPX Y iogonek -55 +KPX Y o -111 +KPX Y oacute -111 +KPX Y ocircumflex -111 +KPX Y odieresis -111 +KPX Y ograve -111 +KPX Y ohungarumlaut -111 +KPX Y omacron -111 +KPX Y oslash -111 +KPX Y otilde -111 +KPX Y period -74 +KPX Y semicolon -92 +KPX Y u -92 +KPX Y uacute -92 +KPX Y ucircumflex -92 +KPX Y udieresis -92 +KPX Y ugrave -92 +KPX Y uhungarumlaut -92 +KPX Y umacron -92 +KPX Y uogonek -92 +KPX Y uring -92 +KPX Yacute A -74 +KPX Yacute Aacute -74 +KPX Yacute Abreve -74 +KPX Yacute Acircumflex -74 +KPX Yacute Adieresis -74 +KPX Yacute Agrave -74 +KPX Yacute Amacron -74 +KPX Yacute Aogonek -74 +KPX Yacute Aring -74 +KPX Yacute Atilde -74 +KPX Yacute O -25 +KPX Yacute Oacute -25 +KPX Yacute Ocircumflex -25 +KPX Yacute Odieresis -25 +KPX Yacute Ograve -25 +KPX Yacute Ohungarumlaut -25 +KPX Yacute Omacron -25 +KPX Yacute Oslash -25 +KPX Yacute Otilde -25 +KPX Yacute a -92 +KPX Yacute aacute -92 +KPX Yacute abreve -92 +KPX Yacute acircumflex -92 +KPX Yacute adieresis -92 +KPX Yacute agrave -92 +KPX Yacute amacron -92 +KPX Yacute aogonek -92 +KPX Yacute aring -92 +KPX Yacute atilde -92 +KPX Yacute colon -92 +KPX Yacute comma -92 +KPX Yacute e -111 +KPX Yacute eacute -111 +KPX Yacute ecaron -111 +KPX Yacute ecircumflex -71 +KPX Yacute edieresis -71 +KPX Yacute edotaccent -111 +KPX Yacute egrave -71 +KPX Yacute emacron -71 +KPX Yacute eogonek -111 +KPX Yacute hyphen -92 +KPX Yacute i -55 +KPX Yacute iacute -55 +KPX Yacute iogonek -55 +KPX Yacute o -111 +KPX Yacute oacute -111 +KPX Yacute ocircumflex -111 +KPX Yacute odieresis -111 +KPX Yacute ograve -111 +KPX Yacute ohungarumlaut -111 +KPX Yacute omacron -111 +KPX Yacute oslash -111 +KPX Yacute otilde -111 +KPX Yacute period -74 +KPX Yacute semicolon -92 +KPX Yacute u -92 +KPX Yacute uacute -92 +KPX Yacute ucircumflex -92 +KPX Yacute udieresis -92 +KPX Yacute ugrave -92 +KPX Yacute uhungarumlaut -92 +KPX Yacute umacron -92 +KPX Yacute uogonek -92 +KPX Yacute uring -92 +KPX Ydieresis A -74 +KPX Ydieresis Aacute -74 +KPX Ydieresis Abreve -74 +KPX Ydieresis Acircumflex -74 +KPX Ydieresis Adieresis -74 +KPX Ydieresis Agrave -74 +KPX Ydieresis Amacron -74 +KPX Ydieresis Aogonek -74 +KPX Ydieresis Aring -74 +KPX Ydieresis Atilde -74 +KPX Ydieresis O -25 +KPX Ydieresis Oacute -25 +KPX Ydieresis Ocircumflex -25 +KPX Ydieresis Odieresis -25 +KPX Ydieresis Ograve -25 +KPX Ydieresis Ohungarumlaut -25 +KPX Ydieresis Omacron -25 +KPX Ydieresis Oslash -25 +KPX Ydieresis Otilde -25 +KPX Ydieresis a -92 +KPX Ydieresis aacute -92 +KPX Ydieresis abreve -92 +KPX Ydieresis acircumflex -92 +KPX Ydieresis adieresis -92 +KPX Ydieresis agrave -92 +KPX Ydieresis amacron -92 +KPX Ydieresis aogonek -92 +KPX Ydieresis aring -92 +KPX Ydieresis atilde -92 +KPX Ydieresis colon -92 +KPX Ydieresis comma -92 +KPX Ydieresis e -111 +KPX Ydieresis eacute -111 +KPX Ydieresis ecaron -111 +KPX Ydieresis ecircumflex -71 +KPX Ydieresis edieresis -71 +KPX Ydieresis edotaccent -111 +KPX Ydieresis egrave -71 +KPX Ydieresis emacron -71 +KPX Ydieresis eogonek -111 +KPX Ydieresis hyphen -92 +KPX Ydieresis i -55 +KPX Ydieresis iacute -55 +KPX Ydieresis iogonek -55 +KPX Ydieresis o -111 +KPX Ydieresis oacute -111 +KPX Ydieresis ocircumflex -111 +KPX Ydieresis odieresis -111 +KPX Ydieresis ograve -111 +KPX Ydieresis ohungarumlaut -111 +KPX Ydieresis omacron -111 +KPX Ydieresis oslash -111 +KPX Ydieresis otilde -111 +KPX Ydieresis period -74 +KPX Ydieresis semicolon -92 +KPX Ydieresis u -92 +KPX Ydieresis uacute -92 +KPX Ydieresis ucircumflex -92 +KPX Ydieresis udieresis -92 +KPX Ydieresis ugrave -92 +KPX Ydieresis uhungarumlaut -92 +KPX Ydieresis umacron -92 +KPX Ydieresis uogonek -92 +KPX Ydieresis uring -92 +KPX b b -10 +KPX b period -40 +KPX b u -20 +KPX b uacute -20 +KPX b ucircumflex -20 +KPX b udieresis -20 +KPX b ugrave -20 +KPX b uhungarumlaut -20 +KPX b umacron -20 +KPX b uogonek -20 +KPX b uring -20 +KPX c h -10 +KPX c k -10 +KPX c kcommaaccent -10 +KPX cacute h -10 +KPX cacute k -10 +KPX cacute kcommaaccent -10 +KPX ccaron h -10 +KPX ccaron k -10 +KPX ccaron kcommaaccent -10 +KPX ccedilla h -10 +KPX ccedilla k -10 +KPX ccedilla kcommaaccent -10 +KPX comma quotedblright -95 +KPX comma quoteright -95 +KPX e b -10 +KPX eacute b -10 +KPX ecaron b -10 +KPX ecircumflex b -10 +KPX edieresis b -10 +KPX edotaccent b -10 +KPX egrave b -10 +KPX emacron b -10 +KPX eogonek b -10 +KPX f comma -10 +KPX f dotlessi -30 +KPX f e -10 +KPX f eacute -10 +KPX f edotaccent -10 +KPX f eogonek -10 +KPX f f -18 +KPX f o -10 +KPX f oacute -10 +KPX f ocircumflex -10 +KPX f ograve -10 +KPX f ohungarumlaut -10 +KPX f oslash -10 +KPX f otilde -10 +KPX f period -10 +KPX f quoteright 55 +KPX k e -30 +KPX k eacute -30 +KPX k ecaron -30 +KPX k ecircumflex -30 +KPX k edieresis -30 +KPX k edotaccent -30 +KPX k egrave -30 +KPX k emacron -30 +KPX k eogonek -30 +KPX k o -10 +KPX k oacute -10 +KPX k ocircumflex -10 +KPX k odieresis -10 +KPX k ograve -10 +KPX k ohungarumlaut -10 +KPX k omacron -10 +KPX k oslash -10 +KPX k otilde -10 +KPX kcommaaccent e -30 +KPX kcommaaccent eacute -30 +KPX kcommaaccent ecaron -30 +KPX kcommaaccent ecircumflex -30 +KPX kcommaaccent edieresis -30 +KPX kcommaaccent edotaccent -30 +KPX kcommaaccent egrave -30 +KPX kcommaaccent emacron -30 +KPX kcommaaccent eogonek -30 +KPX kcommaaccent o -10 +KPX kcommaaccent oacute -10 +KPX kcommaaccent ocircumflex -10 +KPX kcommaaccent odieresis -10 +KPX kcommaaccent ograve -10 +KPX kcommaaccent ohungarumlaut -10 +KPX kcommaaccent omacron -10 +KPX kcommaaccent oslash -10 +KPX kcommaaccent otilde -10 +KPX n v -40 +KPX nacute v -40 +KPX ncaron v -40 +KPX ncommaaccent v -40 +KPX ntilde v -40 +KPX o v -15 +KPX o w -25 +KPX o x -10 +KPX o y -10 +KPX o yacute -10 +KPX o ydieresis -10 +KPX oacute v -15 +KPX oacute w -25 +KPX oacute x -10 +KPX oacute y -10 +KPX oacute yacute -10 +KPX oacute ydieresis -10 +KPX ocircumflex v -15 +KPX ocircumflex w -25 +KPX ocircumflex x -10 +KPX ocircumflex y -10 +KPX ocircumflex yacute -10 +KPX ocircumflex ydieresis -10 +KPX odieresis v -15 +KPX odieresis w -25 +KPX odieresis x -10 +KPX odieresis y -10 +KPX odieresis yacute -10 +KPX odieresis ydieresis -10 +KPX ograve v -15 +KPX ograve w -25 +KPX ograve x -10 +KPX ograve y -10 +KPX ograve yacute -10 +KPX ograve ydieresis -10 +KPX ohungarumlaut v -15 +KPX ohungarumlaut w -25 +KPX ohungarumlaut x -10 +KPX ohungarumlaut y -10 +KPX ohungarumlaut yacute -10 +KPX ohungarumlaut ydieresis -10 +KPX omacron v -15 +KPX omacron w -25 +KPX omacron x -10 +KPX omacron y -10 +KPX omacron yacute -10 +KPX omacron ydieresis -10 +KPX oslash v -15 +KPX oslash w -25 +KPX oslash x -10 +KPX oslash y -10 +KPX oslash yacute -10 +KPX oslash ydieresis -10 +KPX otilde v -15 +KPX otilde w -25 +KPX otilde x -10 +KPX otilde y -10 +KPX otilde yacute -10 +KPX otilde ydieresis -10 +KPX period quotedblright -95 +KPX period quoteright -95 +KPX quoteleft quoteleft -74 +KPX quoteright d -15 +KPX quoteright dcroat -15 +KPX quoteright quoteright -74 +KPX quoteright r -15 +KPX quoteright racute -15 +KPX quoteright rcaron -15 +KPX quoteright rcommaaccent -15 +KPX quoteright s -74 +KPX quoteright sacute -74 +KPX quoteright scaron -74 +KPX quoteright scedilla -74 +KPX quoteright scommaaccent -74 +KPX quoteright space -74 +KPX quoteright t -37 +KPX quoteright tcommaaccent -37 +KPX quoteright v -15 +KPX r comma -65 +KPX r period -65 +KPX racute comma -65 +KPX racute period -65 +KPX rcaron comma -65 +KPX rcaron period -65 +KPX rcommaaccent comma -65 +KPX rcommaaccent period -65 +KPX space A -37 +KPX space Aacute -37 +KPX space Abreve -37 +KPX space Acircumflex -37 +KPX space Adieresis -37 +KPX space Agrave -37 +KPX space Amacron -37 +KPX space Aogonek -37 +KPX space Aring -37 +KPX space Atilde -37 +KPX space V -70 +KPX space W -70 +KPX space Y -70 +KPX space Yacute -70 +KPX space Ydieresis -70 +KPX v comma -37 +KPX v e -15 +KPX v eacute -15 +KPX v ecaron -15 +KPX v ecircumflex -15 +KPX v edieresis -15 +KPX v edotaccent -15 +KPX v egrave -15 +KPX v emacron -15 +KPX v eogonek -15 +KPX v o -15 +KPX v oacute -15 +KPX v ocircumflex -15 +KPX v odieresis -15 +KPX v ograve -15 +KPX v ohungarumlaut -15 +KPX v omacron -15 +KPX v oslash -15 +KPX v otilde -15 +KPX v period -37 +KPX w a -10 +KPX w aacute -10 +KPX w abreve -10 +KPX w acircumflex -10 +KPX w adieresis -10 +KPX w agrave -10 +KPX w amacron -10 +KPX w aogonek -10 +KPX w aring -10 +KPX w atilde -10 +KPX w comma -37 +KPX w e -10 +KPX w eacute -10 +KPX w ecaron -10 +KPX w ecircumflex -10 +KPX w edieresis -10 +KPX w edotaccent -10 +KPX w egrave -10 +KPX w emacron -10 +KPX w eogonek -10 +KPX w o -15 +KPX w oacute -15 +KPX w ocircumflex -15 +KPX w odieresis -15 +KPX w ograve -15 +KPX w ohungarumlaut -15 +KPX w omacron -15 +KPX w oslash -15 +KPX w otilde -15 +KPX w period -37 +KPX x e -10 +KPX x eacute -10 +KPX x ecaron -10 +KPX x ecircumflex -10 +KPX x edieresis -10 +KPX x edotaccent -10 +KPX x egrave -10 +KPX x emacron -10 +KPX x eogonek -10 +KPX y comma -37 +KPX y period -37 +KPX yacute comma -37 +KPX yacute period -37 +KPX ydieresis comma -37 +KPX ydieresis period -37 +EndKernPairs +EndKernData +EndFontMetrics diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/Times-Italic.afm b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/Times-Italic.afm new file mode 100755 index 00000000..b0eaee40 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/Times-Italic.afm @@ -0,0 +1,2667 @@ +StartFontMetrics 4.1 +Comment Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved. +Comment Creation Date: Thu May 1 12:56:55 1997 +Comment UniqueID 43067 +Comment VMusage 47727 58752 +FontName Times-Italic +FullName Times Italic +FamilyName Times +Weight Medium +ItalicAngle -15.5 +IsFixedPitch false +CharacterSet ExtendedRoman +FontBBox -169 -217 1010 883 +UnderlinePosition -100 +UnderlineThickness 50 +Version 002.000 +Notice Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.Times is a trademark of Linotype-Hell AG and/or its subsidiaries. +EncodingScheme AdobeStandardEncoding +CapHeight 653 +XHeight 441 +Ascender 683 +Descender -217 +StdHW 32 +StdVW 76 +StartCharMetrics 315 +C 32 ; WX 250 ; N space ; B 0 0 0 0 ; +C 33 ; WX 333 ; N exclam ; B 39 -11 302 667 ; +C 34 ; WX 420 ; N quotedbl ; B 144 421 432 666 ; +C 35 ; WX 500 ; N numbersign ; B 2 0 540 676 ; +C 36 ; WX 500 ; N dollar ; B 31 -89 497 731 ; +C 37 ; WX 833 ; N percent ; B 79 -13 790 676 ; +C 38 ; WX 778 ; N ampersand ; B 76 -18 723 666 ; +C 39 ; WX 333 ; N quoteright ; B 151 436 290 666 ; +C 40 ; WX 333 ; N parenleft ; B 42 -181 315 669 ; +C 41 ; WX 333 ; N parenright ; B 16 -180 289 669 ; +C 42 ; WX 500 ; N asterisk ; B 128 255 492 666 ; +C 43 ; WX 675 ; N plus ; B 86 0 590 506 ; +C 44 ; WX 250 ; N comma ; B -4 -129 135 101 ; +C 45 ; WX 333 ; N hyphen ; B 49 192 282 255 ; +C 46 ; WX 250 ; N period ; B 27 -11 138 100 ; +C 47 ; WX 278 ; N slash ; B -65 -18 386 666 ; +C 48 ; WX 500 ; N zero ; B 32 -7 497 676 ; +C 49 ; WX 500 ; N one ; B 49 0 409 676 ; +C 50 ; WX 500 ; N two ; B 12 0 452 676 ; +C 51 ; WX 500 ; N three ; B 15 -7 465 676 ; +C 52 ; WX 500 ; N four ; B 1 0 479 676 ; +C 53 ; WX 500 ; N five ; B 15 -7 491 666 ; +C 54 ; WX 500 ; N six ; B 30 -7 521 686 ; +C 55 ; WX 500 ; N seven ; B 75 -8 537 666 ; +C 56 ; WX 500 ; N eight ; B 30 -7 493 676 ; +C 57 ; WX 500 ; N nine ; B 23 -17 492 676 ; +C 58 ; WX 333 ; N colon ; B 50 -11 261 441 ; +C 59 ; WX 333 ; N semicolon ; B 27 -129 261 441 ; +C 60 ; WX 675 ; N less ; B 84 -8 592 514 ; +C 61 ; WX 675 ; N equal ; B 86 120 590 386 ; +C 62 ; WX 675 ; N greater ; B 84 -8 592 514 ; +C 63 ; WX 500 ; N question ; B 132 -12 472 664 ; +C 64 ; WX 920 ; N at ; B 118 -18 806 666 ; +C 65 ; WX 611 ; N A ; B -51 0 564 668 ; +C 66 ; WX 611 ; N B ; B -8 0 588 653 ; +C 67 ; WX 667 ; N C ; B 66 -18 689 666 ; +C 68 ; WX 722 ; N D ; B -8 0 700 653 ; +C 69 ; WX 611 ; N E ; B -1 0 634 653 ; +C 70 ; WX 611 ; N F ; B 8 0 645 653 ; +C 71 ; WX 722 ; N G ; B 52 -18 722 666 ; +C 72 ; WX 722 ; N H ; B -8 0 767 653 ; +C 73 ; WX 333 ; N I ; B -8 0 384 653 ; +C 74 ; WX 444 ; N J ; B -6 -18 491 653 ; +C 75 ; WX 667 ; N K ; B 7 0 722 653 ; +C 76 ; WX 556 ; N L ; B -8 0 559 653 ; +C 77 ; WX 833 ; N M ; B -18 0 873 653 ; +C 78 ; WX 667 ; N N ; B -20 -15 727 653 ; +C 79 ; WX 722 ; N O ; B 60 -18 699 666 ; +C 80 ; WX 611 ; N P ; B 0 0 605 653 ; +C 81 ; WX 722 ; N Q ; B 59 -182 699 666 ; +C 82 ; WX 611 ; N R ; B -13 0 588 653 ; +C 83 ; WX 500 ; N S ; B 17 -18 508 667 ; +C 84 ; WX 556 ; N T ; B 59 0 633 653 ; +C 85 ; WX 722 ; N U ; B 102 -18 765 653 ; +C 86 ; WX 611 ; N V ; B 76 -18 688 653 ; +C 87 ; WX 833 ; N W ; B 71 -18 906 653 ; +C 88 ; WX 611 ; N X ; B -29 0 655 653 ; +C 89 ; WX 556 ; N Y ; B 78 0 633 653 ; +C 90 ; WX 556 ; N Z ; B -6 0 606 653 ; +C 91 ; WX 389 ; N bracketleft ; B 21 -153 391 663 ; +C 92 ; WX 278 ; N backslash ; B -41 -18 319 666 ; +C 93 ; WX 389 ; N bracketright ; B 12 -153 382 663 ; +C 94 ; WX 422 ; N asciicircum ; B 0 301 422 666 ; +C 95 ; WX 500 ; N underscore ; B 0 -125 500 -75 ; +C 96 ; WX 333 ; N quoteleft ; B 171 436 310 666 ; +C 97 ; WX 500 ; N a ; B 17 -11 476 441 ; +C 98 ; WX 500 ; N b ; B 23 -11 473 683 ; +C 99 ; WX 444 ; N c ; B 30 -11 425 441 ; +C 100 ; WX 500 ; N d ; B 15 -13 527 683 ; +C 101 ; WX 444 ; N e ; B 31 -11 412 441 ; +C 102 ; WX 278 ; N f ; B -147 -207 424 678 ; L i fi ; L l fl ; +C 103 ; WX 500 ; N g ; B 8 -206 472 441 ; +C 104 ; WX 500 ; N h ; B 19 -9 478 683 ; +C 105 ; WX 278 ; N i ; B 49 -11 264 654 ; +C 106 ; WX 278 ; N j ; B -124 -207 276 654 ; +C 107 ; WX 444 ; N k ; B 14 -11 461 683 ; +C 108 ; WX 278 ; N l ; B 41 -11 279 683 ; +C 109 ; WX 722 ; N m ; B 12 -9 704 441 ; +C 110 ; WX 500 ; N n ; B 14 -9 474 441 ; +C 111 ; WX 500 ; N o ; B 27 -11 468 441 ; +C 112 ; WX 500 ; N p ; B -75 -205 469 441 ; +C 113 ; WX 500 ; N q ; B 25 -209 483 441 ; +C 114 ; WX 389 ; N r ; B 45 0 412 441 ; +C 115 ; WX 389 ; N s ; B 16 -13 366 442 ; +C 116 ; WX 278 ; N t ; B 37 -11 296 546 ; +C 117 ; WX 500 ; N u ; B 42 -11 475 441 ; +C 118 ; WX 444 ; N v ; B 21 -18 426 441 ; +C 119 ; WX 667 ; N w ; B 16 -18 648 441 ; +C 120 ; WX 444 ; N x ; B -27 -11 447 441 ; +C 121 ; WX 444 ; N y ; B -24 -206 426 441 ; +C 122 ; WX 389 ; N z ; B -2 -81 380 428 ; +C 123 ; WX 400 ; N braceleft ; B 51 -177 407 687 ; +C 124 ; WX 275 ; N bar ; B 105 -217 171 783 ; +C 125 ; WX 400 ; N braceright ; B -7 -177 349 687 ; +C 126 ; WX 541 ; N asciitilde ; B 40 183 502 323 ; +C 161 ; WX 389 ; N exclamdown ; B 59 -205 322 473 ; +C 162 ; WX 500 ; N cent ; B 77 -143 472 560 ; +C 163 ; WX 500 ; N sterling ; B 10 -6 517 670 ; +C 164 ; WX 167 ; N fraction ; B -169 -10 337 676 ; +C 165 ; WX 500 ; N yen ; B 27 0 603 653 ; +C 166 ; WX 500 ; N florin ; B 25 -182 507 682 ; +C 167 ; WX 500 ; N section ; B 53 -162 461 666 ; +C 168 ; WX 500 ; N currency ; B -22 53 522 597 ; +C 169 ; WX 214 ; N quotesingle ; B 132 421 241 666 ; +C 170 ; WX 556 ; N quotedblleft ; B 166 436 514 666 ; +C 171 ; WX 500 ; N guillemotleft ; B 53 37 445 403 ; +C 172 ; WX 333 ; N guilsinglleft ; B 51 37 281 403 ; +C 173 ; WX 333 ; N guilsinglright ; B 52 37 282 403 ; +C 174 ; WX 500 ; N fi ; B -141 -207 481 681 ; +C 175 ; WX 500 ; N fl ; B -141 -204 518 682 ; +C 177 ; WX 500 ; N endash ; B -6 197 505 243 ; +C 178 ; WX 500 ; N dagger ; B 101 -159 488 666 ; +C 179 ; WX 500 ; N daggerdbl ; B 22 -143 491 666 ; +C 180 ; WX 250 ; N periodcentered ; B 70 199 181 310 ; +C 182 ; WX 523 ; N paragraph ; B 55 -123 616 653 ; +C 183 ; WX 350 ; N bullet ; B 40 191 310 461 ; +C 184 ; WX 333 ; N quotesinglbase ; B 44 -129 183 101 ; +C 185 ; WX 556 ; N quotedblbase ; B 57 -129 405 101 ; +C 186 ; WX 556 ; N quotedblright ; B 151 436 499 666 ; +C 187 ; WX 500 ; N guillemotright ; B 55 37 447 403 ; +C 188 ; WX 889 ; N ellipsis ; B 57 -11 762 100 ; +C 189 ; WX 1000 ; N perthousand ; B 25 -19 1010 706 ; +C 191 ; WX 500 ; N questiondown ; B 28 -205 368 471 ; +C 193 ; WX 333 ; N grave ; B 121 492 311 664 ; +C 194 ; WX 333 ; N acute ; B 180 494 403 664 ; +C 195 ; WX 333 ; N circumflex ; B 91 492 385 661 ; +C 196 ; WX 333 ; N tilde ; B 100 517 427 624 ; +C 197 ; WX 333 ; N macron ; B 99 532 411 583 ; +C 198 ; WX 333 ; N breve ; B 117 492 418 650 ; +C 199 ; WX 333 ; N dotaccent ; B 207 548 305 646 ; +C 200 ; WX 333 ; N dieresis ; B 107 548 405 646 ; +C 202 ; WX 333 ; N ring ; B 155 492 355 691 ; +C 203 ; WX 333 ; N cedilla ; B -30 -217 182 0 ; +C 205 ; WX 333 ; N hungarumlaut ; B 93 494 486 664 ; +C 206 ; WX 333 ; N ogonek ; B 20 -169 203 40 ; +C 207 ; WX 333 ; N caron ; B 121 492 426 661 ; +C 208 ; WX 889 ; N emdash ; B -6 197 894 243 ; +C 225 ; WX 889 ; N AE ; B -27 0 911 653 ; +C 227 ; WX 276 ; N ordfeminine ; B 42 406 352 676 ; +C 232 ; WX 556 ; N Lslash ; B -8 0 559 653 ; +C 233 ; WX 722 ; N Oslash ; B 60 -105 699 722 ; +C 234 ; WX 944 ; N OE ; B 49 -8 964 666 ; +C 235 ; WX 310 ; N ordmasculine ; B 67 406 362 676 ; +C 241 ; WX 667 ; N ae ; B 23 -11 640 441 ; +C 245 ; WX 278 ; N dotlessi ; B 49 -11 235 441 ; +C 248 ; WX 278 ; N lslash ; B 41 -11 312 683 ; +C 249 ; WX 500 ; N oslash ; B 28 -135 469 554 ; +C 250 ; WX 667 ; N oe ; B 20 -12 646 441 ; +C 251 ; WX 500 ; N germandbls ; B -168 -207 493 679 ; +C -1 ; WX 333 ; N Idieresis ; B -8 0 435 818 ; +C -1 ; WX 444 ; N eacute ; B 31 -11 459 664 ; +C -1 ; WX 500 ; N abreve ; B 17 -11 502 650 ; +C -1 ; WX 500 ; N uhungarumlaut ; B 42 -11 580 664 ; +C -1 ; WX 444 ; N ecaron ; B 31 -11 482 661 ; +C -1 ; WX 556 ; N Ydieresis ; B 78 0 633 818 ; +C -1 ; WX 675 ; N divide ; B 86 -11 590 517 ; +C -1 ; WX 556 ; N Yacute ; B 78 0 633 876 ; +C -1 ; WX 611 ; N Acircumflex ; B -51 0 564 873 ; +C -1 ; WX 500 ; N aacute ; B 17 -11 487 664 ; +C -1 ; WX 722 ; N Ucircumflex ; B 102 -18 765 873 ; +C -1 ; WX 444 ; N yacute ; B -24 -206 459 664 ; +C -1 ; WX 389 ; N scommaaccent ; B 16 -217 366 442 ; +C -1 ; WX 444 ; N ecircumflex ; B 31 -11 441 661 ; +C -1 ; WX 722 ; N Uring ; B 102 -18 765 883 ; +C -1 ; WX 722 ; N Udieresis ; B 102 -18 765 818 ; +C -1 ; WX 500 ; N aogonek ; B 17 -169 476 441 ; +C -1 ; WX 722 ; N Uacute ; B 102 -18 765 876 ; +C -1 ; WX 500 ; N uogonek ; B 42 -169 477 441 ; +C -1 ; WX 611 ; N Edieresis ; B -1 0 634 818 ; +C -1 ; WX 722 ; N Dcroat ; B -8 0 700 653 ; +C -1 ; WX 250 ; N commaaccent ; B 8 -217 133 -50 ; +C -1 ; WX 760 ; N copyright ; B 41 -18 719 666 ; +C -1 ; WX 611 ; N Emacron ; B -1 0 634 795 ; +C -1 ; WX 444 ; N ccaron ; B 30 -11 482 661 ; +C -1 ; WX 500 ; N aring ; B 17 -11 476 691 ; +C -1 ; WX 667 ; N Ncommaaccent ; B -20 -187 727 653 ; +C -1 ; WX 278 ; N lacute ; B 41 -11 395 876 ; +C -1 ; WX 500 ; N agrave ; B 17 -11 476 664 ; +C -1 ; WX 556 ; N Tcommaaccent ; B 59 -217 633 653 ; +C -1 ; WX 667 ; N Cacute ; B 66 -18 690 876 ; +C -1 ; WX 500 ; N atilde ; B 17 -11 511 624 ; +C -1 ; WX 611 ; N Edotaccent ; B -1 0 634 818 ; +C -1 ; WX 389 ; N scaron ; B 16 -13 454 661 ; +C -1 ; WX 389 ; N scedilla ; B 16 -217 366 442 ; +C -1 ; WX 278 ; N iacute ; B 49 -11 355 664 ; +C -1 ; WX 471 ; N lozenge ; B 13 0 459 724 ; +C -1 ; WX 611 ; N Rcaron ; B -13 0 588 873 ; +C -1 ; WX 722 ; N Gcommaaccent ; B 52 -217 722 666 ; +C -1 ; WX 500 ; N ucircumflex ; B 42 -11 475 661 ; +C -1 ; WX 500 ; N acircumflex ; B 17 -11 476 661 ; +C -1 ; WX 611 ; N Amacron ; B -51 0 564 795 ; +C -1 ; WX 389 ; N rcaron ; B 45 0 434 661 ; +C -1 ; WX 444 ; N ccedilla ; B 30 -217 425 441 ; +C -1 ; WX 556 ; N Zdotaccent ; B -6 0 606 818 ; +C -1 ; WX 611 ; N Thorn ; B 0 0 569 653 ; +C -1 ; WX 722 ; N Omacron ; B 60 -18 699 795 ; +C -1 ; WX 611 ; N Racute ; B -13 0 588 876 ; +C -1 ; WX 500 ; N Sacute ; B 17 -18 508 876 ; +C -1 ; WX 544 ; N dcaron ; B 15 -13 658 683 ; +C -1 ; WX 722 ; N Umacron ; B 102 -18 765 795 ; +C -1 ; WX 500 ; N uring ; B 42 -11 475 691 ; +C -1 ; WX 300 ; N threesuperior ; B 43 268 339 676 ; +C -1 ; WX 722 ; N Ograve ; B 60 -18 699 876 ; +C -1 ; WX 611 ; N Agrave ; B -51 0 564 876 ; +C -1 ; WX 611 ; N Abreve ; B -51 0 564 862 ; +C -1 ; WX 675 ; N multiply ; B 93 8 582 497 ; +C -1 ; WX 500 ; N uacute ; B 42 -11 477 664 ; +C -1 ; WX 556 ; N Tcaron ; B 59 0 633 873 ; +C -1 ; WX 476 ; N partialdiff ; B 17 -38 459 710 ; +C -1 ; WX 444 ; N ydieresis ; B -24 -206 441 606 ; +C -1 ; WX 667 ; N Nacute ; B -20 -15 727 876 ; +C -1 ; WX 278 ; N icircumflex ; B 33 -11 327 661 ; +C -1 ; WX 611 ; N Ecircumflex ; B -1 0 634 873 ; +C -1 ; WX 500 ; N adieresis ; B 17 -11 489 606 ; +C -1 ; WX 444 ; N edieresis ; B 31 -11 451 606 ; +C -1 ; WX 444 ; N cacute ; B 30 -11 459 664 ; +C -1 ; WX 500 ; N nacute ; B 14 -9 477 664 ; +C -1 ; WX 500 ; N umacron ; B 42 -11 485 583 ; +C -1 ; WX 667 ; N Ncaron ; B -20 -15 727 873 ; +C -1 ; WX 333 ; N Iacute ; B -8 0 433 876 ; +C -1 ; WX 675 ; N plusminus ; B 86 0 590 506 ; +C -1 ; WX 275 ; N brokenbar ; B 105 -142 171 708 ; +C -1 ; WX 760 ; N registered ; B 41 -18 719 666 ; +C -1 ; WX 722 ; N Gbreve ; B 52 -18 722 862 ; +C -1 ; WX 333 ; N Idotaccent ; B -8 0 384 818 ; +C -1 ; WX 600 ; N summation ; B 15 -10 585 706 ; +C -1 ; WX 611 ; N Egrave ; B -1 0 634 876 ; +C -1 ; WX 389 ; N racute ; B 45 0 431 664 ; +C -1 ; WX 500 ; N omacron ; B 27 -11 495 583 ; +C -1 ; WX 556 ; N Zacute ; B -6 0 606 876 ; +C -1 ; WX 556 ; N Zcaron ; B -6 0 606 873 ; +C -1 ; WX 549 ; N greaterequal ; B 26 0 523 658 ; +C -1 ; WX 722 ; N Eth ; B -8 0 700 653 ; +C -1 ; WX 667 ; N Ccedilla ; B 66 -217 689 666 ; +C -1 ; WX 278 ; N lcommaaccent ; B 22 -217 279 683 ; +C -1 ; WX 300 ; N tcaron ; B 37 -11 407 681 ; +C -1 ; WX 444 ; N eogonek ; B 31 -169 412 441 ; +C -1 ; WX 722 ; N Uogonek ; B 102 -184 765 653 ; +C -1 ; WX 611 ; N Aacute ; B -51 0 564 876 ; +C -1 ; WX 611 ; N Adieresis ; B -51 0 564 818 ; +C -1 ; WX 444 ; N egrave ; B 31 -11 412 664 ; +C -1 ; WX 389 ; N zacute ; B -2 -81 431 664 ; +C -1 ; WX 278 ; N iogonek ; B 49 -169 264 654 ; +C -1 ; WX 722 ; N Oacute ; B 60 -18 699 876 ; +C -1 ; WX 500 ; N oacute ; B 27 -11 487 664 ; +C -1 ; WX 500 ; N amacron ; B 17 -11 495 583 ; +C -1 ; WX 389 ; N sacute ; B 16 -13 431 664 ; +C -1 ; WX 278 ; N idieresis ; B 49 -11 352 606 ; +C -1 ; WX 722 ; N Ocircumflex ; B 60 -18 699 873 ; +C -1 ; WX 722 ; N Ugrave ; B 102 -18 765 876 ; +C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ; +C -1 ; WX 500 ; N thorn ; B -75 -205 469 683 ; +C -1 ; WX 300 ; N twosuperior ; B 33 271 324 676 ; +C -1 ; WX 722 ; N Odieresis ; B 60 -18 699 818 ; +C -1 ; WX 500 ; N mu ; B -30 -209 497 428 ; +C -1 ; WX 278 ; N igrave ; B 49 -11 284 664 ; +C -1 ; WX 500 ; N ohungarumlaut ; B 27 -11 590 664 ; +C -1 ; WX 611 ; N Eogonek ; B -1 -169 634 653 ; +C -1 ; WX 500 ; N dcroat ; B 15 -13 572 683 ; +C -1 ; WX 750 ; N threequarters ; B 23 -10 736 676 ; +C -1 ; WX 500 ; N Scedilla ; B 17 -217 508 667 ; +C -1 ; WX 300 ; N lcaron ; B 41 -11 407 683 ; +C -1 ; WX 667 ; N Kcommaaccent ; B 7 -217 722 653 ; +C -1 ; WX 556 ; N Lacute ; B -8 0 559 876 ; +C -1 ; WX 980 ; N trademark ; B 30 247 957 653 ; +C -1 ; WX 444 ; N edotaccent ; B 31 -11 412 606 ; +C -1 ; WX 333 ; N Igrave ; B -8 0 384 876 ; +C -1 ; WX 333 ; N Imacron ; B -8 0 441 795 ; +C -1 ; WX 611 ; N Lcaron ; B -8 0 586 653 ; +C -1 ; WX 750 ; N onehalf ; B 34 -10 749 676 ; +C -1 ; WX 549 ; N lessequal ; B 26 0 523 658 ; +C -1 ; WX 500 ; N ocircumflex ; B 27 -11 468 661 ; +C -1 ; WX 500 ; N ntilde ; B 14 -9 476 624 ; +C -1 ; WX 722 ; N Uhungarumlaut ; B 102 -18 765 876 ; +C -1 ; WX 611 ; N Eacute ; B -1 0 634 876 ; +C -1 ; WX 444 ; N emacron ; B 31 -11 457 583 ; +C -1 ; WX 500 ; N gbreve ; B 8 -206 487 650 ; +C -1 ; WX 750 ; N onequarter ; B 33 -10 736 676 ; +C -1 ; WX 500 ; N Scaron ; B 17 -18 520 873 ; +C -1 ; WX 500 ; N Scommaaccent ; B 17 -217 508 667 ; +C -1 ; WX 722 ; N Ohungarumlaut ; B 60 -18 699 876 ; +C -1 ; WX 400 ; N degree ; B 101 390 387 676 ; +C -1 ; WX 500 ; N ograve ; B 27 -11 468 664 ; +C -1 ; WX 667 ; N Ccaron ; B 66 -18 689 873 ; +C -1 ; WX 500 ; N ugrave ; B 42 -11 475 664 ; +C -1 ; WX 453 ; N radical ; B 2 -60 452 768 ; +C -1 ; WX 722 ; N Dcaron ; B -8 0 700 873 ; +C -1 ; WX 389 ; N rcommaaccent ; B -3 -217 412 441 ; +C -1 ; WX 667 ; N Ntilde ; B -20 -15 727 836 ; +C -1 ; WX 500 ; N otilde ; B 27 -11 496 624 ; +C -1 ; WX 611 ; N Rcommaaccent ; B -13 -187 588 653 ; +C -1 ; WX 556 ; N Lcommaaccent ; B -8 -217 559 653 ; +C -1 ; WX 611 ; N Atilde ; B -51 0 566 836 ; +C -1 ; WX 611 ; N Aogonek ; B -51 -169 566 668 ; +C -1 ; WX 611 ; N Aring ; B -51 0 564 883 ; +C -1 ; WX 722 ; N Otilde ; B 60 -18 699 836 ; +C -1 ; WX 389 ; N zdotaccent ; B -2 -81 380 606 ; +C -1 ; WX 611 ; N Ecaron ; B -1 0 634 873 ; +C -1 ; WX 333 ; N Iogonek ; B -8 -169 384 653 ; +C -1 ; WX 444 ; N kcommaaccent ; B 14 -187 461 683 ; +C -1 ; WX 675 ; N minus ; B 86 220 590 286 ; +C -1 ; WX 333 ; N Icircumflex ; B -8 0 425 873 ; +C -1 ; WX 500 ; N ncaron ; B 14 -9 510 661 ; +C -1 ; WX 278 ; N tcommaaccent ; B 2 -217 296 546 ; +C -1 ; WX 675 ; N logicalnot ; B 86 108 590 386 ; +C -1 ; WX 500 ; N odieresis ; B 27 -11 489 606 ; +C -1 ; WX 500 ; N udieresis ; B 42 -11 479 606 ; +C -1 ; WX 549 ; N notequal ; B 12 -29 537 541 ; +C -1 ; WX 500 ; N gcommaaccent ; B 8 -206 472 706 ; +C -1 ; WX 500 ; N eth ; B 27 -11 482 683 ; +C -1 ; WX 389 ; N zcaron ; B -2 -81 434 661 ; +C -1 ; WX 500 ; N ncommaaccent ; B 14 -187 474 441 ; +C -1 ; WX 300 ; N onesuperior ; B 43 271 284 676 ; +C -1 ; WX 278 ; N imacron ; B 46 -11 311 583 ; +C -1 ; WX 500 ; N Euro ; B 0 0 0 0 ; +EndCharMetrics +StartKernData +StartKernPairs 2321 +KPX A C -30 +KPX A Cacute -30 +KPX A Ccaron -30 +KPX A Ccedilla -30 +KPX A G -35 +KPX A Gbreve -35 +KPX A Gcommaaccent -35 +KPX A O -40 +KPX A Oacute -40 +KPX A Ocircumflex -40 +KPX A Odieresis -40 +KPX A Ograve -40 +KPX A Ohungarumlaut -40 +KPX A Omacron -40 +KPX A Oslash -40 +KPX A Otilde -40 +KPX A Q -40 +KPX A T -37 +KPX A Tcaron -37 +KPX A Tcommaaccent -37 +KPX A U -50 +KPX A Uacute -50 +KPX A Ucircumflex -50 +KPX A Udieresis -50 +KPX A Ugrave -50 +KPX A Uhungarumlaut -50 +KPX A Umacron -50 +KPX A Uogonek -50 +KPX A Uring -50 +KPX A V -105 +KPX A W -95 +KPX A Y -55 +KPX A Yacute -55 +KPX A Ydieresis -55 +KPX A quoteright -37 +KPX A u -20 +KPX A uacute -20 +KPX A ucircumflex -20 +KPX A udieresis -20 +KPX A ugrave -20 +KPX A uhungarumlaut -20 +KPX A umacron -20 +KPX A uogonek -20 +KPX A uring -20 +KPX A v -55 +KPX A w -55 +KPX A y -55 +KPX A yacute -55 +KPX A ydieresis -55 +KPX Aacute C -30 +KPX Aacute Cacute -30 +KPX Aacute Ccaron -30 +KPX Aacute Ccedilla -30 +KPX Aacute G -35 +KPX Aacute Gbreve -35 +KPX Aacute Gcommaaccent -35 +KPX Aacute O -40 +KPX Aacute Oacute -40 +KPX Aacute Ocircumflex -40 +KPX Aacute Odieresis -40 +KPX Aacute Ograve -40 +KPX Aacute Ohungarumlaut -40 +KPX Aacute Omacron -40 +KPX Aacute Oslash -40 +KPX Aacute Otilde -40 +KPX Aacute Q -40 +KPX Aacute T -37 +KPX Aacute Tcaron -37 +KPX Aacute Tcommaaccent -37 +KPX Aacute U -50 +KPX Aacute Uacute -50 +KPX Aacute Ucircumflex -50 +KPX Aacute Udieresis -50 +KPX Aacute Ugrave -50 +KPX Aacute Uhungarumlaut -50 +KPX Aacute Umacron -50 +KPX Aacute Uogonek -50 +KPX Aacute Uring -50 +KPX Aacute V -105 +KPX Aacute W -95 +KPX Aacute Y -55 +KPX Aacute Yacute -55 +KPX Aacute Ydieresis -55 +KPX Aacute quoteright -37 +KPX Aacute u -20 +KPX Aacute uacute -20 +KPX Aacute ucircumflex -20 +KPX Aacute udieresis -20 +KPX Aacute ugrave -20 +KPX Aacute uhungarumlaut -20 +KPX Aacute umacron -20 +KPX Aacute uogonek -20 +KPX Aacute uring -20 +KPX Aacute v -55 +KPX Aacute w -55 +KPX Aacute y -55 +KPX Aacute yacute -55 +KPX Aacute ydieresis -55 +KPX Abreve C -30 +KPX Abreve Cacute -30 +KPX Abreve Ccaron -30 +KPX Abreve Ccedilla -30 +KPX Abreve G -35 +KPX Abreve Gbreve -35 +KPX Abreve Gcommaaccent -35 +KPX Abreve O -40 +KPX Abreve Oacute -40 +KPX Abreve Ocircumflex -40 +KPX Abreve Odieresis -40 +KPX Abreve Ograve -40 +KPX Abreve Ohungarumlaut -40 +KPX Abreve Omacron -40 +KPX Abreve Oslash -40 +KPX Abreve Otilde -40 +KPX Abreve Q -40 +KPX Abreve T -37 +KPX Abreve Tcaron -37 +KPX Abreve Tcommaaccent -37 +KPX Abreve U -50 +KPX Abreve Uacute -50 +KPX Abreve Ucircumflex -50 +KPX Abreve Udieresis -50 +KPX Abreve Ugrave -50 +KPX Abreve Uhungarumlaut -50 +KPX Abreve Umacron -50 +KPX Abreve Uogonek -50 +KPX Abreve Uring -50 +KPX Abreve V -105 +KPX Abreve W -95 +KPX Abreve Y -55 +KPX Abreve Yacute -55 +KPX Abreve Ydieresis -55 +KPX Abreve quoteright -37 +KPX Abreve u -20 +KPX Abreve uacute -20 +KPX Abreve ucircumflex -20 +KPX Abreve udieresis -20 +KPX Abreve ugrave -20 +KPX Abreve uhungarumlaut -20 +KPX Abreve umacron -20 +KPX Abreve uogonek -20 +KPX Abreve uring -20 +KPX Abreve v -55 +KPX Abreve w -55 +KPX Abreve y -55 +KPX Abreve yacute -55 +KPX Abreve ydieresis -55 +KPX Acircumflex C -30 +KPX Acircumflex Cacute -30 +KPX Acircumflex Ccaron -30 +KPX Acircumflex Ccedilla -30 +KPX Acircumflex G -35 +KPX Acircumflex Gbreve -35 +KPX Acircumflex Gcommaaccent -35 +KPX Acircumflex O -40 +KPX Acircumflex Oacute -40 +KPX Acircumflex Ocircumflex -40 +KPX Acircumflex Odieresis -40 +KPX Acircumflex Ograve -40 +KPX Acircumflex Ohungarumlaut -40 +KPX Acircumflex Omacron -40 +KPX Acircumflex Oslash -40 +KPX Acircumflex Otilde -40 +KPX Acircumflex Q -40 +KPX Acircumflex T -37 +KPX Acircumflex Tcaron -37 +KPX Acircumflex Tcommaaccent -37 +KPX Acircumflex U -50 +KPX Acircumflex Uacute -50 +KPX Acircumflex Ucircumflex -50 +KPX Acircumflex Udieresis -50 +KPX Acircumflex Ugrave -50 +KPX Acircumflex Uhungarumlaut -50 +KPX Acircumflex Umacron -50 +KPX Acircumflex Uogonek -50 +KPX Acircumflex Uring -50 +KPX Acircumflex V -105 +KPX Acircumflex W -95 +KPX Acircumflex Y -55 +KPX Acircumflex Yacute -55 +KPX Acircumflex Ydieresis -55 +KPX Acircumflex quoteright -37 +KPX Acircumflex u -20 +KPX Acircumflex uacute -20 +KPX Acircumflex ucircumflex -20 +KPX Acircumflex udieresis -20 +KPX Acircumflex ugrave -20 +KPX Acircumflex uhungarumlaut -20 +KPX Acircumflex umacron -20 +KPX Acircumflex uogonek -20 +KPX Acircumflex uring -20 +KPX Acircumflex v -55 +KPX Acircumflex w -55 +KPX Acircumflex y -55 +KPX Acircumflex yacute -55 +KPX Acircumflex ydieresis -55 +KPX Adieresis C -30 +KPX Adieresis Cacute -30 +KPX Adieresis Ccaron -30 +KPX Adieresis Ccedilla -30 +KPX Adieresis G -35 +KPX Adieresis Gbreve -35 +KPX Adieresis Gcommaaccent -35 +KPX Adieresis O -40 +KPX Adieresis Oacute -40 +KPX Adieresis Ocircumflex -40 +KPX Adieresis Odieresis -40 +KPX Adieresis Ograve -40 +KPX Adieresis Ohungarumlaut -40 +KPX Adieresis Omacron -40 +KPX Adieresis Oslash -40 +KPX Adieresis Otilde -40 +KPX Adieresis Q -40 +KPX Adieresis T -37 +KPX Adieresis Tcaron -37 +KPX Adieresis Tcommaaccent -37 +KPX Adieresis U -50 +KPX Adieresis Uacute -50 +KPX Adieresis Ucircumflex -50 +KPX Adieresis Udieresis -50 +KPX Adieresis Ugrave -50 +KPX Adieresis Uhungarumlaut -50 +KPX Adieresis Umacron -50 +KPX Adieresis Uogonek -50 +KPX Adieresis Uring -50 +KPX Adieresis V -105 +KPX Adieresis W -95 +KPX Adieresis Y -55 +KPX Adieresis Yacute -55 +KPX Adieresis Ydieresis -55 +KPX Adieresis quoteright -37 +KPX Adieresis u -20 +KPX Adieresis uacute -20 +KPX Adieresis ucircumflex -20 +KPX Adieresis udieresis -20 +KPX Adieresis ugrave -20 +KPX Adieresis uhungarumlaut -20 +KPX Adieresis umacron -20 +KPX Adieresis uogonek -20 +KPX Adieresis uring -20 +KPX Adieresis v -55 +KPX Adieresis w -55 +KPX Adieresis y -55 +KPX Adieresis yacute -55 +KPX Adieresis ydieresis -55 +KPX Agrave C -30 +KPX Agrave Cacute -30 +KPX Agrave Ccaron -30 +KPX Agrave Ccedilla -30 +KPX Agrave G -35 +KPX Agrave Gbreve -35 +KPX Agrave Gcommaaccent -35 +KPX Agrave O -40 +KPX Agrave Oacute -40 +KPX Agrave Ocircumflex -40 +KPX Agrave Odieresis -40 +KPX Agrave Ograve -40 +KPX Agrave Ohungarumlaut -40 +KPX Agrave Omacron -40 +KPX Agrave Oslash -40 +KPX Agrave Otilde -40 +KPX Agrave Q -40 +KPX Agrave T -37 +KPX Agrave Tcaron -37 +KPX Agrave Tcommaaccent -37 +KPX Agrave U -50 +KPX Agrave Uacute -50 +KPX Agrave Ucircumflex -50 +KPX Agrave Udieresis -50 +KPX Agrave Ugrave -50 +KPX Agrave Uhungarumlaut -50 +KPX Agrave Umacron -50 +KPX Agrave Uogonek -50 +KPX Agrave Uring -50 +KPX Agrave V -105 +KPX Agrave W -95 +KPX Agrave Y -55 +KPX Agrave Yacute -55 +KPX Agrave Ydieresis -55 +KPX Agrave quoteright -37 +KPX Agrave u -20 +KPX Agrave uacute -20 +KPX Agrave ucircumflex -20 +KPX Agrave udieresis -20 +KPX Agrave ugrave -20 +KPX Agrave uhungarumlaut -20 +KPX Agrave umacron -20 +KPX Agrave uogonek -20 +KPX Agrave uring -20 +KPX Agrave v -55 +KPX Agrave w -55 +KPX Agrave y -55 +KPX Agrave yacute -55 +KPX Agrave ydieresis -55 +KPX Amacron C -30 +KPX Amacron Cacute -30 +KPX Amacron Ccaron -30 +KPX Amacron Ccedilla -30 +KPX Amacron G -35 +KPX Amacron Gbreve -35 +KPX Amacron Gcommaaccent -35 +KPX Amacron O -40 +KPX Amacron Oacute -40 +KPX Amacron Ocircumflex -40 +KPX Amacron Odieresis -40 +KPX Amacron Ograve -40 +KPX Amacron Ohungarumlaut -40 +KPX Amacron Omacron -40 +KPX Amacron Oslash -40 +KPX Amacron Otilde -40 +KPX Amacron Q -40 +KPX Amacron T -37 +KPX Amacron Tcaron -37 +KPX Amacron Tcommaaccent -37 +KPX Amacron U -50 +KPX Amacron Uacute -50 +KPX Amacron Ucircumflex -50 +KPX Amacron Udieresis -50 +KPX Amacron Ugrave -50 +KPX Amacron Uhungarumlaut -50 +KPX Amacron Umacron -50 +KPX Amacron Uogonek -50 +KPX Amacron Uring -50 +KPX Amacron V -105 +KPX Amacron W -95 +KPX Amacron Y -55 +KPX Amacron Yacute -55 +KPX Amacron Ydieresis -55 +KPX Amacron quoteright -37 +KPX Amacron u -20 +KPX Amacron uacute -20 +KPX Amacron ucircumflex -20 +KPX Amacron udieresis -20 +KPX Amacron ugrave -20 +KPX Amacron uhungarumlaut -20 +KPX Amacron umacron -20 +KPX Amacron uogonek -20 +KPX Amacron uring -20 +KPX Amacron v -55 +KPX Amacron w -55 +KPX Amacron y -55 +KPX Amacron yacute -55 +KPX Amacron ydieresis -55 +KPX Aogonek C -30 +KPX Aogonek Cacute -30 +KPX Aogonek Ccaron -30 +KPX Aogonek Ccedilla -30 +KPX Aogonek G -35 +KPX Aogonek Gbreve -35 +KPX Aogonek Gcommaaccent -35 +KPX Aogonek O -40 +KPX Aogonek Oacute -40 +KPX Aogonek Ocircumflex -40 +KPX Aogonek Odieresis -40 +KPX Aogonek Ograve -40 +KPX Aogonek Ohungarumlaut -40 +KPX Aogonek Omacron -40 +KPX Aogonek Oslash -40 +KPX Aogonek Otilde -40 +KPX Aogonek Q -40 +KPX Aogonek T -37 +KPX Aogonek Tcaron -37 +KPX Aogonek Tcommaaccent -37 +KPX Aogonek U -50 +KPX Aogonek Uacute -50 +KPX Aogonek Ucircumflex -50 +KPX Aogonek Udieresis -50 +KPX Aogonek Ugrave -50 +KPX Aogonek Uhungarumlaut -50 +KPX Aogonek Umacron -50 +KPX Aogonek Uogonek -50 +KPX Aogonek Uring -50 +KPX Aogonek V -105 +KPX Aogonek W -95 +KPX Aogonek Y -55 +KPX Aogonek Yacute -55 +KPX Aogonek Ydieresis -55 +KPX Aogonek quoteright -37 +KPX Aogonek u -20 +KPX Aogonek uacute -20 +KPX Aogonek ucircumflex -20 +KPX Aogonek udieresis -20 +KPX Aogonek ugrave -20 +KPX Aogonek uhungarumlaut -20 +KPX Aogonek umacron -20 +KPX Aogonek uogonek -20 +KPX Aogonek uring -20 +KPX Aogonek v -55 +KPX Aogonek w -55 +KPX Aogonek y -55 +KPX Aogonek yacute -55 +KPX Aogonek ydieresis -55 +KPX Aring C -30 +KPX Aring Cacute -30 +KPX Aring Ccaron -30 +KPX Aring Ccedilla -30 +KPX Aring G -35 +KPX Aring Gbreve -35 +KPX Aring Gcommaaccent -35 +KPX Aring O -40 +KPX Aring Oacute -40 +KPX Aring Ocircumflex -40 +KPX Aring Odieresis -40 +KPX Aring Ograve -40 +KPX Aring Ohungarumlaut -40 +KPX Aring Omacron -40 +KPX Aring Oslash -40 +KPX Aring Otilde -40 +KPX Aring Q -40 +KPX Aring T -37 +KPX Aring Tcaron -37 +KPX Aring Tcommaaccent -37 +KPX Aring U -50 +KPX Aring Uacute -50 +KPX Aring Ucircumflex -50 +KPX Aring Udieresis -50 +KPX Aring Ugrave -50 +KPX Aring Uhungarumlaut -50 +KPX Aring Umacron -50 +KPX Aring Uogonek -50 +KPX Aring Uring -50 +KPX Aring V -105 +KPX Aring W -95 +KPX Aring Y -55 +KPX Aring Yacute -55 +KPX Aring Ydieresis -55 +KPX Aring quoteright -37 +KPX Aring u -20 +KPX Aring uacute -20 +KPX Aring ucircumflex -20 +KPX Aring udieresis -20 +KPX Aring ugrave -20 +KPX Aring uhungarumlaut -20 +KPX Aring umacron -20 +KPX Aring uogonek -20 +KPX Aring uring -20 +KPX Aring v -55 +KPX Aring w -55 +KPX Aring y -55 +KPX Aring yacute -55 +KPX Aring ydieresis -55 +KPX Atilde C -30 +KPX Atilde Cacute -30 +KPX Atilde Ccaron -30 +KPX Atilde Ccedilla -30 +KPX Atilde G -35 +KPX Atilde Gbreve -35 +KPX Atilde Gcommaaccent -35 +KPX Atilde O -40 +KPX Atilde Oacute -40 +KPX Atilde Ocircumflex -40 +KPX Atilde Odieresis -40 +KPX Atilde Ograve -40 +KPX Atilde Ohungarumlaut -40 +KPX Atilde Omacron -40 +KPX Atilde Oslash -40 +KPX Atilde Otilde -40 +KPX Atilde Q -40 +KPX Atilde T -37 +KPX Atilde Tcaron -37 +KPX Atilde Tcommaaccent -37 +KPX Atilde U -50 +KPX Atilde Uacute -50 +KPX Atilde Ucircumflex -50 +KPX Atilde Udieresis -50 +KPX Atilde Ugrave -50 +KPX Atilde Uhungarumlaut -50 +KPX Atilde Umacron -50 +KPX Atilde Uogonek -50 +KPX Atilde Uring -50 +KPX Atilde V -105 +KPX Atilde W -95 +KPX Atilde Y -55 +KPX Atilde Yacute -55 +KPX Atilde Ydieresis -55 +KPX Atilde quoteright -37 +KPX Atilde u -20 +KPX Atilde uacute -20 +KPX Atilde ucircumflex -20 +KPX Atilde udieresis -20 +KPX Atilde ugrave -20 +KPX Atilde uhungarumlaut -20 +KPX Atilde umacron -20 +KPX Atilde uogonek -20 +KPX Atilde uring -20 +KPX Atilde v -55 +KPX Atilde w -55 +KPX Atilde y -55 +KPX Atilde yacute -55 +KPX Atilde ydieresis -55 +KPX B A -25 +KPX B Aacute -25 +KPX B Abreve -25 +KPX B Acircumflex -25 +KPX B Adieresis -25 +KPX B Agrave -25 +KPX B Amacron -25 +KPX B Aogonek -25 +KPX B Aring -25 +KPX B Atilde -25 +KPX B U -10 +KPX B Uacute -10 +KPX B Ucircumflex -10 +KPX B Udieresis -10 +KPX B Ugrave -10 +KPX B Uhungarumlaut -10 +KPX B Umacron -10 +KPX B Uogonek -10 +KPX B Uring -10 +KPX D A -35 +KPX D Aacute -35 +KPX D Abreve -35 +KPX D Acircumflex -35 +KPX D Adieresis -35 +KPX D Agrave -35 +KPX D Amacron -35 +KPX D Aogonek -35 +KPX D Aring -35 +KPX D Atilde -35 +KPX D V -40 +KPX D W -40 +KPX D Y -40 +KPX D Yacute -40 +KPX D Ydieresis -40 +KPX Dcaron A -35 +KPX Dcaron Aacute -35 +KPX Dcaron Abreve -35 +KPX Dcaron Acircumflex -35 +KPX Dcaron Adieresis -35 +KPX Dcaron Agrave -35 +KPX Dcaron Amacron -35 +KPX Dcaron Aogonek -35 +KPX Dcaron Aring -35 +KPX Dcaron Atilde -35 +KPX Dcaron V -40 +KPX Dcaron W -40 +KPX Dcaron Y -40 +KPX Dcaron Yacute -40 +KPX Dcaron Ydieresis -40 +KPX Dcroat A -35 +KPX Dcroat Aacute -35 +KPX Dcroat Abreve -35 +KPX Dcroat Acircumflex -35 +KPX Dcroat Adieresis -35 +KPX Dcroat Agrave -35 +KPX Dcroat Amacron -35 +KPX Dcroat Aogonek -35 +KPX Dcroat Aring -35 +KPX Dcroat Atilde -35 +KPX Dcroat V -40 +KPX Dcroat W -40 +KPX Dcroat Y -40 +KPX Dcroat Yacute -40 +KPX Dcroat Ydieresis -40 +KPX F A -115 +KPX F Aacute -115 +KPX F Abreve -115 +KPX F Acircumflex -115 +KPX F Adieresis -115 +KPX F Agrave -115 +KPX F Amacron -115 +KPX F Aogonek -115 +KPX F Aring -115 +KPX F Atilde -115 +KPX F a -75 +KPX F aacute -75 +KPX F abreve -75 +KPX F acircumflex -75 +KPX F adieresis -75 +KPX F agrave -75 +KPX F amacron -75 +KPX F aogonek -75 +KPX F aring -75 +KPX F atilde -75 +KPX F comma -135 +KPX F e -75 +KPX F eacute -75 +KPX F ecaron -75 +KPX F ecircumflex -75 +KPX F edieresis -75 +KPX F edotaccent -75 +KPX F egrave -75 +KPX F emacron -75 +KPX F eogonek -75 +KPX F i -45 +KPX F iacute -45 +KPX F icircumflex -45 +KPX F idieresis -45 +KPX F igrave -45 +KPX F imacron -45 +KPX F iogonek -45 +KPX F o -105 +KPX F oacute -105 +KPX F ocircumflex -105 +KPX F odieresis -105 +KPX F ograve -105 +KPX F ohungarumlaut -105 +KPX F omacron -105 +KPX F oslash -105 +KPX F otilde -105 +KPX F period -135 +KPX F r -55 +KPX F racute -55 +KPX F rcaron -55 +KPX F rcommaaccent -55 +KPX J A -40 +KPX J Aacute -40 +KPX J Abreve -40 +KPX J Acircumflex -40 +KPX J Adieresis -40 +KPX J Agrave -40 +KPX J Amacron -40 +KPX J Aogonek -40 +KPX J Aring -40 +KPX J Atilde -40 +KPX J a -35 +KPX J aacute -35 +KPX J abreve -35 +KPX J acircumflex -35 +KPX J adieresis -35 +KPX J agrave -35 +KPX J amacron -35 +KPX J aogonek -35 +KPX J aring -35 +KPX J atilde -35 +KPX J comma -25 +KPX J e -25 +KPX J eacute -25 +KPX J ecaron -25 +KPX J ecircumflex -25 +KPX J edieresis -25 +KPX J edotaccent -25 +KPX J egrave -25 +KPX J emacron -25 +KPX J eogonek -25 +KPX J o -25 +KPX J oacute -25 +KPX J ocircumflex -25 +KPX J odieresis -25 +KPX J ograve -25 +KPX J ohungarumlaut -25 +KPX J omacron -25 +KPX J oslash -25 +KPX J otilde -25 +KPX J period -25 +KPX J u -35 +KPX J uacute -35 +KPX J ucircumflex -35 +KPX J udieresis -35 +KPX J ugrave -35 +KPX J uhungarumlaut -35 +KPX J umacron -35 +KPX J uogonek -35 +KPX J uring -35 +KPX K O -50 +KPX K Oacute -50 +KPX K Ocircumflex -50 +KPX K Odieresis -50 +KPX K Ograve -50 +KPX K Ohungarumlaut -50 +KPX K Omacron -50 +KPX K Oslash -50 +KPX K Otilde -50 +KPX K e -35 +KPX K eacute -35 +KPX K ecaron -35 +KPX K ecircumflex -35 +KPX K edieresis -35 +KPX K edotaccent -35 +KPX K egrave -35 +KPX K emacron -35 +KPX K eogonek -35 +KPX K o -40 +KPX K oacute -40 +KPX K ocircumflex -40 +KPX K odieresis -40 +KPX K ograve -40 +KPX K ohungarumlaut -40 +KPX K omacron -40 +KPX K oslash -40 +KPX K otilde -40 +KPX K u -40 +KPX K uacute -40 +KPX K ucircumflex -40 +KPX K udieresis -40 +KPX K ugrave -40 +KPX K uhungarumlaut -40 +KPX K umacron -40 +KPX K uogonek -40 +KPX K uring -40 +KPX K y -40 +KPX K yacute -40 +KPX K ydieresis -40 +KPX Kcommaaccent O -50 +KPX Kcommaaccent Oacute -50 +KPX Kcommaaccent Ocircumflex -50 +KPX Kcommaaccent Odieresis -50 +KPX Kcommaaccent Ograve -50 +KPX Kcommaaccent Ohungarumlaut -50 +KPX Kcommaaccent Omacron -50 +KPX Kcommaaccent Oslash -50 +KPX Kcommaaccent Otilde -50 +KPX Kcommaaccent e -35 +KPX Kcommaaccent eacute -35 +KPX Kcommaaccent ecaron -35 +KPX Kcommaaccent ecircumflex -35 +KPX Kcommaaccent edieresis -35 +KPX Kcommaaccent edotaccent -35 +KPX Kcommaaccent egrave -35 +KPX Kcommaaccent emacron -35 +KPX Kcommaaccent eogonek -35 +KPX Kcommaaccent o -40 +KPX Kcommaaccent oacute -40 +KPX Kcommaaccent ocircumflex -40 +KPX Kcommaaccent odieresis -40 +KPX Kcommaaccent ograve -40 +KPX Kcommaaccent ohungarumlaut -40 +KPX Kcommaaccent omacron -40 +KPX Kcommaaccent oslash -40 +KPX Kcommaaccent otilde -40 +KPX Kcommaaccent u -40 +KPX Kcommaaccent uacute -40 +KPX Kcommaaccent ucircumflex -40 +KPX Kcommaaccent udieresis -40 +KPX Kcommaaccent ugrave -40 +KPX Kcommaaccent uhungarumlaut -40 +KPX Kcommaaccent umacron -40 +KPX Kcommaaccent uogonek -40 +KPX Kcommaaccent uring -40 +KPX Kcommaaccent y -40 +KPX Kcommaaccent yacute -40 +KPX Kcommaaccent ydieresis -40 +KPX L T -20 +KPX L Tcaron -20 +KPX L Tcommaaccent -20 +KPX L V -55 +KPX L W -55 +KPX L Y -20 +KPX L Yacute -20 +KPX L Ydieresis -20 +KPX L quoteright -37 +KPX L y -30 +KPX L yacute -30 +KPX L ydieresis -30 +KPX Lacute T -20 +KPX Lacute Tcaron -20 +KPX Lacute Tcommaaccent -20 +KPX Lacute V -55 +KPX Lacute W -55 +KPX Lacute Y -20 +KPX Lacute Yacute -20 +KPX Lacute Ydieresis -20 +KPX Lacute quoteright -37 +KPX Lacute y -30 +KPX Lacute yacute -30 +KPX Lacute ydieresis -30 +KPX Lcommaaccent T -20 +KPX Lcommaaccent Tcaron -20 +KPX Lcommaaccent Tcommaaccent -20 +KPX Lcommaaccent V -55 +KPX Lcommaaccent W -55 +KPX Lcommaaccent Y -20 +KPX Lcommaaccent Yacute -20 +KPX Lcommaaccent Ydieresis -20 +KPX Lcommaaccent quoteright -37 +KPX Lcommaaccent y -30 +KPX Lcommaaccent yacute -30 +KPX Lcommaaccent ydieresis -30 +KPX Lslash T -20 +KPX Lslash Tcaron -20 +KPX Lslash Tcommaaccent -20 +KPX Lslash V -55 +KPX Lslash W -55 +KPX Lslash Y -20 +KPX Lslash Yacute -20 +KPX Lslash Ydieresis -20 +KPX Lslash quoteright -37 +KPX Lslash y -30 +KPX Lslash yacute -30 +KPX Lslash ydieresis -30 +KPX N A -27 +KPX N Aacute -27 +KPX N Abreve -27 +KPX N Acircumflex -27 +KPX N Adieresis -27 +KPX N Agrave -27 +KPX N Amacron -27 +KPX N Aogonek -27 +KPX N Aring -27 +KPX N Atilde -27 +KPX Nacute A -27 +KPX Nacute Aacute -27 +KPX Nacute Abreve -27 +KPX Nacute Acircumflex -27 +KPX Nacute Adieresis -27 +KPX Nacute Agrave -27 +KPX Nacute Amacron -27 +KPX Nacute Aogonek -27 +KPX Nacute Aring -27 +KPX Nacute Atilde -27 +KPX Ncaron A -27 +KPX Ncaron Aacute -27 +KPX Ncaron Abreve -27 +KPX Ncaron Acircumflex -27 +KPX Ncaron Adieresis -27 +KPX Ncaron Agrave -27 +KPX Ncaron Amacron -27 +KPX Ncaron Aogonek -27 +KPX Ncaron Aring -27 +KPX Ncaron Atilde -27 +KPX Ncommaaccent A -27 +KPX Ncommaaccent Aacute -27 +KPX Ncommaaccent Abreve -27 +KPX Ncommaaccent Acircumflex -27 +KPX Ncommaaccent Adieresis -27 +KPX Ncommaaccent Agrave -27 +KPX Ncommaaccent Amacron -27 +KPX Ncommaaccent Aogonek -27 +KPX Ncommaaccent Aring -27 +KPX Ncommaaccent Atilde -27 +KPX Ntilde A -27 +KPX Ntilde Aacute -27 +KPX Ntilde Abreve -27 +KPX Ntilde Acircumflex -27 +KPX Ntilde Adieresis -27 +KPX Ntilde Agrave -27 +KPX Ntilde Amacron -27 +KPX Ntilde Aogonek -27 +KPX Ntilde Aring -27 +KPX Ntilde Atilde -27 +KPX O A -55 +KPX O Aacute -55 +KPX O Abreve -55 +KPX O Acircumflex -55 +KPX O Adieresis -55 +KPX O Agrave -55 +KPX O Amacron -55 +KPX O Aogonek -55 +KPX O Aring -55 +KPX O Atilde -55 +KPX O T -40 +KPX O Tcaron -40 +KPX O Tcommaaccent -40 +KPX O V -50 +KPX O W -50 +KPX O X -40 +KPX O Y -50 +KPX O Yacute -50 +KPX O Ydieresis -50 +KPX Oacute A -55 +KPX Oacute Aacute -55 +KPX Oacute Abreve -55 +KPX Oacute Acircumflex -55 +KPX Oacute Adieresis -55 +KPX Oacute Agrave -55 +KPX Oacute Amacron -55 +KPX Oacute Aogonek -55 +KPX Oacute Aring -55 +KPX Oacute Atilde -55 +KPX Oacute T -40 +KPX Oacute Tcaron -40 +KPX Oacute Tcommaaccent -40 +KPX Oacute V -50 +KPX Oacute W -50 +KPX Oacute X -40 +KPX Oacute Y -50 +KPX Oacute Yacute -50 +KPX Oacute Ydieresis -50 +KPX Ocircumflex A -55 +KPX Ocircumflex Aacute -55 +KPX Ocircumflex Abreve -55 +KPX Ocircumflex Acircumflex -55 +KPX Ocircumflex Adieresis -55 +KPX Ocircumflex Agrave -55 +KPX Ocircumflex Amacron -55 +KPX Ocircumflex Aogonek -55 +KPX Ocircumflex Aring -55 +KPX Ocircumflex Atilde -55 +KPX Ocircumflex T -40 +KPX Ocircumflex Tcaron -40 +KPX Ocircumflex Tcommaaccent -40 +KPX Ocircumflex V -50 +KPX Ocircumflex W -50 +KPX Ocircumflex X -40 +KPX Ocircumflex Y -50 +KPX Ocircumflex Yacute -50 +KPX Ocircumflex Ydieresis -50 +KPX Odieresis A -55 +KPX Odieresis Aacute -55 +KPX Odieresis Abreve -55 +KPX Odieresis Acircumflex -55 +KPX Odieresis Adieresis -55 +KPX Odieresis Agrave -55 +KPX Odieresis Amacron -55 +KPX Odieresis Aogonek -55 +KPX Odieresis Aring -55 +KPX Odieresis Atilde -55 +KPX Odieresis T -40 +KPX Odieresis Tcaron -40 +KPX Odieresis Tcommaaccent -40 +KPX Odieresis V -50 +KPX Odieresis W -50 +KPX Odieresis X -40 +KPX Odieresis Y -50 +KPX Odieresis Yacute -50 +KPX Odieresis Ydieresis -50 +KPX Ograve A -55 +KPX Ograve Aacute -55 +KPX Ograve Abreve -55 +KPX Ograve Acircumflex -55 +KPX Ograve Adieresis -55 +KPX Ograve Agrave -55 +KPX Ograve Amacron -55 +KPX Ograve Aogonek -55 +KPX Ograve Aring -55 +KPX Ograve Atilde -55 +KPX Ograve T -40 +KPX Ograve Tcaron -40 +KPX Ograve Tcommaaccent -40 +KPX Ograve V -50 +KPX Ograve W -50 +KPX Ograve X -40 +KPX Ograve Y -50 +KPX Ograve Yacute -50 +KPX Ograve Ydieresis -50 +KPX Ohungarumlaut A -55 +KPX Ohungarumlaut Aacute -55 +KPX Ohungarumlaut Abreve -55 +KPX Ohungarumlaut Acircumflex -55 +KPX Ohungarumlaut Adieresis -55 +KPX Ohungarumlaut Agrave -55 +KPX Ohungarumlaut Amacron -55 +KPX Ohungarumlaut Aogonek -55 +KPX Ohungarumlaut Aring -55 +KPX Ohungarumlaut Atilde -55 +KPX Ohungarumlaut T -40 +KPX Ohungarumlaut Tcaron -40 +KPX Ohungarumlaut Tcommaaccent -40 +KPX Ohungarumlaut V -50 +KPX Ohungarumlaut W -50 +KPX Ohungarumlaut X -40 +KPX Ohungarumlaut Y -50 +KPX Ohungarumlaut Yacute -50 +KPX Ohungarumlaut Ydieresis -50 +KPX Omacron A -55 +KPX Omacron Aacute -55 +KPX Omacron Abreve -55 +KPX Omacron Acircumflex -55 +KPX Omacron Adieresis -55 +KPX Omacron Agrave -55 +KPX Omacron Amacron -55 +KPX Omacron Aogonek -55 +KPX Omacron Aring -55 +KPX Omacron Atilde -55 +KPX Omacron T -40 +KPX Omacron Tcaron -40 +KPX Omacron Tcommaaccent -40 +KPX Omacron V -50 +KPX Omacron W -50 +KPX Omacron X -40 +KPX Omacron Y -50 +KPX Omacron Yacute -50 +KPX Omacron Ydieresis -50 +KPX Oslash A -55 +KPX Oslash Aacute -55 +KPX Oslash Abreve -55 +KPX Oslash Acircumflex -55 +KPX Oslash Adieresis -55 +KPX Oslash Agrave -55 +KPX Oslash Amacron -55 +KPX Oslash Aogonek -55 +KPX Oslash Aring -55 +KPX Oslash Atilde -55 +KPX Oslash T -40 +KPX Oslash Tcaron -40 +KPX Oslash Tcommaaccent -40 +KPX Oslash V -50 +KPX Oslash W -50 +KPX Oslash X -40 +KPX Oslash Y -50 +KPX Oslash Yacute -50 +KPX Oslash Ydieresis -50 +KPX Otilde A -55 +KPX Otilde Aacute -55 +KPX Otilde Abreve -55 +KPX Otilde Acircumflex -55 +KPX Otilde Adieresis -55 +KPX Otilde Agrave -55 +KPX Otilde Amacron -55 +KPX Otilde Aogonek -55 +KPX Otilde Aring -55 +KPX Otilde Atilde -55 +KPX Otilde T -40 +KPX Otilde Tcaron -40 +KPX Otilde Tcommaaccent -40 +KPX Otilde V -50 +KPX Otilde W -50 +KPX Otilde X -40 +KPX Otilde Y -50 +KPX Otilde Yacute -50 +KPX Otilde Ydieresis -50 +KPX P A -90 +KPX P Aacute -90 +KPX P Abreve -90 +KPX P Acircumflex -90 +KPX P Adieresis -90 +KPX P Agrave -90 +KPX P Amacron -90 +KPX P Aogonek -90 +KPX P Aring -90 +KPX P Atilde -90 +KPX P a -80 +KPX P aacute -80 +KPX P abreve -80 +KPX P acircumflex -80 +KPX P adieresis -80 +KPX P agrave -80 +KPX P amacron -80 +KPX P aogonek -80 +KPX P aring -80 +KPX P atilde -80 +KPX P comma -135 +KPX P e -80 +KPX P eacute -80 +KPX P ecaron -80 +KPX P ecircumflex -80 +KPX P edieresis -80 +KPX P edotaccent -80 +KPX P egrave -80 +KPX P emacron -80 +KPX P eogonek -80 +KPX P o -80 +KPX P oacute -80 +KPX P ocircumflex -80 +KPX P odieresis -80 +KPX P ograve -80 +KPX P ohungarumlaut -80 +KPX P omacron -80 +KPX P oslash -80 +KPX P otilde -80 +KPX P period -135 +KPX Q U -10 +KPX Q Uacute -10 +KPX Q Ucircumflex -10 +KPX Q Udieresis -10 +KPX Q Ugrave -10 +KPX Q Uhungarumlaut -10 +KPX Q Umacron -10 +KPX Q Uogonek -10 +KPX Q Uring -10 +KPX R O -40 +KPX R Oacute -40 +KPX R Ocircumflex -40 +KPX R Odieresis -40 +KPX R Ograve -40 +KPX R Ohungarumlaut -40 +KPX R Omacron -40 +KPX R Oslash -40 +KPX R Otilde -40 +KPX R U -40 +KPX R Uacute -40 +KPX R Ucircumflex -40 +KPX R Udieresis -40 +KPX R Ugrave -40 +KPX R Uhungarumlaut -40 +KPX R Umacron -40 +KPX R Uogonek -40 +KPX R Uring -40 +KPX R V -18 +KPX R W -18 +KPX R Y -18 +KPX R Yacute -18 +KPX R Ydieresis -18 +KPX Racute O -40 +KPX Racute Oacute -40 +KPX Racute Ocircumflex -40 +KPX Racute Odieresis -40 +KPX Racute Ograve -40 +KPX Racute Ohungarumlaut -40 +KPX Racute Omacron -40 +KPX Racute Oslash -40 +KPX Racute Otilde -40 +KPX Racute U -40 +KPX Racute Uacute -40 +KPX Racute Ucircumflex -40 +KPX Racute Udieresis -40 +KPX Racute Ugrave -40 +KPX Racute Uhungarumlaut -40 +KPX Racute Umacron -40 +KPX Racute Uogonek -40 +KPX Racute Uring -40 +KPX Racute V -18 +KPX Racute W -18 +KPX Racute Y -18 +KPX Racute Yacute -18 +KPX Racute Ydieresis -18 +KPX Rcaron O -40 +KPX Rcaron Oacute -40 +KPX Rcaron Ocircumflex -40 +KPX Rcaron Odieresis -40 +KPX Rcaron Ograve -40 +KPX Rcaron Ohungarumlaut -40 +KPX Rcaron Omacron -40 +KPX Rcaron Oslash -40 +KPX Rcaron Otilde -40 +KPX Rcaron U -40 +KPX Rcaron Uacute -40 +KPX Rcaron Ucircumflex -40 +KPX Rcaron Udieresis -40 +KPX Rcaron Ugrave -40 +KPX Rcaron Uhungarumlaut -40 +KPX Rcaron Umacron -40 +KPX Rcaron Uogonek -40 +KPX Rcaron Uring -40 +KPX Rcaron V -18 +KPX Rcaron W -18 +KPX Rcaron Y -18 +KPX Rcaron Yacute -18 +KPX Rcaron Ydieresis -18 +KPX Rcommaaccent O -40 +KPX Rcommaaccent Oacute -40 +KPX Rcommaaccent Ocircumflex -40 +KPX Rcommaaccent Odieresis -40 +KPX Rcommaaccent Ograve -40 +KPX Rcommaaccent Ohungarumlaut -40 +KPX Rcommaaccent Omacron -40 +KPX Rcommaaccent Oslash -40 +KPX Rcommaaccent Otilde -40 +KPX Rcommaaccent U -40 +KPX Rcommaaccent Uacute -40 +KPX Rcommaaccent Ucircumflex -40 +KPX Rcommaaccent Udieresis -40 +KPX Rcommaaccent Ugrave -40 +KPX Rcommaaccent Uhungarumlaut -40 +KPX Rcommaaccent Umacron -40 +KPX Rcommaaccent Uogonek -40 +KPX Rcommaaccent Uring -40 +KPX Rcommaaccent V -18 +KPX Rcommaaccent W -18 +KPX Rcommaaccent Y -18 +KPX Rcommaaccent Yacute -18 +KPX Rcommaaccent Ydieresis -18 +KPX T A -50 +KPX T Aacute -50 +KPX T Abreve -50 +KPX T Acircumflex -50 +KPX T Adieresis -50 +KPX T Agrave -50 +KPX T Amacron -50 +KPX T Aogonek -50 +KPX T Aring -50 +KPX T Atilde -50 +KPX T O -18 +KPX T Oacute -18 +KPX T Ocircumflex -18 +KPX T Odieresis -18 +KPX T Ograve -18 +KPX T Ohungarumlaut -18 +KPX T Omacron -18 +KPX T Oslash -18 +KPX T Otilde -18 +KPX T a -92 +KPX T aacute -92 +KPX T abreve -92 +KPX T acircumflex -92 +KPX T adieresis -92 +KPX T agrave -92 +KPX T amacron -92 +KPX T aogonek -92 +KPX T aring -92 +KPX T atilde -92 +KPX T colon -55 +KPX T comma -74 +KPX T e -92 +KPX T eacute -92 +KPX T ecaron -92 +KPX T ecircumflex -52 +KPX T edieresis -52 +KPX T edotaccent -92 +KPX T egrave -52 +KPX T emacron -52 +KPX T eogonek -92 +KPX T hyphen -74 +KPX T i -55 +KPX T iacute -55 +KPX T iogonek -55 +KPX T o -92 +KPX T oacute -92 +KPX T ocircumflex -92 +KPX T odieresis -92 +KPX T ograve -92 +KPX T ohungarumlaut -92 +KPX T omacron -92 +KPX T oslash -92 +KPX T otilde -92 +KPX T period -74 +KPX T r -55 +KPX T racute -55 +KPX T rcaron -55 +KPX T rcommaaccent -55 +KPX T semicolon -65 +KPX T u -55 +KPX T uacute -55 +KPX T ucircumflex -55 +KPX T udieresis -55 +KPX T ugrave -55 +KPX T uhungarumlaut -55 +KPX T umacron -55 +KPX T uogonek -55 +KPX T uring -55 +KPX T w -74 +KPX T y -74 +KPX T yacute -74 +KPX T ydieresis -34 +KPX Tcaron A -50 +KPX Tcaron Aacute -50 +KPX Tcaron Abreve -50 +KPX Tcaron Acircumflex -50 +KPX Tcaron Adieresis -50 +KPX Tcaron Agrave -50 +KPX Tcaron Amacron -50 +KPX Tcaron Aogonek -50 +KPX Tcaron Aring -50 +KPX Tcaron Atilde -50 +KPX Tcaron O -18 +KPX Tcaron Oacute -18 +KPX Tcaron Ocircumflex -18 +KPX Tcaron Odieresis -18 +KPX Tcaron Ograve -18 +KPX Tcaron Ohungarumlaut -18 +KPX Tcaron Omacron -18 +KPX Tcaron Oslash -18 +KPX Tcaron Otilde -18 +KPX Tcaron a -92 +KPX Tcaron aacute -92 +KPX Tcaron abreve -92 +KPX Tcaron acircumflex -92 +KPX Tcaron adieresis -92 +KPX Tcaron agrave -92 +KPX Tcaron amacron -92 +KPX Tcaron aogonek -92 +KPX Tcaron aring -92 +KPX Tcaron atilde -92 +KPX Tcaron colon -55 +KPX Tcaron comma -74 +KPX Tcaron e -92 +KPX Tcaron eacute -92 +KPX Tcaron ecaron -92 +KPX Tcaron ecircumflex -52 +KPX Tcaron edieresis -52 +KPX Tcaron edotaccent -92 +KPX Tcaron egrave -52 +KPX Tcaron emacron -52 +KPX Tcaron eogonek -92 +KPX Tcaron hyphen -74 +KPX Tcaron i -55 +KPX Tcaron iacute -55 +KPX Tcaron iogonek -55 +KPX Tcaron o -92 +KPX Tcaron oacute -92 +KPX Tcaron ocircumflex -92 +KPX Tcaron odieresis -92 +KPX Tcaron ograve -92 +KPX Tcaron ohungarumlaut -92 +KPX Tcaron omacron -92 +KPX Tcaron oslash -92 +KPX Tcaron otilde -92 +KPX Tcaron period -74 +KPX Tcaron r -55 +KPX Tcaron racute -55 +KPX Tcaron rcaron -55 +KPX Tcaron rcommaaccent -55 +KPX Tcaron semicolon -65 +KPX Tcaron u -55 +KPX Tcaron uacute -55 +KPX Tcaron ucircumflex -55 +KPX Tcaron udieresis -55 +KPX Tcaron ugrave -55 +KPX Tcaron uhungarumlaut -55 +KPX Tcaron umacron -55 +KPX Tcaron uogonek -55 +KPX Tcaron uring -55 +KPX Tcaron w -74 +KPX Tcaron y -74 +KPX Tcaron yacute -74 +KPX Tcaron ydieresis -34 +KPX Tcommaaccent A -50 +KPX Tcommaaccent Aacute -50 +KPX Tcommaaccent Abreve -50 +KPX Tcommaaccent Acircumflex -50 +KPX Tcommaaccent Adieresis -50 +KPX Tcommaaccent Agrave -50 +KPX Tcommaaccent Amacron -50 +KPX Tcommaaccent Aogonek -50 +KPX Tcommaaccent Aring -50 +KPX Tcommaaccent Atilde -50 +KPX Tcommaaccent O -18 +KPX Tcommaaccent Oacute -18 +KPX Tcommaaccent Ocircumflex -18 +KPX Tcommaaccent Odieresis -18 +KPX Tcommaaccent Ograve -18 +KPX Tcommaaccent Ohungarumlaut -18 +KPX Tcommaaccent Omacron -18 +KPX Tcommaaccent Oslash -18 +KPX Tcommaaccent Otilde -18 +KPX Tcommaaccent a -92 +KPX Tcommaaccent aacute -92 +KPX Tcommaaccent abreve -92 +KPX Tcommaaccent acircumflex -92 +KPX Tcommaaccent adieresis -92 +KPX Tcommaaccent agrave -92 +KPX Tcommaaccent amacron -92 +KPX Tcommaaccent aogonek -92 +KPX Tcommaaccent aring -92 +KPX Tcommaaccent atilde -92 +KPX Tcommaaccent colon -55 +KPX Tcommaaccent comma -74 +KPX Tcommaaccent e -92 +KPX Tcommaaccent eacute -92 +KPX Tcommaaccent ecaron -92 +KPX Tcommaaccent ecircumflex -52 +KPX Tcommaaccent edieresis -52 +KPX Tcommaaccent edotaccent -92 +KPX Tcommaaccent egrave -52 +KPX Tcommaaccent emacron -52 +KPX Tcommaaccent eogonek -92 +KPX Tcommaaccent hyphen -74 +KPX Tcommaaccent i -55 +KPX Tcommaaccent iacute -55 +KPX Tcommaaccent iogonek -55 +KPX Tcommaaccent o -92 +KPX Tcommaaccent oacute -92 +KPX Tcommaaccent ocircumflex -92 +KPX Tcommaaccent odieresis -92 +KPX Tcommaaccent ograve -92 +KPX Tcommaaccent ohungarumlaut -92 +KPX Tcommaaccent omacron -92 +KPX Tcommaaccent oslash -92 +KPX Tcommaaccent otilde -92 +KPX Tcommaaccent period -74 +KPX Tcommaaccent r -55 +KPX Tcommaaccent racute -55 +KPX Tcommaaccent rcaron -55 +KPX Tcommaaccent rcommaaccent -55 +KPX Tcommaaccent semicolon -65 +KPX Tcommaaccent u -55 +KPX Tcommaaccent uacute -55 +KPX Tcommaaccent ucircumflex -55 +KPX Tcommaaccent udieresis -55 +KPX Tcommaaccent ugrave -55 +KPX Tcommaaccent uhungarumlaut -55 +KPX Tcommaaccent umacron -55 +KPX Tcommaaccent uogonek -55 +KPX Tcommaaccent uring -55 +KPX Tcommaaccent w -74 +KPX Tcommaaccent y -74 +KPX Tcommaaccent yacute -74 +KPX Tcommaaccent ydieresis -34 +KPX U A -40 +KPX U Aacute -40 +KPX U Abreve -40 +KPX U Acircumflex -40 +KPX U Adieresis -40 +KPX U Agrave -40 +KPX U Amacron -40 +KPX U Aogonek -40 +KPX U Aring -40 +KPX U Atilde -40 +KPX U comma -25 +KPX U period -25 +KPX Uacute A -40 +KPX Uacute Aacute -40 +KPX Uacute Abreve -40 +KPX Uacute Acircumflex -40 +KPX Uacute Adieresis -40 +KPX Uacute Agrave -40 +KPX Uacute Amacron -40 +KPX Uacute Aogonek -40 +KPX Uacute Aring -40 +KPX Uacute Atilde -40 +KPX Uacute comma -25 +KPX Uacute period -25 +KPX Ucircumflex A -40 +KPX Ucircumflex Aacute -40 +KPX Ucircumflex Abreve -40 +KPX Ucircumflex Acircumflex -40 +KPX Ucircumflex Adieresis -40 +KPX Ucircumflex Agrave -40 +KPX Ucircumflex Amacron -40 +KPX Ucircumflex Aogonek -40 +KPX Ucircumflex Aring -40 +KPX Ucircumflex Atilde -40 +KPX Ucircumflex comma -25 +KPX Ucircumflex period -25 +KPX Udieresis A -40 +KPX Udieresis Aacute -40 +KPX Udieresis Abreve -40 +KPX Udieresis Acircumflex -40 +KPX Udieresis Adieresis -40 +KPX Udieresis Agrave -40 +KPX Udieresis Amacron -40 +KPX Udieresis Aogonek -40 +KPX Udieresis Aring -40 +KPX Udieresis Atilde -40 +KPX Udieresis comma -25 +KPX Udieresis period -25 +KPX Ugrave A -40 +KPX Ugrave Aacute -40 +KPX Ugrave Abreve -40 +KPX Ugrave Acircumflex -40 +KPX Ugrave Adieresis -40 +KPX Ugrave Agrave -40 +KPX Ugrave Amacron -40 +KPX Ugrave Aogonek -40 +KPX Ugrave Aring -40 +KPX Ugrave Atilde -40 +KPX Ugrave comma -25 +KPX Ugrave period -25 +KPX Uhungarumlaut A -40 +KPX Uhungarumlaut Aacute -40 +KPX Uhungarumlaut Abreve -40 +KPX Uhungarumlaut Acircumflex -40 +KPX Uhungarumlaut Adieresis -40 +KPX Uhungarumlaut Agrave -40 +KPX Uhungarumlaut Amacron -40 +KPX Uhungarumlaut Aogonek -40 +KPX Uhungarumlaut Aring -40 +KPX Uhungarumlaut Atilde -40 +KPX Uhungarumlaut comma -25 +KPX Uhungarumlaut period -25 +KPX Umacron A -40 +KPX Umacron Aacute -40 +KPX Umacron Abreve -40 +KPX Umacron Acircumflex -40 +KPX Umacron Adieresis -40 +KPX Umacron Agrave -40 +KPX Umacron Amacron -40 +KPX Umacron Aogonek -40 +KPX Umacron Aring -40 +KPX Umacron Atilde -40 +KPX Umacron comma -25 +KPX Umacron period -25 +KPX Uogonek A -40 +KPX Uogonek Aacute -40 +KPX Uogonek Abreve -40 +KPX Uogonek Acircumflex -40 +KPX Uogonek Adieresis -40 +KPX Uogonek Agrave -40 +KPX Uogonek Amacron -40 +KPX Uogonek Aogonek -40 +KPX Uogonek Aring -40 +KPX Uogonek Atilde -40 +KPX Uogonek comma -25 +KPX Uogonek period -25 +KPX Uring A -40 +KPX Uring Aacute -40 +KPX Uring Abreve -40 +KPX Uring Acircumflex -40 +KPX Uring Adieresis -40 +KPX Uring Agrave -40 +KPX Uring Amacron -40 +KPX Uring Aogonek -40 +KPX Uring Aring -40 +KPX Uring Atilde -40 +KPX Uring comma -25 +KPX Uring period -25 +KPX V A -60 +KPX V Aacute -60 +KPX V Abreve -60 +KPX V Acircumflex -60 +KPX V Adieresis -60 +KPX V Agrave -60 +KPX V Amacron -60 +KPX V Aogonek -60 +KPX V Aring -60 +KPX V Atilde -60 +KPX V O -30 +KPX V Oacute -30 +KPX V Ocircumflex -30 +KPX V Odieresis -30 +KPX V Ograve -30 +KPX V Ohungarumlaut -30 +KPX V Omacron -30 +KPX V Oslash -30 +KPX V Otilde -30 +KPX V a -111 +KPX V aacute -111 +KPX V abreve -111 +KPX V acircumflex -111 +KPX V adieresis -111 +KPX V agrave -111 +KPX V amacron -111 +KPX V aogonek -111 +KPX V aring -111 +KPX V atilde -111 +KPX V colon -65 +KPX V comma -129 +KPX V e -111 +KPX V eacute -111 +KPX V ecaron -111 +KPX V ecircumflex -111 +KPX V edieresis -71 +KPX V edotaccent -111 +KPX V egrave -71 +KPX V emacron -71 +KPX V eogonek -111 +KPX V hyphen -55 +KPX V i -74 +KPX V iacute -74 +KPX V icircumflex -34 +KPX V idieresis -34 +KPX V igrave -34 +KPX V imacron -34 +KPX V iogonek -74 +KPX V o -111 +KPX V oacute -111 +KPX V ocircumflex -111 +KPX V odieresis -111 +KPX V ograve -111 +KPX V ohungarumlaut -111 +KPX V omacron -111 +KPX V oslash -111 +KPX V otilde -111 +KPX V period -129 +KPX V semicolon -74 +KPX V u -74 +KPX V uacute -74 +KPX V ucircumflex -74 +KPX V udieresis -74 +KPX V ugrave -74 +KPX V uhungarumlaut -74 +KPX V umacron -74 +KPX V uogonek -74 +KPX V uring -74 +KPX W A -60 +KPX W Aacute -60 +KPX W Abreve -60 +KPX W Acircumflex -60 +KPX W Adieresis -60 +KPX W Agrave -60 +KPX W Amacron -60 +KPX W Aogonek -60 +KPX W Aring -60 +KPX W Atilde -60 +KPX W O -25 +KPX W Oacute -25 +KPX W Ocircumflex -25 +KPX W Odieresis -25 +KPX W Ograve -25 +KPX W Ohungarumlaut -25 +KPX W Omacron -25 +KPX W Oslash -25 +KPX W Otilde -25 +KPX W a -92 +KPX W aacute -92 +KPX W abreve -92 +KPX W acircumflex -92 +KPX W adieresis -92 +KPX W agrave -92 +KPX W amacron -92 +KPX W aogonek -92 +KPX W aring -92 +KPX W atilde -92 +KPX W colon -65 +KPX W comma -92 +KPX W e -92 +KPX W eacute -92 +KPX W ecaron -92 +KPX W ecircumflex -92 +KPX W edieresis -52 +KPX W edotaccent -92 +KPX W egrave -52 +KPX W emacron -52 +KPX W eogonek -92 +KPX W hyphen -37 +KPX W i -55 +KPX W iacute -55 +KPX W iogonek -55 +KPX W o -92 +KPX W oacute -92 +KPX W ocircumflex -92 +KPX W odieresis -92 +KPX W ograve -92 +KPX W ohungarumlaut -92 +KPX W omacron -92 +KPX W oslash -92 +KPX W otilde -92 +KPX W period -92 +KPX W semicolon -65 +KPX W u -55 +KPX W uacute -55 +KPX W ucircumflex -55 +KPX W udieresis -55 +KPX W ugrave -55 +KPX W uhungarumlaut -55 +KPX W umacron -55 +KPX W uogonek -55 +KPX W uring -55 +KPX W y -70 +KPX W yacute -70 +KPX W ydieresis -70 +KPX Y A -50 +KPX Y Aacute -50 +KPX Y Abreve -50 +KPX Y Acircumflex -50 +KPX Y Adieresis -50 +KPX Y Agrave -50 +KPX Y Amacron -50 +KPX Y Aogonek -50 +KPX Y Aring -50 +KPX Y Atilde -50 +KPX Y O -15 +KPX Y Oacute -15 +KPX Y Ocircumflex -15 +KPX Y Odieresis -15 +KPX Y Ograve -15 +KPX Y Ohungarumlaut -15 +KPX Y Omacron -15 +KPX Y Oslash -15 +KPX Y Otilde -15 +KPX Y a -92 +KPX Y aacute -92 +KPX Y abreve -92 +KPX Y acircumflex -92 +KPX Y adieresis -92 +KPX Y agrave -92 +KPX Y amacron -92 +KPX Y aogonek -92 +KPX Y aring -92 +KPX Y atilde -92 +KPX Y colon -65 +KPX Y comma -92 +KPX Y e -92 +KPX Y eacute -92 +KPX Y ecaron -92 +KPX Y ecircumflex -92 +KPX Y edieresis -52 +KPX Y edotaccent -92 +KPX Y egrave -52 +KPX Y emacron -52 +KPX Y eogonek -92 +KPX Y hyphen -74 +KPX Y i -74 +KPX Y iacute -74 +KPX Y icircumflex -34 +KPX Y idieresis -34 +KPX Y igrave -34 +KPX Y imacron -34 +KPX Y iogonek -74 +KPX Y o -92 +KPX Y oacute -92 +KPX Y ocircumflex -92 +KPX Y odieresis -92 +KPX Y ograve -92 +KPX Y ohungarumlaut -92 +KPX Y omacron -92 +KPX Y oslash -92 +KPX Y otilde -92 +KPX Y period -92 +KPX Y semicolon -65 +KPX Y u -92 +KPX Y uacute -92 +KPX Y ucircumflex -92 +KPX Y udieresis -92 +KPX Y ugrave -92 +KPX Y uhungarumlaut -92 +KPX Y umacron -92 +KPX Y uogonek -92 +KPX Y uring -92 +KPX Yacute A -50 +KPX Yacute Aacute -50 +KPX Yacute Abreve -50 +KPX Yacute Acircumflex -50 +KPX Yacute Adieresis -50 +KPX Yacute Agrave -50 +KPX Yacute Amacron -50 +KPX Yacute Aogonek -50 +KPX Yacute Aring -50 +KPX Yacute Atilde -50 +KPX Yacute O -15 +KPX Yacute Oacute -15 +KPX Yacute Ocircumflex -15 +KPX Yacute Odieresis -15 +KPX Yacute Ograve -15 +KPX Yacute Ohungarumlaut -15 +KPX Yacute Omacron -15 +KPX Yacute Oslash -15 +KPX Yacute Otilde -15 +KPX Yacute a -92 +KPX Yacute aacute -92 +KPX Yacute abreve -92 +KPX Yacute acircumflex -92 +KPX Yacute adieresis -92 +KPX Yacute agrave -92 +KPX Yacute amacron -92 +KPX Yacute aogonek -92 +KPX Yacute aring -92 +KPX Yacute atilde -92 +KPX Yacute colon -65 +KPX Yacute comma -92 +KPX Yacute e -92 +KPX Yacute eacute -92 +KPX Yacute ecaron -92 +KPX Yacute ecircumflex -92 +KPX Yacute edieresis -52 +KPX Yacute edotaccent -92 +KPX Yacute egrave -52 +KPX Yacute emacron -52 +KPX Yacute eogonek -92 +KPX Yacute hyphen -74 +KPX Yacute i -74 +KPX Yacute iacute -74 +KPX Yacute icircumflex -34 +KPX Yacute idieresis -34 +KPX Yacute igrave -34 +KPX Yacute imacron -34 +KPX Yacute iogonek -74 +KPX Yacute o -92 +KPX Yacute oacute -92 +KPX Yacute ocircumflex -92 +KPX Yacute odieresis -92 +KPX Yacute ograve -92 +KPX Yacute ohungarumlaut -92 +KPX Yacute omacron -92 +KPX Yacute oslash -92 +KPX Yacute otilde -92 +KPX Yacute period -92 +KPX Yacute semicolon -65 +KPX Yacute u -92 +KPX Yacute uacute -92 +KPX Yacute ucircumflex -92 +KPX Yacute udieresis -92 +KPX Yacute ugrave -92 +KPX Yacute uhungarumlaut -92 +KPX Yacute umacron -92 +KPX Yacute uogonek -92 +KPX Yacute uring -92 +KPX Ydieresis A -50 +KPX Ydieresis Aacute -50 +KPX Ydieresis Abreve -50 +KPX Ydieresis Acircumflex -50 +KPX Ydieresis Adieresis -50 +KPX Ydieresis Agrave -50 +KPX Ydieresis Amacron -50 +KPX Ydieresis Aogonek -50 +KPX Ydieresis Aring -50 +KPX Ydieresis Atilde -50 +KPX Ydieresis O -15 +KPX Ydieresis Oacute -15 +KPX Ydieresis Ocircumflex -15 +KPX Ydieresis Odieresis -15 +KPX Ydieresis Ograve -15 +KPX Ydieresis Ohungarumlaut -15 +KPX Ydieresis Omacron -15 +KPX Ydieresis Oslash -15 +KPX Ydieresis Otilde -15 +KPX Ydieresis a -92 +KPX Ydieresis aacute -92 +KPX Ydieresis abreve -92 +KPX Ydieresis acircumflex -92 +KPX Ydieresis adieresis -92 +KPX Ydieresis agrave -92 +KPX Ydieresis amacron -92 +KPX Ydieresis aogonek -92 +KPX Ydieresis aring -92 +KPX Ydieresis atilde -92 +KPX Ydieresis colon -65 +KPX Ydieresis comma -92 +KPX Ydieresis e -92 +KPX Ydieresis eacute -92 +KPX Ydieresis ecaron -92 +KPX Ydieresis ecircumflex -92 +KPX Ydieresis edieresis -52 +KPX Ydieresis edotaccent -92 +KPX Ydieresis egrave -52 +KPX Ydieresis emacron -52 +KPX Ydieresis eogonek -92 +KPX Ydieresis hyphen -74 +KPX Ydieresis i -74 +KPX Ydieresis iacute -74 +KPX Ydieresis icircumflex -34 +KPX Ydieresis idieresis -34 +KPX Ydieresis igrave -34 +KPX Ydieresis imacron -34 +KPX Ydieresis iogonek -74 +KPX Ydieresis o -92 +KPX Ydieresis oacute -92 +KPX Ydieresis ocircumflex -92 +KPX Ydieresis odieresis -92 +KPX Ydieresis ograve -92 +KPX Ydieresis ohungarumlaut -92 +KPX Ydieresis omacron -92 +KPX Ydieresis oslash -92 +KPX Ydieresis otilde -92 +KPX Ydieresis period -92 +KPX Ydieresis semicolon -65 +KPX Ydieresis u -92 +KPX Ydieresis uacute -92 +KPX Ydieresis ucircumflex -92 +KPX Ydieresis udieresis -92 +KPX Ydieresis ugrave -92 +KPX Ydieresis uhungarumlaut -92 +KPX Ydieresis umacron -92 +KPX Ydieresis uogonek -92 +KPX Ydieresis uring -92 +KPX a g -10 +KPX a gbreve -10 +KPX a gcommaaccent -10 +KPX aacute g -10 +KPX aacute gbreve -10 +KPX aacute gcommaaccent -10 +KPX abreve g -10 +KPX abreve gbreve -10 +KPX abreve gcommaaccent -10 +KPX acircumflex g -10 +KPX acircumflex gbreve -10 +KPX acircumflex gcommaaccent -10 +KPX adieresis g -10 +KPX adieresis gbreve -10 +KPX adieresis gcommaaccent -10 +KPX agrave g -10 +KPX agrave gbreve -10 +KPX agrave gcommaaccent -10 +KPX amacron g -10 +KPX amacron gbreve -10 +KPX amacron gcommaaccent -10 +KPX aogonek g -10 +KPX aogonek gbreve -10 +KPX aogonek gcommaaccent -10 +KPX aring g -10 +KPX aring gbreve -10 +KPX aring gcommaaccent -10 +KPX atilde g -10 +KPX atilde gbreve -10 +KPX atilde gcommaaccent -10 +KPX b period -40 +KPX b u -20 +KPX b uacute -20 +KPX b ucircumflex -20 +KPX b udieresis -20 +KPX b ugrave -20 +KPX b uhungarumlaut -20 +KPX b umacron -20 +KPX b uogonek -20 +KPX b uring -20 +KPX c h -15 +KPX c k -20 +KPX c kcommaaccent -20 +KPX cacute h -15 +KPX cacute k -20 +KPX cacute kcommaaccent -20 +KPX ccaron h -15 +KPX ccaron k -20 +KPX ccaron kcommaaccent -20 +KPX ccedilla h -15 +KPX ccedilla k -20 +KPX ccedilla kcommaaccent -20 +KPX comma quotedblright -140 +KPX comma quoteright -140 +KPX e comma -10 +KPX e g -40 +KPX e gbreve -40 +KPX e gcommaaccent -40 +KPX e period -15 +KPX e v -15 +KPX e w -15 +KPX e x -20 +KPX e y -30 +KPX e yacute -30 +KPX e ydieresis -30 +KPX eacute comma -10 +KPX eacute g -40 +KPX eacute gbreve -40 +KPX eacute gcommaaccent -40 +KPX eacute period -15 +KPX eacute v -15 +KPX eacute w -15 +KPX eacute x -20 +KPX eacute y -30 +KPX eacute yacute -30 +KPX eacute ydieresis -30 +KPX ecaron comma -10 +KPX ecaron g -40 +KPX ecaron gbreve -40 +KPX ecaron gcommaaccent -40 +KPX ecaron period -15 +KPX ecaron v -15 +KPX ecaron w -15 +KPX ecaron x -20 +KPX ecaron y -30 +KPX ecaron yacute -30 +KPX ecaron ydieresis -30 +KPX ecircumflex comma -10 +KPX ecircumflex g -40 +KPX ecircumflex gbreve -40 +KPX ecircumflex gcommaaccent -40 +KPX ecircumflex period -15 +KPX ecircumflex v -15 +KPX ecircumflex w -15 +KPX ecircumflex x -20 +KPX ecircumflex y -30 +KPX ecircumflex yacute -30 +KPX ecircumflex ydieresis -30 +KPX edieresis comma -10 +KPX edieresis g -40 +KPX edieresis gbreve -40 +KPX edieresis gcommaaccent -40 +KPX edieresis period -15 +KPX edieresis v -15 +KPX edieresis w -15 +KPX edieresis x -20 +KPX edieresis y -30 +KPX edieresis yacute -30 +KPX edieresis ydieresis -30 +KPX edotaccent comma -10 +KPX edotaccent g -40 +KPX edotaccent gbreve -40 +KPX edotaccent gcommaaccent -40 +KPX edotaccent period -15 +KPX edotaccent v -15 +KPX edotaccent w -15 +KPX edotaccent x -20 +KPX edotaccent y -30 +KPX edotaccent yacute -30 +KPX edotaccent ydieresis -30 +KPX egrave comma -10 +KPX egrave g -40 +KPX egrave gbreve -40 +KPX egrave gcommaaccent -40 +KPX egrave period -15 +KPX egrave v -15 +KPX egrave w -15 +KPX egrave x -20 +KPX egrave y -30 +KPX egrave yacute -30 +KPX egrave ydieresis -30 +KPX emacron comma -10 +KPX emacron g -40 +KPX emacron gbreve -40 +KPX emacron gcommaaccent -40 +KPX emacron period -15 +KPX emacron v -15 +KPX emacron w -15 +KPX emacron x -20 +KPX emacron y -30 +KPX emacron yacute -30 +KPX emacron ydieresis -30 +KPX eogonek comma -10 +KPX eogonek g -40 +KPX eogonek gbreve -40 +KPX eogonek gcommaaccent -40 +KPX eogonek period -15 +KPX eogonek v -15 +KPX eogonek w -15 +KPX eogonek x -20 +KPX eogonek y -30 +KPX eogonek yacute -30 +KPX eogonek ydieresis -30 +KPX f comma -10 +KPX f dotlessi -60 +KPX f f -18 +KPX f i -20 +KPX f iogonek -20 +KPX f period -15 +KPX f quoteright 92 +KPX g comma -10 +KPX g e -10 +KPX g eacute -10 +KPX g ecaron -10 +KPX g ecircumflex -10 +KPX g edieresis -10 +KPX g edotaccent -10 +KPX g egrave -10 +KPX g emacron -10 +KPX g eogonek -10 +KPX g g -10 +KPX g gbreve -10 +KPX g gcommaaccent -10 +KPX g period -15 +KPX gbreve comma -10 +KPX gbreve e -10 +KPX gbreve eacute -10 +KPX gbreve ecaron -10 +KPX gbreve ecircumflex -10 +KPX gbreve edieresis -10 +KPX gbreve edotaccent -10 +KPX gbreve egrave -10 +KPX gbreve emacron -10 +KPX gbreve eogonek -10 +KPX gbreve g -10 +KPX gbreve gbreve -10 +KPX gbreve gcommaaccent -10 +KPX gbreve period -15 +KPX gcommaaccent comma -10 +KPX gcommaaccent e -10 +KPX gcommaaccent eacute -10 +KPX gcommaaccent ecaron -10 +KPX gcommaaccent ecircumflex -10 +KPX gcommaaccent edieresis -10 +KPX gcommaaccent edotaccent -10 +KPX gcommaaccent egrave -10 +KPX gcommaaccent emacron -10 +KPX gcommaaccent eogonek -10 +KPX gcommaaccent g -10 +KPX gcommaaccent gbreve -10 +KPX gcommaaccent gcommaaccent -10 +KPX gcommaaccent period -15 +KPX k e -10 +KPX k eacute -10 +KPX k ecaron -10 +KPX k ecircumflex -10 +KPX k edieresis -10 +KPX k edotaccent -10 +KPX k egrave -10 +KPX k emacron -10 +KPX k eogonek -10 +KPX k o -10 +KPX k oacute -10 +KPX k ocircumflex -10 +KPX k odieresis -10 +KPX k ograve -10 +KPX k ohungarumlaut -10 +KPX k omacron -10 +KPX k oslash -10 +KPX k otilde -10 +KPX k y -10 +KPX k yacute -10 +KPX k ydieresis -10 +KPX kcommaaccent e -10 +KPX kcommaaccent eacute -10 +KPX kcommaaccent ecaron -10 +KPX kcommaaccent ecircumflex -10 +KPX kcommaaccent edieresis -10 +KPX kcommaaccent edotaccent -10 +KPX kcommaaccent egrave -10 +KPX kcommaaccent emacron -10 +KPX kcommaaccent eogonek -10 +KPX kcommaaccent o -10 +KPX kcommaaccent oacute -10 +KPX kcommaaccent ocircumflex -10 +KPX kcommaaccent odieresis -10 +KPX kcommaaccent ograve -10 +KPX kcommaaccent ohungarumlaut -10 +KPX kcommaaccent omacron -10 +KPX kcommaaccent oslash -10 +KPX kcommaaccent otilde -10 +KPX kcommaaccent y -10 +KPX kcommaaccent yacute -10 +KPX kcommaaccent ydieresis -10 +KPX n v -40 +KPX nacute v -40 +KPX ncaron v -40 +KPX ncommaaccent v -40 +KPX ntilde v -40 +KPX o g -10 +KPX o gbreve -10 +KPX o gcommaaccent -10 +KPX o v -10 +KPX oacute g -10 +KPX oacute gbreve -10 +KPX oacute gcommaaccent -10 +KPX oacute v -10 +KPX ocircumflex g -10 +KPX ocircumflex gbreve -10 +KPX ocircumflex gcommaaccent -10 +KPX ocircumflex v -10 +KPX odieresis g -10 +KPX odieresis gbreve -10 +KPX odieresis gcommaaccent -10 +KPX odieresis v -10 +KPX ograve g -10 +KPX ograve gbreve -10 +KPX ograve gcommaaccent -10 +KPX ograve v -10 +KPX ohungarumlaut g -10 +KPX ohungarumlaut gbreve -10 +KPX ohungarumlaut gcommaaccent -10 +KPX ohungarumlaut v -10 +KPX omacron g -10 +KPX omacron gbreve -10 +KPX omacron gcommaaccent -10 +KPX omacron v -10 +KPX oslash g -10 +KPX oslash gbreve -10 +KPX oslash gcommaaccent -10 +KPX oslash v -10 +KPX otilde g -10 +KPX otilde gbreve -10 +KPX otilde gcommaaccent -10 +KPX otilde v -10 +KPX period quotedblright -140 +KPX period quoteright -140 +KPX quoteleft quoteleft -111 +KPX quoteright d -25 +KPX quoteright dcroat -25 +KPX quoteright quoteright -111 +KPX quoteright r -25 +KPX quoteright racute -25 +KPX quoteright rcaron -25 +KPX quoteright rcommaaccent -25 +KPX quoteright s -40 +KPX quoteright sacute -40 +KPX quoteright scaron -40 +KPX quoteright scedilla -40 +KPX quoteright scommaaccent -40 +KPX quoteright space -111 +KPX quoteright t -30 +KPX quoteright tcommaaccent -30 +KPX quoteright v -10 +KPX r a -15 +KPX r aacute -15 +KPX r abreve -15 +KPX r acircumflex -15 +KPX r adieresis -15 +KPX r agrave -15 +KPX r amacron -15 +KPX r aogonek -15 +KPX r aring -15 +KPX r atilde -15 +KPX r c -37 +KPX r cacute -37 +KPX r ccaron -37 +KPX r ccedilla -37 +KPX r comma -111 +KPX r d -37 +KPX r dcroat -37 +KPX r e -37 +KPX r eacute -37 +KPX r ecaron -37 +KPX r ecircumflex -37 +KPX r edieresis -37 +KPX r edotaccent -37 +KPX r egrave -37 +KPX r emacron -37 +KPX r eogonek -37 +KPX r g -37 +KPX r gbreve -37 +KPX r gcommaaccent -37 +KPX r hyphen -20 +KPX r o -45 +KPX r oacute -45 +KPX r ocircumflex -45 +KPX r odieresis -45 +KPX r ograve -45 +KPX r ohungarumlaut -45 +KPX r omacron -45 +KPX r oslash -45 +KPX r otilde -45 +KPX r period -111 +KPX r q -37 +KPX r s -10 +KPX r sacute -10 +KPX r scaron -10 +KPX r scedilla -10 +KPX r scommaaccent -10 +KPX racute a -15 +KPX racute aacute -15 +KPX racute abreve -15 +KPX racute acircumflex -15 +KPX racute adieresis -15 +KPX racute agrave -15 +KPX racute amacron -15 +KPX racute aogonek -15 +KPX racute aring -15 +KPX racute atilde -15 +KPX racute c -37 +KPX racute cacute -37 +KPX racute ccaron -37 +KPX racute ccedilla -37 +KPX racute comma -111 +KPX racute d -37 +KPX racute dcroat -37 +KPX racute e -37 +KPX racute eacute -37 +KPX racute ecaron -37 +KPX racute ecircumflex -37 +KPX racute edieresis -37 +KPX racute edotaccent -37 +KPX racute egrave -37 +KPX racute emacron -37 +KPX racute eogonek -37 +KPX racute g -37 +KPX racute gbreve -37 +KPX racute gcommaaccent -37 +KPX racute hyphen -20 +KPX racute o -45 +KPX racute oacute -45 +KPX racute ocircumflex -45 +KPX racute odieresis -45 +KPX racute ograve -45 +KPX racute ohungarumlaut -45 +KPX racute omacron -45 +KPX racute oslash -45 +KPX racute otilde -45 +KPX racute period -111 +KPX racute q -37 +KPX racute s -10 +KPX racute sacute -10 +KPX racute scaron -10 +KPX racute scedilla -10 +KPX racute scommaaccent -10 +KPX rcaron a -15 +KPX rcaron aacute -15 +KPX rcaron abreve -15 +KPX rcaron acircumflex -15 +KPX rcaron adieresis -15 +KPX rcaron agrave -15 +KPX rcaron amacron -15 +KPX rcaron aogonek -15 +KPX rcaron aring -15 +KPX rcaron atilde -15 +KPX rcaron c -37 +KPX rcaron cacute -37 +KPX rcaron ccaron -37 +KPX rcaron ccedilla -37 +KPX rcaron comma -111 +KPX rcaron d -37 +KPX rcaron dcroat -37 +KPX rcaron e -37 +KPX rcaron eacute -37 +KPX rcaron ecaron -37 +KPX rcaron ecircumflex -37 +KPX rcaron edieresis -37 +KPX rcaron edotaccent -37 +KPX rcaron egrave -37 +KPX rcaron emacron -37 +KPX rcaron eogonek -37 +KPX rcaron g -37 +KPX rcaron gbreve -37 +KPX rcaron gcommaaccent -37 +KPX rcaron hyphen -20 +KPX rcaron o -45 +KPX rcaron oacute -45 +KPX rcaron ocircumflex -45 +KPX rcaron odieresis -45 +KPX rcaron ograve -45 +KPX rcaron ohungarumlaut -45 +KPX rcaron omacron -45 +KPX rcaron oslash -45 +KPX rcaron otilde -45 +KPX rcaron period -111 +KPX rcaron q -37 +KPX rcaron s -10 +KPX rcaron sacute -10 +KPX rcaron scaron -10 +KPX rcaron scedilla -10 +KPX rcaron scommaaccent -10 +KPX rcommaaccent a -15 +KPX rcommaaccent aacute -15 +KPX rcommaaccent abreve -15 +KPX rcommaaccent acircumflex -15 +KPX rcommaaccent adieresis -15 +KPX rcommaaccent agrave -15 +KPX rcommaaccent amacron -15 +KPX rcommaaccent aogonek -15 +KPX rcommaaccent aring -15 +KPX rcommaaccent atilde -15 +KPX rcommaaccent c -37 +KPX rcommaaccent cacute -37 +KPX rcommaaccent ccaron -37 +KPX rcommaaccent ccedilla -37 +KPX rcommaaccent comma -111 +KPX rcommaaccent d -37 +KPX rcommaaccent dcroat -37 +KPX rcommaaccent e -37 +KPX rcommaaccent eacute -37 +KPX rcommaaccent ecaron -37 +KPX rcommaaccent ecircumflex -37 +KPX rcommaaccent edieresis -37 +KPX rcommaaccent edotaccent -37 +KPX rcommaaccent egrave -37 +KPX rcommaaccent emacron -37 +KPX rcommaaccent eogonek -37 +KPX rcommaaccent g -37 +KPX rcommaaccent gbreve -37 +KPX rcommaaccent gcommaaccent -37 +KPX rcommaaccent hyphen -20 +KPX rcommaaccent o -45 +KPX rcommaaccent oacute -45 +KPX rcommaaccent ocircumflex -45 +KPX rcommaaccent odieresis -45 +KPX rcommaaccent ograve -45 +KPX rcommaaccent ohungarumlaut -45 +KPX rcommaaccent omacron -45 +KPX rcommaaccent oslash -45 +KPX rcommaaccent otilde -45 +KPX rcommaaccent period -111 +KPX rcommaaccent q -37 +KPX rcommaaccent s -10 +KPX rcommaaccent sacute -10 +KPX rcommaaccent scaron -10 +KPX rcommaaccent scedilla -10 +KPX rcommaaccent scommaaccent -10 +KPX space A -18 +KPX space Aacute -18 +KPX space Abreve -18 +KPX space Acircumflex -18 +KPX space Adieresis -18 +KPX space Agrave -18 +KPX space Amacron -18 +KPX space Aogonek -18 +KPX space Aring -18 +KPX space Atilde -18 +KPX space T -18 +KPX space Tcaron -18 +KPX space Tcommaaccent -18 +KPX space V -35 +KPX space W -40 +KPX space Y -75 +KPX space Yacute -75 +KPX space Ydieresis -75 +KPX v comma -74 +KPX v period -74 +KPX w comma -74 +KPX w period -74 +KPX y comma -55 +KPX y period -55 +KPX yacute comma -55 +KPX yacute period -55 +KPX ydieresis comma -55 +KPX ydieresis period -55 +EndKernPairs +EndKernData +EndFontMetrics diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/Times-Roman.afm b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/Times-Roman.afm new file mode 100755 index 00000000..a0953f28 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/Times-Roman.afm @@ -0,0 +1,2419 @@ +StartFontMetrics 4.1 +Comment Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved. +Comment Creation Date: Thu May 1 12:49:17 1997 +Comment UniqueID 43068 +Comment VMusage 43909 54934 +FontName Times-Roman +FullName Times Roman +FamilyName Times +Weight Roman +ItalicAngle 0 +IsFixedPitch false +CharacterSet ExtendedRoman +FontBBox -168 -218 1000 898 +UnderlinePosition -100 +UnderlineThickness 50 +Version 002.000 +Notice Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.Times is a trademark of Linotype-Hell AG and/or its subsidiaries. +EncodingScheme AdobeStandardEncoding +CapHeight 662 +XHeight 450 +Ascender 683 +Descender -217 +StdHW 28 +StdVW 84 +StartCharMetrics 315 +C 32 ; WX 250 ; N space ; B 0 0 0 0 ; +C 33 ; WX 333 ; N exclam ; B 130 -9 238 676 ; +C 34 ; WX 408 ; N quotedbl ; B 77 431 331 676 ; +C 35 ; WX 500 ; N numbersign ; B 5 0 496 662 ; +C 36 ; WX 500 ; N dollar ; B 44 -87 457 727 ; +C 37 ; WX 833 ; N percent ; B 61 -13 772 676 ; +C 38 ; WX 778 ; N ampersand ; B 42 -13 750 676 ; +C 39 ; WX 333 ; N quoteright ; B 79 433 218 676 ; +C 40 ; WX 333 ; N parenleft ; B 48 -177 304 676 ; +C 41 ; WX 333 ; N parenright ; B 29 -177 285 676 ; +C 42 ; WX 500 ; N asterisk ; B 69 265 432 676 ; +C 43 ; WX 564 ; N plus ; B 30 0 534 506 ; +C 44 ; WX 250 ; N comma ; B 56 -141 195 102 ; +C 45 ; WX 333 ; N hyphen ; B 39 194 285 257 ; +C 46 ; WX 250 ; N period ; B 70 -11 181 100 ; +C 47 ; WX 278 ; N slash ; B -9 -14 287 676 ; +C 48 ; WX 500 ; N zero ; B 24 -14 476 676 ; +C 49 ; WX 500 ; N one ; B 111 0 394 676 ; +C 50 ; WX 500 ; N two ; B 30 0 475 676 ; +C 51 ; WX 500 ; N three ; B 43 -14 431 676 ; +C 52 ; WX 500 ; N four ; B 12 0 472 676 ; +C 53 ; WX 500 ; N five ; B 32 -14 438 688 ; +C 54 ; WX 500 ; N six ; B 34 -14 468 684 ; +C 55 ; WX 500 ; N seven ; B 20 -8 449 662 ; +C 56 ; WX 500 ; N eight ; B 56 -14 445 676 ; +C 57 ; WX 500 ; N nine ; B 30 -22 459 676 ; +C 58 ; WX 278 ; N colon ; B 81 -11 192 459 ; +C 59 ; WX 278 ; N semicolon ; B 80 -141 219 459 ; +C 60 ; WX 564 ; N less ; B 28 -8 536 514 ; +C 61 ; WX 564 ; N equal ; B 30 120 534 386 ; +C 62 ; WX 564 ; N greater ; B 28 -8 536 514 ; +C 63 ; WX 444 ; N question ; B 68 -8 414 676 ; +C 64 ; WX 921 ; N at ; B 116 -14 809 676 ; +C 65 ; WX 722 ; N A ; B 15 0 706 674 ; +C 66 ; WX 667 ; N B ; B 17 0 593 662 ; +C 67 ; WX 667 ; N C ; B 28 -14 633 676 ; +C 68 ; WX 722 ; N D ; B 16 0 685 662 ; +C 69 ; WX 611 ; N E ; B 12 0 597 662 ; +C 70 ; WX 556 ; N F ; B 12 0 546 662 ; +C 71 ; WX 722 ; N G ; B 32 -14 709 676 ; +C 72 ; WX 722 ; N H ; B 19 0 702 662 ; +C 73 ; WX 333 ; N I ; B 18 0 315 662 ; +C 74 ; WX 389 ; N J ; B 10 -14 370 662 ; +C 75 ; WX 722 ; N K ; B 34 0 723 662 ; +C 76 ; WX 611 ; N L ; B 12 0 598 662 ; +C 77 ; WX 889 ; N M ; B 12 0 863 662 ; +C 78 ; WX 722 ; N N ; B 12 -11 707 662 ; +C 79 ; WX 722 ; N O ; B 34 -14 688 676 ; +C 80 ; WX 556 ; N P ; B 16 0 542 662 ; +C 81 ; WX 722 ; N Q ; B 34 -178 701 676 ; +C 82 ; WX 667 ; N R ; B 17 0 659 662 ; +C 83 ; WX 556 ; N S ; B 42 -14 491 676 ; +C 84 ; WX 611 ; N T ; B 17 0 593 662 ; +C 85 ; WX 722 ; N U ; B 14 -14 705 662 ; +C 86 ; WX 722 ; N V ; B 16 -11 697 662 ; +C 87 ; WX 944 ; N W ; B 5 -11 932 662 ; +C 88 ; WX 722 ; N X ; B 10 0 704 662 ; +C 89 ; WX 722 ; N Y ; B 22 0 703 662 ; +C 90 ; WX 611 ; N Z ; B 9 0 597 662 ; +C 91 ; WX 333 ; N bracketleft ; B 88 -156 299 662 ; +C 92 ; WX 278 ; N backslash ; B -9 -14 287 676 ; +C 93 ; WX 333 ; N bracketright ; B 34 -156 245 662 ; +C 94 ; WX 469 ; N asciicircum ; B 24 297 446 662 ; +C 95 ; WX 500 ; N underscore ; B 0 -125 500 -75 ; +C 96 ; WX 333 ; N quoteleft ; B 115 433 254 676 ; +C 97 ; WX 444 ; N a ; B 37 -10 442 460 ; +C 98 ; WX 500 ; N b ; B 3 -10 468 683 ; +C 99 ; WX 444 ; N c ; B 25 -10 412 460 ; +C 100 ; WX 500 ; N d ; B 27 -10 491 683 ; +C 101 ; WX 444 ; N e ; B 25 -10 424 460 ; +C 102 ; WX 333 ; N f ; B 20 0 383 683 ; L i fi ; L l fl ; +C 103 ; WX 500 ; N g ; B 28 -218 470 460 ; +C 104 ; WX 500 ; N h ; B 9 0 487 683 ; +C 105 ; WX 278 ; N i ; B 16 0 253 683 ; +C 106 ; WX 278 ; N j ; B -70 -218 194 683 ; +C 107 ; WX 500 ; N k ; B 7 0 505 683 ; +C 108 ; WX 278 ; N l ; B 19 0 257 683 ; +C 109 ; WX 778 ; N m ; B 16 0 775 460 ; +C 110 ; WX 500 ; N n ; B 16 0 485 460 ; +C 111 ; WX 500 ; N o ; B 29 -10 470 460 ; +C 112 ; WX 500 ; N p ; B 5 -217 470 460 ; +C 113 ; WX 500 ; N q ; B 24 -217 488 460 ; +C 114 ; WX 333 ; N r ; B 5 0 335 460 ; +C 115 ; WX 389 ; N s ; B 51 -10 348 460 ; +C 116 ; WX 278 ; N t ; B 13 -10 279 579 ; +C 117 ; WX 500 ; N u ; B 9 -10 479 450 ; +C 118 ; WX 500 ; N v ; B 19 -14 477 450 ; +C 119 ; WX 722 ; N w ; B 21 -14 694 450 ; +C 120 ; WX 500 ; N x ; B 17 0 479 450 ; +C 121 ; WX 500 ; N y ; B 14 -218 475 450 ; +C 122 ; WX 444 ; N z ; B 27 0 418 450 ; +C 123 ; WX 480 ; N braceleft ; B 100 -181 350 680 ; +C 124 ; WX 200 ; N bar ; B 67 -218 133 782 ; +C 125 ; WX 480 ; N braceright ; B 130 -181 380 680 ; +C 126 ; WX 541 ; N asciitilde ; B 40 183 502 323 ; +C 161 ; WX 333 ; N exclamdown ; B 97 -218 205 467 ; +C 162 ; WX 500 ; N cent ; B 53 -138 448 579 ; +C 163 ; WX 500 ; N sterling ; B 12 -8 490 676 ; +C 164 ; WX 167 ; N fraction ; B -168 -14 331 676 ; +C 165 ; WX 500 ; N yen ; B -53 0 512 662 ; +C 166 ; WX 500 ; N florin ; B 7 -189 490 676 ; +C 167 ; WX 500 ; N section ; B 70 -148 426 676 ; +C 168 ; WX 500 ; N currency ; B -22 58 522 602 ; +C 169 ; WX 180 ; N quotesingle ; B 48 431 133 676 ; +C 170 ; WX 444 ; N quotedblleft ; B 43 433 414 676 ; +C 171 ; WX 500 ; N guillemotleft ; B 42 33 456 416 ; +C 172 ; WX 333 ; N guilsinglleft ; B 63 33 285 416 ; +C 173 ; WX 333 ; N guilsinglright ; B 48 33 270 416 ; +C 174 ; WX 556 ; N fi ; B 31 0 521 683 ; +C 175 ; WX 556 ; N fl ; B 32 0 521 683 ; +C 177 ; WX 500 ; N endash ; B 0 201 500 250 ; +C 178 ; WX 500 ; N dagger ; B 59 -149 442 676 ; +C 179 ; WX 500 ; N daggerdbl ; B 58 -153 442 676 ; +C 180 ; WX 250 ; N periodcentered ; B 70 199 181 310 ; +C 182 ; WX 453 ; N paragraph ; B -22 -154 450 662 ; +C 183 ; WX 350 ; N bullet ; B 40 196 310 466 ; +C 184 ; WX 333 ; N quotesinglbase ; B 79 -141 218 102 ; +C 185 ; WX 444 ; N quotedblbase ; B 45 -141 416 102 ; +C 186 ; WX 444 ; N quotedblright ; B 30 433 401 676 ; +C 187 ; WX 500 ; N guillemotright ; B 44 33 458 416 ; +C 188 ; WX 1000 ; N ellipsis ; B 111 -11 888 100 ; +C 189 ; WX 1000 ; N perthousand ; B 7 -19 994 706 ; +C 191 ; WX 444 ; N questiondown ; B 30 -218 376 466 ; +C 193 ; WX 333 ; N grave ; B 19 507 242 678 ; +C 194 ; WX 333 ; N acute ; B 93 507 317 678 ; +C 195 ; WX 333 ; N circumflex ; B 11 507 322 674 ; +C 196 ; WX 333 ; N tilde ; B 1 532 331 638 ; +C 197 ; WX 333 ; N macron ; B 11 547 322 601 ; +C 198 ; WX 333 ; N breve ; B 26 507 307 664 ; +C 199 ; WX 333 ; N dotaccent ; B 118 581 216 681 ; +C 200 ; WX 333 ; N dieresis ; B 18 581 315 681 ; +C 202 ; WX 333 ; N ring ; B 67 512 266 711 ; +C 203 ; WX 333 ; N cedilla ; B 52 -215 261 0 ; +C 205 ; WX 333 ; N hungarumlaut ; B -3 507 377 678 ; +C 206 ; WX 333 ; N ogonek ; B 62 -165 243 0 ; +C 207 ; WX 333 ; N caron ; B 11 507 322 674 ; +C 208 ; WX 1000 ; N emdash ; B 0 201 1000 250 ; +C 225 ; WX 889 ; N AE ; B 0 0 863 662 ; +C 227 ; WX 276 ; N ordfeminine ; B 4 394 270 676 ; +C 232 ; WX 611 ; N Lslash ; B 12 0 598 662 ; +C 233 ; WX 722 ; N Oslash ; B 34 -80 688 734 ; +C 234 ; WX 889 ; N OE ; B 30 -6 885 668 ; +C 235 ; WX 310 ; N ordmasculine ; B 6 394 304 676 ; +C 241 ; WX 667 ; N ae ; B 38 -10 632 460 ; +C 245 ; WX 278 ; N dotlessi ; B 16 0 253 460 ; +C 248 ; WX 278 ; N lslash ; B 19 0 259 683 ; +C 249 ; WX 500 ; N oslash ; B 29 -112 470 551 ; +C 250 ; WX 722 ; N oe ; B 30 -10 690 460 ; +C 251 ; WX 500 ; N germandbls ; B 12 -9 468 683 ; +C -1 ; WX 333 ; N Idieresis ; B 18 0 315 835 ; +C -1 ; WX 444 ; N eacute ; B 25 -10 424 678 ; +C -1 ; WX 444 ; N abreve ; B 37 -10 442 664 ; +C -1 ; WX 500 ; N uhungarumlaut ; B 9 -10 501 678 ; +C -1 ; WX 444 ; N ecaron ; B 25 -10 424 674 ; +C -1 ; WX 722 ; N Ydieresis ; B 22 0 703 835 ; +C -1 ; WX 564 ; N divide ; B 30 -10 534 516 ; +C -1 ; WX 722 ; N Yacute ; B 22 0 703 890 ; +C -1 ; WX 722 ; N Acircumflex ; B 15 0 706 886 ; +C -1 ; WX 444 ; N aacute ; B 37 -10 442 678 ; +C -1 ; WX 722 ; N Ucircumflex ; B 14 -14 705 886 ; +C -1 ; WX 500 ; N yacute ; B 14 -218 475 678 ; +C -1 ; WX 389 ; N scommaaccent ; B 51 -218 348 460 ; +C -1 ; WX 444 ; N ecircumflex ; B 25 -10 424 674 ; +C -1 ; WX 722 ; N Uring ; B 14 -14 705 898 ; +C -1 ; WX 722 ; N Udieresis ; B 14 -14 705 835 ; +C -1 ; WX 444 ; N aogonek ; B 37 -165 469 460 ; +C -1 ; WX 722 ; N Uacute ; B 14 -14 705 890 ; +C -1 ; WX 500 ; N uogonek ; B 9 -155 487 450 ; +C -1 ; WX 611 ; N Edieresis ; B 12 0 597 835 ; +C -1 ; WX 722 ; N Dcroat ; B 16 0 685 662 ; +C -1 ; WX 250 ; N commaaccent ; B 59 -218 184 -50 ; +C -1 ; WX 760 ; N copyright ; B 38 -14 722 676 ; +C -1 ; WX 611 ; N Emacron ; B 12 0 597 813 ; +C -1 ; WX 444 ; N ccaron ; B 25 -10 412 674 ; +C -1 ; WX 444 ; N aring ; B 37 -10 442 711 ; +C -1 ; WX 722 ; N Ncommaaccent ; B 12 -198 707 662 ; +C -1 ; WX 278 ; N lacute ; B 19 0 290 890 ; +C -1 ; WX 444 ; N agrave ; B 37 -10 442 678 ; +C -1 ; WX 611 ; N Tcommaaccent ; B 17 -218 593 662 ; +C -1 ; WX 667 ; N Cacute ; B 28 -14 633 890 ; +C -1 ; WX 444 ; N atilde ; B 37 -10 442 638 ; +C -1 ; WX 611 ; N Edotaccent ; B 12 0 597 835 ; +C -1 ; WX 389 ; N scaron ; B 39 -10 350 674 ; +C -1 ; WX 389 ; N scedilla ; B 51 -215 348 460 ; +C -1 ; WX 278 ; N iacute ; B 16 0 290 678 ; +C -1 ; WX 471 ; N lozenge ; B 13 0 459 724 ; +C -1 ; WX 667 ; N Rcaron ; B 17 0 659 886 ; +C -1 ; WX 722 ; N Gcommaaccent ; B 32 -218 709 676 ; +C -1 ; WX 500 ; N ucircumflex ; B 9 -10 479 674 ; +C -1 ; WX 444 ; N acircumflex ; B 37 -10 442 674 ; +C -1 ; WX 722 ; N Amacron ; B 15 0 706 813 ; +C -1 ; WX 333 ; N rcaron ; B 5 0 335 674 ; +C -1 ; WX 444 ; N ccedilla ; B 25 -215 412 460 ; +C -1 ; WX 611 ; N Zdotaccent ; B 9 0 597 835 ; +C -1 ; WX 556 ; N Thorn ; B 16 0 542 662 ; +C -1 ; WX 722 ; N Omacron ; B 34 -14 688 813 ; +C -1 ; WX 667 ; N Racute ; B 17 0 659 890 ; +C -1 ; WX 556 ; N Sacute ; B 42 -14 491 890 ; +C -1 ; WX 588 ; N dcaron ; B 27 -10 589 695 ; +C -1 ; WX 722 ; N Umacron ; B 14 -14 705 813 ; +C -1 ; WX 500 ; N uring ; B 9 -10 479 711 ; +C -1 ; WX 300 ; N threesuperior ; B 15 262 291 676 ; +C -1 ; WX 722 ; N Ograve ; B 34 -14 688 890 ; +C -1 ; WX 722 ; N Agrave ; B 15 0 706 890 ; +C -1 ; WX 722 ; N Abreve ; B 15 0 706 876 ; +C -1 ; WX 564 ; N multiply ; B 38 8 527 497 ; +C -1 ; WX 500 ; N uacute ; B 9 -10 479 678 ; +C -1 ; WX 611 ; N Tcaron ; B 17 0 593 886 ; +C -1 ; WX 476 ; N partialdiff ; B 17 -38 459 710 ; +C -1 ; WX 500 ; N ydieresis ; B 14 -218 475 623 ; +C -1 ; WX 722 ; N Nacute ; B 12 -11 707 890 ; +C -1 ; WX 278 ; N icircumflex ; B -16 0 295 674 ; +C -1 ; WX 611 ; N Ecircumflex ; B 12 0 597 886 ; +C -1 ; WX 444 ; N adieresis ; B 37 -10 442 623 ; +C -1 ; WX 444 ; N edieresis ; B 25 -10 424 623 ; +C -1 ; WX 444 ; N cacute ; B 25 -10 413 678 ; +C -1 ; WX 500 ; N nacute ; B 16 0 485 678 ; +C -1 ; WX 500 ; N umacron ; B 9 -10 479 601 ; +C -1 ; WX 722 ; N Ncaron ; B 12 -11 707 886 ; +C -1 ; WX 333 ; N Iacute ; B 18 0 317 890 ; +C -1 ; WX 564 ; N plusminus ; B 30 0 534 506 ; +C -1 ; WX 200 ; N brokenbar ; B 67 -143 133 707 ; +C -1 ; WX 760 ; N registered ; B 38 -14 722 676 ; +C -1 ; WX 722 ; N Gbreve ; B 32 -14 709 876 ; +C -1 ; WX 333 ; N Idotaccent ; B 18 0 315 835 ; +C -1 ; WX 600 ; N summation ; B 15 -10 585 706 ; +C -1 ; WX 611 ; N Egrave ; B 12 0 597 890 ; +C -1 ; WX 333 ; N racute ; B 5 0 335 678 ; +C -1 ; WX 500 ; N omacron ; B 29 -10 470 601 ; +C -1 ; WX 611 ; N Zacute ; B 9 0 597 890 ; +C -1 ; WX 611 ; N Zcaron ; B 9 0 597 886 ; +C -1 ; WX 549 ; N greaterequal ; B 26 0 523 666 ; +C -1 ; WX 722 ; N Eth ; B 16 0 685 662 ; +C -1 ; WX 667 ; N Ccedilla ; B 28 -215 633 676 ; +C -1 ; WX 278 ; N lcommaaccent ; B 19 -218 257 683 ; +C -1 ; WX 326 ; N tcaron ; B 13 -10 318 722 ; +C -1 ; WX 444 ; N eogonek ; B 25 -165 424 460 ; +C -1 ; WX 722 ; N Uogonek ; B 14 -165 705 662 ; +C -1 ; WX 722 ; N Aacute ; B 15 0 706 890 ; +C -1 ; WX 722 ; N Adieresis ; B 15 0 706 835 ; +C -1 ; WX 444 ; N egrave ; B 25 -10 424 678 ; +C -1 ; WX 444 ; N zacute ; B 27 0 418 678 ; +C -1 ; WX 278 ; N iogonek ; B 16 -165 265 683 ; +C -1 ; WX 722 ; N Oacute ; B 34 -14 688 890 ; +C -1 ; WX 500 ; N oacute ; B 29 -10 470 678 ; +C -1 ; WX 444 ; N amacron ; B 37 -10 442 601 ; +C -1 ; WX 389 ; N sacute ; B 51 -10 348 678 ; +C -1 ; WX 278 ; N idieresis ; B -9 0 288 623 ; +C -1 ; WX 722 ; N Ocircumflex ; B 34 -14 688 886 ; +C -1 ; WX 722 ; N Ugrave ; B 14 -14 705 890 ; +C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ; +C -1 ; WX 500 ; N thorn ; B 5 -217 470 683 ; +C -1 ; WX 300 ; N twosuperior ; B 1 270 296 676 ; +C -1 ; WX 722 ; N Odieresis ; B 34 -14 688 835 ; +C -1 ; WX 500 ; N mu ; B 36 -218 512 450 ; +C -1 ; WX 278 ; N igrave ; B -8 0 253 678 ; +C -1 ; WX 500 ; N ohungarumlaut ; B 29 -10 491 678 ; +C -1 ; WX 611 ; N Eogonek ; B 12 -165 597 662 ; +C -1 ; WX 500 ; N dcroat ; B 27 -10 500 683 ; +C -1 ; WX 750 ; N threequarters ; B 15 -14 718 676 ; +C -1 ; WX 556 ; N Scedilla ; B 42 -215 491 676 ; +C -1 ; WX 344 ; N lcaron ; B 19 0 347 695 ; +C -1 ; WX 722 ; N Kcommaaccent ; B 34 -198 723 662 ; +C -1 ; WX 611 ; N Lacute ; B 12 0 598 890 ; +C -1 ; WX 980 ; N trademark ; B 30 256 957 662 ; +C -1 ; WX 444 ; N edotaccent ; B 25 -10 424 623 ; +C -1 ; WX 333 ; N Igrave ; B 18 0 315 890 ; +C -1 ; WX 333 ; N Imacron ; B 11 0 322 813 ; +C -1 ; WX 611 ; N Lcaron ; B 12 0 598 676 ; +C -1 ; WX 750 ; N onehalf ; B 31 -14 746 676 ; +C -1 ; WX 549 ; N lessequal ; B 26 0 523 666 ; +C -1 ; WX 500 ; N ocircumflex ; B 29 -10 470 674 ; +C -1 ; WX 500 ; N ntilde ; B 16 0 485 638 ; +C -1 ; WX 722 ; N Uhungarumlaut ; B 14 -14 705 890 ; +C -1 ; WX 611 ; N Eacute ; B 12 0 597 890 ; +C -1 ; WX 444 ; N emacron ; B 25 -10 424 601 ; +C -1 ; WX 500 ; N gbreve ; B 28 -218 470 664 ; +C -1 ; WX 750 ; N onequarter ; B 37 -14 718 676 ; +C -1 ; WX 556 ; N Scaron ; B 42 -14 491 886 ; +C -1 ; WX 556 ; N Scommaaccent ; B 42 -218 491 676 ; +C -1 ; WX 722 ; N Ohungarumlaut ; B 34 -14 688 890 ; +C -1 ; WX 400 ; N degree ; B 57 390 343 676 ; +C -1 ; WX 500 ; N ograve ; B 29 -10 470 678 ; +C -1 ; WX 667 ; N Ccaron ; B 28 -14 633 886 ; +C -1 ; WX 500 ; N ugrave ; B 9 -10 479 678 ; +C -1 ; WX 453 ; N radical ; B 2 -60 452 768 ; +C -1 ; WX 722 ; N Dcaron ; B 16 0 685 886 ; +C -1 ; WX 333 ; N rcommaaccent ; B 5 -218 335 460 ; +C -1 ; WX 722 ; N Ntilde ; B 12 -11 707 850 ; +C -1 ; WX 500 ; N otilde ; B 29 -10 470 638 ; +C -1 ; WX 667 ; N Rcommaaccent ; B 17 -198 659 662 ; +C -1 ; WX 611 ; N Lcommaaccent ; B 12 -218 598 662 ; +C -1 ; WX 722 ; N Atilde ; B 15 0 706 850 ; +C -1 ; WX 722 ; N Aogonek ; B 15 -165 738 674 ; +C -1 ; WX 722 ; N Aring ; B 15 0 706 898 ; +C -1 ; WX 722 ; N Otilde ; B 34 -14 688 850 ; +C -1 ; WX 444 ; N zdotaccent ; B 27 0 418 623 ; +C -1 ; WX 611 ; N Ecaron ; B 12 0 597 886 ; +C -1 ; WX 333 ; N Iogonek ; B 18 -165 315 662 ; +C -1 ; WX 500 ; N kcommaaccent ; B 7 -218 505 683 ; +C -1 ; WX 564 ; N minus ; B 30 220 534 286 ; +C -1 ; WX 333 ; N Icircumflex ; B 11 0 322 886 ; +C -1 ; WX 500 ; N ncaron ; B 16 0 485 674 ; +C -1 ; WX 278 ; N tcommaaccent ; B 13 -218 279 579 ; +C -1 ; WX 564 ; N logicalnot ; B 30 108 534 386 ; +C -1 ; WX 500 ; N odieresis ; B 29 -10 470 623 ; +C -1 ; WX 500 ; N udieresis ; B 9 -10 479 623 ; +C -1 ; WX 549 ; N notequal ; B 12 -31 537 547 ; +C -1 ; WX 500 ; N gcommaaccent ; B 28 -218 470 749 ; +C -1 ; WX 500 ; N eth ; B 29 -10 471 686 ; +C -1 ; WX 444 ; N zcaron ; B 27 0 418 674 ; +C -1 ; WX 500 ; N ncommaaccent ; B 16 -218 485 460 ; +C -1 ; WX 300 ; N onesuperior ; B 57 270 248 676 ; +C -1 ; WX 278 ; N imacron ; B 6 0 271 601 ; +C -1 ; WX 500 ; N Euro ; B 0 0 0 0 ; +EndCharMetrics +StartKernData +StartKernPairs 2073 +KPX A C -40 +KPX A Cacute -40 +KPX A Ccaron -40 +KPX A Ccedilla -40 +KPX A G -40 +KPX A Gbreve -40 +KPX A Gcommaaccent -40 +KPX A O -55 +KPX A Oacute -55 +KPX A Ocircumflex -55 +KPX A Odieresis -55 +KPX A Ograve -55 +KPX A Ohungarumlaut -55 +KPX A Omacron -55 +KPX A Oslash -55 +KPX A Otilde -55 +KPX A Q -55 +KPX A T -111 +KPX A Tcaron -111 +KPX A Tcommaaccent -111 +KPX A U -55 +KPX A Uacute -55 +KPX A Ucircumflex -55 +KPX A Udieresis -55 +KPX A Ugrave -55 +KPX A Uhungarumlaut -55 +KPX A Umacron -55 +KPX A Uogonek -55 +KPX A Uring -55 +KPX A V -135 +KPX A W -90 +KPX A Y -105 +KPX A Yacute -105 +KPX A Ydieresis -105 +KPX A quoteright -111 +KPX A v -74 +KPX A w -92 +KPX A y -92 +KPX A yacute -92 +KPX A ydieresis -92 +KPX Aacute C -40 +KPX Aacute Cacute -40 +KPX Aacute Ccaron -40 +KPX Aacute Ccedilla -40 +KPX Aacute G -40 +KPX Aacute Gbreve -40 +KPX Aacute Gcommaaccent -40 +KPX Aacute O -55 +KPX Aacute Oacute -55 +KPX Aacute Ocircumflex -55 +KPX Aacute Odieresis -55 +KPX Aacute Ograve -55 +KPX Aacute Ohungarumlaut -55 +KPX Aacute Omacron -55 +KPX Aacute Oslash -55 +KPX Aacute Otilde -55 +KPX Aacute Q -55 +KPX Aacute T -111 +KPX Aacute Tcaron -111 +KPX Aacute Tcommaaccent -111 +KPX Aacute U -55 +KPX Aacute Uacute -55 +KPX Aacute Ucircumflex -55 +KPX Aacute Udieresis -55 +KPX Aacute Ugrave -55 +KPX Aacute Uhungarumlaut -55 +KPX Aacute Umacron -55 +KPX Aacute Uogonek -55 +KPX Aacute Uring -55 +KPX Aacute V -135 +KPX Aacute W -90 +KPX Aacute Y -105 +KPX Aacute Yacute -105 +KPX Aacute Ydieresis -105 +KPX Aacute quoteright -111 +KPX Aacute v -74 +KPX Aacute w -92 +KPX Aacute y -92 +KPX Aacute yacute -92 +KPX Aacute ydieresis -92 +KPX Abreve C -40 +KPX Abreve Cacute -40 +KPX Abreve Ccaron -40 +KPX Abreve Ccedilla -40 +KPX Abreve G -40 +KPX Abreve Gbreve -40 +KPX Abreve Gcommaaccent -40 +KPX Abreve O -55 +KPX Abreve Oacute -55 +KPX Abreve Ocircumflex -55 +KPX Abreve Odieresis -55 +KPX Abreve Ograve -55 +KPX Abreve Ohungarumlaut -55 +KPX Abreve Omacron -55 +KPX Abreve Oslash -55 +KPX Abreve Otilde -55 +KPX Abreve Q -55 +KPX Abreve T -111 +KPX Abreve Tcaron -111 +KPX Abreve Tcommaaccent -111 +KPX Abreve U -55 +KPX Abreve Uacute -55 +KPX Abreve Ucircumflex -55 +KPX Abreve Udieresis -55 +KPX Abreve Ugrave -55 +KPX Abreve Uhungarumlaut -55 +KPX Abreve Umacron -55 +KPX Abreve Uogonek -55 +KPX Abreve Uring -55 +KPX Abreve V -135 +KPX Abreve W -90 +KPX Abreve Y -105 +KPX Abreve Yacute -105 +KPX Abreve Ydieresis -105 +KPX Abreve quoteright -111 +KPX Abreve v -74 +KPX Abreve w -92 +KPX Abreve y -92 +KPX Abreve yacute -92 +KPX Abreve ydieresis -92 +KPX Acircumflex C -40 +KPX Acircumflex Cacute -40 +KPX Acircumflex Ccaron -40 +KPX Acircumflex Ccedilla -40 +KPX Acircumflex G -40 +KPX Acircumflex Gbreve -40 +KPX Acircumflex Gcommaaccent -40 +KPX Acircumflex O -55 +KPX Acircumflex Oacute -55 +KPX Acircumflex Ocircumflex -55 +KPX Acircumflex Odieresis -55 +KPX Acircumflex Ograve -55 +KPX Acircumflex Ohungarumlaut -55 +KPX Acircumflex Omacron -55 +KPX Acircumflex Oslash -55 +KPX Acircumflex Otilde -55 +KPX Acircumflex Q -55 +KPX Acircumflex T -111 +KPX Acircumflex Tcaron -111 +KPX Acircumflex Tcommaaccent -111 +KPX Acircumflex U -55 +KPX Acircumflex Uacute -55 +KPX Acircumflex Ucircumflex -55 +KPX Acircumflex Udieresis -55 +KPX Acircumflex Ugrave -55 +KPX Acircumflex Uhungarumlaut -55 +KPX Acircumflex Umacron -55 +KPX Acircumflex Uogonek -55 +KPX Acircumflex Uring -55 +KPX Acircumflex V -135 +KPX Acircumflex W -90 +KPX Acircumflex Y -105 +KPX Acircumflex Yacute -105 +KPX Acircumflex Ydieresis -105 +KPX Acircumflex quoteright -111 +KPX Acircumflex v -74 +KPX Acircumflex w -92 +KPX Acircumflex y -92 +KPX Acircumflex yacute -92 +KPX Acircumflex ydieresis -92 +KPX Adieresis C -40 +KPX Adieresis Cacute -40 +KPX Adieresis Ccaron -40 +KPX Adieresis Ccedilla -40 +KPX Adieresis G -40 +KPX Adieresis Gbreve -40 +KPX Adieresis Gcommaaccent -40 +KPX Adieresis O -55 +KPX Adieresis Oacute -55 +KPX Adieresis Ocircumflex -55 +KPX Adieresis Odieresis -55 +KPX Adieresis Ograve -55 +KPX Adieresis Ohungarumlaut -55 +KPX Adieresis Omacron -55 +KPX Adieresis Oslash -55 +KPX Adieresis Otilde -55 +KPX Adieresis Q -55 +KPX Adieresis T -111 +KPX Adieresis Tcaron -111 +KPX Adieresis Tcommaaccent -111 +KPX Adieresis U -55 +KPX Adieresis Uacute -55 +KPX Adieresis Ucircumflex -55 +KPX Adieresis Udieresis -55 +KPX Adieresis Ugrave -55 +KPX Adieresis Uhungarumlaut -55 +KPX Adieresis Umacron -55 +KPX Adieresis Uogonek -55 +KPX Adieresis Uring -55 +KPX Adieresis V -135 +KPX Adieresis W -90 +KPX Adieresis Y -105 +KPX Adieresis Yacute -105 +KPX Adieresis Ydieresis -105 +KPX Adieresis quoteright -111 +KPX Adieresis v -74 +KPX Adieresis w -92 +KPX Adieresis y -92 +KPX Adieresis yacute -92 +KPX Adieresis ydieresis -92 +KPX Agrave C -40 +KPX Agrave Cacute -40 +KPX Agrave Ccaron -40 +KPX Agrave Ccedilla -40 +KPX Agrave G -40 +KPX Agrave Gbreve -40 +KPX Agrave Gcommaaccent -40 +KPX Agrave O -55 +KPX Agrave Oacute -55 +KPX Agrave Ocircumflex -55 +KPX Agrave Odieresis -55 +KPX Agrave Ograve -55 +KPX Agrave Ohungarumlaut -55 +KPX Agrave Omacron -55 +KPX Agrave Oslash -55 +KPX Agrave Otilde -55 +KPX Agrave Q -55 +KPX Agrave T -111 +KPX Agrave Tcaron -111 +KPX Agrave Tcommaaccent -111 +KPX Agrave U -55 +KPX Agrave Uacute -55 +KPX Agrave Ucircumflex -55 +KPX Agrave Udieresis -55 +KPX Agrave Ugrave -55 +KPX Agrave Uhungarumlaut -55 +KPX Agrave Umacron -55 +KPX Agrave Uogonek -55 +KPX Agrave Uring -55 +KPX Agrave V -135 +KPX Agrave W -90 +KPX Agrave Y -105 +KPX Agrave Yacute -105 +KPX Agrave Ydieresis -105 +KPX Agrave quoteright -111 +KPX Agrave v -74 +KPX Agrave w -92 +KPX Agrave y -92 +KPX Agrave yacute -92 +KPX Agrave ydieresis -92 +KPX Amacron C -40 +KPX Amacron Cacute -40 +KPX Amacron Ccaron -40 +KPX Amacron Ccedilla -40 +KPX Amacron G -40 +KPX Amacron Gbreve -40 +KPX Amacron Gcommaaccent -40 +KPX Amacron O -55 +KPX Amacron Oacute -55 +KPX Amacron Ocircumflex -55 +KPX Amacron Odieresis -55 +KPX Amacron Ograve -55 +KPX Amacron Ohungarumlaut -55 +KPX Amacron Omacron -55 +KPX Amacron Oslash -55 +KPX Amacron Otilde -55 +KPX Amacron Q -55 +KPX Amacron T -111 +KPX Amacron Tcaron -111 +KPX Amacron Tcommaaccent -111 +KPX Amacron U -55 +KPX Amacron Uacute -55 +KPX Amacron Ucircumflex -55 +KPX Amacron Udieresis -55 +KPX Amacron Ugrave -55 +KPX Amacron Uhungarumlaut -55 +KPX Amacron Umacron -55 +KPX Amacron Uogonek -55 +KPX Amacron Uring -55 +KPX Amacron V -135 +KPX Amacron W -90 +KPX Amacron Y -105 +KPX Amacron Yacute -105 +KPX Amacron Ydieresis -105 +KPX Amacron quoteright -111 +KPX Amacron v -74 +KPX Amacron w -92 +KPX Amacron y -92 +KPX Amacron yacute -92 +KPX Amacron ydieresis -92 +KPX Aogonek C -40 +KPX Aogonek Cacute -40 +KPX Aogonek Ccaron -40 +KPX Aogonek Ccedilla -40 +KPX Aogonek G -40 +KPX Aogonek Gbreve -40 +KPX Aogonek Gcommaaccent -40 +KPX Aogonek O -55 +KPX Aogonek Oacute -55 +KPX Aogonek Ocircumflex -55 +KPX Aogonek Odieresis -55 +KPX Aogonek Ograve -55 +KPX Aogonek Ohungarumlaut -55 +KPX Aogonek Omacron -55 +KPX Aogonek Oslash -55 +KPX Aogonek Otilde -55 +KPX Aogonek Q -55 +KPX Aogonek T -111 +KPX Aogonek Tcaron -111 +KPX Aogonek Tcommaaccent -111 +KPX Aogonek U -55 +KPX Aogonek Uacute -55 +KPX Aogonek Ucircumflex -55 +KPX Aogonek Udieresis -55 +KPX Aogonek Ugrave -55 +KPX Aogonek Uhungarumlaut -55 +KPX Aogonek Umacron -55 +KPX Aogonek Uogonek -55 +KPX Aogonek Uring -55 +KPX Aogonek V -135 +KPX Aogonek W -90 +KPX Aogonek Y -105 +KPX Aogonek Yacute -105 +KPX Aogonek Ydieresis -105 +KPX Aogonek quoteright -111 +KPX Aogonek v -74 +KPX Aogonek w -52 +KPX Aogonek y -52 +KPX Aogonek yacute -52 +KPX Aogonek ydieresis -52 +KPX Aring C -40 +KPX Aring Cacute -40 +KPX Aring Ccaron -40 +KPX Aring Ccedilla -40 +KPX Aring G -40 +KPX Aring Gbreve -40 +KPX Aring Gcommaaccent -40 +KPX Aring O -55 +KPX Aring Oacute -55 +KPX Aring Ocircumflex -55 +KPX Aring Odieresis -55 +KPX Aring Ograve -55 +KPX Aring Ohungarumlaut -55 +KPX Aring Omacron -55 +KPX Aring Oslash -55 +KPX Aring Otilde -55 +KPX Aring Q -55 +KPX Aring T -111 +KPX Aring Tcaron -111 +KPX Aring Tcommaaccent -111 +KPX Aring U -55 +KPX Aring Uacute -55 +KPX Aring Ucircumflex -55 +KPX Aring Udieresis -55 +KPX Aring Ugrave -55 +KPX Aring Uhungarumlaut -55 +KPX Aring Umacron -55 +KPX Aring Uogonek -55 +KPX Aring Uring -55 +KPX Aring V -135 +KPX Aring W -90 +KPX Aring Y -105 +KPX Aring Yacute -105 +KPX Aring Ydieresis -105 +KPX Aring quoteright -111 +KPX Aring v -74 +KPX Aring w -92 +KPX Aring y -92 +KPX Aring yacute -92 +KPX Aring ydieresis -92 +KPX Atilde C -40 +KPX Atilde Cacute -40 +KPX Atilde Ccaron -40 +KPX Atilde Ccedilla -40 +KPX Atilde G -40 +KPX Atilde Gbreve -40 +KPX Atilde Gcommaaccent -40 +KPX Atilde O -55 +KPX Atilde Oacute -55 +KPX Atilde Ocircumflex -55 +KPX Atilde Odieresis -55 +KPX Atilde Ograve -55 +KPX Atilde Ohungarumlaut -55 +KPX Atilde Omacron -55 +KPX Atilde Oslash -55 +KPX Atilde Otilde -55 +KPX Atilde Q -55 +KPX Atilde T -111 +KPX Atilde Tcaron -111 +KPX Atilde Tcommaaccent -111 +KPX Atilde U -55 +KPX Atilde Uacute -55 +KPX Atilde Ucircumflex -55 +KPX Atilde Udieresis -55 +KPX Atilde Ugrave -55 +KPX Atilde Uhungarumlaut -55 +KPX Atilde Umacron -55 +KPX Atilde Uogonek -55 +KPX Atilde Uring -55 +KPX Atilde V -135 +KPX Atilde W -90 +KPX Atilde Y -105 +KPX Atilde Yacute -105 +KPX Atilde Ydieresis -105 +KPX Atilde quoteright -111 +KPX Atilde v -74 +KPX Atilde w -92 +KPX Atilde y -92 +KPX Atilde yacute -92 +KPX Atilde ydieresis -92 +KPX B A -35 +KPX B Aacute -35 +KPX B Abreve -35 +KPX B Acircumflex -35 +KPX B Adieresis -35 +KPX B Agrave -35 +KPX B Amacron -35 +KPX B Aogonek -35 +KPX B Aring -35 +KPX B Atilde -35 +KPX B U -10 +KPX B Uacute -10 +KPX B Ucircumflex -10 +KPX B Udieresis -10 +KPX B Ugrave -10 +KPX B Uhungarumlaut -10 +KPX B Umacron -10 +KPX B Uogonek -10 +KPX B Uring -10 +KPX D A -40 +KPX D Aacute -40 +KPX D Abreve -40 +KPX D Acircumflex -40 +KPX D Adieresis -40 +KPX D Agrave -40 +KPX D Amacron -40 +KPX D Aogonek -40 +KPX D Aring -40 +KPX D Atilde -40 +KPX D V -40 +KPX D W -30 +KPX D Y -55 +KPX D Yacute -55 +KPX D Ydieresis -55 +KPX Dcaron A -40 +KPX Dcaron Aacute -40 +KPX Dcaron Abreve -40 +KPX Dcaron Acircumflex -40 +KPX Dcaron Adieresis -40 +KPX Dcaron Agrave -40 +KPX Dcaron Amacron -40 +KPX Dcaron Aogonek -40 +KPX Dcaron Aring -40 +KPX Dcaron Atilde -40 +KPX Dcaron V -40 +KPX Dcaron W -30 +KPX Dcaron Y -55 +KPX Dcaron Yacute -55 +KPX Dcaron Ydieresis -55 +KPX Dcroat A -40 +KPX Dcroat Aacute -40 +KPX Dcroat Abreve -40 +KPX Dcroat Acircumflex -40 +KPX Dcroat Adieresis -40 +KPX Dcroat Agrave -40 +KPX Dcroat Amacron -40 +KPX Dcroat Aogonek -40 +KPX Dcroat Aring -40 +KPX Dcroat Atilde -40 +KPX Dcroat V -40 +KPX Dcroat W -30 +KPX Dcroat Y -55 +KPX Dcroat Yacute -55 +KPX Dcroat Ydieresis -55 +KPX F A -74 +KPX F Aacute -74 +KPX F Abreve -74 +KPX F Acircumflex -74 +KPX F Adieresis -74 +KPX F Agrave -74 +KPX F Amacron -74 +KPX F Aogonek -74 +KPX F Aring -74 +KPX F Atilde -74 +KPX F a -15 +KPX F aacute -15 +KPX F abreve -15 +KPX F acircumflex -15 +KPX F adieresis -15 +KPX F agrave -15 +KPX F amacron -15 +KPX F aogonek -15 +KPX F aring -15 +KPX F atilde -15 +KPX F comma -80 +KPX F o -15 +KPX F oacute -15 +KPX F ocircumflex -15 +KPX F odieresis -15 +KPX F ograve -15 +KPX F ohungarumlaut -15 +KPX F omacron -15 +KPX F oslash -15 +KPX F otilde -15 +KPX F period -80 +KPX J A -60 +KPX J Aacute -60 +KPX J Abreve -60 +KPX J Acircumflex -60 +KPX J Adieresis -60 +KPX J Agrave -60 +KPX J Amacron -60 +KPX J Aogonek -60 +KPX J Aring -60 +KPX J Atilde -60 +KPX K O -30 +KPX K Oacute -30 +KPX K Ocircumflex -30 +KPX K Odieresis -30 +KPX K Ograve -30 +KPX K Ohungarumlaut -30 +KPX K Omacron -30 +KPX K Oslash -30 +KPX K Otilde -30 +KPX K e -25 +KPX K eacute -25 +KPX K ecaron -25 +KPX K ecircumflex -25 +KPX K edieresis -25 +KPX K edotaccent -25 +KPX K egrave -25 +KPX K emacron -25 +KPX K eogonek -25 +KPX K o -35 +KPX K oacute -35 +KPX K ocircumflex -35 +KPX K odieresis -35 +KPX K ograve -35 +KPX K ohungarumlaut -35 +KPX K omacron -35 +KPX K oslash -35 +KPX K otilde -35 +KPX K u -15 +KPX K uacute -15 +KPX K ucircumflex -15 +KPX K udieresis -15 +KPX K ugrave -15 +KPX K uhungarumlaut -15 +KPX K umacron -15 +KPX K uogonek -15 +KPX K uring -15 +KPX K y -25 +KPX K yacute -25 +KPX K ydieresis -25 +KPX Kcommaaccent O -30 +KPX Kcommaaccent Oacute -30 +KPX Kcommaaccent Ocircumflex -30 +KPX Kcommaaccent Odieresis -30 +KPX Kcommaaccent Ograve -30 +KPX Kcommaaccent Ohungarumlaut -30 +KPX Kcommaaccent Omacron -30 +KPX Kcommaaccent Oslash -30 +KPX Kcommaaccent Otilde -30 +KPX Kcommaaccent e -25 +KPX Kcommaaccent eacute -25 +KPX Kcommaaccent ecaron -25 +KPX Kcommaaccent ecircumflex -25 +KPX Kcommaaccent edieresis -25 +KPX Kcommaaccent edotaccent -25 +KPX Kcommaaccent egrave -25 +KPX Kcommaaccent emacron -25 +KPX Kcommaaccent eogonek -25 +KPX Kcommaaccent o -35 +KPX Kcommaaccent oacute -35 +KPX Kcommaaccent ocircumflex -35 +KPX Kcommaaccent odieresis -35 +KPX Kcommaaccent ograve -35 +KPX Kcommaaccent ohungarumlaut -35 +KPX Kcommaaccent omacron -35 +KPX Kcommaaccent oslash -35 +KPX Kcommaaccent otilde -35 +KPX Kcommaaccent u -15 +KPX Kcommaaccent uacute -15 +KPX Kcommaaccent ucircumflex -15 +KPX Kcommaaccent udieresis -15 +KPX Kcommaaccent ugrave -15 +KPX Kcommaaccent uhungarumlaut -15 +KPX Kcommaaccent umacron -15 +KPX Kcommaaccent uogonek -15 +KPX Kcommaaccent uring -15 +KPX Kcommaaccent y -25 +KPX Kcommaaccent yacute -25 +KPX Kcommaaccent ydieresis -25 +KPX L T -92 +KPX L Tcaron -92 +KPX L Tcommaaccent -92 +KPX L V -100 +KPX L W -74 +KPX L Y -100 +KPX L Yacute -100 +KPX L Ydieresis -100 +KPX L quoteright -92 +KPX L y -55 +KPX L yacute -55 +KPX L ydieresis -55 +KPX Lacute T -92 +KPX Lacute Tcaron -92 +KPX Lacute Tcommaaccent -92 +KPX Lacute V -100 +KPX Lacute W -74 +KPX Lacute Y -100 +KPX Lacute Yacute -100 +KPX Lacute Ydieresis -100 +KPX Lacute quoteright -92 +KPX Lacute y -55 +KPX Lacute yacute -55 +KPX Lacute ydieresis -55 +KPX Lcaron quoteright -92 +KPX Lcaron y -55 +KPX Lcaron yacute -55 +KPX Lcaron ydieresis -55 +KPX Lcommaaccent T -92 +KPX Lcommaaccent Tcaron -92 +KPX Lcommaaccent Tcommaaccent -92 +KPX Lcommaaccent V -100 +KPX Lcommaaccent W -74 +KPX Lcommaaccent Y -100 +KPX Lcommaaccent Yacute -100 +KPX Lcommaaccent Ydieresis -100 +KPX Lcommaaccent quoteright -92 +KPX Lcommaaccent y -55 +KPX Lcommaaccent yacute -55 +KPX Lcommaaccent ydieresis -55 +KPX Lslash T -92 +KPX Lslash Tcaron -92 +KPX Lslash Tcommaaccent -92 +KPX Lslash V -100 +KPX Lslash W -74 +KPX Lslash Y -100 +KPX Lslash Yacute -100 +KPX Lslash Ydieresis -100 +KPX Lslash quoteright -92 +KPX Lslash y -55 +KPX Lslash yacute -55 +KPX Lslash ydieresis -55 +KPX N A -35 +KPX N Aacute -35 +KPX N Abreve -35 +KPX N Acircumflex -35 +KPX N Adieresis -35 +KPX N Agrave -35 +KPX N Amacron -35 +KPX N Aogonek -35 +KPX N Aring -35 +KPX N Atilde -35 +KPX Nacute A -35 +KPX Nacute Aacute -35 +KPX Nacute Abreve -35 +KPX Nacute Acircumflex -35 +KPX Nacute Adieresis -35 +KPX Nacute Agrave -35 +KPX Nacute Amacron -35 +KPX Nacute Aogonek -35 +KPX Nacute Aring -35 +KPX Nacute Atilde -35 +KPX Ncaron A -35 +KPX Ncaron Aacute -35 +KPX Ncaron Abreve -35 +KPX Ncaron Acircumflex -35 +KPX Ncaron Adieresis -35 +KPX Ncaron Agrave -35 +KPX Ncaron Amacron -35 +KPX Ncaron Aogonek -35 +KPX Ncaron Aring -35 +KPX Ncaron Atilde -35 +KPX Ncommaaccent A -35 +KPX Ncommaaccent Aacute -35 +KPX Ncommaaccent Abreve -35 +KPX Ncommaaccent Acircumflex -35 +KPX Ncommaaccent Adieresis -35 +KPX Ncommaaccent Agrave -35 +KPX Ncommaaccent Amacron -35 +KPX Ncommaaccent Aogonek -35 +KPX Ncommaaccent Aring -35 +KPX Ncommaaccent Atilde -35 +KPX Ntilde A -35 +KPX Ntilde Aacute -35 +KPX Ntilde Abreve -35 +KPX Ntilde Acircumflex -35 +KPX Ntilde Adieresis -35 +KPX Ntilde Agrave -35 +KPX Ntilde Amacron -35 +KPX Ntilde Aogonek -35 +KPX Ntilde Aring -35 +KPX Ntilde Atilde -35 +KPX O A -35 +KPX O Aacute -35 +KPX O Abreve -35 +KPX O Acircumflex -35 +KPX O Adieresis -35 +KPX O Agrave -35 +KPX O Amacron -35 +KPX O Aogonek -35 +KPX O Aring -35 +KPX O Atilde -35 +KPX O T -40 +KPX O Tcaron -40 +KPX O Tcommaaccent -40 +KPX O V -50 +KPX O W -35 +KPX O X -40 +KPX O Y -50 +KPX O Yacute -50 +KPX O Ydieresis -50 +KPX Oacute A -35 +KPX Oacute Aacute -35 +KPX Oacute Abreve -35 +KPX Oacute Acircumflex -35 +KPX Oacute Adieresis -35 +KPX Oacute Agrave -35 +KPX Oacute Amacron -35 +KPX Oacute Aogonek -35 +KPX Oacute Aring -35 +KPX Oacute Atilde -35 +KPX Oacute T -40 +KPX Oacute Tcaron -40 +KPX Oacute Tcommaaccent -40 +KPX Oacute V -50 +KPX Oacute W -35 +KPX Oacute X -40 +KPX Oacute Y -50 +KPX Oacute Yacute -50 +KPX Oacute Ydieresis -50 +KPX Ocircumflex A -35 +KPX Ocircumflex Aacute -35 +KPX Ocircumflex Abreve -35 +KPX Ocircumflex Acircumflex -35 +KPX Ocircumflex Adieresis -35 +KPX Ocircumflex Agrave -35 +KPX Ocircumflex Amacron -35 +KPX Ocircumflex Aogonek -35 +KPX Ocircumflex Aring -35 +KPX Ocircumflex Atilde -35 +KPX Ocircumflex T -40 +KPX Ocircumflex Tcaron -40 +KPX Ocircumflex Tcommaaccent -40 +KPX Ocircumflex V -50 +KPX Ocircumflex W -35 +KPX Ocircumflex X -40 +KPX Ocircumflex Y -50 +KPX Ocircumflex Yacute -50 +KPX Ocircumflex Ydieresis -50 +KPX Odieresis A -35 +KPX Odieresis Aacute -35 +KPX Odieresis Abreve -35 +KPX Odieresis Acircumflex -35 +KPX Odieresis Adieresis -35 +KPX Odieresis Agrave -35 +KPX Odieresis Amacron -35 +KPX Odieresis Aogonek -35 +KPX Odieresis Aring -35 +KPX Odieresis Atilde -35 +KPX Odieresis T -40 +KPX Odieresis Tcaron -40 +KPX Odieresis Tcommaaccent -40 +KPX Odieresis V -50 +KPX Odieresis W -35 +KPX Odieresis X -40 +KPX Odieresis Y -50 +KPX Odieresis Yacute -50 +KPX Odieresis Ydieresis -50 +KPX Ograve A -35 +KPX Ograve Aacute -35 +KPX Ograve Abreve -35 +KPX Ograve Acircumflex -35 +KPX Ograve Adieresis -35 +KPX Ograve Agrave -35 +KPX Ograve Amacron -35 +KPX Ograve Aogonek -35 +KPX Ograve Aring -35 +KPX Ograve Atilde -35 +KPX Ograve T -40 +KPX Ograve Tcaron -40 +KPX Ograve Tcommaaccent -40 +KPX Ograve V -50 +KPX Ograve W -35 +KPX Ograve X -40 +KPX Ograve Y -50 +KPX Ograve Yacute -50 +KPX Ograve Ydieresis -50 +KPX Ohungarumlaut A -35 +KPX Ohungarumlaut Aacute -35 +KPX Ohungarumlaut Abreve -35 +KPX Ohungarumlaut Acircumflex -35 +KPX Ohungarumlaut Adieresis -35 +KPX Ohungarumlaut Agrave -35 +KPX Ohungarumlaut Amacron -35 +KPX Ohungarumlaut Aogonek -35 +KPX Ohungarumlaut Aring -35 +KPX Ohungarumlaut Atilde -35 +KPX Ohungarumlaut T -40 +KPX Ohungarumlaut Tcaron -40 +KPX Ohungarumlaut Tcommaaccent -40 +KPX Ohungarumlaut V -50 +KPX Ohungarumlaut W -35 +KPX Ohungarumlaut X -40 +KPX Ohungarumlaut Y -50 +KPX Ohungarumlaut Yacute -50 +KPX Ohungarumlaut Ydieresis -50 +KPX Omacron A -35 +KPX Omacron Aacute -35 +KPX Omacron Abreve -35 +KPX Omacron Acircumflex -35 +KPX Omacron Adieresis -35 +KPX Omacron Agrave -35 +KPX Omacron Amacron -35 +KPX Omacron Aogonek -35 +KPX Omacron Aring -35 +KPX Omacron Atilde -35 +KPX Omacron T -40 +KPX Omacron Tcaron -40 +KPX Omacron Tcommaaccent -40 +KPX Omacron V -50 +KPX Omacron W -35 +KPX Omacron X -40 +KPX Omacron Y -50 +KPX Omacron Yacute -50 +KPX Omacron Ydieresis -50 +KPX Oslash A -35 +KPX Oslash Aacute -35 +KPX Oslash Abreve -35 +KPX Oslash Acircumflex -35 +KPX Oslash Adieresis -35 +KPX Oslash Agrave -35 +KPX Oslash Amacron -35 +KPX Oslash Aogonek -35 +KPX Oslash Aring -35 +KPX Oslash Atilde -35 +KPX Oslash T -40 +KPX Oslash Tcaron -40 +KPX Oslash Tcommaaccent -40 +KPX Oslash V -50 +KPX Oslash W -35 +KPX Oslash X -40 +KPX Oslash Y -50 +KPX Oslash Yacute -50 +KPX Oslash Ydieresis -50 +KPX Otilde A -35 +KPX Otilde Aacute -35 +KPX Otilde Abreve -35 +KPX Otilde Acircumflex -35 +KPX Otilde Adieresis -35 +KPX Otilde Agrave -35 +KPX Otilde Amacron -35 +KPX Otilde Aogonek -35 +KPX Otilde Aring -35 +KPX Otilde Atilde -35 +KPX Otilde T -40 +KPX Otilde Tcaron -40 +KPX Otilde Tcommaaccent -40 +KPX Otilde V -50 +KPX Otilde W -35 +KPX Otilde X -40 +KPX Otilde Y -50 +KPX Otilde Yacute -50 +KPX Otilde Ydieresis -50 +KPX P A -92 +KPX P Aacute -92 +KPX P Abreve -92 +KPX P Acircumflex -92 +KPX P Adieresis -92 +KPX P Agrave -92 +KPX P Amacron -92 +KPX P Aogonek -92 +KPX P Aring -92 +KPX P Atilde -92 +KPX P a -15 +KPX P aacute -15 +KPX P abreve -15 +KPX P acircumflex -15 +KPX P adieresis -15 +KPX P agrave -15 +KPX P amacron -15 +KPX P aogonek -15 +KPX P aring -15 +KPX P atilde -15 +KPX P comma -111 +KPX P period -111 +KPX Q U -10 +KPX Q Uacute -10 +KPX Q Ucircumflex -10 +KPX Q Udieresis -10 +KPX Q Ugrave -10 +KPX Q Uhungarumlaut -10 +KPX Q Umacron -10 +KPX Q Uogonek -10 +KPX Q Uring -10 +KPX R O -40 +KPX R Oacute -40 +KPX R Ocircumflex -40 +KPX R Odieresis -40 +KPX R Ograve -40 +KPX R Ohungarumlaut -40 +KPX R Omacron -40 +KPX R Oslash -40 +KPX R Otilde -40 +KPX R T -60 +KPX R Tcaron -60 +KPX R Tcommaaccent -60 +KPX R U -40 +KPX R Uacute -40 +KPX R Ucircumflex -40 +KPX R Udieresis -40 +KPX R Ugrave -40 +KPX R Uhungarumlaut -40 +KPX R Umacron -40 +KPX R Uogonek -40 +KPX R Uring -40 +KPX R V -80 +KPX R W -55 +KPX R Y -65 +KPX R Yacute -65 +KPX R Ydieresis -65 +KPX Racute O -40 +KPX Racute Oacute -40 +KPX Racute Ocircumflex -40 +KPX Racute Odieresis -40 +KPX Racute Ograve -40 +KPX Racute Ohungarumlaut -40 +KPX Racute Omacron -40 +KPX Racute Oslash -40 +KPX Racute Otilde -40 +KPX Racute T -60 +KPX Racute Tcaron -60 +KPX Racute Tcommaaccent -60 +KPX Racute U -40 +KPX Racute Uacute -40 +KPX Racute Ucircumflex -40 +KPX Racute Udieresis -40 +KPX Racute Ugrave -40 +KPX Racute Uhungarumlaut -40 +KPX Racute Umacron -40 +KPX Racute Uogonek -40 +KPX Racute Uring -40 +KPX Racute V -80 +KPX Racute W -55 +KPX Racute Y -65 +KPX Racute Yacute -65 +KPX Racute Ydieresis -65 +KPX Rcaron O -40 +KPX Rcaron Oacute -40 +KPX Rcaron Ocircumflex -40 +KPX Rcaron Odieresis -40 +KPX Rcaron Ograve -40 +KPX Rcaron Ohungarumlaut -40 +KPX Rcaron Omacron -40 +KPX Rcaron Oslash -40 +KPX Rcaron Otilde -40 +KPX Rcaron T -60 +KPX Rcaron Tcaron -60 +KPX Rcaron Tcommaaccent -60 +KPX Rcaron U -40 +KPX Rcaron Uacute -40 +KPX Rcaron Ucircumflex -40 +KPX Rcaron Udieresis -40 +KPX Rcaron Ugrave -40 +KPX Rcaron Uhungarumlaut -40 +KPX Rcaron Umacron -40 +KPX Rcaron Uogonek -40 +KPX Rcaron Uring -40 +KPX Rcaron V -80 +KPX Rcaron W -55 +KPX Rcaron Y -65 +KPX Rcaron Yacute -65 +KPX Rcaron Ydieresis -65 +KPX Rcommaaccent O -40 +KPX Rcommaaccent Oacute -40 +KPX Rcommaaccent Ocircumflex -40 +KPX Rcommaaccent Odieresis -40 +KPX Rcommaaccent Ograve -40 +KPX Rcommaaccent Ohungarumlaut -40 +KPX Rcommaaccent Omacron -40 +KPX Rcommaaccent Oslash -40 +KPX Rcommaaccent Otilde -40 +KPX Rcommaaccent T -60 +KPX Rcommaaccent Tcaron -60 +KPX Rcommaaccent Tcommaaccent -60 +KPX Rcommaaccent U -40 +KPX Rcommaaccent Uacute -40 +KPX Rcommaaccent Ucircumflex -40 +KPX Rcommaaccent Udieresis -40 +KPX Rcommaaccent Ugrave -40 +KPX Rcommaaccent Uhungarumlaut -40 +KPX Rcommaaccent Umacron -40 +KPX Rcommaaccent Uogonek -40 +KPX Rcommaaccent Uring -40 +KPX Rcommaaccent V -80 +KPX Rcommaaccent W -55 +KPX Rcommaaccent Y -65 +KPX Rcommaaccent Yacute -65 +KPX Rcommaaccent Ydieresis -65 +KPX T A -93 +KPX T Aacute -93 +KPX T Abreve -93 +KPX T Acircumflex -93 +KPX T Adieresis -93 +KPX T Agrave -93 +KPX T Amacron -93 +KPX T Aogonek -93 +KPX T Aring -93 +KPX T Atilde -93 +KPX T O -18 +KPX T Oacute -18 +KPX T Ocircumflex -18 +KPX T Odieresis -18 +KPX T Ograve -18 +KPX T Ohungarumlaut -18 +KPX T Omacron -18 +KPX T Oslash -18 +KPX T Otilde -18 +KPX T a -80 +KPX T aacute -80 +KPX T abreve -80 +KPX T acircumflex -80 +KPX T adieresis -40 +KPX T agrave -40 +KPX T amacron -40 +KPX T aogonek -80 +KPX T aring -80 +KPX T atilde -40 +KPX T colon -50 +KPX T comma -74 +KPX T e -70 +KPX T eacute -70 +KPX T ecaron -70 +KPX T ecircumflex -70 +KPX T edieresis -30 +KPX T edotaccent -70 +KPX T egrave -70 +KPX T emacron -30 +KPX T eogonek -70 +KPX T hyphen -92 +KPX T i -35 +KPX T iacute -35 +KPX T iogonek -35 +KPX T o -80 +KPX T oacute -80 +KPX T ocircumflex -80 +KPX T odieresis -80 +KPX T ograve -80 +KPX T ohungarumlaut -80 +KPX T omacron -80 +KPX T oslash -80 +KPX T otilde -80 +KPX T period -74 +KPX T r -35 +KPX T racute -35 +KPX T rcaron -35 +KPX T rcommaaccent -35 +KPX T semicolon -55 +KPX T u -45 +KPX T uacute -45 +KPX T ucircumflex -45 +KPX T udieresis -45 +KPX T ugrave -45 +KPX T uhungarumlaut -45 +KPX T umacron -45 +KPX T uogonek -45 +KPX T uring -45 +KPX T w -80 +KPX T y -80 +KPX T yacute -80 +KPX T ydieresis -80 +KPX Tcaron A -93 +KPX Tcaron Aacute -93 +KPX Tcaron Abreve -93 +KPX Tcaron Acircumflex -93 +KPX Tcaron Adieresis -93 +KPX Tcaron Agrave -93 +KPX Tcaron Amacron -93 +KPX Tcaron Aogonek -93 +KPX Tcaron Aring -93 +KPX Tcaron Atilde -93 +KPX Tcaron O -18 +KPX Tcaron Oacute -18 +KPX Tcaron Ocircumflex -18 +KPX Tcaron Odieresis -18 +KPX Tcaron Ograve -18 +KPX Tcaron Ohungarumlaut -18 +KPX Tcaron Omacron -18 +KPX Tcaron Oslash -18 +KPX Tcaron Otilde -18 +KPX Tcaron a -80 +KPX Tcaron aacute -80 +KPX Tcaron abreve -80 +KPX Tcaron acircumflex -80 +KPX Tcaron adieresis -40 +KPX Tcaron agrave -40 +KPX Tcaron amacron -40 +KPX Tcaron aogonek -80 +KPX Tcaron aring -80 +KPX Tcaron atilde -40 +KPX Tcaron colon -50 +KPX Tcaron comma -74 +KPX Tcaron e -70 +KPX Tcaron eacute -70 +KPX Tcaron ecaron -70 +KPX Tcaron ecircumflex -30 +KPX Tcaron edieresis -30 +KPX Tcaron edotaccent -70 +KPX Tcaron egrave -70 +KPX Tcaron emacron -30 +KPX Tcaron eogonek -70 +KPX Tcaron hyphen -92 +KPX Tcaron i -35 +KPX Tcaron iacute -35 +KPX Tcaron iogonek -35 +KPX Tcaron o -80 +KPX Tcaron oacute -80 +KPX Tcaron ocircumflex -80 +KPX Tcaron odieresis -80 +KPX Tcaron ograve -80 +KPX Tcaron ohungarumlaut -80 +KPX Tcaron omacron -80 +KPX Tcaron oslash -80 +KPX Tcaron otilde -80 +KPX Tcaron period -74 +KPX Tcaron r -35 +KPX Tcaron racute -35 +KPX Tcaron rcaron -35 +KPX Tcaron rcommaaccent -35 +KPX Tcaron semicolon -55 +KPX Tcaron u -45 +KPX Tcaron uacute -45 +KPX Tcaron ucircumflex -45 +KPX Tcaron udieresis -45 +KPX Tcaron ugrave -45 +KPX Tcaron uhungarumlaut -45 +KPX Tcaron umacron -45 +KPX Tcaron uogonek -45 +KPX Tcaron uring -45 +KPX Tcaron w -80 +KPX Tcaron y -80 +KPX Tcaron yacute -80 +KPX Tcaron ydieresis -80 +KPX Tcommaaccent A -93 +KPX Tcommaaccent Aacute -93 +KPX Tcommaaccent Abreve -93 +KPX Tcommaaccent Acircumflex -93 +KPX Tcommaaccent Adieresis -93 +KPX Tcommaaccent Agrave -93 +KPX Tcommaaccent Amacron -93 +KPX Tcommaaccent Aogonek -93 +KPX Tcommaaccent Aring -93 +KPX Tcommaaccent Atilde -93 +KPX Tcommaaccent O -18 +KPX Tcommaaccent Oacute -18 +KPX Tcommaaccent Ocircumflex -18 +KPX Tcommaaccent Odieresis -18 +KPX Tcommaaccent Ograve -18 +KPX Tcommaaccent Ohungarumlaut -18 +KPX Tcommaaccent Omacron -18 +KPX Tcommaaccent Oslash -18 +KPX Tcommaaccent Otilde -18 +KPX Tcommaaccent a -80 +KPX Tcommaaccent aacute -80 +KPX Tcommaaccent abreve -80 +KPX Tcommaaccent acircumflex -80 +KPX Tcommaaccent adieresis -40 +KPX Tcommaaccent agrave -40 +KPX Tcommaaccent amacron -40 +KPX Tcommaaccent aogonek -80 +KPX Tcommaaccent aring -80 +KPX Tcommaaccent atilde -40 +KPX Tcommaaccent colon -50 +KPX Tcommaaccent comma -74 +KPX Tcommaaccent e -70 +KPX Tcommaaccent eacute -70 +KPX Tcommaaccent ecaron -70 +KPX Tcommaaccent ecircumflex -30 +KPX Tcommaaccent edieresis -30 +KPX Tcommaaccent edotaccent -70 +KPX Tcommaaccent egrave -30 +KPX Tcommaaccent emacron -70 +KPX Tcommaaccent eogonek -70 +KPX Tcommaaccent hyphen -92 +KPX Tcommaaccent i -35 +KPX Tcommaaccent iacute -35 +KPX Tcommaaccent iogonek -35 +KPX Tcommaaccent o -80 +KPX Tcommaaccent oacute -80 +KPX Tcommaaccent ocircumflex -80 +KPX Tcommaaccent odieresis -80 +KPX Tcommaaccent ograve -80 +KPX Tcommaaccent ohungarumlaut -80 +KPX Tcommaaccent omacron -80 +KPX Tcommaaccent oslash -80 +KPX Tcommaaccent otilde -80 +KPX Tcommaaccent period -74 +KPX Tcommaaccent r -35 +KPX Tcommaaccent racute -35 +KPX Tcommaaccent rcaron -35 +KPX Tcommaaccent rcommaaccent -35 +KPX Tcommaaccent semicolon -55 +KPX Tcommaaccent u -45 +KPX Tcommaaccent uacute -45 +KPX Tcommaaccent ucircumflex -45 +KPX Tcommaaccent udieresis -45 +KPX Tcommaaccent ugrave -45 +KPX Tcommaaccent uhungarumlaut -45 +KPX Tcommaaccent umacron -45 +KPX Tcommaaccent uogonek -45 +KPX Tcommaaccent uring -45 +KPX Tcommaaccent w -80 +KPX Tcommaaccent y -80 +KPX Tcommaaccent yacute -80 +KPX Tcommaaccent ydieresis -80 +KPX U A -40 +KPX U Aacute -40 +KPX U Abreve -40 +KPX U Acircumflex -40 +KPX U Adieresis -40 +KPX U Agrave -40 +KPX U Amacron -40 +KPX U Aogonek -40 +KPX U Aring -40 +KPX U Atilde -40 +KPX Uacute A -40 +KPX Uacute Aacute -40 +KPX Uacute Abreve -40 +KPX Uacute Acircumflex -40 +KPX Uacute Adieresis -40 +KPX Uacute Agrave -40 +KPX Uacute Amacron -40 +KPX Uacute Aogonek -40 +KPX Uacute Aring -40 +KPX Uacute Atilde -40 +KPX Ucircumflex A -40 +KPX Ucircumflex Aacute -40 +KPX Ucircumflex Abreve -40 +KPX Ucircumflex Acircumflex -40 +KPX Ucircumflex Adieresis -40 +KPX Ucircumflex Agrave -40 +KPX Ucircumflex Amacron -40 +KPX Ucircumflex Aogonek -40 +KPX Ucircumflex Aring -40 +KPX Ucircumflex Atilde -40 +KPX Udieresis A -40 +KPX Udieresis Aacute -40 +KPX Udieresis Abreve -40 +KPX Udieresis Acircumflex -40 +KPX Udieresis Adieresis -40 +KPX Udieresis Agrave -40 +KPX Udieresis Amacron -40 +KPX Udieresis Aogonek -40 +KPX Udieresis Aring -40 +KPX Udieresis Atilde -40 +KPX Ugrave A -40 +KPX Ugrave Aacute -40 +KPX Ugrave Abreve -40 +KPX Ugrave Acircumflex -40 +KPX Ugrave Adieresis -40 +KPX Ugrave Agrave -40 +KPX Ugrave Amacron -40 +KPX Ugrave Aogonek -40 +KPX Ugrave Aring -40 +KPX Ugrave Atilde -40 +KPX Uhungarumlaut A -40 +KPX Uhungarumlaut Aacute -40 +KPX Uhungarumlaut Abreve -40 +KPX Uhungarumlaut Acircumflex -40 +KPX Uhungarumlaut Adieresis -40 +KPX Uhungarumlaut Agrave -40 +KPX Uhungarumlaut Amacron -40 +KPX Uhungarumlaut Aogonek -40 +KPX Uhungarumlaut Aring -40 +KPX Uhungarumlaut Atilde -40 +KPX Umacron A -40 +KPX Umacron Aacute -40 +KPX Umacron Abreve -40 +KPX Umacron Acircumflex -40 +KPX Umacron Adieresis -40 +KPX Umacron Agrave -40 +KPX Umacron Amacron -40 +KPX Umacron Aogonek -40 +KPX Umacron Aring -40 +KPX Umacron Atilde -40 +KPX Uogonek A -40 +KPX Uogonek Aacute -40 +KPX Uogonek Abreve -40 +KPX Uogonek Acircumflex -40 +KPX Uogonek Adieresis -40 +KPX Uogonek Agrave -40 +KPX Uogonek Amacron -40 +KPX Uogonek Aogonek -40 +KPX Uogonek Aring -40 +KPX Uogonek Atilde -40 +KPX Uring A -40 +KPX Uring Aacute -40 +KPX Uring Abreve -40 +KPX Uring Acircumflex -40 +KPX Uring Adieresis -40 +KPX Uring Agrave -40 +KPX Uring Amacron -40 +KPX Uring Aogonek -40 +KPX Uring Aring -40 +KPX Uring Atilde -40 +KPX V A -135 +KPX V Aacute -135 +KPX V Abreve -135 +KPX V Acircumflex -135 +KPX V Adieresis -135 +KPX V Agrave -135 +KPX V Amacron -135 +KPX V Aogonek -135 +KPX V Aring -135 +KPX V Atilde -135 +KPX V G -15 +KPX V Gbreve -15 +KPX V Gcommaaccent -15 +KPX V O -40 +KPX V Oacute -40 +KPX V Ocircumflex -40 +KPX V Odieresis -40 +KPX V Ograve -40 +KPX V Ohungarumlaut -40 +KPX V Omacron -40 +KPX V Oslash -40 +KPX V Otilde -40 +KPX V a -111 +KPX V aacute -111 +KPX V abreve -111 +KPX V acircumflex -71 +KPX V adieresis -71 +KPX V agrave -71 +KPX V amacron -71 +KPX V aogonek -111 +KPX V aring -111 +KPX V atilde -71 +KPX V colon -74 +KPX V comma -129 +KPX V e -111 +KPX V eacute -111 +KPX V ecaron -71 +KPX V ecircumflex -71 +KPX V edieresis -71 +KPX V edotaccent -111 +KPX V egrave -71 +KPX V emacron -71 +KPX V eogonek -111 +KPX V hyphen -100 +KPX V i -60 +KPX V iacute -60 +KPX V icircumflex -20 +KPX V idieresis -20 +KPX V igrave -20 +KPX V imacron -20 +KPX V iogonek -60 +KPX V o -129 +KPX V oacute -129 +KPX V ocircumflex -129 +KPX V odieresis -89 +KPX V ograve -89 +KPX V ohungarumlaut -129 +KPX V omacron -89 +KPX V oslash -129 +KPX V otilde -89 +KPX V period -129 +KPX V semicolon -74 +KPX V u -75 +KPX V uacute -75 +KPX V ucircumflex -75 +KPX V udieresis -75 +KPX V ugrave -75 +KPX V uhungarumlaut -75 +KPX V umacron -75 +KPX V uogonek -75 +KPX V uring -75 +KPX W A -120 +KPX W Aacute -120 +KPX W Abreve -120 +KPX W Acircumflex -120 +KPX W Adieresis -120 +KPX W Agrave -120 +KPX W Amacron -120 +KPX W Aogonek -120 +KPX W Aring -120 +KPX W Atilde -120 +KPX W O -10 +KPX W Oacute -10 +KPX W Ocircumflex -10 +KPX W Odieresis -10 +KPX W Ograve -10 +KPX W Ohungarumlaut -10 +KPX W Omacron -10 +KPX W Oslash -10 +KPX W Otilde -10 +KPX W a -80 +KPX W aacute -80 +KPX W abreve -80 +KPX W acircumflex -80 +KPX W adieresis -80 +KPX W agrave -80 +KPX W amacron -80 +KPX W aogonek -80 +KPX W aring -80 +KPX W atilde -80 +KPX W colon -37 +KPX W comma -92 +KPX W e -80 +KPX W eacute -80 +KPX W ecaron -80 +KPX W ecircumflex -80 +KPX W edieresis -40 +KPX W edotaccent -80 +KPX W egrave -40 +KPX W emacron -40 +KPX W eogonek -80 +KPX W hyphen -65 +KPX W i -40 +KPX W iacute -40 +KPX W iogonek -40 +KPX W o -80 +KPX W oacute -80 +KPX W ocircumflex -80 +KPX W odieresis -80 +KPX W ograve -80 +KPX W ohungarumlaut -80 +KPX W omacron -80 +KPX W oslash -80 +KPX W otilde -80 +KPX W period -92 +KPX W semicolon -37 +KPX W u -50 +KPX W uacute -50 +KPX W ucircumflex -50 +KPX W udieresis -50 +KPX W ugrave -50 +KPX W uhungarumlaut -50 +KPX W umacron -50 +KPX W uogonek -50 +KPX W uring -50 +KPX W y -73 +KPX W yacute -73 +KPX W ydieresis -73 +KPX Y A -120 +KPX Y Aacute -120 +KPX Y Abreve -120 +KPX Y Acircumflex -120 +KPX Y Adieresis -120 +KPX Y Agrave -120 +KPX Y Amacron -120 +KPX Y Aogonek -120 +KPX Y Aring -120 +KPX Y Atilde -120 +KPX Y O -30 +KPX Y Oacute -30 +KPX Y Ocircumflex -30 +KPX Y Odieresis -30 +KPX Y Ograve -30 +KPX Y Ohungarumlaut -30 +KPX Y Omacron -30 +KPX Y Oslash -30 +KPX Y Otilde -30 +KPX Y a -100 +KPX Y aacute -100 +KPX Y abreve -100 +KPX Y acircumflex -100 +KPX Y adieresis -60 +KPX Y agrave -60 +KPX Y amacron -60 +KPX Y aogonek -100 +KPX Y aring -100 +KPX Y atilde -60 +KPX Y colon -92 +KPX Y comma -129 +KPX Y e -100 +KPX Y eacute -100 +KPX Y ecaron -100 +KPX Y ecircumflex -100 +KPX Y edieresis -60 +KPX Y edotaccent -100 +KPX Y egrave -60 +KPX Y emacron -60 +KPX Y eogonek -100 +KPX Y hyphen -111 +KPX Y i -55 +KPX Y iacute -55 +KPX Y iogonek -55 +KPX Y o -110 +KPX Y oacute -110 +KPX Y ocircumflex -110 +KPX Y odieresis -70 +KPX Y ograve -70 +KPX Y ohungarumlaut -110 +KPX Y omacron -70 +KPX Y oslash -110 +KPX Y otilde -70 +KPX Y period -129 +KPX Y semicolon -92 +KPX Y u -111 +KPX Y uacute -111 +KPX Y ucircumflex -111 +KPX Y udieresis -71 +KPX Y ugrave -71 +KPX Y uhungarumlaut -111 +KPX Y umacron -71 +KPX Y uogonek -111 +KPX Y uring -111 +KPX Yacute A -120 +KPX Yacute Aacute -120 +KPX Yacute Abreve -120 +KPX Yacute Acircumflex -120 +KPX Yacute Adieresis -120 +KPX Yacute Agrave -120 +KPX Yacute Amacron -120 +KPX Yacute Aogonek -120 +KPX Yacute Aring -120 +KPX Yacute Atilde -120 +KPX Yacute O -30 +KPX Yacute Oacute -30 +KPX Yacute Ocircumflex -30 +KPX Yacute Odieresis -30 +KPX Yacute Ograve -30 +KPX Yacute Ohungarumlaut -30 +KPX Yacute Omacron -30 +KPX Yacute Oslash -30 +KPX Yacute Otilde -30 +KPX Yacute a -100 +KPX Yacute aacute -100 +KPX Yacute abreve -100 +KPX Yacute acircumflex -100 +KPX Yacute adieresis -60 +KPX Yacute agrave -60 +KPX Yacute amacron -60 +KPX Yacute aogonek -100 +KPX Yacute aring -100 +KPX Yacute atilde -60 +KPX Yacute colon -92 +KPX Yacute comma -129 +KPX Yacute e -100 +KPX Yacute eacute -100 +KPX Yacute ecaron -100 +KPX Yacute ecircumflex -100 +KPX Yacute edieresis -60 +KPX Yacute edotaccent -100 +KPX Yacute egrave -60 +KPX Yacute emacron -60 +KPX Yacute eogonek -100 +KPX Yacute hyphen -111 +KPX Yacute i -55 +KPX Yacute iacute -55 +KPX Yacute iogonek -55 +KPX Yacute o -110 +KPX Yacute oacute -110 +KPX Yacute ocircumflex -110 +KPX Yacute odieresis -70 +KPX Yacute ograve -70 +KPX Yacute ohungarumlaut -110 +KPX Yacute omacron -70 +KPX Yacute oslash -110 +KPX Yacute otilde -70 +KPX Yacute period -129 +KPX Yacute semicolon -92 +KPX Yacute u -111 +KPX Yacute uacute -111 +KPX Yacute ucircumflex -111 +KPX Yacute udieresis -71 +KPX Yacute ugrave -71 +KPX Yacute uhungarumlaut -111 +KPX Yacute umacron -71 +KPX Yacute uogonek -111 +KPX Yacute uring -111 +KPX Ydieresis A -120 +KPX Ydieresis Aacute -120 +KPX Ydieresis Abreve -120 +KPX Ydieresis Acircumflex -120 +KPX Ydieresis Adieresis -120 +KPX Ydieresis Agrave -120 +KPX Ydieresis Amacron -120 +KPX Ydieresis Aogonek -120 +KPX Ydieresis Aring -120 +KPX Ydieresis Atilde -120 +KPX Ydieresis O -30 +KPX Ydieresis Oacute -30 +KPX Ydieresis Ocircumflex -30 +KPX Ydieresis Odieresis -30 +KPX Ydieresis Ograve -30 +KPX Ydieresis Ohungarumlaut -30 +KPX Ydieresis Omacron -30 +KPX Ydieresis Oslash -30 +KPX Ydieresis Otilde -30 +KPX Ydieresis a -100 +KPX Ydieresis aacute -100 +KPX Ydieresis abreve -100 +KPX Ydieresis acircumflex -100 +KPX Ydieresis adieresis -60 +KPX Ydieresis agrave -60 +KPX Ydieresis amacron -60 +KPX Ydieresis aogonek -100 +KPX Ydieresis aring -100 +KPX Ydieresis atilde -100 +KPX Ydieresis colon -92 +KPX Ydieresis comma -129 +KPX Ydieresis e -100 +KPX Ydieresis eacute -100 +KPX Ydieresis ecaron -100 +KPX Ydieresis ecircumflex -100 +KPX Ydieresis edieresis -60 +KPX Ydieresis edotaccent -100 +KPX Ydieresis egrave -60 +KPX Ydieresis emacron -60 +KPX Ydieresis eogonek -100 +KPX Ydieresis hyphen -111 +KPX Ydieresis i -55 +KPX Ydieresis iacute -55 +KPX Ydieresis iogonek -55 +KPX Ydieresis o -110 +KPX Ydieresis oacute -110 +KPX Ydieresis ocircumflex -110 +KPX Ydieresis odieresis -70 +KPX Ydieresis ograve -70 +KPX Ydieresis ohungarumlaut -110 +KPX Ydieresis omacron -70 +KPX Ydieresis oslash -110 +KPX Ydieresis otilde -70 +KPX Ydieresis period -129 +KPX Ydieresis semicolon -92 +KPX Ydieresis u -111 +KPX Ydieresis uacute -111 +KPX Ydieresis ucircumflex -111 +KPX Ydieresis udieresis -71 +KPX Ydieresis ugrave -71 +KPX Ydieresis uhungarumlaut -111 +KPX Ydieresis umacron -71 +KPX Ydieresis uogonek -111 +KPX Ydieresis uring -111 +KPX a v -20 +KPX a w -15 +KPX aacute v -20 +KPX aacute w -15 +KPX abreve v -20 +KPX abreve w -15 +KPX acircumflex v -20 +KPX acircumflex w -15 +KPX adieresis v -20 +KPX adieresis w -15 +KPX agrave v -20 +KPX agrave w -15 +KPX amacron v -20 +KPX amacron w -15 +KPX aogonek v -20 +KPX aogonek w -15 +KPX aring v -20 +KPX aring w -15 +KPX atilde v -20 +KPX atilde w -15 +KPX b period -40 +KPX b u -20 +KPX b uacute -20 +KPX b ucircumflex -20 +KPX b udieresis -20 +KPX b ugrave -20 +KPX b uhungarumlaut -20 +KPX b umacron -20 +KPX b uogonek -20 +KPX b uring -20 +KPX b v -15 +KPX c y -15 +KPX c yacute -15 +KPX c ydieresis -15 +KPX cacute y -15 +KPX cacute yacute -15 +KPX cacute ydieresis -15 +KPX ccaron y -15 +KPX ccaron yacute -15 +KPX ccaron ydieresis -15 +KPX ccedilla y -15 +KPX ccedilla yacute -15 +KPX ccedilla ydieresis -15 +KPX comma quotedblright -70 +KPX comma quoteright -70 +KPX e g -15 +KPX e gbreve -15 +KPX e gcommaaccent -15 +KPX e v -25 +KPX e w -25 +KPX e x -15 +KPX e y -15 +KPX e yacute -15 +KPX e ydieresis -15 +KPX eacute g -15 +KPX eacute gbreve -15 +KPX eacute gcommaaccent -15 +KPX eacute v -25 +KPX eacute w -25 +KPX eacute x -15 +KPX eacute y -15 +KPX eacute yacute -15 +KPX eacute ydieresis -15 +KPX ecaron g -15 +KPX ecaron gbreve -15 +KPX ecaron gcommaaccent -15 +KPX ecaron v -25 +KPX ecaron w -25 +KPX ecaron x -15 +KPX ecaron y -15 +KPX ecaron yacute -15 +KPX ecaron ydieresis -15 +KPX ecircumflex g -15 +KPX ecircumflex gbreve -15 +KPX ecircumflex gcommaaccent -15 +KPX ecircumflex v -25 +KPX ecircumflex w -25 +KPX ecircumflex x -15 +KPX ecircumflex y -15 +KPX ecircumflex yacute -15 +KPX ecircumflex ydieresis -15 +KPX edieresis g -15 +KPX edieresis gbreve -15 +KPX edieresis gcommaaccent -15 +KPX edieresis v -25 +KPX edieresis w -25 +KPX edieresis x -15 +KPX edieresis y -15 +KPX edieresis yacute -15 +KPX edieresis ydieresis -15 +KPX edotaccent g -15 +KPX edotaccent gbreve -15 +KPX edotaccent gcommaaccent -15 +KPX edotaccent v -25 +KPX edotaccent w -25 +KPX edotaccent x -15 +KPX edotaccent y -15 +KPX edotaccent yacute -15 +KPX edotaccent ydieresis -15 +KPX egrave g -15 +KPX egrave gbreve -15 +KPX egrave gcommaaccent -15 +KPX egrave v -25 +KPX egrave w -25 +KPX egrave x -15 +KPX egrave y -15 +KPX egrave yacute -15 +KPX egrave ydieresis -15 +KPX emacron g -15 +KPX emacron gbreve -15 +KPX emacron gcommaaccent -15 +KPX emacron v -25 +KPX emacron w -25 +KPX emacron x -15 +KPX emacron y -15 +KPX emacron yacute -15 +KPX emacron ydieresis -15 +KPX eogonek g -15 +KPX eogonek gbreve -15 +KPX eogonek gcommaaccent -15 +KPX eogonek v -25 +KPX eogonek w -25 +KPX eogonek x -15 +KPX eogonek y -15 +KPX eogonek yacute -15 +KPX eogonek ydieresis -15 +KPX f a -10 +KPX f aacute -10 +KPX f abreve -10 +KPX f acircumflex -10 +KPX f adieresis -10 +KPX f agrave -10 +KPX f amacron -10 +KPX f aogonek -10 +KPX f aring -10 +KPX f atilde -10 +KPX f dotlessi -50 +KPX f f -25 +KPX f i -20 +KPX f iacute -20 +KPX f quoteright 55 +KPX g a -5 +KPX g aacute -5 +KPX g abreve -5 +KPX g acircumflex -5 +KPX g adieresis -5 +KPX g agrave -5 +KPX g amacron -5 +KPX g aogonek -5 +KPX g aring -5 +KPX g atilde -5 +KPX gbreve a -5 +KPX gbreve aacute -5 +KPX gbreve abreve -5 +KPX gbreve acircumflex -5 +KPX gbreve adieresis -5 +KPX gbreve agrave -5 +KPX gbreve amacron -5 +KPX gbreve aogonek -5 +KPX gbreve aring -5 +KPX gbreve atilde -5 +KPX gcommaaccent a -5 +KPX gcommaaccent aacute -5 +KPX gcommaaccent abreve -5 +KPX gcommaaccent acircumflex -5 +KPX gcommaaccent adieresis -5 +KPX gcommaaccent agrave -5 +KPX gcommaaccent amacron -5 +KPX gcommaaccent aogonek -5 +KPX gcommaaccent aring -5 +KPX gcommaaccent atilde -5 +KPX h y -5 +KPX h yacute -5 +KPX h ydieresis -5 +KPX i v -25 +KPX iacute v -25 +KPX icircumflex v -25 +KPX idieresis v -25 +KPX igrave v -25 +KPX imacron v -25 +KPX iogonek v -25 +KPX k e -10 +KPX k eacute -10 +KPX k ecaron -10 +KPX k ecircumflex -10 +KPX k edieresis -10 +KPX k edotaccent -10 +KPX k egrave -10 +KPX k emacron -10 +KPX k eogonek -10 +KPX k o -10 +KPX k oacute -10 +KPX k ocircumflex -10 +KPX k odieresis -10 +KPX k ograve -10 +KPX k ohungarumlaut -10 +KPX k omacron -10 +KPX k oslash -10 +KPX k otilde -10 +KPX k y -15 +KPX k yacute -15 +KPX k ydieresis -15 +KPX kcommaaccent e -10 +KPX kcommaaccent eacute -10 +KPX kcommaaccent ecaron -10 +KPX kcommaaccent ecircumflex -10 +KPX kcommaaccent edieresis -10 +KPX kcommaaccent edotaccent -10 +KPX kcommaaccent egrave -10 +KPX kcommaaccent emacron -10 +KPX kcommaaccent eogonek -10 +KPX kcommaaccent o -10 +KPX kcommaaccent oacute -10 +KPX kcommaaccent ocircumflex -10 +KPX kcommaaccent odieresis -10 +KPX kcommaaccent ograve -10 +KPX kcommaaccent ohungarumlaut -10 +KPX kcommaaccent omacron -10 +KPX kcommaaccent oslash -10 +KPX kcommaaccent otilde -10 +KPX kcommaaccent y -15 +KPX kcommaaccent yacute -15 +KPX kcommaaccent ydieresis -15 +KPX l w -10 +KPX lacute w -10 +KPX lcommaaccent w -10 +KPX lslash w -10 +KPX n v -40 +KPX n y -15 +KPX n yacute -15 +KPX n ydieresis -15 +KPX nacute v -40 +KPX nacute y -15 +KPX nacute yacute -15 +KPX nacute ydieresis -15 +KPX ncaron v -40 +KPX ncaron y -15 +KPX ncaron yacute -15 +KPX ncaron ydieresis -15 +KPX ncommaaccent v -40 +KPX ncommaaccent y -15 +KPX ncommaaccent yacute -15 +KPX ncommaaccent ydieresis -15 +KPX ntilde v -40 +KPX ntilde y -15 +KPX ntilde yacute -15 +KPX ntilde ydieresis -15 +KPX o v -15 +KPX o w -25 +KPX o y -10 +KPX o yacute -10 +KPX o ydieresis -10 +KPX oacute v -15 +KPX oacute w -25 +KPX oacute y -10 +KPX oacute yacute -10 +KPX oacute ydieresis -10 +KPX ocircumflex v -15 +KPX ocircumflex w -25 +KPX ocircumflex y -10 +KPX ocircumflex yacute -10 +KPX ocircumflex ydieresis -10 +KPX odieresis v -15 +KPX odieresis w -25 +KPX odieresis y -10 +KPX odieresis yacute -10 +KPX odieresis ydieresis -10 +KPX ograve v -15 +KPX ograve w -25 +KPX ograve y -10 +KPX ograve yacute -10 +KPX ograve ydieresis -10 +KPX ohungarumlaut v -15 +KPX ohungarumlaut w -25 +KPX ohungarumlaut y -10 +KPX ohungarumlaut yacute -10 +KPX ohungarumlaut ydieresis -10 +KPX omacron v -15 +KPX omacron w -25 +KPX omacron y -10 +KPX omacron yacute -10 +KPX omacron ydieresis -10 +KPX oslash v -15 +KPX oslash w -25 +KPX oslash y -10 +KPX oslash yacute -10 +KPX oslash ydieresis -10 +KPX otilde v -15 +KPX otilde w -25 +KPX otilde y -10 +KPX otilde yacute -10 +KPX otilde ydieresis -10 +KPX p y -10 +KPX p yacute -10 +KPX p ydieresis -10 +KPX period quotedblright -70 +KPX period quoteright -70 +KPX quotedblleft A -80 +KPX quotedblleft Aacute -80 +KPX quotedblleft Abreve -80 +KPX quotedblleft Acircumflex -80 +KPX quotedblleft Adieresis -80 +KPX quotedblleft Agrave -80 +KPX quotedblleft Amacron -80 +KPX quotedblleft Aogonek -80 +KPX quotedblleft Aring -80 +KPX quotedblleft Atilde -80 +KPX quoteleft A -80 +KPX quoteleft Aacute -80 +KPX quoteleft Abreve -80 +KPX quoteleft Acircumflex -80 +KPX quoteleft Adieresis -80 +KPX quoteleft Agrave -80 +KPX quoteleft Amacron -80 +KPX quoteleft Aogonek -80 +KPX quoteleft Aring -80 +KPX quoteleft Atilde -80 +KPX quoteleft quoteleft -74 +KPX quoteright d -50 +KPX quoteright dcroat -50 +KPX quoteright l -10 +KPX quoteright lacute -10 +KPX quoteright lcommaaccent -10 +KPX quoteright lslash -10 +KPX quoteright quoteright -74 +KPX quoteright r -50 +KPX quoteright racute -50 +KPX quoteright rcaron -50 +KPX quoteright rcommaaccent -50 +KPX quoteright s -55 +KPX quoteright sacute -55 +KPX quoteright scaron -55 +KPX quoteright scedilla -55 +KPX quoteright scommaaccent -55 +KPX quoteright space -74 +KPX quoteright t -18 +KPX quoteright tcommaaccent -18 +KPX quoteright v -50 +KPX r comma -40 +KPX r g -18 +KPX r gbreve -18 +KPX r gcommaaccent -18 +KPX r hyphen -20 +KPX r period -55 +KPX racute comma -40 +KPX racute g -18 +KPX racute gbreve -18 +KPX racute gcommaaccent -18 +KPX racute hyphen -20 +KPX racute period -55 +KPX rcaron comma -40 +KPX rcaron g -18 +KPX rcaron gbreve -18 +KPX rcaron gcommaaccent -18 +KPX rcaron hyphen -20 +KPX rcaron period -55 +KPX rcommaaccent comma -40 +KPX rcommaaccent g -18 +KPX rcommaaccent gbreve -18 +KPX rcommaaccent gcommaaccent -18 +KPX rcommaaccent hyphen -20 +KPX rcommaaccent period -55 +KPX space A -55 +KPX space Aacute -55 +KPX space Abreve -55 +KPX space Acircumflex -55 +KPX space Adieresis -55 +KPX space Agrave -55 +KPX space Amacron -55 +KPX space Aogonek -55 +KPX space Aring -55 +KPX space Atilde -55 +KPX space T -18 +KPX space Tcaron -18 +KPX space Tcommaaccent -18 +KPX space V -50 +KPX space W -30 +KPX space Y -90 +KPX space Yacute -90 +KPX space Ydieresis -90 +KPX v a -25 +KPX v aacute -25 +KPX v abreve -25 +KPX v acircumflex -25 +KPX v adieresis -25 +KPX v agrave -25 +KPX v amacron -25 +KPX v aogonek -25 +KPX v aring -25 +KPX v atilde -25 +KPX v comma -65 +KPX v e -15 +KPX v eacute -15 +KPX v ecaron -15 +KPX v ecircumflex -15 +KPX v edieresis -15 +KPX v edotaccent -15 +KPX v egrave -15 +KPX v emacron -15 +KPX v eogonek -15 +KPX v o -20 +KPX v oacute -20 +KPX v ocircumflex -20 +KPX v odieresis -20 +KPX v ograve -20 +KPX v ohungarumlaut -20 +KPX v omacron -20 +KPX v oslash -20 +KPX v otilde -20 +KPX v period -65 +KPX w a -10 +KPX w aacute -10 +KPX w abreve -10 +KPX w acircumflex -10 +KPX w adieresis -10 +KPX w agrave -10 +KPX w amacron -10 +KPX w aogonek -10 +KPX w aring -10 +KPX w atilde -10 +KPX w comma -65 +KPX w o -10 +KPX w oacute -10 +KPX w ocircumflex -10 +KPX w odieresis -10 +KPX w ograve -10 +KPX w ohungarumlaut -10 +KPX w omacron -10 +KPX w oslash -10 +KPX w otilde -10 +KPX w period -65 +KPX x e -15 +KPX x eacute -15 +KPX x ecaron -15 +KPX x ecircumflex -15 +KPX x edieresis -15 +KPX x edotaccent -15 +KPX x egrave -15 +KPX x emacron -15 +KPX x eogonek -15 +KPX y comma -65 +KPX y period -65 +KPX yacute comma -65 +KPX yacute period -65 +KPX ydieresis comma -65 +KPX ydieresis period -65 +EndKernPairs +EndKernData +EndFontMetrics diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/ZapfDingbats.afm b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/ZapfDingbats.afm new file mode 100755 index 00000000..b2745053 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/ZapfDingbats.afm @@ -0,0 +1,225 @@ +StartFontMetrics 4.1 +Comment Copyright (c) 1985, 1987, 1988, 1989, 1997 Adobe Systems Incorporated. All Rights Reserved. +Comment Creation Date: Thu May 1 15:14:13 1997 +Comment UniqueID 43082 +Comment VMusage 45775 55535 +FontName ZapfDingbats +FullName ITC Zapf Dingbats +FamilyName ZapfDingbats +Weight Medium +ItalicAngle 0 +IsFixedPitch false +CharacterSet Special +FontBBox -1 -143 981 820 +UnderlinePosition -100 +UnderlineThickness 50 +Version 002.000 +Notice Copyright (c) 1985, 1987, 1988, 1989, 1997 Adobe Systems Incorporated. All Rights Reserved.ITC Zapf Dingbats is a registered trademark of International Typeface Corporation. +EncodingScheme FontSpecific +StdHW 28 +StdVW 90 +StartCharMetrics 202 +C 32 ; WX 278 ; N space ; B 0 0 0 0 ; +C 33 ; WX 974 ; N a1 ; B 35 72 939 621 ; +C 34 ; WX 961 ; N a2 ; B 35 81 927 611 ; +C 35 ; WX 974 ; N a202 ; B 35 72 939 621 ; +C 36 ; WX 980 ; N a3 ; B 35 0 945 692 ; +C 37 ; WX 719 ; N a4 ; B 34 139 685 566 ; +C 38 ; WX 789 ; N a5 ; B 35 -14 755 705 ; +C 39 ; WX 790 ; N a119 ; B 35 -14 755 705 ; +C 40 ; WX 791 ; N a118 ; B 35 -13 761 705 ; +C 41 ; WX 690 ; N a117 ; B 34 138 655 553 ; +C 42 ; WX 960 ; N a11 ; B 35 123 925 568 ; +C 43 ; WX 939 ; N a12 ; B 35 134 904 559 ; +C 44 ; WX 549 ; N a13 ; B 29 -11 516 705 ; +C 45 ; WX 855 ; N a14 ; B 34 59 820 632 ; +C 46 ; WX 911 ; N a15 ; B 35 50 876 642 ; +C 47 ; WX 933 ; N a16 ; B 35 139 899 550 ; +C 48 ; WX 911 ; N a105 ; B 35 50 876 642 ; +C 49 ; WX 945 ; N a17 ; B 35 139 909 553 ; +C 50 ; WX 974 ; N a18 ; B 35 104 938 587 ; +C 51 ; WX 755 ; N a19 ; B 34 -13 721 705 ; +C 52 ; WX 846 ; N a20 ; B 36 -14 811 705 ; +C 53 ; WX 762 ; N a21 ; B 35 0 727 692 ; +C 54 ; WX 761 ; N a22 ; B 35 0 727 692 ; +C 55 ; WX 571 ; N a23 ; B -1 -68 571 661 ; +C 56 ; WX 677 ; N a24 ; B 36 -13 642 705 ; +C 57 ; WX 763 ; N a25 ; B 35 0 728 692 ; +C 58 ; WX 760 ; N a26 ; B 35 0 726 692 ; +C 59 ; WX 759 ; N a27 ; B 35 0 725 692 ; +C 60 ; WX 754 ; N a28 ; B 35 0 720 692 ; +C 61 ; WX 494 ; N a6 ; B 35 0 460 692 ; +C 62 ; WX 552 ; N a7 ; B 35 0 517 692 ; +C 63 ; WX 537 ; N a8 ; B 35 0 503 692 ; +C 64 ; WX 577 ; N a9 ; B 35 96 542 596 ; +C 65 ; WX 692 ; N a10 ; B 35 -14 657 705 ; +C 66 ; WX 786 ; N a29 ; B 35 -14 751 705 ; +C 67 ; WX 788 ; N a30 ; B 35 -14 752 705 ; +C 68 ; WX 788 ; N a31 ; B 35 -14 753 705 ; +C 69 ; WX 790 ; N a32 ; B 35 -14 756 705 ; +C 70 ; WX 793 ; N a33 ; B 35 -13 759 705 ; +C 71 ; WX 794 ; N a34 ; B 35 -13 759 705 ; +C 72 ; WX 816 ; N a35 ; B 35 -14 782 705 ; +C 73 ; WX 823 ; N a36 ; B 35 -14 787 705 ; +C 74 ; WX 789 ; N a37 ; B 35 -14 754 705 ; +C 75 ; WX 841 ; N a38 ; B 35 -14 807 705 ; +C 76 ; WX 823 ; N a39 ; B 35 -14 789 705 ; +C 77 ; WX 833 ; N a40 ; B 35 -14 798 705 ; +C 78 ; WX 816 ; N a41 ; B 35 -13 782 705 ; +C 79 ; WX 831 ; N a42 ; B 35 -14 796 705 ; +C 80 ; WX 923 ; N a43 ; B 35 -14 888 705 ; +C 81 ; WX 744 ; N a44 ; B 35 0 710 692 ; +C 82 ; WX 723 ; N a45 ; B 35 0 688 692 ; +C 83 ; WX 749 ; N a46 ; B 35 0 714 692 ; +C 84 ; WX 790 ; N a47 ; B 34 -14 756 705 ; +C 85 ; WX 792 ; N a48 ; B 35 -14 758 705 ; +C 86 ; WX 695 ; N a49 ; B 35 -14 661 706 ; +C 87 ; WX 776 ; N a50 ; B 35 -6 741 699 ; +C 88 ; WX 768 ; N a51 ; B 35 -7 734 699 ; +C 89 ; WX 792 ; N a52 ; B 35 -14 757 705 ; +C 90 ; WX 759 ; N a53 ; B 35 0 725 692 ; +C 91 ; WX 707 ; N a54 ; B 35 -13 672 704 ; +C 92 ; WX 708 ; N a55 ; B 35 -14 672 705 ; +C 93 ; WX 682 ; N a56 ; B 35 -14 647 705 ; +C 94 ; WX 701 ; N a57 ; B 35 -14 666 705 ; +C 95 ; WX 826 ; N a58 ; B 35 -14 791 705 ; +C 96 ; WX 815 ; N a59 ; B 35 -14 780 705 ; +C 97 ; WX 789 ; N a60 ; B 35 -14 754 705 ; +C 98 ; WX 789 ; N a61 ; B 35 -14 754 705 ; +C 99 ; WX 707 ; N a62 ; B 34 -14 673 705 ; +C 100 ; WX 687 ; N a63 ; B 36 0 651 692 ; +C 101 ; WX 696 ; N a64 ; B 35 0 661 691 ; +C 102 ; WX 689 ; N a65 ; B 35 0 655 692 ; +C 103 ; WX 786 ; N a66 ; B 34 -14 751 705 ; +C 104 ; WX 787 ; N a67 ; B 35 -14 752 705 ; +C 105 ; WX 713 ; N a68 ; B 35 -14 678 705 ; +C 106 ; WX 791 ; N a69 ; B 35 -14 756 705 ; +C 107 ; WX 785 ; N a70 ; B 36 -14 751 705 ; +C 108 ; WX 791 ; N a71 ; B 35 -14 757 705 ; +C 109 ; WX 873 ; N a72 ; B 35 -14 838 705 ; +C 110 ; WX 761 ; N a73 ; B 35 0 726 692 ; +C 111 ; WX 762 ; N a74 ; B 35 0 727 692 ; +C 112 ; WX 762 ; N a203 ; B 35 0 727 692 ; +C 113 ; WX 759 ; N a75 ; B 35 0 725 692 ; +C 114 ; WX 759 ; N a204 ; B 35 0 725 692 ; +C 115 ; WX 892 ; N a76 ; B 35 0 858 705 ; +C 116 ; WX 892 ; N a77 ; B 35 -14 858 692 ; +C 117 ; WX 788 ; N a78 ; B 35 -14 754 705 ; +C 118 ; WX 784 ; N a79 ; B 35 -14 749 705 ; +C 119 ; WX 438 ; N a81 ; B 35 -14 403 705 ; +C 120 ; WX 138 ; N a82 ; B 35 0 104 692 ; +C 121 ; WX 277 ; N a83 ; B 35 0 242 692 ; +C 122 ; WX 415 ; N a84 ; B 35 0 380 692 ; +C 123 ; WX 392 ; N a97 ; B 35 263 357 705 ; +C 124 ; WX 392 ; N a98 ; B 34 263 357 705 ; +C 125 ; WX 668 ; N a99 ; B 35 263 633 705 ; +C 126 ; WX 668 ; N a100 ; B 36 263 634 705 ; +C 128 ; WX 390 ; N a89 ; B 35 -14 356 705 ; +C 129 ; WX 390 ; N a90 ; B 35 -14 355 705 ; +C 130 ; WX 317 ; N a93 ; B 35 0 283 692 ; +C 131 ; WX 317 ; N a94 ; B 35 0 283 692 ; +C 132 ; WX 276 ; N a91 ; B 35 0 242 692 ; +C 133 ; WX 276 ; N a92 ; B 35 0 242 692 ; +C 134 ; WX 509 ; N a205 ; B 35 0 475 692 ; +C 135 ; WX 509 ; N a85 ; B 35 0 475 692 ; +C 136 ; WX 410 ; N a206 ; B 35 0 375 692 ; +C 137 ; WX 410 ; N a86 ; B 35 0 375 692 ; +C 138 ; WX 234 ; N a87 ; B 35 -14 199 705 ; +C 139 ; WX 234 ; N a88 ; B 35 -14 199 705 ; +C 140 ; WX 334 ; N a95 ; B 35 0 299 692 ; +C 141 ; WX 334 ; N a96 ; B 35 0 299 692 ; +C 161 ; WX 732 ; N a101 ; B 35 -143 697 806 ; +C 162 ; WX 544 ; N a102 ; B 56 -14 488 706 ; +C 163 ; WX 544 ; N a103 ; B 34 -14 508 705 ; +C 164 ; WX 910 ; N a104 ; B 35 40 875 651 ; +C 165 ; WX 667 ; N a106 ; B 35 -14 633 705 ; +C 166 ; WX 760 ; N a107 ; B 35 -14 726 705 ; +C 167 ; WX 760 ; N a108 ; B 0 121 758 569 ; +C 168 ; WX 776 ; N a112 ; B 35 0 741 705 ; +C 169 ; WX 595 ; N a111 ; B 34 -14 560 705 ; +C 170 ; WX 694 ; N a110 ; B 35 -14 659 705 ; +C 171 ; WX 626 ; N a109 ; B 34 0 591 705 ; +C 172 ; WX 788 ; N a120 ; B 35 -14 754 705 ; +C 173 ; WX 788 ; N a121 ; B 35 -14 754 705 ; +C 174 ; WX 788 ; N a122 ; B 35 -14 754 705 ; +C 175 ; WX 788 ; N a123 ; B 35 -14 754 705 ; +C 176 ; WX 788 ; N a124 ; B 35 -14 754 705 ; +C 177 ; WX 788 ; N a125 ; B 35 -14 754 705 ; +C 178 ; WX 788 ; N a126 ; B 35 -14 754 705 ; +C 179 ; WX 788 ; N a127 ; B 35 -14 754 705 ; +C 180 ; WX 788 ; N a128 ; B 35 -14 754 705 ; +C 181 ; WX 788 ; N a129 ; B 35 -14 754 705 ; +C 182 ; WX 788 ; N a130 ; B 35 -14 754 705 ; +C 183 ; WX 788 ; N a131 ; B 35 -14 754 705 ; +C 184 ; WX 788 ; N a132 ; B 35 -14 754 705 ; +C 185 ; WX 788 ; N a133 ; B 35 -14 754 705 ; +C 186 ; WX 788 ; N a134 ; B 35 -14 754 705 ; +C 187 ; WX 788 ; N a135 ; B 35 -14 754 705 ; +C 188 ; WX 788 ; N a136 ; B 35 -14 754 705 ; +C 189 ; WX 788 ; N a137 ; B 35 -14 754 705 ; +C 190 ; WX 788 ; N a138 ; B 35 -14 754 705 ; +C 191 ; WX 788 ; N a139 ; B 35 -14 754 705 ; +C 192 ; WX 788 ; N a140 ; B 35 -14 754 705 ; +C 193 ; WX 788 ; N a141 ; B 35 -14 754 705 ; +C 194 ; WX 788 ; N a142 ; B 35 -14 754 705 ; +C 195 ; WX 788 ; N a143 ; B 35 -14 754 705 ; +C 196 ; WX 788 ; N a144 ; B 35 -14 754 705 ; +C 197 ; WX 788 ; N a145 ; B 35 -14 754 705 ; +C 198 ; WX 788 ; N a146 ; B 35 -14 754 705 ; +C 199 ; WX 788 ; N a147 ; B 35 -14 754 705 ; +C 200 ; WX 788 ; N a148 ; B 35 -14 754 705 ; +C 201 ; WX 788 ; N a149 ; B 35 -14 754 705 ; +C 202 ; WX 788 ; N a150 ; B 35 -14 754 705 ; +C 203 ; WX 788 ; N a151 ; B 35 -14 754 705 ; +C 204 ; WX 788 ; N a152 ; B 35 -14 754 705 ; +C 205 ; WX 788 ; N a153 ; B 35 -14 754 705 ; +C 206 ; WX 788 ; N a154 ; B 35 -14 754 705 ; +C 207 ; WX 788 ; N a155 ; B 35 -14 754 705 ; +C 208 ; WX 788 ; N a156 ; B 35 -14 754 705 ; +C 209 ; WX 788 ; N a157 ; B 35 -14 754 705 ; +C 210 ; WX 788 ; N a158 ; B 35 -14 754 705 ; +C 211 ; WX 788 ; N a159 ; B 35 -14 754 705 ; +C 212 ; WX 894 ; N a160 ; B 35 58 860 634 ; +C 213 ; WX 838 ; N a161 ; B 35 152 803 540 ; +C 214 ; WX 1016 ; N a163 ; B 34 152 981 540 ; +C 215 ; WX 458 ; N a164 ; B 35 -127 422 820 ; +C 216 ; WX 748 ; N a196 ; B 35 94 698 597 ; +C 217 ; WX 924 ; N a165 ; B 35 140 890 552 ; +C 218 ; WX 748 ; N a192 ; B 35 94 698 597 ; +C 219 ; WX 918 ; N a166 ; B 35 166 884 526 ; +C 220 ; WX 927 ; N a167 ; B 35 32 892 660 ; +C 221 ; WX 928 ; N a168 ; B 35 129 891 562 ; +C 222 ; WX 928 ; N a169 ; B 35 128 893 563 ; +C 223 ; WX 834 ; N a170 ; B 35 155 799 537 ; +C 224 ; WX 873 ; N a171 ; B 35 93 838 599 ; +C 225 ; WX 828 ; N a172 ; B 35 104 791 588 ; +C 226 ; WX 924 ; N a173 ; B 35 98 889 594 ; +C 227 ; WX 924 ; N a162 ; B 35 98 889 594 ; +C 228 ; WX 917 ; N a174 ; B 35 0 882 692 ; +C 229 ; WX 930 ; N a175 ; B 35 84 896 608 ; +C 230 ; WX 931 ; N a176 ; B 35 84 896 608 ; +C 231 ; WX 463 ; N a177 ; B 35 -99 429 791 ; +C 232 ; WX 883 ; N a178 ; B 35 71 848 623 ; +C 233 ; WX 836 ; N a179 ; B 35 44 802 648 ; +C 234 ; WX 836 ; N a193 ; B 35 44 802 648 ; +C 235 ; WX 867 ; N a180 ; B 35 101 832 591 ; +C 236 ; WX 867 ; N a199 ; B 35 101 832 591 ; +C 237 ; WX 696 ; N a181 ; B 35 44 661 648 ; +C 238 ; WX 696 ; N a200 ; B 35 44 661 648 ; +C 239 ; WX 874 ; N a182 ; B 35 77 840 619 ; +C 241 ; WX 874 ; N a201 ; B 35 73 840 615 ; +C 242 ; WX 760 ; N a183 ; B 35 0 725 692 ; +C 243 ; WX 946 ; N a184 ; B 35 160 911 533 ; +C 244 ; WX 771 ; N a197 ; B 34 37 736 655 ; +C 245 ; WX 865 ; N a185 ; B 35 207 830 481 ; +C 246 ; WX 771 ; N a194 ; B 34 37 736 655 ; +C 247 ; WX 888 ; N a198 ; B 34 -19 853 712 ; +C 248 ; WX 967 ; N a186 ; B 35 124 932 568 ; +C 249 ; WX 888 ; N a195 ; B 34 -19 853 712 ; +C 250 ; WX 831 ; N a187 ; B 35 113 796 579 ; +C 251 ; WX 873 ; N a188 ; B 36 118 838 578 ; +C 252 ; WX 927 ; N a189 ; B 35 150 891 542 ; +C 253 ; WX 970 ; N a190 ; B 35 76 931 616 ; +C 254 ; WX 918 ; N a191 ; B 34 99 884 593 ; +EndCharMetrics +EndFontMetrics diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/php_Courier-Bold.afm b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/php_Courier-Bold.afm new file mode 100755 index 00000000..320bb21c --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/php_Courier-Bold.afm @@ -0,0 +1 @@ +a:21:{s:8:"FontName";s:12:"Courier-Bold";s:8:"FullName";s:12:"Courier Bold";s:10:"FamilyName";s:7:"Courier";s:6:"Weight";s:4:"Bold";s:11:"ItalicAngle";s:1:"0";s:12:"IsFixedPitch";s:4:"true";s:12:"CharacterSet";s:13:"ExtendedRoman";s:8:"FontBBox";a:4:{i:0;s:4:"-113";i:1;s:4:"-250";i:2;s:3:"749";i:3;s:3:"801";}s:17:"UnderlinePosition";s:4:"-100";s:18:"UnderlineThickness";s:2:"50";s:7:"Version";s:7:"003.000";s:14:"EncodingScheme";s:21:"AdobeStandardEncoding";s:9:"CapHeight";s:3:"562";s:7:"XHeight";s:3:"439";s:8:"Ascender";s:3:"629";s:9:"Descender";s:4:"-157";s:5:"StdHW";s:2:"84";s:5:"StdVW";s:3:"106";s:16:"StartCharMetrics";s:3:"315";s:1:"C";a:464:{i:32;a:4:{s:1:"C";s:2:"32";s:2:"WX";s:3:"600";s:1:"N";s:5:"space";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:1:"0";i:2;s:1:"0";i:3;s:1:"0";}}s:5:"space";a:4:{s:1:"C";s:2:"32";s:2:"WX";s:3:"600";s:1:"N";s:5:"space";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:1:"0";i:2;s:1:"0";i:3;s:1:"0";}}i:33;a:4:{s:1:"C";s:2:"33";s:2:"WX";s:3:"600";s:1:"N";s:6:"exclam";s:1:"B";a:4:{i:0;s:3:"202";i:1;s:3:"-15";i:2;s:3:"398";i:3;s:3:"572";}}s:6:"exclam";a:4:{s:1:"C";s:2:"33";s:2:"WX";s:3:"600";s:1:"N";s:6:"exclam";s:1:"B";a:4:{i:0;s:3:"202";i:1;s:3:"-15";i:2;s:3:"398";i:3;s:3:"572";}}i:34;a:4:{s:1:"C";s:2:"34";s:2:"WX";s:3:"600";s:1:"N";s:8:"quotedbl";s:1:"B";a:4:{i:0;s:3:"135";i:1;s:3:"277";i:2;s:3:"465";i:3;s:3:"562";}}s:8:"quotedbl";a:4:{s:1:"C";s:2:"34";s:2:"WX";s:3:"600";s:1:"N";s:8:"quotedbl";s:1:"B";a:4:{i:0;s:3:"135";i:1;s:3:"277";i:2;s:3:"465";i:3;s:3:"562";}}i:35;a:4:{s:1:"C";s:2:"35";s:2:"WX";s:3:"600";s:1:"N";s:10:"numbersign";s:1:"B";a:4:{i:0;s:2:"56";i:1;s:3:"-45";i:2;s:3:"544";i:3;s:3:"651";}}s:10:"numbersign";a:4:{s:1:"C";s:2:"35";s:2:"WX";s:3:"600";s:1:"N";s:10:"numbersign";s:1:"B";a:4:{i:0;s:2:"56";i:1;s:3:"-45";i:2;s:3:"544";i:3;s:3:"651";}}i:36;a:4:{s:1:"C";s:2:"36";s:2:"WX";s:3:"600";s:1:"N";s:6:"dollar";s:1:"B";a:4:{i:0;s:2:"82";i:1;s:4:"-126";i:2;s:3:"519";i:3;s:3:"666";}}s:6:"dollar";a:4:{s:1:"C";s:2:"36";s:2:"WX";s:3:"600";s:1:"N";s:6:"dollar";s:1:"B";a:4:{i:0;s:2:"82";i:1;s:4:"-126";i:2;s:3:"519";i:3;s:3:"666";}}i:37;a:4:{s:1:"C";s:2:"37";s:2:"WX";s:3:"600";s:1:"N";s:7:"percent";s:1:"B";a:4:{i:0;s:1:"5";i:1;s:3:"-15";i:2;s:3:"595";i:3;s:3:"616";}}s:7:"percent";a:4:{s:1:"C";s:2:"37";s:2:"WX";s:3:"600";s:1:"N";s:7:"percent";s:1:"B";a:4:{i:0;s:1:"5";i:1;s:3:"-15";i:2;s:3:"595";i:3;s:3:"616";}}i:38;a:4:{s:1:"C";s:2:"38";s:2:"WX";s:3:"600";s:1:"N";s:9:"ampersand";s:1:"B";a:4:{i:0;s:2:"36";i:1;s:3:"-15";i:2;s:3:"546";i:3;s:3:"543";}}s:9:"ampersand";a:4:{s:1:"C";s:2:"38";s:2:"WX";s:3:"600";s:1:"N";s:9:"ampersand";s:1:"B";a:4:{i:0;s:2:"36";i:1;s:3:"-15";i:2;s:3:"546";i:3;s:3:"543";}}i:39;a:4:{s:1:"C";s:2:"39";s:2:"WX";s:3:"600";s:1:"N";s:10:"quoteright";s:1:"B";a:4:{i:0;s:3:"171";i:1;s:3:"277";i:2;s:3:"423";i:3;s:3:"562";}}s:10:"quoteright";a:4:{s:1:"C";s:2:"39";s:2:"WX";s:3:"600";s:1:"N";s:10:"quoteright";s:1:"B";a:4:{i:0;s:3:"171";i:1;s:3:"277";i:2;s:3:"423";i:3;s:3:"562";}}i:40;a:4:{s:1:"C";s:2:"40";s:2:"WX";s:3:"600";s:1:"N";s:9:"parenleft";s:1:"B";a:4:{i:0;s:3:"219";i:1;s:4:"-102";i:2;s:3:"461";i:3;s:3:"616";}}s:9:"parenleft";a:4:{s:1:"C";s:2:"40";s:2:"WX";s:3:"600";s:1:"N";s:9:"parenleft";s:1:"B";a:4:{i:0;s:3:"219";i:1;s:4:"-102";i:2;s:3:"461";i:3;s:3:"616";}}i:41;a:4:{s:1:"C";s:2:"41";s:2:"WX";s:3:"600";s:1:"N";s:10:"parenright";s:1:"B";a:4:{i:0;s:3:"139";i:1;s:4:"-102";i:2;s:3:"381";i:3;s:3:"616";}}s:10:"parenright";a:4:{s:1:"C";s:2:"41";s:2:"WX";s:3:"600";s:1:"N";s:10:"parenright";s:1:"B";a:4:{i:0;s:3:"139";i:1;s:4:"-102";i:2;s:3:"381";i:3;s:3:"616";}}i:42;a:4:{s:1:"C";s:2:"42";s:2:"WX";s:3:"600";s:1:"N";s:8:"asterisk";s:1:"B";a:4:{i:0;s:2:"91";i:1;s:3:"219";i:2;s:3:"509";i:3;s:3:"601";}}s:8:"asterisk";a:4:{s:1:"C";s:2:"42";s:2:"WX";s:3:"600";s:1:"N";s:8:"asterisk";s:1:"B";a:4:{i:0;s:2:"91";i:1;s:3:"219";i:2;s:3:"509";i:3;s:3:"601";}}i:43;a:4:{s:1:"C";s:2:"43";s:2:"WX";s:3:"600";s:1:"N";s:4:"plus";s:1:"B";a:4:{i:0;s:2:"71";i:1;s:2:"39";i:2;s:3:"529";i:3;s:3:"478";}}s:4:"plus";a:4:{s:1:"C";s:2:"43";s:2:"WX";s:3:"600";s:1:"N";s:4:"plus";s:1:"B";a:4:{i:0;s:2:"71";i:1;s:2:"39";i:2;s:3:"529";i:3;s:3:"478";}}i:44;a:4:{s:1:"C";s:2:"44";s:2:"WX";s:3:"600";s:1:"N";s:5:"comma";s:1:"B";a:4:{i:0;s:3:"123";i:1;s:4:"-111";i:2;s:3:"393";i:3;s:3:"174";}}s:5:"comma";a:4:{s:1:"C";s:2:"44";s:2:"WX";s:3:"600";s:1:"N";s:5:"comma";s:1:"B";a:4:{i:0;s:3:"123";i:1;s:4:"-111";i:2;s:3:"393";i:3;s:3:"174";}}i:45;a:4:{s:1:"C";s:2:"45";s:2:"WX";s:3:"600";s:1:"N";s:6:"hyphen";s:1:"B";a:4:{i:0;s:3:"100";i:1;s:3:"203";i:2;s:3:"500";i:3;s:3:"313";}}s:6:"hyphen";a:4:{s:1:"C";s:2:"45";s:2:"WX";s:3:"600";s:1:"N";s:6:"hyphen";s:1:"B";a:4:{i:0;s:3:"100";i:1;s:3:"203";i:2;s:3:"500";i:3;s:3:"313";}}i:46;a:4:{s:1:"C";s:2:"46";s:2:"WX";s:3:"600";s:1:"N";s:6:"period";s:1:"B";a:4:{i:0;s:3:"192";i:1;s:3:"-15";i:2;s:3:"408";i:3;s:3:"171";}}s:6:"period";a:4:{s:1:"C";s:2:"46";s:2:"WX";s:3:"600";s:1:"N";s:6:"period";s:1:"B";a:4:{i:0;s:3:"192";i:1;s:3:"-15";i:2;s:3:"408";i:3;s:3:"171";}}i:47;a:4:{s:1:"C";s:2:"47";s:2:"WX";s:3:"600";s:1:"N";s:5:"slash";s:1:"B";a:4:{i:0;s:2:"98";i:1;s:3:"-77";i:2;s:3:"502";i:3;s:3:"626";}}s:5:"slash";a:4:{s:1:"C";s:2:"47";s:2:"WX";s:3:"600";s:1:"N";s:5:"slash";s:1:"B";a:4:{i:0;s:2:"98";i:1;s:3:"-77";i:2;s:3:"502";i:3;s:3:"626";}}i:48;a:4:{s:1:"C";s:2:"48";s:2:"WX";s:3:"600";s:1:"N";s:4:"zero";s:1:"B";a:4:{i:0;s:2:"87";i:1;s:3:"-15";i:2;s:3:"513";i:3;s:3:"616";}}s:4:"zero";a:4:{s:1:"C";s:2:"48";s:2:"WX";s:3:"600";s:1:"N";s:4:"zero";s:1:"B";a:4:{i:0;s:2:"87";i:1;s:3:"-15";i:2;s:3:"513";i:3;s:3:"616";}}i:49;a:4:{s:1:"C";s:2:"49";s:2:"WX";s:3:"600";s:1:"N";s:3:"one";s:1:"B";a:4:{i:0;s:2:"81";i:1;s:1:"0";i:2;s:3:"539";i:3;s:3:"616";}}s:3:"one";a:4:{s:1:"C";s:2:"49";s:2:"WX";s:3:"600";s:1:"N";s:3:"one";s:1:"B";a:4:{i:0;s:2:"81";i:1;s:1:"0";i:2;s:3:"539";i:3;s:3:"616";}}i:50;a:4:{s:1:"C";s:2:"50";s:2:"WX";s:3:"600";s:1:"N";s:3:"two";s:1:"B";a:4:{i:0;s:2:"61";i:1;s:1:"0";i:2;s:3:"499";i:3;s:3:"616";}}s:3:"two";a:4:{s:1:"C";s:2:"50";s:2:"WX";s:3:"600";s:1:"N";s:3:"two";s:1:"B";a:4:{i:0;s:2:"61";i:1;s:1:"0";i:2;s:3:"499";i:3;s:3:"616";}}i:51;a:4:{s:1:"C";s:2:"51";s:2:"WX";s:3:"600";s:1:"N";s:5:"three";s:1:"B";a:4:{i:0;s:2:"63";i:1;s:3:"-15";i:2;s:3:"501";i:3;s:3:"616";}}s:5:"three";a:4:{s:1:"C";s:2:"51";s:2:"WX";s:3:"600";s:1:"N";s:5:"three";s:1:"B";a:4:{i:0;s:2:"63";i:1;s:3:"-15";i:2;s:3:"501";i:3;s:3:"616";}}i:52;a:4:{s:1:"C";s:2:"52";s:2:"WX";s:3:"600";s:1:"N";s:4:"four";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:1:"0";i:2;s:3:"507";i:3;s:3:"616";}}s:4:"four";a:4:{s:1:"C";s:2:"52";s:2:"WX";s:3:"600";s:1:"N";s:4:"four";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:1:"0";i:2;s:3:"507";i:3;s:3:"616";}}i:53;a:4:{s:1:"C";s:2:"53";s:2:"WX";s:3:"600";s:1:"N";s:4:"five";s:1:"B";a:4:{i:0;s:2:"70";i:1;s:3:"-15";i:2;s:3:"521";i:3;s:3:"601";}}s:4:"five";a:4:{s:1:"C";s:2:"53";s:2:"WX";s:3:"600";s:1:"N";s:4:"five";s:1:"B";a:4:{i:0;s:2:"70";i:1;s:3:"-15";i:2;s:3:"521";i:3;s:3:"601";}}i:54;a:4:{s:1:"C";s:2:"54";s:2:"WX";s:3:"600";s:1:"N";s:3:"six";s:1:"B";a:4:{i:0;s:2:"90";i:1;s:3:"-15";i:2;s:3:"521";i:3;s:3:"616";}}s:3:"six";a:4:{s:1:"C";s:2:"54";s:2:"WX";s:3:"600";s:1:"N";s:3:"six";s:1:"B";a:4:{i:0;s:2:"90";i:1;s:3:"-15";i:2;s:3:"521";i:3;s:3:"616";}}i:55;a:4:{s:1:"C";s:2:"55";s:2:"WX";s:3:"600";s:1:"N";s:5:"seven";s:1:"B";a:4:{i:0;s:2:"55";i:1;s:1:"0";i:2;s:3:"494";i:3;s:3:"601";}}s:5:"seven";a:4:{s:1:"C";s:2:"55";s:2:"WX";s:3:"600";s:1:"N";s:5:"seven";s:1:"B";a:4:{i:0;s:2:"55";i:1;s:1:"0";i:2;s:3:"494";i:3;s:3:"601";}}i:56;a:4:{s:1:"C";s:2:"56";s:2:"WX";s:3:"600";s:1:"N";s:5:"eight";s:1:"B";a:4:{i:0;s:2:"83";i:1;s:3:"-15";i:2;s:3:"517";i:3;s:3:"616";}}s:5:"eight";a:4:{s:1:"C";s:2:"56";s:2:"WX";s:3:"600";s:1:"N";s:5:"eight";s:1:"B";a:4:{i:0;s:2:"83";i:1;s:3:"-15";i:2;s:3:"517";i:3;s:3:"616";}}i:57;a:4:{s:1:"C";s:2:"57";s:2:"WX";s:3:"600";s:1:"N";s:4:"nine";s:1:"B";a:4:{i:0;s:2:"79";i:1;s:3:"-15";i:2;s:3:"510";i:3;s:3:"616";}}s:4:"nine";a:4:{s:1:"C";s:2:"57";s:2:"WX";s:3:"600";s:1:"N";s:4:"nine";s:1:"B";a:4:{i:0;s:2:"79";i:1;s:3:"-15";i:2;s:3:"510";i:3;s:3:"616";}}i:58;a:4:{s:1:"C";s:2:"58";s:2:"WX";s:3:"600";s:1:"N";s:5:"colon";s:1:"B";a:4:{i:0;s:3:"191";i:1;s:3:"-15";i:2;s:3:"407";i:3;s:3:"425";}}s:5:"colon";a:4:{s:1:"C";s:2:"58";s:2:"WX";s:3:"600";s:1:"N";s:5:"colon";s:1:"B";a:4:{i:0;s:3:"191";i:1;s:3:"-15";i:2;s:3:"407";i:3;s:3:"425";}}i:59;a:4:{s:1:"C";s:2:"59";s:2:"WX";s:3:"600";s:1:"N";s:9:"semicolon";s:1:"B";a:4:{i:0;s:3:"123";i:1;s:4:"-111";i:2;s:3:"408";i:3;s:3:"425";}}s:9:"semicolon";a:4:{s:1:"C";s:2:"59";s:2:"WX";s:3:"600";s:1:"N";s:9:"semicolon";s:1:"B";a:4:{i:0;s:3:"123";i:1;s:4:"-111";i:2;s:3:"408";i:3;s:3:"425";}}i:60;a:4:{s:1:"C";s:2:"60";s:2:"WX";s:3:"600";s:1:"N";s:4:"less";s:1:"B";a:4:{i:0;s:2:"66";i:1;s:2:"15";i:2;s:3:"523";i:3;s:3:"501";}}s:4:"less";a:4:{s:1:"C";s:2:"60";s:2:"WX";s:3:"600";s:1:"N";s:4:"less";s:1:"B";a:4:{i:0;s:2:"66";i:1;s:2:"15";i:2;s:3:"523";i:3;s:3:"501";}}i:61;a:4:{s:1:"C";s:2:"61";s:2:"WX";s:3:"600";s:1:"N";s:5:"equal";s:1:"B";a:4:{i:0;s:2:"71";i:1;s:3:"118";i:2;s:3:"529";i:3;s:3:"398";}}s:5:"equal";a:4:{s:1:"C";s:2:"61";s:2:"WX";s:3:"600";s:1:"N";s:5:"equal";s:1:"B";a:4:{i:0;s:2:"71";i:1;s:3:"118";i:2;s:3:"529";i:3;s:3:"398";}}i:62;a:4:{s:1:"C";s:2:"62";s:2:"WX";s:3:"600";s:1:"N";s:7:"greater";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:2:"15";i:2;s:3:"534";i:3;s:3:"501";}}s:7:"greater";a:4:{s:1:"C";s:2:"62";s:2:"WX";s:3:"600";s:1:"N";s:7:"greater";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:2:"15";i:2;s:3:"534";i:3;s:3:"501";}}i:63;a:4:{s:1:"C";s:2:"63";s:2:"WX";s:3:"600";s:1:"N";s:8:"question";s:1:"B";a:4:{i:0;s:2:"98";i:1;s:3:"-14";i:2;s:3:"501";i:3;s:3:"580";}}s:8:"question";a:4:{s:1:"C";s:2:"63";s:2:"WX";s:3:"600";s:1:"N";s:8:"question";s:1:"B";a:4:{i:0;s:2:"98";i:1;s:3:"-14";i:2;s:3:"501";i:3;s:3:"580";}}i:64;a:4:{s:1:"C";s:2:"64";s:2:"WX";s:3:"600";s:1:"N";s:2:"at";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:3:"-15";i:2;s:3:"584";i:3;s:3:"616";}}s:2:"at";a:4:{s:1:"C";s:2:"64";s:2:"WX";s:3:"600";s:1:"N";s:2:"at";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:3:"-15";i:2;s:3:"584";i:3;s:3:"616";}}i:65;a:4:{s:1:"C";s:2:"65";s:2:"WX";s:3:"600";s:1:"N";s:1:"A";s:1:"B";a:4:{i:0;s:2:"-9";i:1;s:1:"0";i:2;s:3:"609";i:3;s:3:"562";}}s:1:"A";a:4:{s:1:"C";s:2:"65";s:2:"WX";s:3:"600";s:1:"N";s:1:"A";s:1:"B";a:4:{i:0;s:2:"-9";i:1;s:1:"0";i:2;s:3:"609";i:3;s:3:"562";}}i:66;a:4:{s:1:"C";s:2:"66";s:2:"WX";s:3:"600";s:1:"N";s:1:"B";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:1:"0";i:2;s:3:"573";i:3;s:3:"562";}}s:1:"B";a:4:{s:1:"C";s:2:"66";s:2:"WX";s:3:"600";s:1:"N";s:1:"B";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:1:"0";i:2;s:3:"573";i:3;s:3:"562";}}i:67;a:4:{s:1:"C";s:2:"67";s:2:"WX";s:3:"600";s:1:"N";s:1:"C";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:3:"-18";i:2;s:3:"560";i:3;s:3:"580";}}s:1:"C";a:4:{s:1:"C";s:2:"67";s:2:"WX";s:3:"600";s:1:"N";s:1:"C";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:3:"-18";i:2;s:3:"560";i:3;s:3:"580";}}i:68;a:4:{s:1:"C";s:2:"68";s:2:"WX";s:3:"600";s:1:"N";s:1:"D";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:1:"0";i:2;s:3:"594";i:3;s:3:"562";}}s:1:"D";a:4:{s:1:"C";s:2:"68";s:2:"WX";s:3:"600";s:1:"N";s:1:"D";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:1:"0";i:2;s:3:"594";i:3;s:3:"562";}}i:69;a:4:{s:1:"C";s:2:"69";s:2:"WX";s:3:"600";s:1:"N";s:1:"E";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:1:"0";i:2;s:3:"560";i:3;s:3:"562";}}s:1:"E";a:4:{s:1:"C";s:2:"69";s:2:"WX";s:3:"600";s:1:"N";s:1:"E";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:1:"0";i:2;s:3:"560";i:3;s:3:"562";}}i:70;a:4:{s:1:"C";s:2:"70";s:2:"WX";s:3:"600";s:1:"N";s:1:"F";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:1:"0";i:2;s:3:"570";i:3;s:3:"562";}}s:1:"F";a:4:{s:1:"C";s:2:"70";s:2:"WX";s:3:"600";s:1:"N";s:1:"F";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:1:"0";i:2;s:3:"570";i:3;s:3:"562";}}i:71;a:4:{s:1:"C";s:2:"71";s:2:"WX";s:3:"600";s:1:"N";s:1:"G";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:3:"-18";i:2;s:3:"594";i:3;s:3:"580";}}s:1:"G";a:4:{s:1:"C";s:2:"71";s:2:"WX";s:3:"600";s:1:"N";s:1:"G";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:3:"-18";i:2;s:3:"594";i:3;s:3:"580";}}i:72;a:4:{s:1:"C";s:2:"72";s:2:"WX";s:3:"600";s:1:"N";s:1:"H";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:1:"0";i:2;s:3:"580";i:3;s:3:"562";}}s:1:"H";a:4:{s:1:"C";s:2:"72";s:2:"WX";s:3:"600";s:1:"N";s:1:"H";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:1:"0";i:2;s:3:"580";i:3;s:3:"562";}}i:73;a:4:{s:1:"C";s:2:"73";s:2:"WX";s:3:"600";s:1:"N";s:1:"I";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:1:"0";i:2;s:3:"523";i:3;s:3:"562";}}s:1:"I";a:4:{s:1:"C";s:2:"73";s:2:"WX";s:3:"600";s:1:"N";s:1:"I";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:1:"0";i:2;s:3:"523";i:3;s:3:"562";}}i:74;a:4:{s:1:"C";s:2:"74";s:2:"WX";s:3:"600";s:1:"N";s:1:"J";s:1:"B";a:4:{i:0;s:2:"37";i:1;s:3:"-18";i:2;s:3:"601";i:3;s:3:"562";}}s:1:"J";a:4:{s:1:"C";s:2:"74";s:2:"WX";s:3:"600";s:1:"N";s:1:"J";s:1:"B";a:4:{i:0;s:2:"37";i:1;s:3:"-18";i:2;s:3:"601";i:3;s:3:"562";}}i:75;a:4:{s:1:"C";s:2:"75";s:2:"WX";s:3:"600";s:1:"N";s:1:"K";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:1:"0";i:2;s:3:"599";i:3;s:3:"562";}}s:1:"K";a:4:{s:1:"C";s:2:"75";s:2:"WX";s:3:"600";s:1:"N";s:1:"K";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:1:"0";i:2;s:3:"599";i:3;s:3:"562";}}i:76;a:4:{s:1:"C";s:2:"76";s:2:"WX";s:3:"600";s:1:"N";s:1:"L";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:1:"0";i:2;s:3:"578";i:3;s:3:"562";}}s:1:"L";a:4:{s:1:"C";s:2:"76";s:2:"WX";s:3:"600";s:1:"N";s:1:"L";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:1:"0";i:2;s:3:"578";i:3;s:3:"562";}}i:77;a:4:{s:1:"C";s:2:"77";s:2:"WX";s:3:"600";s:1:"N";s:1:"M";s:1:"B";a:4:{i:0;s:2:"-2";i:1;s:1:"0";i:2;s:3:"602";i:3;s:3:"562";}}s:1:"M";a:4:{s:1:"C";s:2:"77";s:2:"WX";s:3:"600";s:1:"N";s:1:"M";s:1:"B";a:4:{i:0;s:2:"-2";i:1;s:1:"0";i:2;s:3:"602";i:3;s:3:"562";}}i:78;a:4:{s:1:"C";s:2:"78";s:2:"WX";s:3:"600";s:1:"N";s:1:"N";s:1:"B";a:4:{i:0;s:1:"8";i:1;s:3:"-12";i:2;s:3:"610";i:3;s:3:"562";}}s:1:"N";a:4:{s:1:"C";s:2:"78";s:2:"WX";s:3:"600";s:1:"N";s:1:"N";s:1:"B";a:4:{i:0;s:1:"8";i:1;s:3:"-12";i:2;s:3:"610";i:3;s:3:"562";}}i:79;a:4:{s:1:"C";s:2:"79";s:2:"WX";s:3:"600";s:1:"N";s:1:"O";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:3:"-18";i:2;s:3:"578";i:3;s:3:"580";}}s:1:"O";a:4:{s:1:"C";s:2:"79";s:2:"WX";s:3:"600";s:1:"N";s:1:"O";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:3:"-18";i:2;s:3:"578";i:3;s:3:"580";}}i:80;a:4:{s:1:"C";s:2:"80";s:2:"WX";s:3:"600";s:1:"N";s:1:"P";s:1:"B";a:4:{i:0;s:2:"48";i:1;s:1:"0";i:2;s:3:"559";i:3;s:3:"562";}}s:1:"P";a:4:{s:1:"C";s:2:"80";s:2:"WX";s:3:"600";s:1:"N";s:1:"P";s:1:"B";a:4:{i:0;s:2:"48";i:1;s:1:"0";i:2;s:3:"559";i:3;s:3:"562";}}i:81;a:4:{s:1:"C";s:2:"81";s:2:"WX";s:3:"600";s:1:"N";s:1:"Q";s:1:"B";a:4:{i:0;s:2:"32";i:1;s:4:"-138";i:2;s:3:"578";i:3;s:3:"580";}}s:1:"Q";a:4:{s:1:"C";s:2:"81";s:2:"WX";s:3:"600";s:1:"N";s:1:"Q";s:1:"B";a:4:{i:0;s:2:"32";i:1;s:4:"-138";i:2;s:3:"578";i:3;s:3:"580";}}i:82;a:4:{s:1:"C";s:2:"82";s:2:"WX";s:3:"600";s:1:"N";s:1:"R";s:1:"B";a:4:{i:0;s:2:"24";i:1;s:1:"0";i:2;s:3:"599";i:3;s:3:"562";}}s:1:"R";a:4:{s:1:"C";s:2:"82";s:2:"WX";s:3:"600";s:1:"N";s:1:"R";s:1:"B";a:4:{i:0;s:2:"24";i:1;s:1:"0";i:2;s:3:"599";i:3;s:3:"562";}}i:83;a:4:{s:1:"C";s:2:"83";s:2:"WX";s:3:"600";s:1:"N";s:1:"S";s:1:"B";a:4:{i:0;s:2:"47";i:1;s:3:"-22";i:2;s:3:"553";i:3;s:3:"582";}}s:1:"S";a:4:{s:1:"C";s:2:"83";s:2:"WX";s:3:"600";s:1:"N";s:1:"S";s:1:"B";a:4:{i:0;s:2:"47";i:1;s:3:"-22";i:2;s:3:"553";i:3;s:3:"582";}}i:84;a:4:{s:1:"C";s:2:"84";s:2:"WX";s:3:"600";s:1:"N";s:1:"T";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:1:"0";i:2;s:3:"579";i:3;s:3:"562";}}s:1:"T";a:4:{s:1:"C";s:2:"84";s:2:"WX";s:3:"600";s:1:"N";s:1:"T";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:1:"0";i:2;s:3:"579";i:3;s:3:"562";}}i:85;a:4:{s:1:"C";s:2:"85";s:2:"WX";s:3:"600";s:1:"N";s:1:"U";s:1:"B";a:4:{i:0;s:1:"4";i:1;s:3:"-18";i:2;s:3:"596";i:3;s:3:"562";}}s:1:"U";a:4:{s:1:"C";s:2:"85";s:2:"WX";s:3:"600";s:1:"N";s:1:"U";s:1:"B";a:4:{i:0;s:1:"4";i:1;s:3:"-18";i:2;s:3:"596";i:3;s:3:"562";}}i:86;a:4:{s:1:"C";s:2:"86";s:2:"WX";s:3:"600";s:1:"N";s:1:"V";s:1:"B";a:4:{i:0;s:3:"-13";i:1;s:1:"0";i:2;s:3:"613";i:3;s:3:"562";}}s:1:"V";a:4:{s:1:"C";s:2:"86";s:2:"WX";s:3:"600";s:1:"N";s:1:"V";s:1:"B";a:4:{i:0;s:3:"-13";i:1;s:1:"0";i:2;s:3:"613";i:3;s:3:"562";}}i:87;a:4:{s:1:"C";s:2:"87";s:2:"WX";s:3:"600";s:1:"N";s:1:"W";s:1:"B";a:4:{i:0;s:3:"-18";i:1;s:1:"0";i:2;s:3:"618";i:3;s:3:"562";}}s:1:"W";a:4:{s:1:"C";s:2:"87";s:2:"WX";s:3:"600";s:1:"N";s:1:"W";s:1:"B";a:4:{i:0;s:3:"-18";i:1;s:1:"0";i:2;s:3:"618";i:3;s:3:"562";}}i:88;a:4:{s:1:"C";s:2:"88";s:2:"WX";s:3:"600";s:1:"N";s:1:"X";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:1:"0";i:2;s:3:"588";i:3;s:3:"562";}}s:1:"X";a:4:{s:1:"C";s:2:"88";s:2:"WX";s:3:"600";s:1:"N";s:1:"X";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:1:"0";i:2;s:3:"588";i:3;s:3:"562";}}i:89;a:4:{s:1:"C";s:2:"89";s:2:"WX";s:3:"600";s:1:"N";s:1:"Y";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:1:"0";i:2;s:3:"589";i:3;s:3:"562";}}s:1:"Y";a:4:{s:1:"C";s:2:"89";s:2:"WX";s:3:"600";s:1:"N";s:1:"Y";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:1:"0";i:2;s:3:"589";i:3;s:3:"562";}}i:90;a:4:{s:1:"C";s:2:"90";s:2:"WX";s:3:"600";s:1:"N";s:1:"Z";s:1:"B";a:4:{i:0;s:2:"62";i:1;s:1:"0";i:2;s:3:"539";i:3;s:3:"562";}}s:1:"Z";a:4:{s:1:"C";s:2:"90";s:2:"WX";s:3:"600";s:1:"N";s:1:"Z";s:1:"B";a:4:{i:0;s:2:"62";i:1;s:1:"0";i:2;s:3:"539";i:3;s:3:"562";}}i:91;a:4:{s:1:"C";s:2:"91";s:2:"WX";s:3:"600";s:1:"N";s:11:"bracketleft";s:1:"B";a:4:{i:0;s:3:"245";i:1;s:4:"-102";i:2;s:3:"475";i:3;s:3:"616";}}s:11:"bracketleft";a:4:{s:1:"C";s:2:"91";s:2:"WX";s:3:"600";s:1:"N";s:11:"bracketleft";s:1:"B";a:4:{i:0;s:3:"245";i:1;s:4:"-102";i:2;s:3:"475";i:3;s:3:"616";}}i:92;a:4:{s:1:"C";s:2:"92";s:2:"WX";s:3:"600";s:1:"N";s:9:"backslash";s:1:"B";a:4:{i:0;s:2:"99";i:1;s:3:"-77";i:2;s:3:"503";i:3;s:3:"626";}}s:9:"backslash";a:4:{s:1:"C";s:2:"92";s:2:"WX";s:3:"600";s:1:"N";s:9:"backslash";s:1:"B";a:4:{i:0;s:2:"99";i:1;s:3:"-77";i:2;s:3:"503";i:3;s:3:"626";}}i:93;a:4:{s:1:"C";s:2:"93";s:2:"WX";s:3:"600";s:1:"N";s:12:"bracketright";s:1:"B";a:4:{i:0;s:3:"125";i:1;s:4:"-102";i:2;s:3:"355";i:3;s:3:"616";}}s:12:"bracketright";a:4:{s:1:"C";s:2:"93";s:2:"WX";s:3:"600";s:1:"N";s:12:"bracketright";s:1:"B";a:4:{i:0;s:3:"125";i:1;s:4:"-102";i:2;s:3:"355";i:3;s:3:"616";}}i:94;a:4:{s:1:"C";s:2:"94";s:2:"WX";s:3:"600";s:1:"N";s:11:"asciicircum";s:1:"B";a:4:{i:0;s:3:"108";i:1;s:3:"250";i:2;s:3:"492";i:3;s:3:"616";}}s:11:"asciicircum";a:4:{s:1:"C";s:2:"94";s:2:"WX";s:3:"600";s:1:"N";s:11:"asciicircum";s:1:"B";a:4:{i:0;s:3:"108";i:1;s:3:"250";i:2;s:3:"492";i:3;s:3:"616";}}i:95;a:4:{s:1:"C";s:2:"95";s:2:"WX";s:3:"600";s:1:"N";s:10:"underscore";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:4:"-125";i:2;s:3:"600";i:3;s:3:"-75";}}s:10:"underscore";a:4:{s:1:"C";s:2:"95";s:2:"WX";s:3:"600";s:1:"N";s:10:"underscore";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:4:"-125";i:2;s:3:"600";i:3;s:3:"-75";}}i:96;a:4:{s:1:"C";s:2:"96";s:2:"WX";s:3:"600";s:1:"N";s:9:"quoteleft";s:1:"B";a:4:{i:0;s:3:"178";i:1;s:3:"277";i:2;s:3:"428";i:3;s:3:"562";}}s:9:"quoteleft";a:4:{s:1:"C";s:2:"96";s:2:"WX";s:3:"600";s:1:"N";s:9:"quoteleft";s:1:"B";a:4:{i:0;s:3:"178";i:1;s:3:"277";i:2;s:3:"428";i:3;s:3:"562";}}i:97;a:4:{s:1:"C";s:2:"97";s:2:"WX";s:3:"600";s:1:"N";s:1:"a";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-15";i:2;s:3:"570";i:3;s:3:"454";}}s:1:"a";a:4:{s:1:"C";s:2:"97";s:2:"WX";s:3:"600";s:1:"N";s:1:"a";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-15";i:2;s:3:"570";i:3;s:3:"454";}}i:98;a:4:{s:1:"C";s:2:"98";s:2:"WX";s:3:"600";s:1:"N";s:1:"b";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:3:"-15";i:2;s:3:"584";i:3;s:3:"626";}}s:1:"b";a:4:{s:1:"C";s:2:"98";s:2:"WX";s:3:"600";s:1:"N";s:1:"b";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:3:"-15";i:2;s:3:"584";i:3;s:3:"626";}}i:99;a:4:{s:1:"C";s:2:"99";s:2:"WX";s:3:"600";s:1:"N";s:1:"c";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:3:"-15";i:2;s:3:"545";i:3;s:3:"459";}}s:1:"c";a:4:{s:1:"C";s:2:"99";s:2:"WX";s:3:"600";s:1:"N";s:1:"c";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:3:"-15";i:2;s:3:"545";i:3;s:3:"459";}}i:100;a:4:{s:1:"C";s:3:"100";s:2:"WX";s:3:"600";s:1:"N";s:1:"d";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:3:"-15";i:2;s:3:"591";i:3;s:3:"626";}}s:1:"d";a:4:{s:1:"C";s:3:"100";s:2:"WX";s:3:"600";s:1:"N";s:1:"d";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:3:"-15";i:2;s:3:"591";i:3;s:3:"626";}}i:101;a:4:{s:1:"C";s:3:"101";s:2:"WX";s:3:"600";s:1:"N";s:1:"e";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:3:"-15";i:2;s:3:"563";i:3;s:3:"454";}}s:1:"e";a:4:{s:1:"C";s:3:"101";s:2:"WX";s:3:"600";s:1:"N";s:1:"e";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:3:"-15";i:2;s:3:"563";i:3;s:3:"454";}}i:102;a:5:{s:1:"C";s:3:"102";s:2:"WX";s:3:"600";s:1:"N";s:1:"f";s:1:"B";a:4:{i:0;s:2:"83";i:1;s:1:"0";i:2;s:3:"547";i:3;s:3:"626";}s:1:"L";a:2:{i:0;s:1:"l";i:1;s:2:"fl";}}s:1:"f";a:5:{s:1:"C";s:3:"102";s:2:"WX";s:3:"600";s:1:"N";s:1:"f";s:1:"B";a:4:{i:0;s:2:"83";i:1;s:1:"0";i:2;s:3:"547";i:3;s:3:"626";}s:1:"L";a:2:{i:0;s:1:"l";i:1;s:2:"fl";}}i:103;a:4:{s:1:"C";s:3:"103";s:2:"WX";s:3:"600";s:1:"N";s:1:"g";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:4:"-146";i:2;s:3:"580";i:3;s:3:"454";}}s:1:"g";a:4:{s:1:"C";s:3:"103";s:2:"WX";s:3:"600";s:1:"N";s:1:"g";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:4:"-146";i:2;s:3:"580";i:3;s:3:"454";}}i:104;a:4:{s:1:"C";s:3:"104";s:2:"WX";s:3:"600";s:1:"N";s:1:"h";s:1:"B";a:4:{i:0;s:1:"5";i:1;s:1:"0";i:2;s:3:"592";i:3;s:3:"626";}}s:1:"h";a:4:{s:1:"C";s:3:"104";s:2:"WX";s:3:"600";s:1:"N";s:1:"h";s:1:"B";a:4:{i:0;s:1:"5";i:1;s:1:"0";i:2;s:3:"592";i:3;s:3:"626";}}i:105;a:4:{s:1:"C";s:3:"105";s:2:"WX";s:3:"600";s:1:"N";s:1:"i";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:1:"0";i:2;s:3:"523";i:3;s:3:"658";}}s:1:"i";a:4:{s:1:"C";s:3:"105";s:2:"WX";s:3:"600";s:1:"N";s:1:"i";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:1:"0";i:2;s:3:"523";i:3;s:3:"658";}}i:106;a:4:{s:1:"C";s:3:"106";s:2:"WX";s:3:"600";s:1:"N";s:1:"j";s:1:"B";a:4:{i:0;s:2:"63";i:1;s:4:"-146";i:2;s:3:"440";i:3;s:3:"658";}}s:1:"j";a:4:{s:1:"C";s:3:"106";s:2:"WX";s:3:"600";s:1:"N";s:1:"j";s:1:"B";a:4:{i:0;s:2:"63";i:1;s:4:"-146";i:2;s:3:"440";i:3;s:3:"658";}}i:107;a:4:{s:1:"C";s:3:"107";s:2:"WX";s:3:"600";s:1:"N";s:1:"k";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:1:"0";i:2;s:3:"585";i:3;s:3:"626";}}s:1:"k";a:4:{s:1:"C";s:3:"107";s:2:"WX";s:3:"600";s:1:"N";s:1:"k";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:1:"0";i:2;s:3:"585";i:3;s:3:"626";}}i:108;a:4:{s:1:"C";s:3:"108";s:2:"WX";s:3:"600";s:1:"N";s:1:"l";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:1:"0";i:2;s:3:"523";i:3;s:3:"626";}}s:1:"l";a:4:{s:1:"C";s:3:"108";s:2:"WX";s:3:"600";s:1:"N";s:1:"l";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:1:"0";i:2;s:3:"523";i:3;s:3:"626";}}i:109;a:4:{s:1:"C";s:3:"109";s:2:"WX";s:3:"600";s:1:"N";s:1:"m";s:1:"B";a:4:{i:0;s:3:"-22";i:1;s:1:"0";i:2;s:3:"626";i:3;s:3:"454";}}s:1:"m";a:4:{s:1:"C";s:3:"109";s:2:"WX";s:3:"600";s:1:"N";s:1:"m";s:1:"B";a:4:{i:0;s:3:"-22";i:1;s:1:"0";i:2;s:3:"626";i:3;s:3:"454";}}i:110;a:4:{s:1:"C";s:3:"110";s:2:"WX";s:3:"600";s:1:"N";s:1:"n";s:1:"B";a:4:{i:0;s:2:"18";i:1;s:1:"0";i:2;s:3:"592";i:3;s:3:"454";}}s:1:"n";a:4:{s:1:"C";s:3:"110";s:2:"WX";s:3:"600";s:1:"N";s:1:"n";s:1:"B";a:4:{i:0;s:2:"18";i:1;s:1:"0";i:2;s:3:"592";i:3;s:3:"454";}}i:111;a:4:{s:1:"C";s:3:"111";s:2:"WX";s:3:"600";s:1:"N";s:1:"o";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:3:"-15";i:2;s:3:"570";i:3;s:3:"454";}}s:1:"o";a:4:{s:1:"C";s:3:"111";s:2:"WX";s:3:"600";s:1:"N";s:1:"o";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:3:"-15";i:2;s:3:"570";i:3;s:3:"454";}}i:112;a:4:{s:1:"C";s:3:"112";s:2:"WX";s:3:"600";s:1:"N";s:1:"p";s:1:"B";a:4:{i:0;s:2:"-1";i:1;s:4:"-142";i:2;s:3:"570";i:3;s:3:"454";}}s:1:"p";a:4:{s:1:"C";s:3:"112";s:2:"WX";s:3:"600";s:1:"N";s:1:"p";s:1:"B";a:4:{i:0;s:2:"-1";i:1;s:4:"-142";i:2;s:3:"570";i:3;s:3:"454";}}i:113;a:4:{s:1:"C";s:3:"113";s:2:"WX";s:3:"600";s:1:"N";s:1:"q";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:4:"-142";i:2;s:3:"591";i:3;s:3:"454";}}s:1:"q";a:4:{s:1:"C";s:3:"113";s:2:"WX";s:3:"600";s:1:"N";s:1:"q";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:4:"-142";i:2;s:3:"591";i:3;s:3:"454";}}i:114;a:4:{s:1:"C";s:3:"114";s:2:"WX";s:3:"600";s:1:"N";s:1:"r";s:1:"B";a:4:{i:0;s:2:"47";i:1;s:1:"0";i:2;s:3:"580";i:3;s:3:"454";}}s:1:"r";a:4:{s:1:"C";s:3:"114";s:2:"WX";s:3:"600";s:1:"N";s:1:"r";s:1:"B";a:4:{i:0;s:2:"47";i:1;s:1:"0";i:2;s:3:"580";i:3;s:3:"454";}}i:115;a:4:{s:1:"C";s:3:"115";s:2:"WX";s:3:"600";s:1:"N";s:1:"s";s:1:"B";a:4:{i:0;s:2:"68";i:1;s:3:"-17";i:2;s:3:"535";i:3;s:3:"459";}}s:1:"s";a:4:{s:1:"C";s:3:"115";s:2:"WX";s:3:"600";s:1:"N";s:1:"s";s:1:"B";a:4:{i:0;s:2:"68";i:1;s:3:"-17";i:2;s:3:"535";i:3;s:3:"459";}}i:116;a:4:{s:1:"C";s:3:"116";s:2:"WX";s:3:"600";s:1:"N";s:1:"t";s:1:"B";a:4:{i:0;s:2:"47";i:1;s:3:"-15";i:2;s:3:"532";i:3;s:3:"562";}}s:1:"t";a:4:{s:1:"C";s:3:"116";s:2:"WX";s:3:"600";s:1:"N";s:1:"t";s:1:"B";a:4:{i:0;s:2:"47";i:1;s:3:"-15";i:2;s:3:"532";i:3;s:3:"562";}}i:117;a:4:{s:1:"C";s:3:"117";s:2:"WX";s:3:"600";s:1:"N";s:1:"u";s:1:"B";a:4:{i:0;s:2:"-1";i:1;s:3:"-15";i:2;s:3:"569";i:3;s:3:"439";}}s:1:"u";a:4:{s:1:"C";s:3:"117";s:2:"WX";s:3:"600";s:1:"N";s:1:"u";s:1:"B";a:4:{i:0;s:2:"-1";i:1;s:3:"-15";i:2;s:3:"569";i:3;s:3:"439";}}i:118;a:4:{s:1:"C";s:3:"118";s:2:"WX";s:3:"600";s:1:"N";s:1:"v";s:1:"B";a:4:{i:0;s:2:"-1";i:1;s:1:"0";i:2;s:3:"601";i:3;s:3:"439";}}s:1:"v";a:4:{s:1:"C";s:3:"118";s:2:"WX";s:3:"600";s:1:"N";s:1:"v";s:1:"B";a:4:{i:0;s:2:"-1";i:1;s:1:"0";i:2;s:3:"601";i:3;s:3:"439";}}i:119;a:4:{s:1:"C";s:3:"119";s:2:"WX";s:3:"600";s:1:"N";s:1:"w";s:1:"B";a:4:{i:0;s:3:"-18";i:1;s:1:"0";i:2;s:3:"618";i:3;s:3:"439";}}s:1:"w";a:4:{s:1:"C";s:3:"119";s:2:"WX";s:3:"600";s:1:"N";s:1:"w";s:1:"B";a:4:{i:0;s:3:"-18";i:1;s:1:"0";i:2;s:3:"618";i:3;s:3:"439";}}i:120;a:4:{s:1:"C";s:3:"120";s:2:"WX";s:3:"600";s:1:"N";s:1:"x";s:1:"B";a:4:{i:0;s:1:"6";i:1;s:1:"0";i:2;s:3:"594";i:3;s:3:"439";}}s:1:"x";a:4:{s:1:"C";s:3:"120";s:2:"WX";s:3:"600";s:1:"N";s:1:"x";s:1:"B";a:4:{i:0;s:1:"6";i:1;s:1:"0";i:2;s:3:"594";i:3;s:3:"439";}}i:121;a:4:{s:1:"C";s:3:"121";s:2:"WX";s:3:"600";s:1:"N";s:1:"y";s:1:"B";a:4:{i:0;s:2:"-4";i:1;s:4:"-142";i:2;s:3:"601";i:3;s:3:"439";}}s:1:"y";a:4:{s:1:"C";s:3:"121";s:2:"WX";s:3:"600";s:1:"N";s:1:"y";s:1:"B";a:4:{i:0;s:2:"-4";i:1;s:4:"-142";i:2;s:3:"601";i:3;s:3:"439";}}i:122;a:4:{s:1:"C";s:3:"122";s:2:"WX";s:3:"600";s:1:"N";s:1:"z";s:1:"B";a:4:{i:0;s:2:"81";i:1;s:1:"0";i:2;s:3:"520";i:3;s:3:"439";}}s:1:"z";a:4:{s:1:"C";s:3:"122";s:2:"WX";s:3:"600";s:1:"N";s:1:"z";s:1:"B";a:4:{i:0;s:2:"81";i:1;s:1:"0";i:2;s:3:"520";i:3;s:3:"439";}}i:123;a:4:{s:1:"C";s:3:"123";s:2:"WX";s:3:"600";s:1:"N";s:9:"braceleft";s:1:"B";a:4:{i:0;s:3:"160";i:1;s:4:"-102";i:2;s:3:"464";i:3;s:3:"616";}}s:9:"braceleft";a:4:{s:1:"C";s:3:"123";s:2:"WX";s:3:"600";s:1:"N";s:9:"braceleft";s:1:"B";a:4:{i:0;s:3:"160";i:1;s:4:"-102";i:2;s:3:"464";i:3;s:3:"616";}}i:124;a:4:{s:1:"C";s:3:"124";s:2:"WX";s:3:"600";s:1:"N";s:3:"bar";s:1:"B";a:4:{i:0;s:3:"255";i:1;s:4:"-250";i:2;s:3:"345";i:3;s:3:"750";}}s:3:"bar";a:4:{s:1:"C";s:3:"124";s:2:"WX";s:3:"600";s:1:"N";s:3:"bar";s:1:"B";a:4:{i:0;s:3:"255";i:1;s:4:"-250";i:2;s:3:"345";i:3;s:3:"750";}}i:125;a:4:{s:1:"C";s:3:"125";s:2:"WX";s:3:"600";s:1:"N";s:10:"braceright";s:1:"B";a:4:{i:0;s:3:"136";i:1;s:4:"-102";i:2;s:3:"440";i:3;s:3:"616";}}s:10:"braceright";a:4:{s:1:"C";s:3:"125";s:2:"WX";s:3:"600";s:1:"N";s:10:"braceright";s:1:"B";a:4:{i:0;s:3:"136";i:1;s:4:"-102";i:2;s:3:"440";i:3;s:3:"616";}}i:126;a:4:{s:1:"C";s:3:"126";s:2:"WX";s:3:"600";s:1:"N";s:10:"asciitilde";s:1:"B";a:4:{i:0;s:2:"71";i:1;s:3:"153";i:2;s:3:"530";i:3;s:3:"356";}}s:10:"asciitilde";a:4:{s:1:"C";s:3:"126";s:2:"WX";s:3:"600";s:1:"N";s:10:"asciitilde";s:1:"B";a:4:{i:0;s:2:"71";i:1;s:3:"153";i:2;s:3:"530";i:3;s:3:"356";}}i:161;a:4:{s:1:"C";s:3:"161";s:2:"WX";s:3:"600";s:1:"N";s:10:"exclamdown";s:1:"B";a:4:{i:0;s:3:"202";i:1;s:4:"-146";i:2;s:3:"398";i:3;s:3:"449";}}s:10:"exclamdown";a:4:{s:1:"C";s:3:"161";s:2:"WX";s:3:"600";s:1:"N";s:10:"exclamdown";s:1:"B";a:4:{i:0;s:3:"202";i:1;s:4:"-146";i:2;s:3:"398";i:3;s:3:"449";}}i:162;a:4:{s:1:"C";s:3:"162";s:2:"WX";s:3:"600";s:1:"N";s:4:"cent";s:1:"B";a:4:{i:0;s:2:"66";i:1;s:3:"-49";i:2;s:3:"518";i:3;s:3:"614";}}s:4:"cent";a:4:{s:1:"C";s:3:"162";s:2:"WX";s:3:"600";s:1:"N";s:4:"cent";s:1:"B";a:4:{i:0;s:2:"66";i:1;s:3:"-49";i:2;s:3:"518";i:3;s:3:"614";}}i:163;a:4:{s:1:"C";s:3:"163";s:2:"WX";s:3:"600";s:1:"N";s:8:"sterling";s:1:"B";a:4:{i:0;s:2:"72";i:1;s:3:"-28";i:2;s:3:"558";i:3;s:3:"611";}}s:8:"sterling";a:4:{s:1:"C";s:3:"163";s:2:"WX";s:3:"600";s:1:"N";s:8:"sterling";s:1:"B";a:4:{i:0;s:2:"72";i:1;s:3:"-28";i:2;s:3:"558";i:3;s:3:"611";}}i:164;a:4:{s:1:"C";s:3:"164";s:2:"WX";s:3:"600";s:1:"N";s:8:"fraction";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-60";i:2;s:3:"576";i:3;s:3:"661";}}s:8:"fraction";a:4:{s:1:"C";s:3:"164";s:2:"WX";s:3:"600";s:1:"N";s:8:"fraction";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-60";i:2;s:3:"576";i:3;s:3:"661";}}i:165;a:4:{s:1:"C";s:3:"165";s:2:"WX";s:3:"600";s:1:"N";s:3:"yen";s:1:"B";a:4:{i:0;s:2:"10";i:1;s:1:"0";i:2;s:3:"590";i:3;s:3:"562";}}s:3:"yen";a:4:{s:1:"C";s:3:"165";s:2:"WX";s:3:"600";s:1:"N";s:3:"yen";s:1:"B";a:4:{i:0;s:2:"10";i:1;s:1:"0";i:2;s:3:"590";i:3;s:3:"562";}}i:166;a:4:{s:1:"C";s:3:"166";s:2:"WX";s:3:"600";s:1:"N";s:6:"florin";s:1:"B";a:4:{i:0;s:3:"-30";i:1;s:4:"-131";i:2;s:3:"572";i:3;s:3:"616";}}s:6:"florin";a:4:{s:1:"C";s:3:"166";s:2:"WX";s:3:"600";s:1:"N";s:6:"florin";s:1:"B";a:4:{i:0;s:3:"-30";i:1;s:4:"-131";i:2;s:3:"572";i:3;s:3:"616";}}i:167;a:4:{s:1:"C";s:3:"167";s:2:"WX";s:3:"600";s:1:"N";s:7:"section";s:1:"B";a:4:{i:0;s:2:"83";i:1;s:3:"-70";i:2;s:3:"517";i:3;s:3:"580";}}s:7:"section";a:4:{s:1:"C";s:3:"167";s:2:"WX";s:3:"600";s:1:"N";s:7:"section";s:1:"B";a:4:{i:0;s:2:"83";i:1;s:3:"-70";i:2;s:3:"517";i:3;s:3:"580";}}i:168;a:4:{s:1:"C";s:3:"168";s:2:"WX";s:3:"600";s:1:"N";s:8:"currency";s:1:"B";a:4:{i:0;s:2:"54";i:1;s:2:"49";i:2;s:3:"546";i:3;s:3:"517";}}s:8:"currency";a:4:{s:1:"C";s:3:"168";s:2:"WX";s:3:"600";s:1:"N";s:8:"currency";s:1:"B";a:4:{i:0;s:2:"54";i:1;s:2:"49";i:2;s:3:"546";i:3;s:3:"517";}}i:169;a:4:{s:1:"C";s:3:"169";s:2:"WX";s:3:"600";s:1:"N";s:11:"quotesingle";s:1:"B";a:4:{i:0;s:3:"227";i:1;s:3:"277";i:2;s:3:"373";i:3;s:3:"562";}}s:11:"quotesingle";a:4:{s:1:"C";s:3:"169";s:2:"WX";s:3:"600";s:1:"N";s:11:"quotesingle";s:1:"B";a:4:{i:0;s:3:"227";i:1;s:3:"277";i:2;s:3:"373";i:3;s:3:"562";}}i:170;a:4:{s:1:"C";s:3:"170";s:2:"WX";s:3:"600";s:1:"N";s:12:"quotedblleft";s:1:"B";a:4:{i:0;s:2:"71";i:1;s:3:"277";i:2;s:3:"535";i:3;s:3:"562";}}s:12:"quotedblleft";a:4:{s:1:"C";s:3:"170";s:2:"WX";s:3:"600";s:1:"N";s:12:"quotedblleft";s:1:"B";a:4:{i:0;s:2:"71";i:1;s:3:"277";i:2;s:3:"535";i:3;s:3:"562";}}i:171;a:4:{s:1:"C";s:3:"171";s:2:"WX";s:3:"600";s:1:"N";s:13:"guillemotleft";s:1:"B";a:4:{i:0;s:1:"8";i:1;s:2:"70";i:2;s:3:"553";i:3;s:3:"446";}}s:13:"guillemotleft";a:4:{s:1:"C";s:3:"171";s:2:"WX";s:3:"600";s:1:"N";s:13:"guillemotleft";s:1:"B";a:4:{i:0;s:1:"8";i:1;s:2:"70";i:2;s:3:"553";i:3;s:3:"446";}}i:172;a:4:{s:1:"C";s:3:"172";s:2:"WX";s:3:"600";s:1:"N";s:13:"guilsinglleft";s:1:"B";a:4:{i:0;s:3:"141";i:1;s:2:"70";i:2;s:3:"459";i:3;s:3:"446";}}s:13:"guilsinglleft";a:4:{s:1:"C";s:3:"172";s:2:"WX";s:3:"600";s:1:"N";s:13:"guilsinglleft";s:1:"B";a:4:{i:0;s:3:"141";i:1;s:2:"70";i:2;s:3:"459";i:3;s:3:"446";}}i:173;a:4:{s:1:"C";s:3:"173";s:2:"WX";s:3:"600";s:1:"N";s:14:"guilsinglright";s:1:"B";a:4:{i:0;s:3:"141";i:1;s:2:"70";i:2;s:3:"459";i:3;s:3:"446";}}s:14:"guilsinglright";a:4:{s:1:"C";s:3:"173";s:2:"WX";s:3:"600";s:1:"N";s:14:"guilsinglright";s:1:"B";a:4:{i:0;s:3:"141";i:1;s:2:"70";i:2;s:3:"459";i:3;s:3:"446";}}i:174;a:4:{s:1:"C";s:3:"174";s:2:"WX";s:3:"600";s:1:"N";s:2:"fi";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:1:"0";i:2;s:3:"593";i:3;s:3:"626";}}s:2:"fi";a:4:{s:1:"C";s:3:"174";s:2:"WX";s:3:"600";s:1:"N";s:2:"fi";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:1:"0";i:2;s:3:"593";i:3;s:3:"626";}}i:175;a:4:{s:1:"C";s:3:"175";s:2:"WX";s:3:"600";s:1:"N";s:2:"fl";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:1:"0";i:2;s:3:"593";i:3;s:3:"626";}}s:2:"fl";a:4:{s:1:"C";s:3:"175";s:2:"WX";s:3:"600";s:1:"N";s:2:"fl";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:1:"0";i:2;s:3:"593";i:3;s:3:"626";}}i:177;a:4:{s:1:"C";s:3:"177";s:2:"WX";s:3:"600";s:1:"N";s:6:"endash";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:3:"203";i:2;s:3:"535";i:3;s:3:"313";}}s:6:"endash";a:4:{s:1:"C";s:3:"177";s:2:"WX";s:3:"600";s:1:"N";s:6:"endash";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:3:"203";i:2;s:3:"535";i:3;s:3:"313";}}i:178;a:4:{s:1:"C";s:3:"178";s:2:"WX";s:3:"600";s:1:"N";s:6:"dagger";s:1:"B";a:4:{i:0;s:3:"106";i:1;s:3:"-70";i:2;s:3:"494";i:3;s:3:"580";}}s:6:"dagger";a:4:{s:1:"C";s:3:"178";s:2:"WX";s:3:"600";s:1:"N";s:6:"dagger";s:1:"B";a:4:{i:0;s:3:"106";i:1;s:3:"-70";i:2;s:3:"494";i:3;s:3:"580";}}i:179;a:4:{s:1:"C";s:3:"179";s:2:"WX";s:3:"600";s:1:"N";s:9:"daggerdbl";s:1:"B";a:4:{i:0;s:3:"106";i:1;s:3:"-70";i:2;s:3:"494";i:3;s:3:"580";}}s:9:"daggerdbl";a:4:{s:1:"C";s:3:"179";s:2:"WX";s:3:"600";s:1:"N";s:9:"daggerdbl";s:1:"B";a:4:{i:0;s:3:"106";i:1;s:3:"-70";i:2;s:3:"494";i:3;s:3:"580";}}i:180;a:4:{s:1:"C";s:3:"180";s:2:"WX";s:3:"600";s:1:"N";s:14:"periodcentered";s:1:"B";a:4:{i:0;s:3:"196";i:1;s:3:"165";i:2;s:3:"404";i:3;s:3:"351";}}s:14:"periodcentered";a:4:{s:1:"C";s:3:"180";s:2:"WX";s:3:"600";s:1:"N";s:14:"periodcentered";s:1:"B";a:4:{i:0;s:3:"196";i:1;s:3:"165";i:2;s:3:"404";i:3;s:3:"351";}}i:182;a:4:{s:1:"C";s:3:"182";s:2:"WX";s:3:"600";s:1:"N";s:9:"paragraph";s:1:"B";a:4:{i:0;s:1:"6";i:1;s:3:"-70";i:2;s:3:"576";i:3;s:3:"580";}}s:9:"paragraph";a:4:{s:1:"C";s:3:"182";s:2:"WX";s:3:"600";s:1:"N";s:9:"paragraph";s:1:"B";a:4:{i:0;s:1:"6";i:1;s:3:"-70";i:2;s:3:"576";i:3;s:3:"580";}}i:183;a:4:{s:1:"C";s:3:"183";s:2:"WX";s:3:"600";s:1:"N";s:6:"bullet";s:1:"B";a:4:{i:0;s:3:"140";i:1;s:3:"132";i:2;s:3:"460";i:3;s:3:"430";}}s:6:"bullet";a:4:{s:1:"C";s:3:"183";s:2:"WX";s:3:"600";s:1:"N";s:6:"bullet";s:1:"B";a:4:{i:0;s:3:"140";i:1;s:3:"132";i:2;s:3:"460";i:3;s:3:"430";}}i:184;a:4:{s:1:"C";s:3:"184";s:2:"WX";s:3:"600";s:1:"N";s:14:"quotesinglbase";s:1:"B";a:4:{i:0;s:3:"175";i:1;s:4:"-142";i:2;s:3:"427";i:3;s:3:"143";}}s:14:"quotesinglbase";a:4:{s:1:"C";s:3:"184";s:2:"WX";s:3:"600";s:1:"N";s:14:"quotesinglbase";s:1:"B";a:4:{i:0;s:3:"175";i:1;s:4:"-142";i:2;s:3:"427";i:3;s:3:"143";}}i:185;a:4:{s:1:"C";s:3:"185";s:2:"WX";s:3:"600";s:1:"N";s:12:"quotedblbase";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:4:"-142";i:2;s:3:"529";i:3;s:3:"143";}}s:12:"quotedblbase";a:4:{s:1:"C";s:3:"185";s:2:"WX";s:3:"600";s:1:"N";s:12:"quotedblbase";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:4:"-142";i:2;s:3:"529";i:3;s:3:"143";}}i:186;a:4:{s:1:"C";s:3:"186";s:2:"WX";s:3:"600";s:1:"N";s:13:"quotedblright";s:1:"B";a:4:{i:0;s:2:"61";i:1;s:3:"277";i:2;s:3:"525";i:3;s:3:"562";}}s:13:"quotedblright";a:4:{s:1:"C";s:3:"186";s:2:"WX";s:3:"600";s:1:"N";s:13:"quotedblright";s:1:"B";a:4:{i:0;s:2:"61";i:1;s:3:"277";i:2;s:3:"525";i:3;s:3:"562";}}i:187;a:4:{s:1:"C";s:3:"187";s:2:"WX";s:3:"600";s:1:"N";s:14:"guillemotright";s:1:"B";a:4:{i:0;s:2:"47";i:1;s:2:"70";i:2;s:3:"592";i:3;s:3:"446";}}s:14:"guillemotright";a:4:{s:1:"C";s:3:"187";s:2:"WX";s:3:"600";s:1:"N";s:14:"guillemotright";s:1:"B";a:4:{i:0;s:2:"47";i:1;s:2:"70";i:2;s:3:"592";i:3;s:3:"446";}}i:188;a:4:{s:1:"C";s:3:"188";s:2:"WX";s:3:"600";s:1:"N";s:8:"ellipsis";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:3:"-15";i:2;s:3:"574";i:3;s:3:"116";}}s:8:"ellipsis";a:4:{s:1:"C";s:3:"188";s:2:"WX";s:3:"600";s:1:"N";s:8:"ellipsis";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:3:"-15";i:2;s:3:"574";i:3;s:3:"116";}}i:189;a:4:{s:1:"C";s:3:"189";s:2:"WX";s:3:"600";s:1:"N";s:11:"perthousand";s:1:"B";a:4:{i:0;s:4:"-113";i:1;s:3:"-15";i:2;s:3:"713";i:3;s:3:"616";}}s:11:"perthousand";a:4:{s:1:"C";s:3:"189";s:2:"WX";s:3:"600";s:1:"N";s:11:"perthousand";s:1:"B";a:4:{i:0;s:4:"-113";i:1;s:3:"-15";i:2;s:3:"713";i:3;s:3:"616";}}i:191;a:4:{s:1:"C";s:3:"191";s:2:"WX";s:3:"600";s:1:"N";s:12:"questiondown";s:1:"B";a:4:{i:0;s:2:"99";i:1;s:4:"-146";i:2;s:3:"502";i:3;s:3:"449";}}s:12:"questiondown";a:4:{s:1:"C";s:3:"191";s:2:"WX";s:3:"600";s:1:"N";s:12:"questiondown";s:1:"B";a:4:{i:0;s:2:"99";i:1;s:4:"-146";i:2;s:3:"502";i:3;s:3:"449";}}i:193;a:4:{s:1:"C";s:3:"193";s:2:"WX";s:3:"600";s:1:"N";s:5:"grave";s:1:"B";a:4:{i:0;s:3:"132";i:1;s:3:"508";i:2;s:3:"395";i:3;s:3:"661";}}s:5:"grave";a:4:{s:1:"C";s:3:"193";s:2:"WX";s:3:"600";s:1:"N";s:5:"grave";s:1:"B";a:4:{i:0;s:3:"132";i:1;s:3:"508";i:2;s:3:"395";i:3;s:3:"661";}}i:194;a:4:{s:1:"C";s:3:"194";s:2:"WX";s:3:"600";s:1:"N";s:5:"acute";s:1:"B";a:4:{i:0;s:3:"205";i:1;s:3:"508";i:2;s:3:"468";i:3;s:3:"661";}}s:5:"acute";a:4:{s:1:"C";s:3:"194";s:2:"WX";s:3:"600";s:1:"N";s:5:"acute";s:1:"B";a:4:{i:0;s:3:"205";i:1;s:3:"508";i:2;s:3:"468";i:3;s:3:"661";}}i:195;a:4:{s:1:"C";s:3:"195";s:2:"WX";s:3:"600";s:1:"N";s:10:"circumflex";s:1:"B";a:4:{i:0;s:3:"103";i:1;s:3:"483";i:2;s:3:"497";i:3;s:3:"657";}}s:10:"circumflex";a:4:{s:1:"C";s:3:"195";s:2:"WX";s:3:"600";s:1:"N";s:10:"circumflex";s:1:"B";a:4:{i:0;s:3:"103";i:1;s:3:"483";i:2;s:3:"497";i:3;s:3:"657";}}i:196;a:4:{s:1:"C";s:3:"196";s:2:"WX";s:3:"600";s:1:"N";s:5:"tilde";s:1:"B";a:4:{i:0;s:2:"89";i:1;s:3:"493";i:2;s:3:"512";i:3;s:3:"636";}}s:5:"tilde";a:4:{s:1:"C";s:3:"196";s:2:"WX";s:3:"600";s:1:"N";s:5:"tilde";s:1:"B";a:4:{i:0;s:2:"89";i:1;s:3:"493";i:2;s:3:"512";i:3;s:3:"636";}}i:197;a:4:{s:1:"C";s:3:"197";s:2:"WX";s:3:"600";s:1:"N";s:6:"macron";s:1:"B";a:4:{i:0;s:2:"88";i:1;s:3:"505";i:2;s:3:"512";i:3;s:3:"585";}}s:6:"macron";a:4:{s:1:"C";s:3:"197";s:2:"WX";s:3:"600";s:1:"N";s:6:"macron";s:1:"B";a:4:{i:0;s:2:"88";i:1;s:3:"505";i:2;s:3:"512";i:3;s:3:"585";}}i:198;a:4:{s:1:"C";s:3:"198";s:2:"WX";s:3:"600";s:1:"N";s:5:"breve";s:1:"B";a:4:{i:0;s:2:"83";i:1;s:3:"468";i:2;s:3:"517";i:3;s:3:"631";}}s:5:"breve";a:4:{s:1:"C";s:3:"198";s:2:"WX";s:3:"600";s:1:"N";s:5:"breve";s:1:"B";a:4:{i:0;s:2:"83";i:1;s:3:"468";i:2;s:3:"517";i:3;s:3:"631";}}i:199;a:4:{s:1:"C";s:3:"199";s:2:"WX";s:3:"600";s:1:"N";s:9:"dotaccent";s:1:"B";a:4:{i:0;s:3:"230";i:1;s:3:"498";i:2;s:3:"370";i:3;s:3:"638";}}s:9:"dotaccent";a:4:{s:1:"C";s:3:"199";s:2:"WX";s:3:"600";s:1:"N";s:9:"dotaccent";s:1:"B";a:4:{i:0;s:3:"230";i:1;s:3:"498";i:2;s:3:"370";i:3;s:3:"638";}}i:200;a:4:{s:1:"C";s:3:"200";s:2:"WX";s:3:"600";s:1:"N";s:8:"dieresis";s:1:"B";a:4:{i:0;s:3:"128";i:1;s:3:"498";i:2;s:3:"472";i:3;s:3:"638";}}s:8:"dieresis";a:4:{s:1:"C";s:3:"200";s:2:"WX";s:3:"600";s:1:"N";s:8:"dieresis";s:1:"B";a:4:{i:0;s:3:"128";i:1;s:3:"498";i:2;s:3:"472";i:3;s:3:"638";}}i:202;a:4:{s:1:"C";s:3:"202";s:2:"WX";s:3:"600";s:1:"N";s:4:"ring";s:1:"B";a:4:{i:0;s:3:"198";i:1;s:3:"481";i:2;s:3:"402";i:3;s:3:"678";}}s:4:"ring";a:4:{s:1:"C";s:3:"202";s:2:"WX";s:3:"600";s:1:"N";s:4:"ring";s:1:"B";a:4:{i:0;s:3:"198";i:1;s:3:"481";i:2;s:3:"402";i:3;s:3:"678";}}i:203;a:4:{s:1:"C";s:3:"203";s:2:"WX";s:3:"600";s:1:"N";s:7:"cedilla";s:1:"B";a:4:{i:0;s:3:"205";i:1;s:4:"-206";i:2;s:3:"387";i:3;s:1:"0";}}s:7:"cedilla";a:4:{s:1:"C";s:3:"203";s:2:"WX";s:3:"600";s:1:"N";s:7:"cedilla";s:1:"B";a:4:{i:0;s:3:"205";i:1;s:4:"-206";i:2;s:3:"387";i:3;s:1:"0";}}i:205;a:4:{s:1:"C";s:3:"205";s:2:"WX";s:3:"600";s:1:"N";s:12:"hungarumlaut";s:1:"B";a:4:{i:0;s:2:"68";i:1;s:3:"488";i:2;s:3:"588";i:3;s:3:"661";}}s:12:"hungarumlaut";a:4:{s:1:"C";s:3:"205";s:2:"WX";s:3:"600";s:1:"N";s:12:"hungarumlaut";s:1:"B";a:4:{i:0;s:2:"68";i:1;s:3:"488";i:2;s:3:"588";i:3;s:3:"661";}}i:206;a:4:{s:1:"C";s:3:"206";s:2:"WX";s:3:"600";s:1:"N";s:6:"ogonek";s:1:"B";a:4:{i:0;s:3:"169";i:1;s:4:"-199";i:2;s:3:"400";i:3;s:1:"0";}}s:6:"ogonek";a:4:{s:1:"C";s:3:"206";s:2:"WX";s:3:"600";s:1:"N";s:6:"ogonek";s:1:"B";a:4:{i:0;s:3:"169";i:1;s:4:"-199";i:2;s:3:"400";i:3;s:1:"0";}}i:207;a:4:{s:1:"C";s:3:"207";s:2:"WX";s:3:"600";s:1:"N";s:5:"caron";s:1:"B";a:4:{i:0;s:3:"103";i:1;s:3:"493";i:2;s:3:"497";i:3;s:3:"667";}}s:5:"caron";a:4:{s:1:"C";s:3:"207";s:2:"WX";s:3:"600";s:1:"N";s:5:"caron";s:1:"B";a:4:{i:0;s:3:"103";i:1;s:3:"493";i:2;s:3:"497";i:3;s:3:"667";}}i:208;a:4:{s:1:"C";s:3:"208";s:2:"WX";s:3:"600";s:1:"N";s:6:"emdash";s:1:"B";a:4:{i:0;s:3:"-10";i:1;s:3:"203";i:2;s:3:"610";i:3;s:3:"313";}}s:6:"emdash";a:4:{s:1:"C";s:3:"208";s:2:"WX";s:3:"600";s:1:"N";s:6:"emdash";s:1:"B";a:4:{i:0;s:3:"-10";i:1;s:3:"203";i:2;s:3:"610";i:3;s:3:"313";}}i:225;a:4:{s:1:"C";s:3:"225";s:2:"WX";s:3:"600";s:1:"N";s:2:"AE";s:1:"B";a:4:{i:0;s:3:"-29";i:1;s:1:"0";i:2;s:3:"602";i:3;s:3:"562";}}s:2:"AE";a:4:{s:1:"C";s:3:"225";s:2:"WX";s:3:"600";s:1:"N";s:2:"AE";s:1:"B";a:4:{i:0;s:3:"-29";i:1;s:1:"0";i:2;s:3:"602";i:3;s:3:"562";}}i:227;a:4:{s:1:"C";s:3:"227";s:2:"WX";s:3:"600";s:1:"N";s:11:"ordfeminine";s:1:"B";a:4:{i:0;s:3:"147";i:1;s:3:"196";i:2;s:3:"453";i:3;s:3:"580";}}s:11:"ordfeminine";a:4:{s:1:"C";s:3:"227";s:2:"WX";s:3:"600";s:1:"N";s:11:"ordfeminine";s:1:"B";a:4:{i:0;s:3:"147";i:1;s:3:"196";i:2;s:3:"453";i:3;s:3:"580";}}i:232;a:4:{s:1:"C";s:3:"232";s:2:"WX";s:3:"600";s:1:"N";s:6:"Lslash";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:1:"0";i:2;s:3:"578";i:3;s:3:"562";}}s:6:"Lslash";a:4:{s:1:"C";s:3:"232";s:2:"WX";s:3:"600";s:1:"N";s:6:"Lslash";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:1:"0";i:2;s:3:"578";i:3;s:3:"562";}}i:233;a:4:{s:1:"C";s:3:"233";s:2:"WX";s:3:"600";s:1:"N";s:6:"Oslash";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:3:"-22";i:2;s:3:"578";i:3;s:3:"584";}}s:6:"Oslash";a:4:{s:1:"C";s:3:"233";s:2:"WX";s:3:"600";s:1:"N";s:6:"Oslash";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:3:"-22";i:2;s:3:"578";i:3;s:3:"584";}}i:234;a:4:{s:1:"C";s:3:"234";s:2:"WX";s:3:"600";s:1:"N";s:2:"OE";s:1:"B";a:4:{i:0;s:3:"-25";i:1;s:1:"0";i:2;s:3:"595";i:3;s:3:"562";}}s:2:"OE";a:4:{s:1:"C";s:3:"234";s:2:"WX";s:3:"600";s:1:"N";s:2:"OE";s:1:"B";a:4:{i:0;s:3:"-25";i:1;s:1:"0";i:2;s:3:"595";i:3;s:3:"562";}}i:235;a:4:{s:1:"C";s:3:"235";s:2:"WX";s:3:"600";s:1:"N";s:12:"ordmasculine";s:1:"B";a:4:{i:0;s:3:"147";i:1;s:3:"196";i:2;s:3:"453";i:3;s:3:"580";}}s:12:"ordmasculine";a:4:{s:1:"C";s:3:"235";s:2:"WX";s:3:"600";s:1:"N";s:12:"ordmasculine";s:1:"B";a:4:{i:0;s:3:"147";i:1;s:3:"196";i:2;s:3:"453";i:3;s:3:"580";}}i:241;a:4:{s:1:"C";s:3:"241";s:2:"WX";s:3:"600";s:1:"N";s:2:"ae";s:1:"B";a:4:{i:0;s:2:"-4";i:1;s:3:"-15";i:2;s:3:"601";i:3;s:3:"454";}}s:2:"ae";a:4:{s:1:"C";s:3:"241";s:2:"WX";s:3:"600";s:1:"N";s:2:"ae";s:1:"B";a:4:{i:0;s:2:"-4";i:1;s:3:"-15";i:2;s:3:"601";i:3;s:3:"454";}}i:245;a:4:{s:1:"C";s:3:"245";s:2:"WX";s:3:"600";s:1:"N";s:8:"dotlessi";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:1:"0";i:2;s:3:"523";i:3;s:3:"439";}}s:8:"dotlessi";a:4:{s:1:"C";s:3:"245";s:2:"WX";s:3:"600";s:1:"N";s:8:"dotlessi";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:1:"0";i:2;s:3:"523";i:3;s:3:"439";}}i:248;a:4:{s:1:"C";s:3:"248";s:2:"WX";s:3:"600";s:1:"N";s:6:"lslash";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:1:"0";i:2;s:3:"523";i:3;s:3:"626";}}s:6:"lslash";a:4:{s:1:"C";s:3:"248";s:2:"WX";s:3:"600";s:1:"N";s:6:"lslash";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:1:"0";i:2;s:3:"523";i:3;s:3:"626";}}i:249;a:4:{s:1:"C";s:3:"249";s:2:"WX";s:3:"600";s:1:"N";s:6:"oslash";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:3:"-24";i:2;s:3:"570";i:3;s:3:"463";}}s:6:"oslash";a:4:{s:1:"C";s:3:"249";s:2:"WX";s:3:"600";s:1:"N";s:6:"oslash";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:3:"-24";i:2;s:3:"570";i:3;s:3:"463";}}i:250;a:4:{s:1:"C";s:3:"250";s:2:"WX";s:3:"600";s:1:"N";s:2:"oe";s:1:"B";a:4:{i:0;s:3:"-18";i:1;s:3:"-15";i:2;s:3:"611";i:3;s:3:"454";}}s:2:"oe";a:4:{s:1:"C";s:3:"250";s:2:"WX";s:3:"600";s:1:"N";s:2:"oe";s:1:"B";a:4:{i:0;s:3:"-18";i:1;s:3:"-15";i:2;s:3:"611";i:3;s:3:"454";}}i:251;a:4:{s:1:"C";s:3:"251";s:2:"WX";s:3:"600";s:1:"N";s:10:"germandbls";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:3:"-15";i:2;s:3:"596";i:3;s:3:"626";}}s:10:"germandbls";a:4:{s:1:"C";s:3:"251";s:2:"WX";s:3:"600";s:1:"N";s:10:"germandbls";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:3:"-15";i:2;s:3:"596";i:3;s:3:"626";}}s:9:"Idieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"Idieresis";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:1:"0";i:2;s:3:"523";i:3;s:3:"761";}}s:6:"eacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"eacute";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:3:"-15";i:2;s:3:"563";i:3;s:3:"661";}}s:6:"abreve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"abreve";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-15";i:2;s:3:"570";i:3;s:3:"661";}}s:13:"uhungarumlaut";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:13:"uhungarumlaut";s:1:"B";a:4:{i:0;s:2:"-1";i:1;s:3:"-15";i:2;s:3:"628";i:3;s:3:"661";}}s:6:"ecaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"ecaron";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:3:"-15";i:2;s:3:"563";i:3;s:3:"667";}}s:9:"Ydieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"Ydieresis";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:1:"0";i:2;s:3:"589";i:3;s:3:"761";}}s:6:"divide";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"divide";s:1:"B";a:4:{i:0;s:2:"71";i:1;s:2:"16";i:2;s:3:"529";i:3;s:3:"500";}}s:6:"Yacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Yacute";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:1:"0";i:2;s:3:"589";i:3;s:3:"784";}}s:11:"Acircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:11:"Acircumflex";s:1:"B";a:4:{i:0;s:2:"-9";i:1;s:1:"0";i:2;s:3:"609";i:3;s:3:"780";}}s:6:"aacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"aacute";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-15";i:2;s:3:"570";i:3;s:3:"661";}}s:11:"Ucircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:11:"Ucircumflex";s:1:"B";a:4:{i:0;s:1:"4";i:1;s:3:"-18";i:2;s:3:"596";i:3;s:3:"780";}}s:6:"yacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"yacute";s:1:"B";a:4:{i:0;s:2:"-4";i:1;s:4:"-142";i:2;s:3:"601";i:3;s:3:"661";}}s:12:"scommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"scommaaccent";s:1:"B";a:4:{i:0;s:2:"68";i:1;s:4:"-250";i:2;s:3:"535";i:3;s:3:"459";}}s:11:"ecircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:11:"ecircumflex";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:3:"-15";i:2;s:3:"563";i:3;s:3:"657";}}s:5:"Uring";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:5:"Uring";s:1:"B";a:4:{i:0;s:1:"4";i:1;s:3:"-18";i:2;s:3:"596";i:3;s:3:"801";}}s:9:"Udieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"Udieresis";s:1:"B";a:4:{i:0;s:1:"4";i:1;s:3:"-18";i:2;s:3:"596";i:3;s:3:"761";}}s:7:"aogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"aogonek";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:4:"-199";i:2;s:3:"586";i:3;s:3:"454";}}s:6:"Uacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Uacute";s:1:"B";a:4:{i:0;s:1:"4";i:1;s:3:"-18";i:2;s:3:"596";i:3;s:3:"784";}}s:7:"uogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"uogonek";s:1:"B";a:4:{i:0;s:2:"-1";i:1;s:4:"-199";i:2;s:3:"585";i:3;s:3:"439";}}s:9:"Edieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"Edieresis";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:1:"0";i:2;s:3:"560";i:3;s:3:"761";}}s:6:"Dcroat";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Dcroat";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:1:"0";i:2;s:3:"594";i:3;s:3:"562";}}s:11:"commaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:11:"commaaccent";s:1:"B";a:4:{i:0;s:3:"205";i:1;s:4:"-250";i:2;s:3:"397";i:3;s:3:"-57";}}s:9:"copyright";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"copyright";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:3:"-18";i:2;s:3:"600";i:3;s:3:"580";}}s:7:"Emacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"Emacron";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:1:"0";i:2;s:3:"560";i:3;s:3:"708";}}s:6:"ccaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"ccaron";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:3:"-15";i:2;s:3:"545";i:3;s:3:"667";}}s:5:"aring";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:5:"aring";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-15";i:2;s:3:"570";i:3;s:3:"678";}}s:12:"Ncommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"Ncommaaccent";s:1:"B";a:4:{i:0;s:1:"8";i:1;s:4:"-250";i:2;s:3:"610";i:3;s:3:"562";}}s:6:"lacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"lacute";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:1:"0";i:2;s:3:"523";i:3;s:3:"801";}}s:6:"agrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"agrave";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-15";i:2;s:3:"570";i:3;s:3:"661";}}s:12:"Tcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"Tcommaaccent";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:4:"-250";i:2;s:3:"579";i:3;s:3:"562";}}s:6:"Cacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Cacute";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:3:"-18";i:2;s:3:"560";i:3;s:3:"784";}}s:6:"atilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"atilde";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-15";i:2;s:3:"570";i:3;s:3:"636";}}s:10:"Edotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:10:"Edotaccent";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:1:"0";i:2;s:3:"560";i:3;s:3:"761";}}s:6:"scaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"scaron";s:1:"B";a:4:{i:0;s:2:"68";i:1;s:3:"-17";i:2;s:3:"535";i:3;s:3:"667";}}s:8:"scedilla";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:8:"scedilla";s:1:"B";a:4:{i:0;s:2:"68";i:1;s:4:"-206";i:2;s:3:"535";i:3;s:3:"459";}}s:6:"iacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"iacute";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:1:"0";i:2;s:3:"523";i:3;s:3:"661";}}s:7:"lozenge";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"lozenge";s:1:"B";a:4:{i:0;s:2:"66";i:1;s:1:"0";i:2;s:3:"534";i:3;s:3:"740";}}s:6:"Rcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Rcaron";s:1:"B";a:4:{i:0;s:2:"24";i:1;s:1:"0";i:2;s:3:"599";i:3;s:3:"790";}}s:12:"Gcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"Gcommaaccent";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:4:"-250";i:2;s:3:"594";i:3;s:3:"580";}}s:11:"ucircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:11:"ucircumflex";s:1:"B";a:4:{i:0;s:2:"-1";i:1;s:3:"-15";i:2;s:3:"569";i:3;s:3:"657";}}s:11:"acircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:11:"acircumflex";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-15";i:2;s:3:"570";i:3;s:3:"657";}}s:7:"Amacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"Amacron";s:1:"B";a:4:{i:0;s:2:"-9";i:1;s:1:"0";i:2;s:3:"609";i:3;s:3:"708";}}s:6:"rcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"rcaron";s:1:"B";a:4:{i:0;s:2:"47";i:1;s:1:"0";i:2;s:3:"580";i:3;s:3:"667";}}s:8:"ccedilla";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:8:"ccedilla";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:4:"-206";i:2;s:3:"545";i:3;s:3:"459";}}s:10:"Zdotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:10:"Zdotaccent";s:1:"B";a:4:{i:0;s:2:"62";i:1;s:1:"0";i:2;s:3:"539";i:3;s:3:"761";}}s:5:"Thorn";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:5:"Thorn";s:1:"B";a:4:{i:0;s:2:"48";i:1;s:1:"0";i:2;s:3:"557";i:3;s:3:"562";}}s:7:"Omacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"Omacron";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:3:"-18";i:2;s:3:"578";i:3;s:3:"708";}}s:6:"Racute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Racute";s:1:"B";a:4:{i:0;s:2:"24";i:1;s:1:"0";i:2;s:3:"599";i:3;s:3:"784";}}s:6:"Sacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Sacute";s:1:"B";a:4:{i:0;s:2:"47";i:1;s:3:"-22";i:2;s:3:"553";i:3;s:3:"784";}}s:6:"dcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"dcaron";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:3:"-15";i:2;s:3:"727";i:3;s:3:"626";}}s:7:"Umacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"Umacron";s:1:"B";a:4:{i:0;s:1:"4";i:1;s:3:"-18";i:2;s:3:"596";i:3;s:3:"708";}}s:5:"uring";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:5:"uring";s:1:"B";a:4:{i:0;s:2:"-1";i:1;s:3:"-15";i:2;s:3:"569";i:3;s:3:"678";}}s:13:"threesuperior";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:13:"threesuperior";s:1:"B";a:4:{i:0;s:3:"138";i:1;s:3:"222";i:2;s:3:"433";i:3;s:3:"616";}}s:6:"Ograve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Ograve";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:3:"-18";i:2;s:3:"578";i:3;s:3:"784";}}s:6:"Agrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Agrave";s:1:"B";a:4:{i:0;s:2:"-9";i:1;s:1:"0";i:2;s:3:"609";i:3;s:3:"784";}}s:6:"Abreve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Abreve";s:1:"B";a:4:{i:0;s:2:"-9";i:1;s:1:"0";i:2;s:3:"609";i:3;s:3:"784";}}s:8:"multiply";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:8:"multiply";s:1:"B";a:4:{i:0;s:2:"81";i:1;s:2:"39";i:2;s:3:"520";i:3;s:3:"478";}}s:6:"uacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"uacute";s:1:"B";a:4:{i:0;s:2:"-1";i:1;s:3:"-15";i:2;s:3:"569";i:3;s:3:"661";}}s:6:"Tcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Tcaron";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:1:"0";i:2;s:3:"579";i:3;s:3:"790";}}s:11:"partialdiff";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:11:"partialdiff";s:1:"B";a:4:{i:0;s:2:"63";i:1;s:3:"-38";i:2;s:3:"537";i:3;s:3:"728";}}s:9:"ydieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"ydieresis";s:1:"B";a:4:{i:0;s:2:"-4";i:1;s:4:"-142";i:2;s:3:"601";i:3;s:3:"638";}}s:6:"Nacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Nacute";s:1:"B";a:4:{i:0;s:1:"8";i:1;s:3:"-12";i:2;s:3:"610";i:3;s:3:"784";}}s:11:"icircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:11:"icircumflex";s:1:"B";a:4:{i:0;s:2:"73";i:1;s:1:"0";i:2;s:3:"523";i:3;s:3:"657";}}s:11:"Ecircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:11:"Ecircumflex";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:1:"0";i:2;s:3:"560";i:3;s:3:"780";}}s:9:"adieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"adieresis";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-15";i:2;s:3:"570";i:3;s:3:"638";}}s:9:"edieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"edieresis";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:3:"-15";i:2;s:3:"563";i:3;s:3:"638";}}s:6:"cacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"cacute";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:3:"-15";i:2;s:3:"545";i:3;s:3:"661";}}s:6:"nacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"nacute";s:1:"B";a:4:{i:0;s:2:"18";i:1;s:1:"0";i:2;s:3:"592";i:3;s:3:"661";}}s:7:"umacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"umacron";s:1:"B";a:4:{i:0;s:2:"-1";i:1;s:3:"-15";i:2;s:3:"569";i:3;s:3:"585";}}s:6:"Ncaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Ncaron";s:1:"B";a:4:{i:0;s:1:"8";i:1;s:3:"-12";i:2;s:3:"610";i:3;s:3:"790";}}s:6:"Iacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Iacute";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:1:"0";i:2;s:3:"523";i:3;s:3:"784";}}s:9:"plusminus";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"plusminus";s:1:"B";a:4:{i:0;s:2:"71";i:1;s:2:"24";i:2;s:3:"529";i:3;s:3:"515";}}s:9:"brokenbar";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"brokenbar";s:1:"B";a:4:{i:0;s:3:"255";i:1;s:4:"-175";i:2;s:3:"345";i:3;s:3:"675";}}s:10:"registered";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:10:"registered";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:3:"-18";i:2;s:3:"600";i:3;s:3:"580";}}s:6:"Gbreve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Gbreve";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:3:"-18";i:2;s:3:"594";i:3;s:3:"784";}}s:10:"Idotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:10:"Idotaccent";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:1:"0";i:2;s:3:"523";i:3;s:3:"761";}}s:9:"summation";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"summation";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:3:"-10";i:2;s:3:"586";i:3;s:3:"706";}}s:6:"Egrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Egrave";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:1:"0";i:2;s:3:"560";i:3;s:3:"784";}}s:6:"racute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"racute";s:1:"B";a:4:{i:0;s:2:"47";i:1;s:1:"0";i:2;s:3:"580";i:3;s:3:"661";}}s:7:"omacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"omacron";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:3:"-15";i:2;s:3:"570";i:3;s:3:"585";}}s:6:"Zacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Zacute";s:1:"B";a:4:{i:0;s:2:"62";i:1;s:1:"0";i:2;s:3:"539";i:3;s:3:"784";}}s:6:"Zcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Zcaron";s:1:"B";a:4:{i:0;s:2:"62";i:1;s:1:"0";i:2;s:3:"539";i:3;s:3:"790";}}s:12:"greaterequal";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"greaterequal";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:1:"0";i:2;s:3:"523";i:3;s:3:"696";}}s:3:"Eth";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:3:"Eth";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:1:"0";i:2;s:3:"594";i:3;s:3:"562";}}s:8:"Ccedilla";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:8:"Ccedilla";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:4:"-206";i:2;s:3:"560";i:3;s:3:"580";}}s:12:"lcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"lcommaaccent";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:4:"-250";i:2;s:3:"523";i:3;s:3:"626";}}s:6:"tcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"tcaron";s:1:"B";a:4:{i:0;s:2:"47";i:1;s:3:"-15";i:2;s:3:"532";i:3;s:3:"703";}}s:7:"eogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"eogonek";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:4:"-199";i:2;s:3:"563";i:3;s:3:"454";}}s:7:"Uogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"Uogonek";s:1:"B";a:4:{i:0;s:1:"4";i:1;s:4:"-199";i:2;s:3:"596";i:3;s:3:"562";}}s:6:"Aacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Aacute";s:1:"B";a:4:{i:0;s:2:"-9";i:1;s:1:"0";i:2;s:3:"609";i:3;s:3:"784";}}s:9:"Adieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"Adieresis";s:1:"B";a:4:{i:0;s:2:"-9";i:1;s:1:"0";i:2;s:3:"609";i:3;s:3:"761";}}s:6:"egrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"egrave";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:3:"-15";i:2;s:3:"563";i:3;s:3:"661";}}s:6:"zacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"zacute";s:1:"B";a:4:{i:0;s:2:"81";i:1;s:1:"0";i:2;s:3:"520";i:3;s:3:"661";}}s:7:"iogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"iogonek";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:4:"-199";i:2;s:3:"523";i:3;s:3:"658";}}s:6:"Oacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Oacute";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:3:"-18";i:2;s:3:"578";i:3;s:3:"784";}}s:6:"oacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"oacute";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:3:"-15";i:2;s:3:"570";i:3;s:3:"661";}}s:7:"amacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"amacron";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-15";i:2;s:3:"570";i:3;s:3:"585";}}s:6:"sacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"sacute";s:1:"B";a:4:{i:0;s:2:"68";i:1;s:3:"-17";i:2;s:3:"535";i:3;s:3:"661";}}s:9:"idieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"idieresis";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:1:"0";i:2;s:3:"523";i:3;s:3:"618";}}s:11:"Ocircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:11:"Ocircumflex";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:3:"-18";i:2;s:3:"578";i:3;s:3:"780";}}s:6:"Ugrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Ugrave";s:1:"B";a:4:{i:0;s:1:"4";i:1;s:3:"-18";i:2;s:3:"596";i:3;s:3:"784";}}s:5:"Delta";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:5:"Delta";s:1:"B";a:4:{i:0;s:1:"6";i:1;s:1:"0";i:2;s:3:"594";i:3;s:3:"688";}}s:5:"thorn";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:5:"thorn";s:1:"B";a:4:{i:0;s:3:"-14";i:1;s:4:"-142";i:2;s:3:"570";i:3;s:3:"626";}}s:11:"twosuperior";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:11:"twosuperior";s:1:"B";a:4:{i:0;s:3:"143";i:1;s:3:"230";i:2;s:3:"436";i:3;s:3:"616";}}s:9:"Odieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"Odieresis";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:3:"-18";i:2;s:3:"578";i:3;s:3:"761";}}s:2:"mu";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:2:"mu";s:1:"B";a:4:{i:0;s:2:"-1";i:1;s:4:"-142";i:2;s:3:"569";i:3;s:3:"439";}}s:6:"igrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"igrave";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:1:"0";i:2;s:3:"523";i:3;s:3:"661";}}s:13:"ohungarumlaut";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:13:"ohungarumlaut";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:3:"-15";i:2;s:3:"668";i:3;s:3:"661";}}s:7:"Eogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"Eogonek";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:4:"-199";i:2;s:3:"576";i:3;s:3:"562";}}s:6:"dcroat";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"dcroat";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:3:"-15";i:2;s:3:"591";i:3;s:3:"626";}}s:13:"threequarters";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:13:"threequarters";s:1:"B";a:4:{i:0;s:3:"-47";i:1;s:3:"-60";i:2;s:3:"648";i:3;s:3:"661";}}s:8:"Scedilla";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:8:"Scedilla";s:1:"B";a:4:{i:0;s:2:"47";i:1;s:4:"-206";i:2;s:3:"553";i:3;s:3:"582";}}s:6:"lcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"lcaron";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:1:"0";i:2;s:3:"597";i:3;s:3:"626";}}s:12:"Kcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"Kcommaaccent";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:4:"-250";i:2;s:3:"599";i:3;s:3:"562";}}s:6:"Lacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Lacute";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:1:"0";i:2;s:3:"578";i:3;s:3:"784";}}s:9:"trademark";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"trademark";s:1:"B";a:4:{i:0;s:2:"-9";i:1;s:3:"230";i:2;s:3:"749";i:3;s:3:"562";}}s:10:"edotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:10:"edotaccent";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:3:"-15";i:2;s:3:"563";i:3;s:3:"638";}}s:6:"Igrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Igrave";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:1:"0";i:2;s:3:"523";i:3;s:3:"784";}}s:7:"Imacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"Imacron";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:1:"0";i:2;s:3:"523";i:3;s:3:"708";}}s:6:"Lcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Lcaron";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:1:"0";i:2;s:3:"637";i:3;s:3:"562";}}s:7:"onehalf";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"onehalf";s:1:"B";a:4:{i:0;s:3:"-47";i:1;s:3:"-60";i:2;s:3:"648";i:3;s:3:"661";}}s:9:"lessequal";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"lessequal";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:1:"0";i:2;s:3:"523";i:3;s:3:"696";}}s:11:"ocircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:11:"ocircumflex";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:3:"-15";i:2;s:3:"570";i:3;s:3:"657";}}s:6:"ntilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"ntilde";s:1:"B";a:4:{i:0;s:2:"18";i:1;s:1:"0";i:2;s:3:"592";i:3;s:3:"636";}}s:13:"Uhungarumlaut";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:13:"Uhungarumlaut";s:1:"B";a:4:{i:0;s:1:"4";i:1;s:3:"-18";i:2;s:3:"638";i:3;s:3:"784";}}s:6:"Eacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Eacute";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:1:"0";i:2;s:3:"560";i:3;s:3:"784";}}s:7:"emacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"emacron";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:3:"-15";i:2;s:3:"563";i:3;s:3:"585";}}s:6:"gbreve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"gbreve";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:4:"-146";i:2;s:3:"580";i:3;s:3:"661";}}s:10:"onequarter";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:10:"onequarter";s:1:"B";a:4:{i:0;s:3:"-56";i:1;s:3:"-60";i:2;s:3:"656";i:3;s:3:"661";}}s:6:"Scaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Scaron";s:1:"B";a:4:{i:0;s:2:"47";i:1;s:3:"-22";i:2;s:3:"553";i:3;s:3:"790";}}s:12:"Scommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"Scommaaccent";s:1:"B";a:4:{i:0;s:2:"47";i:1;s:4:"-250";i:2;s:3:"553";i:3;s:3:"582";}}s:13:"Ohungarumlaut";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:13:"Ohungarumlaut";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:3:"-18";i:2;s:3:"628";i:3;s:3:"784";}}s:6:"degree";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"degree";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:3:"243";i:2;s:3:"474";i:3;s:3:"616";}}s:6:"ograve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"ograve";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:3:"-15";i:2;s:3:"570";i:3;s:3:"661";}}s:6:"Ccaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Ccaron";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:3:"-18";i:2;s:3:"560";i:3;s:3:"790";}}s:6:"ugrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"ugrave";s:1:"B";a:4:{i:0;s:2:"-1";i:1;s:3:"-15";i:2;s:3:"569";i:3;s:3:"661";}}s:7:"radical";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"radical";s:1:"B";a:4:{i:0;s:3:"-19";i:1;s:4:"-104";i:2;s:3:"473";i:3;s:3:"778";}}s:6:"Dcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Dcaron";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:1:"0";i:2;s:3:"594";i:3;s:3:"790";}}s:12:"rcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"rcommaaccent";s:1:"B";a:4:{i:0;s:2:"47";i:1;s:4:"-250";i:2;s:3:"580";i:3;s:3:"454";}}s:6:"Ntilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Ntilde";s:1:"B";a:4:{i:0;s:1:"8";i:1;s:3:"-12";i:2;s:3:"610";i:3;s:3:"759";}}s:6:"otilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"otilde";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:3:"-15";i:2;s:3:"570";i:3;s:3:"636";}}s:12:"Rcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"Rcommaaccent";s:1:"B";a:4:{i:0;s:2:"24";i:1;s:4:"-250";i:2;s:3:"599";i:3;s:3:"562";}}s:12:"Lcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"Lcommaaccent";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:4:"-250";i:2;s:3:"578";i:3;s:3:"562";}}s:6:"Atilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Atilde";s:1:"B";a:4:{i:0;s:2:"-9";i:1;s:1:"0";i:2;s:3:"609";i:3;s:3:"759";}}s:7:"Aogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"Aogonek";s:1:"B";a:4:{i:0;s:2:"-9";i:1;s:4:"-199";i:2;s:3:"625";i:3;s:3:"562";}}s:5:"Aring";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:5:"Aring";s:1:"B";a:4:{i:0;s:2:"-9";i:1;s:1:"0";i:2;s:3:"609";i:3;s:3:"801";}}s:6:"Otilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Otilde";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:3:"-18";i:2;s:3:"578";i:3;s:3:"759";}}s:10:"zdotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:10:"zdotaccent";s:1:"B";a:4:{i:0;s:2:"81";i:1;s:1:"0";i:2;s:3:"520";i:3;s:3:"638";}}s:6:"Ecaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Ecaron";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:1:"0";i:2;s:3:"560";i:3;s:3:"790";}}s:7:"Iogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"Iogonek";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:4:"-199";i:2;s:3:"523";i:3;s:3:"562";}}s:12:"kcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"kcommaaccent";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:4:"-250";i:2;s:3:"585";i:3;s:3:"626";}}s:5:"minus";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:5:"minus";s:1:"B";a:4:{i:0;s:2:"71";i:1;s:3:"203";i:2;s:3:"529";i:3;s:3:"313";}}s:11:"Icircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:11:"Icircumflex";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:1:"0";i:2;s:3:"523";i:3;s:3:"780";}}s:6:"ncaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"ncaron";s:1:"B";a:4:{i:0;s:2:"18";i:1;s:1:"0";i:2;s:3:"592";i:3;s:3:"667";}}s:12:"tcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"tcommaaccent";s:1:"B";a:4:{i:0;s:2:"47";i:1;s:4:"-250";i:2;s:3:"532";i:3;s:3:"562";}}s:10:"logicalnot";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:10:"logicalnot";s:1:"B";a:4:{i:0;s:2:"71";i:1;s:3:"103";i:2;s:3:"529";i:3;s:3:"413";}}s:9:"odieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"odieresis";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:3:"-15";i:2;s:3:"570";i:3;s:3:"638";}}s:9:"udieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"udieresis";s:1:"B";a:4:{i:0;s:2:"-1";i:1;s:3:"-15";i:2;s:3:"569";i:3;s:3:"638";}}s:8:"notequal";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:8:"notequal";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:3:"-47";i:2;s:3:"537";i:3;s:3:"563";}}s:12:"gcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"gcommaaccent";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:4:"-146";i:2;s:3:"580";i:3;s:3:"714";}}s:3:"eth";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:3:"eth";s:1:"B";a:4:{i:0;s:2:"58";i:1;s:3:"-27";i:2;s:3:"543";i:3;s:3:"626";}}s:6:"zcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"zcaron";s:1:"B";a:4:{i:0;s:2:"81";i:1;s:1:"0";i:2;s:3:"520";i:3;s:3:"667";}}s:12:"ncommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"ncommaaccent";s:1:"B";a:4:{i:0;s:2:"18";i:1;s:4:"-250";i:2;s:3:"592";i:3;s:3:"454";}}s:11:"onesuperior";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:11:"onesuperior";s:1:"B";a:4:{i:0;s:3:"153";i:1;s:3:"230";i:2;s:3:"447";i:3;s:3:"616";}}s:7:"imacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"imacron";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:1:"0";i:2;s:3:"523";i:3;s:3:"585";}}s:4:"Euro";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:4:"Euro";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:1:"0";i:2;s:1:"0";i:3;s:1:"0";}}}s:9:"_version_";i:1;}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/php_Courier-BoldOblique.afm b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/php_Courier-BoldOblique.afm new file mode 100755 index 00000000..b5875073 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/php_Courier-BoldOblique.afm @@ -0,0 +1 @@ +a:21:{s:8:"FontName";s:19:"Courier-BoldOblique";s:8:"FullName";s:20:"Courier Bold Oblique";s:10:"FamilyName";s:7:"Courier";s:6:"Weight";s:4:"Bold";s:11:"ItalicAngle";s:3:"-12";s:12:"IsFixedPitch";s:4:"true";s:12:"CharacterSet";s:13:"ExtendedRoman";s:8:"FontBBox";a:4:{i:0;s:3:"-57";i:1;s:4:"-250";i:2;s:3:"869";i:3;s:3:"801";}s:17:"UnderlinePosition";s:4:"-100";s:18:"UnderlineThickness";s:2:"50";s:7:"Version";s:7:"003.000";s:14:"EncodingScheme";s:21:"AdobeStandardEncoding";s:9:"CapHeight";s:3:"562";s:7:"XHeight";s:3:"439";s:8:"Ascender";s:3:"629";s:9:"Descender";s:4:"-157";s:5:"StdHW";s:2:"84";s:5:"StdVW";s:3:"106";s:16:"StartCharMetrics";s:3:"315";s:1:"C";a:464:{i:32;a:4:{s:1:"C";s:2:"32";s:2:"WX";s:3:"600";s:1:"N";s:5:"space";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:1:"0";i:2;s:1:"0";i:3;s:1:"0";}}s:5:"space";a:4:{s:1:"C";s:2:"32";s:2:"WX";s:3:"600";s:1:"N";s:5:"space";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:1:"0";i:2;s:1:"0";i:3;s:1:"0";}}i:33;a:4:{s:1:"C";s:2:"33";s:2:"WX";s:3:"600";s:1:"N";s:6:"exclam";s:1:"B";a:4:{i:0;s:3:"215";i:1;s:3:"-15";i:2;s:3:"495";i:3;s:3:"572";}}s:6:"exclam";a:4:{s:1:"C";s:2:"33";s:2:"WX";s:3:"600";s:1:"N";s:6:"exclam";s:1:"B";a:4:{i:0;s:3:"215";i:1;s:3:"-15";i:2;s:3:"495";i:3;s:3:"572";}}i:34;a:4:{s:1:"C";s:2:"34";s:2:"WX";s:3:"600";s:1:"N";s:8:"quotedbl";s:1:"B";a:4:{i:0;s:3:"211";i:1;s:3:"277";i:2;s:3:"585";i:3;s:3:"562";}}s:8:"quotedbl";a:4:{s:1:"C";s:2:"34";s:2:"WX";s:3:"600";s:1:"N";s:8:"quotedbl";s:1:"B";a:4:{i:0;s:3:"211";i:1;s:3:"277";i:2;s:3:"585";i:3;s:3:"562";}}i:35;a:4:{s:1:"C";s:2:"35";s:2:"WX";s:3:"600";s:1:"N";s:10:"numbersign";s:1:"B";a:4:{i:0;s:2:"88";i:1;s:3:"-45";i:2;s:3:"641";i:3;s:3:"651";}}s:10:"numbersign";a:4:{s:1:"C";s:2:"35";s:2:"WX";s:3:"600";s:1:"N";s:10:"numbersign";s:1:"B";a:4:{i:0;s:2:"88";i:1;s:3:"-45";i:2;s:3:"641";i:3;s:3:"651";}}i:36;a:4:{s:1:"C";s:2:"36";s:2:"WX";s:3:"600";s:1:"N";s:6:"dollar";s:1:"B";a:4:{i:0;s:2:"87";i:1;s:4:"-126";i:2;s:3:"630";i:3;s:3:"666";}}s:6:"dollar";a:4:{s:1:"C";s:2:"36";s:2:"WX";s:3:"600";s:1:"N";s:6:"dollar";s:1:"B";a:4:{i:0;s:2:"87";i:1;s:4:"-126";i:2;s:3:"630";i:3;s:3:"666";}}i:37;a:4:{s:1:"C";s:2:"37";s:2:"WX";s:3:"600";s:1:"N";s:7:"percent";s:1:"B";a:4:{i:0;s:3:"101";i:1;s:3:"-15";i:2;s:3:"625";i:3;s:3:"616";}}s:7:"percent";a:4:{s:1:"C";s:2:"37";s:2:"WX";s:3:"600";s:1:"N";s:7:"percent";s:1:"B";a:4:{i:0;s:3:"101";i:1;s:3:"-15";i:2;s:3:"625";i:3;s:3:"616";}}i:38;a:4:{s:1:"C";s:2:"38";s:2:"WX";s:3:"600";s:1:"N";s:9:"ampersand";s:1:"B";a:4:{i:0;s:2:"61";i:1;s:3:"-15";i:2;s:3:"595";i:3;s:3:"543";}}s:9:"ampersand";a:4:{s:1:"C";s:2:"38";s:2:"WX";s:3:"600";s:1:"N";s:9:"ampersand";s:1:"B";a:4:{i:0;s:2:"61";i:1;s:3:"-15";i:2;s:3:"595";i:3;s:3:"543";}}i:39;a:4:{s:1:"C";s:2:"39";s:2:"WX";s:3:"600";s:1:"N";s:10:"quoteright";s:1:"B";a:4:{i:0;s:3:"229";i:1;s:3:"277";i:2;s:3:"543";i:3;s:3:"562";}}s:10:"quoteright";a:4:{s:1:"C";s:2:"39";s:2:"WX";s:3:"600";s:1:"N";s:10:"quoteright";s:1:"B";a:4:{i:0;s:3:"229";i:1;s:3:"277";i:2;s:3:"543";i:3;s:3:"562";}}i:40;a:4:{s:1:"C";s:2:"40";s:2:"WX";s:3:"600";s:1:"N";s:9:"parenleft";s:1:"B";a:4:{i:0;s:3:"265";i:1;s:4:"-102";i:2;s:3:"592";i:3;s:3:"616";}}s:9:"parenleft";a:4:{s:1:"C";s:2:"40";s:2:"WX";s:3:"600";s:1:"N";s:9:"parenleft";s:1:"B";a:4:{i:0;s:3:"265";i:1;s:4:"-102";i:2;s:3:"592";i:3;s:3:"616";}}i:41;a:4:{s:1:"C";s:2:"41";s:2:"WX";s:3:"600";s:1:"N";s:10:"parenright";s:1:"B";a:4:{i:0;s:3:"117";i:1;s:4:"-102";i:2;s:3:"444";i:3;s:3:"616";}}s:10:"parenright";a:4:{s:1:"C";s:2:"41";s:2:"WX";s:3:"600";s:1:"N";s:10:"parenright";s:1:"B";a:4:{i:0;s:3:"117";i:1;s:4:"-102";i:2;s:3:"444";i:3;s:3:"616";}}i:42;a:4:{s:1:"C";s:2:"42";s:2:"WX";s:3:"600";s:1:"N";s:8:"asterisk";s:1:"B";a:4:{i:0;s:3:"179";i:1;s:3:"219";i:2;s:3:"598";i:3;s:3:"601";}}s:8:"asterisk";a:4:{s:1:"C";s:2:"42";s:2:"WX";s:3:"600";s:1:"N";s:8:"asterisk";s:1:"B";a:4:{i:0;s:3:"179";i:1;s:3:"219";i:2;s:3:"598";i:3;s:3:"601";}}i:43;a:4:{s:1:"C";s:2:"43";s:2:"WX";s:3:"600";s:1:"N";s:4:"plus";s:1:"B";a:4:{i:0;s:3:"114";i:1;s:2:"39";i:2;s:3:"596";i:3;s:3:"478";}}s:4:"plus";a:4:{s:1:"C";s:2:"43";s:2:"WX";s:3:"600";s:1:"N";s:4:"plus";s:1:"B";a:4:{i:0;s:3:"114";i:1;s:2:"39";i:2;s:3:"596";i:3;s:3:"478";}}i:44;a:4:{s:1:"C";s:2:"44";s:2:"WX";s:3:"600";s:1:"N";s:5:"comma";s:1:"B";a:4:{i:0;s:2:"99";i:1;s:4:"-111";i:2;s:3:"430";i:3;s:3:"174";}}s:5:"comma";a:4:{s:1:"C";s:2:"44";s:2:"WX";s:3:"600";s:1:"N";s:5:"comma";s:1:"B";a:4:{i:0;s:2:"99";i:1;s:4:"-111";i:2;s:3:"430";i:3;s:3:"174";}}i:45;a:4:{s:1:"C";s:2:"45";s:2:"WX";s:3:"600";s:1:"N";s:6:"hyphen";s:1:"B";a:4:{i:0;s:3:"143";i:1;s:3:"203";i:2;s:3:"567";i:3;s:3:"313";}}s:6:"hyphen";a:4:{s:1:"C";s:2:"45";s:2:"WX";s:3:"600";s:1:"N";s:6:"hyphen";s:1:"B";a:4:{i:0;s:3:"143";i:1;s:3:"203";i:2;s:3:"567";i:3;s:3:"313";}}i:46;a:4:{s:1:"C";s:2:"46";s:2:"WX";s:3:"600";s:1:"N";s:6:"period";s:1:"B";a:4:{i:0;s:3:"206";i:1;s:3:"-15";i:2;s:3:"427";i:3;s:3:"171";}}s:6:"period";a:4:{s:1:"C";s:2:"46";s:2:"WX";s:3:"600";s:1:"N";s:6:"period";s:1:"B";a:4:{i:0;s:3:"206";i:1;s:3:"-15";i:2;s:3:"427";i:3;s:3:"171";}}i:47;a:4:{s:1:"C";s:2:"47";s:2:"WX";s:3:"600";s:1:"N";s:5:"slash";s:1:"B";a:4:{i:0;s:2:"90";i:1;s:3:"-77";i:2;s:3:"626";i:3;s:3:"626";}}s:5:"slash";a:4:{s:1:"C";s:2:"47";s:2:"WX";s:3:"600";s:1:"N";s:5:"slash";s:1:"B";a:4:{i:0;s:2:"90";i:1;s:3:"-77";i:2;s:3:"626";i:3;s:3:"626";}}i:48;a:4:{s:1:"C";s:2:"48";s:2:"WX";s:3:"600";s:1:"N";s:4:"zero";s:1:"B";a:4:{i:0;s:3:"135";i:1;s:3:"-15";i:2;s:3:"593";i:3;s:3:"616";}}s:4:"zero";a:4:{s:1:"C";s:2:"48";s:2:"WX";s:3:"600";s:1:"N";s:4:"zero";s:1:"B";a:4:{i:0;s:3:"135";i:1;s:3:"-15";i:2;s:3:"593";i:3;s:3:"616";}}i:49;a:4:{s:1:"C";s:2:"49";s:2:"WX";s:3:"600";s:1:"N";s:3:"one";s:1:"B";a:4:{i:0;s:2:"93";i:1;s:1:"0";i:2;s:3:"562";i:3;s:3:"616";}}s:3:"one";a:4:{s:1:"C";s:2:"49";s:2:"WX";s:3:"600";s:1:"N";s:3:"one";s:1:"B";a:4:{i:0;s:2:"93";i:1;s:1:"0";i:2;s:3:"562";i:3;s:3:"616";}}i:50;a:4:{s:1:"C";s:2:"50";s:2:"WX";s:3:"600";s:1:"N";s:3:"two";s:1:"B";a:4:{i:0;s:2:"61";i:1;s:1:"0";i:2;s:3:"594";i:3;s:3:"616";}}s:3:"two";a:4:{s:1:"C";s:2:"50";s:2:"WX";s:3:"600";s:1:"N";s:3:"two";s:1:"B";a:4:{i:0;s:2:"61";i:1;s:1:"0";i:2;s:3:"594";i:3;s:3:"616";}}i:51;a:4:{s:1:"C";s:2:"51";s:2:"WX";s:3:"600";s:1:"N";s:5:"three";s:1:"B";a:4:{i:0;s:2:"71";i:1;s:3:"-15";i:2;s:3:"571";i:3;s:3:"616";}}s:5:"three";a:4:{s:1:"C";s:2:"51";s:2:"WX";s:3:"600";s:1:"N";s:5:"three";s:1:"B";a:4:{i:0;s:2:"71";i:1;s:3:"-15";i:2;s:3:"571";i:3;s:3:"616";}}i:52;a:4:{s:1:"C";s:2:"52";s:2:"WX";s:3:"600";s:1:"N";s:4:"four";s:1:"B";a:4:{i:0;s:2:"81";i:1;s:1:"0";i:2;s:3:"559";i:3;s:3:"616";}}s:4:"four";a:4:{s:1:"C";s:2:"52";s:2:"WX";s:3:"600";s:1:"N";s:4:"four";s:1:"B";a:4:{i:0;s:2:"81";i:1;s:1:"0";i:2;s:3:"559";i:3;s:3:"616";}}i:53;a:4:{s:1:"C";s:2:"53";s:2:"WX";s:3:"600";s:1:"N";s:4:"five";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:3:"-15";i:2;s:3:"621";i:3;s:3:"601";}}s:4:"five";a:4:{s:1:"C";s:2:"53";s:2:"WX";s:3:"600";s:1:"N";s:4:"five";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:3:"-15";i:2;s:3:"621";i:3;s:3:"601";}}i:54;a:4:{s:1:"C";s:2:"54";s:2:"WX";s:3:"600";s:1:"N";s:3:"six";s:1:"B";a:4:{i:0;s:3:"135";i:1;s:3:"-15";i:2;s:3:"652";i:3;s:3:"616";}}s:3:"six";a:4:{s:1:"C";s:2:"54";s:2:"WX";s:3:"600";s:1:"N";s:3:"six";s:1:"B";a:4:{i:0;s:3:"135";i:1;s:3:"-15";i:2;s:3:"652";i:3;s:3:"616";}}i:55;a:4:{s:1:"C";s:2:"55";s:2:"WX";s:3:"600";s:1:"N";s:5:"seven";s:1:"B";a:4:{i:0;s:3:"147";i:1;s:1:"0";i:2;s:3:"622";i:3;s:3:"601";}}s:5:"seven";a:4:{s:1:"C";s:2:"55";s:2:"WX";s:3:"600";s:1:"N";s:5:"seven";s:1:"B";a:4:{i:0;s:3:"147";i:1;s:1:"0";i:2;s:3:"622";i:3;s:3:"601";}}i:56;a:4:{s:1:"C";s:2:"56";s:2:"WX";s:3:"600";s:1:"N";s:5:"eight";s:1:"B";a:4:{i:0;s:3:"115";i:1;s:3:"-15";i:2;s:3:"604";i:3;s:3:"616";}}s:5:"eight";a:4:{s:1:"C";s:2:"56";s:2:"WX";s:3:"600";s:1:"N";s:5:"eight";s:1:"B";a:4:{i:0;s:3:"115";i:1;s:3:"-15";i:2;s:3:"604";i:3;s:3:"616";}}i:57;a:4:{s:1:"C";s:2:"57";s:2:"WX";s:3:"600";s:1:"N";s:4:"nine";s:1:"B";a:4:{i:0;s:2:"75";i:1;s:3:"-15";i:2;s:3:"592";i:3;s:3:"616";}}s:4:"nine";a:4:{s:1:"C";s:2:"57";s:2:"WX";s:3:"600";s:1:"N";s:4:"nine";s:1:"B";a:4:{i:0;s:2:"75";i:1;s:3:"-15";i:2;s:3:"592";i:3;s:3:"616";}}i:58;a:4:{s:1:"C";s:2:"58";s:2:"WX";s:3:"600";s:1:"N";s:5:"colon";s:1:"B";a:4:{i:0;s:3:"205";i:1;s:3:"-15";i:2;s:3:"480";i:3;s:3:"425";}}s:5:"colon";a:4:{s:1:"C";s:2:"58";s:2:"WX";s:3:"600";s:1:"N";s:5:"colon";s:1:"B";a:4:{i:0;s:3:"205";i:1;s:3:"-15";i:2;s:3:"480";i:3;s:3:"425";}}i:59;a:4:{s:1:"C";s:2:"59";s:2:"WX";s:3:"600";s:1:"N";s:9:"semicolon";s:1:"B";a:4:{i:0;s:2:"99";i:1;s:4:"-111";i:2;s:3:"481";i:3;s:3:"425";}}s:9:"semicolon";a:4:{s:1:"C";s:2:"59";s:2:"WX";s:3:"600";s:1:"N";s:9:"semicolon";s:1:"B";a:4:{i:0;s:2:"99";i:1;s:4:"-111";i:2;s:3:"481";i:3;s:3:"425";}}i:60;a:4:{s:1:"C";s:2:"60";s:2:"WX";s:3:"600";s:1:"N";s:4:"less";s:1:"B";a:4:{i:0;s:3:"120";i:1;s:2:"15";i:2;s:3:"613";i:3;s:3:"501";}}s:4:"less";a:4:{s:1:"C";s:2:"60";s:2:"WX";s:3:"600";s:1:"N";s:4:"less";s:1:"B";a:4:{i:0;s:3:"120";i:1;s:2:"15";i:2;s:3:"613";i:3;s:3:"501";}}i:61;a:4:{s:1:"C";s:2:"61";s:2:"WX";s:3:"600";s:1:"N";s:5:"equal";s:1:"B";a:4:{i:0;s:2:"96";i:1;s:3:"118";i:2;s:3:"614";i:3;s:3:"398";}}s:5:"equal";a:4:{s:1:"C";s:2:"61";s:2:"WX";s:3:"600";s:1:"N";s:5:"equal";s:1:"B";a:4:{i:0;s:2:"96";i:1;s:3:"118";i:2;s:3:"614";i:3;s:3:"398";}}i:62;a:4:{s:1:"C";s:2:"62";s:2:"WX";s:3:"600";s:1:"N";s:7:"greater";s:1:"B";a:4:{i:0;s:2:"97";i:1;s:2:"15";i:2;s:3:"589";i:3;s:3:"501";}}s:7:"greater";a:4:{s:1:"C";s:2:"62";s:2:"WX";s:3:"600";s:1:"N";s:7:"greater";s:1:"B";a:4:{i:0;s:2:"97";i:1;s:2:"15";i:2;s:3:"589";i:3;s:3:"501";}}i:63;a:4:{s:1:"C";s:2:"63";s:2:"WX";s:3:"600";s:1:"N";s:8:"question";s:1:"B";a:4:{i:0;s:3:"183";i:1;s:3:"-14";i:2;s:3:"592";i:3;s:3:"580";}}s:8:"question";a:4:{s:1:"C";s:2:"63";s:2:"WX";s:3:"600";s:1:"N";s:8:"question";s:1:"B";a:4:{i:0;s:3:"183";i:1;s:3:"-14";i:2;s:3:"592";i:3;s:3:"580";}}i:64;a:4:{s:1:"C";s:2:"64";s:2:"WX";s:3:"600";s:1:"N";s:2:"at";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:3:"-15";i:2;s:3:"642";i:3;s:3:"616";}}s:2:"at";a:4:{s:1:"C";s:2:"64";s:2:"WX";s:3:"600";s:1:"N";s:2:"at";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:3:"-15";i:2;s:3:"642";i:3;s:3:"616";}}i:65;a:4:{s:1:"C";s:2:"65";s:2:"WX";s:3:"600";s:1:"N";s:1:"A";s:1:"B";a:4:{i:0;s:2:"-9";i:1;s:1:"0";i:2;s:3:"632";i:3;s:3:"562";}}s:1:"A";a:4:{s:1:"C";s:2:"65";s:2:"WX";s:3:"600";s:1:"N";s:1:"A";s:1:"B";a:4:{i:0;s:2:"-9";i:1;s:1:"0";i:2;s:3:"632";i:3;s:3:"562";}}i:66;a:4:{s:1:"C";s:2:"66";s:2:"WX";s:3:"600";s:1:"N";s:1:"B";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:1:"0";i:2;s:3:"630";i:3;s:3:"562";}}s:1:"B";a:4:{s:1:"C";s:2:"66";s:2:"WX";s:3:"600";s:1:"N";s:1:"B";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:1:"0";i:2;s:3:"630";i:3;s:3:"562";}}i:67;a:4:{s:1:"C";s:2:"67";s:2:"WX";s:3:"600";s:1:"N";s:1:"C";s:1:"B";a:4:{i:0;s:2:"74";i:1;s:3:"-18";i:2;s:3:"675";i:3;s:3:"580";}}s:1:"C";a:4:{s:1:"C";s:2:"67";s:2:"WX";s:3:"600";s:1:"N";s:1:"C";s:1:"B";a:4:{i:0;s:2:"74";i:1;s:3:"-18";i:2;s:3:"675";i:3;s:3:"580";}}i:68;a:4:{s:1:"C";s:2:"68";s:2:"WX";s:3:"600";s:1:"N";s:1:"D";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:1:"0";i:2;s:3:"664";i:3;s:3:"562";}}s:1:"D";a:4:{s:1:"C";s:2:"68";s:2:"WX";s:3:"600";s:1:"N";s:1:"D";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:1:"0";i:2;s:3:"664";i:3;s:3:"562";}}i:69;a:4:{s:1:"C";s:2:"69";s:2:"WX";s:3:"600";s:1:"N";s:1:"E";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:1:"0";i:2;s:3:"670";i:3;s:3:"562";}}s:1:"E";a:4:{s:1:"C";s:2:"69";s:2:"WX";s:3:"600";s:1:"N";s:1:"E";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:1:"0";i:2;s:3:"670";i:3;s:3:"562";}}i:70;a:4:{s:1:"C";s:2:"70";s:2:"WX";s:3:"600";s:1:"N";s:1:"F";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:1:"0";i:2;s:3:"684";i:3;s:3:"562";}}s:1:"F";a:4:{s:1:"C";s:2:"70";s:2:"WX";s:3:"600";s:1:"N";s:1:"F";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:1:"0";i:2;s:3:"684";i:3;s:3:"562";}}i:71;a:4:{s:1:"C";s:2:"71";s:2:"WX";s:3:"600";s:1:"N";s:1:"G";s:1:"B";a:4:{i:0;s:2:"74";i:1;s:3:"-18";i:2;s:3:"675";i:3;s:3:"580";}}s:1:"G";a:4:{s:1:"C";s:2:"71";s:2:"WX";s:3:"600";s:1:"N";s:1:"G";s:1:"B";a:4:{i:0;s:2:"74";i:1;s:3:"-18";i:2;s:3:"675";i:3;s:3:"580";}}i:72;a:4:{s:1:"C";s:2:"72";s:2:"WX";s:3:"600";s:1:"N";s:1:"H";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:1:"0";i:2;s:3:"700";i:3;s:3:"562";}}s:1:"H";a:4:{s:1:"C";s:2:"72";s:2:"WX";s:3:"600";s:1:"N";s:1:"H";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:1:"0";i:2;s:3:"700";i:3;s:3:"562";}}i:73;a:4:{s:1:"C";s:2:"73";s:2:"WX";s:3:"600";s:1:"N";s:1:"I";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:1:"0";i:2;s:3:"643";i:3;s:3:"562";}}s:1:"I";a:4:{s:1:"C";s:2:"73";s:2:"WX";s:3:"600";s:1:"N";s:1:"I";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:1:"0";i:2;s:3:"643";i:3;s:3:"562";}}i:74;a:4:{s:1:"C";s:2:"74";s:2:"WX";s:3:"600";s:1:"N";s:1:"J";s:1:"B";a:4:{i:0;s:2:"58";i:1;s:3:"-18";i:2;s:3:"721";i:3;s:3:"562";}}s:1:"J";a:4:{s:1:"C";s:2:"74";s:2:"WX";s:3:"600";s:1:"N";s:1:"J";s:1:"B";a:4:{i:0;s:2:"58";i:1;s:3:"-18";i:2;s:3:"721";i:3;s:3:"562";}}i:75;a:4:{s:1:"C";s:2:"75";s:2:"WX";s:3:"600";s:1:"N";s:1:"K";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:1:"0";i:2;s:3:"692";i:3;s:3:"562";}}s:1:"K";a:4:{s:1:"C";s:2:"75";s:2:"WX";s:3:"600";s:1:"N";s:1:"K";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:1:"0";i:2;s:3:"692";i:3;s:3:"562";}}i:76;a:4:{s:1:"C";s:2:"76";s:2:"WX";s:3:"600";s:1:"N";s:1:"L";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:1:"0";i:2;s:3:"636";i:3;s:3:"562";}}s:1:"L";a:4:{s:1:"C";s:2:"76";s:2:"WX";s:3:"600";s:1:"N";s:1:"L";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:1:"0";i:2;s:3:"636";i:3;s:3:"562";}}i:77;a:4:{s:1:"C";s:2:"77";s:2:"WX";s:3:"600";s:1:"N";s:1:"M";s:1:"B";a:4:{i:0;s:2:"-2";i:1;s:1:"0";i:2;s:3:"722";i:3;s:3:"562";}}s:1:"M";a:4:{s:1:"C";s:2:"77";s:2:"WX";s:3:"600";s:1:"N";s:1:"M";s:1:"B";a:4:{i:0;s:2:"-2";i:1;s:1:"0";i:2;s:3:"722";i:3;s:3:"562";}}i:78;a:4:{s:1:"C";s:2:"78";s:2:"WX";s:3:"600";s:1:"N";s:1:"N";s:1:"B";a:4:{i:0;s:1:"8";i:1;s:3:"-12";i:2;s:3:"730";i:3;s:3:"562";}}s:1:"N";a:4:{s:1:"C";s:2:"78";s:2:"WX";s:3:"600";s:1:"N";s:1:"N";s:1:"B";a:4:{i:0;s:1:"8";i:1;s:3:"-12";i:2;s:3:"730";i:3;s:3:"562";}}i:79;a:4:{s:1:"C";s:2:"79";s:2:"WX";s:3:"600";s:1:"N";s:1:"O";s:1:"B";a:4:{i:0;s:2:"74";i:1;s:3:"-18";i:2;s:3:"645";i:3;s:3:"580";}}s:1:"O";a:4:{s:1:"C";s:2:"79";s:2:"WX";s:3:"600";s:1:"N";s:1:"O";s:1:"B";a:4:{i:0;s:2:"74";i:1;s:3:"-18";i:2;s:3:"645";i:3;s:3:"580";}}i:80;a:4:{s:1:"C";s:2:"80";s:2:"WX";s:3:"600";s:1:"N";s:1:"P";s:1:"B";a:4:{i:0;s:2:"48";i:1;s:1:"0";i:2;s:3:"643";i:3;s:3:"562";}}s:1:"P";a:4:{s:1:"C";s:2:"80";s:2:"WX";s:3:"600";s:1:"N";s:1:"P";s:1:"B";a:4:{i:0;s:2:"48";i:1;s:1:"0";i:2;s:3:"643";i:3;s:3:"562";}}i:81;a:4:{s:1:"C";s:2:"81";s:2:"WX";s:3:"600";s:1:"N";s:1:"Q";s:1:"B";a:4:{i:0;s:2:"83";i:1;s:4:"-138";i:2;s:3:"636";i:3;s:3:"580";}}s:1:"Q";a:4:{s:1:"C";s:2:"81";s:2:"WX";s:3:"600";s:1:"N";s:1:"Q";s:1:"B";a:4:{i:0;s:2:"83";i:1;s:4:"-138";i:2;s:3:"636";i:3;s:3:"580";}}i:82;a:4:{s:1:"C";s:2:"82";s:2:"WX";s:3:"600";s:1:"N";s:1:"R";s:1:"B";a:4:{i:0;s:2:"24";i:1;s:1:"0";i:2;s:3:"617";i:3;s:3:"562";}}s:1:"R";a:4:{s:1:"C";s:2:"82";s:2:"WX";s:3:"600";s:1:"N";s:1:"R";s:1:"B";a:4:{i:0;s:2:"24";i:1;s:1:"0";i:2;s:3:"617";i:3;s:3:"562";}}i:83;a:4:{s:1:"C";s:2:"83";s:2:"WX";s:3:"600";s:1:"N";s:1:"S";s:1:"B";a:4:{i:0;s:2:"54";i:1;s:3:"-22";i:2;s:3:"673";i:3;s:3:"582";}}s:1:"S";a:4:{s:1:"C";s:2:"83";s:2:"WX";s:3:"600";s:1:"N";s:1:"S";s:1:"B";a:4:{i:0;s:2:"54";i:1;s:3:"-22";i:2;s:3:"673";i:3;s:3:"582";}}i:84;a:4:{s:1:"C";s:2:"84";s:2:"WX";s:3:"600";s:1:"N";s:1:"T";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:1:"0";i:2;s:3:"679";i:3;s:3:"562";}}s:1:"T";a:4:{s:1:"C";s:2:"84";s:2:"WX";s:3:"600";s:1:"N";s:1:"T";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:1:"0";i:2;s:3:"679";i:3;s:3:"562";}}i:85;a:4:{s:1:"C";s:2:"85";s:2:"WX";s:3:"600";s:1:"N";s:1:"U";s:1:"B";a:4:{i:0;s:3:"101";i:1;s:3:"-18";i:2;s:3:"716";i:3;s:3:"562";}}s:1:"U";a:4:{s:1:"C";s:2:"85";s:2:"WX";s:3:"600";s:1:"N";s:1:"U";s:1:"B";a:4:{i:0;s:3:"101";i:1;s:3:"-18";i:2;s:3:"716";i:3;s:3:"562";}}i:86;a:4:{s:1:"C";s:2:"86";s:2:"WX";s:3:"600";s:1:"N";s:1:"V";s:1:"B";a:4:{i:0;s:2:"84";i:1;s:1:"0";i:2;s:3:"733";i:3;s:3:"562";}}s:1:"V";a:4:{s:1:"C";s:2:"86";s:2:"WX";s:3:"600";s:1:"N";s:1:"V";s:1:"B";a:4:{i:0;s:2:"84";i:1;s:1:"0";i:2;s:3:"733";i:3;s:3:"562";}}i:87;a:4:{s:1:"C";s:2:"87";s:2:"WX";s:3:"600";s:1:"N";s:1:"W";s:1:"B";a:4:{i:0;s:2:"79";i:1;s:1:"0";i:2;s:3:"738";i:3;s:3:"562";}}s:1:"W";a:4:{s:1:"C";s:2:"87";s:2:"WX";s:3:"600";s:1:"N";s:1:"W";s:1:"B";a:4:{i:0;s:2:"79";i:1;s:1:"0";i:2;s:3:"738";i:3;s:3:"562";}}i:88;a:4:{s:1:"C";s:2:"88";s:2:"WX";s:3:"600";s:1:"N";s:1:"X";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:1:"0";i:2;s:3:"690";i:3;s:3:"562";}}s:1:"X";a:4:{s:1:"C";s:2:"88";s:2:"WX";s:3:"600";s:1:"N";s:1:"X";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:1:"0";i:2;s:3:"690";i:3;s:3:"562";}}i:89;a:4:{s:1:"C";s:2:"89";s:2:"WX";s:3:"600";s:1:"N";s:1:"Y";s:1:"B";a:4:{i:0;s:3:"109";i:1;s:1:"0";i:2;s:3:"709";i:3;s:3:"562";}}s:1:"Y";a:4:{s:1:"C";s:2:"89";s:2:"WX";s:3:"600";s:1:"N";s:1:"Y";s:1:"B";a:4:{i:0;s:3:"109";i:1;s:1:"0";i:2;s:3:"709";i:3;s:3:"562";}}i:90;a:4:{s:1:"C";s:2:"90";s:2:"WX";s:3:"600";s:1:"N";s:1:"Z";s:1:"B";a:4:{i:0;s:2:"62";i:1;s:1:"0";i:2;s:3:"637";i:3;s:3:"562";}}s:1:"Z";a:4:{s:1:"C";s:2:"90";s:2:"WX";s:3:"600";s:1:"N";s:1:"Z";s:1:"B";a:4:{i:0;s:2:"62";i:1;s:1:"0";i:2;s:3:"637";i:3;s:3:"562";}}i:91;a:4:{s:1:"C";s:2:"91";s:2:"WX";s:3:"600";s:1:"N";s:11:"bracketleft";s:1:"B";a:4:{i:0;s:3:"223";i:1;s:4:"-102";i:2;s:3:"606";i:3;s:3:"616";}}s:11:"bracketleft";a:4:{s:1:"C";s:2:"91";s:2:"WX";s:3:"600";s:1:"N";s:11:"bracketleft";s:1:"B";a:4:{i:0;s:3:"223";i:1;s:4:"-102";i:2;s:3:"606";i:3;s:3:"616";}}i:92;a:4:{s:1:"C";s:2:"92";s:2:"WX";s:3:"600";s:1:"N";s:9:"backslash";s:1:"B";a:4:{i:0;s:3:"222";i:1;s:3:"-77";i:2;s:3:"496";i:3;s:3:"626";}}s:9:"backslash";a:4:{s:1:"C";s:2:"92";s:2:"WX";s:3:"600";s:1:"N";s:9:"backslash";s:1:"B";a:4:{i:0;s:3:"222";i:1;s:3:"-77";i:2;s:3:"496";i:3;s:3:"626";}}i:93;a:4:{s:1:"C";s:2:"93";s:2:"WX";s:3:"600";s:1:"N";s:12:"bracketright";s:1:"B";a:4:{i:0;s:3:"103";i:1;s:4:"-102";i:2;s:3:"486";i:3;s:3:"616";}}s:12:"bracketright";a:4:{s:1:"C";s:2:"93";s:2:"WX";s:3:"600";s:1:"N";s:12:"bracketright";s:1:"B";a:4:{i:0;s:3:"103";i:1;s:4:"-102";i:2;s:3:"486";i:3;s:3:"616";}}i:94;a:4:{s:1:"C";s:2:"94";s:2:"WX";s:3:"600";s:1:"N";s:11:"asciicircum";s:1:"B";a:4:{i:0;s:3:"171";i:1;s:3:"250";i:2;s:3:"556";i:3;s:3:"616";}}s:11:"asciicircum";a:4:{s:1:"C";s:2:"94";s:2:"WX";s:3:"600";s:1:"N";s:11:"asciicircum";s:1:"B";a:4:{i:0;s:3:"171";i:1;s:3:"250";i:2;s:3:"556";i:3;s:3:"616";}}i:95;a:4:{s:1:"C";s:2:"95";s:2:"WX";s:3:"600";s:1:"N";s:10:"underscore";s:1:"B";a:4:{i:0;s:3:"-27";i:1;s:4:"-125";i:2;s:3:"585";i:3;s:3:"-75";}}s:10:"underscore";a:4:{s:1:"C";s:2:"95";s:2:"WX";s:3:"600";s:1:"N";s:10:"underscore";s:1:"B";a:4:{i:0;s:3:"-27";i:1;s:4:"-125";i:2;s:3:"585";i:3;s:3:"-75";}}i:96;a:4:{s:1:"C";s:2:"96";s:2:"WX";s:3:"600";s:1:"N";s:9:"quoteleft";s:1:"B";a:4:{i:0;s:3:"297";i:1;s:3:"277";i:2;s:3:"487";i:3;s:3:"562";}}s:9:"quoteleft";a:4:{s:1:"C";s:2:"96";s:2:"WX";s:3:"600";s:1:"N";s:9:"quoteleft";s:1:"B";a:4:{i:0;s:3:"297";i:1;s:3:"277";i:2;s:3:"487";i:3;s:3:"562";}}i:97;a:4:{s:1:"C";s:2:"97";s:2:"WX";s:3:"600";s:1:"N";s:1:"a";s:1:"B";a:4:{i:0;s:2:"61";i:1;s:3:"-15";i:2;s:3:"593";i:3;s:3:"454";}}s:1:"a";a:4:{s:1:"C";s:2:"97";s:2:"WX";s:3:"600";s:1:"N";s:1:"a";s:1:"B";a:4:{i:0;s:2:"61";i:1;s:3:"-15";i:2;s:3:"593";i:3;s:3:"454";}}i:98;a:4:{s:1:"C";s:2:"98";s:2:"WX";s:3:"600";s:1:"N";s:1:"b";s:1:"B";a:4:{i:0;s:2:"13";i:1;s:3:"-15";i:2;s:3:"636";i:3;s:3:"626";}}s:1:"b";a:4:{s:1:"C";s:2:"98";s:2:"WX";s:3:"600";s:1:"N";s:1:"b";s:1:"B";a:4:{i:0;s:2:"13";i:1;s:3:"-15";i:2;s:3:"636";i:3;s:3:"626";}}i:99;a:4:{s:1:"C";s:2:"99";s:2:"WX";s:3:"600";s:1:"N";s:1:"c";s:1:"B";a:4:{i:0;s:2:"81";i:1;s:3:"-15";i:2;s:3:"631";i:3;s:3:"459";}}s:1:"c";a:4:{s:1:"C";s:2:"99";s:2:"WX";s:3:"600";s:1:"N";s:1:"c";s:1:"B";a:4:{i:0;s:2:"81";i:1;s:3:"-15";i:2;s:3:"631";i:3;s:3:"459";}}i:100;a:4:{s:1:"C";s:3:"100";s:2:"WX";s:3:"600";s:1:"N";s:1:"d";s:1:"B";a:4:{i:0;s:2:"60";i:1;s:3:"-15";i:2;s:3:"645";i:3;s:3:"626";}}s:1:"d";a:4:{s:1:"C";s:3:"100";s:2:"WX";s:3:"600";s:1:"N";s:1:"d";s:1:"B";a:4:{i:0;s:2:"60";i:1;s:3:"-15";i:2;s:3:"645";i:3;s:3:"626";}}i:101;a:4:{s:1:"C";s:3:"101";s:2:"WX";s:3:"600";s:1:"N";s:1:"e";s:1:"B";a:4:{i:0;s:2:"81";i:1;s:3:"-15";i:2;s:3:"605";i:3;s:3:"454";}}s:1:"e";a:4:{s:1:"C";s:3:"101";s:2:"WX";s:3:"600";s:1:"N";s:1:"e";s:1:"B";a:4:{i:0;s:2:"81";i:1;s:3:"-15";i:2;s:3:"605";i:3;s:3:"454";}}i:102;a:5:{s:1:"C";s:3:"102";s:2:"WX";s:3:"600";s:1:"N";s:1:"f";s:1:"B";a:4:{i:0;s:2:"83";i:1;s:1:"0";i:2;s:3:"677";i:3;s:3:"626";}s:1:"L";a:2:{i:0;s:1:"l";i:1;s:2:"fl";}}s:1:"f";a:5:{s:1:"C";s:3:"102";s:2:"WX";s:3:"600";s:1:"N";s:1:"f";s:1:"B";a:4:{i:0;s:2:"83";i:1;s:1:"0";i:2;s:3:"677";i:3;s:3:"626";}s:1:"L";a:2:{i:0;s:1:"l";i:1;s:2:"fl";}}i:103;a:4:{s:1:"C";s:3:"103";s:2:"WX";s:3:"600";s:1:"N";s:1:"g";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:4:"-146";i:2;s:3:"674";i:3;s:3:"454";}}s:1:"g";a:4:{s:1:"C";s:3:"103";s:2:"WX";s:3:"600";s:1:"N";s:1:"g";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:4:"-146";i:2;s:3:"674";i:3;s:3:"454";}}i:104;a:4:{s:1:"C";s:3:"104";s:2:"WX";s:3:"600";s:1:"N";s:1:"h";s:1:"B";a:4:{i:0;s:2:"18";i:1;s:1:"0";i:2;s:3:"615";i:3;s:3:"626";}}s:1:"h";a:4:{s:1:"C";s:3:"104";s:2:"WX";s:3:"600";s:1:"N";s:1:"h";s:1:"B";a:4:{i:0;s:2:"18";i:1;s:1:"0";i:2;s:3:"615";i:3;s:3:"626";}}i:105;a:4:{s:1:"C";s:3:"105";s:2:"WX";s:3:"600";s:1:"N";s:1:"i";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:1:"0";i:2;s:3:"546";i:3;s:3:"658";}}s:1:"i";a:4:{s:1:"C";s:3:"105";s:2:"WX";s:3:"600";s:1:"N";s:1:"i";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:1:"0";i:2;s:3:"546";i:3;s:3:"658";}}i:106;a:4:{s:1:"C";s:3:"106";s:2:"WX";s:3:"600";s:1:"N";s:1:"j";s:1:"B";a:4:{i:0;s:2:"36";i:1;s:4:"-146";i:2;s:3:"580";i:3;s:3:"658";}}s:1:"j";a:4:{s:1:"C";s:3:"106";s:2:"WX";s:3:"600";s:1:"N";s:1:"j";s:1:"B";a:4:{i:0;s:2:"36";i:1;s:4:"-146";i:2;s:3:"580";i:3;s:3:"658";}}i:107;a:4:{s:1:"C";s:3:"107";s:2:"WX";s:3:"600";s:1:"N";s:1:"k";s:1:"B";a:4:{i:0;s:2:"33";i:1;s:1:"0";i:2;s:3:"643";i:3;s:3:"626";}}s:1:"k";a:4:{s:1:"C";s:3:"107";s:2:"WX";s:3:"600";s:1:"N";s:1:"k";s:1:"B";a:4:{i:0;s:2:"33";i:1;s:1:"0";i:2;s:3:"643";i:3;s:3:"626";}}i:108;a:4:{s:1:"C";s:3:"108";s:2:"WX";s:3:"600";s:1:"N";s:1:"l";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:1:"0";i:2;s:3:"546";i:3;s:3:"626";}}s:1:"l";a:4:{s:1:"C";s:3:"108";s:2:"WX";s:3:"600";s:1:"N";s:1:"l";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:1:"0";i:2;s:3:"546";i:3;s:3:"626";}}i:109;a:4:{s:1:"C";s:3:"109";s:2:"WX";s:3:"600";s:1:"N";s:1:"m";s:1:"B";a:4:{i:0;s:3:"-22";i:1;s:1:"0";i:2;s:3:"649";i:3;s:3:"454";}}s:1:"m";a:4:{s:1:"C";s:3:"109";s:2:"WX";s:3:"600";s:1:"N";s:1:"m";s:1:"B";a:4:{i:0;s:3:"-22";i:1;s:1:"0";i:2;s:3:"649";i:3;s:3:"454";}}i:110;a:4:{s:1:"C";s:3:"110";s:2:"WX";s:3:"600";s:1:"N";s:1:"n";s:1:"B";a:4:{i:0;s:2:"18";i:1;s:1:"0";i:2;s:3:"615";i:3;s:3:"454";}}s:1:"n";a:4:{s:1:"C";s:3:"110";s:2:"WX";s:3:"600";s:1:"N";s:1:"n";s:1:"B";a:4:{i:0;s:2:"18";i:1;s:1:"0";i:2;s:3:"615";i:3;s:3:"454";}}i:111;a:4:{s:1:"C";s:3:"111";s:2:"WX";s:3:"600";s:1:"N";s:1:"o";s:1:"B";a:4:{i:0;s:2:"71";i:1;s:3:"-15";i:2;s:3:"622";i:3;s:3:"454";}}s:1:"o";a:4:{s:1:"C";s:3:"111";s:2:"WX";s:3:"600";s:1:"N";s:1:"o";s:1:"B";a:4:{i:0;s:2:"71";i:1;s:3:"-15";i:2;s:3:"622";i:3;s:3:"454";}}i:112;a:4:{s:1:"C";s:3:"112";s:2:"WX";s:3:"600";s:1:"N";s:1:"p";s:1:"B";a:4:{i:0;s:3:"-32";i:1;s:4:"-142";i:2;s:3:"622";i:3;s:3:"454";}}s:1:"p";a:4:{s:1:"C";s:3:"112";s:2:"WX";s:3:"600";s:1:"N";s:1:"p";s:1:"B";a:4:{i:0;s:3:"-32";i:1;s:4:"-142";i:2;s:3:"622";i:3;s:3:"454";}}i:113;a:4:{s:1:"C";s:3:"113";s:2:"WX";s:3:"600";s:1:"N";s:1:"q";s:1:"B";a:4:{i:0;s:2:"60";i:1;s:4:"-142";i:2;s:3:"685";i:3;s:3:"454";}}s:1:"q";a:4:{s:1:"C";s:3:"113";s:2:"WX";s:3:"600";s:1:"N";s:1:"q";s:1:"B";a:4:{i:0;s:2:"60";i:1;s:4:"-142";i:2;s:3:"685";i:3;s:3:"454";}}i:114;a:4:{s:1:"C";s:3:"114";s:2:"WX";s:3:"600";s:1:"N";s:1:"r";s:1:"B";a:4:{i:0;s:2:"47";i:1;s:1:"0";i:2;s:3:"655";i:3;s:3:"454";}}s:1:"r";a:4:{s:1:"C";s:3:"114";s:2:"WX";s:3:"600";s:1:"N";s:1:"r";s:1:"B";a:4:{i:0;s:2:"47";i:1;s:1:"0";i:2;s:3:"655";i:3;s:3:"454";}}i:115;a:4:{s:1:"C";s:3:"115";s:2:"WX";s:3:"600";s:1:"N";s:1:"s";s:1:"B";a:4:{i:0;s:2:"66";i:1;s:3:"-17";i:2;s:3:"608";i:3;s:3:"459";}}s:1:"s";a:4:{s:1:"C";s:3:"115";s:2:"WX";s:3:"600";s:1:"N";s:1:"s";s:1:"B";a:4:{i:0;s:2:"66";i:1;s:3:"-17";i:2;s:3:"608";i:3;s:3:"459";}}i:116;a:4:{s:1:"C";s:3:"116";s:2:"WX";s:3:"600";s:1:"N";s:1:"t";s:1:"B";a:4:{i:0;s:3:"118";i:1;s:3:"-15";i:2;s:3:"567";i:3;s:3:"562";}}s:1:"t";a:4:{s:1:"C";s:3:"116";s:2:"WX";s:3:"600";s:1:"N";s:1:"t";s:1:"B";a:4:{i:0;s:3:"118";i:1;s:3:"-15";i:2;s:3:"567";i:3;s:3:"562";}}i:117;a:4:{s:1:"C";s:3:"117";s:2:"WX";s:3:"600";s:1:"N";s:1:"u";s:1:"B";a:4:{i:0;s:2:"70";i:1;s:3:"-15";i:2;s:3:"592";i:3;s:3:"439";}}s:1:"u";a:4:{s:1:"C";s:3:"117";s:2:"WX";s:3:"600";s:1:"N";s:1:"u";s:1:"B";a:4:{i:0;s:2:"70";i:1;s:3:"-15";i:2;s:3:"592";i:3;s:3:"439";}}i:118;a:4:{s:1:"C";s:3:"118";s:2:"WX";s:3:"600";s:1:"N";s:1:"v";s:1:"B";a:4:{i:0;s:2:"70";i:1;s:1:"0";i:2;s:3:"695";i:3;s:3:"439";}}s:1:"v";a:4:{s:1:"C";s:3:"118";s:2:"WX";s:3:"600";s:1:"N";s:1:"v";s:1:"B";a:4:{i:0;s:2:"70";i:1;s:1:"0";i:2;s:3:"695";i:3;s:3:"439";}}i:119;a:4:{s:1:"C";s:3:"119";s:2:"WX";s:3:"600";s:1:"N";s:1:"w";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:1:"0";i:2;s:3:"712";i:3;s:3:"439";}}s:1:"w";a:4:{s:1:"C";s:3:"119";s:2:"WX";s:3:"600";s:1:"N";s:1:"w";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:1:"0";i:2;s:3:"712";i:3;s:3:"439";}}i:120;a:4:{s:1:"C";s:3:"120";s:2:"WX";s:3:"600";s:1:"N";s:1:"x";s:1:"B";a:4:{i:0;s:1:"6";i:1;s:1:"0";i:2;s:3:"671";i:3;s:3:"439";}}s:1:"x";a:4:{s:1:"C";s:3:"120";s:2:"WX";s:3:"600";s:1:"N";s:1:"x";s:1:"B";a:4:{i:0;s:1:"6";i:1;s:1:"0";i:2;s:3:"671";i:3;s:3:"439";}}i:121;a:4:{s:1:"C";s:3:"121";s:2:"WX";s:3:"600";s:1:"N";s:1:"y";s:1:"B";a:4:{i:0;s:3:"-21";i:1;s:4:"-142";i:2;s:3:"695";i:3;s:3:"439";}}s:1:"y";a:4:{s:1:"C";s:3:"121";s:2:"WX";s:3:"600";s:1:"N";s:1:"y";s:1:"B";a:4:{i:0;s:3:"-21";i:1;s:4:"-142";i:2;s:3:"695";i:3;s:3:"439";}}i:122;a:4:{s:1:"C";s:3:"122";s:2:"WX";s:3:"600";s:1:"N";s:1:"z";s:1:"B";a:4:{i:0;s:2:"81";i:1;s:1:"0";i:2;s:3:"614";i:3;s:3:"439";}}s:1:"z";a:4:{s:1:"C";s:3:"122";s:2:"WX";s:3:"600";s:1:"N";s:1:"z";s:1:"B";a:4:{i:0;s:2:"81";i:1;s:1:"0";i:2;s:3:"614";i:3;s:3:"439";}}i:123;a:4:{s:1:"C";s:3:"123";s:2:"WX";s:3:"600";s:1:"N";s:9:"braceleft";s:1:"B";a:4:{i:0;s:3:"203";i:1;s:4:"-102";i:2;s:3:"595";i:3;s:3:"616";}}s:9:"braceleft";a:4:{s:1:"C";s:3:"123";s:2:"WX";s:3:"600";s:1:"N";s:9:"braceleft";s:1:"B";a:4:{i:0;s:3:"203";i:1;s:4:"-102";i:2;s:3:"595";i:3;s:3:"616";}}i:124;a:4:{s:1:"C";s:3:"124";s:2:"WX";s:3:"600";s:1:"N";s:3:"bar";s:1:"B";a:4:{i:0;s:3:"201";i:1;s:4:"-250";i:2;s:3:"505";i:3;s:3:"750";}}s:3:"bar";a:4:{s:1:"C";s:3:"124";s:2:"WX";s:3:"600";s:1:"N";s:3:"bar";s:1:"B";a:4:{i:0;s:3:"201";i:1;s:4:"-250";i:2;s:3:"505";i:3;s:3:"750";}}i:125;a:4:{s:1:"C";s:3:"125";s:2:"WX";s:3:"600";s:1:"N";s:10:"braceright";s:1:"B";a:4:{i:0;s:3:"114";i:1;s:4:"-102";i:2;s:3:"506";i:3;s:3:"616";}}s:10:"braceright";a:4:{s:1:"C";s:3:"125";s:2:"WX";s:3:"600";s:1:"N";s:10:"braceright";s:1:"B";a:4:{i:0;s:3:"114";i:1;s:4:"-102";i:2;s:3:"506";i:3;s:3:"616";}}i:126;a:4:{s:1:"C";s:3:"126";s:2:"WX";s:3:"600";s:1:"N";s:10:"asciitilde";s:1:"B";a:4:{i:0;s:3:"120";i:1;s:3:"153";i:2;s:3:"590";i:3;s:3:"356";}}s:10:"asciitilde";a:4:{s:1:"C";s:3:"126";s:2:"WX";s:3:"600";s:1:"N";s:10:"asciitilde";s:1:"B";a:4:{i:0;s:3:"120";i:1;s:3:"153";i:2;s:3:"590";i:3;s:3:"356";}}i:161;a:4:{s:1:"C";s:3:"161";s:2:"WX";s:3:"600";s:1:"N";s:10:"exclamdown";s:1:"B";a:4:{i:0;s:3:"196";i:1;s:4:"-146";i:2;s:3:"477";i:3;s:3:"449";}}s:10:"exclamdown";a:4:{s:1:"C";s:3:"161";s:2:"WX";s:3:"600";s:1:"N";s:10:"exclamdown";s:1:"B";a:4:{i:0;s:3:"196";i:1;s:4:"-146";i:2;s:3:"477";i:3;s:3:"449";}}i:162;a:4:{s:1:"C";s:3:"162";s:2:"WX";s:3:"600";s:1:"N";s:4:"cent";s:1:"B";a:4:{i:0;s:3:"121";i:1;s:3:"-49";i:2;s:3:"605";i:3;s:3:"614";}}s:4:"cent";a:4:{s:1:"C";s:3:"162";s:2:"WX";s:3:"600";s:1:"N";s:4:"cent";s:1:"B";a:4:{i:0;s:3:"121";i:1;s:3:"-49";i:2;s:3:"605";i:3;s:3:"614";}}i:163;a:4:{s:1:"C";s:3:"163";s:2:"WX";s:3:"600";s:1:"N";s:8:"sterling";s:1:"B";a:4:{i:0;s:3:"106";i:1;s:3:"-28";i:2;s:3:"650";i:3;s:3:"611";}}s:8:"sterling";a:4:{s:1:"C";s:3:"163";s:2:"WX";s:3:"600";s:1:"N";s:8:"sterling";s:1:"B";a:4:{i:0;s:3:"106";i:1;s:3:"-28";i:2;s:3:"650";i:3;s:3:"611";}}i:164;a:4:{s:1:"C";s:3:"164";s:2:"WX";s:3:"600";s:1:"N";s:8:"fraction";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:3:"-60";i:2;s:3:"708";i:3;s:3:"661";}}s:8:"fraction";a:4:{s:1:"C";s:3:"164";s:2:"WX";s:3:"600";s:1:"N";s:8:"fraction";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:3:"-60";i:2;s:3:"708";i:3;s:3:"661";}}i:165;a:4:{s:1:"C";s:3:"165";s:2:"WX";s:3:"600";s:1:"N";s:3:"yen";s:1:"B";a:4:{i:0;s:2:"98";i:1;s:1:"0";i:2;s:3:"710";i:3;s:3:"562";}}s:3:"yen";a:4:{s:1:"C";s:3:"165";s:2:"WX";s:3:"600";s:1:"N";s:3:"yen";s:1:"B";a:4:{i:0;s:2:"98";i:1;s:1:"0";i:2;s:3:"710";i:3;s:3:"562";}}i:166;a:4:{s:1:"C";s:3:"166";s:2:"WX";s:3:"600";s:1:"N";s:6:"florin";s:1:"B";a:4:{i:0;s:3:"-57";i:1;s:4:"-131";i:2;s:3:"702";i:3;s:3:"616";}}s:6:"florin";a:4:{s:1:"C";s:3:"166";s:2:"WX";s:3:"600";s:1:"N";s:6:"florin";s:1:"B";a:4:{i:0;s:3:"-57";i:1;s:4:"-131";i:2;s:3:"702";i:3;s:3:"616";}}i:167;a:4:{s:1:"C";s:3:"167";s:2:"WX";s:3:"600";s:1:"N";s:7:"section";s:1:"B";a:4:{i:0;s:2:"74";i:1;s:3:"-70";i:2;s:3:"620";i:3;s:3:"580";}}s:7:"section";a:4:{s:1:"C";s:3:"167";s:2:"WX";s:3:"600";s:1:"N";s:7:"section";s:1:"B";a:4:{i:0;s:2:"74";i:1;s:3:"-70";i:2;s:3:"620";i:3;s:3:"580";}}i:168;a:4:{s:1:"C";s:3:"168";s:2:"WX";s:3:"600";s:1:"N";s:8:"currency";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:2:"49";i:2;s:3:"644";i:3;s:3:"517";}}s:8:"currency";a:4:{s:1:"C";s:3:"168";s:2:"WX";s:3:"600";s:1:"N";s:8:"currency";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:2:"49";i:2;s:3:"644";i:3;s:3:"517";}}i:169;a:4:{s:1:"C";s:3:"169";s:2:"WX";s:3:"600";s:1:"N";s:11:"quotesingle";s:1:"B";a:4:{i:0;s:3:"303";i:1;s:3:"277";i:2;s:3:"493";i:3;s:3:"562";}}s:11:"quotesingle";a:4:{s:1:"C";s:3:"169";s:2:"WX";s:3:"600";s:1:"N";s:11:"quotesingle";s:1:"B";a:4:{i:0;s:3:"303";i:1;s:3:"277";i:2;s:3:"493";i:3;s:3:"562";}}i:170;a:4:{s:1:"C";s:3:"170";s:2:"WX";s:3:"600";s:1:"N";s:12:"quotedblleft";s:1:"B";a:4:{i:0;s:3:"190";i:1;s:3:"277";i:2;s:3:"594";i:3;s:3:"562";}}s:12:"quotedblleft";a:4:{s:1:"C";s:3:"170";s:2:"WX";s:3:"600";s:1:"N";s:12:"quotedblleft";s:1:"B";a:4:{i:0;s:3:"190";i:1;s:3:"277";i:2;s:3:"594";i:3;s:3:"562";}}i:171;a:4:{s:1:"C";s:3:"171";s:2:"WX";s:3:"600";s:1:"N";s:13:"guillemotleft";s:1:"B";a:4:{i:0;s:2:"62";i:1;s:2:"70";i:2;s:3:"639";i:3;s:3:"446";}}s:13:"guillemotleft";a:4:{s:1:"C";s:3:"171";s:2:"WX";s:3:"600";s:1:"N";s:13:"guillemotleft";s:1:"B";a:4:{i:0;s:2:"62";i:1;s:2:"70";i:2;s:3:"639";i:3;s:3:"446";}}i:172;a:4:{s:1:"C";s:3:"172";s:2:"WX";s:3:"600";s:1:"N";s:13:"guilsinglleft";s:1:"B";a:4:{i:0;s:3:"195";i:1;s:2:"70";i:2;s:3:"545";i:3;s:3:"446";}}s:13:"guilsinglleft";a:4:{s:1:"C";s:3:"172";s:2:"WX";s:3:"600";s:1:"N";s:13:"guilsinglleft";s:1:"B";a:4:{i:0;s:3:"195";i:1;s:2:"70";i:2;s:3:"545";i:3;s:3:"446";}}i:173;a:4:{s:1:"C";s:3:"173";s:2:"WX";s:3:"600";s:1:"N";s:14:"guilsinglright";s:1:"B";a:4:{i:0;s:3:"165";i:1;s:2:"70";i:2;s:3:"514";i:3;s:3:"446";}}s:14:"guilsinglright";a:4:{s:1:"C";s:3:"173";s:2:"WX";s:3:"600";s:1:"N";s:14:"guilsinglright";s:1:"B";a:4:{i:0;s:3:"165";i:1;s:2:"70";i:2;s:3:"514";i:3;s:3:"446";}}i:174;a:4:{s:1:"C";s:3:"174";s:2:"WX";s:3:"600";s:1:"N";s:2:"fi";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:1:"0";i:2;s:3:"644";i:3;s:3:"626";}}s:2:"fi";a:4:{s:1:"C";s:3:"174";s:2:"WX";s:3:"600";s:1:"N";s:2:"fi";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:1:"0";i:2;s:3:"644";i:3;s:3:"626";}}i:175;a:4:{s:1:"C";s:3:"175";s:2:"WX";s:3:"600";s:1:"N";s:2:"fl";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:1:"0";i:2;s:3:"644";i:3;s:3:"626";}}s:2:"fl";a:4:{s:1:"C";s:3:"175";s:2:"WX";s:3:"600";s:1:"N";s:2:"fl";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:1:"0";i:2;s:3:"644";i:3;s:3:"626";}}i:177;a:4:{s:1:"C";s:3:"177";s:2:"WX";s:3:"600";s:1:"N";s:6:"endash";s:1:"B";a:4:{i:0;s:3:"108";i:1;s:3:"203";i:2;s:3:"602";i:3;s:3:"313";}}s:6:"endash";a:4:{s:1:"C";s:3:"177";s:2:"WX";s:3:"600";s:1:"N";s:6:"endash";s:1:"B";a:4:{i:0;s:3:"108";i:1;s:3:"203";i:2;s:3:"602";i:3;s:3:"313";}}i:178;a:4:{s:1:"C";s:3:"178";s:2:"WX";s:3:"600";s:1:"N";s:6:"dagger";s:1:"B";a:4:{i:0;s:3:"175";i:1;s:3:"-70";i:2;s:3:"586";i:3;s:3:"580";}}s:6:"dagger";a:4:{s:1:"C";s:3:"178";s:2:"WX";s:3:"600";s:1:"N";s:6:"dagger";s:1:"B";a:4:{i:0;s:3:"175";i:1;s:3:"-70";i:2;s:3:"586";i:3;s:3:"580";}}i:179;a:4:{s:1:"C";s:3:"179";s:2:"WX";s:3:"600";s:1:"N";s:9:"daggerdbl";s:1:"B";a:4:{i:0;s:3:"121";i:1;s:3:"-70";i:2;s:3:"587";i:3;s:3:"580";}}s:9:"daggerdbl";a:4:{s:1:"C";s:3:"179";s:2:"WX";s:3:"600";s:1:"N";s:9:"daggerdbl";s:1:"B";a:4:{i:0;s:3:"121";i:1;s:3:"-70";i:2;s:3:"587";i:3;s:3:"580";}}i:180;a:4:{s:1:"C";s:3:"180";s:2:"WX";s:3:"600";s:1:"N";s:14:"periodcentered";s:1:"B";a:4:{i:0;s:3:"248";i:1;s:3:"165";i:2;s:3:"461";i:3;s:3:"351";}}s:14:"periodcentered";a:4:{s:1:"C";s:3:"180";s:2:"WX";s:3:"600";s:1:"N";s:14:"periodcentered";s:1:"B";a:4:{i:0;s:3:"248";i:1;s:3:"165";i:2;s:3:"461";i:3;s:3:"351";}}i:182;a:4:{s:1:"C";s:3:"182";s:2:"WX";s:3:"600";s:1:"N";s:9:"paragraph";s:1:"B";a:4:{i:0;s:2:"61";i:1;s:3:"-70";i:2;s:3:"700";i:3;s:3:"580";}}s:9:"paragraph";a:4:{s:1:"C";s:3:"182";s:2:"WX";s:3:"600";s:1:"N";s:9:"paragraph";s:1:"B";a:4:{i:0;s:2:"61";i:1;s:3:"-70";i:2;s:3:"700";i:3;s:3:"580";}}i:183;a:4:{s:1:"C";s:3:"183";s:2:"WX";s:3:"600";s:1:"N";s:6:"bullet";s:1:"B";a:4:{i:0;s:3:"196";i:1;s:3:"132";i:2;s:3:"523";i:3;s:3:"430";}}s:6:"bullet";a:4:{s:1:"C";s:3:"183";s:2:"WX";s:3:"600";s:1:"N";s:6:"bullet";s:1:"B";a:4:{i:0;s:3:"196";i:1;s:3:"132";i:2;s:3:"523";i:3;s:3:"430";}}i:184;a:4:{s:1:"C";s:3:"184";s:2:"WX";s:3:"600";s:1:"N";s:14:"quotesinglbase";s:1:"B";a:4:{i:0;s:3:"144";i:1;s:4:"-142";i:2;s:3:"458";i:3;s:3:"143";}}s:14:"quotesinglbase";a:4:{s:1:"C";s:3:"184";s:2:"WX";s:3:"600";s:1:"N";s:14:"quotesinglbase";s:1:"B";a:4:{i:0;s:3:"144";i:1;s:4:"-142";i:2;s:3:"458";i:3;s:3:"143";}}i:185;a:4:{s:1:"C";s:3:"185";s:2:"WX";s:3:"600";s:1:"N";s:12:"quotedblbase";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:4:"-142";i:2;s:3:"560";i:3;s:3:"143";}}s:12:"quotedblbase";a:4:{s:1:"C";s:3:"185";s:2:"WX";s:3:"600";s:1:"N";s:12:"quotedblbase";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:4:"-142";i:2;s:3:"560";i:3;s:3:"143";}}i:186;a:4:{s:1:"C";s:3:"186";s:2:"WX";s:3:"600";s:1:"N";s:13:"quotedblright";s:1:"B";a:4:{i:0;s:3:"119";i:1;s:3:"277";i:2;s:3:"645";i:3;s:3:"562";}}s:13:"quotedblright";a:4:{s:1:"C";s:3:"186";s:2:"WX";s:3:"600";s:1:"N";s:13:"quotedblright";s:1:"B";a:4:{i:0;s:3:"119";i:1;s:3:"277";i:2;s:3:"645";i:3;s:3:"562";}}i:187;a:4:{s:1:"C";s:3:"187";s:2:"WX";s:3:"600";s:1:"N";s:14:"guillemotright";s:1:"B";a:4:{i:0;s:2:"71";i:1;s:2:"70";i:2;s:3:"647";i:3;s:3:"446";}}s:14:"guillemotright";a:4:{s:1:"C";s:3:"187";s:2:"WX";s:3:"600";s:1:"N";s:14:"guillemotright";s:1:"B";a:4:{i:0;s:2:"71";i:1;s:2:"70";i:2;s:3:"647";i:3;s:3:"446";}}i:188;a:4:{s:1:"C";s:3:"188";s:2:"WX";s:3:"600";s:1:"N";s:8:"ellipsis";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-15";i:2;s:3:"587";i:3;s:3:"116";}}s:8:"ellipsis";a:4:{s:1:"C";s:3:"188";s:2:"WX";s:3:"600";s:1:"N";s:8:"ellipsis";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-15";i:2;s:3:"587";i:3;s:3:"116";}}i:189;a:4:{s:1:"C";s:3:"189";s:2:"WX";s:3:"600";s:1:"N";s:11:"perthousand";s:1:"B";a:4:{i:0;s:3:"-45";i:1;s:3:"-15";i:2;s:3:"743";i:3;s:3:"616";}}s:11:"perthousand";a:4:{s:1:"C";s:3:"189";s:2:"WX";s:3:"600";s:1:"N";s:11:"perthousand";s:1:"B";a:4:{i:0;s:3:"-45";i:1;s:3:"-15";i:2;s:3:"743";i:3;s:3:"616";}}i:191;a:4:{s:1:"C";s:3:"191";s:2:"WX";s:3:"600";s:1:"N";s:12:"questiondown";s:1:"B";a:4:{i:0;s:3:"100";i:1;s:4:"-146";i:2;s:3:"509";i:3;s:3:"449";}}s:12:"questiondown";a:4:{s:1:"C";s:3:"191";s:2:"WX";s:3:"600";s:1:"N";s:12:"questiondown";s:1:"B";a:4:{i:0;s:3:"100";i:1;s:4:"-146";i:2;s:3:"509";i:3;s:3:"449";}}i:193;a:4:{s:1:"C";s:3:"193";s:2:"WX";s:3:"600";s:1:"N";s:5:"grave";s:1:"B";a:4:{i:0;s:3:"272";i:1;s:3:"508";i:2;s:3:"503";i:3;s:3:"661";}}s:5:"grave";a:4:{s:1:"C";s:3:"193";s:2:"WX";s:3:"600";s:1:"N";s:5:"grave";s:1:"B";a:4:{i:0;s:3:"272";i:1;s:3:"508";i:2;s:3:"503";i:3;s:3:"661";}}i:194;a:4:{s:1:"C";s:3:"194";s:2:"WX";s:3:"600";s:1:"N";s:5:"acute";s:1:"B";a:4:{i:0;s:3:"312";i:1;s:3:"508";i:2;s:3:"609";i:3;s:3:"661";}}s:5:"acute";a:4:{s:1:"C";s:3:"194";s:2:"WX";s:3:"600";s:1:"N";s:5:"acute";s:1:"B";a:4:{i:0;s:3:"312";i:1;s:3:"508";i:2;s:3:"609";i:3;s:3:"661";}}i:195;a:4:{s:1:"C";s:3:"195";s:2:"WX";s:3:"600";s:1:"N";s:10:"circumflex";s:1:"B";a:4:{i:0;s:3:"212";i:1;s:3:"483";i:2;s:3:"607";i:3;s:3:"657";}}s:10:"circumflex";a:4:{s:1:"C";s:3:"195";s:2:"WX";s:3:"600";s:1:"N";s:10:"circumflex";s:1:"B";a:4:{i:0;s:3:"212";i:1;s:3:"483";i:2;s:3:"607";i:3;s:3:"657";}}i:196;a:4:{s:1:"C";s:3:"196";s:2:"WX";s:3:"600";s:1:"N";s:5:"tilde";s:1:"B";a:4:{i:0;s:3:"199";i:1;s:3:"493";i:2;s:3:"643";i:3;s:3:"636";}}s:5:"tilde";a:4:{s:1:"C";s:3:"196";s:2:"WX";s:3:"600";s:1:"N";s:5:"tilde";s:1:"B";a:4:{i:0;s:3:"199";i:1;s:3:"493";i:2;s:3:"643";i:3;s:3:"636";}}i:197;a:4:{s:1:"C";s:3:"197";s:2:"WX";s:3:"600";s:1:"N";s:6:"macron";s:1:"B";a:4:{i:0;s:3:"195";i:1;s:3:"505";i:2;s:3:"637";i:3;s:3:"585";}}s:6:"macron";a:4:{s:1:"C";s:3:"197";s:2:"WX";s:3:"600";s:1:"N";s:6:"macron";s:1:"B";a:4:{i:0;s:3:"195";i:1;s:3:"505";i:2;s:3:"637";i:3;s:3:"585";}}i:198;a:4:{s:1:"C";s:3:"198";s:2:"WX";s:3:"600";s:1:"N";s:5:"breve";s:1:"B";a:4:{i:0;s:3:"217";i:1;s:3:"468";i:2;s:3:"652";i:3;s:3:"631";}}s:5:"breve";a:4:{s:1:"C";s:3:"198";s:2:"WX";s:3:"600";s:1:"N";s:5:"breve";s:1:"B";a:4:{i:0;s:3:"217";i:1;s:3:"468";i:2;s:3:"652";i:3;s:3:"631";}}i:199;a:4:{s:1:"C";s:3:"199";s:2:"WX";s:3:"600";s:1:"N";s:9:"dotaccent";s:1:"B";a:4:{i:0;s:3:"348";i:1;s:3:"498";i:2;s:3:"493";i:3;s:3:"638";}}s:9:"dotaccent";a:4:{s:1:"C";s:3:"199";s:2:"WX";s:3:"600";s:1:"N";s:9:"dotaccent";s:1:"B";a:4:{i:0;s:3:"348";i:1;s:3:"498";i:2;s:3:"493";i:3;s:3:"638";}}i:200;a:4:{s:1:"C";s:3:"200";s:2:"WX";s:3:"600";s:1:"N";s:8:"dieresis";s:1:"B";a:4:{i:0;s:3:"246";i:1;s:3:"498";i:2;s:3:"595";i:3;s:3:"638";}}s:8:"dieresis";a:4:{s:1:"C";s:3:"200";s:2:"WX";s:3:"600";s:1:"N";s:8:"dieresis";s:1:"B";a:4:{i:0;s:3:"246";i:1;s:3:"498";i:2;s:3:"595";i:3;s:3:"638";}}i:202;a:4:{s:1:"C";s:3:"202";s:2:"WX";s:3:"600";s:1:"N";s:4:"ring";s:1:"B";a:4:{i:0;s:3:"319";i:1;s:3:"481";i:2;s:3:"528";i:3;s:3:"678";}}s:4:"ring";a:4:{s:1:"C";s:3:"202";s:2:"WX";s:3:"600";s:1:"N";s:4:"ring";s:1:"B";a:4:{i:0;s:3:"319";i:1;s:3:"481";i:2;s:3:"528";i:3;s:3:"678";}}i:203;a:4:{s:1:"C";s:3:"203";s:2:"WX";s:3:"600";s:1:"N";s:7:"cedilla";s:1:"B";a:4:{i:0;s:3:"168";i:1;s:4:"-206";i:2;s:3:"368";i:3;s:1:"0";}}s:7:"cedilla";a:4:{s:1:"C";s:3:"203";s:2:"WX";s:3:"600";s:1:"N";s:7:"cedilla";s:1:"B";a:4:{i:0;s:3:"168";i:1;s:4:"-206";i:2;s:3:"368";i:3;s:1:"0";}}i:205;a:4:{s:1:"C";s:3:"205";s:2:"WX";s:3:"600";s:1:"N";s:12:"hungarumlaut";s:1:"B";a:4:{i:0;s:3:"171";i:1;s:3:"488";i:2;s:3:"729";i:3;s:3:"661";}}s:12:"hungarumlaut";a:4:{s:1:"C";s:3:"205";s:2:"WX";s:3:"600";s:1:"N";s:12:"hungarumlaut";s:1:"B";a:4:{i:0;s:3:"171";i:1;s:3:"488";i:2;s:3:"729";i:3;s:3:"661";}}i:206;a:4:{s:1:"C";s:3:"206";s:2:"WX";s:3:"600";s:1:"N";s:6:"ogonek";s:1:"B";a:4:{i:0;s:3:"143";i:1;s:4:"-199";i:2;s:3:"367";i:3;s:1:"0";}}s:6:"ogonek";a:4:{s:1:"C";s:3:"206";s:2:"WX";s:3:"600";s:1:"N";s:6:"ogonek";s:1:"B";a:4:{i:0;s:3:"143";i:1;s:4:"-199";i:2;s:3:"367";i:3;s:1:"0";}}i:207;a:4:{s:1:"C";s:3:"207";s:2:"WX";s:3:"600";s:1:"N";s:5:"caron";s:1:"B";a:4:{i:0;s:3:"238";i:1;s:3:"493";i:2;s:3:"633";i:3;s:3:"667";}}s:5:"caron";a:4:{s:1:"C";s:3:"207";s:2:"WX";s:3:"600";s:1:"N";s:5:"caron";s:1:"B";a:4:{i:0;s:3:"238";i:1;s:3:"493";i:2;s:3:"633";i:3;s:3:"667";}}i:208;a:4:{s:1:"C";s:3:"208";s:2:"WX";s:3:"600";s:1:"N";s:6:"emdash";s:1:"B";a:4:{i:0;s:2:"33";i:1;s:3:"203";i:2;s:3:"677";i:3;s:3:"313";}}s:6:"emdash";a:4:{s:1:"C";s:3:"208";s:2:"WX";s:3:"600";s:1:"N";s:6:"emdash";s:1:"B";a:4:{i:0;s:2:"33";i:1;s:3:"203";i:2;s:3:"677";i:3;s:3:"313";}}i:225;a:4:{s:1:"C";s:3:"225";s:2:"WX";s:3:"600";s:1:"N";s:2:"AE";s:1:"B";a:4:{i:0;s:3:"-29";i:1;s:1:"0";i:2;s:3:"708";i:3;s:3:"562";}}s:2:"AE";a:4:{s:1:"C";s:3:"225";s:2:"WX";s:3:"600";s:1:"N";s:2:"AE";s:1:"B";a:4:{i:0;s:3:"-29";i:1;s:1:"0";i:2;s:3:"708";i:3;s:3:"562";}}i:227;a:4:{s:1:"C";s:3:"227";s:2:"WX";s:3:"600";s:1:"N";s:11:"ordfeminine";s:1:"B";a:4:{i:0;s:3:"188";i:1;s:3:"196";i:2;s:3:"526";i:3;s:3:"580";}}s:11:"ordfeminine";a:4:{s:1:"C";s:3:"227";s:2:"WX";s:3:"600";s:1:"N";s:11:"ordfeminine";s:1:"B";a:4:{i:0;s:3:"188";i:1;s:3:"196";i:2;s:3:"526";i:3;s:3:"580";}}i:232;a:4:{s:1:"C";s:3:"232";s:2:"WX";s:3:"600";s:1:"N";s:6:"Lslash";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:1:"0";i:2;s:3:"636";i:3;s:3:"562";}}s:6:"Lslash";a:4:{s:1:"C";s:3:"232";s:2:"WX";s:3:"600";s:1:"N";s:6:"Lslash";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:1:"0";i:2;s:3:"636";i:3;s:3:"562";}}i:233;a:4:{s:1:"C";s:3:"233";s:2:"WX";s:3:"600";s:1:"N";s:6:"Oslash";s:1:"B";a:4:{i:0;s:2:"48";i:1;s:3:"-22";i:2;s:3:"673";i:3;s:3:"584";}}s:6:"Oslash";a:4:{s:1:"C";s:3:"233";s:2:"WX";s:3:"600";s:1:"N";s:6:"Oslash";s:1:"B";a:4:{i:0;s:2:"48";i:1;s:3:"-22";i:2;s:3:"673";i:3;s:3:"584";}}i:234;a:4:{s:1:"C";s:3:"234";s:2:"WX";s:3:"600";s:1:"N";s:2:"OE";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:1:"0";i:2;s:3:"701";i:3;s:3:"562";}}s:2:"OE";a:4:{s:1:"C";s:3:"234";s:2:"WX";s:3:"600";s:1:"N";s:2:"OE";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:1:"0";i:2;s:3:"701";i:3;s:3:"562";}}i:235;a:4:{s:1:"C";s:3:"235";s:2:"WX";s:3:"600";s:1:"N";s:12:"ordmasculine";s:1:"B";a:4:{i:0;s:3:"188";i:1;s:3:"196";i:2;s:3:"543";i:3;s:3:"580";}}s:12:"ordmasculine";a:4:{s:1:"C";s:3:"235";s:2:"WX";s:3:"600";s:1:"N";s:12:"ordmasculine";s:1:"B";a:4:{i:0;s:3:"188";i:1;s:3:"196";i:2;s:3:"543";i:3;s:3:"580";}}i:241;a:4:{s:1:"C";s:3:"241";s:2:"WX";s:3:"600";s:1:"N";s:2:"ae";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:3:"-15";i:2;s:3:"652";i:3;s:3:"454";}}s:2:"ae";a:4:{s:1:"C";s:3:"241";s:2:"WX";s:3:"600";s:1:"N";s:2:"ae";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:3:"-15";i:2;s:3:"652";i:3;s:3:"454";}}i:245;a:4:{s:1:"C";s:3:"245";s:2:"WX";s:3:"600";s:1:"N";s:8:"dotlessi";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:1:"0";i:2;s:3:"546";i:3;s:3:"439";}}s:8:"dotlessi";a:4:{s:1:"C";s:3:"245";s:2:"WX";s:3:"600";s:1:"N";s:8:"dotlessi";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:1:"0";i:2;s:3:"546";i:3;s:3:"439";}}i:248;a:4:{s:1:"C";s:3:"248";s:2:"WX";s:3:"600";s:1:"N";s:6:"lslash";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:1:"0";i:2;s:3:"587";i:3;s:3:"626";}}s:6:"lslash";a:4:{s:1:"C";s:3:"248";s:2:"WX";s:3:"600";s:1:"N";s:6:"lslash";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:1:"0";i:2;s:3:"587";i:3;s:3:"626";}}i:249;a:4:{s:1:"C";s:3:"249";s:2:"WX";s:3:"600";s:1:"N";s:6:"oslash";s:1:"B";a:4:{i:0;s:2:"54";i:1;s:3:"-24";i:2;s:3:"638";i:3;s:3:"463";}}s:6:"oslash";a:4:{s:1:"C";s:3:"249";s:2:"WX";s:3:"600";s:1:"N";s:6:"oslash";s:1:"B";a:4:{i:0;s:2:"54";i:1;s:3:"-24";i:2;s:3:"638";i:3;s:3:"463";}}i:250;a:4:{s:1:"C";s:3:"250";s:2:"WX";s:3:"600";s:1:"N";s:2:"oe";s:1:"B";a:4:{i:0;s:2:"18";i:1;s:3:"-15";i:2;s:3:"662";i:3;s:3:"454";}}s:2:"oe";a:4:{s:1:"C";s:3:"250";s:2:"WX";s:3:"600";s:1:"N";s:2:"oe";s:1:"B";a:4:{i:0;s:2:"18";i:1;s:3:"-15";i:2;s:3:"662";i:3;s:3:"454";}}i:251;a:4:{s:1:"C";s:3:"251";s:2:"WX";s:3:"600";s:1:"N";s:10:"germandbls";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:3:"-15";i:2;s:3:"629";i:3;s:3:"626";}}s:10:"germandbls";a:4:{s:1:"C";s:3:"251";s:2:"WX";s:3:"600";s:1:"N";s:10:"germandbls";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:3:"-15";i:2;s:3:"629";i:3;s:3:"626";}}s:9:"Idieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"Idieresis";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:1:"0";i:2;s:3:"643";i:3;s:3:"761";}}s:6:"eacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"eacute";s:1:"B";a:4:{i:0;s:2:"81";i:1;s:3:"-15";i:2;s:3:"609";i:3;s:3:"661";}}s:6:"abreve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"abreve";s:1:"B";a:4:{i:0;s:2:"61";i:1;s:3:"-15";i:2;s:3:"658";i:3;s:3:"661";}}s:13:"uhungarumlaut";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:13:"uhungarumlaut";s:1:"B";a:4:{i:0;s:2:"70";i:1;s:3:"-15";i:2;s:3:"769";i:3;s:3:"661";}}s:6:"ecaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"ecaron";s:1:"B";a:4:{i:0;s:2:"81";i:1;s:3:"-15";i:2;s:3:"633";i:3;s:3:"667";}}s:9:"Ydieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"Ydieresis";s:1:"B";a:4:{i:0;s:3:"109";i:1;s:1:"0";i:2;s:3:"709";i:3;s:3:"761";}}s:6:"divide";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"divide";s:1:"B";a:4:{i:0;s:3:"114";i:1;s:2:"16";i:2;s:3:"596";i:3;s:3:"500";}}s:6:"Yacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Yacute";s:1:"B";a:4:{i:0;s:3:"109";i:1;s:1:"0";i:2;s:3:"709";i:3;s:3:"784";}}s:11:"Acircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:11:"Acircumflex";s:1:"B";a:4:{i:0;s:2:"-9";i:1;s:1:"0";i:2;s:3:"632";i:3;s:3:"780";}}s:6:"aacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"aacute";s:1:"B";a:4:{i:0;s:2:"61";i:1;s:3:"-15";i:2;s:3:"609";i:3;s:3:"661";}}s:11:"Ucircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:11:"Ucircumflex";s:1:"B";a:4:{i:0;s:3:"101";i:1;s:3:"-18";i:2;s:3:"716";i:3;s:3:"780";}}s:6:"yacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"yacute";s:1:"B";a:4:{i:0;s:3:"-21";i:1;s:4:"-142";i:2;s:3:"695";i:3;s:3:"661";}}s:12:"scommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"scommaaccent";s:1:"B";a:4:{i:0;s:2:"66";i:1;s:4:"-250";i:2;s:3:"608";i:3;s:3:"459";}}s:11:"ecircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:11:"ecircumflex";s:1:"B";a:4:{i:0;s:2:"81";i:1;s:3:"-15";i:2;s:3:"607";i:3;s:3:"657";}}s:5:"Uring";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:5:"Uring";s:1:"B";a:4:{i:0;s:3:"101";i:1;s:3:"-18";i:2;s:3:"716";i:3;s:3:"801";}}s:9:"Udieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"Udieresis";s:1:"B";a:4:{i:0;s:3:"101";i:1;s:3:"-18";i:2;s:3:"716";i:3;s:3:"761";}}s:7:"aogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"aogonek";s:1:"B";a:4:{i:0;s:2:"61";i:1;s:4:"-199";i:2;s:3:"593";i:3;s:3:"454";}}s:6:"Uacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Uacute";s:1:"B";a:4:{i:0;s:3:"101";i:1;s:3:"-18";i:2;s:3:"716";i:3;s:3:"784";}}s:7:"uogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"uogonek";s:1:"B";a:4:{i:0;s:2:"70";i:1;s:4:"-199";i:2;s:3:"592";i:3;s:3:"439";}}s:9:"Edieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"Edieresis";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:1:"0";i:2;s:3:"670";i:3;s:3:"761";}}s:6:"Dcroat";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Dcroat";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:1:"0";i:2;s:3:"664";i:3;s:3:"562";}}s:11:"commaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:11:"commaaccent";s:1:"B";a:4:{i:0;s:3:"151";i:1;s:4:"-250";i:2;s:3:"385";i:3;s:3:"-57";}}s:9:"copyright";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"copyright";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:3:"-18";i:2;s:3:"667";i:3;s:3:"580";}}s:7:"Emacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"Emacron";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:1:"0";i:2;s:3:"670";i:3;s:3:"708";}}s:6:"ccaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"ccaron";s:1:"B";a:4:{i:0;s:2:"81";i:1;s:3:"-15";i:2;s:3:"633";i:3;s:3:"667";}}s:5:"aring";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:5:"aring";s:1:"B";a:4:{i:0;s:2:"61";i:1;s:3:"-15";i:2;s:3:"593";i:3;s:3:"678";}}s:12:"Ncommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"Ncommaaccent";s:1:"B";a:4:{i:0;s:1:"8";i:1;s:4:"-250";i:2;s:3:"730";i:3;s:3:"562";}}s:6:"lacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"lacute";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:1:"0";i:2;s:3:"639";i:3;s:3:"801";}}s:6:"agrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"agrave";s:1:"B";a:4:{i:0;s:2:"61";i:1;s:3:"-15";i:2;s:3:"593";i:3;s:3:"661";}}s:12:"Tcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"Tcommaaccent";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:4:"-250";i:2;s:3:"679";i:3;s:3:"562";}}s:6:"Cacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Cacute";s:1:"B";a:4:{i:0;s:2:"74";i:1;s:3:"-18";i:2;s:3:"675";i:3;s:3:"784";}}s:6:"atilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"atilde";s:1:"B";a:4:{i:0;s:2:"61";i:1;s:3:"-15";i:2;s:3:"643";i:3;s:3:"636";}}s:10:"Edotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:10:"Edotaccent";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:1:"0";i:2;s:3:"670";i:3;s:3:"761";}}s:6:"scaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"scaron";s:1:"B";a:4:{i:0;s:2:"66";i:1;s:3:"-17";i:2;s:3:"633";i:3;s:3:"667";}}s:8:"scedilla";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:8:"scedilla";s:1:"B";a:4:{i:0;s:2:"66";i:1;s:4:"-206";i:2;s:3:"608";i:3;s:3:"459";}}s:6:"iacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"iacute";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:1:"0";i:2;s:3:"609";i:3;s:3:"661";}}s:7:"lozenge";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"lozenge";s:1:"B";a:4:{i:0;s:3:"145";i:1;s:1:"0";i:2;s:3:"614";i:3;s:3:"740";}}s:6:"Rcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Rcaron";s:1:"B";a:4:{i:0;s:2:"24";i:1;s:1:"0";i:2;s:3:"659";i:3;s:3:"790";}}s:12:"Gcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"Gcommaaccent";s:1:"B";a:4:{i:0;s:2:"74";i:1;s:4:"-250";i:2;s:3:"675";i:3;s:3:"580";}}s:11:"ucircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:11:"ucircumflex";s:1:"B";a:4:{i:0;s:2:"70";i:1;s:3:"-15";i:2;s:3:"597";i:3;s:3:"657";}}s:11:"acircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:11:"acircumflex";s:1:"B";a:4:{i:0;s:2:"61";i:1;s:3:"-15";i:2;s:3:"607";i:3;s:3:"657";}}s:7:"Amacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"Amacron";s:1:"B";a:4:{i:0;s:2:"-9";i:1;s:1:"0";i:2;s:3:"633";i:3;s:3:"708";}}s:6:"rcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"rcaron";s:1:"B";a:4:{i:0;s:2:"47";i:1;s:1:"0";i:2;s:3:"655";i:3;s:3:"667";}}s:8:"ccedilla";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:8:"ccedilla";s:1:"B";a:4:{i:0;s:2:"81";i:1;s:4:"-206";i:2;s:3:"631";i:3;s:3:"459";}}s:10:"Zdotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:10:"Zdotaccent";s:1:"B";a:4:{i:0;s:2:"62";i:1;s:1:"0";i:2;s:3:"637";i:3;s:3:"761";}}s:5:"Thorn";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:5:"Thorn";s:1:"B";a:4:{i:0;s:2:"48";i:1;s:1:"0";i:2;s:3:"620";i:3;s:3:"562";}}s:7:"Omacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"Omacron";s:1:"B";a:4:{i:0;s:2:"74";i:1;s:3:"-18";i:2;s:3:"663";i:3;s:3:"708";}}s:6:"Racute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Racute";s:1:"B";a:4:{i:0;s:2:"24";i:1;s:1:"0";i:2;s:3:"665";i:3;s:3:"784";}}s:6:"Sacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Sacute";s:1:"B";a:4:{i:0;s:2:"54";i:1;s:3:"-22";i:2;s:3:"673";i:3;s:3:"784";}}s:6:"dcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"dcaron";s:1:"B";a:4:{i:0;s:2:"60";i:1;s:3:"-15";i:2;s:3:"861";i:3;s:3:"626";}}s:7:"Umacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"Umacron";s:1:"B";a:4:{i:0;s:3:"101";i:1;s:3:"-18";i:2;s:3:"716";i:3;s:3:"708";}}s:5:"uring";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:5:"uring";s:1:"B";a:4:{i:0;s:2:"70";i:1;s:3:"-15";i:2;s:3:"592";i:3;s:3:"678";}}s:13:"threesuperior";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:13:"threesuperior";s:1:"B";a:4:{i:0;s:3:"193";i:1;s:3:"222";i:2;s:3:"526";i:3;s:3:"616";}}s:6:"Ograve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Ograve";s:1:"B";a:4:{i:0;s:2:"74";i:1;s:3:"-18";i:2;s:3:"645";i:3;s:3:"784";}}s:6:"Agrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Agrave";s:1:"B";a:4:{i:0;s:2:"-9";i:1;s:1:"0";i:2;s:3:"632";i:3;s:3:"784";}}s:6:"Abreve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Abreve";s:1:"B";a:4:{i:0;s:2:"-9";i:1;s:1:"0";i:2;s:3:"684";i:3;s:3:"784";}}s:8:"multiply";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:8:"multiply";s:1:"B";a:4:{i:0;s:3:"104";i:1;s:2:"39";i:2;s:3:"606";i:3;s:3:"478";}}s:6:"uacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"uacute";s:1:"B";a:4:{i:0;s:2:"70";i:1;s:3:"-15";i:2;s:3:"599";i:3;s:3:"661";}}s:6:"Tcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Tcaron";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:1:"0";i:2;s:3:"679";i:3;s:3:"790";}}s:11:"partialdiff";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:11:"partialdiff";s:1:"B";a:4:{i:0;s:2:"91";i:1;s:3:"-38";i:2;s:3:"627";i:3;s:3:"728";}}s:9:"ydieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"ydieresis";s:1:"B";a:4:{i:0;s:3:"-21";i:1;s:4:"-142";i:2;s:3:"695";i:3;s:3:"638";}}s:6:"Nacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Nacute";s:1:"B";a:4:{i:0;s:1:"8";i:1;s:3:"-12";i:2;s:3:"730";i:3;s:3:"784";}}s:11:"icircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:11:"icircumflex";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:1:"0";i:2;s:3:"577";i:3;s:3:"657";}}s:11:"Ecircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:11:"Ecircumflex";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:1:"0";i:2;s:3:"670";i:3;s:3:"780";}}s:9:"adieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"adieresis";s:1:"B";a:4:{i:0;s:2:"61";i:1;s:3:"-15";i:2;s:3:"595";i:3;s:3:"638";}}s:9:"edieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"edieresis";s:1:"B";a:4:{i:0;s:2:"81";i:1;s:3:"-15";i:2;s:3:"605";i:3;s:3:"638";}}s:6:"cacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"cacute";s:1:"B";a:4:{i:0;s:2:"81";i:1;s:3:"-15";i:2;s:3:"649";i:3;s:3:"661";}}s:6:"nacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"nacute";s:1:"B";a:4:{i:0;s:2:"18";i:1;s:1:"0";i:2;s:3:"639";i:3;s:3:"661";}}s:7:"umacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"umacron";s:1:"B";a:4:{i:0;s:2:"70";i:1;s:3:"-15";i:2;s:3:"637";i:3;s:3:"585";}}s:6:"Ncaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Ncaron";s:1:"B";a:4:{i:0;s:1:"8";i:1;s:3:"-12";i:2;s:3:"730";i:3;s:3:"790";}}s:6:"Iacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Iacute";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:1:"0";i:2;s:3:"643";i:3;s:3:"784";}}s:9:"plusminus";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"plusminus";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:2:"24";i:2;s:3:"614";i:3;s:3:"515";}}s:9:"brokenbar";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"brokenbar";s:1:"B";a:4:{i:0;s:3:"217";i:1;s:4:"-175";i:2;s:3:"489";i:3;s:3:"675";}}s:10:"registered";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:10:"registered";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:3:"-18";i:2;s:3:"667";i:3;s:3:"580";}}s:6:"Gbreve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Gbreve";s:1:"B";a:4:{i:0;s:2:"74";i:1;s:3:"-18";i:2;s:3:"684";i:3;s:3:"784";}}s:10:"Idotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:10:"Idotaccent";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:1:"0";i:2;s:3:"643";i:3;s:3:"761";}}s:9:"summation";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"summation";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:3:"-10";i:2;s:3:"672";i:3;s:3:"706";}}s:6:"Egrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Egrave";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:1:"0";i:2;s:3:"670";i:3;s:3:"784";}}s:6:"racute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"racute";s:1:"B";a:4:{i:0;s:2:"47";i:1;s:1:"0";i:2;s:3:"655";i:3;s:3:"661";}}s:7:"omacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"omacron";s:1:"B";a:4:{i:0;s:2:"71";i:1;s:3:"-15";i:2;s:3:"637";i:3;s:3:"585";}}s:6:"Zacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Zacute";s:1:"B";a:4:{i:0;s:2:"62";i:1;s:1:"0";i:2;s:3:"665";i:3;s:3:"784";}}s:6:"Zcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Zcaron";s:1:"B";a:4:{i:0;s:2:"62";i:1;s:1:"0";i:2;s:3:"659";i:3;s:3:"790";}}s:12:"greaterequal";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"greaterequal";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:1:"0";i:2;s:3:"627";i:3;s:3:"696";}}s:3:"Eth";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:3:"Eth";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:1:"0";i:2;s:3:"664";i:3;s:3:"562";}}s:8:"Ccedilla";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:8:"Ccedilla";s:1:"B";a:4:{i:0;s:2:"74";i:1;s:4:"-206";i:2;s:3:"675";i:3;s:3:"580";}}s:12:"lcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"lcommaaccent";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:4:"-250";i:2;s:3:"546";i:3;s:3:"626";}}s:6:"tcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"tcaron";s:1:"B";a:4:{i:0;s:3:"118";i:1;s:3:"-15";i:2;s:3:"627";i:3;s:3:"703";}}s:7:"eogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"eogonek";s:1:"B";a:4:{i:0;s:2:"81";i:1;s:4:"-199";i:2;s:3:"605";i:3;s:3:"454";}}s:7:"Uogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"Uogonek";s:1:"B";a:4:{i:0;s:3:"101";i:1;s:4:"-199";i:2;s:3:"716";i:3;s:3:"562";}}s:6:"Aacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Aacute";s:1:"B";a:4:{i:0;s:2:"-9";i:1;s:1:"0";i:2;s:3:"655";i:3;s:3:"784";}}s:9:"Adieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"Adieresis";s:1:"B";a:4:{i:0;s:2:"-9";i:1;s:1:"0";i:2;s:3:"632";i:3;s:3:"761";}}s:6:"egrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"egrave";s:1:"B";a:4:{i:0;s:2:"81";i:1;s:3:"-15";i:2;s:3:"605";i:3;s:3:"661";}}s:6:"zacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"zacute";s:1:"B";a:4:{i:0;s:2:"81";i:1;s:1:"0";i:2;s:3:"614";i:3;s:3:"661";}}s:7:"iogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"iogonek";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:4:"-199";i:2;s:3:"546";i:3;s:3:"658";}}s:6:"Oacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Oacute";s:1:"B";a:4:{i:0;s:2:"74";i:1;s:3:"-18";i:2;s:3:"645";i:3;s:3:"784";}}s:6:"oacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"oacute";s:1:"B";a:4:{i:0;s:2:"71";i:1;s:3:"-15";i:2;s:3:"649";i:3;s:3:"661";}}s:7:"amacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"amacron";s:1:"B";a:4:{i:0;s:2:"61";i:1;s:3:"-15";i:2;s:3:"637";i:3;s:3:"585";}}s:6:"sacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"sacute";s:1:"B";a:4:{i:0;s:2:"66";i:1;s:3:"-17";i:2;s:3:"609";i:3;s:3:"661";}}s:9:"idieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"idieresis";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:1:"0";i:2;s:3:"561";i:3;s:3:"618";}}s:11:"Ocircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:11:"Ocircumflex";s:1:"B";a:4:{i:0;s:2:"74";i:1;s:3:"-18";i:2;s:3:"645";i:3;s:3:"780";}}s:6:"Ugrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Ugrave";s:1:"B";a:4:{i:0;s:3:"101";i:1;s:3:"-18";i:2;s:3:"716";i:3;s:3:"784";}}s:5:"Delta";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:5:"Delta";s:1:"B";a:4:{i:0;s:1:"6";i:1;s:1:"0";i:2;s:3:"594";i:3;s:3:"688";}}s:5:"thorn";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:5:"thorn";s:1:"B";a:4:{i:0;s:3:"-32";i:1;s:4:"-142";i:2;s:3:"622";i:3;s:3:"626";}}s:11:"twosuperior";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:11:"twosuperior";s:1:"B";a:4:{i:0;s:3:"191";i:1;s:3:"230";i:2;s:3:"542";i:3;s:3:"616";}}s:9:"Odieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"Odieresis";s:1:"B";a:4:{i:0;s:2:"74";i:1;s:3:"-18";i:2;s:3:"645";i:3;s:3:"761";}}s:2:"mu";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:2:"mu";s:1:"B";a:4:{i:0;s:2:"49";i:1;s:4:"-142";i:2;s:3:"592";i:3;s:3:"439";}}s:6:"igrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"igrave";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:1:"0";i:2;s:3:"546";i:3;s:3:"661";}}s:13:"ohungarumlaut";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:13:"ohungarumlaut";s:1:"B";a:4:{i:0;s:2:"71";i:1;s:3:"-15";i:2;s:3:"809";i:3;s:3:"661";}}s:7:"Eogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"Eogonek";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:4:"-199";i:2;s:3:"670";i:3;s:3:"562";}}s:6:"dcroat";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"dcroat";s:1:"B";a:4:{i:0;s:2:"60";i:1;s:3:"-15";i:2;s:3:"712";i:3;s:3:"626";}}s:13:"threequarters";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:13:"threequarters";s:1:"B";a:4:{i:0;s:1:"8";i:1;s:3:"-60";i:2;s:3:"699";i:3;s:3:"661";}}s:8:"Scedilla";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:8:"Scedilla";s:1:"B";a:4:{i:0;s:2:"54";i:1;s:4:"-206";i:2;s:3:"673";i:3;s:3:"582";}}s:6:"lcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"lcaron";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:1:"0";i:2;s:3:"731";i:3;s:3:"626";}}s:12:"Kcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"Kcommaaccent";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:4:"-250";i:2;s:3:"692";i:3;s:3:"562";}}s:6:"Lacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Lacute";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:1:"0";i:2;s:3:"636";i:3;s:3:"784";}}s:9:"trademark";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"trademark";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:3:"230";i:2;s:3:"869";i:3;s:3:"562";}}s:10:"edotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:10:"edotaccent";s:1:"B";a:4:{i:0;s:2:"81";i:1;s:3:"-15";i:2;s:3:"605";i:3;s:3:"638";}}s:6:"Igrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Igrave";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:1:"0";i:2;s:3:"643";i:3;s:3:"784";}}s:7:"Imacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"Imacron";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:1:"0";i:2;s:3:"663";i:3;s:3:"708";}}s:6:"Lcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Lcaron";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:1:"0";i:2;s:3:"757";i:3;s:3:"562";}}s:7:"onehalf";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"onehalf";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:3:"-60";i:2;s:3:"716";i:3;s:3:"661";}}s:9:"lessequal";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"lessequal";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:1:"0";i:2;s:3:"671";i:3;s:3:"696";}}s:11:"ocircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:11:"ocircumflex";s:1:"B";a:4:{i:0;s:2:"71";i:1;s:3:"-15";i:2;s:3:"622";i:3;s:3:"657";}}s:6:"ntilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"ntilde";s:1:"B";a:4:{i:0;s:2:"18";i:1;s:1:"0";i:2;s:3:"643";i:3;s:3:"636";}}s:13:"Uhungarumlaut";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:13:"Uhungarumlaut";s:1:"B";a:4:{i:0;s:3:"101";i:1;s:3:"-18";i:2;s:3:"805";i:3;s:3:"784";}}s:6:"Eacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Eacute";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:1:"0";i:2;s:3:"670";i:3;s:3:"784";}}s:7:"emacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"emacron";s:1:"B";a:4:{i:0;s:2:"81";i:1;s:3:"-15";i:2;s:3:"637";i:3;s:3:"585";}}s:6:"gbreve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"gbreve";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:4:"-146";i:2;s:3:"674";i:3;s:3:"661";}}s:10:"onequarter";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:10:"onequarter";s:1:"B";a:4:{i:0;s:2:"13";i:1;s:3:"-60";i:2;s:3:"707";i:3;s:3:"661";}}s:6:"Scaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Scaron";s:1:"B";a:4:{i:0;s:2:"54";i:1;s:3:"-22";i:2;s:3:"689";i:3;s:3:"790";}}s:12:"Scommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"Scommaaccent";s:1:"B";a:4:{i:0;s:2:"54";i:1;s:4:"-250";i:2;s:3:"673";i:3;s:3:"582";}}s:13:"Ohungarumlaut";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:13:"Ohungarumlaut";s:1:"B";a:4:{i:0;s:2:"74";i:1;s:3:"-18";i:2;s:3:"795";i:3;s:3:"784";}}s:6:"degree";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"degree";s:1:"B";a:4:{i:0;s:3:"173";i:1;s:3:"243";i:2;s:3:"570";i:3;s:3:"616";}}s:6:"ograve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"ograve";s:1:"B";a:4:{i:0;s:2:"71";i:1;s:3:"-15";i:2;s:3:"622";i:3;s:3:"661";}}s:6:"Ccaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Ccaron";s:1:"B";a:4:{i:0;s:2:"74";i:1;s:3:"-18";i:2;s:3:"689";i:3;s:3:"790";}}s:6:"ugrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"ugrave";s:1:"B";a:4:{i:0;s:2:"70";i:1;s:3:"-15";i:2;s:3:"592";i:3;s:3:"661";}}s:7:"radical";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"radical";s:1:"B";a:4:{i:0;s:2:"67";i:1;s:4:"-104";i:2;s:3:"635";i:3;s:3:"778";}}s:6:"Dcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Dcaron";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:1:"0";i:2;s:3:"664";i:3;s:3:"790";}}s:12:"rcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"rcommaaccent";s:1:"B";a:4:{i:0;s:2:"47";i:1;s:4:"-250";i:2;s:3:"655";i:3;s:3:"454";}}s:6:"Ntilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Ntilde";s:1:"B";a:4:{i:0;s:1:"8";i:1;s:3:"-12";i:2;s:3:"730";i:3;s:3:"759";}}s:6:"otilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"otilde";s:1:"B";a:4:{i:0;s:2:"71";i:1;s:3:"-15";i:2;s:3:"643";i:3;s:3:"636";}}s:12:"Rcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"Rcommaaccent";s:1:"B";a:4:{i:0;s:2:"24";i:1;s:4:"-250";i:2;s:3:"617";i:3;s:3:"562";}}s:12:"Lcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"Lcommaaccent";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:4:"-250";i:2;s:3:"636";i:3;s:3:"562";}}s:6:"Atilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Atilde";s:1:"B";a:4:{i:0;s:2:"-9";i:1;s:1:"0";i:2;s:3:"669";i:3;s:3:"759";}}s:7:"Aogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"Aogonek";s:1:"B";a:4:{i:0;s:2:"-9";i:1;s:4:"-199";i:2;s:3:"632";i:3;s:3:"562";}}s:5:"Aring";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:5:"Aring";s:1:"B";a:4:{i:0;s:2:"-9";i:1;s:1:"0";i:2;s:3:"632";i:3;s:3:"801";}}s:6:"Otilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Otilde";s:1:"B";a:4:{i:0;s:2:"74";i:1;s:3:"-18";i:2;s:3:"669";i:3;s:3:"759";}}s:10:"zdotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:10:"zdotaccent";s:1:"B";a:4:{i:0;s:2:"81";i:1;s:1:"0";i:2;s:3:"614";i:3;s:3:"638";}}s:6:"Ecaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Ecaron";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:1:"0";i:2;s:3:"670";i:3;s:3:"790";}}s:7:"Iogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"Iogonek";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:4:"-199";i:2;s:3:"643";i:3;s:3:"562";}}s:12:"kcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"kcommaaccent";s:1:"B";a:4:{i:0;s:2:"33";i:1;s:4:"-250";i:2;s:3:"643";i:3;s:3:"626";}}s:5:"minus";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:5:"minus";s:1:"B";a:4:{i:0;s:3:"114";i:1;s:3:"203";i:2;s:3:"596";i:3;s:3:"313";}}s:11:"Icircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:11:"Icircumflex";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:1:"0";i:2;s:3:"643";i:3;s:3:"780";}}s:6:"ncaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"ncaron";s:1:"B";a:4:{i:0;s:2:"18";i:1;s:1:"0";i:2;s:3:"633";i:3;s:3:"667";}}s:12:"tcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"tcommaaccent";s:1:"B";a:4:{i:0;s:3:"118";i:1;s:4:"-250";i:2;s:3:"567";i:3;s:3:"562";}}s:10:"logicalnot";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:10:"logicalnot";s:1:"B";a:4:{i:0;s:3:"135";i:1;s:3:"103";i:2;s:3:"617";i:3;s:3:"413";}}s:9:"odieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"odieresis";s:1:"B";a:4:{i:0;s:2:"71";i:1;s:3:"-15";i:2;s:3:"622";i:3;s:3:"638";}}s:9:"udieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"udieresis";s:1:"B";a:4:{i:0;s:2:"70";i:1;s:3:"-15";i:2;s:3:"595";i:3;s:3:"638";}}s:8:"notequal";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:8:"notequal";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:3:"-47";i:2;s:3:"626";i:3;s:3:"563";}}s:12:"gcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"gcommaaccent";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:4:"-146";i:2;s:3:"674";i:3;s:3:"714";}}s:3:"eth";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:3:"eth";s:1:"B";a:4:{i:0;s:2:"93";i:1;s:3:"-27";i:2;s:3:"661";i:3;s:3:"626";}}s:6:"zcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"zcaron";s:1:"B";a:4:{i:0;s:2:"81";i:1;s:1:"0";i:2;s:3:"643";i:3;s:3:"667";}}s:12:"ncommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"ncommaaccent";s:1:"B";a:4:{i:0;s:2:"18";i:1;s:4:"-250";i:2;s:3:"615";i:3;s:3:"454";}}s:11:"onesuperior";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:11:"onesuperior";s:1:"B";a:4:{i:0;s:3:"212";i:1;s:3:"230";i:2;s:3:"514";i:3;s:3:"616";}}s:7:"imacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"imacron";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:1:"0";i:2;s:3:"575";i:3;s:3:"585";}}s:4:"Euro";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:4:"Euro";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:1:"0";i:2;s:1:"0";i:3;s:1:"0";}}}s:9:"_version_";i:1;}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/php_Courier-Oblique.afm b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/php_Courier-Oblique.afm new file mode 100755 index 00000000..0e2cb5f5 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/php_Courier-Oblique.afm @@ -0,0 +1 @@ +a:21:{s:8:"FontName";s:15:"Courier-Oblique";s:8:"FullName";s:15:"Courier Oblique";s:10:"FamilyName";s:7:"Courier";s:6:"Weight";s:6:"Medium";s:11:"ItalicAngle";s:3:"-12";s:12:"IsFixedPitch";s:4:"true";s:12:"CharacterSet";s:13:"ExtendedRoman";s:8:"FontBBox";a:4:{i:0;s:3:"-27";i:1;s:4:"-250";i:2;s:3:"849";i:3;s:3:"805";}s:17:"UnderlinePosition";s:4:"-100";s:18:"UnderlineThickness";s:2:"50";s:7:"Version";s:7:"003.000";s:14:"EncodingScheme";s:21:"AdobeStandardEncoding";s:9:"CapHeight";s:3:"562";s:7:"XHeight";s:3:"426";s:8:"Ascender";s:3:"629";s:9:"Descender";s:4:"-157";s:5:"StdHW";s:2:"51";s:5:"StdVW";s:2:"51";s:16:"StartCharMetrics";s:3:"315";s:1:"C";a:464:{i:32;a:4:{s:1:"C";s:2:"32";s:2:"WX";s:3:"600";s:1:"N";s:5:"space";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:1:"0";i:2;s:1:"0";i:3;s:1:"0";}}s:5:"space";a:4:{s:1:"C";s:2:"32";s:2:"WX";s:3:"600";s:1:"N";s:5:"space";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:1:"0";i:2;s:1:"0";i:3;s:1:"0";}}i:33;a:4:{s:1:"C";s:2:"33";s:2:"WX";s:3:"600";s:1:"N";s:6:"exclam";s:1:"B";a:4:{i:0;s:3:"243";i:1;s:3:"-15";i:2;s:3:"464";i:3;s:3:"572";}}s:6:"exclam";a:4:{s:1:"C";s:2:"33";s:2:"WX";s:3:"600";s:1:"N";s:6:"exclam";s:1:"B";a:4:{i:0;s:3:"243";i:1;s:3:"-15";i:2;s:3:"464";i:3;s:3:"572";}}i:34;a:4:{s:1:"C";s:2:"34";s:2:"WX";s:3:"600";s:1:"N";s:8:"quotedbl";s:1:"B";a:4:{i:0;s:3:"273";i:1;s:3:"328";i:2;s:3:"532";i:3;s:3:"562";}}s:8:"quotedbl";a:4:{s:1:"C";s:2:"34";s:2:"WX";s:3:"600";s:1:"N";s:8:"quotedbl";s:1:"B";a:4:{i:0;s:3:"273";i:1;s:3:"328";i:2;s:3:"532";i:3;s:3:"562";}}i:35;a:4:{s:1:"C";s:2:"35";s:2:"WX";s:3:"600";s:1:"N";s:10:"numbersign";s:1:"B";a:4:{i:0;s:3:"133";i:1;s:3:"-32";i:2;s:3:"596";i:3;s:3:"639";}}s:10:"numbersign";a:4:{s:1:"C";s:2:"35";s:2:"WX";s:3:"600";s:1:"N";s:10:"numbersign";s:1:"B";a:4:{i:0;s:3:"133";i:1;s:3:"-32";i:2;s:3:"596";i:3;s:3:"639";}}i:36;a:4:{s:1:"C";s:2:"36";s:2:"WX";s:3:"600";s:1:"N";s:6:"dollar";s:1:"B";a:4:{i:0;s:3:"108";i:1;s:4:"-126";i:2;s:3:"596";i:3;s:3:"662";}}s:6:"dollar";a:4:{s:1:"C";s:2:"36";s:2:"WX";s:3:"600";s:1:"N";s:6:"dollar";s:1:"B";a:4:{i:0;s:3:"108";i:1;s:4:"-126";i:2;s:3:"596";i:3;s:3:"662";}}i:37;a:4:{s:1:"C";s:2:"37";s:2:"WX";s:3:"600";s:1:"N";s:7:"percent";s:1:"B";a:4:{i:0;s:3:"134";i:1;s:3:"-15";i:2;s:3:"599";i:3;s:3:"622";}}s:7:"percent";a:4:{s:1:"C";s:2:"37";s:2:"WX";s:3:"600";s:1:"N";s:7:"percent";s:1:"B";a:4:{i:0;s:3:"134";i:1;s:3:"-15";i:2;s:3:"599";i:3;s:3:"622";}}i:38;a:4:{s:1:"C";s:2:"38";s:2:"WX";s:3:"600";s:1:"N";s:9:"ampersand";s:1:"B";a:4:{i:0;s:2:"87";i:1;s:3:"-15";i:2;s:3:"580";i:3;s:3:"543";}}s:9:"ampersand";a:4:{s:1:"C";s:2:"38";s:2:"WX";s:3:"600";s:1:"N";s:9:"ampersand";s:1:"B";a:4:{i:0;s:2:"87";i:1;s:3:"-15";i:2;s:3:"580";i:3;s:3:"543";}}i:39;a:4:{s:1:"C";s:2:"39";s:2:"WX";s:3:"600";s:1:"N";s:10:"quoteright";s:1:"B";a:4:{i:0;s:3:"283";i:1;s:3:"328";i:2;s:3:"495";i:3;s:3:"562";}}s:10:"quoteright";a:4:{s:1:"C";s:2:"39";s:2:"WX";s:3:"600";s:1:"N";s:10:"quoteright";s:1:"B";a:4:{i:0;s:3:"283";i:1;s:3:"328";i:2;s:3:"495";i:3;s:3:"562";}}i:40;a:4:{s:1:"C";s:2:"40";s:2:"WX";s:3:"600";s:1:"N";s:9:"parenleft";s:1:"B";a:4:{i:0;s:3:"313";i:1;s:4:"-108";i:2;s:3:"572";i:3;s:3:"622";}}s:9:"parenleft";a:4:{s:1:"C";s:2:"40";s:2:"WX";s:3:"600";s:1:"N";s:9:"parenleft";s:1:"B";a:4:{i:0;s:3:"313";i:1;s:4:"-108";i:2;s:3:"572";i:3;s:3:"622";}}i:41;a:4:{s:1:"C";s:2:"41";s:2:"WX";s:3:"600";s:1:"N";s:10:"parenright";s:1:"B";a:4:{i:0;s:3:"137";i:1;s:4:"-108";i:2;s:3:"396";i:3;s:3:"622";}}s:10:"parenright";a:4:{s:1:"C";s:2:"41";s:2:"WX";s:3:"600";s:1:"N";s:10:"parenright";s:1:"B";a:4:{i:0;s:3:"137";i:1;s:4:"-108";i:2;s:3:"396";i:3;s:3:"622";}}i:42;a:4:{s:1:"C";s:2:"42";s:2:"WX";s:3:"600";s:1:"N";s:8:"asterisk";s:1:"B";a:4:{i:0;s:3:"212";i:1;s:3:"257";i:2;s:3:"580";i:3;s:3:"607";}}s:8:"asterisk";a:4:{s:1:"C";s:2:"42";s:2:"WX";s:3:"600";s:1:"N";s:8:"asterisk";s:1:"B";a:4:{i:0;s:3:"212";i:1;s:3:"257";i:2;s:3:"580";i:3;s:3:"607";}}i:43;a:4:{s:1:"C";s:2:"43";s:2:"WX";s:3:"600";s:1:"N";s:4:"plus";s:1:"B";a:4:{i:0;s:3:"129";i:1;s:2:"44";i:2;s:3:"580";i:3;s:3:"470";}}s:4:"plus";a:4:{s:1:"C";s:2:"43";s:2:"WX";s:3:"600";s:1:"N";s:4:"plus";s:1:"B";a:4:{i:0;s:3:"129";i:1;s:2:"44";i:2;s:3:"580";i:3;s:3:"470";}}i:44;a:4:{s:1:"C";s:2:"44";s:2:"WX";s:3:"600";s:1:"N";s:5:"comma";s:1:"B";a:4:{i:0;s:3:"157";i:1;s:4:"-112";i:2;s:3:"370";i:3;s:3:"122";}}s:5:"comma";a:4:{s:1:"C";s:2:"44";s:2:"WX";s:3:"600";s:1:"N";s:5:"comma";s:1:"B";a:4:{i:0;s:3:"157";i:1;s:4:"-112";i:2;s:3:"370";i:3;s:3:"122";}}i:45;a:4:{s:1:"C";s:2:"45";s:2:"WX";s:3:"600";s:1:"N";s:6:"hyphen";s:1:"B";a:4:{i:0;s:3:"152";i:1;s:3:"231";i:2;s:3:"558";i:3;s:3:"285";}}s:6:"hyphen";a:4:{s:1:"C";s:2:"45";s:2:"WX";s:3:"600";s:1:"N";s:6:"hyphen";s:1:"B";a:4:{i:0;s:3:"152";i:1;s:3:"231";i:2;s:3:"558";i:3;s:3:"285";}}i:46;a:4:{s:1:"C";s:2:"46";s:2:"WX";s:3:"600";s:1:"N";s:6:"period";s:1:"B";a:4:{i:0;s:3:"238";i:1;s:3:"-15";i:2;s:3:"382";i:3;s:3:"109";}}s:6:"period";a:4:{s:1:"C";s:2:"46";s:2:"WX";s:3:"600";s:1:"N";s:6:"period";s:1:"B";a:4:{i:0;s:3:"238";i:1;s:3:"-15";i:2;s:3:"382";i:3;s:3:"109";}}i:47;a:4:{s:1:"C";s:2:"47";s:2:"WX";s:3:"600";s:1:"N";s:5:"slash";s:1:"B";a:4:{i:0;s:3:"112";i:1;s:3:"-80";i:2;s:3:"604";i:3;s:3:"629";}}s:5:"slash";a:4:{s:1:"C";s:2:"47";s:2:"WX";s:3:"600";s:1:"N";s:5:"slash";s:1:"B";a:4:{i:0;s:3:"112";i:1;s:3:"-80";i:2;s:3:"604";i:3;s:3:"629";}}i:48;a:4:{s:1:"C";s:2:"48";s:2:"WX";s:3:"600";s:1:"N";s:4:"zero";s:1:"B";a:4:{i:0;s:3:"154";i:1;s:3:"-15";i:2;s:3:"575";i:3;s:3:"622";}}s:4:"zero";a:4:{s:1:"C";s:2:"48";s:2:"WX";s:3:"600";s:1:"N";s:4:"zero";s:1:"B";a:4:{i:0;s:3:"154";i:1;s:3:"-15";i:2;s:3:"575";i:3;s:3:"622";}}i:49;a:4:{s:1:"C";s:2:"49";s:2:"WX";s:3:"600";s:1:"N";s:3:"one";s:1:"B";a:4:{i:0;s:2:"98";i:1;s:1:"0";i:2;s:3:"515";i:3;s:3:"622";}}s:3:"one";a:4:{s:1:"C";s:2:"49";s:2:"WX";s:3:"600";s:1:"N";s:3:"one";s:1:"B";a:4:{i:0;s:2:"98";i:1;s:1:"0";i:2;s:3:"515";i:3;s:3:"622";}}i:50;a:4:{s:1:"C";s:2:"50";s:2:"WX";s:3:"600";s:1:"N";s:3:"two";s:1:"B";a:4:{i:0;s:2:"70";i:1;s:1:"0";i:2;s:3:"568";i:3;s:3:"622";}}s:3:"two";a:4:{s:1:"C";s:2:"50";s:2:"WX";s:3:"600";s:1:"N";s:3:"two";s:1:"B";a:4:{i:0;s:2:"70";i:1;s:1:"0";i:2;s:3:"568";i:3;s:3:"622";}}i:51;a:4:{s:1:"C";s:2:"51";s:2:"WX";s:3:"600";s:1:"N";s:5:"three";s:1:"B";a:4:{i:0;s:2:"82";i:1;s:3:"-15";i:2;s:3:"538";i:3;s:3:"622";}}s:5:"three";a:4:{s:1:"C";s:2:"51";s:2:"WX";s:3:"600";s:1:"N";s:5:"three";s:1:"B";a:4:{i:0;s:2:"82";i:1;s:3:"-15";i:2;s:3:"538";i:3;s:3:"622";}}i:52;a:4:{s:1:"C";s:2:"52";s:2:"WX";s:3:"600";s:1:"N";s:4:"four";s:1:"B";a:4:{i:0;s:3:"108";i:1;s:1:"0";i:2;s:3:"541";i:3;s:3:"622";}}s:4:"four";a:4:{s:1:"C";s:2:"52";s:2:"WX";s:3:"600";s:1:"N";s:4:"four";s:1:"B";a:4:{i:0;s:3:"108";i:1;s:1:"0";i:2;s:3:"541";i:3;s:3:"622";}}i:53;a:4:{s:1:"C";s:2:"53";s:2:"WX";s:3:"600";s:1:"N";s:4:"five";s:1:"B";a:4:{i:0;s:2:"99";i:1;s:3:"-15";i:2;s:3:"589";i:3;s:3:"607";}}s:4:"five";a:4:{s:1:"C";s:2:"53";s:2:"WX";s:3:"600";s:1:"N";s:4:"five";s:1:"B";a:4:{i:0;s:2:"99";i:1;s:3:"-15";i:2;s:3:"589";i:3;s:3:"607";}}i:54;a:4:{s:1:"C";s:2:"54";s:2:"WX";s:3:"600";s:1:"N";s:3:"six";s:1:"B";a:4:{i:0;s:3:"155";i:1;s:3:"-15";i:2;s:3:"629";i:3;s:3:"622";}}s:3:"six";a:4:{s:1:"C";s:2:"54";s:2:"WX";s:3:"600";s:1:"N";s:3:"six";s:1:"B";a:4:{i:0;s:3:"155";i:1;s:3:"-15";i:2;s:3:"629";i:3;s:3:"622";}}i:55;a:4:{s:1:"C";s:2:"55";s:2:"WX";s:3:"600";s:1:"N";s:5:"seven";s:1:"B";a:4:{i:0;s:3:"182";i:1;s:1:"0";i:2;s:3:"612";i:3;s:3:"607";}}s:5:"seven";a:4:{s:1:"C";s:2:"55";s:2:"WX";s:3:"600";s:1:"N";s:5:"seven";s:1:"B";a:4:{i:0;s:3:"182";i:1;s:1:"0";i:2;s:3:"612";i:3;s:3:"607";}}i:56;a:4:{s:1:"C";s:2:"56";s:2:"WX";s:3:"600";s:1:"N";s:5:"eight";s:1:"B";a:4:{i:0;s:3:"132";i:1;s:3:"-15";i:2;s:3:"588";i:3;s:3:"622";}}s:5:"eight";a:4:{s:1:"C";s:2:"56";s:2:"WX";s:3:"600";s:1:"N";s:5:"eight";s:1:"B";a:4:{i:0;s:3:"132";i:1;s:3:"-15";i:2;s:3:"588";i:3;s:3:"622";}}i:57;a:4:{s:1:"C";s:2:"57";s:2:"WX";s:3:"600";s:1:"N";s:4:"nine";s:1:"B";a:4:{i:0;s:2:"93";i:1;s:3:"-15";i:2;s:3:"574";i:3;s:3:"622";}}s:4:"nine";a:4:{s:1:"C";s:2:"57";s:2:"WX";s:3:"600";s:1:"N";s:4:"nine";s:1:"B";a:4:{i:0;s:2:"93";i:1;s:3:"-15";i:2;s:3:"574";i:3;s:3:"622";}}i:58;a:4:{s:1:"C";s:2:"58";s:2:"WX";s:3:"600";s:1:"N";s:5:"colon";s:1:"B";a:4:{i:0;s:3:"238";i:1;s:3:"-15";i:2;s:3:"441";i:3;s:3:"385";}}s:5:"colon";a:4:{s:1:"C";s:2:"58";s:2:"WX";s:3:"600";s:1:"N";s:5:"colon";s:1:"B";a:4:{i:0;s:3:"238";i:1;s:3:"-15";i:2;s:3:"441";i:3;s:3:"385";}}i:59;a:4:{s:1:"C";s:2:"59";s:2:"WX";s:3:"600";s:1:"N";s:9:"semicolon";s:1:"B";a:4:{i:0;s:3:"157";i:1;s:4:"-112";i:2;s:3:"441";i:3;s:3:"385";}}s:9:"semicolon";a:4:{s:1:"C";s:2:"59";s:2:"WX";s:3:"600";s:1:"N";s:9:"semicolon";s:1:"B";a:4:{i:0;s:3:"157";i:1;s:4:"-112";i:2;s:3:"441";i:3;s:3:"385";}}i:60;a:4:{s:1:"C";s:2:"60";s:2:"WX";s:3:"600";s:1:"N";s:4:"less";s:1:"B";a:4:{i:0;s:2:"96";i:1;s:2:"42";i:2;s:3:"610";i:3;s:3:"472";}}s:4:"less";a:4:{s:1:"C";s:2:"60";s:2:"WX";s:3:"600";s:1:"N";s:4:"less";s:1:"B";a:4:{i:0;s:2:"96";i:1;s:2:"42";i:2;s:3:"610";i:3;s:3:"472";}}i:61;a:4:{s:1:"C";s:2:"61";s:2:"WX";s:3:"600";s:1:"N";s:5:"equal";s:1:"B";a:4:{i:0;s:3:"109";i:1;s:3:"138";i:2;s:3:"600";i:3;s:3:"376";}}s:5:"equal";a:4:{s:1:"C";s:2:"61";s:2:"WX";s:3:"600";s:1:"N";s:5:"equal";s:1:"B";a:4:{i:0;s:3:"109";i:1;s:3:"138";i:2;s:3:"600";i:3;s:3:"376";}}i:62;a:4:{s:1:"C";s:2:"62";s:2:"WX";s:3:"600";s:1:"N";s:7:"greater";s:1:"B";a:4:{i:0;s:2:"85";i:1;s:2:"42";i:2;s:3:"599";i:3;s:3:"472";}}s:7:"greater";a:4:{s:1:"C";s:2:"62";s:2:"WX";s:3:"600";s:1:"N";s:7:"greater";s:1:"B";a:4:{i:0;s:2:"85";i:1;s:2:"42";i:2;s:3:"599";i:3;s:3:"472";}}i:63;a:4:{s:1:"C";s:2:"63";s:2:"WX";s:3:"600";s:1:"N";s:8:"question";s:1:"B";a:4:{i:0;s:3:"222";i:1;s:3:"-15";i:2;s:3:"583";i:3;s:3:"572";}}s:8:"question";a:4:{s:1:"C";s:2:"63";s:2:"WX";s:3:"600";s:1:"N";s:8:"question";s:1:"B";a:4:{i:0;s:3:"222";i:1;s:3:"-15";i:2;s:3:"583";i:3;s:3:"572";}}i:64;a:4:{s:1:"C";s:2:"64";s:2:"WX";s:3:"600";s:1:"N";s:2:"at";s:1:"B";a:4:{i:0;s:3:"127";i:1;s:3:"-15";i:2;s:3:"582";i:3;s:3:"622";}}s:2:"at";a:4:{s:1:"C";s:2:"64";s:2:"WX";s:3:"600";s:1:"N";s:2:"at";s:1:"B";a:4:{i:0;s:3:"127";i:1;s:3:"-15";i:2;s:3:"582";i:3;s:3:"622";}}i:65;a:4:{s:1:"C";s:2:"65";s:2:"WX";s:3:"600";s:1:"N";s:1:"A";s:1:"B";a:4:{i:0;s:1:"3";i:1;s:1:"0";i:2;s:3:"607";i:3;s:3:"562";}}s:1:"A";a:4:{s:1:"C";s:2:"65";s:2:"WX";s:3:"600";s:1:"N";s:1:"A";s:1:"B";a:4:{i:0;s:1:"3";i:1;s:1:"0";i:2;s:3:"607";i:3;s:3:"562";}}i:66;a:4:{s:1:"C";s:2:"66";s:2:"WX";s:3:"600";s:1:"N";s:1:"B";s:1:"B";a:4:{i:0;s:2:"43";i:1;s:1:"0";i:2;s:3:"616";i:3;s:3:"562";}}s:1:"B";a:4:{s:1:"C";s:2:"66";s:2:"WX";s:3:"600";s:1:"N";s:1:"B";s:1:"B";a:4:{i:0;s:2:"43";i:1;s:1:"0";i:2;s:3:"616";i:3;s:3:"562";}}i:67;a:4:{s:1:"C";s:2:"67";s:2:"WX";s:3:"600";s:1:"N";s:1:"C";s:1:"B";a:4:{i:0;s:2:"93";i:1;s:3:"-18";i:2;s:3:"655";i:3;s:3:"580";}}s:1:"C";a:4:{s:1:"C";s:2:"67";s:2:"WX";s:3:"600";s:1:"N";s:1:"C";s:1:"B";a:4:{i:0;s:2:"93";i:1;s:3:"-18";i:2;s:3:"655";i:3;s:3:"580";}}i:68;a:4:{s:1:"C";s:2:"68";s:2:"WX";s:3:"600";s:1:"N";s:1:"D";s:1:"B";a:4:{i:0;s:2:"43";i:1;s:1:"0";i:2;s:3:"645";i:3;s:3:"562";}}s:1:"D";a:4:{s:1:"C";s:2:"68";s:2:"WX";s:3:"600";s:1:"N";s:1:"D";s:1:"B";a:4:{i:0;s:2:"43";i:1;s:1:"0";i:2;s:3:"645";i:3;s:3:"562";}}i:69;a:4:{s:1:"C";s:2:"69";s:2:"WX";s:3:"600";s:1:"N";s:1:"E";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:1:"0";i:2;s:3:"660";i:3;s:3:"562";}}s:1:"E";a:4:{s:1:"C";s:2:"69";s:2:"WX";s:3:"600";s:1:"N";s:1:"E";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:1:"0";i:2;s:3:"660";i:3;s:3:"562";}}i:70;a:4:{s:1:"C";s:2:"70";s:2:"WX";s:3:"600";s:1:"N";s:1:"F";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:1:"0";i:2;s:3:"660";i:3;s:3:"562";}}s:1:"F";a:4:{s:1:"C";s:2:"70";s:2:"WX";s:3:"600";s:1:"N";s:1:"F";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:1:"0";i:2;s:3:"660";i:3;s:3:"562";}}i:71;a:4:{s:1:"C";s:2:"71";s:2:"WX";s:3:"600";s:1:"N";s:1:"G";s:1:"B";a:4:{i:0;s:2:"83";i:1;s:3:"-18";i:2;s:3:"645";i:3;s:3:"580";}}s:1:"G";a:4:{s:1:"C";s:2:"71";s:2:"WX";s:3:"600";s:1:"N";s:1:"G";s:1:"B";a:4:{i:0;s:2:"83";i:1;s:3:"-18";i:2;s:3:"645";i:3;s:3:"580";}}i:72;a:4:{s:1:"C";s:2:"72";s:2:"WX";s:3:"600";s:1:"N";s:1:"H";s:1:"B";a:4:{i:0;s:2:"32";i:1;s:1:"0";i:2;s:3:"687";i:3;s:3:"562";}}s:1:"H";a:4:{s:1:"C";s:2:"72";s:2:"WX";s:3:"600";s:1:"N";s:1:"H";s:1:"B";a:4:{i:0;s:2:"32";i:1;s:1:"0";i:2;s:3:"687";i:3;s:3:"562";}}i:73;a:4:{s:1:"C";s:2:"73";s:2:"WX";s:3:"600";s:1:"N";s:1:"I";s:1:"B";a:4:{i:0;s:2:"96";i:1;s:1:"0";i:2;s:3:"623";i:3;s:3:"562";}}s:1:"I";a:4:{s:1:"C";s:2:"73";s:2:"WX";s:3:"600";s:1:"N";s:1:"I";s:1:"B";a:4:{i:0;s:2:"96";i:1;s:1:"0";i:2;s:3:"623";i:3;s:3:"562";}}i:74;a:4:{s:1:"C";s:2:"74";s:2:"WX";s:3:"600";s:1:"N";s:1:"J";s:1:"B";a:4:{i:0;s:2:"52";i:1;s:3:"-18";i:2;s:3:"685";i:3;s:3:"562";}}s:1:"J";a:4:{s:1:"C";s:2:"74";s:2:"WX";s:3:"600";s:1:"N";s:1:"J";s:1:"B";a:4:{i:0;s:2:"52";i:1;s:3:"-18";i:2;s:3:"685";i:3;s:3:"562";}}i:75;a:4:{s:1:"C";s:2:"75";s:2:"WX";s:3:"600";s:1:"N";s:1:"K";s:1:"B";a:4:{i:0;s:2:"38";i:1;s:1:"0";i:2;s:3:"671";i:3;s:3:"562";}}s:1:"K";a:4:{s:1:"C";s:2:"75";s:2:"WX";s:3:"600";s:1:"N";s:1:"K";s:1:"B";a:4:{i:0;s:2:"38";i:1;s:1:"0";i:2;s:3:"671";i:3;s:3:"562";}}i:76;a:4:{s:1:"C";s:2:"76";s:2:"WX";s:3:"600";s:1:"N";s:1:"L";s:1:"B";a:4:{i:0;s:2:"47";i:1;s:1:"0";i:2;s:3:"607";i:3;s:3:"562";}}s:1:"L";a:4:{s:1:"C";s:2:"76";s:2:"WX";s:3:"600";s:1:"N";s:1:"L";s:1:"B";a:4:{i:0;s:2:"47";i:1;s:1:"0";i:2;s:3:"607";i:3;s:3:"562";}}i:77;a:4:{s:1:"C";s:2:"77";s:2:"WX";s:3:"600";s:1:"N";s:1:"M";s:1:"B";a:4:{i:0;s:1:"4";i:1;s:1:"0";i:2;s:3:"715";i:3;s:3:"562";}}s:1:"M";a:4:{s:1:"C";s:2:"77";s:2:"WX";s:3:"600";s:1:"N";s:1:"M";s:1:"B";a:4:{i:0;s:1:"4";i:1;s:1:"0";i:2;s:3:"715";i:3;s:3:"562";}}i:78;a:4:{s:1:"C";s:2:"78";s:2:"WX";s:3:"600";s:1:"N";s:1:"N";s:1:"B";a:4:{i:0;s:1:"7";i:1;s:3:"-13";i:2;s:3:"712";i:3;s:3:"562";}}s:1:"N";a:4:{s:1:"C";s:2:"78";s:2:"WX";s:3:"600";s:1:"N";s:1:"N";s:1:"B";a:4:{i:0;s:1:"7";i:1;s:3:"-13";i:2;s:3:"712";i:3;s:3:"562";}}i:79;a:4:{s:1:"C";s:2:"79";s:2:"WX";s:3:"600";s:1:"N";s:1:"O";s:1:"B";a:4:{i:0;s:2:"94";i:1;s:3:"-18";i:2;s:3:"625";i:3;s:3:"580";}}s:1:"O";a:4:{s:1:"C";s:2:"79";s:2:"WX";s:3:"600";s:1:"N";s:1:"O";s:1:"B";a:4:{i:0;s:2:"94";i:1;s:3:"-18";i:2;s:3:"625";i:3;s:3:"580";}}i:80;a:4:{s:1:"C";s:2:"80";s:2:"WX";s:3:"600";s:1:"N";s:1:"P";s:1:"B";a:4:{i:0;s:2:"79";i:1;s:1:"0";i:2;s:3:"644";i:3;s:3:"562";}}s:1:"P";a:4:{s:1:"C";s:2:"80";s:2:"WX";s:3:"600";s:1:"N";s:1:"P";s:1:"B";a:4:{i:0;s:2:"79";i:1;s:1:"0";i:2;s:3:"644";i:3;s:3:"562";}}i:81;a:4:{s:1:"C";s:2:"81";s:2:"WX";s:3:"600";s:1:"N";s:1:"Q";s:1:"B";a:4:{i:0;s:2:"95";i:1;s:4:"-138";i:2;s:3:"625";i:3;s:3:"580";}}s:1:"Q";a:4:{s:1:"C";s:2:"81";s:2:"WX";s:3:"600";s:1:"N";s:1:"Q";s:1:"B";a:4:{i:0;s:2:"95";i:1;s:4:"-138";i:2;s:3:"625";i:3;s:3:"580";}}i:82;a:4:{s:1:"C";s:2:"82";s:2:"WX";s:3:"600";s:1:"N";s:1:"R";s:1:"B";a:4:{i:0;s:2:"38";i:1;s:1:"0";i:2;s:3:"598";i:3;s:3:"562";}}s:1:"R";a:4:{s:1:"C";s:2:"82";s:2:"WX";s:3:"600";s:1:"N";s:1:"R";s:1:"B";a:4:{i:0;s:2:"38";i:1;s:1:"0";i:2;s:3:"598";i:3;s:3:"562";}}i:83;a:4:{s:1:"C";s:2:"83";s:2:"WX";s:3:"600";s:1:"N";s:1:"S";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:3:"-20";i:2;s:3:"650";i:3;s:3:"580";}}s:1:"S";a:4:{s:1:"C";s:2:"83";s:2:"WX";s:3:"600";s:1:"N";s:1:"S";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:3:"-20";i:2;s:3:"650";i:3;s:3:"580";}}i:84;a:4:{s:1:"C";s:2:"84";s:2:"WX";s:3:"600";s:1:"N";s:1:"T";s:1:"B";a:4:{i:0;s:3:"108";i:1;s:1:"0";i:2;s:3:"665";i:3;s:3:"562";}}s:1:"T";a:4:{s:1:"C";s:2:"84";s:2:"WX";s:3:"600";s:1:"N";s:1:"T";s:1:"B";a:4:{i:0;s:3:"108";i:1;s:1:"0";i:2;s:3:"665";i:3;s:3:"562";}}i:85;a:4:{s:1:"C";s:2:"85";s:2:"WX";s:3:"600";s:1:"N";s:1:"U";s:1:"B";a:4:{i:0;s:3:"125";i:1;s:3:"-18";i:2;s:3:"702";i:3;s:3:"562";}}s:1:"U";a:4:{s:1:"C";s:2:"85";s:2:"WX";s:3:"600";s:1:"N";s:1:"U";s:1:"B";a:4:{i:0;s:3:"125";i:1;s:3:"-18";i:2;s:3:"702";i:3;s:3:"562";}}i:86;a:4:{s:1:"C";s:2:"86";s:2:"WX";s:3:"600";s:1:"N";s:1:"V";s:1:"B";a:4:{i:0;s:3:"105";i:1;s:3:"-13";i:2;s:3:"723";i:3;s:3:"562";}}s:1:"V";a:4:{s:1:"C";s:2:"86";s:2:"WX";s:3:"600";s:1:"N";s:1:"V";s:1:"B";a:4:{i:0;s:3:"105";i:1;s:3:"-13";i:2;s:3:"723";i:3;s:3:"562";}}i:87;a:4:{s:1:"C";s:2:"87";s:2:"WX";s:3:"600";s:1:"N";s:1:"W";s:1:"B";a:4:{i:0;s:3:"106";i:1;s:3:"-13";i:2;s:3:"722";i:3;s:3:"562";}}s:1:"W";a:4:{s:1:"C";s:2:"87";s:2:"WX";s:3:"600";s:1:"N";s:1:"W";s:1:"B";a:4:{i:0;s:3:"106";i:1;s:3:"-13";i:2;s:3:"722";i:3;s:3:"562";}}i:88;a:4:{s:1:"C";s:2:"88";s:2:"WX";s:3:"600";s:1:"N";s:1:"X";s:1:"B";a:4:{i:0;s:2:"23";i:1;s:1:"0";i:2;s:3:"675";i:3;s:3:"562";}}s:1:"X";a:4:{s:1:"C";s:2:"88";s:2:"WX";s:3:"600";s:1:"N";s:1:"X";s:1:"B";a:4:{i:0;s:2:"23";i:1;s:1:"0";i:2;s:3:"675";i:3;s:3:"562";}}i:89;a:4:{s:1:"C";s:2:"89";s:2:"WX";s:3:"600";s:1:"N";s:1:"Y";s:1:"B";a:4:{i:0;s:3:"133";i:1;s:1:"0";i:2;s:3:"695";i:3;s:3:"562";}}s:1:"Y";a:4:{s:1:"C";s:2:"89";s:2:"WX";s:3:"600";s:1:"N";s:1:"Y";s:1:"B";a:4:{i:0;s:3:"133";i:1;s:1:"0";i:2;s:3:"695";i:3;s:3:"562";}}i:90;a:4:{s:1:"C";s:2:"90";s:2:"WX";s:3:"600";s:1:"N";s:1:"Z";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:1:"0";i:2;s:3:"610";i:3;s:3:"562";}}s:1:"Z";a:4:{s:1:"C";s:2:"90";s:2:"WX";s:3:"600";s:1:"N";s:1:"Z";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:1:"0";i:2;s:3:"610";i:3;s:3:"562";}}i:91;a:4:{s:1:"C";s:2:"91";s:2:"WX";s:3:"600";s:1:"N";s:11:"bracketleft";s:1:"B";a:4:{i:0;s:3:"246";i:1;s:4:"-108";i:2;s:3:"574";i:3;s:3:"622";}}s:11:"bracketleft";a:4:{s:1:"C";s:2:"91";s:2:"WX";s:3:"600";s:1:"N";s:11:"bracketleft";s:1:"B";a:4:{i:0;s:3:"246";i:1;s:4:"-108";i:2;s:3:"574";i:3;s:3:"622";}}i:92;a:4:{s:1:"C";s:2:"92";s:2:"WX";s:3:"600";s:1:"N";s:9:"backslash";s:1:"B";a:4:{i:0;s:3:"249";i:1;s:3:"-80";i:2;s:3:"468";i:3;s:3:"629";}}s:9:"backslash";a:4:{s:1:"C";s:2:"92";s:2:"WX";s:3:"600";s:1:"N";s:9:"backslash";s:1:"B";a:4:{i:0;s:3:"249";i:1;s:3:"-80";i:2;s:3:"468";i:3;s:3:"629";}}i:93;a:4:{s:1:"C";s:2:"93";s:2:"WX";s:3:"600";s:1:"N";s:12:"bracketright";s:1:"B";a:4:{i:0;s:3:"135";i:1;s:4:"-108";i:2;s:3:"463";i:3;s:3:"622";}}s:12:"bracketright";a:4:{s:1:"C";s:2:"93";s:2:"WX";s:3:"600";s:1:"N";s:12:"bracketright";s:1:"B";a:4:{i:0;s:3:"135";i:1;s:4:"-108";i:2;s:3:"463";i:3;s:3:"622";}}i:94;a:4:{s:1:"C";s:2:"94";s:2:"WX";s:3:"600";s:1:"N";s:11:"asciicircum";s:1:"B";a:4:{i:0;s:3:"175";i:1;s:3:"354";i:2;s:3:"587";i:3;s:3:"622";}}s:11:"asciicircum";a:4:{s:1:"C";s:2:"94";s:2:"WX";s:3:"600";s:1:"N";s:11:"asciicircum";s:1:"B";a:4:{i:0;s:3:"175";i:1;s:3:"354";i:2;s:3:"587";i:3;s:3:"622";}}i:95;a:4:{s:1:"C";s:2:"95";s:2:"WX";s:3:"600";s:1:"N";s:10:"underscore";s:1:"B";a:4:{i:0;s:3:"-27";i:1;s:4:"-125";i:2;s:3:"584";i:3;s:3:"-75";}}s:10:"underscore";a:4:{s:1:"C";s:2:"95";s:2:"WX";s:3:"600";s:1:"N";s:10:"underscore";s:1:"B";a:4:{i:0;s:3:"-27";i:1;s:4:"-125";i:2;s:3:"584";i:3;s:3:"-75";}}i:96;a:4:{s:1:"C";s:2:"96";s:2:"WX";s:3:"600";s:1:"N";s:9:"quoteleft";s:1:"B";a:4:{i:0;s:3:"343";i:1;s:3:"328";i:2;s:3:"457";i:3;s:3:"562";}}s:9:"quoteleft";a:4:{s:1:"C";s:2:"96";s:2:"WX";s:3:"600";s:1:"N";s:9:"quoteleft";s:1:"B";a:4:{i:0;s:3:"343";i:1;s:3:"328";i:2;s:3:"457";i:3;s:3:"562";}}i:97;a:4:{s:1:"C";s:2:"97";s:2:"WX";s:3:"600";s:1:"N";s:1:"a";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:3:"-15";i:2;s:3:"569";i:3;s:3:"441";}}s:1:"a";a:4:{s:1:"C";s:2:"97";s:2:"WX";s:3:"600";s:1:"N";s:1:"a";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:3:"-15";i:2;s:3:"569";i:3;s:3:"441";}}i:98;a:4:{s:1:"C";s:2:"98";s:2:"WX";s:3:"600";s:1:"N";s:1:"b";s:1:"B";a:4:{i:0;s:2:"29";i:1;s:3:"-15";i:2;s:3:"625";i:3;s:3:"629";}}s:1:"b";a:4:{s:1:"C";s:2:"98";s:2:"WX";s:3:"600";s:1:"N";s:1:"b";s:1:"B";a:4:{i:0;s:2:"29";i:1;s:3:"-15";i:2;s:3:"625";i:3;s:3:"629";}}i:99;a:4:{s:1:"C";s:2:"99";s:2:"WX";s:3:"600";s:1:"N";s:1:"c";s:1:"B";a:4:{i:0;s:3:"106";i:1;s:3:"-15";i:2;s:3:"608";i:3;s:3:"441";}}s:1:"c";a:4:{s:1:"C";s:2:"99";s:2:"WX";s:3:"600";s:1:"N";s:1:"c";s:1:"B";a:4:{i:0;s:3:"106";i:1;s:3:"-15";i:2;s:3:"608";i:3;s:3:"441";}}i:100;a:4:{s:1:"C";s:3:"100";s:2:"WX";s:3:"600";s:1:"N";s:1:"d";s:1:"B";a:4:{i:0;s:2:"85";i:1;s:3:"-15";i:2;s:3:"640";i:3;s:3:"629";}}s:1:"d";a:4:{s:1:"C";s:3:"100";s:2:"WX";s:3:"600";s:1:"N";s:1:"d";s:1:"B";a:4:{i:0;s:2:"85";i:1;s:3:"-15";i:2;s:3:"640";i:3;s:3:"629";}}i:101;a:4:{s:1:"C";s:3:"101";s:2:"WX";s:3:"600";s:1:"N";s:1:"e";s:1:"B";a:4:{i:0;s:3:"106";i:1;s:3:"-15";i:2;s:3:"598";i:3;s:3:"441";}}s:1:"e";a:4:{s:1:"C";s:3:"101";s:2:"WX";s:3:"600";s:1:"N";s:1:"e";s:1:"B";a:4:{i:0;s:3:"106";i:1;s:3:"-15";i:2;s:3:"598";i:3;s:3:"441";}}i:102;a:5:{s:1:"C";s:3:"102";s:2:"WX";s:3:"600";s:1:"N";s:1:"f";s:1:"B";a:4:{i:0;s:3:"114";i:1;s:1:"0";i:2;s:3:"662";i:3;s:3:"629";}s:1:"L";a:2:{i:0;s:1:"l";i:1;s:2:"fl";}}s:1:"f";a:5:{s:1:"C";s:3:"102";s:2:"WX";s:3:"600";s:1:"N";s:1:"f";s:1:"B";a:4:{i:0;s:3:"114";i:1;s:1:"0";i:2;s:3:"662";i:3;s:3:"629";}s:1:"L";a:2:{i:0;s:1:"l";i:1;s:2:"fl";}}i:103;a:4:{s:1:"C";s:3:"103";s:2:"WX";s:3:"600";s:1:"N";s:1:"g";s:1:"B";a:4:{i:0;s:2:"61";i:1;s:4:"-157";i:2;s:3:"657";i:3;s:3:"441";}}s:1:"g";a:4:{s:1:"C";s:3:"103";s:2:"WX";s:3:"600";s:1:"N";s:1:"g";s:1:"B";a:4:{i:0;s:2:"61";i:1;s:4:"-157";i:2;s:3:"657";i:3;s:3:"441";}}i:104;a:4:{s:1:"C";s:3:"104";s:2:"WX";s:3:"600";s:1:"N";s:1:"h";s:1:"B";a:4:{i:0;s:2:"33";i:1;s:1:"0";i:2;s:3:"592";i:3;s:3:"629";}}s:1:"h";a:4:{s:1:"C";s:3:"104";s:2:"WX";s:3:"600";s:1:"N";s:1:"h";s:1:"B";a:4:{i:0;s:2:"33";i:1;s:1:"0";i:2;s:3:"592";i:3;s:3:"629";}}i:105;a:4:{s:1:"C";s:3:"105";s:2:"WX";s:3:"600";s:1:"N";s:1:"i";s:1:"B";a:4:{i:0;s:2:"95";i:1;s:1:"0";i:2;s:3:"515";i:3;s:3:"657";}}s:1:"i";a:4:{s:1:"C";s:3:"105";s:2:"WX";s:3:"600";s:1:"N";s:1:"i";s:1:"B";a:4:{i:0;s:2:"95";i:1;s:1:"0";i:2;s:3:"515";i:3;s:3:"657";}}i:106;a:4:{s:1:"C";s:3:"106";s:2:"WX";s:3:"600";s:1:"N";s:1:"j";s:1:"B";a:4:{i:0;s:2:"52";i:1;s:4:"-157";i:2;s:3:"550";i:3;s:3:"657";}}s:1:"j";a:4:{s:1:"C";s:3:"106";s:2:"WX";s:3:"600";s:1:"N";s:1:"j";s:1:"B";a:4:{i:0;s:2:"52";i:1;s:4:"-157";i:2;s:3:"550";i:3;s:3:"657";}}i:107;a:4:{s:1:"C";s:3:"107";s:2:"WX";s:3:"600";s:1:"N";s:1:"k";s:1:"B";a:4:{i:0;s:2:"58";i:1;s:1:"0";i:2;s:3:"633";i:3;s:3:"629";}}s:1:"k";a:4:{s:1:"C";s:3:"107";s:2:"WX";s:3:"600";s:1:"N";s:1:"k";s:1:"B";a:4:{i:0;s:2:"58";i:1;s:1:"0";i:2;s:3:"633";i:3;s:3:"629";}}i:108;a:4:{s:1:"C";s:3:"108";s:2:"WX";s:3:"600";s:1:"N";s:1:"l";s:1:"B";a:4:{i:0;s:2:"95";i:1;s:1:"0";i:2;s:3:"515";i:3;s:3:"629";}}s:1:"l";a:4:{s:1:"C";s:3:"108";s:2:"WX";s:3:"600";s:1:"N";s:1:"l";s:1:"B";a:4:{i:0;s:2:"95";i:1;s:1:"0";i:2;s:3:"515";i:3;s:3:"629";}}i:109;a:4:{s:1:"C";s:3:"109";s:2:"WX";s:3:"600";s:1:"N";s:1:"m";s:1:"B";a:4:{i:0;s:2:"-5";i:1;s:1:"0";i:2;s:3:"615";i:3;s:3:"441";}}s:1:"m";a:4:{s:1:"C";s:3:"109";s:2:"WX";s:3:"600";s:1:"N";s:1:"m";s:1:"B";a:4:{i:0;s:2:"-5";i:1;s:1:"0";i:2;s:3:"615";i:3;s:3:"441";}}i:110;a:4:{s:1:"C";s:3:"110";s:2:"WX";s:3:"600";s:1:"N";s:1:"n";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:1:"0";i:2;s:3:"585";i:3;s:3:"441";}}s:1:"n";a:4:{s:1:"C";s:3:"110";s:2:"WX";s:3:"600";s:1:"N";s:1:"n";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:1:"0";i:2;s:3:"585";i:3;s:3:"441";}}i:111;a:4:{s:1:"C";s:3:"111";s:2:"WX";s:3:"600";s:1:"N";s:1:"o";s:1:"B";a:4:{i:0;s:3:"102";i:1;s:3:"-15";i:2;s:3:"588";i:3;s:3:"441";}}s:1:"o";a:4:{s:1:"C";s:3:"111";s:2:"WX";s:3:"600";s:1:"N";s:1:"o";s:1:"B";a:4:{i:0;s:3:"102";i:1;s:3:"-15";i:2;s:3:"588";i:3;s:3:"441";}}i:112;a:4:{s:1:"C";s:3:"112";s:2:"WX";s:3:"600";s:1:"N";s:1:"p";s:1:"B";a:4:{i:0;s:3:"-24";i:1;s:4:"-157";i:2;s:3:"605";i:3;s:3:"441";}}s:1:"p";a:4:{s:1:"C";s:3:"112";s:2:"WX";s:3:"600";s:1:"N";s:1:"p";s:1:"B";a:4:{i:0;s:3:"-24";i:1;s:4:"-157";i:2;s:3:"605";i:3;s:3:"441";}}i:113;a:4:{s:1:"C";s:3:"113";s:2:"WX";s:3:"600";s:1:"N";s:1:"q";s:1:"B";a:4:{i:0;s:2:"85";i:1;s:4:"-157";i:2;s:3:"682";i:3;s:3:"441";}}s:1:"q";a:4:{s:1:"C";s:3:"113";s:2:"WX";s:3:"600";s:1:"N";s:1:"q";s:1:"B";a:4:{i:0;s:2:"85";i:1;s:4:"-157";i:2;s:3:"682";i:3;s:3:"441";}}i:114;a:4:{s:1:"C";s:3:"114";s:2:"WX";s:3:"600";s:1:"N";s:1:"r";s:1:"B";a:4:{i:0;s:2:"60";i:1;s:1:"0";i:2;s:3:"636";i:3;s:3:"441";}}s:1:"r";a:4:{s:1:"C";s:3:"114";s:2:"WX";s:3:"600";s:1:"N";s:1:"r";s:1:"B";a:4:{i:0;s:2:"60";i:1;s:1:"0";i:2;s:3:"636";i:3;s:3:"441";}}i:115;a:4:{s:1:"C";s:3:"115";s:2:"WX";s:3:"600";s:1:"N";s:1:"s";s:1:"B";a:4:{i:0;s:2:"78";i:1;s:3:"-15";i:2;s:3:"584";i:3;s:3:"441";}}s:1:"s";a:4:{s:1:"C";s:3:"115";s:2:"WX";s:3:"600";s:1:"N";s:1:"s";s:1:"B";a:4:{i:0;s:2:"78";i:1;s:3:"-15";i:2;s:3:"584";i:3;s:3:"441";}}i:116;a:4:{s:1:"C";s:3:"116";s:2:"WX";s:3:"600";s:1:"N";s:1:"t";s:1:"B";a:4:{i:0;s:3:"167";i:1;s:3:"-15";i:2;s:3:"561";i:3;s:3:"561";}}s:1:"t";a:4:{s:1:"C";s:3:"116";s:2:"WX";s:3:"600";s:1:"N";s:1:"t";s:1:"B";a:4:{i:0;s:3:"167";i:1;s:3:"-15";i:2;s:3:"561";i:3;s:3:"561";}}i:117;a:4:{s:1:"C";s:3:"117";s:2:"WX";s:3:"600";s:1:"N";s:1:"u";s:1:"B";a:4:{i:0;s:3:"101";i:1;s:3:"-15";i:2;s:3:"572";i:3;s:3:"426";}}s:1:"u";a:4:{s:1:"C";s:3:"117";s:2:"WX";s:3:"600";s:1:"N";s:1:"u";s:1:"B";a:4:{i:0;s:3:"101";i:1;s:3:"-15";i:2;s:3:"572";i:3;s:3:"426";}}i:118;a:4:{s:1:"C";s:3:"118";s:2:"WX";s:3:"600";s:1:"N";s:1:"v";s:1:"B";a:4:{i:0;s:2:"90";i:1;s:3:"-10";i:2;s:3:"681";i:3;s:3:"426";}}s:1:"v";a:4:{s:1:"C";s:3:"118";s:2:"WX";s:3:"600";s:1:"N";s:1:"v";s:1:"B";a:4:{i:0;s:2:"90";i:1;s:3:"-10";i:2;s:3:"681";i:3;s:3:"426";}}i:119;a:4:{s:1:"C";s:3:"119";s:2:"WX";s:3:"600";s:1:"N";s:1:"w";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:3:"-10";i:2;s:3:"695";i:3;s:3:"426";}}s:1:"w";a:4:{s:1:"C";s:3:"119";s:2:"WX";s:3:"600";s:1:"N";s:1:"w";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:3:"-10";i:2;s:3:"695";i:3;s:3:"426";}}i:120;a:4:{s:1:"C";s:3:"120";s:2:"WX";s:3:"600";s:1:"N";s:1:"x";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:1:"0";i:2;s:3:"655";i:3;s:3:"426";}}s:1:"x";a:4:{s:1:"C";s:3:"120";s:2:"WX";s:3:"600";s:1:"N";s:1:"x";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:1:"0";i:2;s:3:"655";i:3;s:3:"426";}}i:121;a:4:{s:1:"C";s:3:"121";s:2:"WX";s:3:"600";s:1:"N";s:1:"y";s:1:"B";a:4:{i:0;s:2:"-4";i:1;s:4:"-157";i:2;s:3:"683";i:3;s:3:"426";}}s:1:"y";a:4:{s:1:"C";s:3:"121";s:2:"WX";s:3:"600";s:1:"N";s:1:"y";s:1:"B";a:4:{i:0;s:2:"-4";i:1;s:4:"-157";i:2;s:3:"683";i:3;s:3:"426";}}i:122;a:4:{s:1:"C";s:3:"122";s:2:"WX";s:3:"600";s:1:"N";s:1:"z";s:1:"B";a:4:{i:0;s:2:"99";i:1;s:1:"0";i:2;s:3:"593";i:3;s:3:"426";}}s:1:"z";a:4:{s:1:"C";s:3:"122";s:2:"WX";s:3:"600";s:1:"N";s:1:"z";s:1:"B";a:4:{i:0;s:2:"99";i:1;s:1:"0";i:2;s:3:"593";i:3;s:3:"426";}}i:123;a:4:{s:1:"C";s:3:"123";s:2:"WX";s:3:"600";s:1:"N";s:9:"braceleft";s:1:"B";a:4:{i:0;s:3:"233";i:1;s:4:"-108";i:2;s:3:"569";i:3;s:3:"622";}}s:9:"braceleft";a:4:{s:1:"C";s:3:"123";s:2:"WX";s:3:"600";s:1:"N";s:9:"braceleft";s:1:"B";a:4:{i:0;s:3:"233";i:1;s:4:"-108";i:2;s:3:"569";i:3;s:3:"622";}}i:124;a:4:{s:1:"C";s:3:"124";s:2:"WX";s:3:"600";s:1:"N";s:3:"bar";s:1:"B";a:4:{i:0;s:3:"222";i:1;s:4:"-250";i:2;s:3:"485";i:3;s:3:"750";}}s:3:"bar";a:4:{s:1:"C";s:3:"124";s:2:"WX";s:3:"600";s:1:"N";s:3:"bar";s:1:"B";a:4:{i:0;s:3:"222";i:1;s:4:"-250";i:2;s:3:"485";i:3;s:3:"750";}}i:125;a:4:{s:1:"C";s:3:"125";s:2:"WX";s:3:"600";s:1:"N";s:10:"braceright";s:1:"B";a:4:{i:0;s:3:"140";i:1;s:4:"-108";i:2;s:3:"477";i:3;s:3:"622";}}s:10:"braceright";a:4:{s:1:"C";s:3:"125";s:2:"WX";s:3:"600";s:1:"N";s:10:"braceright";s:1:"B";a:4:{i:0;s:3:"140";i:1;s:4:"-108";i:2;s:3:"477";i:3;s:3:"622";}}i:126;a:4:{s:1:"C";s:3:"126";s:2:"WX";s:3:"600";s:1:"N";s:10:"asciitilde";s:1:"B";a:4:{i:0;s:3:"116";i:1;s:3:"197";i:2;s:3:"600";i:3;s:3:"320";}}s:10:"asciitilde";a:4:{s:1:"C";s:3:"126";s:2:"WX";s:3:"600";s:1:"N";s:10:"asciitilde";s:1:"B";a:4:{i:0;s:3:"116";i:1;s:3:"197";i:2;s:3:"600";i:3;s:3:"320";}}i:161;a:4:{s:1:"C";s:3:"161";s:2:"WX";s:3:"600";s:1:"N";s:10:"exclamdown";s:1:"B";a:4:{i:0;s:3:"225";i:1;s:4:"-157";i:2;s:3:"445";i:3;s:3:"430";}}s:10:"exclamdown";a:4:{s:1:"C";s:3:"161";s:2:"WX";s:3:"600";s:1:"N";s:10:"exclamdown";s:1:"B";a:4:{i:0;s:3:"225";i:1;s:4:"-157";i:2;s:3:"445";i:3;s:3:"430";}}i:162;a:4:{s:1:"C";s:3:"162";s:2:"WX";s:3:"600";s:1:"N";s:4:"cent";s:1:"B";a:4:{i:0;s:3:"151";i:1;s:3:"-49";i:2;s:3:"588";i:3;s:3:"614";}}s:4:"cent";a:4:{s:1:"C";s:3:"162";s:2:"WX";s:3:"600";s:1:"N";s:4:"cent";s:1:"B";a:4:{i:0;s:3:"151";i:1;s:3:"-49";i:2;s:3:"588";i:3;s:3:"614";}}i:163;a:4:{s:1:"C";s:3:"163";s:2:"WX";s:3:"600";s:1:"N";s:8:"sterling";s:1:"B";a:4:{i:0;s:3:"124";i:1;s:3:"-21";i:2;s:3:"621";i:3;s:3:"611";}}s:8:"sterling";a:4:{s:1:"C";s:3:"163";s:2:"WX";s:3:"600";s:1:"N";s:8:"sterling";s:1:"B";a:4:{i:0;s:3:"124";i:1;s:3:"-21";i:2;s:3:"621";i:3;s:3:"611";}}i:164;a:4:{s:1:"C";s:3:"164";s:2:"WX";s:3:"600";s:1:"N";s:8:"fraction";s:1:"B";a:4:{i:0;s:2:"84";i:1;s:3:"-57";i:2;s:3:"646";i:3;s:3:"665";}}s:8:"fraction";a:4:{s:1:"C";s:3:"164";s:2:"WX";s:3:"600";s:1:"N";s:8:"fraction";s:1:"B";a:4:{i:0;s:2:"84";i:1;s:3:"-57";i:2;s:3:"646";i:3;s:3:"665";}}i:165;a:4:{s:1:"C";s:3:"165";s:2:"WX";s:3:"600";s:1:"N";s:3:"yen";s:1:"B";a:4:{i:0;s:3:"120";i:1;s:1:"0";i:2;s:3:"693";i:3;s:3:"562";}}s:3:"yen";a:4:{s:1:"C";s:3:"165";s:2:"WX";s:3:"600";s:1:"N";s:3:"yen";s:1:"B";a:4:{i:0;s:3:"120";i:1;s:1:"0";i:2;s:3:"693";i:3;s:3:"562";}}i:166;a:4:{s:1:"C";s:3:"166";s:2:"WX";s:3:"600";s:1:"N";s:6:"florin";s:1:"B";a:4:{i:0;s:3:"-26";i:1;s:4:"-143";i:2;s:3:"671";i:3;s:3:"622";}}s:6:"florin";a:4:{s:1:"C";s:3:"166";s:2:"WX";s:3:"600";s:1:"N";s:6:"florin";s:1:"B";a:4:{i:0;s:3:"-26";i:1;s:4:"-143";i:2;s:3:"671";i:3;s:3:"622";}}i:167;a:4:{s:1:"C";s:3:"167";s:2:"WX";s:3:"600";s:1:"N";s:7:"section";s:1:"B";a:4:{i:0;s:3:"104";i:1;s:3:"-78";i:2;s:3:"590";i:3;s:3:"580";}}s:7:"section";a:4:{s:1:"C";s:3:"167";s:2:"WX";s:3:"600";s:1:"N";s:7:"section";s:1:"B";a:4:{i:0;s:3:"104";i:1;s:3:"-78";i:2;s:3:"590";i:3;s:3:"580";}}i:168;a:4:{s:1:"C";s:3:"168";s:2:"WX";s:3:"600";s:1:"N";s:8:"currency";s:1:"B";a:4:{i:0;s:2:"94";i:1;s:2:"58";i:2;s:3:"628";i:3;s:3:"506";}}s:8:"currency";a:4:{s:1:"C";s:3:"168";s:2:"WX";s:3:"600";s:1:"N";s:8:"currency";s:1:"B";a:4:{i:0;s:2:"94";i:1;s:2:"58";i:2;s:3:"628";i:3;s:3:"506";}}i:169;a:4:{s:1:"C";s:3:"169";s:2:"WX";s:3:"600";s:1:"N";s:11:"quotesingle";s:1:"B";a:4:{i:0;s:3:"345";i:1;s:3:"328";i:2;s:3:"460";i:3;s:3:"562";}}s:11:"quotesingle";a:4:{s:1:"C";s:3:"169";s:2:"WX";s:3:"600";s:1:"N";s:11:"quotesingle";s:1:"B";a:4:{i:0;s:3:"345";i:1;s:3:"328";i:2;s:3:"460";i:3;s:3:"562";}}i:170;a:4:{s:1:"C";s:3:"170";s:2:"WX";s:3:"600";s:1:"N";s:12:"quotedblleft";s:1:"B";a:4:{i:0;s:3:"262";i:1;s:3:"328";i:2;s:3:"541";i:3;s:3:"562";}}s:12:"quotedblleft";a:4:{s:1:"C";s:3:"170";s:2:"WX";s:3:"600";s:1:"N";s:12:"quotedblleft";s:1:"B";a:4:{i:0;s:3:"262";i:1;s:3:"328";i:2;s:3:"541";i:3;s:3:"562";}}i:171;a:4:{s:1:"C";s:3:"171";s:2:"WX";s:3:"600";s:1:"N";s:13:"guillemotleft";s:1:"B";a:4:{i:0;s:2:"92";i:1;s:2:"70";i:2;s:3:"652";i:3;s:3:"446";}}s:13:"guillemotleft";a:4:{s:1:"C";s:3:"171";s:2:"WX";s:3:"600";s:1:"N";s:13:"guillemotleft";s:1:"B";a:4:{i:0;s:2:"92";i:1;s:2:"70";i:2;s:3:"652";i:3;s:3:"446";}}i:172;a:4:{s:1:"C";s:3:"172";s:2:"WX";s:3:"600";s:1:"N";s:13:"guilsinglleft";s:1:"B";a:4:{i:0;s:3:"204";i:1;s:2:"70";i:2;s:3:"540";i:3;s:3:"446";}}s:13:"guilsinglleft";a:4:{s:1:"C";s:3:"172";s:2:"WX";s:3:"600";s:1:"N";s:13:"guilsinglleft";s:1:"B";a:4:{i:0;s:3:"204";i:1;s:2:"70";i:2;s:3:"540";i:3;s:3:"446";}}i:173;a:4:{s:1:"C";s:3:"173";s:2:"WX";s:3:"600";s:1:"N";s:14:"guilsinglright";s:1:"B";a:4:{i:0;s:3:"170";i:1;s:2:"70";i:2;s:3:"506";i:3;s:3:"446";}}s:14:"guilsinglright";a:4:{s:1:"C";s:3:"173";s:2:"WX";s:3:"600";s:1:"N";s:14:"guilsinglright";s:1:"B";a:4:{i:0;s:3:"170";i:1;s:2:"70";i:2;s:3:"506";i:3;s:3:"446";}}i:174;a:4:{s:1:"C";s:3:"174";s:2:"WX";s:3:"600";s:1:"N";s:2:"fi";s:1:"B";a:4:{i:0;s:1:"3";i:1;s:1:"0";i:2;s:3:"619";i:3;s:3:"629";}}s:2:"fi";a:4:{s:1:"C";s:3:"174";s:2:"WX";s:3:"600";s:1:"N";s:2:"fi";s:1:"B";a:4:{i:0;s:1:"3";i:1;s:1:"0";i:2;s:3:"619";i:3;s:3:"629";}}i:175;a:4:{s:1:"C";s:3:"175";s:2:"WX";s:3:"600";s:1:"N";s:2:"fl";s:1:"B";a:4:{i:0;s:1:"3";i:1;s:1:"0";i:2;s:3:"619";i:3;s:3:"629";}}s:2:"fl";a:4:{s:1:"C";s:3:"175";s:2:"WX";s:3:"600";s:1:"N";s:2:"fl";s:1:"B";a:4:{i:0;s:1:"3";i:1;s:1:"0";i:2;s:3:"619";i:3;s:3:"629";}}i:177;a:4:{s:1:"C";s:3:"177";s:2:"WX";s:3:"600";s:1:"N";s:6:"endash";s:1:"B";a:4:{i:0;s:3:"124";i:1;s:3:"231";i:2;s:3:"586";i:3;s:3:"285";}}s:6:"endash";a:4:{s:1:"C";s:3:"177";s:2:"WX";s:3:"600";s:1:"N";s:6:"endash";s:1:"B";a:4:{i:0;s:3:"124";i:1;s:3:"231";i:2;s:3:"586";i:3;s:3:"285";}}i:178;a:4:{s:1:"C";s:3:"178";s:2:"WX";s:3:"600";s:1:"N";s:6:"dagger";s:1:"B";a:4:{i:0;s:3:"217";i:1;s:3:"-78";i:2;s:3:"546";i:3;s:3:"580";}}s:6:"dagger";a:4:{s:1:"C";s:3:"178";s:2:"WX";s:3:"600";s:1:"N";s:6:"dagger";s:1:"B";a:4:{i:0;s:3:"217";i:1;s:3:"-78";i:2;s:3:"546";i:3;s:3:"580";}}i:179;a:4:{s:1:"C";s:3:"179";s:2:"WX";s:3:"600";s:1:"N";s:9:"daggerdbl";s:1:"B";a:4:{i:0;s:3:"163";i:1;s:3:"-78";i:2;s:3:"546";i:3;s:3:"580";}}s:9:"daggerdbl";a:4:{s:1:"C";s:3:"179";s:2:"WX";s:3:"600";s:1:"N";s:9:"daggerdbl";s:1:"B";a:4:{i:0;s:3:"163";i:1;s:3:"-78";i:2;s:3:"546";i:3;s:3:"580";}}i:180;a:4:{s:1:"C";s:3:"180";s:2:"WX";s:3:"600";s:1:"N";s:14:"periodcentered";s:1:"B";a:4:{i:0;s:3:"275";i:1;s:3:"189";i:2;s:3:"434";i:3;s:3:"327";}}s:14:"periodcentered";a:4:{s:1:"C";s:3:"180";s:2:"WX";s:3:"600";s:1:"N";s:14:"periodcentered";s:1:"B";a:4:{i:0;s:3:"275";i:1;s:3:"189";i:2;s:3:"434";i:3;s:3:"327";}}i:182;a:4:{s:1:"C";s:3:"182";s:2:"WX";s:3:"600";s:1:"N";s:9:"paragraph";s:1:"B";a:4:{i:0;s:3:"100";i:1;s:3:"-78";i:2;s:3:"630";i:3;s:3:"562";}}s:9:"paragraph";a:4:{s:1:"C";s:3:"182";s:2:"WX";s:3:"600";s:1:"N";s:9:"paragraph";s:1:"B";a:4:{i:0;s:3:"100";i:1;s:3:"-78";i:2;s:3:"630";i:3;s:3:"562";}}i:183;a:4:{s:1:"C";s:3:"183";s:2:"WX";s:3:"600";s:1:"N";s:6:"bullet";s:1:"B";a:4:{i:0;s:3:"224";i:1;s:3:"130";i:2;s:3:"485";i:3;s:3:"383";}}s:6:"bullet";a:4:{s:1:"C";s:3:"183";s:2:"WX";s:3:"600";s:1:"N";s:6:"bullet";s:1:"B";a:4:{i:0;s:3:"224";i:1;s:3:"130";i:2;s:3:"485";i:3;s:3:"383";}}i:184;a:4:{s:1:"C";s:3:"184";s:2:"WX";s:3:"600";s:1:"N";s:14:"quotesinglbase";s:1:"B";a:4:{i:0;s:3:"185";i:1;s:4:"-134";i:2;s:3:"397";i:3;s:3:"100";}}s:14:"quotesinglbase";a:4:{s:1:"C";s:3:"184";s:2:"WX";s:3:"600";s:1:"N";s:14:"quotesinglbase";s:1:"B";a:4:{i:0;s:3:"185";i:1;s:4:"-134";i:2;s:3:"397";i:3;s:3:"100";}}i:185;a:4:{s:1:"C";s:3:"185";s:2:"WX";s:3:"600";s:1:"N";s:12:"quotedblbase";s:1:"B";a:4:{i:0;s:3:"115";i:1;s:4:"-134";i:2;s:3:"478";i:3;s:3:"100";}}s:12:"quotedblbase";a:4:{s:1:"C";s:3:"185";s:2:"WX";s:3:"600";s:1:"N";s:12:"quotedblbase";s:1:"B";a:4:{i:0;s:3:"115";i:1;s:4:"-134";i:2;s:3:"478";i:3;s:3:"100";}}i:186;a:4:{s:1:"C";s:3:"186";s:2:"WX";s:3:"600";s:1:"N";s:13:"quotedblright";s:1:"B";a:4:{i:0;s:3:"213";i:1;s:3:"328";i:2;s:3:"576";i:3;s:3:"562";}}s:13:"quotedblright";a:4:{s:1:"C";s:3:"186";s:2:"WX";s:3:"600";s:1:"N";s:13:"quotedblright";s:1:"B";a:4:{i:0;s:3:"213";i:1;s:3:"328";i:2;s:3:"576";i:3;s:3:"562";}}i:187;a:4:{s:1:"C";s:3:"187";s:2:"WX";s:3:"600";s:1:"N";s:14:"guillemotright";s:1:"B";a:4:{i:0;s:2:"58";i:1;s:2:"70";i:2;s:3:"618";i:3;s:3:"446";}}s:14:"guillemotright";a:4:{s:1:"C";s:3:"187";s:2:"WX";s:3:"600";s:1:"N";s:14:"guillemotright";s:1:"B";a:4:{i:0;s:2:"58";i:1;s:2:"70";i:2;s:3:"618";i:3;s:3:"446";}}i:188;a:4:{s:1:"C";s:3:"188";s:2:"WX";s:3:"600";s:1:"N";s:8:"ellipsis";s:1:"B";a:4:{i:0;s:2:"46";i:1;s:3:"-15";i:2;s:3:"575";i:3;s:3:"111";}}s:8:"ellipsis";a:4:{s:1:"C";s:3:"188";s:2:"WX";s:3:"600";s:1:"N";s:8:"ellipsis";s:1:"B";a:4:{i:0;s:2:"46";i:1;s:3:"-15";i:2;s:3:"575";i:3;s:3:"111";}}i:189;a:4:{s:1:"C";s:3:"189";s:2:"WX";s:3:"600";s:1:"N";s:11:"perthousand";s:1:"B";a:4:{i:0;s:2:"59";i:1;s:3:"-15";i:2;s:3:"627";i:3;s:3:"622";}}s:11:"perthousand";a:4:{s:1:"C";s:3:"189";s:2:"WX";s:3:"600";s:1:"N";s:11:"perthousand";s:1:"B";a:4:{i:0;s:2:"59";i:1;s:3:"-15";i:2;s:3:"627";i:3;s:3:"622";}}i:191;a:4:{s:1:"C";s:3:"191";s:2:"WX";s:3:"600";s:1:"N";s:12:"questiondown";s:1:"B";a:4:{i:0;s:3:"105";i:1;s:4:"-157";i:2;s:3:"466";i:3;s:3:"430";}}s:12:"questiondown";a:4:{s:1:"C";s:3:"191";s:2:"WX";s:3:"600";s:1:"N";s:12:"questiondown";s:1:"B";a:4:{i:0;s:3:"105";i:1;s:4:"-157";i:2;s:3:"466";i:3;s:3:"430";}}i:193;a:4:{s:1:"C";s:3:"193";s:2:"WX";s:3:"600";s:1:"N";s:5:"grave";s:1:"B";a:4:{i:0;s:3:"294";i:1;s:3:"497";i:2;s:3:"484";i:3;s:3:"672";}}s:5:"grave";a:4:{s:1:"C";s:3:"193";s:2:"WX";s:3:"600";s:1:"N";s:5:"grave";s:1:"B";a:4:{i:0;s:3:"294";i:1;s:3:"497";i:2;s:3:"484";i:3;s:3:"672";}}i:194;a:4:{s:1:"C";s:3:"194";s:2:"WX";s:3:"600";s:1:"N";s:5:"acute";s:1:"B";a:4:{i:0;s:3:"348";i:1;s:3:"497";i:2;s:3:"612";i:3;s:3:"672";}}s:5:"acute";a:4:{s:1:"C";s:3:"194";s:2:"WX";s:3:"600";s:1:"N";s:5:"acute";s:1:"B";a:4:{i:0;s:3:"348";i:1;s:3:"497";i:2;s:3:"612";i:3;s:3:"672";}}i:195;a:4:{s:1:"C";s:3:"195";s:2:"WX";s:3:"600";s:1:"N";s:10:"circumflex";s:1:"B";a:4:{i:0;s:3:"229";i:1;s:3:"477";i:2;s:3:"581";i:3;s:3:"654";}}s:10:"circumflex";a:4:{s:1:"C";s:3:"195";s:2:"WX";s:3:"600";s:1:"N";s:10:"circumflex";s:1:"B";a:4:{i:0;s:3:"229";i:1;s:3:"477";i:2;s:3:"581";i:3;s:3:"654";}}i:196;a:4:{s:1:"C";s:3:"196";s:2:"WX";s:3:"600";s:1:"N";s:5:"tilde";s:1:"B";a:4:{i:0;s:3:"212";i:1;s:3:"489";i:2;s:3:"629";i:3;s:3:"606";}}s:5:"tilde";a:4:{s:1:"C";s:3:"196";s:2:"WX";s:3:"600";s:1:"N";s:5:"tilde";s:1:"B";a:4:{i:0;s:3:"212";i:1;s:3:"489";i:2;s:3:"629";i:3;s:3:"606";}}i:197;a:4:{s:1:"C";s:3:"197";s:2:"WX";s:3:"600";s:1:"N";s:6:"macron";s:1:"B";a:4:{i:0;s:3:"232";i:1;s:3:"525";i:2;s:3:"600";i:3;s:3:"565";}}s:6:"macron";a:4:{s:1:"C";s:3:"197";s:2:"WX";s:3:"600";s:1:"N";s:6:"macron";s:1:"B";a:4:{i:0;s:3:"232";i:1;s:3:"525";i:2;s:3:"600";i:3;s:3:"565";}}i:198;a:4:{s:1:"C";s:3:"198";s:2:"WX";s:3:"600";s:1:"N";s:5:"breve";s:1:"B";a:4:{i:0;s:3:"279";i:1;s:3:"501";i:2;s:3:"576";i:3;s:3:"609";}}s:5:"breve";a:4:{s:1:"C";s:3:"198";s:2:"WX";s:3:"600";s:1:"N";s:5:"breve";s:1:"B";a:4:{i:0;s:3:"279";i:1;s:3:"501";i:2;s:3:"576";i:3;s:3:"609";}}i:199;a:4:{s:1:"C";s:3:"199";s:2:"WX";s:3:"600";s:1:"N";s:9:"dotaccent";s:1:"B";a:4:{i:0;s:3:"373";i:1;s:3:"537";i:2;s:3:"478";i:3;s:3:"640";}}s:9:"dotaccent";a:4:{s:1:"C";s:3:"199";s:2:"WX";s:3:"600";s:1:"N";s:9:"dotaccent";s:1:"B";a:4:{i:0;s:3:"373";i:1;s:3:"537";i:2;s:3:"478";i:3;s:3:"640";}}i:200;a:4:{s:1:"C";s:3:"200";s:2:"WX";s:3:"600";s:1:"N";s:8:"dieresis";s:1:"B";a:4:{i:0;s:3:"272";i:1;s:3:"537";i:2;s:3:"579";i:3;s:3:"640";}}s:8:"dieresis";a:4:{s:1:"C";s:3:"200";s:2:"WX";s:3:"600";s:1:"N";s:8:"dieresis";s:1:"B";a:4:{i:0;s:3:"272";i:1;s:3:"537";i:2;s:3:"579";i:3;s:3:"640";}}i:202;a:4:{s:1:"C";s:3:"202";s:2:"WX";s:3:"600";s:1:"N";s:4:"ring";s:1:"B";a:4:{i:0;s:3:"332";i:1;s:3:"463";i:2;s:3:"500";i:3;s:3:"627";}}s:4:"ring";a:4:{s:1:"C";s:3:"202";s:2:"WX";s:3:"600";s:1:"N";s:4:"ring";s:1:"B";a:4:{i:0;s:3:"332";i:1;s:3:"463";i:2;s:3:"500";i:3;s:3:"627";}}i:203;a:4:{s:1:"C";s:3:"203";s:2:"WX";s:3:"600";s:1:"N";s:7:"cedilla";s:1:"B";a:4:{i:0;s:3:"197";i:1;s:4:"-151";i:2;s:3:"344";i:3;s:2:"10";}}s:7:"cedilla";a:4:{s:1:"C";s:3:"203";s:2:"WX";s:3:"600";s:1:"N";s:7:"cedilla";s:1:"B";a:4:{i:0;s:3:"197";i:1;s:4:"-151";i:2;s:3:"344";i:3;s:2:"10";}}i:205;a:4:{s:1:"C";s:3:"205";s:2:"WX";s:3:"600";s:1:"N";s:12:"hungarumlaut";s:1:"B";a:4:{i:0;s:3:"239";i:1;s:3:"497";i:2;s:3:"683";i:3;s:3:"672";}}s:12:"hungarumlaut";a:4:{s:1:"C";s:3:"205";s:2:"WX";s:3:"600";s:1:"N";s:12:"hungarumlaut";s:1:"B";a:4:{i:0;s:3:"239";i:1;s:3:"497";i:2;s:3:"683";i:3;s:3:"672";}}i:206;a:4:{s:1:"C";s:3:"206";s:2:"WX";s:3:"600";s:1:"N";s:6:"ogonek";s:1:"B";a:4:{i:0;s:3:"189";i:1;s:4:"-172";i:2;s:3:"377";i:3;s:1:"4";}}s:6:"ogonek";a:4:{s:1:"C";s:3:"206";s:2:"WX";s:3:"600";s:1:"N";s:6:"ogonek";s:1:"B";a:4:{i:0;s:3:"189";i:1;s:4:"-172";i:2;s:3:"377";i:3;s:1:"4";}}i:207;a:4:{s:1:"C";s:3:"207";s:2:"WX";s:3:"600";s:1:"N";s:5:"caron";s:1:"B";a:4:{i:0;s:3:"262";i:1;s:3:"492";i:2;s:3:"614";i:3;s:3:"669";}}s:5:"caron";a:4:{s:1:"C";s:3:"207";s:2:"WX";s:3:"600";s:1:"N";s:5:"caron";s:1:"B";a:4:{i:0;s:3:"262";i:1;s:3:"492";i:2;s:3:"614";i:3;s:3:"669";}}i:208;a:4:{s:1:"C";s:3:"208";s:2:"WX";s:3:"600";s:1:"N";s:6:"emdash";s:1:"B";a:4:{i:0;s:2:"49";i:1;s:3:"231";i:2;s:3:"661";i:3;s:3:"285";}}s:6:"emdash";a:4:{s:1:"C";s:3:"208";s:2:"WX";s:3:"600";s:1:"N";s:6:"emdash";s:1:"B";a:4:{i:0;s:2:"49";i:1;s:3:"231";i:2;s:3:"661";i:3;s:3:"285";}}i:225;a:4:{s:1:"C";s:3:"225";s:2:"WX";s:3:"600";s:1:"N";s:2:"AE";s:1:"B";a:4:{i:0;s:1:"3";i:1;s:1:"0";i:2;s:3:"655";i:3;s:3:"562";}}s:2:"AE";a:4:{s:1:"C";s:3:"225";s:2:"WX";s:3:"600";s:1:"N";s:2:"AE";s:1:"B";a:4:{i:0;s:1:"3";i:1;s:1:"0";i:2;s:3:"655";i:3;s:3:"562";}}i:227;a:4:{s:1:"C";s:3:"227";s:2:"WX";s:3:"600";s:1:"N";s:11:"ordfeminine";s:1:"B";a:4:{i:0;s:3:"209";i:1;s:3:"249";i:2;s:3:"512";i:3;s:3:"580";}}s:11:"ordfeminine";a:4:{s:1:"C";s:3:"227";s:2:"WX";s:3:"600";s:1:"N";s:11:"ordfeminine";s:1:"B";a:4:{i:0;s:3:"209";i:1;s:3:"249";i:2;s:3:"512";i:3;s:3:"580";}}i:232;a:4:{s:1:"C";s:3:"232";s:2:"WX";s:3:"600";s:1:"N";s:6:"Lslash";s:1:"B";a:4:{i:0;s:2:"47";i:1;s:1:"0";i:2;s:3:"607";i:3;s:3:"562";}}s:6:"Lslash";a:4:{s:1:"C";s:3:"232";s:2:"WX";s:3:"600";s:1:"N";s:6:"Lslash";s:1:"B";a:4:{i:0;s:2:"47";i:1;s:1:"0";i:2;s:3:"607";i:3;s:3:"562";}}i:233;a:4:{s:1:"C";s:3:"233";s:2:"WX";s:3:"600";s:1:"N";s:6:"Oslash";s:1:"B";a:4:{i:0;s:2:"94";i:1;s:3:"-80";i:2;s:3:"625";i:3;s:3:"629";}}s:6:"Oslash";a:4:{s:1:"C";s:3:"233";s:2:"WX";s:3:"600";s:1:"N";s:6:"Oslash";s:1:"B";a:4:{i:0;s:2:"94";i:1;s:3:"-80";i:2;s:3:"625";i:3;s:3:"629";}}i:234;a:4:{s:1:"C";s:3:"234";s:2:"WX";s:3:"600";s:1:"N";s:2:"OE";s:1:"B";a:4:{i:0;s:2:"59";i:1;s:1:"0";i:2;s:3:"672";i:3;s:3:"562";}}s:2:"OE";a:4:{s:1:"C";s:3:"234";s:2:"WX";s:3:"600";s:1:"N";s:2:"OE";s:1:"B";a:4:{i:0;s:2:"59";i:1;s:1:"0";i:2;s:3:"672";i:3;s:3:"562";}}i:235;a:4:{s:1:"C";s:3:"235";s:2:"WX";s:3:"600";s:1:"N";s:12:"ordmasculine";s:1:"B";a:4:{i:0;s:3:"210";i:1;s:3:"249";i:2;s:3:"535";i:3;s:3:"580";}}s:12:"ordmasculine";a:4:{s:1:"C";s:3:"235";s:2:"WX";s:3:"600";s:1:"N";s:12:"ordmasculine";s:1:"B";a:4:{i:0;s:3:"210";i:1;s:3:"249";i:2;s:3:"535";i:3;s:3:"580";}}i:241;a:4:{s:1:"C";s:3:"241";s:2:"WX";s:3:"600";s:1:"N";s:2:"ae";s:1:"B";a:4:{i:0;s:2:"41";i:1;s:3:"-15";i:2;s:3:"626";i:3;s:3:"441";}}s:2:"ae";a:4:{s:1:"C";s:3:"241";s:2:"WX";s:3:"600";s:1:"N";s:2:"ae";s:1:"B";a:4:{i:0;s:2:"41";i:1;s:3:"-15";i:2;s:3:"626";i:3;s:3:"441";}}i:245;a:4:{s:1:"C";s:3:"245";s:2:"WX";s:3:"600";s:1:"N";s:8:"dotlessi";s:1:"B";a:4:{i:0;s:2:"95";i:1;s:1:"0";i:2;s:3:"515";i:3;s:3:"426";}}s:8:"dotlessi";a:4:{s:1:"C";s:3:"245";s:2:"WX";s:3:"600";s:1:"N";s:8:"dotlessi";s:1:"B";a:4:{i:0;s:2:"95";i:1;s:1:"0";i:2;s:3:"515";i:3;s:3:"426";}}i:248;a:4:{s:1:"C";s:3:"248";s:2:"WX";s:3:"600";s:1:"N";s:6:"lslash";s:1:"B";a:4:{i:0;s:2:"95";i:1;s:1:"0";i:2;s:3:"587";i:3;s:3:"629";}}s:6:"lslash";a:4:{s:1:"C";s:3:"248";s:2:"WX";s:3:"600";s:1:"N";s:6:"lslash";s:1:"B";a:4:{i:0;s:2:"95";i:1;s:1:"0";i:2;s:3:"587";i:3;s:3:"629";}}i:249;a:4:{s:1:"C";s:3:"249";s:2:"WX";s:3:"600";s:1:"N";s:6:"oslash";s:1:"B";a:4:{i:0;s:3:"102";i:1;s:3:"-80";i:2;s:3:"588";i:3;s:3:"506";}}s:6:"oslash";a:4:{s:1:"C";s:3:"249";s:2:"WX";s:3:"600";s:1:"N";s:6:"oslash";s:1:"B";a:4:{i:0;s:3:"102";i:1;s:3:"-80";i:2;s:3:"588";i:3;s:3:"506";}}i:250;a:4:{s:1:"C";s:3:"250";s:2:"WX";s:3:"600";s:1:"N";s:2:"oe";s:1:"B";a:4:{i:0;s:2:"54";i:1;s:3:"-15";i:2;s:3:"615";i:3;s:3:"441";}}s:2:"oe";a:4:{s:1:"C";s:3:"250";s:2:"WX";s:3:"600";s:1:"N";s:2:"oe";s:1:"B";a:4:{i:0;s:2:"54";i:1;s:3:"-15";i:2;s:3:"615";i:3;s:3:"441";}}i:251;a:4:{s:1:"C";s:3:"251";s:2:"WX";s:3:"600";s:1:"N";s:10:"germandbls";s:1:"B";a:4:{i:0;s:2:"48";i:1;s:3:"-15";i:2;s:3:"617";i:3;s:3:"629";}}s:10:"germandbls";a:4:{s:1:"C";s:3:"251";s:2:"WX";s:3:"600";s:1:"N";s:10:"germandbls";s:1:"B";a:4:{i:0;s:2:"48";i:1;s:3:"-15";i:2;s:3:"617";i:3;s:3:"629";}}s:9:"Idieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"Idieresis";s:1:"B";a:4:{i:0;s:2:"96";i:1;s:1:"0";i:2;s:3:"623";i:3;s:3:"753";}}s:6:"eacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"eacute";s:1:"B";a:4:{i:0;s:3:"106";i:1;s:3:"-15";i:2;s:3:"612";i:3;s:3:"672";}}s:6:"abreve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"abreve";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:3:"-15";i:2;s:3:"576";i:3;s:3:"609";}}s:13:"uhungarumlaut";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:13:"uhungarumlaut";s:1:"B";a:4:{i:0;s:3:"101";i:1;s:3:"-15";i:2;s:3:"723";i:3;s:3:"672";}}s:6:"ecaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"ecaron";s:1:"B";a:4:{i:0;s:3:"106";i:1;s:3:"-15";i:2;s:3:"614";i:3;s:3:"669";}}s:9:"Ydieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"Ydieresis";s:1:"B";a:4:{i:0;s:3:"133";i:1;s:1:"0";i:2;s:3:"695";i:3;s:3:"753";}}s:6:"divide";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"divide";s:1:"B";a:4:{i:0;s:3:"136";i:1;s:2:"48";i:2;s:3:"573";i:3;s:3:"467";}}s:6:"Yacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Yacute";s:1:"B";a:4:{i:0;s:3:"133";i:1;s:1:"0";i:2;s:3:"695";i:3;s:3:"805";}}s:11:"Acircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:11:"Acircumflex";s:1:"B";a:4:{i:0;s:1:"3";i:1;s:1:"0";i:2;s:3:"607";i:3;s:3:"787";}}s:6:"aacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"aacute";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:3:"-15";i:2;s:3:"612";i:3;s:3:"672";}}s:11:"Ucircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:11:"Ucircumflex";s:1:"B";a:4:{i:0;s:3:"125";i:1;s:3:"-18";i:2;s:3:"702";i:3;s:3:"787";}}s:6:"yacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"yacute";s:1:"B";a:4:{i:0;s:2:"-4";i:1;s:4:"-157";i:2;s:3:"683";i:3;s:3:"672";}}s:12:"scommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"scommaaccent";s:1:"B";a:4:{i:0;s:2:"78";i:1;s:4:"-250";i:2;s:3:"584";i:3;s:3:"441";}}s:11:"ecircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:11:"ecircumflex";s:1:"B";a:4:{i:0;s:3:"106";i:1;s:3:"-15";i:2;s:3:"598";i:3;s:3:"654";}}s:5:"Uring";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:5:"Uring";s:1:"B";a:4:{i:0;s:3:"125";i:1;s:3:"-18";i:2;s:3:"702";i:3;s:3:"760";}}s:9:"Udieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"Udieresis";s:1:"B";a:4:{i:0;s:3:"125";i:1;s:3:"-18";i:2;s:3:"702";i:3;s:3:"753";}}s:7:"aogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"aogonek";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:4:"-172";i:2;s:3:"569";i:3;s:3:"441";}}s:6:"Uacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Uacute";s:1:"B";a:4:{i:0;s:3:"125";i:1;s:3:"-18";i:2;s:3:"702";i:3;s:3:"805";}}s:7:"uogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"uogonek";s:1:"B";a:4:{i:0;s:3:"101";i:1;s:4:"-172";i:2;s:3:"572";i:3;s:3:"426";}}s:9:"Edieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"Edieresis";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:1:"0";i:2;s:3:"660";i:3;s:3:"753";}}s:6:"Dcroat";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Dcroat";s:1:"B";a:4:{i:0;s:2:"43";i:1;s:1:"0";i:2;s:3:"645";i:3;s:3:"562";}}s:11:"commaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:11:"commaaccent";s:1:"B";a:4:{i:0;s:3:"145";i:1;s:4:"-250";i:2;s:3:"323";i:3;s:3:"-58";}}s:9:"copyright";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"copyright";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:3:"-18";i:2;s:3:"667";i:3;s:3:"580";}}s:7:"Emacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"Emacron";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:1:"0";i:2;s:3:"660";i:3;s:3:"698";}}s:6:"ccaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"ccaron";s:1:"B";a:4:{i:0;s:3:"106";i:1;s:3:"-15";i:2;s:3:"614";i:3;s:3:"669";}}s:5:"aring";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:5:"aring";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:3:"-15";i:2;s:3:"569";i:3;s:3:"627";}}s:12:"Ncommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"Ncommaaccent";s:1:"B";a:4:{i:0;s:1:"7";i:1;s:4:"-250";i:2;s:3:"712";i:3;s:3:"562";}}s:6:"lacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"lacute";s:1:"B";a:4:{i:0;s:2:"95";i:1;s:1:"0";i:2;s:3:"640";i:3;s:3:"805";}}s:6:"agrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"agrave";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:3:"-15";i:2;s:3:"569";i:3;s:3:"672";}}s:12:"Tcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"Tcommaaccent";s:1:"B";a:4:{i:0;s:3:"108";i:1;s:4:"-250";i:2;s:3:"665";i:3;s:3:"562";}}s:6:"Cacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Cacute";s:1:"B";a:4:{i:0;s:2:"93";i:1;s:3:"-18";i:2;s:3:"655";i:3;s:3:"805";}}s:6:"atilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"atilde";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:3:"-15";i:2;s:3:"629";i:3;s:3:"606";}}s:10:"Edotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:10:"Edotaccent";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:1:"0";i:2;s:3:"660";i:3;s:3:"753";}}s:6:"scaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"scaron";s:1:"B";a:4:{i:0;s:2:"78";i:1;s:3:"-15";i:2;s:3:"614";i:3;s:3:"669";}}s:8:"scedilla";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:8:"scedilla";s:1:"B";a:4:{i:0;s:2:"78";i:1;s:4:"-151";i:2;s:3:"584";i:3;s:3:"441";}}s:6:"iacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"iacute";s:1:"B";a:4:{i:0;s:2:"95";i:1;s:1:"0";i:2;s:3:"612";i:3;s:3:"672";}}s:7:"lozenge";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"lozenge";s:1:"B";a:4:{i:0;s:2:"94";i:1;s:1:"0";i:2;s:3:"519";i:3;s:3:"706";}}s:6:"Rcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Rcaron";s:1:"B";a:4:{i:0;s:2:"38";i:1;s:1:"0";i:2;s:3:"642";i:3;s:3:"802";}}s:12:"Gcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"Gcommaaccent";s:1:"B";a:4:{i:0;s:2:"83";i:1;s:4:"-250";i:2;s:3:"645";i:3;s:3:"580";}}s:11:"ucircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:11:"ucircumflex";s:1:"B";a:4:{i:0;s:3:"101";i:1;s:3:"-15";i:2;s:3:"572";i:3;s:3:"654";}}s:11:"acircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:11:"acircumflex";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:3:"-15";i:2;s:3:"581";i:3;s:3:"654";}}s:7:"Amacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"Amacron";s:1:"B";a:4:{i:0;s:1:"3";i:1;s:1:"0";i:2;s:3:"607";i:3;s:3:"698";}}s:6:"rcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"rcaron";s:1:"B";a:4:{i:0;s:2:"60";i:1;s:1:"0";i:2;s:3:"636";i:3;s:3:"669";}}s:8:"ccedilla";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:8:"ccedilla";s:1:"B";a:4:{i:0;s:3:"106";i:1;s:4:"-151";i:2;s:3:"614";i:3;s:3:"441";}}s:10:"Zdotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:10:"Zdotaccent";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:1:"0";i:2;s:3:"610";i:3;s:3:"753";}}s:5:"Thorn";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:5:"Thorn";s:1:"B";a:4:{i:0;s:2:"79";i:1;s:1:"0";i:2;s:3:"606";i:3;s:3:"562";}}s:7:"Omacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"Omacron";s:1:"B";a:4:{i:0;s:2:"94";i:1;s:3:"-18";i:2;s:3:"628";i:3;s:3:"698";}}s:6:"Racute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Racute";s:1:"B";a:4:{i:0;s:2:"38";i:1;s:1:"0";i:2;s:3:"670";i:3;s:3:"805";}}s:6:"Sacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Sacute";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:3:"-20";i:2;s:3:"650";i:3;s:3:"805";}}s:6:"dcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"dcaron";s:1:"B";a:4:{i:0;s:2:"85";i:1;s:3:"-15";i:2;s:3:"849";i:3;s:3:"629";}}s:7:"Umacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"Umacron";s:1:"B";a:4:{i:0;s:3:"125";i:1;s:3:"-18";i:2;s:3:"702";i:3;s:3:"698";}}s:5:"uring";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:5:"uring";s:1:"B";a:4:{i:0;s:3:"101";i:1;s:3:"-15";i:2;s:3:"572";i:3;s:3:"627";}}s:13:"threesuperior";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:13:"threesuperior";s:1:"B";a:4:{i:0;s:3:"213";i:1;s:3:"240";i:2;s:3:"501";i:3;s:3:"622";}}s:6:"Ograve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Ograve";s:1:"B";a:4:{i:0;s:2:"94";i:1;s:3:"-18";i:2;s:3:"625";i:3;s:3:"805";}}s:6:"Agrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Agrave";s:1:"B";a:4:{i:0;s:1:"3";i:1;s:1:"0";i:2;s:3:"607";i:3;s:3:"805";}}s:6:"Abreve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Abreve";s:1:"B";a:4:{i:0;s:1:"3";i:1;s:1:"0";i:2;s:3:"607";i:3;s:3:"732";}}s:8:"multiply";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:8:"multiply";s:1:"B";a:4:{i:0;s:3:"103";i:1;s:2:"43";i:2;s:3:"607";i:3;s:3:"470";}}s:6:"uacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"uacute";s:1:"B";a:4:{i:0;s:3:"101";i:1;s:3:"-15";i:2;s:3:"602";i:3;s:3:"672";}}s:6:"Tcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Tcaron";s:1:"B";a:4:{i:0;s:3:"108";i:1;s:1:"0";i:2;s:3:"665";i:3;s:3:"802";}}s:11:"partialdiff";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:11:"partialdiff";s:1:"B";a:4:{i:0;s:2:"45";i:1;s:3:"-38";i:2;s:3:"546";i:3;s:3:"710";}}s:9:"ydieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"ydieresis";s:1:"B";a:4:{i:0;s:2:"-4";i:1;s:4:"-157";i:2;s:3:"683";i:3;s:3:"620";}}s:6:"Nacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Nacute";s:1:"B";a:4:{i:0;s:1:"7";i:1;s:3:"-13";i:2;s:3:"712";i:3;s:3:"805";}}s:11:"icircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:11:"icircumflex";s:1:"B";a:4:{i:0;s:2:"95";i:1;s:1:"0";i:2;s:3:"551";i:3;s:3:"654";}}s:11:"Ecircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:11:"Ecircumflex";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:1:"0";i:2;s:3:"660";i:3;s:3:"787";}}s:9:"adieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"adieresis";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:3:"-15";i:2;s:3:"575";i:3;s:3:"620";}}s:9:"edieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"edieresis";s:1:"B";a:4:{i:0;s:3:"106";i:1;s:3:"-15";i:2;s:3:"598";i:3;s:3:"620";}}s:6:"cacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"cacute";s:1:"B";a:4:{i:0;s:3:"106";i:1;s:3:"-15";i:2;s:3:"612";i:3;s:3:"672";}}s:6:"nacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"nacute";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:1:"0";i:2;s:3:"602";i:3;s:3:"672";}}s:7:"umacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"umacron";s:1:"B";a:4:{i:0;s:3:"101";i:1;s:3:"-15";i:2;s:3:"600";i:3;s:3:"565";}}s:6:"Ncaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Ncaron";s:1:"B";a:4:{i:0;s:1:"7";i:1;s:3:"-13";i:2;s:3:"712";i:3;s:3:"802";}}s:6:"Iacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Iacute";s:1:"B";a:4:{i:0;s:2:"96";i:1;s:1:"0";i:2;s:3:"640";i:3;s:3:"805";}}s:9:"plusminus";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"plusminus";s:1:"B";a:4:{i:0;s:2:"96";i:1;s:2:"44";i:2;s:3:"594";i:3;s:3:"558";}}s:9:"brokenbar";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"brokenbar";s:1:"B";a:4:{i:0;s:3:"238";i:1;s:4:"-175";i:2;s:3:"469";i:3;s:3:"675";}}s:10:"registered";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:10:"registered";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:3:"-18";i:2;s:3:"667";i:3;s:3:"580";}}s:6:"Gbreve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Gbreve";s:1:"B";a:4:{i:0;s:2:"83";i:1;s:3:"-18";i:2;s:3:"645";i:3;s:3:"732";}}s:10:"Idotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:10:"Idotaccent";s:1:"B";a:4:{i:0;s:2:"96";i:1;s:1:"0";i:2;s:3:"623";i:3;s:3:"753";}}s:9:"summation";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"summation";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:3:"-10";i:2;s:3:"670";i:3;s:3:"706";}}s:6:"Egrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Egrave";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:1:"0";i:2;s:3:"660";i:3;s:3:"805";}}s:6:"racute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"racute";s:1:"B";a:4:{i:0;s:2:"60";i:1;s:1:"0";i:2;s:3:"636";i:3;s:3:"672";}}s:7:"omacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"omacron";s:1:"B";a:4:{i:0;s:3:"102";i:1;s:3:"-15";i:2;s:3:"600";i:3;s:3:"565";}}s:6:"Zacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Zacute";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:1:"0";i:2;s:3:"670";i:3;s:3:"805";}}s:6:"Zcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Zcaron";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:1:"0";i:2;s:3:"642";i:3;s:3:"802";}}s:12:"greaterequal";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"greaterequal";s:1:"B";a:4:{i:0;s:2:"98";i:1;s:1:"0";i:2;s:3:"594";i:3;s:3:"710";}}s:3:"Eth";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:3:"Eth";s:1:"B";a:4:{i:0;s:2:"43";i:1;s:1:"0";i:2;s:3:"645";i:3;s:3:"562";}}s:8:"Ccedilla";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:8:"Ccedilla";s:1:"B";a:4:{i:0;s:2:"93";i:1;s:4:"-151";i:2;s:3:"658";i:3;s:3:"580";}}s:12:"lcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"lcommaaccent";s:1:"B";a:4:{i:0;s:2:"95";i:1;s:4:"-250";i:2;s:3:"515";i:3;s:3:"629";}}s:6:"tcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"tcaron";s:1:"B";a:4:{i:0;s:3:"167";i:1;s:3:"-15";i:2;s:3:"587";i:3;s:3:"717";}}s:7:"eogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"eogonek";s:1:"B";a:4:{i:0;s:3:"106";i:1;s:4:"-172";i:2;s:3:"598";i:3;s:3:"441";}}s:7:"Uogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"Uogonek";s:1:"B";a:4:{i:0;s:3:"124";i:1;s:4:"-172";i:2;s:3:"702";i:3;s:3:"562";}}s:6:"Aacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Aacute";s:1:"B";a:4:{i:0;s:1:"3";i:1;s:1:"0";i:2;s:3:"660";i:3;s:3:"805";}}s:9:"Adieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"Adieresis";s:1:"B";a:4:{i:0;s:1:"3";i:1;s:1:"0";i:2;s:3:"607";i:3;s:3:"753";}}s:6:"egrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"egrave";s:1:"B";a:4:{i:0;s:3:"106";i:1;s:3:"-15";i:2;s:3:"598";i:3;s:3:"672";}}s:6:"zacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"zacute";s:1:"B";a:4:{i:0;s:2:"99";i:1;s:1:"0";i:2;s:3:"612";i:3;s:3:"672";}}s:7:"iogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"iogonek";s:1:"B";a:4:{i:0;s:2:"95";i:1;s:4:"-172";i:2;s:3:"515";i:3;s:3:"657";}}s:6:"Oacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Oacute";s:1:"B";a:4:{i:0;s:2:"94";i:1;s:3:"-18";i:2;s:3:"640";i:3;s:3:"805";}}s:6:"oacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"oacute";s:1:"B";a:4:{i:0;s:3:"102";i:1;s:3:"-15";i:2;s:3:"612";i:3;s:3:"672";}}s:7:"amacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"amacron";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:3:"-15";i:2;s:3:"600";i:3;s:3:"565";}}s:6:"sacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"sacute";s:1:"B";a:4:{i:0;s:2:"78";i:1;s:3:"-15";i:2;s:3:"612";i:3;s:3:"672";}}s:9:"idieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"idieresis";s:1:"B";a:4:{i:0;s:2:"95";i:1;s:1:"0";i:2;s:3:"545";i:3;s:3:"620";}}s:11:"Ocircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:11:"Ocircumflex";s:1:"B";a:4:{i:0;s:2:"94";i:1;s:3:"-18";i:2;s:3:"625";i:3;s:3:"787";}}s:6:"Ugrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Ugrave";s:1:"B";a:4:{i:0;s:3:"125";i:1;s:3:"-18";i:2;s:3:"702";i:3;s:3:"805";}}s:5:"Delta";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:5:"Delta";s:1:"B";a:4:{i:0;s:1:"6";i:1;s:1:"0";i:2;s:3:"598";i:3;s:3:"688";}}s:5:"thorn";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:5:"thorn";s:1:"B";a:4:{i:0;s:3:"-24";i:1;s:4:"-157";i:2;s:3:"605";i:3;s:3:"629";}}s:11:"twosuperior";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:11:"twosuperior";s:1:"B";a:4:{i:0;s:3:"230";i:1;s:3:"249";i:2;s:3:"535";i:3;s:3:"622";}}s:9:"Odieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"Odieresis";s:1:"B";a:4:{i:0;s:2:"94";i:1;s:3:"-18";i:2;s:3:"625";i:3;s:3:"753";}}s:2:"mu";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:2:"mu";s:1:"B";a:4:{i:0;s:2:"72";i:1;s:4:"-157";i:2;s:3:"572";i:3;s:3:"426";}}s:6:"igrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"igrave";s:1:"B";a:4:{i:0;s:2:"95";i:1;s:1:"0";i:2;s:3:"515";i:3;s:3:"672";}}s:13:"ohungarumlaut";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:13:"ohungarumlaut";s:1:"B";a:4:{i:0;s:3:"102";i:1;s:3:"-15";i:2;s:3:"723";i:3;s:3:"672";}}s:7:"Eogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"Eogonek";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:4:"-172";i:2;s:3:"660";i:3;s:3:"562";}}s:6:"dcroat";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"dcroat";s:1:"B";a:4:{i:0;s:2:"85";i:1;s:3:"-15";i:2;s:3:"704";i:3;s:3:"629";}}s:13:"threequarters";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:13:"threequarters";s:1:"B";a:4:{i:0;s:2:"73";i:1;s:3:"-56";i:2;s:3:"659";i:3;s:3:"666";}}s:8:"Scedilla";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:8:"Scedilla";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:4:"-151";i:2;s:3:"650";i:3;s:3:"580";}}s:6:"lcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"lcaron";s:1:"B";a:4:{i:0;s:2:"95";i:1;s:1:"0";i:2;s:3:"667";i:3;s:3:"629";}}s:12:"Kcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"Kcommaaccent";s:1:"B";a:4:{i:0;s:2:"38";i:1;s:4:"-250";i:2;s:3:"671";i:3;s:3:"562";}}s:6:"Lacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Lacute";s:1:"B";a:4:{i:0;s:2:"47";i:1;s:1:"0";i:2;s:3:"607";i:3;s:3:"805";}}s:9:"trademark";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"trademark";s:1:"B";a:4:{i:0;s:2:"75";i:1;s:3:"263";i:2;s:3:"742";i:3;s:3:"562";}}s:10:"edotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:10:"edotaccent";s:1:"B";a:4:{i:0;s:3:"106";i:1;s:3:"-15";i:2;s:3:"598";i:3;s:3:"620";}}s:6:"Igrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Igrave";s:1:"B";a:4:{i:0;s:2:"96";i:1;s:1:"0";i:2;s:3:"623";i:3;s:3:"805";}}s:7:"Imacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"Imacron";s:1:"B";a:4:{i:0;s:2:"96";i:1;s:1:"0";i:2;s:3:"628";i:3;s:3:"698";}}s:6:"Lcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Lcaron";s:1:"B";a:4:{i:0;s:2:"47";i:1;s:1:"0";i:2;s:3:"632";i:3;s:3:"562";}}s:7:"onehalf";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"onehalf";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:3:"-57";i:2;s:3:"669";i:3;s:3:"665";}}s:9:"lessequal";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"lessequal";s:1:"B";a:4:{i:0;s:2:"98";i:1;s:1:"0";i:2;s:3:"645";i:3;s:3:"710";}}s:11:"ocircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:11:"ocircumflex";s:1:"B";a:4:{i:0;s:3:"102";i:1;s:3:"-15";i:2;s:3:"588";i:3;s:3:"654";}}s:6:"ntilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"ntilde";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:1:"0";i:2;s:3:"629";i:3;s:3:"606";}}s:13:"Uhungarumlaut";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:13:"Uhungarumlaut";s:1:"B";a:4:{i:0;s:3:"125";i:1;s:3:"-18";i:2;s:3:"761";i:3;s:3:"805";}}s:6:"Eacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Eacute";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:1:"0";i:2;s:3:"670";i:3;s:3:"805";}}s:7:"emacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"emacron";s:1:"B";a:4:{i:0;s:3:"106";i:1;s:3:"-15";i:2;s:3:"600";i:3;s:3:"565";}}s:6:"gbreve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"gbreve";s:1:"B";a:4:{i:0;s:2:"61";i:1;s:4:"-157";i:2;s:3:"657";i:3;s:3:"609";}}s:10:"onequarter";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:10:"onequarter";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:3:"-57";i:2;s:3:"674";i:3;s:3:"665";}}s:6:"Scaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Scaron";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:3:"-20";i:2;s:3:"672";i:3;s:3:"802";}}s:12:"Scommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"Scommaaccent";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:4:"-250";i:2;s:3:"650";i:3;s:3:"580";}}s:13:"Ohungarumlaut";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:13:"Ohungarumlaut";s:1:"B";a:4:{i:0;s:2:"94";i:1;s:3:"-18";i:2;s:3:"751";i:3;s:3:"805";}}s:6:"degree";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"degree";s:1:"B";a:4:{i:0;s:3:"214";i:1;s:3:"269";i:2;s:3:"576";i:3;s:3:"622";}}s:6:"ograve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"ograve";s:1:"B";a:4:{i:0;s:3:"102";i:1;s:3:"-15";i:2;s:3:"588";i:3;s:3:"672";}}s:6:"Ccaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Ccaron";s:1:"B";a:4:{i:0;s:2:"93";i:1;s:3:"-18";i:2;s:3:"672";i:3;s:3:"802";}}s:6:"ugrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"ugrave";s:1:"B";a:4:{i:0;s:3:"101";i:1;s:3:"-15";i:2;s:3:"572";i:3;s:3:"672";}}s:7:"radical";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"radical";s:1:"B";a:4:{i:0;s:2:"85";i:1;s:3:"-15";i:2;s:3:"765";i:3;s:3:"792";}}s:6:"Dcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Dcaron";s:1:"B";a:4:{i:0;s:2:"43";i:1;s:1:"0";i:2;s:3:"645";i:3;s:3:"802";}}s:12:"rcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"rcommaaccent";s:1:"B";a:4:{i:0;s:2:"60";i:1;s:4:"-250";i:2;s:3:"636";i:3;s:3:"441";}}s:6:"Ntilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Ntilde";s:1:"B";a:4:{i:0;s:1:"7";i:1;s:3:"-13";i:2;s:3:"712";i:3;s:3:"729";}}s:6:"otilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"otilde";s:1:"B";a:4:{i:0;s:3:"102";i:1;s:3:"-15";i:2;s:3:"629";i:3;s:3:"606";}}s:12:"Rcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"Rcommaaccent";s:1:"B";a:4:{i:0;s:2:"38";i:1;s:4:"-250";i:2;s:3:"598";i:3;s:3:"562";}}s:12:"Lcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"Lcommaaccent";s:1:"B";a:4:{i:0;s:2:"47";i:1;s:4:"-250";i:2;s:3:"607";i:3;s:3:"562";}}s:6:"Atilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Atilde";s:1:"B";a:4:{i:0;s:1:"3";i:1;s:1:"0";i:2;s:3:"655";i:3;s:3:"729";}}s:7:"Aogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"Aogonek";s:1:"B";a:4:{i:0;s:1:"3";i:1;s:4:"-172";i:2;s:3:"607";i:3;s:3:"562";}}s:5:"Aring";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:5:"Aring";s:1:"B";a:4:{i:0;s:1:"3";i:1;s:1:"0";i:2;s:3:"607";i:3;s:3:"750";}}s:6:"Otilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Otilde";s:1:"B";a:4:{i:0;s:2:"94";i:1;s:3:"-18";i:2;s:3:"655";i:3;s:3:"729";}}s:10:"zdotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:10:"zdotaccent";s:1:"B";a:4:{i:0;s:2:"99";i:1;s:1:"0";i:2;s:3:"593";i:3;s:3:"620";}}s:6:"Ecaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Ecaron";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:1:"0";i:2;s:3:"660";i:3;s:3:"802";}}s:7:"Iogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"Iogonek";s:1:"B";a:4:{i:0;s:2:"96";i:1;s:4:"-172";i:2;s:3:"623";i:3;s:3:"562";}}s:12:"kcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"kcommaaccent";s:1:"B";a:4:{i:0;s:2:"58";i:1;s:4:"-250";i:2;s:3:"633";i:3;s:3:"629";}}s:5:"minus";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:5:"minus";s:1:"B";a:4:{i:0;s:3:"129";i:1;s:3:"232";i:2;s:3:"580";i:3;s:3:"283";}}s:11:"Icircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:11:"Icircumflex";s:1:"B";a:4:{i:0;s:2:"96";i:1;s:1:"0";i:2;s:3:"623";i:3;s:3:"787";}}s:6:"ncaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"ncaron";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:1:"0";i:2;s:3:"614";i:3;s:3:"669";}}s:12:"tcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"tcommaaccent";s:1:"B";a:4:{i:0;s:3:"165";i:1;s:4:"-250";i:2;s:3:"561";i:3;s:3:"561";}}s:10:"logicalnot";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:10:"logicalnot";s:1:"B";a:4:{i:0;s:3:"155";i:1;s:3:"108";i:2;s:3:"591";i:3;s:3:"369";}}s:9:"odieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"odieresis";s:1:"B";a:4:{i:0;s:3:"102";i:1;s:3:"-15";i:2;s:3:"588";i:3;s:3:"620";}}s:9:"udieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"udieresis";s:1:"B";a:4:{i:0;s:3:"101";i:1;s:3:"-15";i:2;s:3:"575";i:3;s:3:"620";}}s:8:"notequal";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:8:"notequal";s:1:"B";a:4:{i:0;s:2:"43";i:1;s:3:"-16";i:2;s:3:"621";i:3;s:3:"529";}}s:12:"gcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"gcommaaccent";s:1:"B";a:4:{i:0;s:2:"61";i:1;s:4:"-157";i:2;s:3:"657";i:3;s:3:"708";}}s:3:"eth";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:3:"eth";s:1:"B";a:4:{i:0;s:3:"102";i:1;s:3:"-15";i:2;s:3:"639";i:3;s:3:"629";}}s:6:"zcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"zcaron";s:1:"B";a:4:{i:0;s:2:"99";i:1;s:1:"0";i:2;s:3:"624";i:3;s:3:"669";}}s:12:"ncommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"ncommaaccent";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:4:"-250";i:2;s:3:"585";i:3;s:3:"441";}}s:11:"onesuperior";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:11:"onesuperior";s:1:"B";a:4:{i:0;s:3:"231";i:1;s:3:"249";i:2;s:3:"491";i:3;s:3:"622";}}s:7:"imacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"imacron";s:1:"B";a:4:{i:0;s:2:"95";i:1;s:1:"0";i:2;s:3:"543";i:3;s:3:"565";}}s:4:"Euro";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:4:"Euro";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:1:"0";i:2;s:1:"0";i:3;s:1:"0";}}}s:9:"_version_";i:1;}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/php_Courier.afm b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/php_Courier.afm new file mode 100755 index 00000000..b68cac60 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/php_Courier.afm @@ -0,0 +1 @@ +a:21:{s:8:"FontName";s:7:"Courier";s:8:"FullName";s:7:"Courier";s:10:"FamilyName";s:7:"Courier";s:6:"Weight";s:6:"Medium";s:11:"ItalicAngle";s:1:"0";s:12:"IsFixedPitch";s:4:"true";s:12:"CharacterSet";s:13:"ExtendedRoman";s:8:"FontBBox";a:4:{i:0;s:3:"-23";i:1;s:4:"-250";i:2;s:3:"715";i:3;s:3:"805";}s:17:"UnderlinePosition";s:4:"-100";s:18:"UnderlineThickness";s:2:"50";s:7:"Version";s:7:"003.000";s:14:"EncodingScheme";s:21:"AdobeStandardEncoding";s:9:"CapHeight";s:3:"562";s:7:"XHeight";s:3:"426";s:8:"Ascender";s:3:"629";s:9:"Descender";s:4:"-157";s:5:"StdHW";s:2:"51";s:5:"StdVW";s:2:"51";s:16:"StartCharMetrics";s:3:"315";s:1:"C";a:464:{i:32;a:4:{s:1:"C";s:2:"32";s:2:"WX";s:3:"600";s:1:"N";s:5:"space";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:1:"0";i:2;s:1:"0";i:3;s:1:"0";}}s:5:"space";a:4:{s:1:"C";s:2:"32";s:2:"WX";s:3:"600";s:1:"N";s:5:"space";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:1:"0";i:2;s:1:"0";i:3;s:1:"0";}}i:33;a:4:{s:1:"C";s:2:"33";s:2:"WX";s:3:"600";s:1:"N";s:6:"exclam";s:1:"B";a:4:{i:0;s:3:"236";i:1;s:3:"-15";i:2;s:3:"364";i:3;s:3:"572";}}s:6:"exclam";a:4:{s:1:"C";s:2:"33";s:2:"WX";s:3:"600";s:1:"N";s:6:"exclam";s:1:"B";a:4:{i:0;s:3:"236";i:1;s:3:"-15";i:2;s:3:"364";i:3;s:3:"572";}}i:34;a:4:{s:1:"C";s:2:"34";s:2:"WX";s:3:"600";s:1:"N";s:8:"quotedbl";s:1:"B";a:4:{i:0;s:3:"187";i:1;s:3:"328";i:2;s:3:"413";i:3;s:3:"562";}}s:8:"quotedbl";a:4:{s:1:"C";s:2:"34";s:2:"WX";s:3:"600";s:1:"N";s:8:"quotedbl";s:1:"B";a:4:{i:0;s:3:"187";i:1;s:3:"328";i:2;s:3:"413";i:3;s:3:"562";}}i:35;a:4:{s:1:"C";s:2:"35";s:2:"WX";s:3:"600";s:1:"N";s:10:"numbersign";s:1:"B";a:4:{i:0;s:2:"93";i:1;s:3:"-32";i:2;s:3:"507";i:3;s:3:"639";}}s:10:"numbersign";a:4:{s:1:"C";s:2:"35";s:2:"WX";s:3:"600";s:1:"N";s:10:"numbersign";s:1:"B";a:4:{i:0;s:2:"93";i:1;s:3:"-32";i:2;s:3:"507";i:3;s:3:"639";}}i:36;a:4:{s:1:"C";s:2:"36";s:2:"WX";s:3:"600";s:1:"N";s:6:"dollar";s:1:"B";a:4:{i:0;s:3:"105";i:1;s:4:"-126";i:2;s:3:"496";i:3;s:3:"662";}}s:6:"dollar";a:4:{s:1:"C";s:2:"36";s:2:"WX";s:3:"600";s:1:"N";s:6:"dollar";s:1:"B";a:4:{i:0;s:3:"105";i:1;s:4:"-126";i:2;s:3:"496";i:3;s:3:"662";}}i:37;a:4:{s:1:"C";s:2:"37";s:2:"WX";s:3:"600";s:1:"N";s:7:"percent";s:1:"B";a:4:{i:0;s:2:"81";i:1;s:3:"-15";i:2;s:3:"518";i:3;s:3:"622";}}s:7:"percent";a:4:{s:1:"C";s:2:"37";s:2:"WX";s:3:"600";s:1:"N";s:7:"percent";s:1:"B";a:4:{i:0;s:2:"81";i:1;s:3:"-15";i:2;s:3:"518";i:3;s:3:"622";}}i:38;a:4:{s:1:"C";s:2:"38";s:2:"WX";s:3:"600";s:1:"N";s:9:"ampersand";s:1:"B";a:4:{i:0;s:2:"63";i:1;s:3:"-15";i:2;s:3:"538";i:3;s:3:"543";}}s:9:"ampersand";a:4:{s:1:"C";s:2:"38";s:2:"WX";s:3:"600";s:1:"N";s:9:"ampersand";s:1:"B";a:4:{i:0;s:2:"63";i:1;s:3:"-15";i:2;s:3:"538";i:3;s:3:"543";}}i:39;a:4:{s:1:"C";s:2:"39";s:2:"WX";s:3:"600";s:1:"N";s:10:"quoteright";s:1:"B";a:4:{i:0;s:3:"213";i:1;s:3:"328";i:2;s:3:"376";i:3;s:3:"562";}}s:10:"quoteright";a:4:{s:1:"C";s:2:"39";s:2:"WX";s:3:"600";s:1:"N";s:10:"quoteright";s:1:"B";a:4:{i:0;s:3:"213";i:1;s:3:"328";i:2;s:3:"376";i:3;s:3:"562";}}i:40;a:4:{s:1:"C";s:2:"40";s:2:"WX";s:3:"600";s:1:"N";s:9:"parenleft";s:1:"B";a:4:{i:0;s:3:"269";i:1;s:4:"-108";i:2;s:3:"440";i:3;s:3:"622";}}s:9:"parenleft";a:4:{s:1:"C";s:2:"40";s:2:"WX";s:3:"600";s:1:"N";s:9:"parenleft";s:1:"B";a:4:{i:0;s:3:"269";i:1;s:4:"-108";i:2;s:3:"440";i:3;s:3:"622";}}i:41;a:4:{s:1:"C";s:2:"41";s:2:"WX";s:3:"600";s:1:"N";s:10:"parenright";s:1:"B";a:4:{i:0;s:3:"160";i:1;s:4:"-108";i:2;s:3:"331";i:3;s:3:"622";}}s:10:"parenright";a:4:{s:1:"C";s:2:"41";s:2:"WX";s:3:"600";s:1:"N";s:10:"parenright";s:1:"B";a:4:{i:0;s:3:"160";i:1;s:4:"-108";i:2;s:3:"331";i:3;s:3:"622";}}i:42;a:4:{s:1:"C";s:2:"42";s:2:"WX";s:3:"600";s:1:"N";s:8:"asterisk";s:1:"B";a:4:{i:0;s:3:"116";i:1;s:3:"257";i:2;s:3:"484";i:3;s:3:"607";}}s:8:"asterisk";a:4:{s:1:"C";s:2:"42";s:2:"WX";s:3:"600";s:1:"N";s:8:"asterisk";s:1:"B";a:4:{i:0;s:3:"116";i:1;s:3:"257";i:2;s:3:"484";i:3;s:3:"607";}}i:43;a:4:{s:1:"C";s:2:"43";s:2:"WX";s:3:"600";s:1:"N";s:4:"plus";s:1:"B";a:4:{i:0;s:2:"80";i:1;s:2:"44";i:2;s:3:"520";i:3;s:3:"470";}}s:4:"plus";a:4:{s:1:"C";s:2:"43";s:2:"WX";s:3:"600";s:1:"N";s:4:"plus";s:1:"B";a:4:{i:0;s:2:"80";i:1;s:2:"44";i:2;s:3:"520";i:3;s:3:"470";}}i:44;a:4:{s:1:"C";s:2:"44";s:2:"WX";s:3:"600";s:1:"N";s:5:"comma";s:1:"B";a:4:{i:0;s:3:"181";i:1;s:4:"-112";i:2;s:3:"344";i:3;s:3:"122";}}s:5:"comma";a:4:{s:1:"C";s:2:"44";s:2:"WX";s:3:"600";s:1:"N";s:5:"comma";s:1:"B";a:4:{i:0;s:3:"181";i:1;s:4:"-112";i:2;s:3:"344";i:3;s:3:"122";}}i:45;a:4:{s:1:"C";s:2:"45";s:2:"WX";s:3:"600";s:1:"N";s:6:"hyphen";s:1:"B";a:4:{i:0;s:3:"103";i:1;s:3:"231";i:2;s:3:"497";i:3;s:3:"285";}}s:6:"hyphen";a:4:{s:1:"C";s:2:"45";s:2:"WX";s:3:"600";s:1:"N";s:6:"hyphen";s:1:"B";a:4:{i:0;s:3:"103";i:1;s:3:"231";i:2;s:3:"497";i:3;s:3:"285";}}i:46;a:4:{s:1:"C";s:2:"46";s:2:"WX";s:3:"600";s:1:"N";s:6:"period";s:1:"B";a:4:{i:0;s:3:"229";i:1;s:3:"-15";i:2;s:3:"371";i:3;s:3:"109";}}s:6:"period";a:4:{s:1:"C";s:2:"46";s:2:"WX";s:3:"600";s:1:"N";s:6:"period";s:1:"B";a:4:{i:0;s:3:"229";i:1;s:3:"-15";i:2;s:3:"371";i:3;s:3:"109";}}i:47;a:4:{s:1:"C";s:2:"47";s:2:"WX";s:3:"600";s:1:"N";s:5:"slash";s:1:"B";a:4:{i:0;s:3:"125";i:1;s:3:"-80";i:2;s:3:"475";i:3;s:3:"629";}}s:5:"slash";a:4:{s:1:"C";s:2:"47";s:2:"WX";s:3:"600";s:1:"N";s:5:"slash";s:1:"B";a:4:{i:0;s:3:"125";i:1;s:3:"-80";i:2;s:3:"475";i:3;s:3:"629";}}i:48;a:4:{s:1:"C";s:2:"48";s:2:"WX";s:3:"600";s:1:"N";s:4:"zero";s:1:"B";a:4:{i:0;s:3:"106";i:1;s:3:"-15";i:2;s:3:"494";i:3;s:3:"622";}}s:4:"zero";a:4:{s:1:"C";s:2:"48";s:2:"WX";s:3:"600";s:1:"N";s:4:"zero";s:1:"B";a:4:{i:0;s:3:"106";i:1;s:3:"-15";i:2;s:3:"494";i:3;s:3:"622";}}i:49;a:4:{s:1:"C";s:2:"49";s:2:"WX";s:3:"600";s:1:"N";s:3:"one";s:1:"B";a:4:{i:0;s:2:"96";i:1;s:1:"0";i:2;s:3:"505";i:3;s:3:"622";}}s:3:"one";a:4:{s:1:"C";s:2:"49";s:2:"WX";s:3:"600";s:1:"N";s:3:"one";s:1:"B";a:4:{i:0;s:2:"96";i:1;s:1:"0";i:2;s:3:"505";i:3;s:3:"622";}}i:50;a:4:{s:1:"C";s:2:"50";s:2:"WX";s:3:"600";s:1:"N";s:3:"two";s:1:"B";a:4:{i:0;s:2:"70";i:1;s:1:"0";i:2;s:3:"471";i:3;s:3:"622";}}s:3:"two";a:4:{s:1:"C";s:2:"50";s:2:"WX";s:3:"600";s:1:"N";s:3:"two";s:1:"B";a:4:{i:0;s:2:"70";i:1;s:1:"0";i:2;s:3:"471";i:3;s:3:"622";}}i:51;a:4:{s:1:"C";s:2:"51";s:2:"WX";s:3:"600";s:1:"N";s:5:"three";s:1:"B";a:4:{i:0;s:2:"75";i:1;s:3:"-15";i:2;s:3:"466";i:3;s:3:"622";}}s:5:"three";a:4:{s:1:"C";s:2:"51";s:2:"WX";s:3:"600";s:1:"N";s:5:"three";s:1:"B";a:4:{i:0;s:2:"75";i:1;s:3:"-15";i:2;s:3:"466";i:3;s:3:"622";}}i:52;a:4:{s:1:"C";s:2:"52";s:2:"WX";s:3:"600";s:1:"N";s:4:"four";s:1:"B";a:4:{i:0;s:2:"78";i:1;s:1:"0";i:2;s:3:"500";i:3;s:3:"622";}}s:4:"four";a:4:{s:1:"C";s:2:"52";s:2:"WX";s:3:"600";s:1:"N";s:4:"four";s:1:"B";a:4:{i:0;s:2:"78";i:1;s:1:"0";i:2;s:3:"500";i:3;s:3:"622";}}i:53;a:4:{s:1:"C";s:2:"53";s:2:"WX";s:3:"600";s:1:"N";s:4:"five";s:1:"B";a:4:{i:0;s:2:"92";i:1;s:3:"-15";i:2;s:3:"497";i:3;s:3:"607";}}s:4:"five";a:4:{s:1:"C";s:2:"53";s:2:"WX";s:3:"600";s:1:"N";s:4:"five";s:1:"B";a:4:{i:0;s:2:"92";i:1;s:3:"-15";i:2;s:3:"497";i:3;s:3:"607";}}i:54;a:4:{s:1:"C";s:2:"54";s:2:"WX";s:3:"600";s:1:"N";s:3:"six";s:1:"B";a:4:{i:0;s:3:"111";i:1;s:3:"-15";i:2;s:3:"497";i:3;s:3:"622";}}s:3:"six";a:4:{s:1:"C";s:2:"54";s:2:"WX";s:3:"600";s:1:"N";s:3:"six";s:1:"B";a:4:{i:0;s:3:"111";i:1;s:3:"-15";i:2;s:3:"497";i:3;s:3:"622";}}i:55;a:4:{s:1:"C";s:2:"55";s:2:"WX";s:3:"600";s:1:"N";s:5:"seven";s:1:"B";a:4:{i:0;s:2:"82";i:1;s:1:"0";i:2;s:3:"483";i:3;s:3:"607";}}s:5:"seven";a:4:{s:1:"C";s:2:"55";s:2:"WX";s:3:"600";s:1:"N";s:5:"seven";s:1:"B";a:4:{i:0;s:2:"82";i:1;s:1:"0";i:2;s:3:"483";i:3;s:3:"607";}}i:56;a:4:{s:1:"C";s:2:"56";s:2:"WX";s:3:"600";s:1:"N";s:5:"eight";s:1:"B";a:4:{i:0;s:3:"102";i:1;s:3:"-15";i:2;s:3:"498";i:3;s:3:"622";}}s:5:"eight";a:4:{s:1:"C";s:2:"56";s:2:"WX";s:3:"600";s:1:"N";s:5:"eight";s:1:"B";a:4:{i:0;s:3:"102";i:1;s:3:"-15";i:2;s:3:"498";i:3;s:3:"622";}}i:57;a:4:{s:1:"C";s:2:"57";s:2:"WX";s:3:"600";s:1:"N";s:4:"nine";s:1:"B";a:4:{i:0;s:2:"96";i:1;s:3:"-15";i:2;s:3:"489";i:3;s:3:"622";}}s:4:"nine";a:4:{s:1:"C";s:2:"57";s:2:"WX";s:3:"600";s:1:"N";s:4:"nine";s:1:"B";a:4:{i:0;s:2:"96";i:1;s:3:"-15";i:2;s:3:"489";i:3;s:3:"622";}}i:58;a:4:{s:1:"C";s:2:"58";s:2:"WX";s:3:"600";s:1:"N";s:5:"colon";s:1:"B";a:4:{i:0;s:3:"229";i:1;s:3:"-15";i:2;s:3:"371";i:3;s:3:"385";}}s:5:"colon";a:4:{s:1:"C";s:2:"58";s:2:"WX";s:3:"600";s:1:"N";s:5:"colon";s:1:"B";a:4:{i:0;s:3:"229";i:1;s:3:"-15";i:2;s:3:"371";i:3;s:3:"385";}}i:59;a:4:{s:1:"C";s:2:"59";s:2:"WX";s:3:"600";s:1:"N";s:9:"semicolon";s:1:"B";a:4:{i:0;s:3:"181";i:1;s:4:"-112";i:2;s:3:"371";i:3;s:3:"385";}}s:9:"semicolon";a:4:{s:1:"C";s:2:"59";s:2:"WX";s:3:"600";s:1:"N";s:9:"semicolon";s:1:"B";a:4:{i:0;s:3:"181";i:1;s:4:"-112";i:2;s:3:"371";i:3;s:3:"385";}}i:60;a:4:{s:1:"C";s:2:"60";s:2:"WX";s:3:"600";s:1:"N";s:4:"less";s:1:"B";a:4:{i:0;s:2:"41";i:1;s:2:"42";i:2;s:3:"519";i:3;s:3:"472";}}s:4:"less";a:4:{s:1:"C";s:2:"60";s:2:"WX";s:3:"600";s:1:"N";s:4:"less";s:1:"B";a:4:{i:0;s:2:"41";i:1;s:2:"42";i:2;s:3:"519";i:3;s:3:"472";}}i:61;a:4:{s:1:"C";s:2:"61";s:2:"WX";s:3:"600";s:1:"N";s:5:"equal";s:1:"B";a:4:{i:0;s:2:"80";i:1;s:3:"138";i:2;s:3:"520";i:3;s:3:"376";}}s:5:"equal";a:4:{s:1:"C";s:2:"61";s:2:"WX";s:3:"600";s:1:"N";s:5:"equal";s:1:"B";a:4:{i:0;s:2:"80";i:1;s:3:"138";i:2;s:3:"520";i:3;s:3:"376";}}i:62;a:4:{s:1:"C";s:2:"62";s:2:"WX";s:3:"600";s:1:"N";s:7:"greater";s:1:"B";a:4:{i:0;s:2:"66";i:1;s:2:"42";i:2;s:3:"544";i:3;s:3:"472";}}s:7:"greater";a:4:{s:1:"C";s:2:"62";s:2:"WX";s:3:"600";s:1:"N";s:7:"greater";s:1:"B";a:4:{i:0;s:2:"66";i:1;s:2:"42";i:2;s:3:"544";i:3;s:3:"472";}}i:63;a:4:{s:1:"C";s:2:"63";s:2:"WX";s:3:"600";s:1:"N";s:8:"question";s:1:"B";a:4:{i:0;s:3:"129";i:1;s:3:"-15";i:2;s:3:"492";i:3;s:3:"572";}}s:8:"question";a:4:{s:1:"C";s:2:"63";s:2:"WX";s:3:"600";s:1:"N";s:8:"question";s:1:"B";a:4:{i:0;s:3:"129";i:1;s:3:"-15";i:2;s:3:"492";i:3;s:3:"572";}}i:64;a:4:{s:1:"C";s:2:"64";s:2:"WX";s:3:"600";s:1:"N";s:2:"at";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:3:"-15";i:2;s:3:"533";i:3;s:3:"622";}}s:2:"at";a:4:{s:1:"C";s:2:"64";s:2:"WX";s:3:"600";s:1:"N";s:2:"at";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:3:"-15";i:2;s:3:"533";i:3;s:3:"622";}}i:65;a:4:{s:1:"C";s:2:"65";s:2:"WX";s:3:"600";s:1:"N";s:1:"A";s:1:"B";a:4:{i:0;s:1:"3";i:1;s:1:"0";i:2;s:3:"597";i:3;s:3:"562";}}s:1:"A";a:4:{s:1:"C";s:2:"65";s:2:"WX";s:3:"600";s:1:"N";s:1:"A";s:1:"B";a:4:{i:0;s:1:"3";i:1;s:1:"0";i:2;s:3:"597";i:3;s:3:"562";}}i:66;a:4:{s:1:"C";s:2:"66";s:2:"WX";s:3:"600";s:1:"N";s:1:"B";s:1:"B";a:4:{i:0;s:2:"43";i:1;s:1:"0";i:2;s:3:"559";i:3;s:3:"562";}}s:1:"B";a:4:{s:1:"C";s:2:"66";s:2:"WX";s:3:"600";s:1:"N";s:1:"B";s:1:"B";a:4:{i:0;s:2:"43";i:1;s:1:"0";i:2;s:3:"559";i:3;s:3:"562";}}i:67;a:4:{s:1:"C";s:2:"67";s:2:"WX";s:3:"600";s:1:"N";s:1:"C";s:1:"B";a:4:{i:0;s:2:"41";i:1;s:3:"-18";i:2;s:3:"540";i:3;s:3:"580";}}s:1:"C";a:4:{s:1:"C";s:2:"67";s:2:"WX";s:3:"600";s:1:"N";s:1:"C";s:1:"B";a:4:{i:0;s:2:"41";i:1;s:3:"-18";i:2;s:3:"540";i:3;s:3:"580";}}i:68;a:4:{s:1:"C";s:2:"68";s:2:"WX";s:3:"600";s:1:"N";s:1:"D";s:1:"B";a:4:{i:0;s:2:"43";i:1;s:1:"0";i:2;s:3:"574";i:3;s:3:"562";}}s:1:"D";a:4:{s:1:"C";s:2:"68";s:2:"WX";s:3:"600";s:1:"N";s:1:"D";s:1:"B";a:4:{i:0;s:2:"43";i:1;s:1:"0";i:2;s:3:"574";i:3;s:3:"562";}}i:69;a:4:{s:1:"C";s:2:"69";s:2:"WX";s:3:"600";s:1:"N";s:1:"E";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:1:"0";i:2;s:3:"550";i:3;s:3:"562";}}s:1:"E";a:4:{s:1:"C";s:2:"69";s:2:"WX";s:3:"600";s:1:"N";s:1:"E";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:1:"0";i:2;s:3:"550";i:3;s:3:"562";}}i:70;a:4:{s:1:"C";s:2:"70";s:2:"WX";s:3:"600";s:1:"N";s:1:"F";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:1:"0";i:2;s:3:"545";i:3;s:3:"562";}}s:1:"F";a:4:{s:1:"C";s:2:"70";s:2:"WX";s:3:"600";s:1:"N";s:1:"F";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:1:"0";i:2;s:3:"545";i:3;s:3:"562";}}i:71;a:4:{s:1:"C";s:2:"71";s:2:"WX";s:3:"600";s:1:"N";s:1:"G";s:1:"B";a:4:{i:0;s:2:"31";i:1;s:3:"-18";i:2;s:3:"575";i:3;s:3:"580";}}s:1:"G";a:4:{s:1:"C";s:2:"71";s:2:"WX";s:3:"600";s:1:"N";s:1:"G";s:1:"B";a:4:{i:0;s:2:"31";i:1;s:3:"-18";i:2;s:3:"575";i:3;s:3:"580";}}i:72;a:4:{s:1:"C";s:2:"72";s:2:"WX";s:3:"600";s:1:"N";s:1:"H";s:1:"B";a:4:{i:0;s:2:"32";i:1;s:1:"0";i:2;s:3:"568";i:3;s:3:"562";}}s:1:"H";a:4:{s:1:"C";s:2:"72";s:2:"WX";s:3:"600";s:1:"N";s:1:"H";s:1:"B";a:4:{i:0;s:2:"32";i:1;s:1:"0";i:2;s:3:"568";i:3;s:3:"562";}}i:73;a:4:{s:1:"C";s:2:"73";s:2:"WX";s:3:"600";s:1:"N";s:1:"I";s:1:"B";a:4:{i:0;s:2:"96";i:1;s:1:"0";i:2;s:3:"504";i:3;s:3:"562";}}s:1:"I";a:4:{s:1:"C";s:2:"73";s:2:"WX";s:3:"600";s:1:"N";s:1:"I";s:1:"B";a:4:{i:0;s:2:"96";i:1;s:1:"0";i:2;s:3:"504";i:3;s:3:"562";}}i:74;a:4:{s:1:"C";s:2:"74";s:2:"WX";s:3:"600";s:1:"N";s:1:"J";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-18";i:2;s:3:"566";i:3;s:3:"562";}}s:1:"J";a:4:{s:1:"C";s:2:"74";s:2:"WX";s:3:"600";s:1:"N";s:1:"J";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-18";i:2;s:3:"566";i:3;s:3:"562";}}i:75;a:4:{s:1:"C";s:2:"75";s:2:"WX";s:3:"600";s:1:"N";s:1:"K";s:1:"B";a:4:{i:0;s:2:"38";i:1;s:1:"0";i:2;s:3:"582";i:3;s:3:"562";}}s:1:"K";a:4:{s:1:"C";s:2:"75";s:2:"WX";s:3:"600";s:1:"N";s:1:"K";s:1:"B";a:4:{i:0;s:2:"38";i:1;s:1:"0";i:2;s:3:"582";i:3;s:3:"562";}}i:76;a:4:{s:1:"C";s:2:"76";s:2:"WX";s:3:"600";s:1:"N";s:1:"L";s:1:"B";a:4:{i:0;s:2:"47";i:1;s:1:"0";i:2;s:3:"554";i:3;s:3:"562";}}s:1:"L";a:4:{s:1:"C";s:2:"76";s:2:"WX";s:3:"600";s:1:"N";s:1:"L";s:1:"B";a:4:{i:0;s:2:"47";i:1;s:1:"0";i:2;s:3:"554";i:3;s:3:"562";}}i:77;a:4:{s:1:"C";s:2:"77";s:2:"WX";s:3:"600";s:1:"N";s:1:"M";s:1:"B";a:4:{i:0;s:1:"4";i:1;s:1:"0";i:2;s:3:"596";i:3;s:3:"562";}}s:1:"M";a:4:{s:1:"C";s:2:"77";s:2:"WX";s:3:"600";s:1:"N";s:1:"M";s:1:"B";a:4:{i:0;s:1:"4";i:1;s:1:"0";i:2;s:3:"596";i:3;s:3:"562";}}i:78;a:4:{s:1:"C";s:2:"78";s:2:"WX";s:3:"600";s:1:"N";s:1:"N";s:1:"B";a:4:{i:0;s:1:"7";i:1;s:3:"-13";i:2;s:3:"593";i:3;s:3:"562";}}s:1:"N";a:4:{s:1:"C";s:2:"78";s:2:"WX";s:3:"600";s:1:"N";s:1:"N";s:1:"B";a:4:{i:0;s:1:"7";i:1;s:3:"-13";i:2;s:3:"593";i:3;s:3:"562";}}i:79;a:4:{s:1:"C";s:2:"79";s:2:"WX";s:3:"600";s:1:"N";s:1:"O";s:1:"B";a:4:{i:0;s:2:"43";i:1;s:3:"-18";i:2;s:3:"557";i:3;s:3:"580";}}s:1:"O";a:4:{s:1:"C";s:2:"79";s:2:"WX";s:3:"600";s:1:"N";s:1:"O";s:1:"B";a:4:{i:0;s:2:"43";i:1;s:3:"-18";i:2;s:3:"557";i:3;s:3:"580";}}i:80;a:4:{s:1:"C";s:2:"80";s:2:"WX";s:3:"600";s:1:"N";s:1:"P";s:1:"B";a:4:{i:0;s:2:"79";i:1;s:1:"0";i:2;s:3:"558";i:3;s:3:"562";}}s:1:"P";a:4:{s:1:"C";s:2:"80";s:2:"WX";s:3:"600";s:1:"N";s:1:"P";s:1:"B";a:4:{i:0;s:2:"79";i:1;s:1:"0";i:2;s:3:"558";i:3;s:3:"562";}}i:81;a:4:{s:1:"C";s:2:"81";s:2:"WX";s:3:"600";s:1:"N";s:1:"Q";s:1:"B";a:4:{i:0;s:2:"43";i:1;s:4:"-138";i:2;s:3:"557";i:3;s:3:"580";}}s:1:"Q";a:4:{s:1:"C";s:2:"81";s:2:"WX";s:3:"600";s:1:"N";s:1:"Q";s:1:"B";a:4:{i:0;s:2:"43";i:1;s:4:"-138";i:2;s:3:"557";i:3;s:3:"580";}}i:82;a:4:{s:1:"C";s:2:"82";s:2:"WX";s:3:"600";s:1:"N";s:1:"R";s:1:"B";a:4:{i:0;s:2:"38";i:1;s:1:"0";i:2;s:3:"588";i:3;s:3:"562";}}s:1:"R";a:4:{s:1:"C";s:2:"82";s:2:"WX";s:3:"600";s:1:"N";s:1:"R";s:1:"B";a:4:{i:0;s:2:"38";i:1;s:1:"0";i:2;s:3:"588";i:3;s:3:"562";}}i:83;a:4:{s:1:"C";s:2:"83";s:2:"WX";s:3:"600";s:1:"N";s:1:"S";s:1:"B";a:4:{i:0;s:2:"72";i:1;s:3:"-20";i:2;s:3:"529";i:3;s:3:"580";}}s:1:"S";a:4:{s:1:"C";s:2:"83";s:2:"WX";s:3:"600";s:1:"N";s:1:"S";s:1:"B";a:4:{i:0;s:2:"72";i:1;s:3:"-20";i:2;s:3:"529";i:3;s:3:"580";}}i:84;a:4:{s:1:"C";s:2:"84";s:2:"WX";s:3:"600";s:1:"N";s:1:"T";s:1:"B";a:4:{i:0;s:2:"38";i:1;s:1:"0";i:2;s:3:"563";i:3;s:3:"562";}}s:1:"T";a:4:{s:1:"C";s:2:"84";s:2:"WX";s:3:"600";s:1:"N";s:1:"T";s:1:"B";a:4:{i:0;s:2:"38";i:1;s:1:"0";i:2;s:3:"563";i:3;s:3:"562";}}i:85;a:4:{s:1:"C";s:2:"85";s:2:"WX";s:3:"600";s:1:"N";s:1:"U";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:3:"-18";i:2;s:3:"583";i:3;s:3:"562";}}s:1:"U";a:4:{s:1:"C";s:2:"85";s:2:"WX";s:3:"600";s:1:"N";s:1:"U";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:3:"-18";i:2;s:3:"583";i:3;s:3:"562";}}i:86;a:4:{s:1:"C";s:2:"86";s:2:"WX";s:3:"600";s:1:"N";s:1:"V";s:1:"B";a:4:{i:0;s:2:"-4";i:1;s:3:"-13";i:2;s:3:"604";i:3;s:3:"562";}}s:1:"V";a:4:{s:1:"C";s:2:"86";s:2:"WX";s:3:"600";s:1:"N";s:1:"V";s:1:"B";a:4:{i:0;s:2:"-4";i:1;s:3:"-13";i:2;s:3:"604";i:3;s:3:"562";}}i:87;a:4:{s:1:"C";s:2:"87";s:2:"WX";s:3:"600";s:1:"N";s:1:"W";s:1:"B";a:4:{i:0;s:2:"-3";i:1;s:3:"-13";i:2;s:3:"603";i:3;s:3:"562";}}s:1:"W";a:4:{s:1:"C";s:2:"87";s:2:"WX";s:3:"600";s:1:"N";s:1:"W";s:1:"B";a:4:{i:0;s:2:"-3";i:1;s:3:"-13";i:2;s:3:"603";i:3;s:3:"562";}}i:88;a:4:{s:1:"C";s:2:"88";s:2:"WX";s:3:"600";s:1:"N";s:1:"X";s:1:"B";a:4:{i:0;s:2:"23";i:1;s:1:"0";i:2;s:3:"577";i:3;s:3:"562";}}s:1:"X";a:4:{s:1:"C";s:2:"88";s:2:"WX";s:3:"600";s:1:"N";s:1:"X";s:1:"B";a:4:{i:0;s:2:"23";i:1;s:1:"0";i:2;s:3:"577";i:3;s:3:"562";}}i:89;a:4:{s:1:"C";s:2:"89";s:2:"WX";s:3:"600";s:1:"N";s:1:"Y";s:1:"B";a:4:{i:0;s:2:"24";i:1;s:1:"0";i:2;s:3:"576";i:3;s:3:"562";}}s:1:"Y";a:4:{s:1:"C";s:2:"89";s:2:"WX";s:3:"600";s:1:"N";s:1:"Y";s:1:"B";a:4:{i:0;s:2:"24";i:1;s:1:"0";i:2;s:3:"576";i:3;s:3:"562";}}i:90;a:4:{s:1:"C";s:2:"90";s:2:"WX";s:3:"600";s:1:"N";s:1:"Z";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:1:"0";i:2;s:3:"514";i:3;s:3:"562";}}s:1:"Z";a:4:{s:1:"C";s:2:"90";s:2:"WX";s:3:"600";s:1:"N";s:1:"Z";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:1:"0";i:2;s:3:"514";i:3;s:3:"562";}}i:91;a:4:{s:1:"C";s:2:"91";s:2:"WX";s:3:"600";s:1:"N";s:11:"bracketleft";s:1:"B";a:4:{i:0;s:3:"269";i:1;s:4:"-108";i:2;s:3:"442";i:3;s:3:"622";}}s:11:"bracketleft";a:4:{s:1:"C";s:2:"91";s:2:"WX";s:3:"600";s:1:"N";s:11:"bracketleft";s:1:"B";a:4:{i:0;s:3:"269";i:1;s:4:"-108";i:2;s:3:"442";i:3;s:3:"622";}}i:92;a:4:{s:1:"C";s:2:"92";s:2:"WX";s:3:"600";s:1:"N";s:9:"backslash";s:1:"B";a:4:{i:0;s:3:"118";i:1;s:3:"-80";i:2;s:3:"482";i:3;s:3:"629";}}s:9:"backslash";a:4:{s:1:"C";s:2:"92";s:2:"WX";s:3:"600";s:1:"N";s:9:"backslash";s:1:"B";a:4:{i:0;s:3:"118";i:1;s:3:"-80";i:2;s:3:"482";i:3;s:3:"629";}}i:93;a:4:{s:1:"C";s:2:"93";s:2:"WX";s:3:"600";s:1:"N";s:12:"bracketright";s:1:"B";a:4:{i:0;s:3:"158";i:1;s:4:"-108";i:2;s:3:"331";i:3;s:3:"622";}}s:12:"bracketright";a:4:{s:1:"C";s:2:"93";s:2:"WX";s:3:"600";s:1:"N";s:12:"bracketright";s:1:"B";a:4:{i:0;s:3:"158";i:1;s:4:"-108";i:2;s:3:"331";i:3;s:3:"622";}}i:94;a:4:{s:1:"C";s:2:"94";s:2:"WX";s:3:"600";s:1:"N";s:11:"asciicircum";s:1:"B";a:4:{i:0;s:2:"94";i:1;s:3:"354";i:2;s:3:"506";i:3;s:3:"622";}}s:11:"asciicircum";a:4:{s:1:"C";s:2:"94";s:2:"WX";s:3:"600";s:1:"N";s:11:"asciicircum";s:1:"B";a:4:{i:0;s:2:"94";i:1;s:3:"354";i:2;s:3:"506";i:3;s:3:"622";}}i:95;a:4:{s:1:"C";s:2:"95";s:2:"WX";s:3:"600";s:1:"N";s:10:"underscore";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:4:"-125";i:2;s:3:"600";i:3;s:3:"-75";}}s:10:"underscore";a:4:{s:1:"C";s:2:"95";s:2:"WX";s:3:"600";s:1:"N";s:10:"underscore";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:4:"-125";i:2;s:3:"600";i:3;s:3:"-75";}}i:96;a:4:{s:1:"C";s:2:"96";s:2:"WX";s:3:"600";s:1:"N";s:9:"quoteleft";s:1:"B";a:4:{i:0;s:3:"224";i:1;s:3:"328";i:2;s:3:"387";i:3;s:3:"562";}}s:9:"quoteleft";a:4:{s:1:"C";s:2:"96";s:2:"WX";s:3:"600";s:1:"N";s:9:"quoteleft";s:1:"B";a:4:{i:0;s:3:"224";i:1;s:3:"328";i:2;s:3:"387";i:3;s:3:"562";}}i:97;a:4:{s:1:"C";s:2:"97";s:2:"WX";s:3:"600";s:1:"N";s:1:"a";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:3:"-15";i:2;s:3:"559";i:3;s:3:"441";}}s:1:"a";a:4:{s:1:"C";s:2:"97";s:2:"WX";s:3:"600";s:1:"N";s:1:"a";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:3:"-15";i:2;s:3:"559";i:3;s:3:"441";}}i:98;a:4:{s:1:"C";s:2:"98";s:2:"WX";s:3:"600";s:1:"N";s:1:"b";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:3:"-15";i:2;s:3:"575";i:3;s:3:"629";}}s:1:"b";a:4:{s:1:"C";s:2:"98";s:2:"WX";s:3:"600";s:1:"N";s:1:"b";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:3:"-15";i:2;s:3:"575";i:3;s:3:"629";}}i:99;a:4:{s:1:"C";s:2:"99";s:2:"WX";s:3:"600";s:1:"N";s:1:"c";s:1:"B";a:4:{i:0;s:2:"66";i:1;s:3:"-15";i:2;s:3:"529";i:3;s:3:"441";}}s:1:"c";a:4:{s:1:"C";s:2:"99";s:2:"WX";s:3:"600";s:1:"N";s:1:"c";s:1:"B";a:4:{i:0;s:2:"66";i:1;s:3:"-15";i:2;s:3:"529";i:3;s:3:"441";}}i:100;a:4:{s:1:"C";s:3:"100";s:2:"WX";s:3:"600";s:1:"N";s:1:"d";s:1:"B";a:4:{i:0;s:2:"45";i:1;s:3:"-15";i:2;s:3:"591";i:3;s:3:"629";}}s:1:"d";a:4:{s:1:"C";s:3:"100";s:2:"WX";s:3:"600";s:1:"N";s:1:"d";s:1:"B";a:4:{i:0;s:2:"45";i:1;s:3:"-15";i:2;s:3:"591";i:3;s:3:"629";}}i:101;a:4:{s:1:"C";s:3:"101";s:2:"WX";s:3:"600";s:1:"N";s:1:"e";s:1:"B";a:4:{i:0;s:2:"66";i:1;s:3:"-15";i:2;s:3:"548";i:3;s:3:"441";}}s:1:"e";a:4:{s:1:"C";s:3:"101";s:2:"WX";s:3:"600";s:1:"N";s:1:"e";s:1:"B";a:4:{i:0;s:2:"66";i:1;s:3:"-15";i:2;s:3:"548";i:3;s:3:"441";}}i:102;a:5:{s:1:"C";s:3:"102";s:2:"WX";s:3:"600";s:1:"N";s:1:"f";s:1:"B";a:4:{i:0;s:3:"114";i:1;s:1:"0";i:2;s:3:"531";i:3;s:3:"629";}s:1:"L";a:2:{i:0;s:1:"l";i:1;s:2:"fl";}}s:1:"f";a:5:{s:1:"C";s:3:"102";s:2:"WX";s:3:"600";s:1:"N";s:1:"f";s:1:"B";a:4:{i:0;s:3:"114";i:1;s:1:"0";i:2;s:3:"531";i:3;s:3:"629";}s:1:"L";a:2:{i:0;s:1:"l";i:1;s:2:"fl";}}i:103;a:4:{s:1:"C";s:3:"103";s:2:"WX";s:3:"600";s:1:"N";s:1:"g";s:1:"B";a:4:{i:0;s:2:"45";i:1;s:4:"-157";i:2;s:3:"566";i:3;s:3:"441";}}s:1:"g";a:4:{s:1:"C";s:3:"103";s:2:"WX";s:3:"600";s:1:"N";s:1:"g";s:1:"B";a:4:{i:0;s:2:"45";i:1;s:4:"-157";i:2;s:3:"566";i:3;s:3:"441";}}i:104;a:4:{s:1:"C";s:3:"104";s:2:"WX";s:3:"600";s:1:"N";s:1:"h";s:1:"B";a:4:{i:0;s:2:"18";i:1;s:1:"0";i:2;s:3:"582";i:3;s:3:"629";}}s:1:"h";a:4:{s:1:"C";s:3:"104";s:2:"WX";s:3:"600";s:1:"N";s:1:"h";s:1:"B";a:4:{i:0;s:2:"18";i:1;s:1:"0";i:2;s:3:"582";i:3;s:3:"629";}}i:105;a:4:{s:1:"C";s:3:"105";s:2:"WX";s:3:"600";s:1:"N";s:1:"i";s:1:"B";a:4:{i:0;s:2:"95";i:1;s:1:"0";i:2;s:3:"505";i:3;s:3:"657";}}s:1:"i";a:4:{s:1:"C";s:3:"105";s:2:"WX";s:3:"600";s:1:"N";s:1:"i";s:1:"B";a:4:{i:0;s:2:"95";i:1;s:1:"0";i:2;s:3:"505";i:3;s:3:"657";}}i:106;a:4:{s:1:"C";s:3:"106";s:2:"WX";s:3:"600";s:1:"N";s:1:"j";s:1:"B";a:4:{i:0;s:2:"82";i:1;s:4:"-157";i:2;s:3:"410";i:3;s:3:"657";}}s:1:"j";a:4:{s:1:"C";s:3:"106";s:2:"WX";s:3:"600";s:1:"N";s:1:"j";s:1:"B";a:4:{i:0;s:2:"82";i:1;s:4:"-157";i:2;s:3:"410";i:3;s:3:"657";}}i:107;a:4:{s:1:"C";s:3:"107";s:2:"WX";s:3:"600";s:1:"N";s:1:"k";s:1:"B";a:4:{i:0;s:2:"43";i:1;s:1:"0";i:2;s:3:"580";i:3;s:3:"629";}}s:1:"k";a:4:{s:1:"C";s:3:"107";s:2:"WX";s:3:"600";s:1:"N";s:1:"k";s:1:"B";a:4:{i:0;s:2:"43";i:1;s:1:"0";i:2;s:3:"580";i:3;s:3:"629";}}i:108;a:4:{s:1:"C";s:3:"108";s:2:"WX";s:3:"600";s:1:"N";s:1:"l";s:1:"B";a:4:{i:0;s:2:"95";i:1;s:1:"0";i:2;s:3:"505";i:3;s:3:"629";}}s:1:"l";a:4:{s:1:"C";s:3:"108";s:2:"WX";s:3:"600";s:1:"N";s:1:"l";s:1:"B";a:4:{i:0;s:2:"95";i:1;s:1:"0";i:2;s:3:"505";i:3;s:3:"629";}}i:109;a:4:{s:1:"C";s:3:"109";s:2:"WX";s:3:"600";s:1:"N";s:1:"m";s:1:"B";a:4:{i:0;s:2:"-5";i:1;s:1:"0";i:2;s:3:"605";i:3;s:3:"441";}}s:1:"m";a:4:{s:1:"C";s:3:"109";s:2:"WX";s:3:"600";s:1:"N";s:1:"m";s:1:"B";a:4:{i:0;s:2:"-5";i:1;s:1:"0";i:2;s:3:"605";i:3;s:3:"441";}}i:110;a:4:{s:1:"C";s:3:"110";s:2:"WX";s:3:"600";s:1:"N";s:1:"n";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:1:"0";i:2;s:3:"575";i:3;s:3:"441";}}s:1:"n";a:4:{s:1:"C";s:3:"110";s:2:"WX";s:3:"600";s:1:"N";s:1:"n";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:1:"0";i:2;s:3:"575";i:3;s:3:"441";}}i:111;a:4:{s:1:"C";s:3:"111";s:2:"WX";s:3:"600";s:1:"N";s:1:"o";s:1:"B";a:4:{i:0;s:2:"62";i:1;s:3:"-15";i:2;s:3:"538";i:3;s:3:"441";}}s:1:"o";a:4:{s:1:"C";s:3:"111";s:2:"WX";s:3:"600";s:1:"N";s:1:"o";s:1:"B";a:4:{i:0;s:2:"62";i:1;s:3:"-15";i:2;s:3:"538";i:3;s:3:"441";}}i:112;a:4:{s:1:"C";s:3:"112";s:2:"WX";s:3:"600";s:1:"N";s:1:"p";s:1:"B";a:4:{i:0;s:1:"9";i:1;s:4:"-157";i:2;s:3:"555";i:3;s:3:"441";}}s:1:"p";a:4:{s:1:"C";s:3:"112";s:2:"WX";s:3:"600";s:1:"N";s:1:"p";s:1:"B";a:4:{i:0;s:1:"9";i:1;s:4:"-157";i:2;s:3:"555";i:3;s:3:"441";}}i:113;a:4:{s:1:"C";s:3:"113";s:2:"WX";s:3:"600";s:1:"N";s:1:"q";s:1:"B";a:4:{i:0;s:2:"45";i:1;s:4:"-157";i:2;s:3:"591";i:3;s:3:"441";}}s:1:"q";a:4:{s:1:"C";s:3:"113";s:2:"WX";s:3:"600";s:1:"N";s:1:"q";s:1:"B";a:4:{i:0;s:2:"45";i:1;s:4:"-157";i:2;s:3:"591";i:3;s:3:"441";}}i:114;a:4:{s:1:"C";s:3:"114";s:2:"WX";s:3:"600";s:1:"N";s:1:"r";s:1:"B";a:4:{i:0;s:2:"60";i:1;s:1:"0";i:2;s:3:"559";i:3;s:3:"441";}}s:1:"r";a:4:{s:1:"C";s:3:"114";s:2:"WX";s:3:"600";s:1:"N";s:1:"r";s:1:"B";a:4:{i:0;s:2:"60";i:1;s:1:"0";i:2;s:3:"559";i:3;s:3:"441";}}i:115;a:4:{s:1:"C";s:3:"115";s:2:"WX";s:3:"600";s:1:"N";s:1:"s";s:1:"B";a:4:{i:0;s:2:"80";i:1;s:3:"-15";i:2;s:3:"513";i:3;s:3:"441";}}s:1:"s";a:4:{s:1:"C";s:3:"115";s:2:"WX";s:3:"600";s:1:"N";s:1:"s";s:1:"B";a:4:{i:0;s:2:"80";i:1;s:3:"-15";i:2;s:3:"513";i:3;s:3:"441";}}i:116;a:4:{s:1:"C";s:3:"116";s:2:"WX";s:3:"600";s:1:"N";s:1:"t";s:1:"B";a:4:{i:0;s:2:"87";i:1;s:3:"-15";i:2;s:3:"530";i:3;s:3:"561";}}s:1:"t";a:4:{s:1:"C";s:3:"116";s:2:"WX";s:3:"600";s:1:"N";s:1:"t";s:1:"B";a:4:{i:0;s:2:"87";i:1;s:3:"-15";i:2;s:3:"530";i:3;s:3:"561";}}i:117;a:4:{s:1:"C";s:3:"117";s:2:"WX";s:3:"600";s:1:"N";s:1:"u";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:3:"-15";i:2;s:3:"562";i:3;s:3:"426";}}s:1:"u";a:4:{s:1:"C";s:3:"117";s:2:"WX";s:3:"600";s:1:"N";s:1:"u";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:3:"-15";i:2;s:3:"562";i:3;s:3:"426";}}i:118;a:4:{s:1:"C";s:3:"118";s:2:"WX";s:3:"600";s:1:"N";s:1:"v";s:1:"B";a:4:{i:0;s:2:"10";i:1;s:3:"-10";i:2;s:3:"590";i:3;s:3:"426";}}s:1:"v";a:4:{s:1:"C";s:3:"118";s:2:"WX";s:3:"600";s:1:"N";s:1:"v";s:1:"B";a:4:{i:0;s:2:"10";i:1;s:3:"-10";i:2;s:3:"590";i:3;s:3:"426";}}i:119;a:4:{s:1:"C";s:3:"119";s:2:"WX";s:3:"600";s:1:"N";s:1:"w";s:1:"B";a:4:{i:0;s:2:"-4";i:1;s:3:"-10";i:2;s:3:"604";i:3;s:3:"426";}}s:1:"w";a:4:{s:1:"C";s:3:"119";s:2:"WX";s:3:"600";s:1:"N";s:1:"w";s:1:"B";a:4:{i:0;s:2:"-4";i:1;s:3:"-10";i:2;s:3:"604";i:3;s:3:"426";}}i:120;a:4:{s:1:"C";s:3:"120";s:2:"WX";s:3:"600";s:1:"N";s:1:"x";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:1:"0";i:2;s:3:"580";i:3;s:3:"426";}}s:1:"x";a:4:{s:1:"C";s:3:"120";s:2:"WX";s:3:"600";s:1:"N";s:1:"x";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:1:"0";i:2;s:3:"580";i:3;s:3:"426";}}i:121;a:4:{s:1:"C";s:3:"121";s:2:"WX";s:3:"600";s:1:"N";s:1:"y";s:1:"B";a:4:{i:0;s:1:"7";i:1;s:4:"-157";i:2;s:3:"592";i:3;s:3:"426";}}s:1:"y";a:4:{s:1:"C";s:3:"121";s:2:"WX";s:3:"600";s:1:"N";s:1:"y";s:1:"B";a:4:{i:0;s:1:"7";i:1;s:4:"-157";i:2;s:3:"592";i:3;s:3:"426";}}i:122;a:4:{s:1:"C";s:3:"122";s:2:"WX";s:3:"600";s:1:"N";s:1:"z";s:1:"B";a:4:{i:0;s:2:"99";i:1;s:1:"0";i:2;s:3:"502";i:3;s:3:"426";}}s:1:"z";a:4:{s:1:"C";s:3:"122";s:2:"WX";s:3:"600";s:1:"N";s:1:"z";s:1:"B";a:4:{i:0;s:2:"99";i:1;s:1:"0";i:2;s:3:"502";i:3;s:3:"426";}}i:123;a:4:{s:1:"C";s:3:"123";s:2:"WX";s:3:"600";s:1:"N";s:9:"braceleft";s:1:"B";a:4:{i:0;s:3:"182";i:1;s:4:"-108";i:2;s:3:"437";i:3;s:3:"622";}}s:9:"braceleft";a:4:{s:1:"C";s:3:"123";s:2:"WX";s:3:"600";s:1:"N";s:9:"braceleft";s:1:"B";a:4:{i:0;s:3:"182";i:1;s:4:"-108";i:2;s:3:"437";i:3;s:3:"622";}}i:124;a:4:{s:1:"C";s:3:"124";s:2:"WX";s:3:"600";s:1:"N";s:3:"bar";s:1:"B";a:4:{i:0;s:3:"275";i:1;s:4:"-250";i:2;s:3:"326";i:3;s:3:"750";}}s:3:"bar";a:4:{s:1:"C";s:3:"124";s:2:"WX";s:3:"600";s:1:"N";s:3:"bar";s:1:"B";a:4:{i:0;s:3:"275";i:1;s:4:"-250";i:2;s:3:"326";i:3;s:3:"750";}}i:125;a:4:{s:1:"C";s:3:"125";s:2:"WX";s:3:"600";s:1:"N";s:10:"braceright";s:1:"B";a:4:{i:0;s:3:"163";i:1;s:4:"-108";i:2;s:3:"418";i:3;s:3:"622";}}s:10:"braceright";a:4:{s:1:"C";s:3:"125";s:2:"WX";s:3:"600";s:1:"N";s:10:"braceright";s:1:"B";a:4:{i:0;s:3:"163";i:1;s:4:"-108";i:2;s:3:"418";i:3;s:3:"622";}}i:126;a:4:{s:1:"C";s:3:"126";s:2:"WX";s:3:"600";s:1:"N";s:10:"asciitilde";s:1:"B";a:4:{i:0;s:2:"63";i:1;s:3:"197";i:2;s:3:"540";i:3;s:3:"320";}}s:10:"asciitilde";a:4:{s:1:"C";s:3:"126";s:2:"WX";s:3:"600";s:1:"N";s:10:"asciitilde";s:1:"B";a:4:{i:0;s:2:"63";i:1;s:3:"197";i:2;s:3:"540";i:3;s:3:"320";}}i:161;a:4:{s:1:"C";s:3:"161";s:2:"WX";s:3:"600";s:1:"N";s:10:"exclamdown";s:1:"B";a:4:{i:0;s:3:"236";i:1;s:4:"-157";i:2;s:3:"364";i:3;s:3:"430";}}s:10:"exclamdown";a:4:{s:1:"C";s:3:"161";s:2:"WX";s:3:"600";s:1:"N";s:10:"exclamdown";s:1:"B";a:4:{i:0;s:3:"236";i:1;s:4:"-157";i:2;s:3:"364";i:3;s:3:"430";}}i:162;a:4:{s:1:"C";s:3:"162";s:2:"WX";s:3:"600";s:1:"N";s:4:"cent";s:1:"B";a:4:{i:0;s:2:"96";i:1;s:3:"-49";i:2;s:3:"500";i:3;s:3:"614";}}s:4:"cent";a:4:{s:1:"C";s:3:"162";s:2:"WX";s:3:"600";s:1:"N";s:4:"cent";s:1:"B";a:4:{i:0;s:2:"96";i:1;s:3:"-49";i:2;s:3:"500";i:3;s:3:"614";}}i:163;a:4:{s:1:"C";s:3:"163";s:2:"WX";s:3:"600";s:1:"N";s:8:"sterling";s:1:"B";a:4:{i:0;s:2:"84";i:1;s:3:"-21";i:2;s:3:"521";i:3;s:3:"611";}}s:8:"sterling";a:4:{s:1:"C";s:3:"163";s:2:"WX";s:3:"600";s:1:"N";s:8:"sterling";s:1:"B";a:4:{i:0;s:2:"84";i:1;s:3:"-21";i:2;s:3:"521";i:3;s:3:"611";}}i:164;a:4:{s:1:"C";s:3:"164";s:2:"WX";s:3:"600";s:1:"N";s:8:"fraction";s:1:"B";a:4:{i:0;s:2:"92";i:1;s:3:"-57";i:2;s:3:"509";i:3;s:3:"665";}}s:8:"fraction";a:4:{s:1:"C";s:3:"164";s:2:"WX";s:3:"600";s:1:"N";s:8:"fraction";s:1:"B";a:4:{i:0;s:2:"92";i:1;s:3:"-57";i:2;s:3:"509";i:3;s:3:"665";}}i:165;a:4:{s:1:"C";s:3:"165";s:2:"WX";s:3:"600";s:1:"N";s:3:"yen";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:1:"0";i:2;s:3:"574";i:3;s:3:"562";}}s:3:"yen";a:4:{s:1:"C";s:3:"165";s:2:"WX";s:3:"600";s:1:"N";s:3:"yen";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:1:"0";i:2;s:3:"574";i:3;s:3:"562";}}i:166;a:4:{s:1:"C";s:3:"166";s:2:"WX";s:3:"600";s:1:"N";s:6:"florin";s:1:"B";a:4:{i:0;s:1:"4";i:1;s:4:"-143";i:2;s:3:"539";i:3;s:3:"622";}}s:6:"florin";a:4:{s:1:"C";s:3:"166";s:2:"WX";s:3:"600";s:1:"N";s:6:"florin";s:1:"B";a:4:{i:0;s:1:"4";i:1;s:4:"-143";i:2;s:3:"539";i:3;s:3:"622";}}i:167;a:4:{s:1:"C";s:3:"167";s:2:"WX";s:3:"600";s:1:"N";s:7:"section";s:1:"B";a:4:{i:0;s:3:"113";i:1;s:3:"-78";i:2;s:3:"488";i:3;s:3:"580";}}s:7:"section";a:4:{s:1:"C";s:3:"167";s:2:"WX";s:3:"600";s:1:"N";s:7:"section";s:1:"B";a:4:{i:0;s:3:"113";i:1;s:3:"-78";i:2;s:3:"488";i:3;s:3:"580";}}i:168;a:4:{s:1:"C";s:3:"168";s:2:"WX";s:3:"600";s:1:"N";s:8:"currency";s:1:"B";a:4:{i:0;s:2:"73";i:1;s:2:"58";i:2;s:3:"527";i:3;s:3:"506";}}s:8:"currency";a:4:{s:1:"C";s:3:"168";s:2:"WX";s:3:"600";s:1:"N";s:8:"currency";s:1:"B";a:4:{i:0;s:2:"73";i:1;s:2:"58";i:2;s:3:"527";i:3;s:3:"506";}}i:169;a:4:{s:1:"C";s:3:"169";s:2:"WX";s:3:"600";s:1:"N";s:11:"quotesingle";s:1:"B";a:4:{i:0;s:3:"259";i:1;s:3:"328";i:2;s:3:"341";i:3;s:3:"562";}}s:11:"quotesingle";a:4:{s:1:"C";s:3:"169";s:2:"WX";s:3:"600";s:1:"N";s:11:"quotesingle";s:1:"B";a:4:{i:0;s:3:"259";i:1;s:3:"328";i:2;s:3:"341";i:3;s:3:"562";}}i:170;a:4:{s:1:"C";s:3:"170";s:2:"WX";s:3:"600";s:1:"N";s:12:"quotedblleft";s:1:"B";a:4:{i:0;s:3:"143";i:1;s:3:"328";i:2;s:3:"471";i:3;s:3:"562";}}s:12:"quotedblleft";a:4:{s:1:"C";s:3:"170";s:2:"WX";s:3:"600";s:1:"N";s:12:"quotedblleft";s:1:"B";a:4:{i:0;s:3:"143";i:1;s:3:"328";i:2;s:3:"471";i:3;s:3:"562";}}i:171;a:4:{s:1:"C";s:3:"171";s:2:"WX";s:3:"600";s:1:"N";s:13:"guillemotleft";s:1:"B";a:4:{i:0;s:2:"37";i:1;s:2:"70";i:2;s:3:"563";i:3;s:3:"446";}}s:13:"guillemotleft";a:4:{s:1:"C";s:3:"171";s:2:"WX";s:3:"600";s:1:"N";s:13:"guillemotleft";s:1:"B";a:4:{i:0;s:2:"37";i:1;s:2:"70";i:2;s:3:"563";i:3;s:3:"446";}}i:172;a:4:{s:1:"C";s:3:"172";s:2:"WX";s:3:"600";s:1:"N";s:13:"guilsinglleft";s:1:"B";a:4:{i:0;s:3:"149";i:1;s:2:"70";i:2;s:3:"451";i:3;s:3:"446";}}s:13:"guilsinglleft";a:4:{s:1:"C";s:3:"172";s:2:"WX";s:3:"600";s:1:"N";s:13:"guilsinglleft";s:1:"B";a:4:{i:0;s:3:"149";i:1;s:2:"70";i:2;s:3:"451";i:3;s:3:"446";}}i:173;a:4:{s:1:"C";s:3:"173";s:2:"WX";s:3:"600";s:1:"N";s:14:"guilsinglright";s:1:"B";a:4:{i:0;s:3:"149";i:1;s:2:"70";i:2;s:3:"451";i:3;s:3:"446";}}s:14:"guilsinglright";a:4:{s:1:"C";s:3:"173";s:2:"WX";s:3:"600";s:1:"N";s:14:"guilsinglright";s:1:"B";a:4:{i:0;s:3:"149";i:1;s:2:"70";i:2;s:3:"451";i:3;s:3:"446";}}i:174;a:4:{s:1:"C";s:3:"174";s:2:"WX";s:3:"600";s:1:"N";s:2:"fi";s:1:"B";a:4:{i:0;s:1:"3";i:1;s:1:"0";i:2;s:3:"597";i:3;s:3:"629";}}s:2:"fi";a:4:{s:1:"C";s:3:"174";s:2:"WX";s:3:"600";s:1:"N";s:2:"fi";s:1:"B";a:4:{i:0;s:1:"3";i:1;s:1:"0";i:2;s:3:"597";i:3;s:3:"629";}}i:175;a:4:{s:1:"C";s:3:"175";s:2:"WX";s:3:"600";s:1:"N";s:2:"fl";s:1:"B";a:4:{i:0;s:1:"3";i:1;s:1:"0";i:2;s:3:"597";i:3;s:3:"629";}}s:2:"fl";a:4:{s:1:"C";s:3:"175";s:2:"WX";s:3:"600";s:1:"N";s:2:"fl";s:1:"B";a:4:{i:0;s:1:"3";i:1;s:1:"0";i:2;s:3:"597";i:3;s:3:"629";}}i:177;a:4:{s:1:"C";s:3:"177";s:2:"WX";s:3:"600";s:1:"N";s:6:"endash";s:1:"B";a:4:{i:0;s:2:"75";i:1;s:3:"231";i:2;s:3:"525";i:3;s:3:"285";}}s:6:"endash";a:4:{s:1:"C";s:3:"177";s:2:"WX";s:3:"600";s:1:"N";s:6:"endash";s:1:"B";a:4:{i:0;s:2:"75";i:1;s:3:"231";i:2;s:3:"525";i:3;s:3:"285";}}i:178;a:4:{s:1:"C";s:3:"178";s:2:"WX";s:3:"600";s:1:"N";s:6:"dagger";s:1:"B";a:4:{i:0;s:3:"141";i:1;s:3:"-78";i:2;s:3:"459";i:3;s:3:"580";}}s:6:"dagger";a:4:{s:1:"C";s:3:"178";s:2:"WX";s:3:"600";s:1:"N";s:6:"dagger";s:1:"B";a:4:{i:0;s:3:"141";i:1;s:3:"-78";i:2;s:3:"459";i:3;s:3:"580";}}i:179;a:4:{s:1:"C";s:3:"179";s:2:"WX";s:3:"600";s:1:"N";s:9:"daggerdbl";s:1:"B";a:4:{i:0;s:3:"141";i:1;s:3:"-78";i:2;s:3:"459";i:3;s:3:"580";}}s:9:"daggerdbl";a:4:{s:1:"C";s:3:"179";s:2:"WX";s:3:"600";s:1:"N";s:9:"daggerdbl";s:1:"B";a:4:{i:0;s:3:"141";i:1;s:3:"-78";i:2;s:3:"459";i:3;s:3:"580";}}i:180;a:4:{s:1:"C";s:3:"180";s:2:"WX";s:3:"600";s:1:"N";s:14:"periodcentered";s:1:"B";a:4:{i:0;s:3:"222";i:1;s:3:"189";i:2;s:3:"378";i:3;s:3:"327";}}s:14:"periodcentered";a:4:{s:1:"C";s:3:"180";s:2:"WX";s:3:"600";s:1:"N";s:14:"periodcentered";s:1:"B";a:4:{i:0;s:3:"222";i:1;s:3:"189";i:2;s:3:"378";i:3;s:3:"327";}}i:182;a:4:{s:1:"C";s:3:"182";s:2:"WX";s:3:"600";s:1:"N";s:9:"paragraph";s:1:"B";a:4:{i:0;s:2:"50";i:1;s:3:"-78";i:2;s:3:"511";i:3;s:3:"562";}}s:9:"paragraph";a:4:{s:1:"C";s:3:"182";s:2:"WX";s:3:"600";s:1:"N";s:9:"paragraph";s:1:"B";a:4:{i:0;s:2:"50";i:1;s:3:"-78";i:2;s:3:"511";i:3;s:3:"562";}}i:183;a:4:{s:1:"C";s:3:"183";s:2:"WX";s:3:"600";s:1:"N";s:6:"bullet";s:1:"B";a:4:{i:0;s:3:"172";i:1;s:3:"130";i:2;s:3:"428";i:3;s:3:"383";}}s:6:"bullet";a:4:{s:1:"C";s:3:"183";s:2:"WX";s:3:"600";s:1:"N";s:6:"bullet";s:1:"B";a:4:{i:0;s:3:"172";i:1;s:3:"130";i:2;s:3:"428";i:3;s:3:"383";}}i:184;a:4:{s:1:"C";s:3:"184";s:2:"WX";s:3:"600";s:1:"N";s:14:"quotesinglbase";s:1:"B";a:4:{i:0;s:3:"213";i:1;s:4:"-134";i:2;s:3:"376";i:3;s:3:"100";}}s:14:"quotesinglbase";a:4:{s:1:"C";s:3:"184";s:2:"WX";s:3:"600";s:1:"N";s:14:"quotesinglbase";s:1:"B";a:4:{i:0;s:3:"213";i:1;s:4:"-134";i:2;s:3:"376";i:3;s:3:"100";}}i:185;a:4:{s:1:"C";s:3:"185";s:2:"WX";s:3:"600";s:1:"N";s:12:"quotedblbase";s:1:"B";a:4:{i:0;s:3:"143";i:1;s:4:"-134";i:2;s:3:"457";i:3;s:3:"100";}}s:12:"quotedblbase";a:4:{s:1:"C";s:3:"185";s:2:"WX";s:3:"600";s:1:"N";s:12:"quotedblbase";s:1:"B";a:4:{i:0;s:3:"143";i:1;s:4:"-134";i:2;s:3:"457";i:3;s:3:"100";}}i:186;a:4:{s:1:"C";s:3:"186";s:2:"WX";s:3:"600";s:1:"N";s:13:"quotedblright";s:1:"B";a:4:{i:0;s:3:"143";i:1;s:3:"328";i:2;s:3:"457";i:3;s:3:"562";}}s:13:"quotedblright";a:4:{s:1:"C";s:3:"186";s:2:"WX";s:3:"600";s:1:"N";s:13:"quotedblright";s:1:"B";a:4:{i:0;s:3:"143";i:1;s:3:"328";i:2;s:3:"457";i:3;s:3:"562";}}i:187;a:4:{s:1:"C";s:3:"187";s:2:"WX";s:3:"600";s:1:"N";s:14:"guillemotright";s:1:"B";a:4:{i:0;s:2:"37";i:1;s:2:"70";i:2;s:3:"563";i:3;s:3:"446";}}s:14:"guillemotright";a:4:{s:1:"C";s:3:"187";s:2:"WX";s:3:"600";s:1:"N";s:14:"guillemotright";s:1:"B";a:4:{i:0;s:2:"37";i:1;s:2:"70";i:2;s:3:"563";i:3;s:3:"446";}}i:188;a:4:{s:1:"C";s:3:"188";s:2:"WX";s:3:"600";s:1:"N";s:8:"ellipsis";s:1:"B";a:4:{i:0;s:2:"37";i:1;s:3:"-15";i:2;s:3:"563";i:3;s:3:"111";}}s:8:"ellipsis";a:4:{s:1:"C";s:3:"188";s:2:"WX";s:3:"600";s:1:"N";s:8:"ellipsis";s:1:"B";a:4:{i:0;s:2:"37";i:1;s:3:"-15";i:2;s:3:"563";i:3;s:3:"111";}}i:189;a:4:{s:1:"C";s:3:"189";s:2:"WX";s:3:"600";s:1:"N";s:11:"perthousand";s:1:"B";a:4:{i:0;s:1:"3";i:1;s:3:"-15";i:2;s:3:"600";i:3;s:3:"622";}}s:11:"perthousand";a:4:{s:1:"C";s:3:"189";s:2:"WX";s:3:"600";s:1:"N";s:11:"perthousand";s:1:"B";a:4:{i:0;s:1:"3";i:1;s:3:"-15";i:2;s:3:"600";i:3;s:3:"622";}}i:191;a:4:{s:1:"C";s:3:"191";s:2:"WX";s:3:"600";s:1:"N";s:12:"questiondown";s:1:"B";a:4:{i:0;s:3:"108";i:1;s:4:"-157";i:2;s:3:"471";i:3;s:3:"430";}}s:12:"questiondown";a:4:{s:1:"C";s:3:"191";s:2:"WX";s:3:"600";s:1:"N";s:12:"questiondown";s:1:"B";a:4:{i:0;s:3:"108";i:1;s:4:"-157";i:2;s:3:"471";i:3;s:3:"430";}}i:193;a:4:{s:1:"C";s:3:"193";s:2:"WX";s:3:"600";s:1:"N";s:5:"grave";s:1:"B";a:4:{i:0;s:3:"151";i:1;s:3:"497";i:2;s:3:"378";i:3;s:3:"672";}}s:5:"grave";a:4:{s:1:"C";s:3:"193";s:2:"WX";s:3:"600";s:1:"N";s:5:"grave";s:1:"B";a:4:{i:0;s:3:"151";i:1;s:3:"497";i:2;s:3:"378";i:3;s:3:"672";}}i:194;a:4:{s:1:"C";s:3:"194";s:2:"WX";s:3:"600";s:1:"N";s:5:"acute";s:1:"B";a:4:{i:0;s:3:"242";i:1;s:3:"497";i:2;s:3:"469";i:3;s:3:"672";}}s:5:"acute";a:4:{s:1:"C";s:3:"194";s:2:"WX";s:3:"600";s:1:"N";s:5:"acute";s:1:"B";a:4:{i:0;s:3:"242";i:1;s:3:"497";i:2;s:3:"469";i:3;s:3:"672";}}i:195;a:4:{s:1:"C";s:3:"195";s:2:"WX";s:3:"600";s:1:"N";s:10:"circumflex";s:1:"B";a:4:{i:0;s:3:"124";i:1;s:3:"477";i:2;s:3:"476";i:3;s:3:"654";}}s:10:"circumflex";a:4:{s:1:"C";s:3:"195";s:2:"WX";s:3:"600";s:1:"N";s:10:"circumflex";s:1:"B";a:4:{i:0;s:3:"124";i:1;s:3:"477";i:2;s:3:"476";i:3;s:3:"654";}}i:196;a:4:{s:1:"C";s:3:"196";s:2:"WX";s:3:"600";s:1:"N";s:5:"tilde";s:1:"B";a:4:{i:0;s:3:"105";i:1;s:3:"489";i:2;s:3:"503";i:3;s:3:"606";}}s:5:"tilde";a:4:{s:1:"C";s:3:"196";s:2:"WX";s:3:"600";s:1:"N";s:5:"tilde";s:1:"B";a:4:{i:0;s:3:"105";i:1;s:3:"489";i:2;s:3:"503";i:3;s:3:"606";}}i:197;a:4:{s:1:"C";s:3:"197";s:2:"WX";s:3:"600";s:1:"N";s:6:"macron";s:1:"B";a:4:{i:0;s:3:"120";i:1;s:3:"525";i:2;s:3:"480";i:3;s:3:"565";}}s:6:"macron";a:4:{s:1:"C";s:3:"197";s:2:"WX";s:3:"600";s:1:"N";s:6:"macron";s:1:"B";a:4:{i:0;s:3:"120";i:1;s:3:"525";i:2;s:3:"480";i:3;s:3:"565";}}i:198;a:4:{s:1:"C";s:3:"198";s:2:"WX";s:3:"600";s:1:"N";s:5:"breve";s:1:"B";a:4:{i:0;s:3:"153";i:1;s:3:"501";i:2;s:3:"447";i:3;s:3:"609";}}s:5:"breve";a:4:{s:1:"C";s:3:"198";s:2:"WX";s:3:"600";s:1:"N";s:5:"breve";s:1:"B";a:4:{i:0;s:3:"153";i:1;s:3:"501";i:2;s:3:"447";i:3;s:3:"609";}}i:199;a:4:{s:1:"C";s:3:"199";s:2:"WX";s:3:"600";s:1:"N";s:9:"dotaccent";s:1:"B";a:4:{i:0;s:3:"249";i:1;s:3:"537";i:2;s:3:"352";i:3;s:3:"640";}}s:9:"dotaccent";a:4:{s:1:"C";s:3:"199";s:2:"WX";s:3:"600";s:1:"N";s:9:"dotaccent";s:1:"B";a:4:{i:0;s:3:"249";i:1;s:3:"537";i:2;s:3:"352";i:3;s:3:"640";}}i:200;a:4:{s:1:"C";s:3:"200";s:2:"WX";s:3:"600";s:1:"N";s:8:"dieresis";s:1:"B";a:4:{i:0;s:3:"148";i:1;s:3:"537";i:2;s:3:"453";i:3;s:3:"640";}}s:8:"dieresis";a:4:{s:1:"C";s:3:"200";s:2:"WX";s:3:"600";s:1:"N";s:8:"dieresis";s:1:"B";a:4:{i:0;s:3:"148";i:1;s:3:"537";i:2;s:3:"453";i:3;s:3:"640";}}i:202;a:4:{s:1:"C";s:3:"202";s:2:"WX";s:3:"600";s:1:"N";s:4:"ring";s:1:"B";a:4:{i:0;s:3:"218";i:1;s:3:"463";i:2;s:3:"382";i:3;s:3:"627";}}s:4:"ring";a:4:{s:1:"C";s:3:"202";s:2:"WX";s:3:"600";s:1:"N";s:4:"ring";s:1:"B";a:4:{i:0;s:3:"218";i:1;s:3:"463";i:2;s:3:"382";i:3;s:3:"627";}}i:203;a:4:{s:1:"C";s:3:"203";s:2:"WX";s:3:"600";s:1:"N";s:7:"cedilla";s:1:"B";a:4:{i:0;s:3:"224";i:1;s:4:"-151";i:2;s:3:"362";i:3;s:2:"10";}}s:7:"cedilla";a:4:{s:1:"C";s:3:"203";s:2:"WX";s:3:"600";s:1:"N";s:7:"cedilla";s:1:"B";a:4:{i:0;s:3:"224";i:1;s:4:"-151";i:2;s:3:"362";i:3;s:2:"10";}}i:205;a:4:{s:1:"C";s:3:"205";s:2:"WX";s:3:"600";s:1:"N";s:12:"hungarumlaut";s:1:"B";a:4:{i:0;s:3:"133";i:1;s:3:"497";i:2;s:3:"540";i:3;s:3:"672";}}s:12:"hungarumlaut";a:4:{s:1:"C";s:3:"205";s:2:"WX";s:3:"600";s:1:"N";s:12:"hungarumlaut";s:1:"B";a:4:{i:0;s:3:"133";i:1;s:3:"497";i:2;s:3:"540";i:3;s:3:"672";}}i:206;a:4:{s:1:"C";s:3:"206";s:2:"WX";s:3:"600";s:1:"N";s:6:"ogonek";s:1:"B";a:4:{i:0;s:3:"211";i:1;s:4:"-172";i:2;s:3:"407";i:3;s:1:"4";}}s:6:"ogonek";a:4:{s:1:"C";s:3:"206";s:2:"WX";s:3:"600";s:1:"N";s:6:"ogonek";s:1:"B";a:4:{i:0;s:3:"211";i:1;s:4:"-172";i:2;s:3:"407";i:3;s:1:"4";}}i:207;a:4:{s:1:"C";s:3:"207";s:2:"WX";s:3:"600";s:1:"N";s:5:"caron";s:1:"B";a:4:{i:0;s:3:"124";i:1;s:3:"492";i:2;s:3:"476";i:3;s:3:"669";}}s:5:"caron";a:4:{s:1:"C";s:3:"207";s:2:"WX";s:3:"600";s:1:"N";s:5:"caron";s:1:"B";a:4:{i:0;s:3:"124";i:1;s:3:"492";i:2;s:3:"476";i:3;s:3:"669";}}i:208;a:4:{s:1:"C";s:3:"208";s:2:"WX";s:3:"600";s:1:"N";s:6:"emdash";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:3:"231";i:2;s:3:"600";i:3;s:3:"285";}}s:6:"emdash";a:4:{s:1:"C";s:3:"208";s:2:"WX";s:3:"600";s:1:"N";s:6:"emdash";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:3:"231";i:2;s:3:"600";i:3;s:3:"285";}}i:225;a:4:{s:1:"C";s:3:"225";s:2:"WX";s:3:"600";s:1:"N";s:2:"AE";s:1:"B";a:4:{i:0;s:1:"3";i:1;s:1:"0";i:2;s:3:"550";i:3;s:3:"562";}}s:2:"AE";a:4:{s:1:"C";s:3:"225";s:2:"WX";s:3:"600";s:1:"N";s:2:"AE";s:1:"B";a:4:{i:0;s:1:"3";i:1;s:1:"0";i:2;s:3:"550";i:3;s:3:"562";}}i:227;a:4:{s:1:"C";s:3:"227";s:2:"WX";s:3:"600";s:1:"N";s:11:"ordfeminine";s:1:"B";a:4:{i:0;s:3:"156";i:1;s:3:"249";i:2;s:3:"442";i:3;s:3:"580";}}s:11:"ordfeminine";a:4:{s:1:"C";s:3:"227";s:2:"WX";s:3:"600";s:1:"N";s:11:"ordfeminine";s:1:"B";a:4:{i:0;s:3:"156";i:1;s:3:"249";i:2;s:3:"442";i:3;s:3:"580";}}i:232;a:4:{s:1:"C";s:3:"232";s:2:"WX";s:3:"600";s:1:"N";s:6:"Lslash";s:1:"B";a:4:{i:0;s:2:"47";i:1;s:1:"0";i:2;s:3:"554";i:3;s:3:"562";}}s:6:"Lslash";a:4:{s:1:"C";s:3:"232";s:2:"WX";s:3:"600";s:1:"N";s:6:"Lslash";s:1:"B";a:4:{i:0;s:2:"47";i:1;s:1:"0";i:2;s:3:"554";i:3;s:3:"562";}}i:233;a:4:{s:1:"C";s:3:"233";s:2:"WX";s:3:"600";s:1:"N";s:6:"Oslash";s:1:"B";a:4:{i:0;s:2:"43";i:1;s:3:"-80";i:2;s:3:"557";i:3;s:3:"629";}}s:6:"Oslash";a:4:{s:1:"C";s:3:"233";s:2:"WX";s:3:"600";s:1:"N";s:6:"Oslash";s:1:"B";a:4:{i:0;s:2:"43";i:1;s:3:"-80";i:2;s:3:"557";i:3;s:3:"629";}}i:234;a:4:{s:1:"C";s:3:"234";s:2:"WX";s:3:"600";s:1:"N";s:2:"OE";s:1:"B";a:4:{i:0;s:1:"7";i:1;s:1:"0";i:2;s:3:"567";i:3;s:3:"562";}}s:2:"OE";a:4:{s:1:"C";s:3:"234";s:2:"WX";s:3:"600";s:1:"N";s:2:"OE";s:1:"B";a:4:{i:0;s:1:"7";i:1;s:1:"0";i:2;s:3:"567";i:3;s:3:"562";}}i:235;a:4:{s:1:"C";s:3:"235";s:2:"WX";s:3:"600";s:1:"N";s:12:"ordmasculine";s:1:"B";a:4:{i:0;s:3:"157";i:1;s:3:"249";i:2;s:3:"443";i:3;s:3:"580";}}s:12:"ordmasculine";a:4:{s:1:"C";s:3:"235";s:2:"WX";s:3:"600";s:1:"N";s:12:"ordmasculine";s:1:"B";a:4:{i:0;s:3:"157";i:1;s:3:"249";i:2;s:3:"443";i:3;s:3:"580";}}i:241;a:4:{s:1:"C";s:3:"241";s:2:"WX";s:3:"600";s:1:"N";s:2:"ae";s:1:"B";a:4:{i:0;s:2:"19";i:1;s:3:"-15";i:2;s:3:"570";i:3;s:3:"441";}}s:2:"ae";a:4:{s:1:"C";s:3:"241";s:2:"WX";s:3:"600";s:1:"N";s:2:"ae";s:1:"B";a:4:{i:0;s:2:"19";i:1;s:3:"-15";i:2;s:3:"570";i:3;s:3:"441";}}i:245;a:4:{s:1:"C";s:3:"245";s:2:"WX";s:3:"600";s:1:"N";s:8:"dotlessi";s:1:"B";a:4:{i:0;s:2:"95";i:1;s:1:"0";i:2;s:3:"505";i:3;s:3:"426";}}s:8:"dotlessi";a:4:{s:1:"C";s:3:"245";s:2:"WX";s:3:"600";s:1:"N";s:8:"dotlessi";s:1:"B";a:4:{i:0;s:2:"95";i:1;s:1:"0";i:2;s:3:"505";i:3;s:3:"426";}}i:248;a:4:{s:1:"C";s:3:"248";s:2:"WX";s:3:"600";s:1:"N";s:6:"lslash";s:1:"B";a:4:{i:0;s:2:"95";i:1;s:1:"0";i:2;s:3:"505";i:3;s:3:"629";}}s:6:"lslash";a:4:{s:1:"C";s:3:"248";s:2:"WX";s:3:"600";s:1:"N";s:6:"lslash";s:1:"B";a:4:{i:0;s:2:"95";i:1;s:1:"0";i:2;s:3:"505";i:3;s:3:"629";}}i:249;a:4:{s:1:"C";s:3:"249";s:2:"WX";s:3:"600";s:1:"N";s:6:"oslash";s:1:"B";a:4:{i:0;s:2:"62";i:1;s:3:"-80";i:2;s:3:"538";i:3;s:3:"506";}}s:6:"oslash";a:4:{s:1:"C";s:3:"249";s:2:"WX";s:3:"600";s:1:"N";s:6:"oslash";s:1:"B";a:4:{i:0;s:2:"62";i:1;s:3:"-80";i:2;s:3:"538";i:3;s:3:"506";}}i:250;a:4:{s:1:"C";s:3:"250";s:2:"WX";s:3:"600";s:1:"N";s:2:"oe";s:1:"B";a:4:{i:0;s:2:"19";i:1;s:3:"-15";i:2;s:3:"559";i:3;s:3:"441";}}s:2:"oe";a:4:{s:1:"C";s:3:"250";s:2:"WX";s:3:"600";s:1:"N";s:2:"oe";s:1:"B";a:4:{i:0;s:2:"19";i:1;s:3:"-15";i:2;s:3:"559";i:3;s:3:"441";}}i:251;a:4:{s:1:"C";s:3:"251";s:2:"WX";s:3:"600";s:1:"N";s:10:"germandbls";s:1:"B";a:4:{i:0;s:2:"48";i:1;s:3:"-15";i:2;s:3:"588";i:3;s:3:"629";}}s:10:"germandbls";a:4:{s:1:"C";s:3:"251";s:2:"WX";s:3:"600";s:1:"N";s:10:"germandbls";s:1:"B";a:4:{i:0;s:2:"48";i:1;s:3:"-15";i:2;s:3:"588";i:3;s:3:"629";}}s:9:"Idieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"Idieresis";s:1:"B";a:4:{i:0;s:2:"96";i:1;s:1:"0";i:2;s:3:"504";i:3;s:3:"753";}}s:6:"eacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"eacute";s:1:"B";a:4:{i:0;s:2:"66";i:1;s:3:"-15";i:2;s:3:"548";i:3;s:3:"672";}}s:6:"abreve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"abreve";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:3:"-15";i:2;s:3:"559";i:3;s:3:"609";}}s:13:"uhungarumlaut";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:13:"uhungarumlaut";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:3:"-15";i:2;s:3:"580";i:3;s:3:"672";}}s:6:"ecaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"ecaron";s:1:"B";a:4:{i:0;s:2:"66";i:1;s:3:"-15";i:2;s:3:"548";i:3;s:3:"669";}}s:9:"Ydieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"Ydieresis";s:1:"B";a:4:{i:0;s:2:"24";i:1;s:1:"0";i:2;s:3:"576";i:3;s:3:"753";}}s:6:"divide";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"divide";s:1:"B";a:4:{i:0;s:2:"87";i:1;s:2:"48";i:2;s:3:"513";i:3;s:3:"467";}}s:6:"Yacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Yacute";s:1:"B";a:4:{i:0;s:2:"24";i:1;s:1:"0";i:2;s:3:"576";i:3;s:3:"805";}}s:11:"Acircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:11:"Acircumflex";s:1:"B";a:4:{i:0;s:1:"3";i:1;s:1:"0";i:2;s:3:"597";i:3;s:3:"787";}}s:6:"aacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"aacute";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:3:"-15";i:2;s:3:"559";i:3;s:3:"672";}}s:11:"Ucircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:11:"Ucircumflex";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:3:"-18";i:2;s:3:"583";i:3;s:3:"787";}}s:6:"yacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"yacute";s:1:"B";a:4:{i:0;s:1:"7";i:1;s:4:"-157";i:2;s:3:"592";i:3;s:3:"672";}}s:12:"scommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"scommaaccent";s:1:"B";a:4:{i:0;s:2:"80";i:1;s:4:"-250";i:2;s:3:"513";i:3;s:3:"441";}}s:11:"ecircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:11:"ecircumflex";s:1:"B";a:4:{i:0;s:2:"66";i:1;s:3:"-15";i:2;s:3:"548";i:3;s:3:"654";}}s:5:"Uring";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:5:"Uring";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:3:"-18";i:2;s:3:"583";i:3;s:3:"760";}}s:9:"Udieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"Udieresis";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:3:"-18";i:2;s:3:"583";i:3;s:3:"753";}}s:7:"aogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"aogonek";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:4:"-172";i:2;s:3:"587";i:3;s:3:"441";}}s:6:"Uacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Uacute";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:3:"-18";i:2;s:3:"583";i:3;s:3:"805";}}s:7:"uogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"uogonek";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:4:"-172";i:2;s:3:"590";i:3;s:3:"426";}}s:9:"Edieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"Edieresis";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:1:"0";i:2;s:3:"550";i:3;s:3:"753";}}s:6:"Dcroat";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Dcroat";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:1:"0";i:2;s:3:"574";i:3;s:3:"562";}}s:11:"commaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:11:"commaaccent";s:1:"B";a:4:{i:0;s:3:"198";i:1;s:4:"-250";i:2;s:3:"335";i:3;s:3:"-58";}}s:9:"copyright";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"copyright";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:3:"-18";i:2;s:3:"600";i:3;s:3:"580";}}s:7:"Emacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"Emacron";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:1:"0";i:2;s:3:"550";i:3;s:3:"698";}}s:6:"ccaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"ccaron";s:1:"B";a:4:{i:0;s:2:"66";i:1;s:3:"-15";i:2;s:3:"529";i:3;s:3:"669";}}s:5:"aring";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:5:"aring";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:3:"-15";i:2;s:3:"559";i:3;s:3:"627";}}s:12:"Ncommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"Ncommaaccent";s:1:"B";a:4:{i:0;s:1:"7";i:1;s:4:"-250";i:2;s:3:"593";i:3;s:3:"562";}}s:6:"lacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"lacute";s:1:"B";a:4:{i:0;s:2:"95";i:1;s:1:"0";i:2;s:3:"505";i:3;s:3:"805";}}s:6:"agrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"agrave";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:3:"-15";i:2;s:3:"559";i:3;s:3:"672";}}s:12:"Tcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"Tcommaaccent";s:1:"B";a:4:{i:0;s:2:"38";i:1;s:4:"-250";i:2;s:3:"563";i:3;s:3:"562";}}s:6:"Cacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Cacute";s:1:"B";a:4:{i:0;s:2:"41";i:1;s:3:"-18";i:2;s:3:"540";i:3;s:3:"805";}}s:6:"atilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"atilde";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:3:"-15";i:2;s:3:"559";i:3;s:3:"606";}}s:10:"Edotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:10:"Edotaccent";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:1:"0";i:2;s:3:"550";i:3;s:3:"753";}}s:6:"scaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"scaron";s:1:"B";a:4:{i:0;s:2:"80";i:1;s:3:"-15";i:2;s:3:"513";i:3;s:3:"669";}}s:8:"scedilla";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:8:"scedilla";s:1:"B";a:4:{i:0;s:2:"80";i:1;s:4:"-151";i:2;s:3:"513";i:3;s:3:"441";}}s:6:"iacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"iacute";s:1:"B";a:4:{i:0;s:2:"95";i:1;s:1:"0";i:2;s:3:"505";i:3;s:3:"672";}}s:7:"lozenge";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"lozenge";s:1:"B";a:4:{i:0;s:2:"18";i:1;s:1:"0";i:2;s:3:"443";i:3;s:3:"706";}}s:6:"Rcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Rcaron";s:1:"B";a:4:{i:0;s:2:"38";i:1;s:1:"0";i:2;s:3:"588";i:3;s:3:"802";}}s:12:"Gcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"Gcommaaccent";s:1:"B";a:4:{i:0;s:2:"31";i:1;s:4:"-250";i:2;s:3:"575";i:3;s:3:"580";}}s:11:"ucircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:11:"ucircumflex";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:3:"-15";i:2;s:3:"562";i:3;s:3:"654";}}s:11:"acircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:11:"acircumflex";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:3:"-15";i:2;s:3:"559";i:3;s:3:"654";}}s:7:"Amacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"Amacron";s:1:"B";a:4:{i:0;s:1:"3";i:1;s:1:"0";i:2;s:3:"597";i:3;s:3:"698";}}s:6:"rcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"rcaron";s:1:"B";a:4:{i:0;s:2:"60";i:1;s:1:"0";i:2;s:3:"559";i:3;s:3:"669";}}s:8:"ccedilla";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:8:"ccedilla";s:1:"B";a:4:{i:0;s:2:"66";i:1;s:4:"-151";i:2;s:3:"529";i:3;s:3:"441";}}s:10:"Zdotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:10:"Zdotaccent";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:1:"0";i:2;s:3:"514";i:3;s:3:"753";}}s:5:"Thorn";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:5:"Thorn";s:1:"B";a:4:{i:0;s:2:"79";i:1;s:1:"0";i:2;s:3:"538";i:3;s:3:"562";}}s:7:"Omacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"Omacron";s:1:"B";a:4:{i:0;s:2:"43";i:1;s:3:"-18";i:2;s:3:"557";i:3;s:3:"698";}}s:6:"Racute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Racute";s:1:"B";a:4:{i:0;s:2:"38";i:1;s:1:"0";i:2;s:3:"588";i:3;s:3:"805";}}s:6:"Sacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Sacute";s:1:"B";a:4:{i:0;s:2:"72";i:1;s:3:"-20";i:2;s:3:"529";i:3;s:3:"805";}}s:6:"dcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"dcaron";s:1:"B";a:4:{i:0;s:2:"45";i:1;s:3:"-15";i:2;s:3:"715";i:3;s:3:"629";}}s:7:"Umacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"Umacron";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:3:"-18";i:2;s:3:"583";i:3;s:3:"698";}}s:5:"uring";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:5:"uring";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:3:"-15";i:2;s:3:"562";i:3;s:3:"627";}}s:13:"threesuperior";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:13:"threesuperior";s:1:"B";a:4:{i:0;s:3:"155";i:1;s:3:"240";i:2;s:3:"406";i:3;s:3:"622";}}s:6:"Ograve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Ograve";s:1:"B";a:4:{i:0;s:2:"43";i:1;s:3:"-18";i:2;s:3:"557";i:3;s:3:"805";}}s:6:"Agrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Agrave";s:1:"B";a:4:{i:0;s:1:"3";i:1;s:1:"0";i:2;s:3:"597";i:3;s:3:"805";}}s:6:"Abreve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Abreve";s:1:"B";a:4:{i:0;s:1:"3";i:1;s:1:"0";i:2;s:3:"597";i:3;s:3:"732";}}s:8:"multiply";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:8:"multiply";s:1:"B";a:4:{i:0;s:2:"87";i:1;s:2:"43";i:2;s:3:"515";i:3;s:3:"470";}}s:6:"uacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"uacute";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:3:"-15";i:2;s:3:"562";i:3;s:3:"672";}}s:6:"Tcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Tcaron";s:1:"B";a:4:{i:0;s:2:"38";i:1;s:1:"0";i:2;s:3:"563";i:3;s:3:"802";}}s:11:"partialdiff";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:11:"partialdiff";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:3:"-38";i:2;s:3:"459";i:3;s:3:"710";}}s:9:"ydieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"ydieresis";s:1:"B";a:4:{i:0;s:1:"7";i:1;s:4:"-157";i:2;s:3:"592";i:3;s:3:"620";}}s:6:"Nacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Nacute";s:1:"B";a:4:{i:0;s:1:"7";i:1;s:3:"-13";i:2;s:3:"593";i:3;s:3:"805";}}s:11:"icircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:11:"icircumflex";s:1:"B";a:4:{i:0;s:2:"94";i:1;s:1:"0";i:2;s:3:"505";i:3;s:3:"654";}}s:11:"Ecircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:11:"Ecircumflex";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:1:"0";i:2;s:3:"550";i:3;s:3:"787";}}s:9:"adieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"adieresis";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:3:"-15";i:2;s:3:"559";i:3;s:3:"620";}}s:9:"edieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"edieresis";s:1:"B";a:4:{i:0;s:2:"66";i:1;s:3:"-15";i:2;s:3:"548";i:3;s:3:"620";}}s:6:"cacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"cacute";s:1:"B";a:4:{i:0;s:2:"66";i:1;s:3:"-15";i:2;s:3:"529";i:3;s:3:"672";}}s:6:"nacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"nacute";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:1:"0";i:2;s:3:"575";i:3;s:3:"672";}}s:7:"umacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"umacron";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:3:"-15";i:2;s:3:"562";i:3;s:3:"565";}}s:6:"Ncaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Ncaron";s:1:"B";a:4:{i:0;s:1:"7";i:1;s:3:"-13";i:2;s:3:"593";i:3;s:3:"802";}}s:6:"Iacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Iacute";s:1:"B";a:4:{i:0;s:2:"96";i:1;s:1:"0";i:2;s:3:"504";i:3;s:3:"805";}}s:9:"plusminus";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"plusminus";s:1:"B";a:4:{i:0;s:2:"87";i:1;s:2:"44";i:2;s:3:"513";i:3;s:3:"558";}}s:9:"brokenbar";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"brokenbar";s:1:"B";a:4:{i:0;s:3:"275";i:1;s:4:"-175";i:2;s:3:"326";i:3;s:3:"675";}}s:10:"registered";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:10:"registered";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:3:"-18";i:2;s:3:"600";i:3;s:3:"580";}}s:6:"Gbreve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Gbreve";s:1:"B";a:4:{i:0;s:2:"31";i:1;s:3:"-18";i:2;s:3:"575";i:3;s:3:"732";}}s:10:"Idotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:10:"Idotaccent";s:1:"B";a:4:{i:0;s:2:"96";i:1;s:1:"0";i:2;s:3:"504";i:3;s:3:"753";}}s:9:"summation";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"summation";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:3:"-10";i:2;s:3:"585";i:3;s:3:"706";}}s:6:"Egrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Egrave";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:1:"0";i:2;s:3:"550";i:3;s:3:"805";}}s:6:"racute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"racute";s:1:"B";a:4:{i:0;s:2:"60";i:1;s:1:"0";i:2;s:3:"559";i:3;s:3:"672";}}s:7:"omacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"omacron";s:1:"B";a:4:{i:0;s:2:"62";i:1;s:3:"-15";i:2;s:3:"538";i:3;s:3:"565";}}s:6:"Zacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Zacute";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:1:"0";i:2;s:3:"514";i:3;s:3:"805";}}s:6:"Zcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Zcaron";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:1:"0";i:2;s:3:"514";i:3;s:3:"802";}}s:12:"greaterequal";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"greaterequal";s:1:"B";a:4:{i:0;s:2:"98";i:1;s:1:"0";i:2;s:3:"502";i:3;s:3:"710";}}s:3:"Eth";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:3:"Eth";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:1:"0";i:2;s:3:"574";i:3;s:3:"562";}}s:8:"Ccedilla";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:8:"Ccedilla";s:1:"B";a:4:{i:0;s:2:"41";i:1;s:4:"-151";i:2;s:3:"540";i:3;s:3:"580";}}s:12:"lcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"lcommaaccent";s:1:"B";a:4:{i:0;s:2:"95";i:1;s:4:"-250";i:2;s:3:"505";i:3;s:3:"629";}}s:6:"tcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"tcaron";s:1:"B";a:4:{i:0;s:2:"87";i:1;s:3:"-15";i:2;s:3:"530";i:3;s:3:"717";}}s:7:"eogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"eogonek";s:1:"B";a:4:{i:0;s:2:"66";i:1;s:4:"-172";i:2;s:3:"548";i:3;s:3:"441";}}s:7:"Uogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"Uogonek";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:4:"-172";i:2;s:3:"583";i:3;s:3:"562";}}s:6:"Aacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Aacute";s:1:"B";a:4:{i:0;s:1:"3";i:1;s:1:"0";i:2;s:3:"597";i:3;s:3:"805";}}s:9:"Adieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"Adieresis";s:1:"B";a:4:{i:0;s:1:"3";i:1;s:1:"0";i:2;s:3:"597";i:3;s:3:"753";}}s:6:"egrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"egrave";s:1:"B";a:4:{i:0;s:2:"66";i:1;s:3:"-15";i:2;s:3:"548";i:3;s:3:"672";}}s:6:"zacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"zacute";s:1:"B";a:4:{i:0;s:2:"99";i:1;s:1:"0";i:2;s:3:"502";i:3;s:3:"672";}}s:7:"iogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"iogonek";s:1:"B";a:4:{i:0;s:2:"95";i:1;s:4:"-172";i:2;s:3:"505";i:3;s:3:"657";}}s:6:"Oacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Oacute";s:1:"B";a:4:{i:0;s:2:"43";i:1;s:3:"-18";i:2;s:3:"557";i:3;s:3:"805";}}s:6:"oacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"oacute";s:1:"B";a:4:{i:0;s:2:"62";i:1;s:3:"-15";i:2;s:3:"538";i:3;s:3:"672";}}s:7:"amacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"amacron";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:3:"-15";i:2;s:3:"559";i:3;s:3:"565";}}s:6:"sacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"sacute";s:1:"B";a:4:{i:0;s:2:"80";i:1;s:3:"-15";i:2;s:3:"513";i:3;s:3:"672";}}s:9:"idieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"idieresis";s:1:"B";a:4:{i:0;s:2:"95";i:1;s:1:"0";i:2;s:3:"505";i:3;s:3:"620";}}s:11:"Ocircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:11:"Ocircumflex";s:1:"B";a:4:{i:0;s:2:"43";i:1;s:3:"-18";i:2;s:3:"557";i:3;s:3:"787";}}s:6:"Ugrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Ugrave";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:3:"-18";i:2;s:3:"583";i:3;s:3:"805";}}s:5:"Delta";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:5:"Delta";s:1:"B";a:4:{i:0;s:1:"6";i:1;s:1:"0";i:2;s:3:"598";i:3;s:3:"688";}}s:5:"thorn";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:5:"thorn";s:1:"B";a:4:{i:0;s:2:"-6";i:1;s:4:"-157";i:2;s:3:"555";i:3;s:3:"629";}}s:11:"twosuperior";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:11:"twosuperior";s:1:"B";a:4:{i:0;s:3:"177";i:1;s:3:"249";i:2;s:3:"424";i:3;s:3:"622";}}s:9:"Odieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"Odieresis";s:1:"B";a:4:{i:0;s:2:"43";i:1;s:3:"-18";i:2;s:3:"557";i:3;s:3:"753";}}s:2:"mu";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:2:"mu";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:4:"-157";i:2;s:3:"562";i:3;s:3:"426";}}s:6:"igrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"igrave";s:1:"B";a:4:{i:0;s:2:"95";i:1;s:1:"0";i:2;s:3:"505";i:3;s:3:"672";}}s:13:"ohungarumlaut";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:13:"ohungarumlaut";s:1:"B";a:4:{i:0;s:2:"62";i:1;s:3:"-15";i:2;s:3:"580";i:3;s:3:"672";}}s:7:"Eogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"Eogonek";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:4:"-172";i:2;s:3:"561";i:3;s:3:"562";}}s:6:"dcroat";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"dcroat";s:1:"B";a:4:{i:0;s:2:"45";i:1;s:3:"-15";i:2;s:3:"591";i:3;s:3:"629";}}s:13:"threequarters";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:13:"threequarters";s:1:"B";a:4:{i:0;s:1:"8";i:1;s:3:"-56";i:2;s:3:"593";i:3;s:3:"666";}}s:8:"Scedilla";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:8:"Scedilla";s:1:"B";a:4:{i:0;s:2:"72";i:1;s:4:"-151";i:2;s:3:"529";i:3;s:3:"580";}}s:6:"lcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"lcaron";s:1:"B";a:4:{i:0;s:2:"95";i:1;s:1:"0";i:2;s:3:"533";i:3;s:3:"629";}}s:12:"Kcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"Kcommaaccent";s:1:"B";a:4:{i:0;s:2:"38";i:1;s:4:"-250";i:2;s:3:"582";i:3;s:3:"562";}}s:6:"Lacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Lacute";s:1:"B";a:4:{i:0;s:2:"47";i:1;s:1:"0";i:2;s:3:"554";i:3;s:3:"805";}}s:9:"trademark";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"trademark";s:1:"B";a:4:{i:0;s:3:"-23";i:1;s:3:"263";i:2;s:3:"623";i:3;s:3:"562";}}s:10:"edotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:10:"edotaccent";s:1:"B";a:4:{i:0;s:2:"66";i:1;s:3:"-15";i:2;s:3:"548";i:3;s:3:"620";}}s:6:"Igrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Igrave";s:1:"B";a:4:{i:0;s:2:"96";i:1;s:1:"0";i:2;s:3:"504";i:3;s:3:"805";}}s:7:"Imacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"Imacron";s:1:"B";a:4:{i:0;s:2:"96";i:1;s:1:"0";i:2;s:3:"504";i:3;s:3:"698";}}s:6:"Lcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Lcaron";s:1:"B";a:4:{i:0;s:2:"47";i:1;s:1:"0";i:2;s:3:"554";i:3;s:3:"562";}}s:7:"onehalf";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"onehalf";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:3:"-57";i:2;s:3:"611";i:3;s:3:"665";}}s:9:"lessequal";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"lessequal";s:1:"B";a:4:{i:0;s:2:"98";i:1;s:1:"0";i:2;s:3:"502";i:3;s:3:"710";}}s:11:"ocircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:11:"ocircumflex";s:1:"B";a:4:{i:0;s:2:"62";i:1;s:3:"-15";i:2;s:3:"538";i:3;s:3:"654";}}s:6:"ntilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"ntilde";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:1:"0";i:2;s:3:"575";i:3;s:3:"606";}}s:13:"Uhungarumlaut";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:13:"Uhungarumlaut";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:3:"-18";i:2;s:3:"590";i:3;s:3:"805";}}s:6:"Eacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Eacute";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:1:"0";i:2;s:3:"550";i:3;s:3:"805";}}s:7:"emacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"emacron";s:1:"B";a:4:{i:0;s:2:"66";i:1;s:3:"-15";i:2;s:3:"548";i:3;s:3:"565";}}s:6:"gbreve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"gbreve";s:1:"B";a:4:{i:0;s:2:"45";i:1;s:4:"-157";i:2;s:3:"566";i:3;s:3:"609";}}s:10:"onequarter";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:10:"onequarter";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:3:"-57";i:2;s:3:"600";i:3;s:3:"665";}}s:6:"Scaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Scaron";s:1:"B";a:4:{i:0;s:2:"72";i:1;s:3:"-20";i:2;s:3:"529";i:3;s:3:"802";}}s:12:"Scommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"Scommaaccent";s:1:"B";a:4:{i:0;s:2:"72";i:1;s:4:"-250";i:2;s:3:"529";i:3;s:3:"580";}}s:13:"Ohungarumlaut";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:13:"Ohungarumlaut";s:1:"B";a:4:{i:0;s:2:"43";i:1;s:3:"-18";i:2;s:3:"580";i:3;s:3:"805";}}s:6:"degree";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"degree";s:1:"B";a:4:{i:0;s:3:"123";i:1;s:3:"269";i:2;s:3:"477";i:3;s:3:"622";}}s:6:"ograve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"ograve";s:1:"B";a:4:{i:0;s:2:"62";i:1;s:3:"-15";i:2;s:3:"538";i:3;s:3:"672";}}s:6:"Ccaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Ccaron";s:1:"B";a:4:{i:0;s:2:"41";i:1;s:3:"-18";i:2;s:3:"540";i:3;s:3:"802";}}s:6:"ugrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"ugrave";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:3:"-15";i:2;s:3:"562";i:3;s:3:"672";}}s:7:"radical";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"radical";s:1:"B";a:4:{i:0;s:1:"3";i:1;s:3:"-15";i:2;s:3:"597";i:3;s:3:"792";}}s:6:"Dcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Dcaron";s:1:"B";a:4:{i:0;s:2:"43";i:1;s:1:"0";i:2;s:3:"574";i:3;s:3:"802";}}s:12:"rcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"rcommaaccent";s:1:"B";a:4:{i:0;s:2:"60";i:1;s:4:"-250";i:2;s:3:"559";i:3;s:3:"441";}}s:6:"Ntilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Ntilde";s:1:"B";a:4:{i:0;s:1:"7";i:1;s:3:"-13";i:2;s:3:"593";i:3;s:3:"729";}}s:6:"otilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"otilde";s:1:"B";a:4:{i:0;s:2:"62";i:1;s:3:"-15";i:2;s:3:"538";i:3;s:3:"606";}}s:12:"Rcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"Rcommaaccent";s:1:"B";a:4:{i:0;s:2:"38";i:1;s:4:"-250";i:2;s:3:"588";i:3;s:3:"562";}}s:12:"Lcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"Lcommaaccent";s:1:"B";a:4:{i:0;s:2:"47";i:1;s:4:"-250";i:2;s:3:"554";i:3;s:3:"562";}}s:6:"Atilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Atilde";s:1:"B";a:4:{i:0;s:1:"3";i:1;s:1:"0";i:2;s:3:"597";i:3;s:3:"729";}}s:7:"Aogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"Aogonek";s:1:"B";a:4:{i:0;s:1:"3";i:1;s:4:"-172";i:2;s:3:"608";i:3;s:3:"562";}}s:5:"Aring";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:5:"Aring";s:1:"B";a:4:{i:0;s:1:"3";i:1;s:1:"0";i:2;s:3:"597";i:3;s:3:"750";}}s:6:"Otilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Otilde";s:1:"B";a:4:{i:0;s:2:"43";i:1;s:3:"-18";i:2;s:3:"557";i:3;s:3:"729";}}s:10:"zdotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:10:"zdotaccent";s:1:"B";a:4:{i:0;s:2:"99";i:1;s:1:"0";i:2;s:3:"502";i:3;s:3:"620";}}s:6:"Ecaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"Ecaron";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:1:"0";i:2;s:3:"550";i:3;s:3:"802";}}s:7:"Iogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"Iogonek";s:1:"B";a:4:{i:0;s:2:"96";i:1;s:4:"-172";i:2;s:3:"504";i:3;s:3:"562";}}s:12:"kcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"kcommaaccent";s:1:"B";a:4:{i:0;s:2:"43";i:1;s:4:"-250";i:2;s:3:"580";i:3;s:3:"629";}}s:5:"minus";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:5:"minus";s:1:"B";a:4:{i:0;s:2:"80";i:1;s:3:"232";i:2;s:3:"520";i:3;s:3:"283";}}s:11:"Icircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:11:"Icircumflex";s:1:"B";a:4:{i:0;s:2:"96";i:1;s:1:"0";i:2;s:3:"504";i:3;s:3:"787";}}s:6:"ncaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"ncaron";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:1:"0";i:2;s:3:"575";i:3;s:3:"669";}}s:12:"tcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"tcommaaccent";s:1:"B";a:4:{i:0;s:2:"87";i:1;s:4:"-250";i:2;s:3:"530";i:3;s:3:"561";}}s:10:"logicalnot";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:10:"logicalnot";s:1:"B";a:4:{i:0;s:2:"87";i:1;s:3:"108";i:2;s:3:"513";i:3;s:3:"369";}}s:9:"odieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"odieresis";s:1:"B";a:4:{i:0;s:2:"62";i:1;s:3:"-15";i:2;s:3:"538";i:3;s:3:"620";}}s:9:"udieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"udieresis";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:3:"-15";i:2;s:3:"562";i:3;s:3:"620";}}s:8:"notequal";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:8:"notequal";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:3:"-16";i:2;s:3:"540";i:3;s:3:"529";}}s:12:"gcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"gcommaaccent";s:1:"B";a:4:{i:0;s:2:"45";i:1;s:4:"-157";i:2;s:3:"566";i:3;s:3:"708";}}s:3:"eth";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:3:"eth";s:1:"B";a:4:{i:0;s:2:"62";i:1;s:3:"-15";i:2;s:3:"538";i:3;s:3:"629";}}s:6:"zcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:6:"zcaron";s:1:"B";a:4:{i:0;s:2:"99";i:1;s:1:"0";i:2;s:3:"502";i:3;s:3:"669";}}s:12:"ncommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:12:"ncommaaccent";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:4:"-250";i:2;s:3:"575";i:3;s:3:"441";}}s:11:"onesuperior";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:11:"onesuperior";s:1:"B";a:4:{i:0;s:3:"172";i:1;s:3:"249";i:2;s:3:"428";i:3;s:3:"622";}}s:7:"imacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:7:"imacron";s:1:"B";a:4:{i:0;s:2:"95";i:1;s:1:"0";i:2;s:3:"505";i:3;s:3:"565";}}s:4:"Euro";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:4:"Euro";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:1:"0";i:2;s:1:"0";i:3;s:1:"0";}}}s:9:"_version_";i:1;}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/php_Helvetica-Bold.afm b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/php_Helvetica-Bold.afm new file mode 100755 index 00000000..9b466fd0 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/php_Helvetica-Bold.afm @@ -0,0 +1 @@ +a:22:{s:8:"FontName";s:14:"Helvetica-Bold";s:8:"FullName";s:14:"Helvetica Bold";s:10:"FamilyName";s:9:"Helvetica";s:6:"Weight";s:4:"Bold";s:11:"ItalicAngle";s:1:"0";s:12:"IsFixedPitch";s:5:"false";s:12:"CharacterSet";s:13:"ExtendedRoman";s:8:"FontBBox";a:4:{i:0;s:4:"-170";i:1;s:4:"-228";i:2;s:4:"1003";i:3;s:3:"962";}s:17:"UnderlinePosition";s:4:"-100";s:18:"UnderlineThickness";s:2:"50";s:7:"Version";s:7:"002.000";s:14:"EncodingScheme";s:21:"AdobeStandardEncoding";s:9:"CapHeight";s:3:"718";s:7:"XHeight";s:3:"532";s:8:"Ascender";s:3:"718";s:9:"Descender";s:4:"-207";s:5:"StdHW";s:3:"118";s:5:"StdVW";s:3:"140";s:16:"StartCharMetrics";s:3:"315";s:1:"C";a:464:{i:32;a:4:{s:1:"C";s:2:"32";s:2:"WX";s:3:"278";s:1:"N";s:5:"space";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:1:"0";i:2;s:1:"0";i:3;s:1:"0";}}s:5:"space";a:4:{s:1:"C";s:2:"32";s:2:"WX";s:3:"278";s:1:"N";s:5:"space";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:1:"0";i:2;s:1:"0";i:3;s:1:"0";}}i:33;a:4:{s:1:"C";s:2:"33";s:2:"WX";s:3:"333";s:1:"N";s:6:"exclam";s:1:"B";a:4:{i:0;s:2:"90";i:1;s:1:"0";i:2;s:3:"244";i:3;s:3:"718";}}s:6:"exclam";a:4:{s:1:"C";s:2:"33";s:2:"WX";s:3:"333";s:1:"N";s:6:"exclam";s:1:"B";a:4:{i:0;s:2:"90";i:1;s:1:"0";i:2;s:3:"244";i:3;s:3:"718";}}i:34;a:4:{s:1:"C";s:2:"34";s:2:"WX";s:3:"474";s:1:"N";s:8:"quotedbl";s:1:"B";a:4:{i:0;s:2:"98";i:1;s:3:"447";i:2;s:3:"376";i:3;s:3:"718";}}s:8:"quotedbl";a:4:{s:1:"C";s:2:"34";s:2:"WX";s:3:"474";s:1:"N";s:8:"quotedbl";s:1:"B";a:4:{i:0;s:2:"98";i:1;s:3:"447";i:2;s:3:"376";i:3;s:3:"718";}}i:35;a:4:{s:1:"C";s:2:"35";s:2:"WX";s:3:"556";s:1:"N";s:10:"numbersign";s:1:"B";a:4:{i:0;s:2:"18";i:1;s:1:"0";i:2;s:3:"538";i:3;s:3:"698";}}s:10:"numbersign";a:4:{s:1:"C";s:2:"35";s:2:"WX";s:3:"556";s:1:"N";s:10:"numbersign";s:1:"B";a:4:{i:0;s:2:"18";i:1;s:1:"0";i:2;s:3:"538";i:3;s:3:"698";}}i:36;a:4:{s:1:"C";s:2:"36";s:2:"WX";s:3:"556";s:1:"N";s:6:"dollar";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:4:"-115";i:2;s:3:"523";i:3;s:3:"775";}}s:6:"dollar";a:4:{s:1:"C";s:2:"36";s:2:"WX";s:3:"556";s:1:"N";s:6:"dollar";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:4:"-115";i:2;s:3:"523";i:3;s:3:"775";}}i:37;a:4:{s:1:"C";s:2:"37";s:2:"WX";s:3:"889";s:1:"N";s:7:"percent";s:1:"B";a:4:{i:0;s:2:"28";i:1;s:3:"-19";i:2;s:3:"861";i:3;s:3:"710";}}s:7:"percent";a:4:{s:1:"C";s:2:"37";s:2:"WX";s:3:"889";s:1:"N";s:7:"percent";s:1:"B";a:4:{i:0;s:2:"28";i:1;s:3:"-19";i:2;s:3:"861";i:3;s:3:"710";}}i:38;a:4:{s:1:"C";s:2:"38";s:2:"WX";s:3:"722";s:1:"N";s:9:"ampersand";s:1:"B";a:4:{i:0;s:2:"54";i:1;s:3:"-19";i:2;s:3:"701";i:3;s:3:"718";}}s:9:"ampersand";a:4:{s:1:"C";s:2:"38";s:2:"WX";s:3:"722";s:1:"N";s:9:"ampersand";s:1:"B";a:4:{i:0;s:2:"54";i:1;s:3:"-19";i:2;s:3:"701";i:3;s:3:"718";}}i:39;a:4:{s:1:"C";s:2:"39";s:2:"WX";s:3:"278";s:1:"N";s:10:"quoteright";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:3:"445";i:2;s:3:"209";i:3;s:3:"718";}}s:10:"quoteright";a:4:{s:1:"C";s:2:"39";s:2:"WX";s:3:"278";s:1:"N";s:10:"quoteright";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:3:"445";i:2;s:3:"209";i:3;s:3:"718";}}i:40;a:4:{s:1:"C";s:2:"40";s:2:"WX";s:3:"333";s:1:"N";s:9:"parenleft";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:4:"-208";i:2;s:3:"314";i:3;s:3:"734";}}s:9:"parenleft";a:4:{s:1:"C";s:2:"40";s:2:"WX";s:3:"333";s:1:"N";s:9:"parenleft";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:4:"-208";i:2;s:3:"314";i:3;s:3:"734";}}i:41;a:4:{s:1:"C";s:2:"41";s:2:"WX";s:3:"333";s:1:"N";s:10:"parenright";s:1:"B";a:4:{i:0;s:2:"19";i:1;s:4:"-208";i:2;s:3:"298";i:3;s:3:"734";}}s:10:"parenright";a:4:{s:1:"C";s:2:"41";s:2:"WX";s:3:"333";s:1:"N";s:10:"parenright";s:1:"B";a:4:{i:0;s:2:"19";i:1;s:4:"-208";i:2;s:3:"298";i:3;s:3:"734";}}i:42;a:4:{s:1:"C";s:2:"42";s:2:"WX";s:3:"389";s:1:"N";s:8:"asterisk";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:3:"387";i:2;s:3:"362";i:3;s:3:"718";}}s:8:"asterisk";a:4:{s:1:"C";s:2:"42";s:2:"WX";s:3:"389";s:1:"N";s:8:"asterisk";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:3:"387";i:2;s:3:"362";i:3;s:3:"718";}}i:43;a:4:{s:1:"C";s:2:"43";s:2:"WX";s:3:"584";s:1:"N";s:4:"plus";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:1:"0";i:2;s:3:"544";i:3;s:3:"506";}}s:4:"plus";a:4:{s:1:"C";s:2:"43";s:2:"WX";s:3:"584";s:1:"N";s:4:"plus";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:1:"0";i:2;s:3:"544";i:3;s:3:"506";}}i:44;a:4:{s:1:"C";s:2:"44";s:2:"WX";s:3:"278";s:1:"N";s:5:"comma";s:1:"B";a:4:{i:0;s:2:"64";i:1;s:4:"-168";i:2;s:3:"214";i:3;s:3:"146";}}s:5:"comma";a:4:{s:1:"C";s:2:"44";s:2:"WX";s:3:"278";s:1:"N";s:5:"comma";s:1:"B";a:4:{i:0;s:2:"64";i:1;s:4:"-168";i:2;s:3:"214";i:3;s:3:"146";}}i:45;a:4:{s:1:"C";s:2:"45";s:2:"WX";s:3:"333";s:1:"N";s:6:"hyphen";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:3:"215";i:2;s:3:"306";i:3;s:3:"345";}}s:6:"hyphen";a:4:{s:1:"C";s:2:"45";s:2:"WX";s:3:"333";s:1:"N";s:6:"hyphen";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:3:"215";i:2;s:3:"306";i:3;s:3:"345";}}i:46;a:4:{s:1:"C";s:2:"46";s:2:"WX";s:3:"278";s:1:"N";s:6:"period";s:1:"B";a:4:{i:0;s:2:"64";i:1;s:1:"0";i:2;s:3:"214";i:3;s:3:"146";}}s:6:"period";a:4:{s:1:"C";s:2:"46";s:2:"WX";s:3:"278";s:1:"N";s:6:"period";s:1:"B";a:4:{i:0;s:2:"64";i:1;s:1:"0";i:2;s:3:"214";i:3;s:3:"146";}}i:47;a:4:{s:1:"C";s:2:"47";s:2:"WX";s:3:"278";s:1:"N";s:5:"slash";s:1:"B";a:4:{i:0;s:3:"-33";i:1;s:3:"-19";i:2;s:3:"311";i:3;s:3:"737";}}s:5:"slash";a:4:{s:1:"C";s:2:"47";s:2:"WX";s:3:"278";s:1:"N";s:5:"slash";s:1:"B";a:4:{i:0;s:3:"-33";i:1;s:3:"-19";i:2;s:3:"311";i:3;s:3:"737";}}i:48;a:4:{s:1:"C";s:2:"48";s:2:"WX";s:3:"556";s:1:"N";s:4:"zero";s:1:"B";a:4:{i:0;s:2:"32";i:1;s:3:"-19";i:2;s:3:"524";i:3;s:3:"710";}}s:4:"zero";a:4:{s:1:"C";s:2:"48";s:2:"WX";s:3:"556";s:1:"N";s:4:"zero";s:1:"B";a:4:{i:0;s:2:"32";i:1;s:3:"-19";i:2;s:3:"524";i:3;s:3:"710";}}i:49;a:4:{s:1:"C";s:2:"49";s:2:"WX";s:3:"556";s:1:"N";s:3:"one";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:1:"0";i:2;s:3:"378";i:3;s:3:"710";}}s:3:"one";a:4:{s:1:"C";s:2:"49";s:2:"WX";s:3:"556";s:1:"N";s:3:"one";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:1:"0";i:2;s:3:"378";i:3;s:3:"710";}}i:50;a:4:{s:1:"C";s:2:"50";s:2:"WX";s:3:"556";s:1:"N";s:3:"two";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:1:"0";i:2;s:3:"511";i:3;s:3:"710";}}s:3:"two";a:4:{s:1:"C";s:2:"50";s:2:"WX";s:3:"556";s:1:"N";s:3:"two";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:1:"0";i:2;s:3:"511";i:3;s:3:"710";}}i:51;a:4:{s:1:"C";s:2:"51";s:2:"WX";s:3:"556";s:1:"N";s:5:"three";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:3:"-19";i:2;s:3:"516";i:3;s:3:"710";}}s:5:"three";a:4:{s:1:"C";s:2:"51";s:2:"WX";s:3:"556";s:1:"N";s:5:"three";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:3:"-19";i:2;s:3:"516";i:3;s:3:"710";}}i:52;a:4:{s:1:"C";s:2:"52";s:2:"WX";s:3:"556";s:1:"N";s:4:"four";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:1:"0";i:2;s:3:"526";i:3;s:3:"710";}}s:4:"four";a:4:{s:1:"C";s:2:"52";s:2:"WX";s:3:"556";s:1:"N";s:4:"four";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:1:"0";i:2;s:3:"526";i:3;s:3:"710";}}i:53;a:4:{s:1:"C";s:2:"53";s:2:"WX";s:3:"556";s:1:"N";s:4:"five";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:3:"-19";i:2;s:3:"516";i:3;s:3:"698";}}s:4:"five";a:4:{s:1:"C";s:2:"53";s:2:"WX";s:3:"556";s:1:"N";s:4:"five";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:3:"-19";i:2;s:3:"516";i:3;s:3:"698";}}i:54;a:4:{s:1:"C";s:2:"54";s:2:"WX";s:3:"556";s:1:"N";s:3:"six";s:1:"B";a:4:{i:0;s:2:"31";i:1;s:3:"-19";i:2;s:3:"520";i:3;s:3:"710";}}s:3:"six";a:4:{s:1:"C";s:2:"54";s:2:"WX";s:3:"556";s:1:"N";s:3:"six";s:1:"B";a:4:{i:0;s:2:"31";i:1;s:3:"-19";i:2;s:3:"520";i:3;s:3:"710";}}i:55;a:4:{s:1:"C";s:2:"55";s:2:"WX";s:3:"556";s:1:"N";s:5:"seven";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:1:"0";i:2;s:3:"528";i:3;s:3:"698";}}s:5:"seven";a:4:{s:1:"C";s:2:"55";s:2:"WX";s:3:"556";s:1:"N";s:5:"seven";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:1:"0";i:2;s:3:"528";i:3;s:3:"698";}}i:56;a:4:{s:1:"C";s:2:"56";s:2:"WX";s:3:"556";s:1:"N";s:5:"eight";s:1:"B";a:4:{i:0;s:2:"32";i:1;s:3:"-19";i:2;s:3:"524";i:3;s:3:"710";}}s:5:"eight";a:4:{s:1:"C";s:2:"56";s:2:"WX";s:3:"556";s:1:"N";s:5:"eight";s:1:"B";a:4:{i:0;s:2:"32";i:1;s:3:"-19";i:2;s:3:"524";i:3;s:3:"710";}}i:57;a:4:{s:1:"C";s:2:"57";s:2:"WX";s:3:"556";s:1:"N";s:4:"nine";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:3:"-19";i:2;s:3:"522";i:3;s:3:"710";}}s:4:"nine";a:4:{s:1:"C";s:2:"57";s:2:"WX";s:3:"556";s:1:"N";s:4:"nine";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:3:"-19";i:2;s:3:"522";i:3;s:3:"710";}}i:58;a:4:{s:1:"C";s:2:"58";s:2:"WX";s:3:"333";s:1:"N";s:5:"colon";s:1:"B";a:4:{i:0;s:2:"92";i:1;s:1:"0";i:2;s:3:"242";i:3;s:3:"512";}}s:5:"colon";a:4:{s:1:"C";s:2:"58";s:2:"WX";s:3:"333";s:1:"N";s:5:"colon";s:1:"B";a:4:{i:0;s:2:"92";i:1;s:1:"0";i:2;s:3:"242";i:3;s:3:"512";}}i:59;a:4:{s:1:"C";s:2:"59";s:2:"WX";s:3:"333";s:1:"N";s:9:"semicolon";s:1:"B";a:4:{i:0;s:2:"92";i:1;s:4:"-168";i:2;s:3:"242";i:3;s:3:"512";}}s:9:"semicolon";a:4:{s:1:"C";s:2:"59";s:2:"WX";s:3:"333";s:1:"N";s:9:"semicolon";s:1:"B";a:4:{i:0;s:2:"92";i:1;s:4:"-168";i:2;s:3:"242";i:3;s:3:"512";}}i:60;a:4:{s:1:"C";s:2:"60";s:2:"WX";s:3:"584";s:1:"N";s:4:"less";s:1:"B";a:4:{i:0;s:2:"38";i:1;s:2:"-8";i:2;s:3:"546";i:3;s:3:"514";}}s:4:"less";a:4:{s:1:"C";s:2:"60";s:2:"WX";s:3:"584";s:1:"N";s:4:"less";s:1:"B";a:4:{i:0;s:2:"38";i:1;s:2:"-8";i:2;s:3:"546";i:3;s:3:"514";}}i:61;a:4:{s:1:"C";s:2:"61";s:2:"WX";s:3:"584";s:1:"N";s:5:"equal";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:2:"87";i:2;s:3:"544";i:3;s:3:"419";}}s:5:"equal";a:4:{s:1:"C";s:2:"61";s:2:"WX";s:3:"584";s:1:"N";s:5:"equal";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:2:"87";i:2;s:3:"544";i:3;s:3:"419";}}i:62;a:4:{s:1:"C";s:2:"62";s:2:"WX";s:3:"584";s:1:"N";s:7:"greater";s:1:"B";a:4:{i:0;s:2:"38";i:1;s:2:"-8";i:2;s:3:"546";i:3;s:3:"514";}}s:7:"greater";a:4:{s:1:"C";s:2:"62";s:2:"WX";s:3:"584";s:1:"N";s:7:"greater";s:1:"B";a:4:{i:0;s:2:"38";i:1;s:2:"-8";i:2;s:3:"546";i:3;s:3:"514";}}i:63;a:4:{s:1:"C";s:2:"63";s:2:"WX";s:3:"611";s:1:"N";s:8:"question";s:1:"B";a:4:{i:0;s:2:"60";i:1;s:1:"0";i:2;s:3:"556";i:3;s:3:"727";}}s:8:"question";a:4:{s:1:"C";s:2:"63";s:2:"WX";s:3:"611";s:1:"N";s:8:"question";s:1:"B";a:4:{i:0;s:2:"60";i:1;s:1:"0";i:2;s:3:"556";i:3;s:3:"727";}}i:64;a:4:{s:1:"C";s:2:"64";s:2:"WX";s:3:"975";s:1:"N";s:2:"at";s:1:"B";a:4:{i:0;s:3:"118";i:1;s:3:"-19";i:2;s:3:"856";i:3;s:3:"737";}}s:2:"at";a:4:{s:1:"C";s:2:"64";s:2:"WX";s:3:"975";s:1:"N";s:2:"at";s:1:"B";a:4:{i:0;s:3:"118";i:1;s:3:"-19";i:2;s:3:"856";i:3;s:3:"737";}}i:65;a:4:{s:1:"C";s:2:"65";s:2:"WX";s:3:"722";s:1:"N";s:1:"A";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:1:"0";i:2;s:3:"702";i:3;s:3:"718";}}s:1:"A";a:4:{s:1:"C";s:2:"65";s:2:"WX";s:3:"722";s:1:"N";s:1:"A";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:1:"0";i:2;s:3:"702";i:3;s:3:"718";}}i:66;a:4:{s:1:"C";s:2:"66";s:2:"WX";s:3:"722";s:1:"N";s:1:"B";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"669";i:3;s:3:"718";}}s:1:"B";a:4:{s:1:"C";s:2:"66";s:2:"WX";s:3:"722";s:1:"N";s:1:"B";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"669";i:3;s:3:"718";}}i:67;a:4:{s:1:"C";s:2:"67";s:2:"WX";s:3:"722";s:1:"N";s:1:"C";s:1:"B";a:4:{i:0;s:2:"44";i:1;s:3:"-19";i:2;s:3:"684";i:3;s:3:"737";}}s:1:"C";a:4:{s:1:"C";s:2:"67";s:2:"WX";s:3:"722";s:1:"N";s:1:"C";s:1:"B";a:4:{i:0;s:2:"44";i:1;s:3:"-19";i:2;s:3:"684";i:3;s:3:"737";}}i:68;a:4:{s:1:"C";s:2:"68";s:2:"WX";s:3:"722";s:1:"N";s:1:"D";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"685";i:3;s:3:"718";}}s:1:"D";a:4:{s:1:"C";s:2:"68";s:2:"WX";s:3:"722";s:1:"N";s:1:"D";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"685";i:3;s:3:"718";}}i:69;a:4:{s:1:"C";s:2:"69";s:2:"WX";s:3:"667";s:1:"N";s:1:"E";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"621";i:3;s:3:"718";}}s:1:"E";a:4:{s:1:"C";s:2:"69";s:2:"WX";s:3:"667";s:1:"N";s:1:"E";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"621";i:3;s:3:"718";}}i:70;a:4:{s:1:"C";s:2:"70";s:2:"WX";s:3:"611";s:1:"N";s:1:"F";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"587";i:3;s:3:"718";}}s:1:"F";a:4:{s:1:"C";s:2:"70";s:2:"WX";s:3:"611";s:1:"N";s:1:"F";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"587";i:3;s:3:"718";}}i:71;a:4:{s:1:"C";s:2:"71";s:2:"WX";s:3:"778";s:1:"N";s:1:"G";s:1:"B";a:4:{i:0;s:2:"44";i:1;s:3:"-19";i:2;s:3:"713";i:3;s:3:"737";}}s:1:"G";a:4:{s:1:"C";s:2:"71";s:2:"WX";s:3:"778";s:1:"N";s:1:"G";s:1:"B";a:4:{i:0;s:2:"44";i:1;s:3:"-19";i:2;s:3:"713";i:3;s:3:"737";}}i:72;a:4:{s:1:"C";s:2:"72";s:2:"WX";s:3:"722";s:1:"N";s:1:"H";s:1:"B";a:4:{i:0;s:2:"71";i:1;s:1:"0";i:2;s:3:"651";i:3;s:3:"718";}}s:1:"H";a:4:{s:1:"C";s:2:"72";s:2:"WX";s:3:"722";s:1:"N";s:1:"H";s:1:"B";a:4:{i:0;s:2:"71";i:1;s:1:"0";i:2;s:3:"651";i:3;s:3:"718";}}i:73;a:4:{s:1:"C";s:2:"73";s:2:"WX";s:3:"278";s:1:"N";s:1:"I";s:1:"B";a:4:{i:0;s:2:"64";i:1;s:1:"0";i:2;s:3:"214";i:3;s:3:"718";}}s:1:"I";a:4:{s:1:"C";s:2:"73";s:2:"WX";s:3:"278";s:1:"N";s:1:"I";s:1:"B";a:4:{i:0;s:2:"64";i:1;s:1:"0";i:2;s:3:"214";i:3;s:3:"718";}}i:74;a:4:{s:1:"C";s:2:"74";s:2:"WX";s:3:"556";s:1:"N";s:1:"J";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:3:"-18";i:2;s:3:"484";i:3;s:3:"718";}}s:1:"J";a:4:{s:1:"C";s:2:"74";s:2:"WX";s:3:"556";s:1:"N";s:1:"J";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:3:"-18";i:2;s:3:"484";i:3;s:3:"718";}}i:75;a:4:{s:1:"C";s:2:"75";s:2:"WX";s:3:"722";s:1:"N";s:1:"K";s:1:"B";a:4:{i:0;s:2:"87";i:1;s:1:"0";i:2;s:3:"722";i:3;s:3:"718";}}s:1:"K";a:4:{s:1:"C";s:2:"75";s:2:"WX";s:3:"722";s:1:"N";s:1:"K";s:1:"B";a:4:{i:0;s:2:"87";i:1;s:1:"0";i:2;s:3:"722";i:3;s:3:"718";}}i:76;a:4:{s:1:"C";s:2:"76";s:2:"WX";s:3:"611";s:1:"N";s:1:"L";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"583";i:3;s:3:"718";}}s:1:"L";a:4:{s:1:"C";s:2:"76";s:2:"WX";s:3:"611";s:1:"N";s:1:"L";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"583";i:3;s:3:"718";}}i:77;a:4:{s:1:"C";s:2:"77";s:2:"WX";s:3:"833";s:1:"N";s:1:"M";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:1:"0";i:2;s:3:"765";i:3;s:3:"718";}}s:1:"M";a:4:{s:1:"C";s:2:"77";s:2:"WX";s:3:"833";s:1:"N";s:1:"M";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:1:"0";i:2;s:3:"765";i:3;s:3:"718";}}i:78;a:4:{s:1:"C";s:2:"78";s:2:"WX";s:3:"722";s:1:"N";s:1:"N";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:1:"0";i:2;s:3:"654";i:3;s:3:"718";}}s:1:"N";a:4:{s:1:"C";s:2:"78";s:2:"WX";s:3:"722";s:1:"N";s:1:"N";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:1:"0";i:2;s:3:"654";i:3;s:3:"718";}}i:79;a:4:{s:1:"C";s:2:"79";s:2:"WX";s:3:"778";s:1:"N";s:1:"O";s:1:"B";a:4:{i:0;s:2:"44";i:1;s:3:"-19";i:2;s:3:"734";i:3;s:3:"737";}}s:1:"O";a:4:{s:1:"C";s:2:"79";s:2:"WX";s:3:"778";s:1:"N";s:1:"O";s:1:"B";a:4:{i:0;s:2:"44";i:1;s:3:"-19";i:2;s:3:"734";i:3;s:3:"737";}}i:80;a:4:{s:1:"C";s:2:"80";s:2:"WX";s:3:"667";s:1:"N";s:1:"P";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"627";i:3;s:3:"718";}}s:1:"P";a:4:{s:1:"C";s:2:"80";s:2:"WX";s:3:"667";s:1:"N";s:1:"P";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"627";i:3;s:3:"718";}}i:81;a:4:{s:1:"C";s:2:"81";s:2:"WX";s:3:"778";s:1:"N";s:1:"Q";s:1:"B";a:4:{i:0;s:2:"44";i:1;s:3:"-52";i:2;s:3:"737";i:3;s:3:"737";}}s:1:"Q";a:4:{s:1:"C";s:2:"81";s:2:"WX";s:3:"778";s:1:"N";s:1:"Q";s:1:"B";a:4:{i:0;s:2:"44";i:1;s:3:"-52";i:2;s:3:"737";i:3;s:3:"737";}}i:82;a:4:{s:1:"C";s:2:"82";s:2:"WX";s:3:"722";s:1:"N";s:1:"R";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"677";i:3;s:3:"718";}}s:1:"R";a:4:{s:1:"C";s:2:"82";s:2:"WX";s:3:"722";s:1:"N";s:1:"R";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"677";i:3;s:3:"718";}}i:83;a:4:{s:1:"C";s:2:"83";s:2:"WX";s:3:"667";s:1:"N";s:1:"S";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:3:"-19";i:2;s:3:"629";i:3;s:3:"737";}}s:1:"S";a:4:{s:1:"C";s:2:"83";s:2:"WX";s:3:"667";s:1:"N";s:1:"S";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:3:"-19";i:2;s:3:"629";i:3;s:3:"737";}}i:84;a:4:{s:1:"C";s:2:"84";s:2:"WX";s:3:"611";s:1:"N";s:1:"T";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:1:"0";i:2;s:3:"598";i:3;s:3:"718";}}s:1:"T";a:4:{s:1:"C";s:2:"84";s:2:"WX";s:3:"611";s:1:"N";s:1:"T";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:1:"0";i:2;s:3:"598";i:3;s:3:"718";}}i:85;a:4:{s:1:"C";s:2:"85";s:2:"WX";s:3:"722";s:1:"N";s:1:"U";s:1:"B";a:4:{i:0;s:2:"72";i:1;s:3:"-19";i:2;s:3:"651";i:3;s:3:"718";}}s:1:"U";a:4:{s:1:"C";s:2:"85";s:2:"WX";s:3:"722";s:1:"N";s:1:"U";s:1:"B";a:4:{i:0;s:2:"72";i:1;s:3:"-19";i:2;s:3:"651";i:3;s:3:"718";}}i:86;a:4:{s:1:"C";s:2:"86";s:2:"WX";s:3:"667";s:1:"N";s:1:"V";s:1:"B";a:4:{i:0;s:2:"19";i:1;s:1:"0";i:2;s:3:"648";i:3;s:3:"718";}}s:1:"V";a:4:{s:1:"C";s:2:"86";s:2:"WX";s:3:"667";s:1:"N";s:1:"V";s:1:"B";a:4:{i:0;s:2:"19";i:1;s:1:"0";i:2;s:3:"648";i:3;s:3:"718";}}i:87;a:4:{s:1:"C";s:2:"87";s:2:"WX";s:3:"944";s:1:"N";s:1:"W";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:1:"0";i:2;s:3:"929";i:3;s:3:"718";}}s:1:"W";a:4:{s:1:"C";s:2:"87";s:2:"WX";s:3:"944";s:1:"N";s:1:"W";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:1:"0";i:2;s:3:"929";i:3;s:3:"718";}}i:88;a:4:{s:1:"C";s:2:"88";s:2:"WX";s:3:"667";s:1:"N";s:1:"X";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:1:"0";i:2;s:3:"653";i:3;s:3:"718";}}s:1:"X";a:4:{s:1:"C";s:2:"88";s:2:"WX";s:3:"667";s:1:"N";s:1:"X";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:1:"0";i:2;s:3:"653";i:3;s:3:"718";}}i:89;a:4:{s:1:"C";s:2:"89";s:2:"WX";s:3:"667";s:1:"N";s:1:"Y";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:1:"0";i:2;s:3:"653";i:3;s:3:"718";}}s:1:"Y";a:4:{s:1:"C";s:2:"89";s:2:"WX";s:3:"667";s:1:"N";s:1:"Y";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:1:"0";i:2;s:3:"653";i:3;s:3:"718";}}i:90;a:4:{s:1:"C";s:2:"90";s:2:"WX";s:3:"611";s:1:"N";s:1:"Z";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:1:"0";i:2;s:3:"586";i:3;s:3:"718";}}s:1:"Z";a:4:{s:1:"C";s:2:"90";s:2:"WX";s:3:"611";s:1:"N";s:1:"Z";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:1:"0";i:2;s:3:"586";i:3;s:3:"718";}}i:91;a:4:{s:1:"C";s:2:"91";s:2:"WX";s:3:"333";s:1:"N";s:11:"bracketleft";s:1:"B";a:4:{i:0;s:2:"63";i:1;s:4:"-196";i:2;s:3:"309";i:3;s:3:"722";}}s:11:"bracketleft";a:4:{s:1:"C";s:2:"91";s:2:"WX";s:3:"333";s:1:"N";s:11:"bracketleft";s:1:"B";a:4:{i:0;s:2:"63";i:1;s:4:"-196";i:2;s:3:"309";i:3;s:3:"722";}}i:92;a:4:{s:1:"C";s:2:"92";s:2:"WX";s:3:"278";s:1:"N";s:9:"backslash";s:1:"B";a:4:{i:0;s:3:"-33";i:1;s:3:"-19";i:2;s:3:"311";i:3;s:3:"737";}}s:9:"backslash";a:4:{s:1:"C";s:2:"92";s:2:"WX";s:3:"278";s:1:"N";s:9:"backslash";s:1:"B";a:4:{i:0;s:3:"-33";i:1;s:3:"-19";i:2;s:3:"311";i:3;s:3:"737";}}i:93;a:4:{s:1:"C";s:2:"93";s:2:"WX";s:3:"333";s:1:"N";s:12:"bracketright";s:1:"B";a:4:{i:0;s:2:"24";i:1;s:4:"-196";i:2;s:3:"270";i:3;s:3:"722";}}s:12:"bracketright";a:4:{s:1:"C";s:2:"93";s:2:"WX";s:3:"333";s:1:"N";s:12:"bracketright";s:1:"B";a:4:{i:0;s:2:"24";i:1;s:4:"-196";i:2;s:3:"270";i:3;s:3:"722";}}i:94;a:4:{s:1:"C";s:2:"94";s:2:"WX";s:3:"584";s:1:"N";s:11:"asciicircum";s:1:"B";a:4:{i:0;s:2:"62";i:1;s:3:"323";i:2;s:3:"522";i:3;s:3:"698";}}s:11:"asciicircum";a:4:{s:1:"C";s:2:"94";s:2:"WX";s:3:"584";s:1:"N";s:11:"asciicircum";s:1:"B";a:4:{i:0;s:2:"62";i:1;s:3:"323";i:2;s:3:"522";i:3;s:3:"698";}}i:95;a:4:{s:1:"C";s:2:"95";s:2:"WX";s:3:"556";s:1:"N";s:10:"underscore";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:4:"-125";i:2;s:3:"556";i:3;s:3:"-75";}}s:10:"underscore";a:4:{s:1:"C";s:2:"95";s:2:"WX";s:3:"556";s:1:"N";s:10:"underscore";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:4:"-125";i:2;s:3:"556";i:3;s:3:"-75";}}i:96;a:4:{s:1:"C";s:2:"96";s:2:"WX";s:3:"278";s:1:"N";s:9:"quoteleft";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:3:"454";i:2;s:3:"209";i:3;s:3:"727";}}s:9:"quoteleft";a:4:{s:1:"C";s:2:"96";s:2:"WX";s:3:"278";s:1:"N";s:9:"quoteleft";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:3:"454";i:2;s:3:"209";i:3;s:3:"727";}}i:97;a:4:{s:1:"C";s:2:"97";s:2:"WX";s:3:"556";s:1:"N";s:1:"a";s:1:"B";a:4:{i:0;s:2:"29";i:1;s:3:"-14";i:2;s:3:"527";i:3;s:3:"546";}}s:1:"a";a:4:{s:1:"C";s:2:"97";s:2:"WX";s:3:"556";s:1:"N";s:1:"a";s:1:"B";a:4:{i:0;s:2:"29";i:1;s:3:"-14";i:2;s:3:"527";i:3;s:3:"546";}}i:98;a:4:{s:1:"C";s:2:"98";s:2:"WX";s:3:"611";s:1:"N";s:1:"b";s:1:"B";a:4:{i:0;s:2:"61";i:1;s:3:"-14";i:2;s:3:"578";i:3;s:3:"718";}}s:1:"b";a:4:{s:1:"C";s:2:"98";s:2:"WX";s:3:"611";s:1:"N";s:1:"b";s:1:"B";a:4:{i:0;s:2:"61";i:1;s:3:"-14";i:2;s:3:"578";i:3;s:3:"718";}}i:99;a:4:{s:1:"C";s:2:"99";s:2:"WX";s:3:"556";s:1:"N";s:1:"c";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-14";i:2;s:3:"524";i:3;s:3:"546";}}s:1:"c";a:4:{s:1:"C";s:2:"99";s:2:"WX";s:3:"556";s:1:"N";s:1:"c";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-14";i:2;s:3:"524";i:3;s:3:"546";}}i:100;a:4:{s:1:"C";s:3:"100";s:2:"WX";s:3:"611";s:1:"N";s:1:"d";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-14";i:2;s:3:"551";i:3;s:3:"718";}}s:1:"d";a:4:{s:1:"C";s:3:"100";s:2:"WX";s:3:"611";s:1:"N";s:1:"d";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-14";i:2;s:3:"551";i:3;s:3:"718";}}i:101;a:4:{s:1:"C";s:3:"101";s:2:"WX";s:3:"556";s:1:"N";s:1:"e";s:1:"B";a:4:{i:0;s:2:"23";i:1;s:3:"-14";i:2;s:3:"528";i:3;s:3:"546";}}s:1:"e";a:4:{s:1:"C";s:3:"101";s:2:"WX";s:3:"556";s:1:"N";s:1:"e";s:1:"B";a:4:{i:0;s:2:"23";i:1;s:3:"-14";i:2;s:3:"528";i:3;s:3:"546";}}i:102;a:5:{s:1:"C";s:3:"102";s:2:"WX";s:3:"333";s:1:"N";s:1:"f";s:1:"B";a:4:{i:0;s:2:"10";i:1;s:1:"0";i:2;s:3:"318";i:3;s:3:"727";}s:1:"L";a:2:{i:0;s:1:"l";i:1;s:2:"fl";}}s:1:"f";a:5:{s:1:"C";s:3:"102";s:2:"WX";s:3:"333";s:1:"N";s:1:"f";s:1:"B";a:4:{i:0;s:2:"10";i:1;s:1:"0";i:2;s:3:"318";i:3;s:3:"727";}s:1:"L";a:2:{i:0;s:1:"l";i:1;s:2:"fl";}}i:103;a:4:{s:1:"C";s:3:"103";s:2:"WX";s:3:"611";s:1:"N";s:1:"g";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:4:"-217";i:2;s:3:"553";i:3;s:3:"546";}}s:1:"g";a:4:{s:1:"C";s:3:"103";s:2:"WX";s:3:"611";s:1:"N";s:1:"g";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:4:"-217";i:2;s:3:"553";i:3;s:3:"546";}}i:104;a:4:{s:1:"C";s:3:"104";s:2:"WX";s:3:"611";s:1:"N";s:1:"h";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:1:"0";i:2;s:3:"546";i:3;s:3:"718";}}s:1:"h";a:4:{s:1:"C";s:3:"104";s:2:"WX";s:3:"611";s:1:"N";s:1:"h";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:1:"0";i:2;s:3:"546";i:3;s:3:"718";}}i:105;a:4:{s:1:"C";s:3:"105";s:2:"WX";s:3:"278";s:1:"N";s:1:"i";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:1:"0";i:2;s:3:"209";i:3;s:3:"725";}}s:1:"i";a:4:{s:1:"C";s:3:"105";s:2:"WX";s:3:"278";s:1:"N";s:1:"i";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:1:"0";i:2;s:3:"209";i:3;s:3:"725";}}i:106;a:4:{s:1:"C";s:3:"106";s:2:"WX";s:3:"278";s:1:"N";s:1:"j";s:1:"B";a:4:{i:0;s:1:"3";i:1;s:4:"-214";i:2;s:3:"209";i:3;s:3:"725";}}s:1:"j";a:4:{s:1:"C";s:3:"106";s:2:"WX";s:3:"278";s:1:"N";s:1:"j";s:1:"B";a:4:{i:0;s:1:"3";i:1;s:4:"-214";i:2;s:3:"209";i:3;s:3:"725";}}i:107;a:4:{s:1:"C";s:3:"107";s:2:"WX";s:3:"556";s:1:"N";s:1:"k";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:1:"0";i:2;s:3:"562";i:3;s:3:"718";}}s:1:"k";a:4:{s:1:"C";s:3:"107";s:2:"WX";s:3:"556";s:1:"N";s:1:"k";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:1:"0";i:2;s:3:"562";i:3;s:3:"718";}}i:108;a:4:{s:1:"C";s:3:"108";s:2:"WX";s:3:"278";s:1:"N";s:1:"l";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:1:"0";i:2;s:3:"209";i:3;s:3:"718";}}s:1:"l";a:4:{s:1:"C";s:3:"108";s:2:"WX";s:3:"278";s:1:"N";s:1:"l";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:1:"0";i:2;s:3:"209";i:3;s:3:"718";}}i:109;a:4:{s:1:"C";s:3:"109";s:2:"WX";s:3:"889";s:1:"N";s:1:"m";s:1:"B";a:4:{i:0;s:2:"64";i:1;s:1:"0";i:2;s:3:"826";i:3;s:3:"546";}}s:1:"m";a:4:{s:1:"C";s:3:"109";s:2:"WX";s:3:"889";s:1:"N";s:1:"m";s:1:"B";a:4:{i:0;s:2:"64";i:1;s:1:"0";i:2;s:3:"826";i:3;s:3:"546";}}i:110;a:4:{s:1:"C";s:3:"110";s:2:"WX";s:3:"611";s:1:"N";s:1:"n";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:1:"0";i:2;s:3:"546";i:3;s:3:"546";}}s:1:"n";a:4:{s:1:"C";s:3:"110";s:2:"WX";s:3:"611";s:1:"N";s:1:"n";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:1:"0";i:2;s:3:"546";i:3;s:3:"546";}}i:111;a:4:{s:1:"C";s:3:"111";s:2:"WX";s:3:"611";s:1:"N";s:1:"o";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-14";i:2;s:3:"578";i:3;s:3:"546";}}s:1:"o";a:4:{s:1:"C";s:3:"111";s:2:"WX";s:3:"611";s:1:"N";s:1:"o";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-14";i:2;s:3:"578";i:3;s:3:"546";}}i:112;a:4:{s:1:"C";s:3:"112";s:2:"WX";s:3:"611";s:1:"N";s:1:"p";s:1:"B";a:4:{i:0;s:2:"62";i:1;s:4:"-207";i:2;s:3:"578";i:3;s:3:"546";}}s:1:"p";a:4:{s:1:"C";s:3:"112";s:2:"WX";s:3:"611";s:1:"N";s:1:"p";s:1:"B";a:4:{i:0;s:2:"62";i:1;s:4:"-207";i:2;s:3:"578";i:3;s:3:"546";}}i:113;a:4:{s:1:"C";s:3:"113";s:2:"WX";s:3:"611";s:1:"N";s:1:"q";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:4:"-207";i:2;s:3:"552";i:3;s:3:"546";}}s:1:"q";a:4:{s:1:"C";s:3:"113";s:2:"WX";s:3:"611";s:1:"N";s:1:"q";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:4:"-207";i:2;s:3:"552";i:3;s:3:"546";}}i:114;a:4:{s:1:"C";s:3:"114";s:2:"WX";s:3:"389";s:1:"N";s:1:"r";s:1:"B";a:4:{i:0;s:2:"64";i:1;s:1:"0";i:2;s:3:"373";i:3;s:3:"546";}}s:1:"r";a:4:{s:1:"C";s:3:"114";s:2:"WX";s:3:"389";s:1:"N";s:1:"r";s:1:"B";a:4:{i:0;s:2:"64";i:1;s:1:"0";i:2;s:3:"373";i:3;s:3:"546";}}i:115;a:4:{s:1:"C";s:3:"115";s:2:"WX";s:3:"556";s:1:"N";s:1:"s";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:3:"-14";i:2;s:3:"519";i:3;s:3:"546";}}s:1:"s";a:4:{s:1:"C";s:3:"115";s:2:"WX";s:3:"556";s:1:"N";s:1:"s";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:3:"-14";i:2;s:3:"519";i:3;s:3:"546";}}i:116;a:4:{s:1:"C";s:3:"116";s:2:"WX";s:3:"333";s:1:"N";s:1:"t";s:1:"B";a:4:{i:0;s:2:"10";i:1;s:2:"-6";i:2;s:3:"309";i:3;s:3:"676";}}s:1:"t";a:4:{s:1:"C";s:3:"116";s:2:"WX";s:3:"333";s:1:"N";s:1:"t";s:1:"B";a:4:{i:0;s:2:"10";i:1;s:2:"-6";i:2;s:3:"309";i:3;s:3:"676";}}i:117;a:4:{s:1:"C";s:3:"117";s:2:"WX";s:3:"611";s:1:"N";s:1:"u";s:1:"B";a:4:{i:0;s:2:"66";i:1;s:3:"-14";i:2;s:3:"545";i:3;s:3:"532";}}s:1:"u";a:4:{s:1:"C";s:3:"117";s:2:"WX";s:3:"611";s:1:"N";s:1:"u";s:1:"B";a:4:{i:0;s:2:"66";i:1;s:3:"-14";i:2;s:3:"545";i:3;s:3:"532";}}i:118;a:4:{s:1:"C";s:3:"118";s:2:"WX";s:3:"556";s:1:"N";s:1:"v";s:1:"B";a:4:{i:0;s:2:"13";i:1;s:1:"0";i:2;s:3:"543";i:3;s:3:"532";}}s:1:"v";a:4:{s:1:"C";s:3:"118";s:2:"WX";s:3:"556";s:1:"N";s:1:"v";s:1:"B";a:4:{i:0;s:2:"13";i:1;s:1:"0";i:2;s:3:"543";i:3;s:3:"532";}}i:119;a:4:{s:1:"C";s:3:"119";s:2:"WX";s:3:"778";s:1:"N";s:1:"w";s:1:"B";a:4:{i:0;s:2:"10";i:1;s:1:"0";i:2;s:3:"769";i:3;s:3:"532";}}s:1:"w";a:4:{s:1:"C";s:3:"119";s:2:"WX";s:3:"778";s:1:"N";s:1:"w";s:1:"B";a:4:{i:0;s:2:"10";i:1;s:1:"0";i:2;s:3:"769";i:3;s:3:"532";}}i:120;a:4:{s:1:"C";s:3:"120";s:2:"WX";s:3:"556";s:1:"N";s:1:"x";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:1:"0";i:2;s:3:"541";i:3;s:3:"532";}}s:1:"x";a:4:{s:1:"C";s:3:"120";s:2:"WX";s:3:"556";s:1:"N";s:1:"x";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:1:"0";i:2;s:3:"541";i:3;s:3:"532";}}i:121;a:4:{s:1:"C";s:3:"121";s:2:"WX";s:3:"556";s:1:"N";s:1:"y";s:1:"B";a:4:{i:0;s:2:"10";i:1;s:4:"-214";i:2;s:3:"539";i:3;s:3:"532";}}s:1:"y";a:4:{s:1:"C";s:3:"121";s:2:"WX";s:3:"556";s:1:"N";s:1:"y";s:1:"B";a:4:{i:0;s:2:"10";i:1;s:4:"-214";i:2;s:3:"539";i:3;s:3:"532";}}i:122;a:4:{s:1:"C";s:3:"122";s:2:"WX";s:3:"500";s:1:"N";s:1:"z";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:1:"0";i:2;s:3:"480";i:3;s:3:"532";}}s:1:"z";a:4:{s:1:"C";s:3:"122";s:2:"WX";s:3:"500";s:1:"N";s:1:"z";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:1:"0";i:2;s:3:"480";i:3;s:3:"532";}}i:123;a:4:{s:1:"C";s:3:"123";s:2:"WX";s:3:"389";s:1:"N";s:9:"braceleft";s:1:"B";a:4:{i:0;s:2:"48";i:1;s:4:"-196";i:2;s:3:"365";i:3;s:3:"722";}}s:9:"braceleft";a:4:{s:1:"C";s:3:"123";s:2:"WX";s:3:"389";s:1:"N";s:9:"braceleft";s:1:"B";a:4:{i:0;s:2:"48";i:1;s:4:"-196";i:2;s:3:"365";i:3;s:3:"722";}}i:124;a:4:{s:1:"C";s:3:"124";s:2:"WX";s:3:"280";s:1:"N";s:3:"bar";s:1:"B";a:4:{i:0;s:2:"84";i:1;s:4:"-225";i:2;s:3:"196";i:3;s:3:"775";}}s:3:"bar";a:4:{s:1:"C";s:3:"124";s:2:"WX";s:3:"280";s:1:"N";s:3:"bar";s:1:"B";a:4:{i:0;s:2:"84";i:1;s:4:"-225";i:2;s:3:"196";i:3;s:3:"775";}}i:125;a:4:{s:1:"C";s:3:"125";s:2:"WX";s:3:"389";s:1:"N";s:10:"braceright";s:1:"B";a:4:{i:0;s:2:"24";i:1;s:4:"-196";i:2;s:3:"341";i:3;s:3:"722";}}s:10:"braceright";a:4:{s:1:"C";s:3:"125";s:2:"WX";s:3:"389";s:1:"N";s:10:"braceright";s:1:"B";a:4:{i:0;s:2:"24";i:1;s:4:"-196";i:2;s:3:"341";i:3;s:3:"722";}}i:126;a:4:{s:1:"C";s:3:"126";s:2:"WX";s:3:"584";s:1:"N";s:10:"asciitilde";s:1:"B";a:4:{i:0;s:2:"61";i:1;s:3:"163";i:2;s:3:"523";i:3;s:3:"343";}}s:10:"asciitilde";a:4:{s:1:"C";s:3:"126";s:2:"WX";s:3:"584";s:1:"N";s:10:"asciitilde";s:1:"B";a:4:{i:0;s:2:"61";i:1;s:3:"163";i:2;s:3:"523";i:3;s:3:"343";}}i:161;a:4:{s:1:"C";s:3:"161";s:2:"WX";s:3:"333";s:1:"N";s:10:"exclamdown";s:1:"B";a:4:{i:0;s:2:"90";i:1;s:4:"-186";i:2;s:3:"244";i:3;s:3:"532";}}s:10:"exclamdown";a:4:{s:1:"C";s:3:"161";s:2:"WX";s:3:"333";s:1:"N";s:10:"exclamdown";s:1:"B";a:4:{i:0;s:2:"90";i:1;s:4:"-186";i:2;s:3:"244";i:3;s:3:"532";}}i:162;a:4:{s:1:"C";s:3:"162";s:2:"WX";s:3:"556";s:1:"N";s:4:"cent";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:4:"-118";i:2;s:3:"524";i:3;s:3:"628";}}s:4:"cent";a:4:{s:1:"C";s:3:"162";s:2:"WX";s:3:"556";s:1:"N";s:4:"cent";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:4:"-118";i:2;s:3:"524";i:3;s:3:"628";}}i:163;a:4:{s:1:"C";s:3:"163";s:2:"WX";s:3:"556";s:1:"N";s:8:"sterling";s:1:"B";a:4:{i:0;s:2:"28";i:1;s:3:"-16";i:2;s:3:"541";i:3;s:3:"718";}}s:8:"sterling";a:4:{s:1:"C";s:3:"163";s:2:"WX";s:3:"556";s:1:"N";s:8:"sterling";s:1:"B";a:4:{i:0;s:2:"28";i:1;s:3:"-16";i:2;s:3:"541";i:3;s:3:"718";}}i:164;a:4:{s:1:"C";s:3:"164";s:2:"WX";s:3:"167";s:1:"N";s:8:"fraction";s:1:"B";a:4:{i:0;s:4:"-170";i:1;s:3:"-19";i:2;s:3:"336";i:3;s:3:"710";}}s:8:"fraction";a:4:{s:1:"C";s:3:"164";s:2:"WX";s:3:"167";s:1:"N";s:8:"fraction";s:1:"B";a:4:{i:0;s:4:"-170";i:1;s:3:"-19";i:2;s:3:"336";i:3;s:3:"710";}}i:165;a:4:{s:1:"C";s:3:"165";s:2:"WX";s:3:"556";s:1:"N";s:3:"yen";s:1:"B";a:4:{i:0;s:2:"-9";i:1;s:1:"0";i:2;s:3:"565";i:3;s:3:"698";}}s:3:"yen";a:4:{s:1:"C";s:3:"165";s:2:"WX";s:3:"556";s:1:"N";s:3:"yen";s:1:"B";a:4:{i:0;s:2:"-9";i:1;s:1:"0";i:2;s:3:"565";i:3;s:3:"698";}}i:166;a:4:{s:1:"C";s:3:"166";s:2:"WX";s:3:"556";s:1:"N";s:6:"florin";s:1:"B";a:4:{i:0;s:3:"-10";i:1;s:4:"-210";i:2;s:3:"516";i:3;s:3:"737";}}s:6:"florin";a:4:{s:1:"C";s:3:"166";s:2:"WX";s:3:"556";s:1:"N";s:6:"florin";s:1:"B";a:4:{i:0;s:3:"-10";i:1;s:4:"-210";i:2;s:3:"516";i:3;s:3:"737";}}i:167;a:4:{s:1:"C";s:3:"167";s:2:"WX";s:3:"556";s:1:"N";s:7:"section";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:4:"-184";i:2;s:3:"522";i:3;s:3:"727";}}s:7:"section";a:4:{s:1:"C";s:3:"167";s:2:"WX";s:3:"556";s:1:"N";s:7:"section";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:4:"-184";i:2;s:3:"522";i:3;s:3:"727";}}i:168;a:4:{s:1:"C";s:3:"168";s:2:"WX";s:3:"556";s:1:"N";s:8:"currency";s:1:"B";a:4:{i:0;s:2:"-3";i:1;s:2:"76";i:2;s:3:"559";i:3;s:3:"636";}}s:8:"currency";a:4:{s:1:"C";s:3:"168";s:2:"WX";s:3:"556";s:1:"N";s:8:"currency";s:1:"B";a:4:{i:0;s:2:"-3";i:1;s:2:"76";i:2;s:3:"559";i:3;s:3:"636";}}i:169;a:4:{s:1:"C";s:3:"169";s:2:"WX";s:3:"238";s:1:"N";s:11:"quotesingle";s:1:"B";a:4:{i:0;s:2:"70";i:1;s:3:"447";i:2;s:3:"168";i:3;s:3:"718";}}s:11:"quotesingle";a:4:{s:1:"C";s:3:"169";s:2:"WX";s:3:"238";s:1:"N";s:11:"quotesingle";s:1:"B";a:4:{i:0;s:2:"70";i:1;s:3:"447";i:2;s:3:"168";i:3;s:3:"718";}}i:170;a:4:{s:1:"C";s:3:"170";s:2:"WX";s:3:"500";s:1:"N";s:12:"quotedblleft";s:1:"B";a:4:{i:0;s:2:"64";i:1;s:3:"454";i:2;s:3:"436";i:3;s:3:"727";}}s:12:"quotedblleft";a:4:{s:1:"C";s:3:"170";s:2:"WX";s:3:"500";s:1:"N";s:12:"quotedblleft";s:1:"B";a:4:{i:0;s:2:"64";i:1;s:3:"454";i:2;s:3:"436";i:3;s:3:"727";}}i:171;a:4:{s:1:"C";s:3:"171";s:2:"WX";s:3:"556";s:1:"N";s:13:"guillemotleft";s:1:"B";a:4:{i:0;s:2:"88";i:1;s:2:"76";i:2;s:3:"468";i:3;s:3:"484";}}s:13:"guillemotleft";a:4:{s:1:"C";s:3:"171";s:2:"WX";s:3:"556";s:1:"N";s:13:"guillemotleft";s:1:"B";a:4:{i:0;s:2:"88";i:1;s:2:"76";i:2;s:3:"468";i:3;s:3:"484";}}i:172;a:4:{s:1:"C";s:3:"172";s:2:"WX";s:3:"333";s:1:"N";s:13:"guilsinglleft";s:1:"B";a:4:{i:0;s:2:"83";i:1;s:2:"76";i:2;s:3:"250";i:3;s:3:"484";}}s:13:"guilsinglleft";a:4:{s:1:"C";s:3:"172";s:2:"WX";s:3:"333";s:1:"N";s:13:"guilsinglleft";s:1:"B";a:4:{i:0;s:2:"83";i:1;s:2:"76";i:2;s:3:"250";i:3;s:3:"484";}}i:173;a:4:{s:1:"C";s:3:"173";s:2:"WX";s:3:"333";s:1:"N";s:14:"guilsinglright";s:1:"B";a:4:{i:0;s:2:"83";i:1;s:2:"76";i:2;s:3:"250";i:3;s:3:"484";}}s:14:"guilsinglright";a:4:{s:1:"C";s:3:"173";s:2:"WX";s:3:"333";s:1:"N";s:14:"guilsinglright";s:1:"B";a:4:{i:0;s:2:"83";i:1;s:2:"76";i:2;s:3:"250";i:3;s:3:"484";}}i:174;a:4:{s:1:"C";s:3:"174";s:2:"WX";s:3:"611";s:1:"N";s:2:"fi";s:1:"B";a:4:{i:0;s:2:"10";i:1;s:1:"0";i:2;s:3:"542";i:3;s:3:"727";}}s:2:"fi";a:4:{s:1:"C";s:3:"174";s:2:"WX";s:3:"611";s:1:"N";s:2:"fi";s:1:"B";a:4:{i:0;s:2:"10";i:1;s:1:"0";i:2;s:3:"542";i:3;s:3:"727";}}i:175;a:4:{s:1:"C";s:3:"175";s:2:"WX";s:3:"611";s:1:"N";s:2:"fl";s:1:"B";a:4:{i:0;s:2:"10";i:1;s:1:"0";i:2;s:3:"542";i:3;s:3:"727";}}s:2:"fl";a:4:{s:1:"C";s:3:"175";s:2:"WX";s:3:"611";s:1:"N";s:2:"fl";s:1:"B";a:4:{i:0;s:2:"10";i:1;s:1:"0";i:2;s:3:"542";i:3;s:3:"727";}}i:177;a:4:{s:1:"C";s:3:"177";s:2:"WX";s:3:"556";s:1:"N";s:6:"endash";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:3:"227";i:2;s:3:"556";i:3;s:3:"333";}}s:6:"endash";a:4:{s:1:"C";s:3:"177";s:2:"WX";s:3:"556";s:1:"N";s:6:"endash";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:3:"227";i:2;s:3:"556";i:3;s:3:"333";}}i:178;a:4:{s:1:"C";s:3:"178";s:2:"WX";s:3:"556";s:1:"N";s:6:"dagger";s:1:"B";a:4:{i:0;s:2:"36";i:1;s:4:"-171";i:2;s:3:"520";i:3;s:3:"718";}}s:6:"dagger";a:4:{s:1:"C";s:3:"178";s:2:"WX";s:3:"556";s:1:"N";s:6:"dagger";s:1:"B";a:4:{i:0;s:2:"36";i:1;s:4:"-171";i:2;s:3:"520";i:3;s:3:"718";}}i:179;a:4:{s:1:"C";s:3:"179";s:2:"WX";s:3:"556";s:1:"N";s:9:"daggerdbl";s:1:"B";a:4:{i:0;s:2:"36";i:1;s:4:"-171";i:2;s:3:"520";i:3;s:3:"718";}}s:9:"daggerdbl";a:4:{s:1:"C";s:3:"179";s:2:"WX";s:3:"556";s:1:"N";s:9:"daggerdbl";s:1:"B";a:4:{i:0;s:2:"36";i:1;s:4:"-171";i:2;s:3:"520";i:3;s:3:"718";}}i:180;a:4:{s:1:"C";s:3:"180";s:2:"WX";s:3:"278";s:1:"N";s:14:"periodcentered";s:1:"B";a:4:{i:0;s:2:"58";i:1;s:3:"172";i:2;s:3:"220";i:3;s:3:"334";}}s:14:"periodcentered";a:4:{s:1:"C";s:3:"180";s:2:"WX";s:3:"278";s:1:"N";s:14:"periodcentered";s:1:"B";a:4:{i:0;s:2:"58";i:1;s:3:"172";i:2;s:3:"220";i:3;s:3:"334";}}i:182;a:4:{s:1:"C";s:3:"182";s:2:"WX";s:3:"556";s:1:"N";s:9:"paragraph";s:1:"B";a:4:{i:0;s:2:"-8";i:1;s:4:"-191";i:2;s:3:"539";i:3;s:3:"700";}}s:9:"paragraph";a:4:{s:1:"C";s:3:"182";s:2:"WX";s:3:"556";s:1:"N";s:9:"paragraph";s:1:"B";a:4:{i:0;s:2:"-8";i:1;s:4:"-191";i:2;s:3:"539";i:3;s:3:"700";}}i:183;a:4:{s:1:"C";s:3:"183";s:2:"WX";s:3:"350";s:1:"N";s:6:"bullet";s:1:"B";a:4:{i:0;s:2:"10";i:1;s:3:"194";i:2;s:3:"340";i:3;s:3:"524";}}s:6:"bullet";a:4:{s:1:"C";s:3:"183";s:2:"WX";s:3:"350";s:1:"N";s:6:"bullet";s:1:"B";a:4:{i:0;s:2:"10";i:1;s:3:"194";i:2;s:3:"340";i:3;s:3:"524";}}i:184;a:4:{s:1:"C";s:3:"184";s:2:"WX";s:3:"278";s:1:"N";s:14:"quotesinglbase";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:4:"-146";i:2;s:3:"209";i:3;s:3:"127";}}s:14:"quotesinglbase";a:4:{s:1:"C";s:3:"184";s:2:"WX";s:3:"278";s:1:"N";s:14:"quotesinglbase";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:4:"-146";i:2;s:3:"209";i:3;s:3:"127";}}i:185;a:4:{s:1:"C";s:3:"185";s:2:"WX";s:3:"500";s:1:"N";s:12:"quotedblbase";s:1:"B";a:4:{i:0;s:2:"64";i:1;s:4:"-146";i:2;s:3:"436";i:3;s:3:"127";}}s:12:"quotedblbase";a:4:{s:1:"C";s:3:"185";s:2:"WX";s:3:"500";s:1:"N";s:12:"quotedblbase";s:1:"B";a:4:{i:0;s:2:"64";i:1;s:4:"-146";i:2;s:3:"436";i:3;s:3:"127";}}i:186;a:4:{s:1:"C";s:3:"186";s:2:"WX";s:3:"500";s:1:"N";s:13:"quotedblright";s:1:"B";a:4:{i:0;s:2:"64";i:1;s:3:"445";i:2;s:3:"436";i:3;s:3:"718";}}s:13:"quotedblright";a:4:{s:1:"C";s:3:"186";s:2:"WX";s:3:"500";s:1:"N";s:13:"quotedblright";s:1:"B";a:4:{i:0;s:2:"64";i:1;s:3:"445";i:2;s:3:"436";i:3;s:3:"718";}}i:187;a:4:{s:1:"C";s:3:"187";s:2:"WX";s:3:"556";s:1:"N";s:14:"guillemotright";s:1:"B";a:4:{i:0;s:2:"88";i:1;s:2:"76";i:2;s:3:"468";i:3;s:3:"484";}}s:14:"guillemotright";a:4:{s:1:"C";s:3:"187";s:2:"WX";s:3:"556";s:1:"N";s:14:"guillemotright";s:1:"B";a:4:{i:0;s:2:"88";i:1;s:2:"76";i:2;s:3:"468";i:3;s:3:"484";}}i:188;a:4:{s:1:"C";s:3:"188";s:2:"WX";s:4:"1000";s:1:"N";s:8:"ellipsis";s:1:"B";a:4:{i:0;s:2:"92";i:1;s:1:"0";i:2;s:3:"908";i:3;s:3:"146";}}s:8:"ellipsis";a:4:{s:1:"C";s:3:"188";s:2:"WX";s:4:"1000";s:1:"N";s:8:"ellipsis";s:1:"B";a:4:{i:0;s:2:"92";i:1;s:1:"0";i:2;s:3:"908";i:3;s:3:"146";}}i:189;a:4:{s:1:"C";s:3:"189";s:2:"WX";s:4:"1000";s:1:"N";s:11:"perthousand";s:1:"B";a:4:{i:0;s:2:"-3";i:1;s:3:"-19";i:2;s:4:"1003";i:3;s:3:"710";}}s:11:"perthousand";a:4:{s:1:"C";s:3:"189";s:2:"WX";s:4:"1000";s:1:"N";s:11:"perthousand";s:1:"B";a:4:{i:0;s:2:"-3";i:1;s:3:"-19";i:2;s:4:"1003";i:3;s:3:"710";}}i:191;a:4:{s:1:"C";s:3:"191";s:2:"WX";s:3:"611";s:1:"N";s:12:"questiondown";s:1:"B";a:4:{i:0;s:2:"55";i:1;s:4:"-195";i:2;s:3:"551";i:3;s:3:"532";}}s:12:"questiondown";a:4:{s:1:"C";s:3:"191";s:2:"WX";s:3:"611";s:1:"N";s:12:"questiondown";s:1:"B";a:4:{i:0;s:2:"55";i:1;s:4:"-195";i:2;s:3:"551";i:3;s:3:"532";}}i:193;a:4:{s:1:"C";s:3:"193";s:2:"WX";s:3:"333";s:1:"N";s:5:"grave";s:1:"B";a:4:{i:0;s:3:"-23";i:1;s:3:"604";i:2;s:3:"225";i:3;s:3:"750";}}s:5:"grave";a:4:{s:1:"C";s:3:"193";s:2:"WX";s:3:"333";s:1:"N";s:5:"grave";s:1:"B";a:4:{i:0;s:3:"-23";i:1;s:3:"604";i:2;s:3:"225";i:3;s:3:"750";}}i:194;a:4:{s:1:"C";s:3:"194";s:2:"WX";s:3:"333";s:1:"N";s:5:"acute";s:1:"B";a:4:{i:0;s:3:"108";i:1;s:3:"604";i:2;s:3:"356";i:3;s:3:"750";}}s:5:"acute";a:4:{s:1:"C";s:3:"194";s:2:"WX";s:3:"333";s:1:"N";s:5:"acute";s:1:"B";a:4:{i:0;s:3:"108";i:1;s:3:"604";i:2;s:3:"356";i:3;s:3:"750";}}i:195;a:4:{s:1:"C";s:3:"195";s:2:"WX";s:3:"333";s:1:"N";s:10:"circumflex";s:1:"B";a:4:{i:0;s:3:"-10";i:1;s:3:"604";i:2;s:3:"343";i:3;s:3:"750";}}s:10:"circumflex";a:4:{s:1:"C";s:3:"195";s:2:"WX";s:3:"333";s:1:"N";s:10:"circumflex";s:1:"B";a:4:{i:0;s:3:"-10";i:1;s:3:"604";i:2;s:3:"343";i:3;s:3:"750";}}i:196;a:4:{s:1:"C";s:3:"196";s:2:"WX";s:3:"333";s:1:"N";s:5:"tilde";s:1:"B";a:4:{i:0;s:3:"-17";i:1;s:3:"610";i:2;s:3:"350";i:3;s:3:"737";}}s:5:"tilde";a:4:{s:1:"C";s:3:"196";s:2:"WX";s:3:"333";s:1:"N";s:5:"tilde";s:1:"B";a:4:{i:0;s:3:"-17";i:1;s:3:"610";i:2;s:3:"350";i:3;s:3:"737";}}i:197;a:4:{s:1:"C";s:3:"197";s:2:"WX";s:3:"333";s:1:"N";s:6:"macron";s:1:"B";a:4:{i:0;s:2:"-6";i:1;s:3:"604";i:2;s:3:"339";i:3;s:3:"678";}}s:6:"macron";a:4:{s:1:"C";s:3:"197";s:2:"WX";s:3:"333";s:1:"N";s:6:"macron";s:1:"B";a:4:{i:0;s:2:"-6";i:1;s:3:"604";i:2;s:3:"339";i:3;s:3:"678";}}i:198;a:4:{s:1:"C";s:3:"198";s:2:"WX";s:3:"333";s:1:"N";s:5:"breve";s:1:"B";a:4:{i:0;s:2:"-2";i:1;s:3:"604";i:2;s:3:"335";i:3;s:3:"750";}}s:5:"breve";a:4:{s:1:"C";s:3:"198";s:2:"WX";s:3:"333";s:1:"N";s:5:"breve";s:1:"B";a:4:{i:0;s:2:"-2";i:1;s:3:"604";i:2;s:3:"335";i:3;s:3:"750";}}i:199;a:4:{s:1:"C";s:3:"199";s:2:"WX";s:3:"333";s:1:"N";s:9:"dotaccent";s:1:"B";a:4:{i:0;s:3:"104";i:1;s:3:"614";i:2;s:3:"230";i:3;s:3:"729";}}s:9:"dotaccent";a:4:{s:1:"C";s:3:"199";s:2:"WX";s:3:"333";s:1:"N";s:9:"dotaccent";s:1:"B";a:4:{i:0;s:3:"104";i:1;s:3:"614";i:2;s:3:"230";i:3;s:3:"729";}}i:200;a:4:{s:1:"C";s:3:"200";s:2:"WX";s:3:"333";s:1:"N";s:8:"dieresis";s:1:"B";a:4:{i:0;s:1:"6";i:1;s:3:"614";i:2;s:3:"327";i:3;s:3:"729";}}s:8:"dieresis";a:4:{s:1:"C";s:3:"200";s:2:"WX";s:3:"333";s:1:"N";s:8:"dieresis";s:1:"B";a:4:{i:0;s:1:"6";i:1;s:3:"614";i:2;s:3:"327";i:3;s:3:"729";}}i:202;a:4:{s:1:"C";s:3:"202";s:2:"WX";s:3:"333";s:1:"N";s:4:"ring";s:1:"B";a:4:{i:0;s:2:"59";i:1;s:3:"568";i:2;s:3:"275";i:3;s:3:"776";}}s:4:"ring";a:4:{s:1:"C";s:3:"202";s:2:"WX";s:3:"333";s:1:"N";s:4:"ring";s:1:"B";a:4:{i:0;s:2:"59";i:1;s:3:"568";i:2;s:3:"275";i:3;s:3:"776";}}i:203;a:4:{s:1:"C";s:3:"203";s:2:"WX";s:3:"333";s:1:"N";s:7:"cedilla";s:1:"B";a:4:{i:0;s:1:"6";i:1;s:4:"-228";i:2;s:3:"245";i:3;s:1:"0";}}s:7:"cedilla";a:4:{s:1:"C";s:3:"203";s:2:"WX";s:3:"333";s:1:"N";s:7:"cedilla";s:1:"B";a:4:{i:0;s:1:"6";i:1;s:4:"-228";i:2;s:3:"245";i:3;s:1:"0";}}i:205;a:4:{s:1:"C";s:3:"205";s:2:"WX";s:3:"333";s:1:"N";s:12:"hungarumlaut";s:1:"B";a:4:{i:0;s:1:"9";i:1;s:3:"604";i:2;s:3:"486";i:3;s:3:"750";}}s:12:"hungarumlaut";a:4:{s:1:"C";s:3:"205";s:2:"WX";s:3:"333";s:1:"N";s:12:"hungarumlaut";s:1:"B";a:4:{i:0;s:1:"9";i:1;s:3:"604";i:2;s:3:"486";i:3;s:3:"750";}}i:206;a:4:{s:1:"C";s:3:"206";s:2:"WX";s:3:"333";s:1:"N";s:6:"ogonek";s:1:"B";a:4:{i:0;s:2:"71";i:1;s:4:"-228";i:2;s:3:"304";i:3;s:1:"0";}}s:6:"ogonek";a:4:{s:1:"C";s:3:"206";s:2:"WX";s:3:"333";s:1:"N";s:6:"ogonek";s:1:"B";a:4:{i:0;s:2:"71";i:1;s:4:"-228";i:2;s:3:"304";i:3;s:1:"0";}}i:207;a:4:{s:1:"C";s:3:"207";s:2:"WX";s:3:"333";s:1:"N";s:5:"caron";s:1:"B";a:4:{i:0;s:3:"-10";i:1;s:3:"604";i:2;s:3:"343";i:3;s:3:"750";}}s:5:"caron";a:4:{s:1:"C";s:3:"207";s:2:"WX";s:3:"333";s:1:"N";s:5:"caron";s:1:"B";a:4:{i:0;s:3:"-10";i:1;s:3:"604";i:2;s:3:"343";i:3;s:3:"750";}}i:208;a:4:{s:1:"C";s:3:"208";s:2:"WX";s:4:"1000";s:1:"N";s:6:"emdash";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:3:"227";i:2;s:4:"1000";i:3;s:3:"333";}}s:6:"emdash";a:4:{s:1:"C";s:3:"208";s:2:"WX";s:4:"1000";s:1:"N";s:6:"emdash";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:3:"227";i:2;s:4:"1000";i:3;s:3:"333";}}i:225;a:4:{s:1:"C";s:3:"225";s:2:"WX";s:4:"1000";s:1:"N";s:2:"AE";s:1:"B";a:4:{i:0;s:1:"5";i:1;s:1:"0";i:2;s:3:"954";i:3;s:3:"718";}}s:2:"AE";a:4:{s:1:"C";s:3:"225";s:2:"WX";s:4:"1000";s:1:"N";s:2:"AE";s:1:"B";a:4:{i:0;s:1:"5";i:1;s:1:"0";i:2;s:3:"954";i:3;s:3:"718";}}i:227;a:4:{s:1:"C";s:3:"227";s:2:"WX";s:3:"370";s:1:"N";s:11:"ordfeminine";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:3:"401";i:2;s:3:"347";i:3;s:3:"737";}}s:11:"ordfeminine";a:4:{s:1:"C";s:3:"227";s:2:"WX";s:3:"370";s:1:"N";s:11:"ordfeminine";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:3:"401";i:2;s:3:"347";i:3;s:3:"737";}}i:232;a:4:{s:1:"C";s:3:"232";s:2:"WX";s:3:"611";s:1:"N";s:6:"Lslash";s:1:"B";a:4:{i:0;s:3:"-20";i:1;s:1:"0";i:2;s:3:"583";i:3;s:3:"718";}}s:6:"Lslash";a:4:{s:1:"C";s:3:"232";s:2:"WX";s:3:"611";s:1:"N";s:6:"Lslash";s:1:"B";a:4:{i:0;s:3:"-20";i:1;s:1:"0";i:2;s:3:"583";i:3;s:3:"718";}}i:233;a:4:{s:1:"C";s:3:"233";s:2:"WX";s:3:"778";s:1:"N";s:6:"Oslash";s:1:"B";a:4:{i:0;s:2:"33";i:1;s:3:"-27";i:2;s:3:"744";i:3;s:3:"745";}}s:6:"Oslash";a:4:{s:1:"C";s:3:"233";s:2:"WX";s:3:"778";s:1:"N";s:6:"Oslash";s:1:"B";a:4:{i:0;s:2:"33";i:1;s:3:"-27";i:2;s:3:"744";i:3;s:3:"745";}}i:234;a:4:{s:1:"C";s:3:"234";s:2:"WX";s:4:"1000";s:1:"N";s:2:"OE";s:1:"B";a:4:{i:0;s:2:"37";i:1;s:3:"-19";i:2;s:3:"961";i:3;s:3:"737";}}s:2:"OE";a:4:{s:1:"C";s:3:"234";s:2:"WX";s:4:"1000";s:1:"N";s:2:"OE";s:1:"B";a:4:{i:0;s:2:"37";i:1;s:3:"-19";i:2;s:3:"961";i:3;s:3:"737";}}i:235;a:4:{s:1:"C";s:3:"235";s:2:"WX";s:3:"365";s:1:"N";s:12:"ordmasculine";s:1:"B";a:4:{i:0;s:1:"6";i:1;s:3:"401";i:2;s:3:"360";i:3;s:3:"737";}}s:12:"ordmasculine";a:4:{s:1:"C";s:3:"235";s:2:"WX";s:3:"365";s:1:"N";s:12:"ordmasculine";s:1:"B";a:4:{i:0;s:1:"6";i:1;s:3:"401";i:2;s:3:"360";i:3;s:3:"737";}}i:241;a:4:{s:1:"C";s:3:"241";s:2:"WX";s:3:"889";s:1:"N";s:2:"ae";s:1:"B";a:4:{i:0;s:2:"29";i:1;s:3:"-14";i:2;s:3:"858";i:3;s:3:"546";}}s:2:"ae";a:4:{s:1:"C";s:3:"241";s:2:"WX";s:3:"889";s:1:"N";s:2:"ae";s:1:"B";a:4:{i:0;s:2:"29";i:1;s:3:"-14";i:2;s:3:"858";i:3;s:3:"546";}}i:245;a:4:{s:1:"C";s:3:"245";s:2:"WX";s:3:"278";s:1:"N";s:8:"dotlessi";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:1:"0";i:2;s:3:"209";i:3;s:3:"532";}}s:8:"dotlessi";a:4:{s:1:"C";s:3:"245";s:2:"WX";s:3:"278";s:1:"N";s:8:"dotlessi";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:1:"0";i:2;s:3:"209";i:3;s:3:"532";}}i:248;a:4:{s:1:"C";s:3:"248";s:2:"WX";s:3:"278";s:1:"N";s:6:"lslash";s:1:"B";a:4:{i:0;s:3:"-18";i:1;s:1:"0";i:2;s:3:"296";i:3;s:3:"718";}}s:6:"lslash";a:4:{s:1:"C";s:3:"248";s:2:"WX";s:3:"278";s:1:"N";s:6:"lslash";s:1:"B";a:4:{i:0;s:3:"-18";i:1;s:1:"0";i:2;s:3:"296";i:3;s:3:"718";}}i:249;a:4:{s:1:"C";s:3:"249";s:2:"WX";s:3:"611";s:1:"N";s:6:"oslash";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:3:"-29";i:2;s:3:"589";i:3;s:3:"560";}}s:6:"oslash";a:4:{s:1:"C";s:3:"249";s:2:"WX";s:3:"611";s:1:"N";s:6:"oslash";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:3:"-29";i:2;s:3:"589";i:3;s:3:"560";}}i:250;a:4:{s:1:"C";s:3:"250";s:2:"WX";s:3:"944";s:1:"N";s:2:"oe";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-14";i:2;s:3:"912";i:3;s:3:"546";}}s:2:"oe";a:4:{s:1:"C";s:3:"250";s:2:"WX";s:3:"944";s:1:"N";s:2:"oe";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-14";i:2;s:3:"912";i:3;s:3:"546";}}i:251;a:4:{s:1:"C";s:3:"251";s:2:"WX";s:3:"611";s:1:"N";s:10:"germandbls";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:3:"-14";i:2;s:3:"579";i:3;s:3:"731";}}s:10:"germandbls";a:4:{s:1:"C";s:3:"251";s:2:"WX";s:3:"611";s:1:"N";s:10:"germandbls";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:3:"-14";i:2;s:3:"579";i:3;s:3:"731";}}s:9:"Idieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:9:"Idieresis";s:1:"B";a:4:{i:0;s:3:"-21";i:1;s:1:"0";i:2;s:3:"300";i:3;s:3:"915";}}s:6:"eacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"eacute";s:1:"B";a:4:{i:0;s:2:"23";i:1;s:3:"-14";i:2;s:3:"528";i:3;s:3:"750";}}s:6:"abreve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"abreve";s:1:"B";a:4:{i:0;s:2:"29";i:1;s:3:"-14";i:2;s:3:"527";i:3;s:3:"750";}}s:13:"uhungarumlaut";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:13:"uhungarumlaut";s:1:"B";a:4:{i:0;s:2:"66";i:1;s:3:"-14";i:2;s:3:"625";i:3;s:3:"750";}}s:6:"ecaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"ecaron";s:1:"B";a:4:{i:0;s:2:"23";i:1;s:3:"-14";i:2;s:3:"528";i:3;s:3:"750";}}s:9:"Ydieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:9:"Ydieresis";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:1:"0";i:2;s:3:"653";i:3;s:3:"915";}}s:6:"divide";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"584";s:1:"N";s:6:"divide";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:3:"-42";i:2;s:3:"544";i:3;s:3:"548";}}s:6:"Yacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Yacute";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:1:"0";i:2;s:3:"653";i:3;s:3:"936";}}s:11:"Acircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:11:"Acircumflex";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:1:"0";i:2;s:3:"702";i:3;s:3:"936";}}s:6:"aacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"aacute";s:1:"B";a:4:{i:0;s:2:"29";i:1;s:3:"-14";i:2;s:3:"527";i:3;s:3:"750";}}s:11:"Ucircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:11:"Ucircumflex";s:1:"B";a:4:{i:0;s:2:"72";i:1;s:3:"-19";i:2;s:3:"651";i:3;s:3:"936";}}s:6:"yacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"yacute";s:1:"B";a:4:{i:0;s:2:"10";i:1;s:4:"-214";i:2;s:3:"539";i:3;s:3:"750";}}s:12:"scommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:12:"scommaaccent";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:4:"-228";i:2;s:3:"519";i:3;s:3:"546";}}s:11:"ecircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:11:"ecircumflex";s:1:"B";a:4:{i:0;s:2:"23";i:1;s:3:"-14";i:2;s:3:"528";i:3;s:3:"750";}}s:5:"Uring";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:5:"Uring";s:1:"B";a:4:{i:0;s:2:"72";i:1;s:3:"-19";i:2;s:3:"651";i:3;s:3:"962";}}s:9:"Udieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:9:"Udieresis";s:1:"B";a:4:{i:0;s:2:"72";i:1;s:3:"-19";i:2;s:3:"651";i:3;s:3:"915";}}s:7:"aogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:7:"aogonek";s:1:"B";a:4:{i:0;s:2:"29";i:1;s:4:"-224";i:2;s:3:"545";i:3;s:3:"546";}}s:6:"Uacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Uacute";s:1:"B";a:4:{i:0;s:2:"72";i:1;s:3:"-19";i:2;s:3:"651";i:3;s:3:"936";}}s:7:"uogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:7:"uogonek";s:1:"B";a:4:{i:0;s:2:"66";i:1;s:4:"-228";i:2;s:3:"545";i:3;s:3:"532";}}s:9:"Edieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:9:"Edieresis";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"621";i:3;s:3:"915";}}s:6:"Dcroat";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Dcroat";s:1:"B";a:4:{i:0;s:2:"-5";i:1;s:1:"0";i:2;s:3:"685";i:3;s:3:"718";}}s:11:"commaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"250";s:1:"N";s:11:"commaaccent";s:1:"B";a:4:{i:0;s:2:"64";i:1;s:4:"-228";i:2;s:3:"199";i:3;s:3:"-50";}}s:9:"copyright";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"737";s:1:"N";s:9:"copyright";s:1:"B";a:4:{i:0;s:3:"-11";i:1;s:3:"-19";i:2;s:3:"749";i:3;s:3:"737";}}s:7:"Emacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:7:"Emacron";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"621";i:3;s:3:"864";}}s:6:"ccaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"ccaron";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-14";i:2;s:3:"524";i:3;s:3:"750";}}s:5:"aring";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:5:"aring";s:1:"B";a:4:{i:0;s:2:"29";i:1;s:3:"-14";i:2;s:3:"527";i:3;s:3:"776";}}s:12:"Ncommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:12:"Ncommaaccent";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:4:"-228";i:2;s:3:"654";i:3;s:3:"718";}}s:6:"lacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:6:"lacute";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:1:"0";i:2;s:3:"329";i:3;s:3:"936";}}s:6:"agrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"agrave";s:1:"B";a:4:{i:0;s:2:"29";i:1;s:3:"-14";i:2;s:3:"527";i:3;s:3:"750";}}s:12:"Tcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:12:"Tcommaaccent";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:4:"-228";i:2;s:3:"598";i:3;s:3:"718";}}s:6:"Cacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Cacute";s:1:"B";a:4:{i:0;s:2:"44";i:1;s:3:"-19";i:2;s:3:"684";i:3;s:3:"936";}}s:6:"atilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"atilde";s:1:"B";a:4:{i:0;s:2:"29";i:1;s:3:"-14";i:2;s:3:"527";i:3;s:3:"737";}}s:10:"Edotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:10:"Edotaccent";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"621";i:3;s:3:"915";}}s:6:"scaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"scaron";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:3:"-14";i:2;s:3:"519";i:3;s:3:"750";}}s:8:"scedilla";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:8:"scedilla";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:4:"-228";i:2;s:3:"519";i:3;s:3:"546";}}s:6:"iacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:6:"iacute";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:1:"0";i:2;s:3:"329";i:3;s:3:"750";}}s:7:"lozenge";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"494";s:1:"N";s:7:"lozenge";s:1:"B";a:4:{i:0;s:2:"10";i:1;s:1:"0";i:2;s:3:"484";i:3;s:3:"745";}}s:6:"Rcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Rcaron";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"677";i:3;s:3:"936";}}s:12:"Gcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"778";s:1:"N";s:12:"Gcommaaccent";s:1:"B";a:4:{i:0;s:2:"44";i:1;s:4:"-228";i:2;s:3:"713";i:3;s:3:"737";}}s:11:"ucircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:11:"ucircumflex";s:1:"B";a:4:{i:0;s:2:"66";i:1;s:3:"-14";i:2;s:3:"545";i:3;s:3:"750";}}s:11:"acircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:11:"acircumflex";s:1:"B";a:4:{i:0;s:2:"29";i:1;s:3:"-14";i:2;s:3:"527";i:3;s:3:"750";}}s:7:"Amacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:7:"Amacron";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:1:"0";i:2;s:3:"702";i:3;s:3:"864";}}s:6:"rcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"389";s:1:"N";s:6:"rcaron";s:1:"B";a:4:{i:0;s:2:"18";i:1;s:1:"0";i:2;s:3:"373";i:3;s:3:"750";}}s:8:"ccedilla";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:8:"ccedilla";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:4:"-228";i:2;s:3:"524";i:3;s:3:"546";}}s:10:"Zdotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:10:"Zdotaccent";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:1:"0";i:2;s:3:"586";i:3;s:3:"915";}}s:5:"Thorn";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:5:"Thorn";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"627";i:3;s:3:"718";}}s:7:"Omacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"778";s:1:"N";s:7:"Omacron";s:1:"B";a:4:{i:0;s:2:"44";i:1;s:3:"-19";i:2;s:3:"734";i:3;s:3:"864";}}s:6:"Racute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Racute";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"677";i:3;s:3:"936";}}s:6:"Sacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Sacute";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:3:"-19";i:2;s:3:"629";i:3;s:3:"936";}}s:6:"dcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"743";s:1:"N";s:6:"dcaron";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-14";i:2;s:3:"750";i:3;s:3:"718";}}s:7:"Umacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:7:"Umacron";s:1:"B";a:4:{i:0;s:2:"72";i:1;s:3:"-19";i:2;s:3:"651";i:3;s:3:"864";}}s:5:"uring";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:5:"uring";s:1:"B";a:4:{i:0;s:2:"66";i:1;s:3:"-14";i:2;s:3:"545";i:3;s:3:"776";}}s:13:"threesuperior";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"333";s:1:"N";s:13:"threesuperior";s:1:"B";a:4:{i:0;s:1:"8";i:1;s:3:"271";i:2;s:3:"326";i:3;s:3:"710";}}s:6:"Ograve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"778";s:1:"N";s:6:"Ograve";s:1:"B";a:4:{i:0;s:2:"44";i:1;s:3:"-19";i:2;s:3:"734";i:3;s:3:"936";}}s:6:"Agrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Agrave";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:1:"0";i:2;s:3:"702";i:3;s:3:"936";}}s:6:"Abreve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Abreve";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:1:"0";i:2;s:3:"702";i:3;s:3:"936";}}s:8:"multiply";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"584";s:1:"N";s:8:"multiply";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:1:"1";i:2;s:3:"545";i:3;s:3:"505";}}s:6:"uacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"uacute";s:1:"B";a:4:{i:0;s:2:"66";i:1;s:3:"-14";i:2;s:3:"545";i:3;s:3:"750";}}s:6:"Tcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"Tcaron";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:1:"0";i:2;s:3:"598";i:3;s:3:"936";}}s:11:"partialdiff";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"494";s:1:"N";s:11:"partialdiff";s:1:"B";a:4:{i:0;s:2:"11";i:1;s:3:"-21";i:2;s:3:"494";i:3;s:3:"750";}}s:9:"ydieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:9:"ydieresis";s:1:"B";a:4:{i:0;s:2:"10";i:1;s:4:"-214";i:2;s:3:"539";i:3;s:3:"729";}}s:6:"Nacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Nacute";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:1:"0";i:2;s:3:"654";i:3;s:3:"936";}}s:11:"icircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:11:"icircumflex";s:1:"B";a:4:{i:0;s:3:"-37";i:1;s:1:"0";i:2;s:3:"316";i:3;s:3:"750";}}s:11:"Ecircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:11:"Ecircumflex";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"621";i:3;s:3:"936";}}s:9:"adieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:9:"adieresis";s:1:"B";a:4:{i:0;s:2:"29";i:1;s:3:"-14";i:2;s:3:"527";i:3;s:3:"729";}}s:9:"edieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:9:"edieresis";s:1:"B";a:4:{i:0;s:2:"23";i:1;s:3:"-14";i:2;s:3:"528";i:3;s:3:"729";}}s:6:"cacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"cacute";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-14";i:2;s:3:"524";i:3;s:3:"750";}}s:6:"nacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"nacute";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:1:"0";i:2;s:3:"546";i:3;s:3:"750";}}s:7:"umacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:7:"umacron";s:1:"B";a:4:{i:0;s:2:"66";i:1;s:3:"-14";i:2;s:3:"545";i:3;s:3:"678";}}s:6:"Ncaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Ncaron";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:1:"0";i:2;s:3:"654";i:3;s:3:"936";}}s:6:"Iacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:6:"Iacute";s:1:"B";a:4:{i:0;s:2:"64";i:1;s:1:"0";i:2;s:3:"329";i:3;s:3:"936";}}s:9:"plusminus";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"584";s:1:"N";s:9:"plusminus";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:1:"0";i:2;s:3:"544";i:3;s:3:"506";}}s:9:"brokenbar";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"280";s:1:"N";s:9:"brokenbar";s:1:"B";a:4:{i:0;s:2:"84";i:1;s:4:"-150";i:2;s:3:"196";i:3;s:3:"700";}}s:10:"registered";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"737";s:1:"N";s:10:"registered";s:1:"B";a:4:{i:0;s:3:"-11";i:1;s:3:"-19";i:2;s:3:"748";i:3;s:3:"737";}}s:6:"Gbreve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"778";s:1:"N";s:6:"Gbreve";s:1:"B";a:4:{i:0;s:2:"44";i:1;s:3:"-19";i:2;s:3:"713";i:3;s:3:"936";}}s:10:"Idotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:10:"Idotaccent";s:1:"B";a:4:{i:0;s:2:"64";i:1;s:1:"0";i:2;s:3:"214";i:3;s:3:"915";}}s:9:"summation";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"summation";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:3:"-10";i:2;s:3:"585";i:3;s:3:"706";}}s:6:"Egrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Egrave";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"621";i:3;s:3:"936";}}s:6:"racute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"389";s:1:"N";s:6:"racute";s:1:"B";a:4:{i:0;s:2:"64";i:1;s:1:"0";i:2;s:3:"384";i:3;s:3:"750";}}s:7:"omacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:7:"omacron";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-14";i:2;s:3:"578";i:3;s:3:"678";}}s:6:"Zacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"Zacute";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:1:"0";i:2;s:3:"586";i:3;s:3:"936";}}s:6:"Zcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"Zcaron";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:1:"0";i:2;s:3:"586";i:3;s:3:"936";}}s:12:"greaterequal";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"549";s:1:"N";s:12:"greaterequal";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:1:"0";i:2;s:3:"523";i:3;s:3:"704";}}s:3:"Eth";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:3:"Eth";s:1:"B";a:4:{i:0;s:2:"-5";i:1;s:1:"0";i:2;s:3:"685";i:3;s:3:"718";}}s:8:"Ccedilla";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:8:"Ccedilla";s:1:"B";a:4:{i:0;s:2:"44";i:1;s:4:"-228";i:2;s:3:"684";i:3;s:3:"737";}}s:12:"lcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:12:"lcommaaccent";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:4:"-228";i:2;s:3:"213";i:3;s:3:"718";}}s:6:"tcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"389";s:1:"N";s:6:"tcaron";s:1:"B";a:4:{i:0;s:2:"10";i:1;s:2:"-6";i:2;s:3:"421";i:3;s:3:"878";}}s:7:"eogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:7:"eogonek";s:1:"B";a:4:{i:0;s:2:"23";i:1;s:4:"-228";i:2;s:3:"528";i:3;s:3:"546";}}s:7:"Uogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:7:"Uogonek";s:1:"B";a:4:{i:0;s:2:"72";i:1;s:4:"-228";i:2;s:3:"651";i:3;s:3:"718";}}s:6:"Aacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Aacute";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:1:"0";i:2;s:3:"702";i:3;s:3:"936";}}s:9:"Adieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:9:"Adieresis";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:1:"0";i:2;s:3:"702";i:3;s:3:"915";}}s:6:"egrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"egrave";s:1:"B";a:4:{i:0;s:2:"23";i:1;s:3:"-14";i:2;s:3:"528";i:3;s:3:"750";}}s:6:"zacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"zacute";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:1:"0";i:2;s:3:"480";i:3;s:3:"750";}}s:7:"iogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:7:"iogonek";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:4:"-224";i:2;s:3:"249";i:3;s:3:"725";}}s:6:"Oacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"778";s:1:"N";s:6:"Oacute";s:1:"B";a:4:{i:0;s:2:"44";i:1;s:3:"-19";i:2;s:3:"734";i:3;s:3:"936";}}s:6:"oacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"oacute";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-14";i:2;s:3:"578";i:3;s:3:"750";}}s:7:"amacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:7:"amacron";s:1:"B";a:4:{i:0;s:2:"29";i:1;s:3:"-14";i:2;s:3:"527";i:3;s:3:"678";}}s:6:"sacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"sacute";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:3:"-14";i:2;s:3:"519";i:3;s:3:"750";}}s:9:"idieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:9:"idieresis";s:1:"B";a:4:{i:0;s:3:"-21";i:1;s:1:"0";i:2;s:3:"300";i:3;s:3:"729";}}s:11:"Ocircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"778";s:1:"N";s:11:"Ocircumflex";s:1:"B";a:4:{i:0;s:2:"44";i:1;s:3:"-19";i:2;s:3:"734";i:3;s:3:"936";}}s:6:"Ugrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Ugrave";s:1:"B";a:4:{i:0;s:2:"72";i:1;s:3:"-19";i:2;s:3:"651";i:3;s:3:"936";}}s:5:"Delta";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"612";s:1:"N";s:5:"Delta";s:1:"B";a:4:{i:0;s:1:"6";i:1;s:1:"0";i:2;s:3:"608";i:3;s:3:"688";}}s:5:"thorn";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:5:"thorn";s:1:"B";a:4:{i:0;s:2:"62";i:1;s:4:"-208";i:2;s:3:"578";i:3;s:3:"718";}}s:11:"twosuperior";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"333";s:1:"N";s:11:"twosuperior";s:1:"B";a:4:{i:0;s:1:"9";i:1;s:3:"283";i:2;s:3:"324";i:3;s:3:"710";}}s:9:"Odieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"778";s:1:"N";s:9:"Odieresis";s:1:"B";a:4:{i:0;s:2:"44";i:1;s:3:"-19";i:2;s:3:"734";i:3;s:3:"915";}}s:2:"mu";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:2:"mu";s:1:"B";a:4:{i:0;s:2:"66";i:1;s:4:"-207";i:2;s:3:"545";i:3;s:3:"532";}}s:6:"igrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:6:"igrave";s:1:"B";a:4:{i:0;s:3:"-50";i:1;s:1:"0";i:2;s:3:"209";i:3;s:3:"750";}}s:13:"ohungarumlaut";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:13:"ohungarumlaut";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-14";i:2;s:3:"625";i:3;s:3:"750";}}s:7:"Eogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:7:"Eogonek";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:4:"-224";i:2;s:3:"639";i:3;s:3:"718";}}s:6:"dcroat";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"dcroat";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-14";i:2;s:3:"650";i:3;s:3:"718";}}s:13:"threequarters";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"834";s:1:"N";s:13:"threequarters";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:3:"-19";i:2;s:3:"799";i:3;s:3:"710";}}s:8:"Scedilla";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:8:"Scedilla";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:4:"-228";i:2;s:3:"629";i:3;s:3:"737";}}s:6:"lcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"400";s:1:"N";s:6:"lcaron";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:1:"0";i:2;s:3:"408";i:3;s:3:"718";}}s:12:"Kcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:12:"Kcommaaccent";s:1:"B";a:4:{i:0;s:2:"87";i:1;s:4:"-228";i:2;s:3:"722";i:3;s:3:"718";}}s:6:"Lacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"Lacute";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"583";i:3;s:3:"936";}}s:9:"trademark";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:4:"1000";s:1:"N";s:9:"trademark";s:1:"B";a:4:{i:0;s:2:"44";i:1;s:3:"306";i:2;s:3:"956";i:3;s:3:"718";}}s:10:"edotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:10:"edotaccent";s:1:"B";a:4:{i:0;s:2:"23";i:1;s:3:"-14";i:2;s:3:"528";i:3;s:3:"729";}}s:6:"Igrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:6:"Igrave";s:1:"B";a:4:{i:0;s:3:"-50";i:1;s:1:"0";i:2;s:3:"214";i:3;s:3:"936";}}s:7:"Imacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:7:"Imacron";s:1:"B";a:4:{i:0;s:3:"-33";i:1;s:1:"0";i:2;s:3:"312";i:3;s:3:"864";}}s:6:"Lcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"Lcaron";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"583";i:3;s:3:"718";}}s:7:"onehalf";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"834";s:1:"N";s:7:"onehalf";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:3:"-19";i:2;s:3:"794";i:3;s:3:"710";}}s:9:"lessequal";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"549";s:1:"N";s:9:"lessequal";s:1:"B";a:4:{i:0;s:2:"29";i:1;s:1:"0";i:2;s:3:"526";i:3;s:3:"704";}}s:11:"ocircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:11:"ocircumflex";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-14";i:2;s:3:"578";i:3;s:3:"750";}}s:6:"ntilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"ntilde";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:1:"0";i:2;s:3:"546";i:3;s:3:"737";}}s:13:"Uhungarumlaut";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:13:"Uhungarumlaut";s:1:"B";a:4:{i:0;s:2:"72";i:1;s:3:"-19";i:2;s:3:"681";i:3;s:3:"936";}}s:6:"Eacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Eacute";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"621";i:3;s:3:"936";}}s:7:"emacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:7:"emacron";s:1:"B";a:4:{i:0;s:2:"23";i:1;s:3:"-14";i:2;s:3:"528";i:3;s:3:"678";}}s:6:"gbreve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"gbreve";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:4:"-217";i:2;s:3:"553";i:3;s:3:"750";}}s:10:"onequarter";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"834";s:1:"N";s:10:"onequarter";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:3:"-19";i:2;s:3:"766";i:3;s:3:"710";}}s:6:"Scaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Scaron";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:3:"-19";i:2;s:3:"629";i:3;s:3:"936";}}s:12:"Scommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:12:"Scommaaccent";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:4:"-228";i:2;s:3:"629";i:3;s:3:"737";}}s:13:"Ohungarumlaut";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"778";s:1:"N";s:13:"Ohungarumlaut";s:1:"B";a:4:{i:0;s:2:"44";i:1;s:3:"-19";i:2;s:3:"734";i:3;s:3:"936";}}s:6:"degree";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"400";s:1:"N";s:6:"degree";s:1:"B";a:4:{i:0;s:2:"57";i:1;s:3:"426";i:2;s:3:"343";i:3;s:3:"712";}}s:6:"ograve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"ograve";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-14";i:2;s:3:"578";i:3;s:3:"750";}}s:6:"Ccaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Ccaron";s:1:"B";a:4:{i:0;s:2:"44";i:1;s:3:"-19";i:2;s:3:"684";i:3;s:3:"936";}}s:6:"ugrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"ugrave";s:1:"B";a:4:{i:0;s:2:"66";i:1;s:3:"-14";i:2;s:3:"545";i:3;s:3:"750";}}s:7:"radical";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"549";s:1:"N";s:7:"radical";s:1:"B";a:4:{i:0;s:2:"10";i:1;s:3:"-46";i:2;s:3:"512";i:3;s:3:"850";}}s:6:"Dcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Dcaron";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"685";i:3;s:3:"936";}}s:12:"rcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"389";s:1:"N";s:12:"rcommaaccent";s:1:"B";a:4:{i:0;s:2:"64";i:1;s:4:"-228";i:2;s:3:"373";i:3;s:3:"546";}}s:6:"Ntilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Ntilde";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:1:"0";i:2;s:3:"654";i:3;s:3:"923";}}s:6:"otilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"otilde";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-14";i:2;s:3:"578";i:3;s:3:"737";}}s:12:"Rcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:12:"Rcommaaccent";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:4:"-228";i:2;s:3:"677";i:3;s:3:"718";}}s:12:"Lcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:12:"Lcommaaccent";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:4:"-228";i:2;s:3:"583";i:3;s:3:"718";}}s:6:"Atilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Atilde";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:1:"0";i:2;s:3:"702";i:3;s:3:"923";}}s:7:"Aogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:7:"Aogonek";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:4:"-224";i:2;s:3:"742";i:3;s:3:"718";}}s:5:"Aring";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:5:"Aring";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:1:"0";i:2;s:3:"702";i:3;s:3:"962";}}s:6:"Otilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"778";s:1:"N";s:6:"Otilde";s:1:"B";a:4:{i:0;s:2:"44";i:1;s:3:"-19";i:2;s:3:"734";i:3;s:3:"923";}}s:10:"zdotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:10:"zdotaccent";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:1:"0";i:2;s:3:"480";i:3;s:3:"729";}}s:6:"Ecaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Ecaron";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"621";i:3;s:3:"936";}}s:7:"Iogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:7:"Iogonek";s:1:"B";a:4:{i:0;s:3:"-11";i:1;s:4:"-228";i:2;s:3:"222";i:3;s:3:"718";}}s:12:"kcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:12:"kcommaaccent";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:4:"-228";i:2;s:3:"562";i:3;s:3:"718";}}s:5:"minus";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"584";s:1:"N";s:5:"minus";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:3:"197";i:2;s:3:"544";i:3;s:3:"309";}}s:11:"Icircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:11:"Icircumflex";s:1:"B";a:4:{i:0;s:3:"-37";i:1;s:1:"0";i:2;s:3:"316";i:3;s:3:"936";}}s:6:"ncaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"ncaron";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:1:"0";i:2;s:3:"546";i:3;s:3:"750";}}s:12:"tcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"333";s:1:"N";s:12:"tcommaaccent";s:1:"B";a:4:{i:0;s:2:"10";i:1;s:4:"-228";i:2;s:3:"309";i:3;s:3:"676";}}s:10:"logicalnot";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"584";s:1:"N";s:10:"logicalnot";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:3:"108";i:2;s:3:"544";i:3;s:3:"419";}}s:9:"odieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:9:"odieresis";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-14";i:2;s:3:"578";i:3;s:3:"729";}}s:9:"udieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:9:"udieresis";s:1:"B";a:4:{i:0;s:2:"66";i:1;s:3:"-14";i:2;s:3:"545";i:3;s:3:"729";}}s:8:"notequal";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"549";s:1:"N";s:8:"notequal";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:3:"-49";i:2;s:3:"540";i:3;s:3:"570";}}s:12:"gcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:12:"gcommaaccent";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:4:"-217";i:2;s:3:"553";i:3;s:3:"850";}}s:3:"eth";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:3:"eth";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-14";i:2;s:3:"578";i:3;s:3:"737";}}s:6:"zcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"zcaron";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:1:"0";i:2;s:3:"480";i:3;s:3:"750";}}s:12:"ncommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:12:"ncommaaccent";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:4:"-228";i:2;s:3:"546";i:3;s:3:"546";}}s:11:"onesuperior";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"333";s:1:"N";s:11:"onesuperior";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:3:"283";i:2;s:3:"237";i:3;s:3:"710";}}s:7:"imacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:7:"imacron";s:1:"B";a:4:{i:0;s:2:"-8";i:1;s:1:"0";i:2;s:3:"285";i:3;s:3:"678";}}s:4:"Euro";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:4:"Euro";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:1:"0";i:2;s:1:"0";i:3;s:1:"0";}}}s:3:"KPX";a:134:{s:1:"A";a:48:{s:1:"C";s:3:"-40";s:6:"Cacute";s:3:"-40";s:6:"Ccaron";s:3:"-40";s:8:"Ccedilla";s:3:"-40";s:1:"G";s:3:"-50";s:6:"Gbreve";s:3:"-50";s:12:"Gcommaaccent";s:3:"-50";s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"Q";s:3:"-40";s:1:"T";s:3:"-90";s:6:"Tcaron";s:3:"-90";s:12:"Tcommaaccent";s:3:"-90";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:3:"-80";s:1:"W";s:3:"-60";s:1:"Y";s:4:"-110";s:6:"Yacute";s:4:"-110";s:9:"Ydieresis";s:4:"-110";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"v";s:3:"-40";s:1:"w";s:3:"-30";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:6:"Aacute";a:48:{s:1:"C";s:3:"-40";s:6:"Cacute";s:3:"-40";s:6:"Ccaron";s:3:"-40";s:8:"Ccedilla";s:3:"-40";s:1:"G";s:3:"-50";s:6:"Gbreve";s:3:"-50";s:12:"Gcommaaccent";s:3:"-50";s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"Q";s:3:"-40";s:1:"T";s:3:"-90";s:6:"Tcaron";s:3:"-90";s:12:"Tcommaaccent";s:3:"-90";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:3:"-80";s:1:"W";s:3:"-60";s:1:"Y";s:4:"-110";s:6:"Yacute";s:4:"-110";s:9:"Ydieresis";s:4:"-110";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"v";s:3:"-40";s:1:"w";s:3:"-30";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:6:"Abreve";a:48:{s:1:"C";s:3:"-40";s:6:"Cacute";s:3:"-40";s:6:"Ccaron";s:3:"-40";s:8:"Ccedilla";s:3:"-40";s:1:"G";s:3:"-50";s:6:"Gbreve";s:3:"-50";s:12:"Gcommaaccent";s:3:"-50";s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"Q";s:3:"-40";s:1:"T";s:3:"-90";s:6:"Tcaron";s:3:"-90";s:12:"Tcommaaccent";s:3:"-90";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:3:"-80";s:1:"W";s:3:"-60";s:1:"Y";s:4:"-110";s:6:"Yacute";s:4:"-110";s:9:"Ydieresis";s:4:"-110";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"v";s:3:"-40";s:1:"w";s:3:"-30";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:11:"Acircumflex";a:48:{s:1:"C";s:3:"-40";s:6:"Cacute";s:3:"-40";s:6:"Ccaron";s:3:"-40";s:8:"Ccedilla";s:3:"-40";s:1:"G";s:3:"-50";s:6:"Gbreve";s:3:"-50";s:12:"Gcommaaccent";s:3:"-50";s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"Q";s:3:"-40";s:1:"T";s:3:"-90";s:6:"Tcaron";s:3:"-90";s:12:"Tcommaaccent";s:3:"-90";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:3:"-80";s:1:"W";s:3:"-60";s:1:"Y";s:4:"-110";s:6:"Yacute";s:4:"-110";s:9:"Ydieresis";s:4:"-110";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"v";s:3:"-40";s:1:"w";s:3:"-30";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:9:"Adieresis";a:48:{s:1:"C";s:3:"-40";s:6:"Cacute";s:3:"-40";s:6:"Ccaron";s:3:"-40";s:8:"Ccedilla";s:3:"-40";s:1:"G";s:3:"-50";s:6:"Gbreve";s:3:"-50";s:12:"Gcommaaccent";s:3:"-50";s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"Q";s:3:"-40";s:1:"T";s:3:"-90";s:6:"Tcaron";s:3:"-90";s:12:"Tcommaaccent";s:3:"-90";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:3:"-80";s:1:"W";s:3:"-60";s:1:"Y";s:4:"-110";s:6:"Yacute";s:4:"-110";s:9:"Ydieresis";s:4:"-110";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"v";s:3:"-40";s:1:"w";s:3:"-30";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:6:"Agrave";a:48:{s:1:"C";s:3:"-40";s:6:"Cacute";s:3:"-40";s:6:"Ccaron";s:3:"-40";s:8:"Ccedilla";s:3:"-40";s:1:"G";s:3:"-50";s:6:"Gbreve";s:3:"-50";s:12:"Gcommaaccent";s:3:"-50";s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"Q";s:3:"-40";s:1:"T";s:3:"-90";s:6:"Tcaron";s:3:"-90";s:12:"Tcommaaccent";s:3:"-90";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:3:"-80";s:1:"W";s:3:"-60";s:1:"Y";s:4:"-110";s:6:"Yacute";s:4:"-110";s:9:"Ydieresis";s:4:"-110";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"v";s:3:"-40";s:1:"w";s:3:"-30";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:7:"Amacron";a:48:{s:1:"C";s:3:"-40";s:6:"Cacute";s:3:"-40";s:6:"Ccaron";s:3:"-40";s:8:"Ccedilla";s:3:"-40";s:1:"G";s:3:"-50";s:6:"Gbreve";s:3:"-50";s:12:"Gcommaaccent";s:3:"-50";s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"Q";s:3:"-40";s:1:"T";s:3:"-90";s:6:"Tcaron";s:3:"-90";s:12:"Tcommaaccent";s:3:"-90";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:3:"-80";s:1:"W";s:3:"-60";s:1:"Y";s:4:"-110";s:6:"Yacute";s:4:"-110";s:9:"Ydieresis";s:4:"-110";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"v";s:3:"-40";s:1:"w";s:3:"-30";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:7:"Aogonek";a:48:{s:1:"C";s:3:"-40";s:6:"Cacute";s:3:"-40";s:6:"Ccaron";s:3:"-40";s:8:"Ccedilla";s:3:"-40";s:1:"G";s:3:"-50";s:6:"Gbreve";s:3:"-50";s:12:"Gcommaaccent";s:3:"-50";s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"Q";s:3:"-40";s:1:"T";s:3:"-90";s:6:"Tcaron";s:3:"-90";s:12:"Tcommaaccent";s:3:"-90";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:3:"-80";s:1:"W";s:3:"-60";s:1:"Y";s:4:"-110";s:6:"Yacute";s:4:"-110";s:9:"Ydieresis";s:4:"-110";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"v";s:3:"-40";s:1:"w";s:3:"-30";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:5:"Aring";a:48:{s:1:"C";s:3:"-40";s:6:"Cacute";s:3:"-40";s:6:"Ccaron";s:3:"-40";s:8:"Ccedilla";s:3:"-40";s:1:"G";s:3:"-50";s:6:"Gbreve";s:3:"-50";s:12:"Gcommaaccent";s:3:"-50";s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"Q";s:3:"-40";s:1:"T";s:3:"-90";s:6:"Tcaron";s:3:"-90";s:12:"Tcommaaccent";s:3:"-90";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:3:"-80";s:1:"W";s:3:"-60";s:1:"Y";s:4:"-110";s:6:"Yacute";s:4:"-110";s:9:"Ydieresis";s:4:"-110";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"v";s:3:"-40";s:1:"w";s:3:"-30";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:6:"Atilde";a:48:{s:1:"C";s:3:"-40";s:6:"Cacute";s:3:"-40";s:6:"Ccaron";s:3:"-40";s:8:"Ccedilla";s:3:"-40";s:1:"G";s:3:"-50";s:6:"Gbreve";s:3:"-50";s:12:"Gcommaaccent";s:3:"-50";s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"Q";s:3:"-40";s:1:"T";s:3:"-90";s:6:"Tcaron";s:3:"-90";s:12:"Tcommaaccent";s:3:"-90";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:3:"-80";s:1:"W";s:3:"-60";s:1:"Y";s:4:"-110";s:6:"Yacute";s:4:"-110";s:9:"Ydieresis";s:4:"-110";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"v";s:3:"-40";s:1:"w";s:3:"-30";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:1:"B";a:19:{s:1:"A";s:3:"-30";s:6:"Aacute";s:3:"-30";s:6:"Abreve";s:3:"-30";s:11:"Acircumflex";s:3:"-30";s:9:"Adieresis";s:3:"-30";s:6:"Agrave";s:3:"-30";s:7:"Amacron";s:3:"-30";s:7:"Aogonek";s:3:"-30";s:5:"Aring";s:3:"-30";s:6:"Atilde";s:3:"-30";s:1:"U";s:3:"-10";s:6:"Uacute";s:3:"-10";s:11:"Ucircumflex";s:3:"-10";s:9:"Udieresis";s:3:"-10";s:6:"Ugrave";s:3:"-10";s:13:"Uhungarumlaut";s:3:"-10";s:7:"Umacron";s:3:"-10";s:7:"Uogonek";s:3:"-10";s:5:"Uring";s:3:"-10";}s:1:"D";a:17:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:1:"V";s:3:"-40";s:1:"W";s:3:"-40";s:1:"Y";s:3:"-70";s:6:"Yacute";s:3:"-70";s:9:"Ydieresis";s:3:"-70";s:5:"comma";s:3:"-30";s:6:"period";s:3:"-30";}s:6:"Dcaron";a:17:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:1:"V";s:3:"-40";s:1:"W";s:3:"-40";s:1:"Y";s:3:"-70";s:6:"Yacute";s:3:"-70";s:9:"Ydieresis";s:3:"-70";s:5:"comma";s:3:"-30";s:6:"period";s:3:"-30";}s:6:"Dcroat";a:17:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:1:"V";s:3:"-40";s:1:"W";s:3:"-40";s:1:"Y";s:3:"-70";s:6:"Yacute";s:3:"-70";s:9:"Ydieresis";s:3:"-70";s:5:"comma";s:3:"-30";s:6:"period";s:3:"-30";}s:1:"F";a:22:{s:1:"A";s:3:"-80";s:6:"Aacute";s:3:"-80";s:6:"Abreve";s:3:"-80";s:11:"Acircumflex";s:3:"-80";s:9:"Adieresis";s:3:"-80";s:6:"Agrave";s:3:"-80";s:7:"Amacron";s:3:"-80";s:7:"Aogonek";s:3:"-80";s:5:"Aring";s:3:"-80";s:6:"Atilde";s:3:"-80";s:1:"a";s:3:"-20";s:6:"aacute";s:3:"-20";s:6:"abreve";s:3:"-20";s:11:"acircumflex";s:3:"-20";s:9:"adieresis";s:3:"-20";s:6:"agrave";s:3:"-20";s:7:"amacron";s:3:"-20";s:7:"aogonek";s:3:"-20";s:5:"aring";s:3:"-20";s:6:"atilde";s:3:"-20";s:5:"comma";s:4:"-100";s:6:"period";s:4:"-100";}s:1:"J";a:21:{s:1:"A";s:3:"-20";s:6:"Aacute";s:3:"-20";s:6:"Abreve";s:3:"-20";s:11:"Acircumflex";s:3:"-20";s:9:"Adieresis";s:3:"-20";s:6:"Agrave";s:3:"-20";s:7:"Amacron";s:3:"-20";s:7:"Aogonek";s:3:"-20";s:5:"Aring";s:3:"-20";s:6:"Atilde";s:3:"-20";s:5:"comma";s:3:"-20";s:6:"period";s:3:"-20";s:1:"u";s:3:"-20";s:6:"uacute";s:3:"-20";s:11:"ucircumflex";s:3:"-20";s:9:"udieresis";s:3:"-20";s:6:"ugrave";s:3:"-20";s:13:"uhungarumlaut";s:3:"-20";s:7:"umacron";s:3:"-20";s:7:"uogonek";s:3:"-20";s:5:"uring";s:3:"-20";}s:1:"K";a:39:{s:1:"O";s:3:"-30";s:6:"Oacute";s:3:"-30";s:11:"Ocircumflex";s:3:"-30";s:9:"Odieresis";s:3:"-30";s:6:"Ograve";s:3:"-30";s:13:"Ohungarumlaut";s:3:"-30";s:7:"Omacron";s:3:"-30";s:6:"Oslash";s:3:"-30";s:6:"Otilde";s:3:"-30";s:1:"e";s:3:"-15";s:6:"eacute";s:3:"-15";s:6:"ecaron";s:3:"-15";s:11:"ecircumflex";s:3:"-15";s:9:"edieresis";s:3:"-15";s:10:"edotaccent";s:3:"-15";s:6:"egrave";s:3:"-15";s:7:"emacron";s:3:"-15";s:7:"eogonek";s:3:"-15";s:1:"o";s:3:"-35";s:6:"oacute";s:3:"-35";s:11:"ocircumflex";s:3:"-35";s:9:"odieresis";s:3:"-35";s:6:"ograve";s:3:"-35";s:13:"ohungarumlaut";s:3:"-35";s:7:"omacron";s:3:"-35";s:6:"oslash";s:3:"-35";s:6:"otilde";s:3:"-35";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"y";s:3:"-40";s:6:"yacute";s:3:"-40";s:9:"ydieresis";s:3:"-40";}s:12:"Kcommaaccent";a:39:{s:1:"O";s:3:"-30";s:6:"Oacute";s:3:"-30";s:11:"Ocircumflex";s:3:"-30";s:9:"Odieresis";s:3:"-30";s:6:"Ograve";s:3:"-30";s:13:"Ohungarumlaut";s:3:"-30";s:7:"Omacron";s:3:"-30";s:6:"Oslash";s:3:"-30";s:6:"Otilde";s:3:"-30";s:1:"e";s:3:"-15";s:6:"eacute";s:3:"-15";s:6:"ecaron";s:3:"-15";s:11:"ecircumflex";s:3:"-15";s:9:"edieresis";s:3:"-15";s:10:"edotaccent";s:3:"-15";s:6:"egrave";s:3:"-15";s:7:"emacron";s:3:"-15";s:7:"eogonek";s:3:"-15";s:1:"o";s:3:"-35";s:6:"oacute";s:3:"-35";s:11:"ocircumflex";s:3:"-35";s:9:"odieresis";s:3:"-35";s:6:"ograve";s:3:"-35";s:13:"ohungarumlaut";s:3:"-35";s:7:"omacron";s:3:"-35";s:6:"oslash";s:3:"-35";s:6:"otilde";s:3:"-35";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"y";s:3:"-40";s:6:"yacute";s:3:"-40";s:9:"ydieresis";s:3:"-40";}s:1:"L";a:13:{s:1:"T";s:3:"-90";s:6:"Tcaron";s:3:"-90";s:12:"Tcommaaccent";s:3:"-90";s:1:"V";s:4:"-110";s:1:"W";s:3:"-80";s:1:"Y";s:4:"-120";s:6:"Yacute";s:4:"-120";s:9:"Ydieresis";s:4:"-120";s:13:"quotedblright";s:4:"-140";s:10:"quoteright";s:4:"-140";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:6:"Lacute";a:13:{s:1:"T";s:3:"-90";s:6:"Tcaron";s:3:"-90";s:12:"Tcommaaccent";s:3:"-90";s:1:"V";s:4:"-110";s:1:"W";s:3:"-80";s:1:"Y";s:4:"-120";s:6:"Yacute";s:4:"-120";s:9:"Ydieresis";s:4:"-120";s:13:"quotedblright";s:4:"-140";s:10:"quoteright";s:4:"-140";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:12:"Lcommaaccent";a:13:{s:1:"T";s:3:"-90";s:6:"Tcaron";s:3:"-90";s:12:"Tcommaaccent";s:3:"-90";s:1:"V";s:4:"-110";s:1:"W";s:3:"-80";s:1:"Y";s:4:"-120";s:6:"Yacute";s:4:"-120";s:9:"Ydieresis";s:4:"-120";s:13:"quotedblright";s:4:"-140";s:10:"quoteright";s:4:"-140";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:6:"Lslash";a:13:{s:1:"T";s:3:"-90";s:6:"Tcaron";s:3:"-90";s:12:"Tcommaaccent";s:3:"-90";s:1:"V";s:4:"-110";s:1:"W";s:3:"-80";s:1:"Y";s:4:"-120";s:6:"Yacute";s:4:"-120";s:9:"Ydieresis";s:4:"-120";s:13:"quotedblright";s:4:"-140";s:10:"quoteright";s:4:"-140";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:1:"O";a:21:{s:1:"A";s:3:"-50";s:6:"Aacute";s:3:"-50";s:6:"Abreve";s:3:"-50";s:11:"Acircumflex";s:3:"-50";s:9:"Adieresis";s:3:"-50";s:6:"Agrave";s:3:"-50";s:7:"Amacron";s:3:"-50";s:7:"Aogonek";s:3:"-50";s:5:"Aring";s:3:"-50";s:6:"Atilde";s:3:"-50";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-50";s:1:"X";s:3:"-50";s:1:"Y";s:3:"-70";s:6:"Yacute";s:3:"-70";s:9:"Ydieresis";s:3:"-70";s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";}s:6:"Oacute";a:21:{s:1:"A";s:3:"-50";s:6:"Aacute";s:3:"-50";s:6:"Abreve";s:3:"-50";s:11:"Acircumflex";s:3:"-50";s:9:"Adieresis";s:3:"-50";s:6:"Agrave";s:3:"-50";s:7:"Amacron";s:3:"-50";s:7:"Aogonek";s:3:"-50";s:5:"Aring";s:3:"-50";s:6:"Atilde";s:3:"-50";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-50";s:1:"X";s:3:"-50";s:1:"Y";s:3:"-70";s:6:"Yacute";s:3:"-70";s:9:"Ydieresis";s:3:"-70";s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";}s:11:"Ocircumflex";a:21:{s:1:"A";s:3:"-50";s:6:"Aacute";s:3:"-50";s:6:"Abreve";s:3:"-50";s:11:"Acircumflex";s:3:"-50";s:9:"Adieresis";s:3:"-50";s:6:"Agrave";s:3:"-50";s:7:"Amacron";s:3:"-50";s:7:"Aogonek";s:3:"-50";s:5:"Aring";s:3:"-50";s:6:"Atilde";s:3:"-50";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-50";s:1:"X";s:3:"-50";s:1:"Y";s:3:"-70";s:6:"Yacute";s:3:"-70";s:9:"Ydieresis";s:3:"-70";s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";}s:9:"Odieresis";a:21:{s:1:"A";s:3:"-50";s:6:"Aacute";s:3:"-50";s:6:"Abreve";s:3:"-50";s:11:"Acircumflex";s:3:"-50";s:9:"Adieresis";s:3:"-50";s:6:"Agrave";s:3:"-50";s:7:"Amacron";s:3:"-50";s:7:"Aogonek";s:3:"-50";s:5:"Aring";s:3:"-50";s:6:"Atilde";s:3:"-50";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-50";s:1:"X";s:3:"-50";s:1:"Y";s:3:"-70";s:6:"Yacute";s:3:"-70";s:9:"Ydieresis";s:3:"-70";s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";}s:6:"Ograve";a:21:{s:1:"A";s:3:"-50";s:6:"Aacute";s:3:"-50";s:6:"Abreve";s:3:"-50";s:11:"Acircumflex";s:3:"-50";s:9:"Adieresis";s:3:"-50";s:6:"Agrave";s:3:"-50";s:7:"Amacron";s:3:"-50";s:7:"Aogonek";s:3:"-50";s:5:"Aring";s:3:"-50";s:6:"Atilde";s:3:"-50";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-50";s:1:"X";s:3:"-50";s:1:"Y";s:3:"-70";s:6:"Yacute";s:3:"-70";s:9:"Ydieresis";s:3:"-70";s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";}s:13:"Ohungarumlaut";a:21:{s:1:"A";s:3:"-50";s:6:"Aacute";s:3:"-50";s:6:"Abreve";s:3:"-50";s:11:"Acircumflex";s:3:"-50";s:9:"Adieresis";s:3:"-50";s:6:"Agrave";s:3:"-50";s:7:"Amacron";s:3:"-50";s:7:"Aogonek";s:3:"-50";s:5:"Aring";s:3:"-50";s:6:"Atilde";s:3:"-50";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-50";s:1:"X";s:3:"-50";s:1:"Y";s:3:"-70";s:6:"Yacute";s:3:"-70";s:9:"Ydieresis";s:3:"-70";s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";}s:7:"Omacron";a:21:{s:1:"A";s:3:"-50";s:6:"Aacute";s:3:"-50";s:6:"Abreve";s:3:"-50";s:11:"Acircumflex";s:3:"-50";s:9:"Adieresis";s:3:"-50";s:6:"Agrave";s:3:"-50";s:7:"Amacron";s:3:"-50";s:7:"Aogonek";s:3:"-50";s:5:"Aring";s:3:"-50";s:6:"Atilde";s:3:"-50";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-50";s:1:"X";s:3:"-50";s:1:"Y";s:3:"-70";s:6:"Yacute";s:3:"-70";s:9:"Ydieresis";s:3:"-70";s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";}s:6:"Oslash";a:21:{s:1:"A";s:3:"-50";s:6:"Aacute";s:3:"-50";s:6:"Abreve";s:3:"-50";s:11:"Acircumflex";s:3:"-50";s:9:"Adieresis";s:3:"-50";s:6:"Agrave";s:3:"-50";s:7:"Amacron";s:3:"-50";s:7:"Aogonek";s:3:"-50";s:5:"Aring";s:3:"-50";s:6:"Atilde";s:3:"-50";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-50";s:1:"X";s:3:"-50";s:1:"Y";s:3:"-70";s:6:"Yacute";s:3:"-70";s:9:"Ydieresis";s:3:"-70";s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";}s:6:"Otilde";a:21:{s:1:"A";s:3:"-50";s:6:"Aacute";s:3:"-50";s:6:"Abreve";s:3:"-50";s:11:"Acircumflex";s:3:"-50";s:9:"Adieresis";s:3:"-50";s:6:"Agrave";s:3:"-50";s:7:"Amacron";s:3:"-50";s:7:"Aogonek";s:3:"-50";s:5:"Aring";s:3:"-50";s:6:"Atilde";s:3:"-50";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-50";s:1:"X";s:3:"-50";s:1:"Y";s:3:"-70";s:6:"Yacute";s:3:"-70";s:9:"Ydieresis";s:3:"-70";s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";}s:1:"P";a:40:{s:1:"A";s:4:"-100";s:6:"Aacute";s:4:"-100";s:6:"Abreve";s:4:"-100";s:11:"Acircumflex";s:4:"-100";s:9:"Adieresis";s:4:"-100";s:6:"Agrave";s:4:"-100";s:7:"Amacron";s:4:"-100";s:7:"Aogonek";s:4:"-100";s:5:"Aring";s:4:"-100";s:6:"Atilde";s:4:"-100";s:1:"a";s:3:"-30";s:6:"aacute";s:3:"-30";s:6:"abreve";s:3:"-30";s:11:"acircumflex";s:3:"-30";s:9:"adieresis";s:3:"-30";s:6:"agrave";s:3:"-30";s:7:"amacron";s:3:"-30";s:7:"aogonek";s:3:"-30";s:5:"aring";s:3:"-30";s:6:"atilde";s:3:"-30";s:5:"comma";s:4:"-120";s:1:"e";s:3:"-30";s:6:"eacute";s:3:"-30";s:6:"ecaron";s:3:"-30";s:11:"ecircumflex";s:3:"-30";s:9:"edieresis";s:3:"-30";s:10:"edotaccent";s:3:"-30";s:6:"egrave";s:3:"-30";s:7:"emacron";s:3:"-30";s:7:"eogonek";s:3:"-30";s:1:"o";s:3:"-40";s:6:"oacute";s:3:"-40";s:11:"ocircumflex";s:3:"-40";s:9:"odieresis";s:3:"-40";s:6:"ograve";s:3:"-40";s:13:"ohungarumlaut";s:3:"-40";s:7:"omacron";s:3:"-40";s:6:"oslash";s:3:"-40";s:6:"otilde";s:3:"-40";s:6:"period";s:4:"-120";}s:1:"Q";a:11:{s:1:"U";s:3:"-10";s:6:"Uacute";s:3:"-10";s:11:"Ucircumflex";s:3:"-10";s:9:"Udieresis";s:3:"-10";s:6:"Ugrave";s:3:"-10";s:13:"Uhungarumlaut";s:3:"-10";s:7:"Umacron";s:3:"-10";s:7:"Uogonek";s:3:"-10";s:5:"Uring";s:3:"-10";s:5:"comma";s:2:"20";s:6:"period";s:2:"20";}s:1:"R";a:26:{s:1:"O";s:3:"-20";s:6:"Oacute";s:3:"-20";s:11:"Ocircumflex";s:3:"-20";s:9:"Odieresis";s:3:"-20";s:6:"Ograve";s:3:"-20";s:13:"Ohungarumlaut";s:3:"-20";s:7:"Omacron";s:3:"-20";s:6:"Oslash";s:3:"-20";s:6:"Otilde";s:3:"-20";s:1:"T";s:3:"-20";s:6:"Tcaron";s:3:"-20";s:12:"Tcommaaccent";s:3:"-20";s:1:"U";s:3:"-20";s:6:"Uacute";s:3:"-20";s:11:"Ucircumflex";s:3:"-20";s:9:"Udieresis";s:3:"-20";s:6:"Ugrave";s:3:"-20";s:13:"Uhungarumlaut";s:3:"-20";s:7:"Umacron";s:3:"-20";s:7:"Uogonek";s:3:"-20";s:5:"Uring";s:3:"-20";s:1:"V";s:3:"-50";s:1:"W";s:3:"-40";s:1:"Y";s:3:"-50";s:6:"Yacute";s:3:"-50";s:9:"Ydieresis";s:3:"-50";}s:6:"Racute";a:26:{s:1:"O";s:3:"-20";s:6:"Oacute";s:3:"-20";s:11:"Ocircumflex";s:3:"-20";s:9:"Odieresis";s:3:"-20";s:6:"Ograve";s:3:"-20";s:13:"Ohungarumlaut";s:3:"-20";s:7:"Omacron";s:3:"-20";s:6:"Oslash";s:3:"-20";s:6:"Otilde";s:3:"-20";s:1:"T";s:3:"-20";s:6:"Tcaron";s:3:"-20";s:12:"Tcommaaccent";s:3:"-20";s:1:"U";s:3:"-20";s:6:"Uacute";s:3:"-20";s:11:"Ucircumflex";s:3:"-20";s:9:"Udieresis";s:3:"-20";s:6:"Ugrave";s:3:"-20";s:13:"Uhungarumlaut";s:3:"-20";s:7:"Umacron";s:3:"-20";s:7:"Uogonek";s:3:"-20";s:5:"Uring";s:3:"-20";s:1:"V";s:3:"-50";s:1:"W";s:3:"-40";s:1:"Y";s:3:"-50";s:6:"Yacute";s:3:"-50";s:9:"Ydieresis";s:3:"-50";}s:6:"Rcaron";a:26:{s:1:"O";s:3:"-20";s:6:"Oacute";s:3:"-20";s:11:"Ocircumflex";s:3:"-20";s:9:"Odieresis";s:3:"-20";s:6:"Ograve";s:3:"-20";s:13:"Ohungarumlaut";s:3:"-20";s:7:"Omacron";s:3:"-20";s:6:"Oslash";s:3:"-20";s:6:"Otilde";s:3:"-20";s:1:"T";s:3:"-20";s:6:"Tcaron";s:3:"-20";s:12:"Tcommaaccent";s:3:"-20";s:1:"U";s:3:"-20";s:6:"Uacute";s:3:"-20";s:11:"Ucircumflex";s:3:"-20";s:9:"Udieresis";s:3:"-20";s:6:"Ugrave";s:3:"-20";s:13:"Uhungarumlaut";s:3:"-20";s:7:"Umacron";s:3:"-20";s:7:"Uogonek";s:3:"-20";s:5:"Uring";s:3:"-20";s:1:"V";s:3:"-50";s:1:"W";s:3:"-40";s:1:"Y";s:3:"-50";s:6:"Yacute";s:3:"-50";s:9:"Ydieresis";s:3:"-50";}s:12:"Rcommaaccent";a:26:{s:1:"O";s:3:"-20";s:6:"Oacute";s:3:"-20";s:11:"Ocircumflex";s:3:"-20";s:9:"Odieresis";s:3:"-20";s:6:"Ograve";s:3:"-20";s:13:"Ohungarumlaut";s:3:"-20";s:7:"Omacron";s:3:"-20";s:6:"Oslash";s:3:"-20";s:6:"Otilde";s:3:"-20";s:1:"T";s:3:"-20";s:6:"Tcaron";s:3:"-20";s:12:"Tcommaaccent";s:3:"-20";s:1:"U";s:3:"-20";s:6:"Uacute";s:3:"-20";s:11:"Ucircumflex";s:3:"-20";s:9:"Udieresis";s:3:"-20";s:6:"Ugrave";s:3:"-20";s:13:"Uhungarumlaut";s:3:"-20";s:7:"Umacron";s:3:"-20";s:7:"Uogonek";s:3:"-20";s:5:"Uring";s:3:"-20";s:1:"V";s:3:"-50";s:1:"W";s:3:"-40";s:1:"Y";s:3:"-50";s:6:"Yacute";s:3:"-50";s:9:"Ydieresis";s:3:"-50";}s:1:"T";a:68:{s:1:"A";s:3:"-90";s:6:"Aacute";s:3:"-90";s:6:"Abreve";s:3:"-90";s:11:"Acircumflex";s:3:"-90";s:9:"Adieresis";s:3:"-90";s:6:"Agrave";s:3:"-90";s:7:"Amacron";s:3:"-90";s:7:"Aogonek";s:3:"-90";s:5:"Aring";s:3:"-90";s:6:"Atilde";s:3:"-90";s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"a";s:3:"-80";s:6:"aacute";s:3:"-80";s:6:"abreve";s:3:"-80";s:11:"acircumflex";s:3:"-80";s:9:"adieresis";s:3:"-80";s:6:"agrave";s:3:"-80";s:7:"amacron";s:3:"-80";s:7:"aogonek";s:3:"-80";s:5:"aring";s:3:"-80";s:6:"atilde";s:3:"-80";s:5:"colon";s:3:"-40";s:5:"comma";s:3:"-80";s:1:"e";s:3:"-60";s:6:"eacute";s:3:"-60";s:6:"ecaron";s:3:"-60";s:11:"ecircumflex";s:3:"-60";s:9:"edieresis";s:3:"-60";s:10:"edotaccent";s:3:"-60";s:6:"egrave";s:3:"-60";s:7:"emacron";s:3:"-60";s:7:"eogonek";s:3:"-60";s:6:"hyphen";s:4:"-120";s:1:"o";s:3:"-80";s:6:"oacute";s:3:"-80";s:11:"ocircumflex";s:3:"-80";s:9:"odieresis";s:3:"-80";s:6:"ograve";s:3:"-80";s:13:"ohungarumlaut";s:3:"-80";s:7:"omacron";s:3:"-80";s:6:"oslash";s:3:"-80";s:6:"otilde";s:3:"-80";s:6:"period";s:3:"-80";s:1:"r";s:3:"-80";s:6:"racute";s:3:"-80";s:12:"rcommaaccent";s:3:"-80";s:9:"semicolon";s:3:"-40";s:1:"u";s:3:"-90";s:6:"uacute";s:3:"-90";s:11:"ucircumflex";s:3:"-90";s:9:"udieresis";s:3:"-90";s:6:"ugrave";s:3:"-90";s:13:"uhungarumlaut";s:3:"-90";s:7:"umacron";s:3:"-90";s:7:"uogonek";s:3:"-90";s:5:"uring";s:3:"-90";s:1:"w";s:3:"-60";s:1:"y";s:3:"-60";s:6:"yacute";s:3:"-60";s:9:"ydieresis";s:3:"-60";}s:6:"Tcaron";a:68:{s:1:"A";s:3:"-90";s:6:"Aacute";s:3:"-90";s:6:"Abreve";s:3:"-90";s:11:"Acircumflex";s:3:"-90";s:9:"Adieresis";s:3:"-90";s:6:"Agrave";s:3:"-90";s:7:"Amacron";s:3:"-90";s:7:"Aogonek";s:3:"-90";s:5:"Aring";s:3:"-90";s:6:"Atilde";s:3:"-90";s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"a";s:3:"-80";s:6:"aacute";s:3:"-80";s:6:"abreve";s:3:"-80";s:11:"acircumflex";s:3:"-80";s:9:"adieresis";s:3:"-80";s:6:"agrave";s:3:"-80";s:7:"amacron";s:3:"-80";s:7:"aogonek";s:3:"-80";s:5:"aring";s:3:"-80";s:6:"atilde";s:3:"-80";s:5:"colon";s:3:"-40";s:5:"comma";s:3:"-80";s:1:"e";s:3:"-60";s:6:"eacute";s:3:"-60";s:6:"ecaron";s:3:"-60";s:11:"ecircumflex";s:3:"-60";s:9:"edieresis";s:3:"-60";s:10:"edotaccent";s:3:"-60";s:6:"egrave";s:3:"-60";s:7:"emacron";s:3:"-60";s:7:"eogonek";s:3:"-60";s:6:"hyphen";s:4:"-120";s:1:"o";s:3:"-80";s:6:"oacute";s:3:"-80";s:11:"ocircumflex";s:3:"-80";s:9:"odieresis";s:3:"-80";s:6:"ograve";s:3:"-80";s:13:"ohungarumlaut";s:3:"-80";s:7:"omacron";s:3:"-80";s:6:"oslash";s:3:"-80";s:6:"otilde";s:3:"-80";s:6:"period";s:3:"-80";s:1:"r";s:3:"-80";s:6:"racute";s:3:"-80";s:12:"rcommaaccent";s:3:"-80";s:9:"semicolon";s:3:"-40";s:1:"u";s:3:"-90";s:6:"uacute";s:3:"-90";s:11:"ucircumflex";s:3:"-90";s:9:"udieresis";s:3:"-90";s:6:"ugrave";s:3:"-90";s:13:"uhungarumlaut";s:3:"-90";s:7:"umacron";s:3:"-90";s:7:"uogonek";s:3:"-90";s:5:"uring";s:3:"-90";s:1:"w";s:3:"-60";s:1:"y";s:3:"-60";s:6:"yacute";s:3:"-60";s:9:"ydieresis";s:3:"-60";}s:12:"Tcommaaccent";a:68:{s:1:"A";s:3:"-90";s:6:"Aacute";s:3:"-90";s:6:"Abreve";s:3:"-90";s:11:"Acircumflex";s:3:"-90";s:9:"Adieresis";s:3:"-90";s:6:"Agrave";s:3:"-90";s:7:"Amacron";s:3:"-90";s:7:"Aogonek";s:3:"-90";s:5:"Aring";s:3:"-90";s:6:"Atilde";s:3:"-90";s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"a";s:3:"-80";s:6:"aacute";s:3:"-80";s:6:"abreve";s:3:"-80";s:11:"acircumflex";s:3:"-80";s:9:"adieresis";s:3:"-80";s:6:"agrave";s:3:"-80";s:7:"amacron";s:3:"-80";s:7:"aogonek";s:3:"-80";s:5:"aring";s:3:"-80";s:6:"atilde";s:3:"-80";s:5:"colon";s:3:"-40";s:5:"comma";s:3:"-80";s:1:"e";s:3:"-60";s:6:"eacute";s:3:"-60";s:6:"ecaron";s:3:"-60";s:11:"ecircumflex";s:3:"-60";s:9:"edieresis";s:3:"-60";s:10:"edotaccent";s:3:"-60";s:6:"egrave";s:3:"-60";s:7:"emacron";s:3:"-60";s:7:"eogonek";s:3:"-60";s:6:"hyphen";s:4:"-120";s:1:"o";s:3:"-80";s:6:"oacute";s:3:"-80";s:11:"ocircumflex";s:3:"-80";s:9:"odieresis";s:3:"-80";s:6:"ograve";s:3:"-80";s:13:"ohungarumlaut";s:3:"-80";s:7:"omacron";s:3:"-80";s:6:"oslash";s:3:"-80";s:6:"otilde";s:3:"-80";s:6:"period";s:3:"-80";s:1:"r";s:3:"-80";s:6:"racute";s:3:"-80";s:12:"rcommaaccent";s:3:"-80";s:9:"semicolon";s:3:"-40";s:1:"u";s:3:"-90";s:6:"uacute";s:3:"-90";s:11:"ucircumflex";s:3:"-90";s:9:"udieresis";s:3:"-90";s:6:"ugrave";s:3:"-90";s:13:"uhungarumlaut";s:3:"-90";s:7:"umacron";s:3:"-90";s:7:"uogonek";s:3:"-90";s:5:"uring";s:3:"-90";s:1:"w";s:3:"-60";s:1:"y";s:3:"-60";s:6:"yacute";s:3:"-60";s:9:"ydieresis";s:3:"-60";}s:1:"U";a:12:{s:1:"A";s:3:"-50";s:6:"Aacute";s:3:"-50";s:6:"Abreve";s:3:"-50";s:11:"Acircumflex";s:3:"-50";s:9:"Adieresis";s:3:"-50";s:6:"Agrave";s:3:"-50";s:7:"Amacron";s:3:"-50";s:7:"Aogonek";s:3:"-50";s:5:"Aring";s:3:"-50";s:6:"Atilde";s:3:"-50";s:5:"comma";s:3:"-30";s:6:"period";s:3:"-30";}s:6:"Uacute";a:12:{s:1:"A";s:3:"-50";s:6:"Aacute";s:3:"-50";s:6:"Abreve";s:3:"-50";s:11:"Acircumflex";s:3:"-50";s:9:"Adieresis";s:3:"-50";s:6:"Agrave";s:3:"-50";s:7:"Amacron";s:3:"-50";s:7:"Aogonek";s:3:"-50";s:5:"Aring";s:3:"-50";s:6:"Atilde";s:3:"-50";s:5:"comma";s:3:"-30";s:6:"period";s:3:"-30";}s:11:"Ucircumflex";a:12:{s:1:"A";s:3:"-50";s:6:"Aacute";s:3:"-50";s:6:"Abreve";s:3:"-50";s:11:"Acircumflex";s:3:"-50";s:9:"Adieresis";s:3:"-50";s:6:"Agrave";s:3:"-50";s:7:"Amacron";s:3:"-50";s:7:"Aogonek";s:3:"-50";s:5:"Aring";s:3:"-50";s:6:"Atilde";s:3:"-50";s:5:"comma";s:3:"-30";s:6:"period";s:3:"-30";}s:9:"Udieresis";a:12:{s:1:"A";s:3:"-50";s:6:"Aacute";s:3:"-50";s:6:"Abreve";s:3:"-50";s:11:"Acircumflex";s:3:"-50";s:9:"Adieresis";s:3:"-50";s:6:"Agrave";s:3:"-50";s:7:"Amacron";s:3:"-50";s:7:"Aogonek";s:3:"-50";s:5:"Aring";s:3:"-50";s:6:"Atilde";s:3:"-50";s:5:"comma";s:3:"-30";s:6:"period";s:3:"-30";}s:6:"Ugrave";a:12:{s:1:"A";s:3:"-50";s:6:"Aacute";s:3:"-50";s:6:"Abreve";s:3:"-50";s:11:"Acircumflex";s:3:"-50";s:9:"Adieresis";s:3:"-50";s:6:"Agrave";s:3:"-50";s:7:"Amacron";s:3:"-50";s:7:"Aogonek";s:3:"-50";s:5:"Aring";s:3:"-50";s:6:"Atilde";s:3:"-50";s:5:"comma";s:3:"-30";s:6:"period";s:3:"-30";}s:13:"Uhungarumlaut";a:12:{s:1:"A";s:3:"-50";s:6:"Aacute";s:3:"-50";s:6:"Abreve";s:3:"-50";s:11:"Acircumflex";s:3:"-50";s:9:"Adieresis";s:3:"-50";s:6:"Agrave";s:3:"-50";s:7:"Amacron";s:3:"-50";s:7:"Aogonek";s:3:"-50";s:5:"Aring";s:3:"-50";s:6:"Atilde";s:3:"-50";s:5:"comma";s:3:"-30";s:6:"period";s:3:"-30";}s:7:"Umacron";a:12:{s:1:"A";s:3:"-50";s:6:"Aacute";s:3:"-50";s:6:"Abreve";s:3:"-50";s:11:"Acircumflex";s:3:"-50";s:9:"Adieresis";s:3:"-50";s:6:"Agrave";s:3:"-50";s:7:"Amacron";s:3:"-50";s:7:"Aogonek";s:3:"-50";s:5:"Aring";s:3:"-50";s:6:"Atilde";s:3:"-50";s:5:"comma";s:3:"-30";s:6:"period";s:3:"-30";}s:7:"Uogonek";a:12:{s:1:"A";s:3:"-50";s:6:"Aacute";s:3:"-50";s:6:"Abreve";s:3:"-50";s:11:"Acircumflex";s:3:"-50";s:9:"Adieresis";s:3:"-50";s:6:"Agrave";s:3:"-50";s:7:"Amacron";s:3:"-50";s:7:"Aogonek";s:3:"-50";s:5:"Aring";s:3:"-50";s:6:"Atilde";s:3:"-50";s:5:"comma";s:3:"-30";s:6:"period";s:3:"-30";}s:5:"Uring";a:12:{s:1:"A";s:3:"-50";s:6:"Aacute";s:3:"-50";s:6:"Abreve";s:3:"-50";s:11:"Acircumflex";s:3:"-50";s:9:"Adieresis";s:3:"-50";s:6:"Agrave";s:3:"-50";s:7:"Amacron";s:3:"-50";s:7:"Aogonek";s:3:"-50";s:5:"Aring";s:3:"-50";s:6:"Atilde";s:3:"-50";s:5:"comma";s:3:"-30";s:6:"period";s:3:"-30";}s:1:"V";a:64:{s:1:"A";s:3:"-80";s:6:"Aacute";s:3:"-80";s:6:"Abreve";s:3:"-80";s:11:"Acircumflex";s:3:"-80";s:9:"Adieresis";s:3:"-80";s:6:"Agrave";s:3:"-80";s:7:"Amacron";s:3:"-80";s:7:"Aogonek";s:3:"-80";s:5:"Aring";s:3:"-80";s:6:"Atilde";s:3:"-80";s:1:"G";s:3:"-50";s:6:"Gbreve";s:3:"-50";s:12:"Gcommaaccent";s:3:"-50";s:1:"O";s:3:"-50";s:6:"Oacute";s:3:"-50";s:11:"Ocircumflex";s:3:"-50";s:9:"Odieresis";s:3:"-50";s:6:"Ograve";s:3:"-50";s:13:"Ohungarumlaut";s:3:"-50";s:7:"Omacron";s:3:"-50";s:6:"Oslash";s:3:"-50";s:6:"Otilde";s:3:"-50";s:1:"a";s:3:"-60";s:6:"aacute";s:3:"-60";s:6:"abreve";s:3:"-60";s:11:"acircumflex";s:3:"-60";s:9:"adieresis";s:3:"-60";s:6:"agrave";s:3:"-60";s:7:"amacron";s:3:"-60";s:7:"aogonek";s:3:"-60";s:5:"aring";s:3:"-60";s:6:"atilde";s:3:"-60";s:5:"colon";s:3:"-40";s:5:"comma";s:4:"-120";s:1:"e";s:3:"-50";s:6:"eacute";s:3:"-50";s:6:"ecaron";s:3:"-50";s:11:"ecircumflex";s:3:"-50";s:9:"edieresis";s:3:"-50";s:10:"edotaccent";s:3:"-50";s:6:"egrave";s:3:"-50";s:7:"emacron";s:3:"-50";s:7:"eogonek";s:3:"-50";s:6:"hyphen";s:3:"-80";s:1:"o";s:3:"-90";s:6:"oacute";s:3:"-90";s:11:"ocircumflex";s:3:"-90";s:9:"odieresis";s:3:"-90";s:6:"ograve";s:3:"-90";s:13:"ohungarumlaut";s:3:"-90";s:7:"omacron";s:3:"-90";s:6:"oslash";s:3:"-90";s:6:"otilde";s:3:"-90";s:6:"period";s:4:"-120";s:9:"semicolon";s:3:"-40";s:1:"u";s:3:"-60";s:6:"uacute";s:3:"-60";s:11:"ucircumflex";s:3:"-60";s:9:"udieresis";s:3:"-60";s:6:"ugrave";s:3:"-60";s:13:"uhungarumlaut";s:3:"-60";s:7:"umacron";s:3:"-60";s:7:"uogonek";s:3:"-60";s:5:"uring";s:3:"-60";}s:1:"W";a:64:{s:1:"A";s:3:"-60";s:6:"Aacute";s:3:"-60";s:6:"Abreve";s:3:"-60";s:11:"Acircumflex";s:3:"-60";s:9:"Adieresis";s:3:"-60";s:6:"Agrave";s:3:"-60";s:7:"Amacron";s:3:"-60";s:7:"Aogonek";s:3:"-60";s:5:"Aring";s:3:"-60";s:6:"Atilde";s:3:"-60";s:1:"O";s:3:"-20";s:6:"Oacute";s:3:"-20";s:11:"Ocircumflex";s:3:"-20";s:9:"Odieresis";s:3:"-20";s:6:"Ograve";s:3:"-20";s:13:"Ohungarumlaut";s:3:"-20";s:7:"Omacron";s:3:"-20";s:6:"Oslash";s:3:"-20";s:6:"Otilde";s:3:"-20";s:1:"a";s:3:"-40";s:6:"aacute";s:3:"-40";s:6:"abreve";s:3:"-40";s:11:"acircumflex";s:3:"-40";s:9:"adieresis";s:3:"-40";s:6:"agrave";s:3:"-40";s:7:"amacron";s:3:"-40";s:7:"aogonek";s:3:"-40";s:5:"aring";s:3:"-40";s:6:"atilde";s:3:"-40";s:5:"colon";s:3:"-10";s:5:"comma";s:3:"-80";s:1:"e";s:3:"-35";s:6:"eacute";s:3:"-35";s:6:"ecaron";s:3:"-35";s:11:"ecircumflex";s:3:"-35";s:9:"edieresis";s:3:"-35";s:10:"edotaccent";s:3:"-35";s:6:"egrave";s:3:"-35";s:7:"emacron";s:3:"-35";s:7:"eogonek";s:3:"-35";s:6:"hyphen";s:3:"-40";s:1:"o";s:3:"-60";s:6:"oacute";s:3:"-60";s:11:"ocircumflex";s:3:"-60";s:9:"odieresis";s:3:"-60";s:6:"ograve";s:3:"-60";s:13:"ohungarumlaut";s:3:"-60";s:7:"omacron";s:3:"-60";s:6:"oslash";s:3:"-60";s:6:"otilde";s:3:"-60";s:6:"period";s:3:"-80";s:9:"semicolon";s:3:"-10";s:1:"u";s:3:"-45";s:6:"uacute";s:3:"-45";s:11:"ucircumflex";s:3:"-45";s:9:"udieresis";s:3:"-45";s:6:"ugrave";s:3:"-45";s:13:"uhungarumlaut";s:3:"-45";s:7:"umacron";s:3:"-45";s:7:"uogonek";s:3:"-45";s:5:"uring";s:3:"-45";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:1:"Y";a:60:{s:1:"A";s:4:"-110";s:6:"Aacute";s:4:"-110";s:6:"Abreve";s:4:"-110";s:11:"Acircumflex";s:4:"-110";s:9:"Adieresis";s:4:"-110";s:6:"Agrave";s:4:"-110";s:7:"Amacron";s:4:"-110";s:7:"Aogonek";s:4:"-110";s:5:"Aring";s:4:"-110";s:6:"Atilde";s:4:"-110";s:1:"O";s:3:"-70";s:6:"Oacute";s:3:"-70";s:11:"Ocircumflex";s:3:"-70";s:9:"Odieresis";s:3:"-70";s:6:"Ograve";s:3:"-70";s:13:"Ohungarumlaut";s:3:"-70";s:7:"Omacron";s:3:"-70";s:6:"Oslash";s:3:"-70";s:6:"Otilde";s:3:"-70";s:1:"a";s:3:"-90";s:6:"aacute";s:3:"-90";s:6:"abreve";s:3:"-90";s:11:"acircumflex";s:3:"-90";s:9:"adieresis";s:3:"-90";s:6:"agrave";s:3:"-90";s:7:"amacron";s:3:"-90";s:7:"aogonek";s:3:"-90";s:5:"aring";s:3:"-90";s:6:"atilde";s:3:"-90";s:5:"colon";s:3:"-50";s:5:"comma";s:4:"-100";s:1:"e";s:3:"-80";s:6:"eacute";s:3:"-80";s:6:"ecaron";s:3:"-80";s:11:"ecircumflex";s:3:"-80";s:9:"edieresis";s:3:"-80";s:10:"edotaccent";s:3:"-80";s:6:"egrave";s:3:"-80";s:7:"emacron";s:3:"-80";s:7:"eogonek";s:3:"-80";s:1:"o";s:4:"-100";s:6:"oacute";s:4:"-100";s:11:"ocircumflex";s:4:"-100";s:9:"odieresis";s:4:"-100";s:6:"ograve";s:4:"-100";s:13:"ohungarumlaut";s:4:"-100";s:7:"omacron";s:4:"-100";s:6:"oslash";s:4:"-100";s:6:"otilde";s:4:"-100";s:6:"period";s:4:"-100";s:9:"semicolon";s:3:"-50";s:1:"u";s:4:"-100";s:6:"uacute";s:4:"-100";s:11:"ucircumflex";s:4:"-100";s:9:"udieresis";s:4:"-100";s:6:"ugrave";s:4:"-100";s:13:"uhungarumlaut";s:4:"-100";s:7:"umacron";s:4:"-100";s:7:"uogonek";s:4:"-100";s:5:"uring";s:4:"-100";}s:6:"Yacute";a:60:{s:1:"A";s:4:"-110";s:6:"Aacute";s:4:"-110";s:6:"Abreve";s:4:"-110";s:11:"Acircumflex";s:4:"-110";s:9:"Adieresis";s:4:"-110";s:6:"Agrave";s:4:"-110";s:7:"Amacron";s:4:"-110";s:7:"Aogonek";s:4:"-110";s:5:"Aring";s:4:"-110";s:6:"Atilde";s:4:"-110";s:1:"O";s:3:"-70";s:6:"Oacute";s:3:"-70";s:11:"Ocircumflex";s:3:"-70";s:9:"Odieresis";s:3:"-70";s:6:"Ograve";s:3:"-70";s:13:"Ohungarumlaut";s:3:"-70";s:7:"Omacron";s:3:"-70";s:6:"Oslash";s:3:"-70";s:6:"Otilde";s:3:"-70";s:1:"a";s:3:"-90";s:6:"aacute";s:3:"-90";s:6:"abreve";s:3:"-90";s:11:"acircumflex";s:3:"-90";s:9:"adieresis";s:3:"-90";s:6:"agrave";s:3:"-90";s:7:"amacron";s:3:"-90";s:7:"aogonek";s:3:"-90";s:5:"aring";s:3:"-90";s:6:"atilde";s:3:"-90";s:5:"colon";s:3:"-50";s:5:"comma";s:4:"-100";s:1:"e";s:3:"-80";s:6:"eacute";s:3:"-80";s:6:"ecaron";s:3:"-80";s:11:"ecircumflex";s:3:"-80";s:9:"edieresis";s:3:"-80";s:10:"edotaccent";s:3:"-80";s:6:"egrave";s:3:"-80";s:7:"emacron";s:3:"-80";s:7:"eogonek";s:3:"-80";s:1:"o";s:4:"-100";s:6:"oacute";s:4:"-100";s:11:"ocircumflex";s:4:"-100";s:9:"odieresis";s:4:"-100";s:6:"ograve";s:4:"-100";s:13:"ohungarumlaut";s:4:"-100";s:7:"omacron";s:4:"-100";s:6:"oslash";s:4:"-100";s:6:"otilde";s:4:"-100";s:6:"period";s:4:"-100";s:9:"semicolon";s:3:"-50";s:1:"u";s:4:"-100";s:6:"uacute";s:4:"-100";s:11:"ucircumflex";s:4:"-100";s:9:"udieresis";s:4:"-100";s:6:"ugrave";s:4:"-100";s:13:"uhungarumlaut";s:4:"-100";s:7:"umacron";s:4:"-100";s:7:"uogonek";s:4:"-100";s:5:"uring";s:4:"-100";}s:9:"Ydieresis";a:60:{s:1:"A";s:4:"-110";s:6:"Aacute";s:4:"-110";s:6:"Abreve";s:4:"-110";s:11:"Acircumflex";s:4:"-110";s:9:"Adieresis";s:4:"-110";s:6:"Agrave";s:4:"-110";s:7:"Amacron";s:4:"-110";s:7:"Aogonek";s:4:"-110";s:5:"Aring";s:4:"-110";s:6:"Atilde";s:4:"-110";s:1:"O";s:3:"-70";s:6:"Oacute";s:3:"-70";s:11:"Ocircumflex";s:3:"-70";s:9:"Odieresis";s:3:"-70";s:6:"Ograve";s:3:"-70";s:13:"Ohungarumlaut";s:3:"-70";s:7:"Omacron";s:3:"-70";s:6:"Oslash";s:3:"-70";s:6:"Otilde";s:3:"-70";s:1:"a";s:3:"-90";s:6:"aacute";s:3:"-90";s:6:"abreve";s:3:"-90";s:11:"acircumflex";s:3:"-90";s:9:"adieresis";s:3:"-90";s:6:"agrave";s:3:"-90";s:7:"amacron";s:3:"-90";s:7:"aogonek";s:3:"-90";s:5:"aring";s:3:"-90";s:6:"atilde";s:3:"-90";s:5:"colon";s:3:"-50";s:5:"comma";s:4:"-100";s:1:"e";s:3:"-80";s:6:"eacute";s:3:"-80";s:6:"ecaron";s:3:"-80";s:11:"ecircumflex";s:3:"-80";s:9:"edieresis";s:3:"-80";s:10:"edotaccent";s:3:"-80";s:6:"egrave";s:3:"-80";s:7:"emacron";s:3:"-80";s:7:"eogonek";s:3:"-80";s:1:"o";s:4:"-100";s:6:"oacute";s:4:"-100";s:11:"ocircumflex";s:4:"-100";s:9:"odieresis";s:4:"-100";s:6:"ograve";s:4:"-100";s:13:"ohungarumlaut";s:4:"-100";s:7:"omacron";s:4:"-100";s:6:"oslash";s:4:"-100";s:6:"otilde";s:4:"-100";s:6:"period";s:4:"-100";s:9:"semicolon";s:3:"-50";s:1:"u";s:4:"-100";s:6:"uacute";s:4:"-100";s:11:"ucircumflex";s:4:"-100";s:9:"udieresis";s:4:"-100";s:6:"ugrave";s:4:"-100";s:13:"uhungarumlaut";s:4:"-100";s:7:"umacron";s:4:"-100";s:7:"uogonek";s:4:"-100";s:5:"uring";s:4:"-100";}s:1:"a";a:8:{s:1:"g";s:3:"-10";s:6:"gbreve";s:3:"-10";s:12:"gcommaaccent";s:3:"-10";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:6:"aacute";a:8:{s:1:"g";s:3:"-10";s:6:"gbreve";s:3:"-10";s:12:"gcommaaccent";s:3:"-10";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:6:"abreve";a:8:{s:1:"g";s:3:"-10";s:6:"gbreve";s:3:"-10";s:12:"gcommaaccent";s:3:"-10";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:11:"acircumflex";a:8:{s:1:"g";s:3:"-10";s:6:"gbreve";s:3:"-10";s:12:"gcommaaccent";s:3:"-10";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:9:"adieresis";a:8:{s:1:"g";s:3:"-10";s:6:"gbreve";s:3:"-10";s:12:"gcommaaccent";s:3:"-10";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:6:"agrave";a:8:{s:1:"g";s:3:"-10";s:6:"gbreve";s:3:"-10";s:12:"gcommaaccent";s:3:"-10";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:7:"amacron";a:8:{s:1:"g";s:3:"-10";s:6:"gbreve";s:3:"-10";s:12:"gcommaaccent";s:3:"-10";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:7:"aogonek";a:8:{s:1:"g";s:3:"-10";s:6:"gbreve";s:3:"-10";s:12:"gcommaaccent";s:3:"-10";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:5:"aring";a:8:{s:1:"g";s:3:"-10";s:6:"gbreve";s:3:"-10";s:12:"gcommaaccent";s:3:"-10";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:6:"atilde";a:8:{s:1:"g";s:3:"-10";s:6:"gbreve";s:3:"-10";s:12:"gcommaaccent";s:3:"-10";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:1:"b";a:17:{s:1:"l";s:3:"-10";s:6:"lacute";s:3:"-10";s:12:"lcommaaccent";s:3:"-10";s:6:"lslash";s:3:"-10";s:1:"u";s:3:"-20";s:6:"uacute";s:3:"-20";s:11:"ucircumflex";s:3:"-20";s:9:"udieresis";s:3:"-20";s:6:"ugrave";s:3:"-20";s:13:"uhungarumlaut";s:3:"-20";s:7:"umacron";s:3:"-20";s:7:"uogonek";s:3:"-20";s:5:"uring";s:3:"-20";s:1:"v";s:3:"-20";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:1:"c";a:10:{s:1:"h";s:3:"-10";s:1:"k";s:3:"-20";s:12:"kcommaaccent";s:3:"-20";s:1:"l";s:3:"-20";s:6:"lacute";s:3:"-20";s:12:"lcommaaccent";s:3:"-20";s:6:"lslash";s:3:"-20";s:1:"y";s:3:"-10";s:6:"yacute";s:3:"-10";s:9:"ydieresis";s:3:"-10";}s:6:"cacute";a:10:{s:1:"h";s:3:"-10";s:1:"k";s:3:"-20";s:12:"kcommaaccent";s:3:"-20";s:1:"l";s:3:"-20";s:6:"lacute";s:3:"-20";s:12:"lcommaaccent";s:3:"-20";s:6:"lslash";s:3:"-20";s:1:"y";s:3:"-10";s:6:"yacute";s:3:"-10";s:9:"ydieresis";s:3:"-10";}s:6:"ccaron";a:10:{s:1:"h";s:3:"-10";s:1:"k";s:3:"-20";s:12:"kcommaaccent";s:3:"-20";s:1:"l";s:3:"-20";s:6:"lacute";s:3:"-20";s:12:"lcommaaccent";s:3:"-20";s:6:"lslash";s:3:"-20";s:1:"y";s:3:"-10";s:6:"yacute";s:3:"-10";s:9:"ydieresis";s:3:"-10";}s:8:"ccedilla";a:10:{s:1:"h";s:3:"-10";s:1:"k";s:3:"-20";s:12:"kcommaaccent";s:3:"-20";s:1:"l";s:3:"-20";s:6:"lacute";s:3:"-20";s:12:"lcommaaccent";s:3:"-20";s:6:"lslash";s:3:"-20";s:1:"y";s:3:"-10";s:6:"yacute";s:3:"-10";s:9:"ydieresis";s:3:"-10";}s:5:"colon";a:1:{s:5:"space";s:3:"-40";}s:5:"comma";a:3:{s:13:"quotedblright";s:4:"-120";s:10:"quoteright";s:4:"-120";s:5:"space";s:3:"-40";}s:1:"d";a:7:{s:1:"d";s:3:"-10";s:6:"dcroat";s:3:"-10";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:6:"dcroat";a:7:{s:1:"d";s:3:"-10";s:6:"dcroat";s:3:"-10";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:1:"e";a:8:{s:5:"comma";s:2:"10";s:6:"period";s:2:"20";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"x";s:3:"-15";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:6:"eacute";a:8:{s:5:"comma";s:2:"10";s:6:"period";s:2:"20";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"x";s:3:"-15";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:6:"ecaron";a:8:{s:5:"comma";s:2:"10";s:6:"period";s:2:"20";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"x";s:3:"-15";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:11:"ecircumflex";a:8:{s:5:"comma";s:2:"10";s:6:"period";s:2:"20";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"x";s:3:"-15";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:9:"edieresis";a:8:{s:5:"comma";s:2:"10";s:6:"period";s:2:"20";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"x";s:3:"-15";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:10:"edotaccent";a:8:{s:5:"comma";s:2:"10";s:6:"period";s:2:"20";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"x";s:3:"-15";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:6:"egrave";a:8:{s:5:"comma";s:2:"10";s:6:"period";s:2:"20";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"x";s:3:"-15";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:7:"emacron";a:8:{s:5:"comma";s:2:"10";s:6:"period";s:2:"20";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"x";s:3:"-15";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:7:"eogonek";a:8:{s:5:"comma";s:2:"10";s:6:"period";s:2:"20";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"x";s:3:"-15";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:1:"f";a:22:{s:5:"comma";s:3:"-10";s:1:"e";s:3:"-10";s:6:"eacute";s:3:"-10";s:6:"ecaron";s:3:"-10";s:11:"ecircumflex";s:3:"-10";s:9:"edieresis";s:3:"-10";s:10:"edotaccent";s:3:"-10";s:6:"egrave";s:3:"-10";s:7:"emacron";s:3:"-10";s:7:"eogonek";s:3:"-10";s:1:"o";s:3:"-20";s:6:"oacute";s:3:"-20";s:11:"ocircumflex";s:3:"-20";s:9:"odieresis";s:3:"-20";s:6:"ograve";s:3:"-20";s:13:"ohungarumlaut";s:3:"-20";s:7:"omacron";s:3:"-20";s:6:"oslash";s:3:"-20";s:6:"otilde";s:3:"-20";s:6:"period";s:3:"-10";s:13:"quotedblright";s:2:"30";s:10:"quoteright";s:2:"30";}s:1:"g";a:12:{s:1:"e";s:2:"10";s:6:"eacute";s:2:"10";s:6:"ecaron";s:2:"10";s:11:"ecircumflex";s:2:"10";s:9:"edieresis";s:2:"10";s:10:"edotaccent";s:2:"10";s:6:"egrave";s:2:"10";s:7:"emacron";s:2:"10";s:7:"eogonek";s:2:"10";s:1:"g";s:3:"-10";s:6:"gbreve";s:3:"-10";s:12:"gcommaaccent";s:3:"-10";}s:6:"gbreve";a:12:{s:1:"e";s:2:"10";s:6:"eacute";s:2:"10";s:6:"ecaron";s:2:"10";s:11:"ecircumflex";s:2:"10";s:9:"edieresis";s:2:"10";s:10:"edotaccent";s:2:"10";s:6:"egrave";s:2:"10";s:7:"emacron";s:2:"10";s:7:"eogonek";s:2:"10";s:1:"g";s:3:"-10";s:6:"gbreve";s:3:"-10";s:12:"gcommaaccent";s:3:"-10";}s:12:"gcommaaccent";a:12:{s:1:"e";s:2:"10";s:6:"eacute";s:2:"10";s:6:"ecaron";s:2:"10";s:11:"ecircumflex";s:2:"10";s:9:"edieresis";s:2:"10";s:10:"edotaccent";s:2:"10";s:6:"egrave";s:2:"10";s:7:"emacron";s:2:"10";s:7:"eogonek";s:2:"10";s:1:"g";s:3:"-10";s:6:"gbreve";s:3:"-10";s:12:"gcommaaccent";s:3:"-10";}s:1:"h";a:3:{s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:1:"k";a:9:{s:1:"o";s:3:"-15";s:6:"oacute";s:3:"-15";s:11:"ocircumflex";s:3:"-15";s:9:"odieresis";s:3:"-15";s:6:"ograve";s:3:"-15";s:13:"ohungarumlaut";s:3:"-15";s:7:"omacron";s:3:"-15";s:6:"oslash";s:3:"-15";s:6:"otilde";s:3:"-15";}s:12:"kcommaaccent";a:9:{s:1:"o";s:3:"-15";s:6:"oacute";s:3:"-15";s:11:"ocircumflex";s:3:"-15";s:9:"odieresis";s:3:"-15";s:6:"ograve";s:3:"-15";s:13:"ohungarumlaut";s:3:"-15";s:7:"omacron";s:3:"-15";s:6:"oslash";s:3:"-15";s:6:"otilde";s:3:"-15";}s:1:"l";a:4:{s:1:"w";s:3:"-15";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:6:"lacute";a:4:{s:1:"w";s:3:"-15";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:12:"lcommaaccent";a:4:{s:1:"w";s:3:"-15";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:6:"lslash";a:4:{s:1:"w";s:3:"-15";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:1:"m";a:12:{s:1:"u";s:3:"-20";s:6:"uacute";s:3:"-20";s:11:"ucircumflex";s:3:"-20";s:9:"udieresis";s:3:"-20";s:6:"ugrave";s:3:"-20";s:13:"uhungarumlaut";s:3:"-20";s:7:"umacron";s:3:"-20";s:7:"uogonek";s:3:"-20";s:5:"uring";s:3:"-20";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:1:"n";a:13:{s:1:"u";s:3:"-10";s:6:"uacute";s:3:"-10";s:11:"ucircumflex";s:3:"-10";s:9:"udieresis";s:3:"-10";s:6:"ugrave";s:3:"-10";s:13:"uhungarumlaut";s:3:"-10";s:7:"umacron";s:3:"-10";s:7:"uogonek";s:3:"-10";s:5:"uring";s:3:"-10";s:1:"v";s:3:"-40";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:6:"nacute";a:13:{s:1:"u";s:3:"-10";s:6:"uacute";s:3:"-10";s:11:"ucircumflex";s:3:"-10";s:9:"udieresis";s:3:"-10";s:6:"ugrave";s:3:"-10";s:13:"uhungarumlaut";s:3:"-10";s:7:"umacron";s:3:"-10";s:7:"uogonek";s:3:"-10";s:5:"uring";s:3:"-10";s:1:"v";s:3:"-40";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:6:"ncaron";a:13:{s:1:"u";s:3:"-10";s:6:"uacute";s:3:"-10";s:11:"ucircumflex";s:3:"-10";s:9:"udieresis";s:3:"-10";s:6:"ugrave";s:3:"-10";s:13:"uhungarumlaut";s:3:"-10";s:7:"umacron";s:3:"-10";s:7:"uogonek";s:3:"-10";s:5:"uring";s:3:"-10";s:1:"v";s:3:"-40";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:12:"ncommaaccent";a:13:{s:1:"u";s:3:"-10";s:6:"uacute";s:3:"-10";s:11:"ucircumflex";s:3:"-10";s:9:"udieresis";s:3:"-10";s:6:"ugrave";s:3:"-10";s:13:"uhungarumlaut";s:3:"-10";s:7:"umacron";s:3:"-10";s:7:"uogonek";s:3:"-10";s:5:"uring";s:3:"-10";s:1:"v";s:3:"-40";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:6:"ntilde";a:13:{s:1:"u";s:3:"-10";s:6:"uacute";s:3:"-10";s:11:"ucircumflex";s:3:"-10";s:9:"udieresis";s:3:"-10";s:6:"ugrave";s:3:"-10";s:13:"uhungarumlaut";s:3:"-10";s:7:"umacron";s:3:"-10";s:7:"uogonek";s:3:"-10";s:5:"uring";s:3:"-10";s:1:"v";s:3:"-40";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:1:"o";a:6:{s:1:"v";s:3:"-20";s:1:"w";s:3:"-15";s:1:"x";s:3:"-30";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:6:"oacute";a:6:{s:1:"v";s:3:"-20";s:1:"w";s:3:"-15";s:1:"x";s:3:"-30";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:11:"ocircumflex";a:6:{s:1:"v";s:3:"-20";s:1:"w";s:3:"-15";s:1:"x";s:3:"-30";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:9:"odieresis";a:6:{s:1:"v";s:3:"-20";s:1:"w";s:3:"-15";s:1:"x";s:3:"-30";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:6:"ograve";a:6:{s:1:"v";s:3:"-20";s:1:"w";s:3:"-15";s:1:"x";s:3:"-30";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:13:"ohungarumlaut";a:6:{s:1:"v";s:3:"-20";s:1:"w";s:3:"-15";s:1:"x";s:3:"-30";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:7:"omacron";a:6:{s:1:"v";s:3:"-20";s:1:"w";s:3:"-15";s:1:"x";s:3:"-30";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:6:"oslash";a:6:{s:1:"v";s:3:"-20";s:1:"w";s:3:"-15";s:1:"x";s:3:"-30";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:6:"otilde";a:6:{s:1:"v";s:3:"-20";s:1:"w";s:3:"-15";s:1:"x";s:3:"-30";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:1:"p";a:3:{s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:6:"period";a:3:{s:13:"quotedblright";s:4:"-120";s:10:"quoteright";s:4:"-120";s:5:"space";s:3:"-40";}s:13:"quotedblright";a:1:{s:5:"space";s:3:"-80";}s:9:"quoteleft";a:1:{s:9:"quoteleft";s:3:"-46";}s:10:"quoteright";a:18:{s:1:"d";s:3:"-80";s:6:"dcroat";s:3:"-80";s:1:"l";s:3:"-20";s:6:"lacute";s:3:"-20";s:12:"lcommaaccent";s:3:"-20";s:6:"lslash";s:3:"-20";s:10:"quoteright";s:3:"-46";s:1:"r";s:3:"-40";s:6:"racute";s:3:"-40";s:6:"rcaron";s:3:"-40";s:12:"rcommaaccent";s:3:"-40";s:1:"s";s:3:"-60";s:6:"sacute";s:3:"-60";s:6:"scaron";s:3:"-60";s:8:"scedilla";s:3:"-60";s:12:"scommaaccent";s:3:"-60";s:5:"space";s:3:"-80";s:1:"v";s:3:"-20";}s:1:"r";a:33:{s:1:"c";s:3:"-20";s:6:"cacute";s:3:"-20";s:6:"ccaron";s:3:"-20";s:8:"ccedilla";s:3:"-20";s:5:"comma";s:3:"-60";s:1:"d";s:3:"-20";s:6:"dcroat";s:3:"-20";s:1:"g";s:3:"-15";s:6:"gbreve";s:3:"-15";s:12:"gcommaaccent";s:3:"-15";s:6:"hyphen";s:3:"-20";s:1:"o";s:3:"-20";s:6:"oacute";s:3:"-20";s:11:"ocircumflex";s:3:"-20";s:9:"odieresis";s:3:"-20";s:6:"ograve";s:3:"-20";s:13:"ohungarumlaut";s:3:"-20";s:7:"omacron";s:3:"-20";s:6:"oslash";s:3:"-20";s:6:"otilde";s:3:"-20";s:6:"period";s:3:"-60";s:1:"q";s:3:"-20";s:1:"s";s:3:"-15";s:6:"sacute";s:3:"-15";s:6:"scaron";s:3:"-15";s:8:"scedilla";s:3:"-15";s:12:"scommaaccent";s:3:"-15";s:1:"t";s:2:"20";s:12:"tcommaaccent";s:2:"20";s:1:"v";s:2:"10";s:1:"y";s:2:"10";s:6:"yacute";s:2:"10";s:9:"ydieresis";s:2:"10";}s:6:"racute";a:33:{s:1:"c";s:3:"-20";s:6:"cacute";s:3:"-20";s:6:"ccaron";s:3:"-20";s:8:"ccedilla";s:3:"-20";s:5:"comma";s:3:"-60";s:1:"d";s:3:"-20";s:6:"dcroat";s:3:"-20";s:1:"g";s:3:"-15";s:6:"gbreve";s:3:"-15";s:12:"gcommaaccent";s:3:"-15";s:6:"hyphen";s:3:"-20";s:1:"o";s:3:"-20";s:6:"oacute";s:3:"-20";s:11:"ocircumflex";s:3:"-20";s:9:"odieresis";s:3:"-20";s:6:"ograve";s:3:"-20";s:13:"ohungarumlaut";s:3:"-20";s:7:"omacron";s:3:"-20";s:6:"oslash";s:3:"-20";s:6:"otilde";s:3:"-20";s:6:"period";s:3:"-60";s:1:"q";s:3:"-20";s:1:"s";s:3:"-15";s:6:"sacute";s:3:"-15";s:6:"scaron";s:3:"-15";s:8:"scedilla";s:3:"-15";s:12:"scommaaccent";s:3:"-15";s:1:"t";s:2:"20";s:12:"tcommaaccent";s:2:"20";s:1:"v";s:2:"10";s:1:"y";s:2:"10";s:6:"yacute";s:2:"10";s:9:"ydieresis";s:2:"10";}s:6:"rcaron";a:33:{s:1:"c";s:3:"-20";s:6:"cacute";s:3:"-20";s:6:"ccaron";s:3:"-20";s:8:"ccedilla";s:3:"-20";s:5:"comma";s:3:"-60";s:1:"d";s:3:"-20";s:6:"dcroat";s:3:"-20";s:1:"g";s:3:"-15";s:6:"gbreve";s:3:"-15";s:12:"gcommaaccent";s:3:"-15";s:6:"hyphen";s:3:"-20";s:1:"o";s:3:"-20";s:6:"oacute";s:3:"-20";s:11:"ocircumflex";s:3:"-20";s:9:"odieresis";s:3:"-20";s:6:"ograve";s:3:"-20";s:13:"ohungarumlaut";s:3:"-20";s:7:"omacron";s:3:"-20";s:6:"oslash";s:3:"-20";s:6:"otilde";s:3:"-20";s:6:"period";s:3:"-60";s:1:"q";s:3:"-20";s:1:"s";s:3:"-15";s:6:"sacute";s:3:"-15";s:6:"scaron";s:3:"-15";s:8:"scedilla";s:3:"-15";s:12:"scommaaccent";s:3:"-15";s:1:"t";s:2:"20";s:12:"tcommaaccent";s:2:"20";s:1:"v";s:2:"10";s:1:"y";s:2:"10";s:6:"yacute";s:2:"10";s:9:"ydieresis";s:2:"10";}s:12:"rcommaaccent";a:33:{s:1:"c";s:3:"-20";s:6:"cacute";s:3:"-20";s:6:"ccaron";s:3:"-20";s:8:"ccedilla";s:3:"-20";s:5:"comma";s:3:"-60";s:1:"d";s:3:"-20";s:6:"dcroat";s:3:"-20";s:1:"g";s:3:"-15";s:6:"gbreve";s:3:"-15";s:12:"gcommaaccent";s:3:"-15";s:6:"hyphen";s:3:"-20";s:1:"o";s:3:"-20";s:6:"oacute";s:3:"-20";s:11:"ocircumflex";s:3:"-20";s:9:"odieresis";s:3:"-20";s:6:"ograve";s:3:"-20";s:13:"ohungarumlaut";s:3:"-20";s:7:"omacron";s:3:"-20";s:6:"oslash";s:3:"-20";s:6:"otilde";s:3:"-20";s:6:"period";s:3:"-60";s:1:"q";s:3:"-20";s:1:"s";s:3:"-15";s:6:"sacute";s:3:"-15";s:6:"scaron";s:3:"-15";s:8:"scedilla";s:3:"-15";s:12:"scommaaccent";s:3:"-15";s:1:"t";s:2:"20";s:12:"tcommaaccent";s:2:"20";s:1:"v";s:2:"10";s:1:"y";s:2:"10";s:6:"yacute";s:2:"10";s:9:"ydieresis";s:2:"10";}s:1:"s";a:1:{s:1:"w";s:3:"-15";}s:6:"sacute";a:1:{s:1:"w";s:3:"-15";}s:6:"scaron";a:1:{s:1:"w";s:3:"-15";}s:8:"scedilla";a:1:{s:1:"w";s:3:"-15";}s:12:"scommaaccent";a:1:{s:1:"w";s:3:"-15";}s:9:"semicolon";a:1:{s:5:"space";s:3:"-40";}s:5:"space";a:10:{s:1:"T";s:4:"-100";s:6:"Tcaron";s:4:"-100";s:12:"Tcommaaccent";s:4:"-100";s:1:"V";s:3:"-80";s:1:"W";s:3:"-80";s:1:"Y";s:4:"-120";s:6:"Yacute";s:4:"-120";s:9:"Ydieresis";s:4:"-120";s:12:"quotedblleft";s:3:"-80";s:9:"quoteleft";s:3:"-60";}s:1:"v";a:21:{s:1:"a";s:3:"-20";s:6:"aacute";s:3:"-20";s:6:"abreve";s:3:"-20";s:11:"acircumflex";s:3:"-20";s:9:"adieresis";s:3:"-20";s:6:"agrave";s:3:"-20";s:7:"amacron";s:3:"-20";s:7:"aogonek";s:3:"-20";s:5:"aring";s:3:"-20";s:6:"atilde";s:3:"-20";s:5:"comma";s:3:"-80";s:1:"o";s:3:"-30";s:6:"oacute";s:3:"-30";s:11:"ocircumflex";s:3:"-30";s:9:"odieresis";s:3:"-30";s:6:"ograve";s:3:"-30";s:13:"ohungarumlaut";s:3:"-30";s:7:"omacron";s:3:"-30";s:6:"oslash";s:3:"-30";s:6:"otilde";s:3:"-30";s:6:"period";s:3:"-80";}s:1:"w";a:11:{s:5:"comma";s:3:"-40";s:1:"o";s:3:"-20";s:6:"oacute";s:3:"-20";s:11:"ocircumflex";s:3:"-20";s:9:"odieresis";s:3:"-20";s:6:"ograve";s:3:"-20";s:13:"ohungarumlaut";s:3:"-20";s:7:"omacron";s:3:"-20";s:6:"oslash";s:3:"-20";s:6:"otilde";s:3:"-20";s:6:"period";s:3:"-40";}s:1:"x";a:9:{s:1:"e";s:3:"-10";s:6:"eacute";s:3:"-10";s:6:"ecaron";s:3:"-10";s:11:"ecircumflex";s:3:"-10";s:9:"edieresis";s:3:"-10";s:10:"edotaccent";s:3:"-10";s:6:"egrave";s:3:"-10";s:7:"emacron";s:3:"-10";s:7:"eogonek";s:3:"-10";}s:1:"y";a:30:{s:1:"a";s:3:"-30";s:6:"aacute";s:3:"-30";s:6:"abreve";s:3:"-30";s:11:"acircumflex";s:3:"-30";s:9:"adieresis";s:3:"-30";s:6:"agrave";s:3:"-30";s:7:"amacron";s:3:"-30";s:7:"aogonek";s:3:"-30";s:5:"aring";s:3:"-30";s:6:"atilde";s:3:"-30";s:5:"comma";s:3:"-80";s:1:"e";s:3:"-10";s:6:"eacute";s:3:"-10";s:6:"ecaron";s:3:"-10";s:11:"ecircumflex";s:3:"-10";s:9:"edieresis";s:3:"-10";s:10:"edotaccent";s:3:"-10";s:6:"egrave";s:3:"-10";s:7:"emacron";s:3:"-10";s:7:"eogonek";s:3:"-10";s:1:"o";s:3:"-25";s:6:"oacute";s:3:"-25";s:11:"ocircumflex";s:3:"-25";s:9:"odieresis";s:3:"-25";s:6:"ograve";s:3:"-25";s:13:"ohungarumlaut";s:3:"-25";s:7:"omacron";s:3:"-25";s:6:"oslash";s:3:"-25";s:6:"otilde";s:3:"-25";s:6:"period";s:3:"-80";}s:6:"yacute";a:30:{s:1:"a";s:3:"-30";s:6:"aacute";s:3:"-30";s:6:"abreve";s:3:"-30";s:11:"acircumflex";s:3:"-30";s:9:"adieresis";s:3:"-30";s:6:"agrave";s:3:"-30";s:7:"amacron";s:3:"-30";s:7:"aogonek";s:3:"-30";s:5:"aring";s:3:"-30";s:6:"atilde";s:3:"-30";s:5:"comma";s:3:"-80";s:1:"e";s:3:"-10";s:6:"eacute";s:3:"-10";s:6:"ecaron";s:3:"-10";s:11:"ecircumflex";s:3:"-10";s:9:"edieresis";s:3:"-10";s:10:"edotaccent";s:3:"-10";s:6:"egrave";s:3:"-10";s:7:"emacron";s:3:"-10";s:7:"eogonek";s:3:"-10";s:1:"o";s:3:"-25";s:6:"oacute";s:3:"-25";s:11:"ocircumflex";s:3:"-25";s:9:"odieresis";s:3:"-25";s:6:"ograve";s:3:"-25";s:13:"ohungarumlaut";s:3:"-25";s:7:"omacron";s:3:"-25";s:6:"oslash";s:3:"-25";s:6:"otilde";s:3:"-25";s:6:"period";s:3:"-80";}s:9:"ydieresis";a:30:{s:1:"a";s:3:"-30";s:6:"aacute";s:3:"-30";s:6:"abreve";s:3:"-30";s:11:"acircumflex";s:3:"-30";s:9:"adieresis";s:3:"-30";s:6:"agrave";s:3:"-30";s:7:"amacron";s:3:"-30";s:7:"aogonek";s:3:"-30";s:5:"aring";s:3:"-30";s:6:"atilde";s:3:"-30";s:5:"comma";s:3:"-80";s:1:"e";s:3:"-10";s:6:"eacute";s:3:"-10";s:6:"ecaron";s:3:"-10";s:11:"ecircumflex";s:3:"-10";s:9:"edieresis";s:3:"-10";s:10:"edotaccent";s:3:"-10";s:6:"egrave";s:3:"-10";s:7:"emacron";s:3:"-10";s:7:"eogonek";s:3:"-10";s:1:"o";s:3:"-25";s:6:"oacute";s:3:"-25";s:11:"ocircumflex";s:3:"-25";s:9:"odieresis";s:3:"-25";s:6:"ograve";s:3:"-25";s:13:"ohungarumlaut";s:3:"-25";s:7:"omacron";s:3:"-25";s:6:"oslash";s:3:"-25";s:6:"otilde";s:3:"-25";s:6:"period";s:3:"-80";}s:1:"z";a:9:{s:1:"e";s:2:"10";s:6:"eacute";s:2:"10";s:6:"ecaron";s:2:"10";s:11:"ecircumflex";s:2:"10";s:9:"edieresis";s:2:"10";s:10:"edotaccent";s:2:"10";s:6:"egrave";s:2:"10";s:7:"emacron";s:2:"10";s:7:"eogonek";s:2:"10";}s:6:"zacute";a:9:{s:1:"e";s:2:"10";s:6:"eacute";s:2:"10";s:6:"ecaron";s:2:"10";s:11:"ecircumflex";s:2:"10";s:9:"edieresis";s:2:"10";s:10:"edotaccent";s:2:"10";s:6:"egrave";s:2:"10";s:7:"emacron";s:2:"10";s:7:"eogonek";s:2:"10";}s:6:"zcaron";a:9:{s:1:"e";s:2:"10";s:6:"eacute";s:2:"10";s:6:"ecaron";s:2:"10";s:11:"ecircumflex";s:2:"10";s:9:"edieresis";s:2:"10";s:10:"edotaccent";s:2:"10";s:6:"egrave";s:2:"10";s:7:"emacron";s:2:"10";s:7:"eogonek";s:2:"10";}s:10:"zdotaccent";a:9:{s:1:"e";s:2:"10";s:6:"eacute";s:2:"10";s:6:"ecaron";s:2:"10";s:11:"ecircumflex";s:2:"10";s:9:"edieresis";s:2:"10";s:10:"edotaccent";s:2:"10";s:6:"egrave";s:2:"10";s:7:"emacron";s:2:"10";s:7:"eogonek";s:2:"10";}}s:9:"_version_";i:1;}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/php_Helvetica-BoldOblique.afm b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/php_Helvetica-BoldOblique.afm new file mode 100755 index 00000000..7f869f37 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/php_Helvetica-BoldOblique.afm @@ -0,0 +1 @@ +a:22:{s:8:"FontName";s:21:"Helvetica-BoldOblique";s:8:"FullName";s:22:"Helvetica Bold Oblique";s:10:"FamilyName";s:9:"Helvetica";s:6:"Weight";s:4:"Bold";s:11:"ItalicAngle";s:3:"-12";s:12:"IsFixedPitch";s:5:"false";s:12:"CharacterSet";s:13:"ExtendedRoman";s:8:"FontBBox";a:4:{i:0;s:4:"-174";i:1;s:4:"-228";i:2;s:4:"1114";i:3;s:3:"962";}s:17:"UnderlinePosition";s:4:"-100";s:18:"UnderlineThickness";s:2:"50";s:7:"Version";s:7:"002.000";s:14:"EncodingScheme";s:21:"AdobeStandardEncoding";s:9:"CapHeight";s:3:"718";s:7:"XHeight";s:3:"532";s:8:"Ascender";s:3:"718";s:9:"Descender";s:4:"-207";s:5:"StdHW";s:3:"118";s:5:"StdVW";s:3:"140";s:16:"StartCharMetrics";s:3:"315";s:1:"C";a:464:{i:32;a:4:{s:1:"C";s:2:"32";s:2:"WX";s:3:"278";s:1:"N";s:5:"space";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:1:"0";i:2;s:1:"0";i:3;s:1:"0";}}s:5:"space";a:4:{s:1:"C";s:2:"32";s:2:"WX";s:3:"278";s:1:"N";s:5:"space";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:1:"0";i:2;s:1:"0";i:3;s:1:"0";}}i:33;a:4:{s:1:"C";s:2:"33";s:2:"WX";s:3:"333";s:1:"N";s:6:"exclam";s:1:"B";a:4:{i:0;s:2:"94";i:1;s:1:"0";i:2;s:3:"397";i:3;s:3:"718";}}s:6:"exclam";a:4:{s:1:"C";s:2:"33";s:2:"WX";s:3:"333";s:1:"N";s:6:"exclam";s:1:"B";a:4:{i:0;s:2:"94";i:1;s:1:"0";i:2;s:3:"397";i:3;s:3:"718";}}i:34;a:4:{s:1:"C";s:2:"34";s:2:"WX";s:3:"474";s:1:"N";s:8:"quotedbl";s:1:"B";a:4:{i:0;s:3:"193";i:1;s:3:"447";i:2;s:3:"529";i:3;s:3:"718";}}s:8:"quotedbl";a:4:{s:1:"C";s:2:"34";s:2:"WX";s:3:"474";s:1:"N";s:8:"quotedbl";s:1:"B";a:4:{i:0;s:3:"193";i:1;s:3:"447";i:2;s:3:"529";i:3;s:3:"718";}}i:35;a:4:{s:1:"C";s:2:"35";s:2:"WX";s:3:"556";s:1:"N";s:10:"numbersign";s:1:"B";a:4:{i:0;s:2:"60";i:1;s:1:"0";i:2;s:3:"644";i:3;s:3:"698";}}s:10:"numbersign";a:4:{s:1:"C";s:2:"35";s:2:"WX";s:3:"556";s:1:"N";s:10:"numbersign";s:1:"B";a:4:{i:0;s:2:"60";i:1;s:1:"0";i:2;s:3:"644";i:3;s:3:"698";}}i:36;a:4:{s:1:"C";s:2:"36";s:2:"WX";s:3:"556";s:1:"N";s:6:"dollar";s:1:"B";a:4:{i:0;s:2:"67";i:1;s:4:"-115";i:2;s:3:"622";i:3;s:3:"775";}}s:6:"dollar";a:4:{s:1:"C";s:2:"36";s:2:"WX";s:3:"556";s:1:"N";s:6:"dollar";s:1:"B";a:4:{i:0;s:2:"67";i:1;s:4:"-115";i:2;s:3:"622";i:3;s:3:"775";}}i:37;a:4:{s:1:"C";s:2:"37";s:2:"WX";s:3:"889";s:1:"N";s:7:"percent";s:1:"B";a:4:{i:0;s:3:"136";i:1;s:3:"-19";i:2;s:3:"901";i:3;s:3:"710";}}s:7:"percent";a:4:{s:1:"C";s:2:"37";s:2:"WX";s:3:"889";s:1:"N";s:7:"percent";s:1:"B";a:4:{i:0;s:3:"136";i:1;s:3:"-19";i:2;s:3:"901";i:3;s:3:"710";}}i:38;a:4:{s:1:"C";s:2:"38";s:2:"WX";s:3:"722";s:1:"N";s:9:"ampersand";s:1:"B";a:4:{i:0;s:2:"89";i:1;s:3:"-19";i:2;s:3:"732";i:3;s:3:"718";}}s:9:"ampersand";a:4:{s:1:"C";s:2:"38";s:2:"WX";s:3:"722";s:1:"N";s:9:"ampersand";s:1:"B";a:4:{i:0;s:2:"89";i:1;s:3:"-19";i:2;s:3:"732";i:3;s:3:"718";}}i:39;a:4:{s:1:"C";s:2:"39";s:2:"WX";s:3:"278";s:1:"N";s:10:"quoteright";s:1:"B";a:4:{i:0;s:3:"167";i:1;s:3:"445";i:2;s:3:"362";i:3;s:3:"718";}}s:10:"quoteright";a:4:{s:1:"C";s:2:"39";s:2:"WX";s:3:"278";s:1:"N";s:10:"quoteright";s:1:"B";a:4:{i:0;s:3:"167";i:1;s:3:"445";i:2;s:3:"362";i:3;s:3:"718";}}i:40;a:4:{s:1:"C";s:2:"40";s:2:"WX";s:3:"333";s:1:"N";s:9:"parenleft";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:4:"-208";i:2;s:3:"470";i:3;s:3:"734";}}s:9:"parenleft";a:4:{s:1:"C";s:2:"40";s:2:"WX";s:3:"333";s:1:"N";s:9:"parenleft";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:4:"-208";i:2;s:3:"470";i:3;s:3:"734";}}i:41;a:4:{s:1:"C";s:2:"41";s:2:"WX";s:3:"333";s:1:"N";s:10:"parenright";s:1:"B";a:4:{i:0;s:3:"-25";i:1;s:4:"-208";i:2;s:3:"369";i:3;s:3:"734";}}s:10:"parenright";a:4:{s:1:"C";s:2:"41";s:2:"WX";s:3:"333";s:1:"N";s:10:"parenright";s:1:"B";a:4:{i:0;s:3:"-25";i:1;s:4:"-208";i:2;s:3:"369";i:3;s:3:"734";}}i:42;a:4:{s:1:"C";s:2:"42";s:2:"WX";s:3:"389";s:1:"N";s:8:"asterisk";s:1:"B";a:4:{i:0;s:3:"146";i:1;s:3:"387";i:2;s:3:"481";i:3;s:3:"718";}}s:8:"asterisk";a:4:{s:1:"C";s:2:"42";s:2:"WX";s:3:"389";s:1:"N";s:8:"asterisk";s:1:"B";a:4:{i:0;s:3:"146";i:1;s:3:"387";i:2;s:3:"481";i:3;s:3:"718";}}i:43;a:4:{s:1:"C";s:2:"43";s:2:"WX";s:3:"584";s:1:"N";s:4:"plus";s:1:"B";a:4:{i:0;s:2:"82";i:1;s:1:"0";i:2;s:3:"610";i:3;s:3:"506";}}s:4:"plus";a:4:{s:1:"C";s:2:"43";s:2:"WX";s:3:"584";s:1:"N";s:4:"plus";s:1:"B";a:4:{i:0;s:2:"82";i:1;s:1:"0";i:2;s:3:"610";i:3;s:3:"506";}}i:44;a:4:{s:1:"C";s:2:"44";s:2:"WX";s:3:"278";s:1:"N";s:5:"comma";s:1:"B";a:4:{i:0;s:2:"28";i:1;s:4:"-168";i:2;s:3:"245";i:3;s:3:"146";}}s:5:"comma";a:4:{s:1:"C";s:2:"44";s:2:"WX";s:3:"278";s:1:"N";s:5:"comma";s:1:"B";a:4:{i:0;s:2:"28";i:1;s:4:"-168";i:2;s:3:"245";i:3;s:3:"146";}}i:45;a:4:{s:1:"C";s:2:"45";s:2:"WX";s:3:"333";s:1:"N";s:6:"hyphen";s:1:"B";a:4:{i:0;s:2:"73";i:1;s:3:"215";i:2;s:3:"379";i:3;s:3:"345";}}s:6:"hyphen";a:4:{s:1:"C";s:2:"45";s:2:"WX";s:3:"333";s:1:"N";s:6:"hyphen";s:1:"B";a:4:{i:0;s:2:"73";i:1;s:3:"215";i:2;s:3:"379";i:3;s:3:"345";}}i:46;a:4:{s:1:"C";s:2:"46";s:2:"WX";s:3:"278";s:1:"N";s:6:"period";s:1:"B";a:4:{i:0;s:2:"64";i:1;s:1:"0";i:2;s:3:"245";i:3;s:3:"146";}}s:6:"period";a:4:{s:1:"C";s:2:"46";s:2:"WX";s:3:"278";s:1:"N";s:6:"period";s:1:"B";a:4:{i:0;s:2:"64";i:1;s:1:"0";i:2;s:3:"245";i:3;s:3:"146";}}i:47;a:4:{s:1:"C";s:2:"47";s:2:"WX";s:3:"278";s:1:"N";s:5:"slash";s:1:"B";a:4:{i:0;s:3:"-37";i:1;s:3:"-19";i:2;s:3:"468";i:3;s:3:"737";}}s:5:"slash";a:4:{s:1:"C";s:2:"47";s:2:"WX";s:3:"278";s:1:"N";s:5:"slash";s:1:"B";a:4:{i:0;s:3:"-37";i:1;s:3:"-19";i:2;s:3:"468";i:3;s:3:"737";}}i:48;a:4:{s:1:"C";s:2:"48";s:2:"WX";s:3:"556";s:1:"N";s:4:"zero";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:3:"-19";i:2;s:3:"617";i:3;s:3:"710";}}s:4:"zero";a:4:{s:1:"C";s:2:"48";s:2:"WX";s:3:"556";s:1:"N";s:4:"zero";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:3:"-19";i:2;s:3:"617";i:3;s:3:"710";}}i:49;a:4:{s:1:"C";s:2:"49";s:2:"WX";s:3:"556";s:1:"N";s:3:"one";s:1:"B";a:4:{i:0;s:3:"173";i:1;s:1:"0";i:2;s:3:"529";i:3;s:3:"710";}}s:3:"one";a:4:{s:1:"C";s:2:"49";s:2:"WX";s:3:"556";s:1:"N";s:3:"one";s:1:"B";a:4:{i:0;s:3:"173";i:1;s:1:"0";i:2;s:3:"529";i:3;s:3:"710";}}i:50;a:4:{s:1:"C";s:2:"50";s:2:"WX";s:3:"556";s:1:"N";s:3:"two";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:1:"0";i:2;s:3:"619";i:3;s:3:"710";}}s:3:"two";a:4:{s:1:"C";s:2:"50";s:2:"WX";s:3:"556";s:1:"N";s:3:"two";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:1:"0";i:2;s:3:"619";i:3;s:3:"710";}}i:51;a:4:{s:1:"C";s:2:"51";s:2:"WX";s:3:"556";s:1:"N";s:5:"three";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:3:"-19";i:2;s:3:"608";i:3;s:3:"710";}}s:5:"three";a:4:{s:1:"C";s:2:"51";s:2:"WX";s:3:"556";s:1:"N";s:5:"three";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:3:"-19";i:2;s:3:"608";i:3;s:3:"710";}}i:52;a:4:{s:1:"C";s:2:"52";s:2:"WX";s:3:"556";s:1:"N";s:4:"four";s:1:"B";a:4:{i:0;s:2:"60";i:1;s:1:"0";i:2;s:3:"598";i:3;s:3:"710";}}s:4:"four";a:4:{s:1:"C";s:2:"52";s:2:"WX";s:3:"556";s:1:"N";s:4:"four";s:1:"B";a:4:{i:0;s:2:"60";i:1;s:1:"0";i:2;s:3:"598";i:3;s:3:"710";}}i:53;a:4:{s:1:"C";s:2:"53";s:2:"WX";s:3:"556";s:1:"N";s:4:"five";s:1:"B";a:4:{i:0;s:2:"64";i:1;s:3:"-19";i:2;s:3:"636";i:3;s:3:"698";}}s:4:"five";a:4:{s:1:"C";s:2:"53";s:2:"WX";s:3:"556";s:1:"N";s:4:"five";s:1:"B";a:4:{i:0;s:2:"64";i:1;s:3:"-19";i:2;s:3:"636";i:3;s:3:"698";}}i:54;a:4:{s:1:"C";s:2:"54";s:2:"WX";s:3:"556";s:1:"N";s:3:"six";s:1:"B";a:4:{i:0;s:2:"85";i:1;s:3:"-19";i:2;s:3:"619";i:3;s:3:"710";}}s:3:"six";a:4:{s:1:"C";s:2:"54";s:2:"WX";s:3:"556";s:1:"N";s:3:"six";s:1:"B";a:4:{i:0;s:2:"85";i:1;s:3:"-19";i:2;s:3:"619";i:3;s:3:"710";}}i:55;a:4:{s:1:"C";s:2:"55";s:2:"WX";s:3:"556";s:1:"N";s:5:"seven";s:1:"B";a:4:{i:0;s:3:"125";i:1;s:1:"0";i:2;s:3:"676";i:3;s:3:"698";}}s:5:"seven";a:4:{s:1:"C";s:2:"55";s:2:"WX";s:3:"556";s:1:"N";s:5:"seven";s:1:"B";a:4:{i:0;s:3:"125";i:1;s:1:"0";i:2;s:3:"676";i:3;s:3:"698";}}i:56;a:4:{s:1:"C";s:2:"56";s:2:"WX";s:3:"556";s:1:"N";s:5:"eight";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:3:"-19";i:2;s:3:"616";i:3;s:3:"710";}}s:5:"eight";a:4:{s:1:"C";s:2:"56";s:2:"WX";s:3:"556";s:1:"N";s:5:"eight";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:3:"-19";i:2;s:3:"616";i:3;s:3:"710";}}i:57;a:4:{s:1:"C";s:2:"57";s:2:"WX";s:3:"556";s:1:"N";s:4:"nine";s:1:"B";a:4:{i:0;s:2:"78";i:1;s:3:"-19";i:2;s:3:"615";i:3;s:3:"710";}}s:4:"nine";a:4:{s:1:"C";s:2:"57";s:2:"WX";s:3:"556";s:1:"N";s:4:"nine";s:1:"B";a:4:{i:0;s:2:"78";i:1;s:3:"-19";i:2;s:3:"615";i:3;s:3:"710";}}i:58;a:4:{s:1:"C";s:2:"58";s:2:"WX";s:3:"333";s:1:"N";s:5:"colon";s:1:"B";a:4:{i:0;s:2:"92";i:1;s:1:"0";i:2;s:3:"351";i:3;s:3:"512";}}s:5:"colon";a:4:{s:1:"C";s:2:"58";s:2:"WX";s:3:"333";s:1:"N";s:5:"colon";s:1:"B";a:4:{i:0;s:2:"92";i:1;s:1:"0";i:2;s:3:"351";i:3;s:3:"512";}}i:59;a:4:{s:1:"C";s:2:"59";s:2:"WX";s:3:"333";s:1:"N";s:9:"semicolon";s:1:"B";a:4:{i:0;s:2:"56";i:1;s:4:"-168";i:2;s:3:"351";i:3;s:3:"512";}}s:9:"semicolon";a:4:{s:1:"C";s:2:"59";s:2:"WX";s:3:"333";s:1:"N";s:9:"semicolon";s:1:"B";a:4:{i:0;s:2:"56";i:1;s:4:"-168";i:2;s:3:"351";i:3;s:3:"512";}}i:60;a:4:{s:1:"C";s:2:"60";s:2:"WX";s:3:"584";s:1:"N";s:4:"less";s:1:"B";a:4:{i:0;s:2:"82";i:1;s:2:"-8";i:2;s:3:"655";i:3;s:3:"514";}}s:4:"less";a:4:{s:1:"C";s:2:"60";s:2:"WX";s:3:"584";s:1:"N";s:4:"less";s:1:"B";a:4:{i:0;s:2:"82";i:1;s:2:"-8";i:2;s:3:"655";i:3;s:3:"514";}}i:61;a:4:{s:1:"C";s:2:"61";s:2:"WX";s:3:"584";s:1:"N";s:5:"equal";s:1:"B";a:4:{i:0;s:2:"58";i:1;s:2:"87";i:2;s:3:"633";i:3;s:3:"419";}}s:5:"equal";a:4:{s:1:"C";s:2:"61";s:2:"WX";s:3:"584";s:1:"N";s:5:"equal";s:1:"B";a:4:{i:0;s:2:"58";i:1;s:2:"87";i:2;s:3:"633";i:3;s:3:"419";}}i:62;a:4:{s:1:"C";s:2:"62";s:2:"WX";s:3:"584";s:1:"N";s:7:"greater";s:1:"B";a:4:{i:0;s:2:"36";i:1;s:2:"-8";i:2;s:3:"609";i:3;s:3:"514";}}s:7:"greater";a:4:{s:1:"C";s:2:"62";s:2:"WX";s:3:"584";s:1:"N";s:7:"greater";s:1:"B";a:4:{i:0;s:2:"36";i:1;s:2:"-8";i:2;s:3:"609";i:3;s:3:"514";}}i:63;a:4:{s:1:"C";s:2:"63";s:2:"WX";s:3:"611";s:1:"N";s:8:"question";s:1:"B";a:4:{i:0;s:3:"165";i:1;s:1:"0";i:2;s:3:"671";i:3;s:3:"727";}}s:8:"question";a:4:{s:1:"C";s:2:"63";s:2:"WX";s:3:"611";s:1:"N";s:8:"question";s:1:"B";a:4:{i:0;s:3:"165";i:1;s:1:"0";i:2;s:3:"671";i:3;s:3:"727";}}i:64;a:4:{s:1:"C";s:2:"64";s:2:"WX";s:3:"975";s:1:"N";s:2:"at";s:1:"B";a:4:{i:0;s:3:"186";i:1;s:3:"-19";i:2;s:3:"954";i:3;s:3:"737";}}s:2:"at";a:4:{s:1:"C";s:2:"64";s:2:"WX";s:3:"975";s:1:"N";s:2:"at";s:1:"B";a:4:{i:0;s:3:"186";i:1;s:3:"-19";i:2;s:3:"954";i:3;s:3:"737";}}i:65;a:4:{s:1:"C";s:2:"65";s:2:"WX";s:3:"722";s:1:"N";s:1:"A";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:1:"0";i:2;s:3:"702";i:3;s:3:"718";}}s:1:"A";a:4:{s:1:"C";s:2:"65";s:2:"WX";s:3:"722";s:1:"N";s:1:"A";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:1:"0";i:2;s:3:"702";i:3;s:3:"718";}}i:66;a:4:{s:1:"C";s:2:"66";s:2:"WX";s:3:"722";s:1:"N";s:1:"B";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"764";i:3;s:3:"718";}}s:1:"B";a:4:{s:1:"C";s:2:"66";s:2:"WX";s:3:"722";s:1:"N";s:1:"B";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"764";i:3;s:3:"718";}}i:67;a:4:{s:1:"C";s:2:"67";s:2:"WX";s:3:"722";s:1:"N";s:1:"C";s:1:"B";a:4:{i:0;s:3:"107";i:1;s:3:"-19";i:2;s:3:"789";i:3;s:3:"737";}}s:1:"C";a:4:{s:1:"C";s:2:"67";s:2:"WX";s:3:"722";s:1:"N";s:1:"C";s:1:"B";a:4:{i:0;s:3:"107";i:1;s:3:"-19";i:2;s:3:"789";i:3;s:3:"737";}}i:68;a:4:{s:1:"C";s:2:"68";s:2:"WX";s:3:"722";s:1:"N";s:1:"D";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"777";i:3;s:3:"718";}}s:1:"D";a:4:{s:1:"C";s:2:"68";s:2:"WX";s:3:"722";s:1:"N";s:1:"D";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"777";i:3;s:3:"718";}}i:69;a:4:{s:1:"C";s:2:"69";s:2:"WX";s:3:"667";s:1:"N";s:1:"E";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"757";i:3;s:3:"718";}}s:1:"E";a:4:{s:1:"C";s:2:"69";s:2:"WX";s:3:"667";s:1:"N";s:1:"E";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"757";i:3;s:3:"718";}}i:70;a:4:{s:1:"C";s:2:"70";s:2:"WX";s:3:"611";s:1:"N";s:1:"F";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"740";i:3;s:3:"718";}}s:1:"F";a:4:{s:1:"C";s:2:"70";s:2:"WX";s:3:"611";s:1:"N";s:1:"F";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"740";i:3;s:3:"718";}}i:71;a:4:{s:1:"C";s:2:"71";s:2:"WX";s:3:"778";s:1:"N";s:1:"G";s:1:"B";a:4:{i:0;s:3:"108";i:1;s:3:"-19";i:2;s:3:"817";i:3;s:3:"737";}}s:1:"G";a:4:{s:1:"C";s:2:"71";s:2:"WX";s:3:"778";s:1:"N";s:1:"G";s:1:"B";a:4:{i:0;s:3:"108";i:1;s:3:"-19";i:2;s:3:"817";i:3;s:3:"737";}}i:72;a:4:{s:1:"C";s:2:"72";s:2:"WX";s:3:"722";s:1:"N";s:1:"H";s:1:"B";a:4:{i:0;s:2:"71";i:1;s:1:"0";i:2;s:3:"804";i:3;s:3:"718";}}s:1:"H";a:4:{s:1:"C";s:2:"72";s:2:"WX";s:3:"722";s:1:"N";s:1:"H";s:1:"B";a:4:{i:0;s:2:"71";i:1;s:1:"0";i:2;s:3:"804";i:3;s:3:"718";}}i:73;a:4:{s:1:"C";s:2:"73";s:2:"WX";s:3:"278";s:1:"N";s:1:"I";s:1:"B";a:4:{i:0;s:2:"64";i:1;s:1:"0";i:2;s:3:"367";i:3;s:3:"718";}}s:1:"I";a:4:{s:1:"C";s:2:"73";s:2:"WX";s:3:"278";s:1:"N";s:1:"I";s:1:"B";a:4:{i:0;s:2:"64";i:1;s:1:"0";i:2;s:3:"367";i:3;s:3:"718";}}i:74;a:4:{s:1:"C";s:2:"74";s:2:"WX";s:3:"556";s:1:"N";s:1:"J";s:1:"B";a:4:{i:0;s:2:"60";i:1;s:3:"-18";i:2;s:3:"637";i:3;s:3:"718";}}s:1:"J";a:4:{s:1:"C";s:2:"74";s:2:"WX";s:3:"556";s:1:"N";s:1:"J";s:1:"B";a:4:{i:0;s:2:"60";i:1;s:3:"-18";i:2;s:3:"637";i:3;s:3:"718";}}i:75;a:4:{s:1:"C";s:2:"75";s:2:"WX";s:3:"722";s:1:"N";s:1:"K";s:1:"B";a:4:{i:0;s:2:"87";i:1;s:1:"0";i:2;s:3:"858";i:3;s:3:"718";}}s:1:"K";a:4:{s:1:"C";s:2:"75";s:2:"WX";s:3:"722";s:1:"N";s:1:"K";s:1:"B";a:4:{i:0;s:2:"87";i:1;s:1:"0";i:2;s:3:"858";i:3;s:3:"718";}}i:76;a:4:{s:1:"C";s:2:"76";s:2:"WX";s:3:"611";s:1:"N";s:1:"L";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"611";i:3;s:3:"718";}}s:1:"L";a:4:{s:1:"C";s:2:"76";s:2:"WX";s:3:"611";s:1:"N";s:1:"L";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"611";i:3;s:3:"718";}}i:77;a:4:{s:1:"C";s:2:"77";s:2:"WX";s:3:"833";s:1:"N";s:1:"M";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:1:"0";i:2;s:3:"918";i:3;s:3:"718";}}s:1:"M";a:4:{s:1:"C";s:2:"77";s:2:"WX";s:3:"833";s:1:"N";s:1:"M";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:1:"0";i:2;s:3:"918";i:3;s:3:"718";}}i:78;a:4:{s:1:"C";s:2:"78";s:2:"WX";s:3:"722";s:1:"N";s:1:"N";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:1:"0";i:2;s:3:"807";i:3;s:3:"718";}}s:1:"N";a:4:{s:1:"C";s:2:"78";s:2:"WX";s:3:"722";s:1:"N";s:1:"N";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:1:"0";i:2;s:3:"807";i:3;s:3:"718";}}i:79;a:4:{s:1:"C";s:2:"79";s:2:"WX";s:3:"778";s:1:"N";s:1:"O";s:1:"B";a:4:{i:0;s:3:"107";i:1;s:3:"-19";i:2;s:3:"823";i:3;s:3:"737";}}s:1:"O";a:4:{s:1:"C";s:2:"79";s:2:"WX";s:3:"778";s:1:"N";s:1:"O";s:1:"B";a:4:{i:0;s:3:"107";i:1;s:3:"-19";i:2;s:3:"823";i:3;s:3:"737";}}i:80;a:4:{s:1:"C";s:2:"80";s:2:"WX";s:3:"667";s:1:"N";s:1:"P";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"738";i:3;s:3:"718";}}s:1:"P";a:4:{s:1:"C";s:2:"80";s:2:"WX";s:3:"667";s:1:"N";s:1:"P";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"738";i:3;s:3:"718";}}i:81;a:4:{s:1:"C";s:2:"81";s:2:"WX";s:3:"778";s:1:"N";s:1:"Q";s:1:"B";a:4:{i:0;s:3:"107";i:1;s:3:"-52";i:2;s:3:"823";i:3;s:3:"737";}}s:1:"Q";a:4:{s:1:"C";s:2:"81";s:2:"WX";s:3:"778";s:1:"N";s:1:"Q";s:1:"B";a:4:{i:0;s:3:"107";i:1;s:3:"-52";i:2;s:3:"823";i:3;s:3:"737";}}i:82;a:4:{s:1:"C";s:2:"82";s:2:"WX";s:3:"722";s:1:"N";s:1:"R";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"778";i:3;s:3:"718";}}s:1:"R";a:4:{s:1:"C";s:2:"82";s:2:"WX";s:3:"722";s:1:"N";s:1:"R";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"778";i:3;s:3:"718";}}i:83;a:4:{s:1:"C";s:2:"83";s:2:"WX";s:3:"667";s:1:"N";s:1:"S";s:1:"B";a:4:{i:0;s:2:"81";i:1;s:3:"-19";i:2;s:3:"718";i:3;s:3:"737";}}s:1:"S";a:4:{s:1:"C";s:2:"83";s:2:"WX";s:3:"667";s:1:"N";s:1:"S";s:1:"B";a:4:{i:0;s:2:"81";i:1;s:3:"-19";i:2;s:3:"718";i:3;s:3:"737";}}i:84;a:4:{s:1:"C";s:2:"84";s:2:"WX";s:3:"611";s:1:"N";s:1:"T";s:1:"B";a:4:{i:0;s:3:"140";i:1;s:1:"0";i:2;s:3:"751";i:3;s:3:"718";}}s:1:"T";a:4:{s:1:"C";s:2:"84";s:2:"WX";s:3:"611";s:1:"N";s:1:"T";s:1:"B";a:4:{i:0;s:3:"140";i:1;s:1:"0";i:2;s:3:"751";i:3;s:3:"718";}}i:85;a:4:{s:1:"C";s:2:"85";s:2:"WX";s:3:"722";s:1:"N";s:1:"U";s:1:"B";a:4:{i:0;s:3:"116";i:1;s:3:"-19";i:2;s:3:"804";i:3;s:3:"718";}}s:1:"U";a:4:{s:1:"C";s:2:"85";s:2:"WX";s:3:"722";s:1:"N";s:1:"U";s:1:"B";a:4:{i:0;s:3:"116";i:1;s:3:"-19";i:2;s:3:"804";i:3;s:3:"718";}}i:86;a:4:{s:1:"C";s:2:"86";s:2:"WX";s:3:"667";s:1:"N";s:1:"V";s:1:"B";a:4:{i:0;s:3:"172";i:1;s:1:"0";i:2;s:3:"801";i:3;s:3:"718";}}s:1:"V";a:4:{s:1:"C";s:2:"86";s:2:"WX";s:3:"667";s:1:"N";s:1:"V";s:1:"B";a:4:{i:0;s:3:"172";i:1;s:1:"0";i:2;s:3:"801";i:3;s:3:"718";}}i:87;a:4:{s:1:"C";s:2:"87";s:2:"WX";s:3:"944";s:1:"N";s:1:"W";s:1:"B";a:4:{i:0;s:3:"169";i:1;s:1:"0";i:2;s:4:"1082";i:3;s:3:"718";}}s:1:"W";a:4:{s:1:"C";s:2:"87";s:2:"WX";s:3:"944";s:1:"N";s:1:"W";s:1:"B";a:4:{i:0;s:3:"169";i:1;s:1:"0";i:2;s:4:"1082";i:3;s:3:"718";}}i:88;a:4:{s:1:"C";s:2:"88";s:2:"WX";s:3:"667";s:1:"N";s:1:"X";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:1:"0";i:2;s:3:"791";i:3;s:3:"718";}}s:1:"X";a:4:{s:1:"C";s:2:"88";s:2:"WX";s:3:"667";s:1:"N";s:1:"X";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:1:"0";i:2;s:3:"791";i:3;s:3:"718";}}i:89;a:4:{s:1:"C";s:2:"89";s:2:"WX";s:3:"667";s:1:"N";s:1:"Y";s:1:"B";a:4:{i:0;s:3:"168";i:1;s:1:"0";i:2;s:3:"806";i:3;s:3:"718";}}s:1:"Y";a:4:{s:1:"C";s:2:"89";s:2:"WX";s:3:"667";s:1:"N";s:1:"Y";s:1:"B";a:4:{i:0;s:3:"168";i:1;s:1:"0";i:2;s:3:"806";i:3;s:3:"718";}}i:90;a:4:{s:1:"C";s:2:"90";s:2:"WX";s:3:"611";s:1:"N";s:1:"Z";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:1:"0";i:2;s:3:"737";i:3;s:3:"718";}}s:1:"Z";a:4:{s:1:"C";s:2:"90";s:2:"WX";s:3:"611";s:1:"N";s:1:"Z";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:1:"0";i:2;s:3:"737";i:3;s:3:"718";}}i:91;a:4:{s:1:"C";s:2:"91";s:2:"WX";s:3:"333";s:1:"N";s:11:"bracketleft";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:4:"-196";i:2;s:3:"462";i:3;s:3:"722";}}s:11:"bracketleft";a:4:{s:1:"C";s:2:"91";s:2:"WX";s:3:"333";s:1:"N";s:11:"bracketleft";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:4:"-196";i:2;s:3:"462";i:3;s:3:"722";}}i:92;a:4:{s:1:"C";s:2:"92";s:2:"WX";s:3:"278";s:1:"N";s:9:"backslash";s:1:"B";a:4:{i:0;s:3:"124";i:1;s:3:"-19";i:2;s:3:"307";i:3;s:3:"737";}}s:9:"backslash";a:4:{s:1:"C";s:2:"92";s:2:"WX";s:3:"278";s:1:"N";s:9:"backslash";s:1:"B";a:4:{i:0;s:3:"124";i:1;s:3:"-19";i:2;s:3:"307";i:3;s:3:"737";}}i:93;a:4:{s:1:"C";s:2:"93";s:2:"WX";s:3:"333";s:1:"N";s:12:"bracketright";s:1:"B";a:4:{i:0;s:3:"-18";i:1;s:4:"-196";i:2;s:3:"423";i:3;s:3:"722";}}s:12:"bracketright";a:4:{s:1:"C";s:2:"93";s:2:"WX";s:3:"333";s:1:"N";s:12:"bracketright";s:1:"B";a:4:{i:0;s:3:"-18";i:1;s:4:"-196";i:2;s:3:"423";i:3;s:3:"722";}}i:94;a:4:{s:1:"C";s:2:"94";s:2:"WX";s:3:"584";s:1:"N";s:11:"asciicircum";s:1:"B";a:4:{i:0;s:3:"131";i:1;s:3:"323";i:2;s:3:"591";i:3;s:3:"698";}}s:11:"asciicircum";a:4:{s:1:"C";s:2:"94";s:2:"WX";s:3:"584";s:1:"N";s:11:"asciicircum";s:1:"B";a:4:{i:0;s:3:"131";i:1;s:3:"323";i:2;s:3:"591";i:3;s:3:"698";}}i:95;a:4:{s:1:"C";s:2:"95";s:2:"WX";s:3:"556";s:1:"N";s:10:"underscore";s:1:"B";a:4:{i:0;s:3:"-27";i:1;s:4:"-125";i:2;s:3:"540";i:3;s:3:"-75";}}s:10:"underscore";a:4:{s:1:"C";s:2:"95";s:2:"WX";s:3:"556";s:1:"N";s:10:"underscore";s:1:"B";a:4:{i:0;s:3:"-27";i:1;s:4:"-125";i:2;s:3:"540";i:3;s:3:"-75";}}i:96;a:4:{s:1:"C";s:2:"96";s:2:"WX";s:3:"278";s:1:"N";s:9:"quoteleft";s:1:"B";a:4:{i:0;s:3:"165";i:1;s:3:"454";i:2;s:3:"361";i:3;s:3:"727";}}s:9:"quoteleft";a:4:{s:1:"C";s:2:"96";s:2:"WX";s:3:"278";s:1:"N";s:9:"quoteleft";s:1:"B";a:4:{i:0;s:3:"165";i:1;s:3:"454";i:2;s:3:"361";i:3;s:3:"727";}}i:97;a:4:{s:1:"C";s:2:"97";s:2:"WX";s:3:"556";s:1:"N";s:1:"a";s:1:"B";a:4:{i:0;s:2:"55";i:1;s:3:"-14";i:2;s:3:"583";i:3;s:3:"546";}}s:1:"a";a:4:{s:1:"C";s:2:"97";s:2:"WX";s:3:"556";s:1:"N";s:1:"a";s:1:"B";a:4:{i:0;s:2:"55";i:1;s:3:"-14";i:2;s:3:"583";i:3;s:3:"546";}}i:98;a:4:{s:1:"C";s:2:"98";s:2:"WX";s:3:"611";s:1:"N";s:1:"b";s:1:"B";a:4:{i:0;s:2:"61";i:1;s:3:"-14";i:2;s:3:"645";i:3;s:3:"718";}}s:1:"b";a:4:{s:1:"C";s:2:"98";s:2:"WX";s:3:"611";s:1:"N";s:1:"b";s:1:"B";a:4:{i:0;s:2:"61";i:1;s:3:"-14";i:2;s:3:"645";i:3;s:3:"718";}}i:99;a:4:{s:1:"C";s:2:"99";s:2:"WX";s:3:"556";s:1:"N";s:1:"c";s:1:"B";a:4:{i:0;s:2:"79";i:1;s:3:"-14";i:2;s:3:"599";i:3;s:3:"546";}}s:1:"c";a:4:{s:1:"C";s:2:"99";s:2:"WX";s:3:"556";s:1:"N";s:1:"c";s:1:"B";a:4:{i:0;s:2:"79";i:1;s:3:"-14";i:2;s:3:"599";i:3;s:3:"546";}}i:100;a:4:{s:1:"C";s:3:"100";s:2:"WX";s:3:"611";s:1:"N";s:1:"d";s:1:"B";a:4:{i:0;s:2:"82";i:1;s:3:"-14";i:2;s:3:"704";i:3;s:3:"718";}}s:1:"d";a:4:{s:1:"C";s:3:"100";s:2:"WX";s:3:"611";s:1:"N";s:1:"d";s:1:"B";a:4:{i:0;s:2:"82";i:1;s:3:"-14";i:2;s:3:"704";i:3;s:3:"718";}}i:101;a:4:{s:1:"C";s:3:"101";s:2:"WX";s:3:"556";s:1:"N";s:1:"e";s:1:"B";a:4:{i:0;s:2:"70";i:1;s:3:"-14";i:2;s:3:"593";i:3;s:3:"546";}}s:1:"e";a:4:{s:1:"C";s:3:"101";s:2:"WX";s:3:"556";s:1:"N";s:1:"e";s:1:"B";a:4:{i:0;s:2:"70";i:1;s:3:"-14";i:2;s:3:"593";i:3;s:3:"546";}}i:102;a:5:{s:1:"C";s:3:"102";s:2:"WX";s:3:"333";s:1:"N";s:1:"f";s:1:"B";a:4:{i:0;s:2:"87";i:1;s:1:"0";i:2;s:3:"469";i:3;s:3:"727";}s:1:"L";a:2:{i:0;s:1:"l";i:1;s:2:"fl";}}s:1:"f";a:5:{s:1:"C";s:3:"102";s:2:"WX";s:3:"333";s:1:"N";s:1:"f";s:1:"B";a:4:{i:0;s:2:"87";i:1;s:1:"0";i:2;s:3:"469";i:3;s:3:"727";}s:1:"L";a:2:{i:0;s:1:"l";i:1;s:2:"fl";}}i:103;a:4:{s:1:"C";s:3:"103";s:2:"WX";s:3:"611";s:1:"N";s:1:"g";s:1:"B";a:4:{i:0;s:2:"38";i:1;s:4:"-217";i:2;s:3:"666";i:3;s:3:"546";}}s:1:"g";a:4:{s:1:"C";s:3:"103";s:2:"WX";s:3:"611";s:1:"N";s:1:"g";s:1:"B";a:4:{i:0;s:2:"38";i:1;s:4:"-217";i:2;s:3:"666";i:3;s:3:"546";}}i:104;a:4:{s:1:"C";s:3:"104";s:2:"WX";s:3:"611";s:1:"N";s:1:"h";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:1:"0";i:2;s:3:"629";i:3;s:3:"718";}}s:1:"h";a:4:{s:1:"C";s:3:"104";s:2:"WX";s:3:"611";s:1:"N";s:1:"h";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:1:"0";i:2;s:3:"629";i:3;s:3:"718";}}i:105;a:4:{s:1:"C";s:3:"105";s:2:"WX";s:3:"278";s:1:"N";s:1:"i";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:1:"0";i:2;s:3:"363";i:3;s:3:"725";}}s:1:"i";a:4:{s:1:"C";s:3:"105";s:2:"WX";s:3:"278";s:1:"N";s:1:"i";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:1:"0";i:2;s:3:"363";i:3;s:3:"725";}}i:106;a:4:{s:1:"C";s:3:"106";s:2:"WX";s:3:"278";s:1:"N";s:1:"j";s:1:"B";a:4:{i:0;s:3:"-42";i:1;s:4:"-214";i:2;s:3:"363";i:3;s:3:"725";}}s:1:"j";a:4:{s:1:"C";s:3:"106";s:2:"WX";s:3:"278";s:1:"N";s:1:"j";s:1:"B";a:4:{i:0;s:3:"-42";i:1;s:4:"-214";i:2;s:3:"363";i:3;s:3:"725";}}i:107;a:4:{s:1:"C";s:3:"107";s:2:"WX";s:3:"556";s:1:"N";s:1:"k";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:1:"0";i:2;s:3:"670";i:3;s:3:"718";}}s:1:"k";a:4:{s:1:"C";s:3:"107";s:2:"WX";s:3:"556";s:1:"N";s:1:"k";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:1:"0";i:2;s:3:"670";i:3;s:3:"718";}}i:108;a:4:{s:1:"C";s:3:"108";s:2:"WX";s:3:"278";s:1:"N";s:1:"l";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:1:"0";i:2;s:3:"362";i:3;s:3:"718";}}s:1:"l";a:4:{s:1:"C";s:3:"108";s:2:"WX";s:3:"278";s:1:"N";s:1:"l";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:1:"0";i:2;s:3:"362";i:3;s:3:"718";}}i:109;a:4:{s:1:"C";s:3:"109";s:2:"WX";s:3:"889";s:1:"N";s:1:"m";s:1:"B";a:4:{i:0;s:2:"64";i:1;s:1:"0";i:2;s:3:"909";i:3;s:3:"546";}}s:1:"m";a:4:{s:1:"C";s:3:"109";s:2:"WX";s:3:"889";s:1:"N";s:1:"m";s:1:"B";a:4:{i:0;s:2:"64";i:1;s:1:"0";i:2;s:3:"909";i:3;s:3:"546";}}i:110;a:4:{s:1:"C";s:3:"110";s:2:"WX";s:3:"611";s:1:"N";s:1:"n";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:1:"0";i:2;s:3:"629";i:3;s:3:"546";}}s:1:"n";a:4:{s:1:"C";s:3:"110";s:2:"WX";s:3:"611";s:1:"N";s:1:"n";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:1:"0";i:2;s:3:"629";i:3;s:3:"546";}}i:111;a:4:{s:1:"C";s:3:"111";s:2:"WX";s:3:"611";s:1:"N";s:1:"o";s:1:"B";a:4:{i:0;s:2:"82";i:1;s:3:"-14";i:2;s:3:"643";i:3;s:3:"546";}}s:1:"o";a:4:{s:1:"C";s:3:"111";s:2:"WX";s:3:"611";s:1:"N";s:1:"o";s:1:"B";a:4:{i:0;s:2:"82";i:1;s:3:"-14";i:2;s:3:"643";i:3;s:3:"546";}}i:112;a:4:{s:1:"C";s:3:"112";s:2:"WX";s:3:"611";s:1:"N";s:1:"p";s:1:"B";a:4:{i:0;s:2:"18";i:1;s:4:"-207";i:2;s:3:"645";i:3;s:3:"546";}}s:1:"p";a:4:{s:1:"C";s:3:"112";s:2:"WX";s:3:"611";s:1:"N";s:1:"p";s:1:"B";a:4:{i:0;s:2:"18";i:1;s:4:"-207";i:2;s:3:"645";i:3;s:3:"546";}}i:113;a:4:{s:1:"C";s:3:"113";s:2:"WX";s:3:"611";s:1:"N";s:1:"q";s:1:"B";a:4:{i:0;s:2:"80";i:1;s:4:"-207";i:2;s:3:"665";i:3;s:3:"546";}}s:1:"q";a:4:{s:1:"C";s:3:"113";s:2:"WX";s:3:"611";s:1:"N";s:1:"q";s:1:"B";a:4:{i:0;s:2:"80";i:1;s:4:"-207";i:2;s:3:"665";i:3;s:3:"546";}}i:114;a:4:{s:1:"C";s:3:"114";s:2:"WX";s:3:"389";s:1:"N";s:1:"r";s:1:"B";a:4:{i:0;s:2:"64";i:1;s:1:"0";i:2;s:3:"489";i:3;s:3:"546";}}s:1:"r";a:4:{s:1:"C";s:3:"114";s:2:"WX";s:3:"389";s:1:"N";s:1:"r";s:1:"B";a:4:{i:0;s:2:"64";i:1;s:1:"0";i:2;s:3:"489";i:3;s:3:"546";}}i:115;a:4:{s:1:"C";s:3:"115";s:2:"WX";s:3:"556";s:1:"N";s:1:"s";s:1:"B";a:4:{i:0;s:2:"63";i:1;s:3:"-14";i:2;s:3:"584";i:3;s:3:"546";}}s:1:"s";a:4:{s:1:"C";s:3:"115";s:2:"WX";s:3:"556";s:1:"N";s:1:"s";s:1:"B";a:4:{i:0;s:2:"63";i:1;s:3:"-14";i:2;s:3:"584";i:3;s:3:"546";}}i:116;a:4:{s:1:"C";s:3:"116";s:2:"WX";s:3:"333";s:1:"N";s:1:"t";s:1:"B";a:4:{i:0;s:3:"100";i:1;s:2:"-6";i:2;s:3:"422";i:3;s:3:"676";}}s:1:"t";a:4:{s:1:"C";s:3:"116";s:2:"WX";s:3:"333";s:1:"N";s:1:"t";s:1:"B";a:4:{i:0;s:3:"100";i:1;s:2:"-6";i:2;s:3:"422";i:3;s:3:"676";}}i:117;a:4:{s:1:"C";s:3:"117";s:2:"WX";s:3:"611";s:1:"N";s:1:"u";s:1:"B";a:4:{i:0;s:2:"98";i:1;s:3:"-14";i:2;s:3:"658";i:3;s:3:"532";}}s:1:"u";a:4:{s:1:"C";s:3:"117";s:2:"WX";s:3:"611";s:1:"N";s:1:"u";s:1:"B";a:4:{i:0;s:2:"98";i:1;s:3:"-14";i:2;s:3:"658";i:3;s:3:"532";}}i:118;a:4:{s:1:"C";s:3:"118";s:2:"WX";s:3:"556";s:1:"N";s:1:"v";s:1:"B";a:4:{i:0;s:3:"126";i:1;s:1:"0";i:2;s:3:"656";i:3;s:3:"532";}}s:1:"v";a:4:{s:1:"C";s:3:"118";s:2:"WX";s:3:"556";s:1:"N";s:1:"v";s:1:"B";a:4:{i:0;s:3:"126";i:1;s:1:"0";i:2;s:3:"656";i:3;s:3:"532";}}i:119;a:4:{s:1:"C";s:3:"119";s:2:"WX";s:3:"778";s:1:"N";s:1:"w";s:1:"B";a:4:{i:0;s:3:"123";i:1;s:1:"0";i:2;s:3:"882";i:3;s:3:"532";}}s:1:"w";a:4:{s:1:"C";s:3:"119";s:2:"WX";s:3:"778";s:1:"N";s:1:"w";s:1:"B";a:4:{i:0;s:3:"123";i:1;s:1:"0";i:2;s:3:"882";i:3;s:3:"532";}}i:120;a:4:{s:1:"C";s:3:"120";s:2:"WX";s:3:"556";s:1:"N";s:1:"x";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:1:"0";i:2;s:3:"648";i:3;s:3:"532";}}s:1:"x";a:4:{s:1:"C";s:3:"120";s:2:"WX";s:3:"556";s:1:"N";s:1:"x";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:1:"0";i:2;s:3:"648";i:3;s:3:"532";}}i:121;a:4:{s:1:"C";s:3:"121";s:2:"WX";s:3:"556";s:1:"N";s:1:"y";s:1:"B";a:4:{i:0;s:2:"42";i:1;s:4:"-214";i:2;s:3:"652";i:3;s:3:"532";}}s:1:"y";a:4:{s:1:"C";s:3:"121";s:2:"WX";s:3:"556";s:1:"N";s:1:"y";s:1:"B";a:4:{i:0;s:2:"42";i:1;s:4:"-214";i:2;s:3:"652";i:3;s:3:"532";}}i:122;a:4:{s:1:"C";s:3:"122";s:2:"WX";s:3:"500";s:1:"N";s:1:"z";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:1:"0";i:2;s:3:"583";i:3;s:3:"532";}}s:1:"z";a:4:{s:1:"C";s:3:"122";s:2:"WX";s:3:"500";s:1:"N";s:1:"z";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:1:"0";i:2;s:3:"583";i:3;s:3:"532";}}i:123;a:4:{s:1:"C";s:3:"123";s:2:"WX";s:3:"389";s:1:"N";s:9:"braceleft";s:1:"B";a:4:{i:0;s:2:"94";i:1;s:4:"-196";i:2;s:3:"518";i:3;s:3:"722";}}s:9:"braceleft";a:4:{s:1:"C";s:3:"123";s:2:"WX";s:3:"389";s:1:"N";s:9:"braceleft";s:1:"B";a:4:{i:0;s:2:"94";i:1;s:4:"-196";i:2;s:3:"518";i:3;s:3:"722";}}i:124;a:4:{s:1:"C";s:3:"124";s:2:"WX";s:3:"280";s:1:"N";s:3:"bar";s:1:"B";a:4:{i:0;s:2:"36";i:1;s:4:"-225";i:2;s:3:"361";i:3;s:3:"775";}}s:3:"bar";a:4:{s:1:"C";s:3:"124";s:2:"WX";s:3:"280";s:1:"N";s:3:"bar";s:1:"B";a:4:{i:0;s:2:"36";i:1;s:4:"-225";i:2;s:3:"361";i:3;s:3:"775";}}i:125;a:4:{s:1:"C";s:3:"125";s:2:"WX";s:3:"389";s:1:"N";s:10:"braceright";s:1:"B";a:4:{i:0;s:3:"-18";i:1;s:4:"-196";i:2;s:3:"407";i:3;s:3:"722";}}s:10:"braceright";a:4:{s:1:"C";s:3:"125";s:2:"WX";s:3:"389";s:1:"N";s:10:"braceright";s:1:"B";a:4:{i:0;s:3:"-18";i:1;s:4:"-196";i:2;s:3:"407";i:3;s:3:"722";}}i:126;a:4:{s:1:"C";s:3:"126";s:2:"WX";s:3:"584";s:1:"N";s:10:"asciitilde";s:1:"B";a:4:{i:0;s:3:"115";i:1;s:3:"163";i:2;s:3:"577";i:3;s:3:"343";}}s:10:"asciitilde";a:4:{s:1:"C";s:3:"126";s:2:"WX";s:3:"584";s:1:"N";s:10:"asciitilde";s:1:"B";a:4:{i:0;s:3:"115";i:1;s:3:"163";i:2;s:3:"577";i:3;s:3:"343";}}i:161;a:4:{s:1:"C";s:3:"161";s:2:"WX";s:3:"333";s:1:"N";s:10:"exclamdown";s:1:"B";a:4:{i:0;s:2:"50";i:1;s:4:"-186";i:2;s:3:"353";i:3;s:3:"532";}}s:10:"exclamdown";a:4:{s:1:"C";s:3:"161";s:2:"WX";s:3:"333";s:1:"N";s:10:"exclamdown";s:1:"B";a:4:{i:0;s:2:"50";i:1;s:4:"-186";i:2;s:3:"353";i:3;s:3:"532";}}i:162;a:4:{s:1:"C";s:3:"162";s:2:"WX";s:3:"556";s:1:"N";s:4:"cent";s:1:"B";a:4:{i:0;s:2:"79";i:1;s:4:"-118";i:2;s:3:"599";i:3;s:3:"628";}}s:4:"cent";a:4:{s:1:"C";s:3:"162";s:2:"WX";s:3:"556";s:1:"N";s:4:"cent";s:1:"B";a:4:{i:0;s:2:"79";i:1;s:4:"-118";i:2;s:3:"599";i:3;s:3:"628";}}i:163;a:4:{s:1:"C";s:3:"163";s:2:"WX";s:3:"556";s:1:"N";s:8:"sterling";s:1:"B";a:4:{i:0;s:2:"50";i:1;s:3:"-16";i:2;s:3:"635";i:3;s:3:"718";}}s:8:"sterling";a:4:{s:1:"C";s:3:"163";s:2:"WX";s:3:"556";s:1:"N";s:8:"sterling";s:1:"B";a:4:{i:0;s:2:"50";i:1;s:3:"-16";i:2;s:3:"635";i:3;s:3:"718";}}i:164;a:4:{s:1:"C";s:3:"164";s:2:"WX";s:3:"167";s:1:"N";s:8:"fraction";s:1:"B";a:4:{i:0;s:4:"-174";i:1;s:3:"-19";i:2;s:3:"487";i:3;s:3:"710";}}s:8:"fraction";a:4:{s:1:"C";s:3:"164";s:2:"WX";s:3:"167";s:1:"N";s:8:"fraction";s:1:"B";a:4:{i:0;s:4:"-174";i:1;s:3:"-19";i:2;s:3:"487";i:3;s:3:"710";}}i:165;a:4:{s:1:"C";s:3:"165";s:2:"WX";s:3:"556";s:1:"N";s:3:"yen";s:1:"B";a:4:{i:0;s:2:"60";i:1;s:1:"0";i:2;s:3:"713";i:3;s:3:"698";}}s:3:"yen";a:4:{s:1:"C";s:3:"165";s:2:"WX";s:3:"556";s:1:"N";s:3:"yen";s:1:"B";a:4:{i:0;s:2:"60";i:1;s:1:"0";i:2;s:3:"713";i:3;s:3:"698";}}i:166;a:4:{s:1:"C";s:3:"166";s:2:"WX";s:3:"556";s:1:"N";s:6:"florin";s:1:"B";a:4:{i:0;s:3:"-50";i:1;s:4:"-210";i:2;s:3:"669";i:3;s:3:"737";}}s:6:"florin";a:4:{s:1:"C";s:3:"166";s:2:"WX";s:3:"556";s:1:"N";s:6:"florin";s:1:"B";a:4:{i:0;s:3:"-50";i:1;s:4:"-210";i:2;s:3:"669";i:3;s:3:"737";}}i:167;a:4:{s:1:"C";s:3:"167";s:2:"WX";s:3:"556";s:1:"N";s:7:"section";s:1:"B";a:4:{i:0;s:2:"61";i:1;s:4:"-184";i:2;s:3:"598";i:3;s:3:"727";}}s:7:"section";a:4:{s:1:"C";s:3:"167";s:2:"WX";s:3:"556";s:1:"N";s:7:"section";s:1:"B";a:4:{i:0;s:2:"61";i:1;s:4:"-184";i:2;s:3:"598";i:3;s:3:"727";}}i:168;a:4:{s:1:"C";s:3:"168";s:2:"WX";s:3:"556";s:1:"N";s:8:"currency";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:2:"76";i:2;s:3:"680";i:3;s:3:"636";}}s:8:"currency";a:4:{s:1:"C";s:3:"168";s:2:"WX";s:3:"556";s:1:"N";s:8:"currency";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:2:"76";i:2;s:3:"680";i:3;s:3:"636";}}i:169;a:4:{s:1:"C";s:3:"169";s:2:"WX";s:3:"238";s:1:"N";s:11:"quotesingle";s:1:"B";a:4:{i:0;s:3:"165";i:1;s:3:"447";i:2;s:3:"321";i:3;s:3:"718";}}s:11:"quotesingle";a:4:{s:1:"C";s:3:"169";s:2:"WX";s:3:"238";s:1:"N";s:11:"quotesingle";s:1:"B";a:4:{i:0;s:3:"165";i:1;s:3:"447";i:2;s:3:"321";i:3;s:3:"718";}}i:170;a:4:{s:1:"C";s:3:"170";s:2:"WX";s:3:"500";s:1:"N";s:12:"quotedblleft";s:1:"B";a:4:{i:0;s:3:"160";i:1;s:3:"454";i:2;s:3:"588";i:3;s:3:"727";}}s:12:"quotedblleft";a:4:{s:1:"C";s:3:"170";s:2:"WX";s:3:"500";s:1:"N";s:12:"quotedblleft";s:1:"B";a:4:{i:0;s:3:"160";i:1;s:3:"454";i:2;s:3:"588";i:3;s:3:"727";}}i:171;a:4:{s:1:"C";s:3:"171";s:2:"WX";s:3:"556";s:1:"N";s:13:"guillemotleft";s:1:"B";a:4:{i:0;s:3:"135";i:1;s:2:"76";i:2;s:3:"571";i:3;s:3:"484";}}s:13:"guillemotleft";a:4:{s:1:"C";s:3:"171";s:2:"WX";s:3:"556";s:1:"N";s:13:"guillemotleft";s:1:"B";a:4:{i:0;s:3:"135";i:1;s:2:"76";i:2;s:3:"571";i:3;s:3:"484";}}i:172;a:4:{s:1:"C";s:3:"172";s:2:"WX";s:3:"333";s:1:"N";s:13:"guilsinglleft";s:1:"B";a:4:{i:0;s:3:"130";i:1;s:2:"76";i:2;s:3:"353";i:3;s:3:"484";}}s:13:"guilsinglleft";a:4:{s:1:"C";s:3:"172";s:2:"WX";s:3:"333";s:1:"N";s:13:"guilsinglleft";s:1:"B";a:4:{i:0;s:3:"130";i:1;s:2:"76";i:2;s:3:"353";i:3;s:3:"484";}}i:173;a:4:{s:1:"C";s:3:"173";s:2:"WX";s:3:"333";s:1:"N";s:14:"guilsinglright";s:1:"B";a:4:{i:0;s:2:"99";i:1;s:2:"76";i:2;s:3:"322";i:3;s:3:"484";}}s:14:"guilsinglright";a:4:{s:1:"C";s:3:"173";s:2:"WX";s:3:"333";s:1:"N";s:14:"guilsinglright";s:1:"B";a:4:{i:0;s:2:"99";i:1;s:2:"76";i:2;s:3:"322";i:3;s:3:"484";}}i:174;a:4:{s:1:"C";s:3:"174";s:2:"WX";s:3:"611";s:1:"N";s:2:"fi";s:1:"B";a:4:{i:0;s:2:"87";i:1;s:1:"0";i:2;s:3:"696";i:3;s:3:"727";}}s:2:"fi";a:4:{s:1:"C";s:3:"174";s:2:"WX";s:3:"611";s:1:"N";s:2:"fi";s:1:"B";a:4:{i:0;s:2:"87";i:1;s:1:"0";i:2;s:3:"696";i:3;s:3:"727";}}i:175;a:4:{s:1:"C";s:3:"175";s:2:"WX";s:3:"611";s:1:"N";s:2:"fl";s:1:"B";a:4:{i:0;s:2:"87";i:1;s:1:"0";i:2;s:3:"695";i:3;s:3:"727";}}s:2:"fl";a:4:{s:1:"C";s:3:"175";s:2:"WX";s:3:"611";s:1:"N";s:2:"fl";s:1:"B";a:4:{i:0;s:2:"87";i:1;s:1:"0";i:2;s:3:"695";i:3;s:3:"727";}}i:177;a:4:{s:1:"C";s:3:"177";s:2:"WX";s:3:"556";s:1:"N";s:6:"endash";s:1:"B";a:4:{i:0;s:2:"48";i:1;s:3:"227";i:2;s:3:"627";i:3;s:3:"333";}}s:6:"endash";a:4:{s:1:"C";s:3:"177";s:2:"WX";s:3:"556";s:1:"N";s:6:"endash";s:1:"B";a:4:{i:0;s:2:"48";i:1;s:3:"227";i:2;s:3:"627";i:3;s:3:"333";}}i:178;a:4:{s:1:"C";s:3:"178";s:2:"WX";s:3:"556";s:1:"N";s:6:"dagger";s:1:"B";a:4:{i:0;s:3:"118";i:1;s:4:"-171";i:2;s:3:"626";i:3;s:3:"718";}}s:6:"dagger";a:4:{s:1:"C";s:3:"178";s:2:"WX";s:3:"556";s:1:"N";s:6:"dagger";s:1:"B";a:4:{i:0;s:3:"118";i:1;s:4:"-171";i:2;s:3:"626";i:3;s:3:"718";}}i:179;a:4:{s:1:"C";s:3:"179";s:2:"WX";s:3:"556";s:1:"N";s:9:"daggerdbl";s:1:"B";a:4:{i:0;s:2:"46";i:1;s:4:"-171";i:2;s:3:"628";i:3;s:3:"718";}}s:9:"daggerdbl";a:4:{s:1:"C";s:3:"179";s:2:"WX";s:3:"556";s:1:"N";s:9:"daggerdbl";s:1:"B";a:4:{i:0;s:2:"46";i:1;s:4:"-171";i:2;s:3:"628";i:3;s:3:"718";}}i:180;a:4:{s:1:"C";s:3:"180";s:2:"WX";s:3:"278";s:1:"N";s:14:"periodcentered";s:1:"B";a:4:{i:0;s:3:"110";i:1;s:3:"172";i:2;s:3:"276";i:3;s:3:"334";}}s:14:"periodcentered";a:4:{s:1:"C";s:3:"180";s:2:"WX";s:3:"278";s:1:"N";s:14:"periodcentered";s:1:"B";a:4:{i:0;s:3:"110";i:1;s:3:"172";i:2;s:3:"276";i:3;s:3:"334";}}i:182;a:4:{s:1:"C";s:3:"182";s:2:"WX";s:3:"556";s:1:"N";s:9:"paragraph";s:1:"B";a:4:{i:0;s:2:"98";i:1;s:4:"-191";i:2;s:3:"688";i:3;s:3:"700";}}s:9:"paragraph";a:4:{s:1:"C";s:3:"182";s:2:"WX";s:3:"556";s:1:"N";s:9:"paragraph";s:1:"B";a:4:{i:0;s:2:"98";i:1;s:4:"-191";i:2;s:3:"688";i:3;s:3:"700";}}i:183;a:4:{s:1:"C";s:3:"183";s:2:"WX";s:3:"350";s:1:"N";s:6:"bullet";s:1:"B";a:4:{i:0;s:2:"83";i:1;s:3:"194";i:2;s:3:"420";i:3;s:3:"524";}}s:6:"bullet";a:4:{s:1:"C";s:3:"183";s:2:"WX";s:3:"350";s:1:"N";s:6:"bullet";s:1:"B";a:4:{i:0;s:2:"83";i:1;s:3:"194";i:2;s:3:"420";i:3;s:3:"524";}}i:184;a:4:{s:1:"C";s:3:"184";s:2:"WX";s:3:"278";s:1:"N";s:14:"quotesinglbase";s:1:"B";a:4:{i:0;s:2:"41";i:1;s:4:"-146";i:2;s:3:"236";i:3;s:3:"127";}}s:14:"quotesinglbase";a:4:{s:1:"C";s:3:"184";s:2:"WX";s:3:"278";s:1:"N";s:14:"quotesinglbase";s:1:"B";a:4:{i:0;s:2:"41";i:1;s:4:"-146";i:2;s:3:"236";i:3;s:3:"127";}}i:185;a:4:{s:1:"C";s:3:"185";s:2:"WX";s:3:"500";s:1:"N";s:12:"quotedblbase";s:1:"B";a:4:{i:0;s:2:"36";i:1;s:4:"-146";i:2;s:3:"463";i:3;s:3:"127";}}s:12:"quotedblbase";a:4:{s:1:"C";s:3:"185";s:2:"WX";s:3:"500";s:1:"N";s:12:"quotedblbase";s:1:"B";a:4:{i:0;s:2:"36";i:1;s:4:"-146";i:2;s:3:"463";i:3;s:3:"127";}}i:186;a:4:{s:1:"C";s:3:"186";s:2:"WX";s:3:"500";s:1:"N";s:13:"quotedblright";s:1:"B";a:4:{i:0;s:3:"162";i:1;s:3:"445";i:2;s:3:"589";i:3;s:3:"718";}}s:13:"quotedblright";a:4:{s:1:"C";s:3:"186";s:2:"WX";s:3:"500";s:1:"N";s:13:"quotedblright";s:1:"B";a:4:{i:0;s:3:"162";i:1;s:3:"445";i:2;s:3:"589";i:3;s:3:"718";}}i:187;a:4:{s:1:"C";s:3:"187";s:2:"WX";s:3:"556";s:1:"N";s:14:"guillemotright";s:1:"B";a:4:{i:0;s:3:"104";i:1;s:2:"76";i:2;s:3:"540";i:3;s:3:"484";}}s:14:"guillemotright";a:4:{s:1:"C";s:3:"187";s:2:"WX";s:3:"556";s:1:"N";s:14:"guillemotright";s:1:"B";a:4:{i:0;s:3:"104";i:1;s:2:"76";i:2;s:3:"540";i:3;s:3:"484";}}i:188;a:4:{s:1:"C";s:3:"188";s:2:"WX";s:4:"1000";s:1:"N";s:8:"ellipsis";s:1:"B";a:4:{i:0;s:2:"92";i:1;s:1:"0";i:2;s:3:"939";i:3;s:3:"146";}}s:8:"ellipsis";a:4:{s:1:"C";s:3:"188";s:2:"WX";s:4:"1000";s:1:"N";s:8:"ellipsis";s:1:"B";a:4:{i:0;s:2:"92";i:1;s:1:"0";i:2;s:3:"939";i:3;s:3:"146";}}i:189;a:4:{s:1:"C";s:3:"189";s:2:"WX";s:4:"1000";s:1:"N";s:11:"perthousand";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:3:"-19";i:2;s:4:"1038";i:3;s:3:"710";}}s:11:"perthousand";a:4:{s:1:"C";s:3:"189";s:2:"WX";s:4:"1000";s:1:"N";s:11:"perthousand";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:3:"-19";i:2;s:4:"1038";i:3;s:3:"710";}}i:191;a:4:{s:1:"C";s:3:"191";s:2:"WX";s:3:"611";s:1:"N";s:12:"questiondown";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:4:"-195";i:2;s:3:"559";i:3;s:3:"532";}}s:12:"questiondown";a:4:{s:1:"C";s:3:"191";s:2:"WX";s:3:"611";s:1:"N";s:12:"questiondown";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:4:"-195";i:2;s:3:"559";i:3;s:3:"532";}}i:193;a:4:{s:1:"C";s:3:"193";s:2:"WX";s:3:"333";s:1:"N";s:5:"grave";s:1:"B";a:4:{i:0;s:3:"136";i:1;s:3:"604";i:2;s:3:"353";i:3;s:3:"750";}}s:5:"grave";a:4:{s:1:"C";s:3:"193";s:2:"WX";s:3:"333";s:1:"N";s:5:"grave";s:1:"B";a:4:{i:0;s:3:"136";i:1;s:3:"604";i:2;s:3:"353";i:3;s:3:"750";}}i:194;a:4:{s:1:"C";s:3:"194";s:2:"WX";s:3:"333";s:1:"N";s:5:"acute";s:1:"B";a:4:{i:0;s:3:"236";i:1;s:3:"604";i:2;s:3:"515";i:3;s:3:"750";}}s:5:"acute";a:4:{s:1:"C";s:3:"194";s:2:"WX";s:3:"333";s:1:"N";s:5:"acute";s:1:"B";a:4:{i:0;s:3:"236";i:1;s:3:"604";i:2;s:3:"515";i:3;s:3:"750";}}i:195;a:4:{s:1:"C";s:3:"195";s:2:"WX";s:3:"333";s:1:"N";s:10:"circumflex";s:1:"B";a:4:{i:0;s:3:"118";i:1;s:3:"604";i:2;s:3:"471";i:3;s:3:"750";}}s:10:"circumflex";a:4:{s:1:"C";s:3:"195";s:2:"WX";s:3:"333";s:1:"N";s:10:"circumflex";s:1:"B";a:4:{i:0;s:3:"118";i:1;s:3:"604";i:2;s:3:"471";i:3;s:3:"750";}}i:196;a:4:{s:1:"C";s:3:"196";s:2:"WX";s:3:"333";s:1:"N";s:5:"tilde";s:1:"B";a:4:{i:0;s:3:"113";i:1;s:3:"610";i:2;s:3:"507";i:3;s:3:"737";}}s:5:"tilde";a:4:{s:1:"C";s:3:"196";s:2:"WX";s:3:"333";s:1:"N";s:5:"tilde";s:1:"B";a:4:{i:0;s:3:"113";i:1;s:3:"610";i:2;s:3:"507";i:3;s:3:"737";}}i:197;a:4:{s:1:"C";s:3:"197";s:2:"WX";s:3:"333";s:1:"N";s:6:"macron";s:1:"B";a:4:{i:0;s:3:"122";i:1;s:3:"604";i:2;s:3:"483";i:3;s:3:"678";}}s:6:"macron";a:4:{s:1:"C";s:3:"197";s:2:"WX";s:3:"333";s:1:"N";s:6:"macron";s:1:"B";a:4:{i:0;s:3:"122";i:1;s:3:"604";i:2;s:3:"483";i:3;s:3:"678";}}i:198;a:4:{s:1:"C";s:3:"198";s:2:"WX";s:3:"333";s:1:"N";s:5:"breve";s:1:"B";a:4:{i:0;s:3:"156";i:1;s:3:"604";i:2;s:3:"494";i:3;s:3:"750";}}s:5:"breve";a:4:{s:1:"C";s:3:"198";s:2:"WX";s:3:"333";s:1:"N";s:5:"breve";s:1:"B";a:4:{i:0;s:3:"156";i:1;s:3:"604";i:2;s:3:"494";i:3;s:3:"750";}}i:199;a:4:{s:1:"C";s:3:"199";s:2:"WX";s:3:"333";s:1:"N";s:9:"dotaccent";s:1:"B";a:4:{i:0;s:3:"235";i:1;s:3:"614";i:2;s:3:"385";i:3;s:3:"729";}}s:9:"dotaccent";a:4:{s:1:"C";s:3:"199";s:2:"WX";s:3:"333";s:1:"N";s:9:"dotaccent";s:1:"B";a:4:{i:0;s:3:"235";i:1;s:3:"614";i:2;s:3:"385";i:3;s:3:"729";}}i:200;a:4:{s:1:"C";s:3:"200";s:2:"WX";s:3:"333";s:1:"N";s:8:"dieresis";s:1:"B";a:4:{i:0;s:3:"137";i:1;s:3:"614";i:2;s:3:"482";i:3;s:3:"729";}}s:8:"dieresis";a:4:{s:1:"C";s:3:"200";s:2:"WX";s:3:"333";s:1:"N";s:8:"dieresis";s:1:"B";a:4:{i:0;s:3:"137";i:1;s:3:"614";i:2;s:3:"482";i:3;s:3:"729";}}i:202;a:4:{s:1:"C";s:3:"202";s:2:"WX";s:3:"333";s:1:"N";s:4:"ring";s:1:"B";a:4:{i:0;s:3:"200";i:1;s:3:"568";i:2;s:3:"420";i:3;s:3:"776";}}s:4:"ring";a:4:{s:1:"C";s:3:"202";s:2:"WX";s:3:"333";s:1:"N";s:4:"ring";s:1:"B";a:4:{i:0;s:3:"200";i:1;s:3:"568";i:2;s:3:"420";i:3;s:3:"776";}}i:203;a:4:{s:1:"C";s:3:"203";s:2:"WX";s:3:"333";s:1:"N";s:7:"cedilla";s:1:"B";a:4:{i:0;s:3:"-37";i:1;s:4:"-228";i:2;s:3:"220";i:3;s:1:"0";}}s:7:"cedilla";a:4:{s:1:"C";s:3:"203";s:2:"WX";s:3:"333";s:1:"N";s:7:"cedilla";s:1:"B";a:4:{i:0;s:3:"-37";i:1;s:4:"-228";i:2;s:3:"220";i:3;s:1:"0";}}i:205;a:4:{s:1:"C";s:3:"205";s:2:"WX";s:3:"333";s:1:"N";s:12:"hungarumlaut";s:1:"B";a:4:{i:0;s:3:"137";i:1;s:3:"604";i:2;s:3:"645";i:3;s:3:"750";}}s:12:"hungarumlaut";a:4:{s:1:"C";s:3:"205";s:2:"WX";s:3:"333";s:1:"N";s:12:"hungarumlaut";s:1:"B";a:4:{i:0;s:3:"137";i:1;s:3:"604";i:2;s:3:"645";i:3;s:3:"750";}}i:206;a:4:{s:1:"C";s:3:"206";s:2:"WX";s:3:"333";s:1:"N";s:6:"ogonek";s:1:"B";a:4:{i:0;s:2:"41";i:1;s:4:"-228";i:2;s:3:"264";i:3;s:1:"0";}}s:6:"ogonek";a:4:{s:1:"C";s:3:"206";s:2:"WX";s:3:"333";s:1:"N";s:6:"ogonek";s:1:"B";a:4:{i:0;s:2:"41";i:1;s:4:"-228";i:2;s:3:"264";i:3;s:1:"0";}}i:207;a:4:{s:1:"C";s:3:"207";s:2:"WX";s:3:"333";s:1:"N";s:5:"caron";s:1:"B";a:4:{i:0;s:3:"149";i:1;s:3:"604";i:2;s:3:"502";i:3;s:3:"750";}}s:5:"caron";a:4:{s:1:"C";s:3:"207";s:2:"WX";s:3:"333";s:1:"N";s:5:"caron";s:1:"B";a:4:{i:0;s:3:"149";i:1;s:3:"604";i:2;s:3:"502";i:3;s:3:"750";}}i:208;a:4:{s:1:"C";s:3:"208";s:2:"WX";s:4:"1000";s:1:"N";s:6:"emdash";s:1:"B";a:4:{i:0;s:2:"48";i:1;s:3:"227";i:2;s:4:"1071";i:3;s:3:"333";}}s:6:"emdash";a:4:{s:1:"C";s:3:"208";s:2:"WX";s:4:"1000";s:1:"N";s:6:"emdash";s:1:"B";a:4:{i:0;s:2:"48";i:1;s:3:"227";i:2;s:4:"1071";i:3;s:3:"333";}}i:225;a:4:{s:1:"C";s:3:"225";s:2:"WX";s:4:"1000";s:1:"N";s:2:"AE";s:1:"B";a:4:{i:0;s:1:"5";i:1;s:1:"0";i:2;s:4:"1100";i:3;s:3:"718";}}s:2:"AE";a:4:{s:1:"C";s:3:"225";s:2:"WX";s:4:"1000";s:1:"N";s:2:"AE";s:1:"B";a:4:{i:0;s:1:"5";i:1;s:1:"0";i:2;s:4:"1100";i:3;s:3:"718";}}i:227;a:4:{s:1:"C";s:3:"227";s:2:"WX";s:3:"370";s:1:"N";s:11:"ordfeminine";s:1:"B";a:4:{i:0;s:3:"125";i:1;s:3:"401";i:2;s:3:"465";i:3;s:3:"737";}}s:11:"ordfeminine";a:4:{s:1:"C";s:3:"227";s:2:"WX";s:3:"370";s:1:"N";s:11:"ordfeminine";s:1:"B";a:4:{i:0;s:3:"125";i:1;s:3:"401";i:2;s:3:"465";i:3;s:3:"737";}}i:232;a:4:{s:1:"C";s:3:"232";s:2:"WX";s:3:"611";s:1:"N";s:6:"Lslash";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:1:"0";i:2;s:3:"611";i:3;s:3:"718";}}s:6:"Lslash";a:4:{s:1:"C";s:3:"232";s:2:"WX";s:3:"611";s:1:"N";s:6:"Lslash";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:1:"0";i:2;s:3:"611";i:3;s:3:"718";}}i:233;a:4:{s:1:"C";s:3:"233";s:2:"WX";s:3:"778";s:1:"N";s:6:"Oslash";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-27";i:2;s:3:"894";i:3;s:3:"745";}}s:6:"Oslash";a:4:{s:1:"C";s:3:"233";s:2:"WX";s:3:"778";s:1:"N";s:6:"Oslash";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-27";i:2;s:3:"894";i:3;s:3:"745";}}i:234;a:4:{s:1:"C";s:3:"234";s:2:"WX";s:4:"1000";s:1:"N";s:2:"OE";s:1:"B";a:4:{i:0;s:2:"99";i:1;s:3:"-19";i:2;s:4:"1114";i:3;s:3:"737";}}s:2:"OE";a:4:{s:1:"C";s:3:"234";s:2:"WX";s:4:"1000";s:1:"N";s:2:"OE";s:1:"B";a:4:{i:0;s:2:"99";i:1;s:3:"-19";i:2;s:4:"1114";i:3;s:3:"737";}}i:235;a:4:{s:1:"C";s:3:"235";s:2:"WX";s:3:"365";s:1:"N";s:12:"ordmasculine";s:1:"B";a:4:{i:0;s:3:"123";i:1;s:3:"401";i:2;s:3:"485";i:3;s:3:"737";}}s:12:"ordmasculine";a:4:{s:1:"C";s:3:"235";s:2:"WX";s:3:"365";s:1:"N";s:12:"ordmasculine";s:1:"B";a:4:{i:0;s:3:"123";i:1;s:3:"401";i:2;s:3:"485";i:3;s:3:"737";}}i:241;a:4:{s:1:"C";s:3:"241";s:2:"WX";s:3:"889";s:1:"N";s:2:"ae";s:1:"B";a:4:{i:0;s:2:"56";i:1;s:3:"-14";i:2;s:3:"923";i:3;s:3:"546";}}s:2:"ae";a:4:{s:1:"C";s:3:"241";s:2:"WX";s:3:"889";s:1:"N";s:2:"ae";s:1:"B";a:4:{i:0;s:2:"56";i:1;s:3:"-14";i:2;s:3:"923";i:3;s:3:"546";}}i:245;a:4:{s:1:"C";s:3:"245";s:2:"WX";s:3:"278";s:1:"N";s:8:"dotlessi";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:1:"0";i:2;s:3:"322";i:3;s:3:"532";}}s:8:"dotlessi";a:4:{s:1:"C";s:3:"245";s:2:"WX";s:3:"278";s:1:"N";s:8:"dotlessi";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:1:"0";i:2;s:3:"322";i:3;s:3:"532";}}i:248;a:4:{s:1:"C";s:3:"248";s:2:"WX";s:3:"278";s:1:"N";s:6:"lslash";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:1:"0";i:2;s:3:"407";i:3;s:3:"718";}}s:6:"lslash";a:4:{s:1:"C";s:3:"248";s:2:"WX";s:3:"278";s:1:"N";s:6:"lslash";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:1:"0";i:2;s:3:"407";i:3;s:3:"718";}}i:249;a:4:{s:1:"C";s:3:"249";s:2:"WX";s:3:"611";s:1:"N";s:6:"oslash";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:3:"-29";i:2;s:3:"701";i:3;s:3:"560";}}s:6:"oslash";a:4:{s:1:"C";s:3:"249";s:2:"WX";s:3:"611";s:1:"N";s:6:"oslash";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:3:"-29";i:2;s:3:"701";i:3;s:3:"560";}}i:250;a:4:{s:1:"C";s:3:"250";s:2:"WX";s:3:"944";s:1:"N";s:2:"oe";s:1:"B";a:4:{i:0;s:2:"82";i:1;s:3:"-14";i:2;s:3:"977";i:3;s:3:"546";}}s:2:"oe";a:4:{s:1:"C";s:3:"250";s:2:"WX";s:3:"944";s:1:"N";s:2:"oe";s:1:"B";a:4:{i:0;s:2:"82";i:1;s:3:"-14";i:2;s:3:"977";i:3;s:3:"546";}}i:251;a:4:{s:1:"C";s:3:"251";s:2:"WX";s:3:"611";s:1:"N";s:10:"germandbls";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:3:"-14";i:2;s:3:"657";i:3;s:3:"731";}}s:10:"germandbls";a:4:{s:1:"C";s:3:"251";s:2:"WX";s:3:"611";s:1:"N";s:10:"germandbls";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:3:"-14";i:2;s:3:"657";i:3;s:3:"731";}}s:9:"Idieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:9:"Idieresis";s:1:"B";a:4:{i:0;s:2:"64";i:1;s:1:"0";i:2;s:3:"494";i:3;s:3:"915";}}s:6:"eacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"eacute";s:1:"B";a:4:{i:0;s:2:"70";i:1;s:3:"-14";i:2;s:3:"627";i:3;s:3:"750";}}s:6:"abreve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"abreve";s:1:"B";a:4:{i:0;s:2:"55";i:1;s:3:"-14";i:2;s:3:"606";i:3;s:3:"750";}}s:13:"uhungarumlaut";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:13:"uhungarumlaut";s:1:"B";a:4:{i:0;s:2:"98";i:1;s:3:"-14";i:2;s:3:"784";i:3;s:3:"750";}}s:6:"ecaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"ecaron";s:1:"B";a:4:{i:0;s:2:"70";i:1;s:3:"-14";i:2;s:3:"614";i:3;s:3:"750";}}s:9:"Ydieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:9:"Ydieresis";s:1:"B";a:4:{i:0;s:3:"168";i:1;s:1:"0";i:2;s:3:"806";i:3;s:3:"915";}}s:6:"divide";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"584";s:1:"N";s:6:"divide";s:1:"B";a:4:{i:0;s:2:"82";i:1;s:3:"-42";i:2;s:3:"610";i:3;s:3:"548";}}s:6:"Yacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Yacute";s:1:"B";a:4:{i:0;s:3:"168";i:1;s:1:"0";i:2;s:3:"806";i:3;s:3:"936";}}s:11:"Acircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:11:"Acircumflex";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:1:"0";i:2;s:3:"706";i:3;s:3:"936";}}s:6:"aacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"aacute";s:1:"B";a:4:{i:0;s:2:"55";i:1;s:3:"-14";i:2;s:3:"627";i:3;s:3:"750";}}s:11:"Ucircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:11:"Ucircumflex";s:1:"B";a:4:{i:0;s:3:"116";i:1;s:3:"-19";i:2;s:3:"804";i:3;s:3:"936";}}s:6:"yacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"yacute";s:1:"B";a:4:{i:0;s:2:"42";i:1;s:4:"-214";i:2;s:3:"652";i:3;s:3:"750";}}s:12:"scommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:12:"scommaaccent";s:1:"B";a:4:{i:0;s:2:"63";i:1;s:4:"-228";i:2;s:3:"584";i:3;s:3:"546";}}s:11:"ecircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:11:"ecircumflex";s:1:"B";a:4:{i:0;s:2:"70";i:1;s:3:"-14";i:2;s:3:"593";i:3;s:3:"750";}}s:5:"Uring";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:5:"Uring";s:1:"B";a:4:{i:0;s:3:"116";i:1;s:3:"-19";i:2;s:3:"804";i:3;s:3:"962";}}s:9:"Udieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:9:"Udieresis";s:1:"B";a:4:{i:0;s:3:"116";i:1;s:3:"-19";i:2;s:3:"804";i:3;s:3:"915";}}s:7:"aogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:7:"aogonek";s:1:"B";a:4:{i:0;s:2:"55";i:1;s:4:"-224";i:2;s:3:"583";i:3;s:3:"546";}}s:6:"Uacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Uacute";s:1:"B";a:4:{i:0;s:3:"116";i:1;s:3:"-19";i:2;s:3:"804";i:3;s:3:"936";}}s:7:"uogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:7:"uogonek";s:1:"B";a:4:{i:0;s:2:"98";i:1;s:4:"-228";i:2;s:3:"658";i:3;s:3:"532";}}s:9:"Edieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:9:"Edieresis";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"757";i:3;s:3:"915";}}s:6:"Dcroat";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Dcroat";s:1:"B";a:4:{i:0;s:2:"62";i:1;s:1:"0";i:2;s:3:"777";i:3;s:3:"718";}}s:11:"commaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"250";s:1:"N";s:11:"commaaccent";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:4:"-228";i:2;s:3:"188";i:3;s:3:"-50";}}s:9:"copyright";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"737";s:1:"N";s:9:"copyright";s:1:"B";a:4:{i:0;s:2:"56";i:1;s:3:"-19";i:2;s:3:"835";i:3;s:3:"737";}}s:7:"Emacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:7:"Emacron";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"757";i:3;s:3:"864";}}s:6:"ccaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"ccaron";s:1:"B";a:4:{i:0;s:2:"79";i:1;s:3:"-14";i:2;s:3:"614";i:3;s:3:"750";}}s:5:"aring";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:5:"aring";s:1:"B";a:4:{i:0;s:2:"55";i:1;s:3:"-14";i:2;s:3:"583";i:3;s:3:"776";}}s:12:"Ncommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:12:"Ncommaaccent";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:4:"-228";i:2;s:3:"807";i:3;s:3:"718";}}s:6:"lacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:6:"lacute";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:1:"0";i:2;s:3:"528";i:3;s:3:"936";}}s:6:"agrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"agrave";s:1:"B";a:4:{i:0;s:2:"55";i:1;s:3:"-14";i:2;s:3:"583";i:3;s:3:"750";}}s:12:"Tcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:12:"Tcommaaccent";s:1:"B";a:4:{i:0;s:3:"140";i:1;s:4:"-228";i:2;s:3:"751";i:3;s:3:"718";}}s:6:"Cacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Cacute";s:1:"B";a:4:{i:0;s:3:"107";i:1;s:3:"-19";i:2;s:3:"789";i:3;s:3:"936";}}s:6:"atilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"atilde";s:1:"B";a:4:{i:0;s:2:"55";i:1;s:3:"-14";i:2;s:3:"619";i:3;s:3:"737";}}s:10:"Edotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:10:"Edotaccent";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"757";i:3;s:3:"915";}}s:6:"scaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"scaron";s:1:"B";a:4:{i:0;s:2:"63";i:1;s:3:"-14";i:2;s:3:"614";i:3;s:3:"750";}}s:8:"scedilla";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:8:"scedilla";s:1:"B";a:4:{i:0;s:2:"63";i:1;s:4:"-228";i:2;s:3:"584";i:3;s:3:"546";}}s:6:"iacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:6:"iacute";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:1:"0";i:2;s:3:"488";i:3;s:3:"750";}}s:7:"lozenge";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"494";s:1:"N";s:7:"lozenge";s:1:"B";a:4:{i:0;s:2:"90";i:1;s:1:"0";i:2;s:3:"564";i:3;s:3:"745";}}s:6:"Rcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Rcaron";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"778";i:3;s:3:"936";}}s:12:"Gcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"778";s:1:"N";s:12:"Gcommaaccent";s:1:"B";a:4:{i:0;s:3:"108";i:1;s:4:"-228";i:2;s:3:"817";i:3;s:3:"737";}}s:11:"ucircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:11:"ucircumflex";s:1:"B";a:4:{i:0;s:2:"98";i:1;s:3:"-14";i:2;s:3:"658";i:3;s:3:"750";}}s:11:"acircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:11:"acircumflex";s:1:"B";a:4:{i:0;s:2:"55";i:1;s:3:"-14";i:2;s:3:"583";i:3;s:3:"750";}}s:7:"Amacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:7:"Amacron";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:1:"0";i:2;s:3:"718";i:3;s:3:"864";}}s:6:"rcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"389";s:1:"N";s:6:"rcaron";s:1:"B";a:4:{i:0;s:2:"64";i:1;s:1:"0";i:2;s:3:"530";i:3;s:3:"750";}}s:8:"ccedilla";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:8:"ccedilla";s:1:"B";a:4:{i:0;s:2:"79";i:1;s:4:"-228";i:2;s:3:"599";i:3;s:3:"546";}}s:10:"Zdotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:10:"Zdotaccent";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:1:"0";i:2;s:3:"737";i:3;s:3:"915";}}s:5:"Thorn";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:5:"Thorn";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"716";i:3;s:3:"718";}}s:7:"Omacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"778";s:1:"N";s:7:"Omacron";s:1:"B";a:4:{i:0;s:3:"107";i:1;s:3:"-19";i:2;s:3:"823";i:3;s:3:"864";}}s:6:"Racute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Racute";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"778";i:3;s:3:"936";}}s:6:"Sacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Sacute";s:1:"B";a:4:{i:0;s:2:"81";i:1;s:3:"-19";i:2;s:3:"722";i:3;s:3:"936";}}s:6:"dcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"743";s:1:"N";s:6:"dcaron";s:1:"B";a:4:{i:0;s:2:"82";i:1;s:3:"-14";i:2;s:3:"903";i:3;s:3:"718";}}s:7:"Umacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:7:"Umacron";s:1:"B";a:4:{i:0;s:3:"116";i:1;s:3:"-19";i:2;s:3:"804";i:3;s:3:"864";}}s:5:"uring";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:5:"uring";s:1:"B";a:4:{i:0;s:2:"98";i:1;s:3:"-14";i:2;s:3:"658";i:3;s:3:"776";}}s:13:"threesuperior";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"333";s:1:"N";s:13:"threesuperior";s:1:"B";a:4:{i:0;s:2:"91";i:1;s:3:"271";i:2;s:3:"441";i:3;s:3:"710";}}s:6:"Ograve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"778";s:1:"N";s:6:"Ograve";s:1:"B";a:4:{i:0;s:3:"107";i:1;s:3:"-19";i:2;s:3:"823";i:3;s:3:"936";}}s:6:"Agrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Agrave";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:1:"0";i:2;s:3:"702";i:3;s:3:"936";}}s:6:"Abreve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Abreve";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:1:"0";i:2;s:3:"729";i:3;s:3:"936";}}s:8:"multiply";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"584";s:1:"N";s:8:"multiply";s:1:"B";a:4:{i:0;s:2:"57";i:1;s:1:"1";i:2;s:3:"635";i:3;s:3:"505";}}s:6:"uacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"uacute";s:1:"B";a:4:{i:0;s:2:"98";i:1;s:3:"-14";i:2;s:3:"658";i:3;s:3:"750";}}s:6:"Tcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"Tcaron";s:1:"B";a:4:{i:0;s:3:"140";i:1;s:1:"0";i:2;s:3:"751";i:3;s:3:"936";}}s:11:"partialdiff";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"494";s:1:"N";s:11:"partialdiff";s:1:"B";a:4:{i:0;s:2:"43";i:1;s:3:"-21";i:2;s:3:"585";i:3;s:3:"750";}}s:9:"ydieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:9:"ydieresis";s:1:"B";a:4:{i:0;s:2:"42";i:1;s:4:"-214";i:2;s:3:"652";i:3;s:3:"729";}}s:6:"Nacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Nacute";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:1:"0";i:2;s:3:"807";i:3;s:3:"936";}}s:11:"icircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:11:"icircumflex";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:1:"0";i:2;s:3:"444";i:3;s:3:"750";}}s:11:"Ecircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:11:"Ecircumflex";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"757";i:3;s:3:"936";}}s:9:"adieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:9:"adieresis";s:1:"B";a:4:{i:0;s:2:"55";i:1;s:3:"-14";i:2;s:3:"594";i:3;s:3:"729";}}s:9:"edieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:9:"edieresis";s:1:"B";a:4:{i:0;s:2:"70";i:1;s:3:"-14";i:2;s:3:"594";i:3;s:3:"729";}}s:6:"cacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"cacute";s:1:"B";a:4:{i:0;s:2:"79";i:1;s:3:"-14";i:2;s:3:"627";i:3;s:3:"750";}}s:6:"nacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"nacute";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:1:"0";i:2;s:3:"654";i:3;s:3:"750";}}s:7:"umacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:7:"umacron";s:1:"B";a:4:{i:0;s:2:"98";i:1;s:3:"-14";i:2;s:3:"658";i:3;s:3:"678";}}s:6:"Ncaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Ncaron";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:1:"0";i:2;s:3:"807";i:3;s:3:"936";}}s:6:"Iacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:6:"Iacute";s:1:"B";a:4:{i:0;s:2:"64";i:1;s:1:"0";i:2;s:3:"528";i:3;s:3:"936";}}s:9:"plusminus";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"584";s:1:"N";s:9:"plusminus";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:1:"0";i:2;s:3:"625";i:3;s:3:"506";}}s:9:"brokenbar";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"280";s:1:"N";s:9:"brokenbar";s:1:"B";a:4:{i:0;s:2:"52";i:1;s:4:"-150";i:2;s:3:"345";i:3;s:3:"700";}}s:10:"registered";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"737";s:1:"N";s:10:"registered";s:1:"B";a:4:{i:0;s:2:"55";i:1;s:3:"-19";i:2;s:3:"834";i:3;s:3:"737";}}s:6:"Gbreve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"778";s:1:"N";s:6:"Gbreve";s:1:"B";a:4:{i:0;s:3:"108";i:1;s:3:"-19";i:2;s:3:"817";i:3;s:3:"936";}}s:10:"Idotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:10:"Idotaccent";s:1:"B";a:4:{i:0;s:2:"64";i:1;s:1:"0";i:2;s:3:"397";i:3;s:3:"915";}}s:9:"summation";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"summation";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:3:"-10";i:2;s:3:"670";i:3;s:3:"706";}}s:6:"Egrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Egrave";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"757";i:3;s:3:"936";}}s:6:"racute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"389";s:1:"N";s:6:"racute";s:1:"B";a:4:{i:0;s:2:"64";i:1;s:1:"0";i:2;s:3:"543";i:3;s:3:"750";}}s:7:"omacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:7:"omacron";s:1:"B";a:4:{i:0;s:2:"82";i:1;s:3:"-14";i:2;s:3:"643";i:3;s:3:"678";}}s:6:"Zacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"Zacute";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:1:"0";i:2;s:3:"737";i:3;s:3:"936";}}s:6:"Zcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"Zcaron";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:1:"0";i:2;s:3:"737";i:3;s:3:"936";}}s:12:"greaterequal";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"549";s:1:"N";s:12:"greaterequal";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:1:"0";i:2;s:3:"629";i:3;s:3:"704";}}s:3:"Eth";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:3:"Eth";s:1:"B";a:4:{i:0;s:2:"62";i:1;s:1:"0";i:2;s:3:"777";i:3;s:3:"718";}}s:8:"Ccedilla";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:8:"Ccedilla";s:1:"B";a:4:{i:0;s:3:"107";i:1;s:4:"-228";i:2;s:3:"789";i:3;s:3:"737";}}s:12:"lcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:12:"lcommaaccent";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:4:"-228";i:2;s:3:"362";i:3;s:3:"718";}}s:6:"tcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"389";s:1:"N";s:6:"tcaron";s:1:"B";a:4:{i:0;s:3:"100";i:1;s:2:"-6";i:2;s:3:"608";i:3;s:3:"878";}}s:7:"eogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:7:"eogonek";s:1:"B";a:4:{i:0;s:2:"70";i:1;s:4:"-228";i:2;s:3:"593";i:3;s:3:"546";}}s:7:"Uogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:7:"Uogonek";s:1:"B";a:4:{i:0;s:3:"116";i:1;s:4:"-228";i:2;s:3:"804";i:3;s:3:"718";}}s:6:"Aacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Aacute";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:1:"0";i:2;s:3:"750";i:3;s:3:"936";}}s:9:"Adieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:9:"Adieresis";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:1:"0";i:2;s:3:"716";i:3;s:3:"915";}}s:6:"egrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"egrave";s:1:"B";a:4:{i:0;s:2:"70";i:1;s:3:"-14";i:2;s:3:"593";i:3;s:3:"750";}}s:6:"zacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"zacute";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:1:"0";i:2;s:3:"599";i:3;s:3:"750";}}s:7:"iogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:7:"iogonek";s:1:"B";a:4:{i:0;s:3:"-14";i:1;s:4:"-224";i:2;s:3:"363";i:3;s:3:"725";}}s:6:"Oacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"778";s:1:"N";s:6:"Oacute";s:1:"B";a:4:{i:0;s:3:"107";i:1;s:3:"-19";i:2;s:3:"823";i:3;s:3:"936";}}s:6:"oacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"oacute";s:1:"B";a:4:{i:0;s:2:"82";i:1;s:3:"-14";i:2;s:3:"654";i:3;s:3:"750";}}s:7:"amacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:7:"amacron";s:1:"B";a:4:{i:0;s:2:"55";i:1;s:3:"-14";i:2;s:3:"595";i:3;s:3:"678";}}s:6:"sacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"sacute";s:1:"B";a:4:{i:0;s:2:"63";i:1;s:3:"-14";i:2;s:3:"627";i:3;s:3:"750";}}s:9:"idieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:9:"idieresis";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:1:"0";i:2;s:3:"455";i:3;s:3:"729";}}s:11:"Ocircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"778";s:1:"N";s:11:"Ocircumflex";s:1:"B";a:4:{i:0;s:3:"107";i:1;s:3:"-19";i:2;s:3:"823";i:3;s:3:"936";}}s:6:"Ugrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Ugrave";s:1:"B";a:4:{i:0;s:3:"116";i:1;s:3:"-19";i:2;s:3:"804";i:3;s:3:"936";}}s:5:"Delta";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"612";s:1:"N";s:5:"Delta";s:1:"B";a:4:{i:0;s:1:"6";i:1;s:1:"0";i:2;s:3:"608";i:3;s:3:"688";}}s:5:"thorn";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:5:"thorn";s:1:"B";a:4:{i:0;s:2:"18";i:1;s:4:"-208";i:2;s:3:"645";i:3;s:3:"718";}}s:11:"twosuperior";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"333";s:1:"N";s:11:"twosuperior";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:3:"283";i:2;s:3:"449";i:3;s:3:"710";}}s:9:"Odieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"778";s:1:"N";s:9:"Odieresis";s:1:"B";a:4:{i:0;s:3:"107";i:1;s:3:"-19";i:2;s:3:"823";i:3;s:3:"915";}}s:2:"mu";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:2:"mu";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:4:"-207";i:2;s:3:"658";i:3;s:3:"532";}}s:6:"igrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:6:"igrave";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:1:"0";i:2;s:3:"326";i:3;s:3:"750";}}s:13:"ohungarumlaut";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:13:"ohungarumlaut";s:1:"B";a:4:{i:0;s:2:"82";i:1;s:3:"-14";i:2;s:3:"784";i:3;s:3:"750";}}s:7:"Eogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:7:"Eogonek";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:4:"-224";i:2;s:3:"757";i:3;s:3:"718";}}s:6:"dcroat";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"dcroat";s:1:"B";a:4:{i:0;s:2:"82";i:1;s:3:"-14";i:2;s:3:"789";i:3;s:3:"718";}}s:13:"threequarters";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"834";s:1:"N";s:13:"threequarters";s:1:"B";a:4:{i:0;s:2:"99";i:1;s:3:"-19";i:2;s:3:"839";i:3;s:3:"710";}}s:8:"Scedilla";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:8:"Scedilla";s:1:"B";a:4:{i:0;s:2:"81";i:1;s:4:"-228";i:2;s:3:"718";i:3;s:3:"737";}}s:6:"lcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"400";s:1:"N";s:6:"lcaron";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:1:"0";i:2;s:3:"561";i:3;s:3:"718";}}s:12:"Kcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:12:"Kcommaaccent";s:1:"B";a:4:{i:0;s:2:"87";i:1;s:4:"-228";i:2;s:3:"858";i:3;s:3:"718";}}s:6:"Lacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"Lacute";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"611";i:3;s:3:"936";}}s:9:"trademark";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:4:"1000";s:1:"N";s:9:"trademark";s:1:"B";a:4:{i:0;s:3:"179";i:1;s:3:"306";i:2;s:4:"1109";i:3;s:3:"718";}}s:10:"edotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:10:"edotaccent";s:1:"B";a:4:{i:0;s:2:"70";i:1;s:3:"-14";i:2;s:3:"593";i:3;s:3:"729";}}s:6:"Igrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:6:"Igrave";s:1:"B";a:4:{i:0;s:2:"64";i:1;s:1:"0";i:2;s:3:"367";i:3;s:3:"936";}}s:7:"Imacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:7:"Imacron";s:1:"B";a:4:{i:0;s:2:"64";i:1;s:1:"0";i:2;s:3:"496";i:3;s:3:"864";}}s:6:"Lcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"Lcaron";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"643";i:3;s:3:"718";}}s:7:"onehalf";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"834";s:1:"N";s:7:"onehalf";s:1:"B";a:4:{i:0;s:3:"132";i:1;s:3:"-19";i:2;s:3:"858";i:3;s:3:"710";}}s:9:"lessequal";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"549";s:1:"N";s:9:"lessequal";s:1:"B";a:4:{i:0;s:2:"29";i:1;s:1:"0";i:2;s:3:"676";i:3;s:3:"704";}}s:11:"ocircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:11:"ocircumflex";s:1:"B";a:4:{i:0;s:2:"82";i:1;s:3:"-14";i:2;s:3:"643";i:3;s:3:"750";}}s:6:"ntilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"ntilde";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:1:"0";i:2;s:3:"646";i:3;s:3:"737";}}s:13:"Uhungarumlaut";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:13:"Uhungarumlaut";s:1:"B";a:4:{i:0;s:3:"116";i:1;s:3:"-19";i:2;s:3:"880";i:3;s:3:"936";}}s:6:"Eacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Eacute";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"757";i:3;s:3:"936";}}s:7:"emacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:7:"emacron";s:1:"B";a:4:{i:0;s:2:"70";i:1;s:3:"-14";i:2;s:3:"595";i:3;s:3:"678";}}s:6:"gbreve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"gbreve";s:1:"B";a:4:{i:0;s:2:"38";i:1;s:4:"-217";i:2;s:3:"666";i:3;s:3:"750";}}s:10:"onequarter";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"834";s:1:"N";s:10:"onequarter";s:1:"B";a:4:{i:0;s:3:"132";i:1;s:3:"-19";i:2;s:3:"806";i:3;s:3:"710";}}s:6:"Scaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Scaron";s:1:"B";a:4:{i:0;s:2:"81";i:1;s:3:"-19";i:2;s:3:"718";i:3;s:3:"936";}}s:12:"Scommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:12:"Scommaaccent";s:1:"B";a:4:{i:0;s:2:"81";i:1;s:4:"-228";i:2;s:3:"718";i:3;s:3:"737";}}s:13:"Ohungarumlaut";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"778";s:1:"N";s:13:"Ohungarumlaut";s:1:"B";a:4:{i:0;s:3:"107";i:1;s:3:"-19";i:2;s:3:"908";i:3;s:3:"936";}}s:6:"degree";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"400";s:1:"N";s:6:"degree";s:1:"B";a:4:{i:0;s:3:"175";i:1;s:3:"426";i:2;s:3:"467";i:3;s:3:"712";}}s:6:"ograve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"ograve";s:1:"B";a:4:{i:0;s:2:"82";i:1;s:3:"-14";i:2;s:3:"643";i:3;s:3:"750";}}s:6:"Ccaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Ccaron";s:1:"B";a:4:{i:0;s:3:"107";i:1;s:3:"-19";i:2;s:3:"789";i:3;s:3:"936";}}s:6:"ugrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"ugrave";s:1:"B";a:4:{i:0;s:2:"98";i:1;s:3:"-14";i:2;s:3:"658";i:3;s:3:"750";}}s:7:"radical";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"549";s:1:"N";s:7:"radical";s:1:"B";a:4:{i:0;s:3:"112";i:1;s:3:"-46";i:2;s:3:"689";i:3;s:3:"850";}}s:6:"Dcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Dcaron";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"777";i:3;s:3:"936";}}s:12:"rcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"389";s:1:"N";s:12:"rcommaaccent";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:4:"-228";i:2;s:3:"489";i:3;s:3:"546";}}s:6:"Ntilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Ntilde";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:1:"0";i:2;s:3:"807";i:3;s:3:"923";}}s:6:"otilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"otilde";s:1:"B";a:4:{i:0;s:2:"82";i:1;s:3:"-14";i:2;s:3:"646";i:3;s:3:"737";}}s:12:"Rcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:12:"Rcommaaccent";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:4:"-228";i:2;s:3:"778";i:3;s:3:"718";}}s:12:"Lcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:12:"Lcommaaccent";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:4:"-228";i:2;s:3:"611";i:3;s:3:"718";}}s:6:"Atilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Atilde";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:1:"0";i:2;s:3:"741";i:3;s:3:"923";}}s:7:"Aogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:7:"Aogonek";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:4:"-224";i:2;s:3:"702";i:3;s:3:"718";}}s:5:"Aring";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:5:"Aring";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:1:"0";i:2;s:3:"702";i:3;s:3:"962";}}s:6:"Otilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"778";s:1:"N";s:6:"Otilde";s:1:"B";a:4:{i:0;s:3:"107";i:1;s:3:"-19";i:2;s:3:"823";i:3;s:3:"923";}}s:10:"zdotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:10:"zdotaccent";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:1:"0";i:2;s:3:"583";i:3;s:3:"729";}}s:6:"Ecaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Ecaron";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"757";i:3;s:3:"936";}}s:7:"Iogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:7:"Iogonek";s:1:"B";a:4:{i:0;s:3:"-41";i:1;s:4:"-228";i:2;s:3:"367";i:3;s:3:"718";}}s:12:"kcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:12:"kcommaaccent";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:4:"-228";i:2;s:3:"670";i:3;s:3:"718";}}s:5:"minus";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"584";s:1:"N";s:5:"minus";s:1:"B";a:4:{i:0;s:2:"82";i:1;s:3:"197";i:2;s:3:"610";i:3;s:3:"309";}}s:11:"Icircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:11:"Icircumflex";s:1:"B";a:4:{i:0;s:2:"64";i:1;s:1:"0";i:2;s:3:"484";i:3;s:3:"936";}}s:6:"ncaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"ncaron";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:1:"0";i:2;s:3:"641";i:3;s:3:"750";}}s:12:"tcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"333";s:1:"N";s:12:"tcommaaccent";s:1:"B";a:4:{i:0;s:2:"58";i:1;s:4:"-228";i:2;s:3:"422";i:3;s:3:"676";}}s:10:"logicalnot";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"584";s:1:"N";s:10:"logicalnot";s:1:"B";a:4:{i:0;s:3:"105";i:1;s:3:"108";i:2;s:3:"633";i:3;s:3:"419";}}s:9:"odieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:9:"odieresis";s:1:"B";a:4:{i:0;s:2:"82";i:1;s:3:"-14";i:2;s:3:"643";i:3;s:3:"729";}}s:9:"udieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:9:"udieresis";s:1:"B";a:4:{i:0;s:2:"98";i:1;s:3:"-14";i:2;s:3:"658";i:3;s:3:"729";}}s:8:"notequal";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"549";s:1:"N";s:8:"notequal";s:1:"B";a:4:{i:0;s:2:"32";i:1;s:3:"-49";i:2;s:3:"630";i:3;s:3:"570";}}s:12:"gcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:12:"gcommaaccent";s:1:"B";a:4:{i:0;s:2:"38";i:1;s:4:"-217";i:2;s:3:"666";i:3;s:3:"850";}}s:3:"eth";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:3:"eth";s:1:"B";a:4:{i:0;s:2:"82";i:1;s:3:"-14";i:2;s:3:"670";i:3;s:3:"737";}}s:6:"zcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"zcaron";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:1:"0";i:2;s:3:"586";i:3;s:3:"750";}}s:12:"ncommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:12:"ncommaaccent";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:4:"-228";i:2;s:3:"629";i:3;s:3:"546";}}s:11:"onesuperior";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"333";s:1:"N";s:11:"onesuperior";s:1:"B";a:4:{i:0;s:3:"148";i:1;s:3:"283";i:2;s:3:"388";i:3;s:3:"710";}}s:7:"imacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:7:"imacron";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:1:"0";i:2;s:3:"429";i:3;s:3:"678";}}s:4:"Euro";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:4:"Euro";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:1:"0";i:2;s:1:"0";i:3;s:1:"0";}}}s:3:"KPX";a:134:{s:1:"A";a:48:{s:1:"C";s:3:"-40";s:6:"Cacute";s:3:"-40";s:6:"Ccaron";s:3:"-40";s:8:"Ccedilla";s:3:"-40";s:1:"G";s:3:"-50";s:6:"Gbreve";s:3:"-50";s:12:"Gcommaaccent";s:3:"-50";s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"Q";s:3:"-40";s:1:"T";s:3:"-90";s:6:"Tcaron";s:3:"-90";s:12:"Tcommaaccent";s:3:"-90";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:3:"-80";s:1:"W";s:3:"-60";s:1:"Y";s:4:"-110";s:6:"Yacute";s:4:"-110";s:9:"Ydieresis";s:4:"-110";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"v";s:3:"-40";s:1:"w";s:3:"-30";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:6:"Aacute";a:48:{s:1:"C";s:3:"-40";s:6:"Cacute";s:3:"-40";s:6:"Ccaron";s:3:"-40";s:8:"Ccedilla";s:3:"-40";s:1:"G";s:3:"-50";s:6:"Gbreve";s:3:"-50";s:12:"Gcommaaccent";s:3:"-50";s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"Q";s:3:"-40";s:1:"T";s:3:"-90";s:6:"Tcaron";s:3:"-90";s:12:"Tcommaaccent";s:3:"-90";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:3:"-80";s:1:"W";s:3:"-60";s:1:"Y";s:4:"-110";s:6:"Yacute";s:4:"-110";s:9:"Ydieresis";s:4:"-110";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"v";s:3:"-40";s:1:"w";s:3:"-30";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:6:"Abreve";a:48:{s:1:"C";s:3:"-40";s:6:"Cacute";s:3:"-40";s:6:"Ccaron";s:3:"-40";s:8:"Ccedilla";s:3:"-40";s:1:"G";s:3:"-50";s:6:"Gbreve";s:3:"-50";s:12:"Gcommaaccent";s:3:"-50";s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"Q";s:3:"-40";s:1:"T";s:3:"-90";s:6:"Tcaron";s:3:"-90";s:12:"Tcommaaccent";s:3:"-90";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:3:"-80";s:1:"W";s:3:"-60";s:1:"Y";s:4:"-110";s:6:"Yacute";s:4:"-110";s:9:"Ydieresis";s:4:"-110";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"v";s:3:"-40";s:1:"w";s:3:"-30";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:11:"Acircumflex";a:48:{s:1:"C";s:3:"-40";s:6:"Cacute";s:3:"-40";s:6:"Ccaron";s:3:"-40";s:8:"Ccedilla";s:3:"-40";s:1:"G";s:3:"-50";s:6:"Gbreve";s:3:"-50";s:12:"Gcommaaccent";s:3:"-50";s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"Q";s:3:"-40";s:1:"T";s:3:"-90";s:6:"Tcaron";s:3:"-90";s:12:"Tcommaaccent";s:3:"-90";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:3:"-80";s:1:"W";s:3:"-60";s:1:"Y";s:4:"-110";s:6:"Yacute";s:4:"-110";s:9:"Ydieresis";s:4:"-110";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"v";s:3:"-40";s:1:"w";s:3:"-30";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:9:"Adieresis";a:48:{s:1:"C";s:3:"-40";s:6:"Cacute";s:3:"-40";s:6:"Ccaron";s:3:"-40";s:8:"Ccedilla";s:3:"-40";s:1:"G";s:3:"-50";s:6:"Gbreve";s:3:"-50";s:12:"Gcommaaccent";s:3:"-50";s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"Q";s:3:"-40";s:1:"T";s:3:"-90";s:6:"Tcaron";s:3:"-90";s:12:"Tcommaaccent";s:3:"-90";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:3:"-80";s:1:"W";s:3:"-60";s:1:"Y";s:4:"-110";s:6:"Yacute";s:4:"-110";s:9:"Ydieresis";s:4:"-110";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"v";s:3:"-40";s:1:"w";s:3:"-30";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:6:"Agrave";a:48:{s:1:"C";s:3:"-40";s:6:"Cacute";s:3:"-40";s:6:"Ccaron";s:3:"-40";s:8:"Ccedilla";s:3:"-40";s:1:"G";s:3:"-50";s:6:"Gbreve";s:3:"-50";s:12:"Gcommaaccent";s:3:"-50";s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"Q";s:3:"-40";s:1:"T";s:3:"-90";s:6:"Tcaron";s:3:"-90";s:12:"Tcommaaccent";s:3:"-90";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:3:"-80";s:1:"W";s:3:"-60";s:1:"Y";s:4:"-110";s:6:"Yacute";s:4:"-110";s:9:"Ydieresis";s:4:"-110";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"v";s:3:"-40";s:1:"w";s:3:"-30";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:7:"Amacron";a:48:{s:1:"C";s:3:"-40";s:6:"Cacute";s:3:"-40";s:6:"Ccaron";s:3:"-40";s:8:"Ccedilla";s:3:"-40";s:1:"G";s:3:"-50";s:6:"Gbreve";s:3:"-50";s:12:"Gcommaaccent";s:3:"-50";s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"Q";s:3:"-40";s:1:"T";s:3:"-90";s:6:"Tcaron";s:3:"-90";s:12:"Tcommaaccent";s:3:"-90";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:3:"-80";s:1:"W";s:3:"-60";s:1:"Y";s:4:"-110";s:6:"Yacute";s:4:"-110";s:9:"Ydieresis";s:4:"-110";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"v";s:3:"-40";s:1:"w";s:3:"-30";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:7:"Aogonek";a:48:{s:1:"C";s:3:"-40";s:6:"Cacute";s:3:"-40";s:6:"Ccaron";s:3:"-40";s:8:"Ccedilla";s:3:"-40";s:1:"G";s:3:"-50";s:6:"Gbreve";s:3:"-50";s:12:"Gcommaaccent";s:3:"-50";s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"Q";s:3:"-40";s:1:"T";s:3:"-90";s:6:"Tcaron";s:3:"-90";s:12:"Tcommaaccent";s:3:"-90";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:3:"-80";s:1:"W";s:3:"-60";s:1:"Y";s:4:"-110";s:6:"Yacute";s:4:"-110";s:9:"Ydieresis";s:4:"-110";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"v";s:3:"-40";s:1:"w";s:3:"-30";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:5:"Aring";a:48:{s:1:"C";s:3:"-40";s:6:"Cacute";s:3:"-40";s:6:"Ccaron";s:3:"-40";s:8:"Ccedilla";s:3:"-40";s:1:"G";s:3:"-50";s:6:"Gbreve";s:3:"-50";s:12:"Gcommaaccent";s:3:"-50";s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"Q";s:3:"-40";s:1:"T";s:3:"-90";s:6:"Tcaron";s:3:"-90";s:12:"Tcommaaccent";s:3:"-90";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:3:"-80";s:1:"W";s:3:"-60";s:1:"Y";s:4:"-110";s:6:"Yacute";s:4:"-110";s:9:"Ydieresis";s:4:"-110";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"v";s:3:"-40";s:1:"w";s:3:"-30";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:6:"Atilde";a:48:{s:1:"C";s:3:"-40";s:6:"Cacute";s:3:"-40";s:6:"Ccaron";s:3:"-40";s:8:"Ccedilla";s:3:"-40";s:1:"G";s:3:"-50";s:6:"Gbreve";s:3:"-50";s:12:"Gcommaaccent";s:3:"-50";s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"Q";s:3:"-40";s:1:"T";s:3:"-90";s:6:"Tcaron";s:3:"-90";s:12:"Tcommaaccent";s:3:"-90";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:3:"-80";s:1:"W";s:3:"-60";s:1:"Y";s:4:"-110";s:6:"Yacute";s:4:"-110";s:9:"Ydieresis";s:4:"-110";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"v";s:3:"-40";s:1:"w";s:3:"-30";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:1:"B";a:19:{s:1:"A";s:3:"-30";s:6:"Aacute";s:3:"-30";s:6:"Abreve";s:3:"-30";s:11:"Acircumflex";s:3:"-30";s:9:"Adieresis";s:3:"-30";s:6:"Agrave";s:3:"-30";s:7:"Amacron";s:3:"-30";s:7:"Aogonek";s:3:"-30";s:5:"Aring";s:3:"-30";s:6:"Atilde";s:3:"-30";s:1:"U";s:3:"-10";s:6:"Uacute";s:3:"-10";s:11:"Ucircumflex";s:3:"-10";s:9:"Udieresis";s:3:"-10";s:6:"Ugrave";s:3:"-10";s:13:"Uhungarumlaut";s:3:"-10";s:7:"Umacron";s:3:"-10";s:7:"Uogonek";s:3:"-10";s:5:"Uring";s:3:"-10";}s:1:"D";a:17:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:1:"V";s:3:"-40";s:1:"W";s:3:"-40";s:1:"Y";s:3:"-70";s:6:"Yacute";s:3:"-70";s:9:"Ydieresis";s:3:"-70";s:5:"comma";s:3:"-30";s:6:"period";s:3:"-30";}s:6:"Dcaron";a:17:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:1:"V";s:3:"-40";s:1:"W";s:3:"-40";s:1:"Y";s:3:"-70";s:6:"Yacute";s:3:"-70";s:9:"Ydieresis";s:3:"-70";s:5:"comma";s:3:"-30";s:6:"period";s:3:"-30";}s:6:"Dcroat";a:17:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:1:"V";s:3:"-40";s:1:"W";s:3:"-40";s:1:"Y";s:3:"-70";s:6:"Yacute";s:3:"-70";s:9:"Ydieresis";s:3:"-70";s:5:"comma";s:3:"-30";s:6:"period";s:3:"-30";}s:1:"F";a:22:{s:1:"A";s:3:"-80";s:6:"Aacute";s:3:"-80";s:6:"Abreve";s:3:"-80";s:11:"Acircumflex";s:3:"-80";s:9:"Adieresis";s:3:"-80";s:6:"Agrave";s:3:"-80";s:7:"Amacron";s:3:"-80";s:7:"Aogonek";s:3:"-80";s:5:"Aring";s:3:"-80";s:6:"Atilde";s:3:"-80";s:1:"a";s:3:"-20";s:6:"aacute";s:3:"-20";s:6:"abreve";s:3:"-20";s:11:"acircumflex";s:3:"-20";s:9:"adieresis";s:3:"-20";s:6:"agrave";s:3:"-20";s:7:"amacron";s:3:"-20";s:7:"aogonek";s:3:"-20";s:5:"aring";s:3:"-20";s:6:"atilde";s:3:"-20";s:5:"comma";s:4:"-100";s:6:"period";s:4:"-100";}s:1:"J";a:21:{s:1:"A";s:3:"-20";s:6:"Aacute";s:3:"-20";s:6:"Abreve";s:3:"-20";s:11:"Acircumflex";s:3:"-20";s:9:"Adieresis";s:3:"-20";s:6:"Agrave";s:3:"-20";s:7:"Amacron";s:3:"-20";s:7:"Aogonek";s:3:"-20";s:5:"Aring";s:3:"-20";s:6:"Atilde";s:3:"-20";s:5:"comma";s:3:"-20";s:6:"period";s:3:"-20";s:1:"u";s:3:"-20";s:6:"uacute";s:3:"-20";s:11:"ucircumflex";s:3:"-20";s:9:"udieresis";s:3:"-20";s:6:"ugrave";s:3:"-20";s:13:"uhungarumlaut";s:3:"-20";s:7:"umacron";s:3:"-20";s:7:"uogonek";s:3:"-20";s:5:"uring";s:3:"-20";}s:1:"K";a:39:{s:1:"O";s:3:"-30";s:6:"Oacute";s:3:"-30";s:11:"Ocircumflex";s:3:"-30";s:9:"Odieresis";s:3:"-30";s:6:"Ograve";s:3:"-30";s:13:"Ohungarumlaut";s:3:"-30";s:7:"Omacron";s:3:"-30";s:6:"Oslash";s:3:"-30";s:6:"Otilde";s:3:"-30";s:1:"e";s:3:"-15";s:6:"eacute";s:3:"-15";s:6:"ecaron";s:3:"-15";s:11:"ecircumflex";s:3:"-15";s:9:"edieresis";s:3:"-15";s:10:"edotaccent";s:3:"-15";s:6:"egrave";s:3:"-15";s:7:"emacron";s:3:"-15";s:7:"eogonek";s:3:"-15";s:1:"o";s:3:"-35";s:6:"oacute";s:3:"-35";s:11:"ocircumflex";s:3:"-35";s:9:"odieresis";s:3:"-35";s:6:"ograve";s:3:"-35";s:13:"ohungarumlaut";s:3:"-35";s:7:"omacron";s:3:"-35";s:6:"oslash";s:3:"-35";s:6:"otilde";s:3:"-35";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"y";s:3:"-40";s:6:"yacute";s:3:"-40";s:9:"ydieresis";s:3:"-40";}s:12:"Kcommaaccent";a:39:{s:1:"O";s:3:"-30";s:6:"Oacute";s:3:"-30";s:11:"Ocircumflex";s:3:"-30";s:9:"Odieresis";s:3:"-30";s:6:"Ograve";s:3:"-30";s:13:"Ohungarumlaut";s:3:"-30";s:7:"Omacron";s:3:"-30";s:6:"Oslash";s:3:"-30";s:6:"Otilde";s:3:"-30";s:1:"e";s:3:"-15";s:6:"eacute";s:3:"-15";s:6:"ecaron";s:3:"-15";s:11:"ecircumflex";s:3:"-15";s:9:"edieresis";s:3:"-15";s:10:"edotaccent";s:3:"-15";s:6:"egrave";s:3:"-15";s:7:"emacron";s:3:"-15";s:7:"eogonek";s:3:"-15";s:1:"o";s:3:"-35";s:6:"oacute";s:3:"-35";s:11:"ocircumflex";s:3:"-35";s:9:"odieresis";s:3:"-35";s:6:"ograve";s:3:"-35";s:13:"ohungarumlaut";s:3:"-35";s:7:"omacron";s:3:"-35";s:6:"oslash";s:3:"-35";s:6:"otilde";s:3:"-35";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"y";s:3:"-40";s:6:"yacute";s:3:"-40";s:9:"ydieresis";s:3:"-40";}s:1:"L";a:13:{s:1:"T";s:3:"-90";s:6:"Tcaron";s:3:"-90";s:12:"Tcommaaccent";s:3:"-90";s:1:"V";s:4:"-110";s:1:"W";s:3:"-80";s:1:"Y";s:4:"-120";s:6:"Yacute";s:4:"-120";s:9:"Ydieresis";s:4:"-120";s:13:"quotedblright";s:4:"-140";s:10:"quoteright";s:4:"-140";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:6:"Lacute";a:13:{s:1:"T";s:3:"-90";s:6:"Tcaron";s:3:"-90";s:12:"Tcommaaccent";s:3:"-90";s:1:"V";s:4:"-110";s:1:"W";s:3:"-80";s:1:"Y";s:4:"-120";s:6:"Yacute";s:4:"-120";s:9:"Ydieresis";s:4:"-120";s:13:"quotedblright";s:4:"-140";s:10:"quoteright";s:4:"-140";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:12:"Lcommaaccent";a:13:{s:1:"T";s:3:"-90";s:6:"Tcaron";s:3:"-90";s:12:"Tcommaaccent";s:3:"-90";s:1:"V";s:4:"-110";s:1:"W";s:3:"-80";s:1:"Y";s:4:"-120";s:6:"Yacute";s:4:"-120";s:9:"Ydieresis";s:4:"-120";s:13:"quotedblright";s:4:"-140";s:10:"quoteright";s:4:"-140";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:6:"Lslash";a:13:{s:1:"T";s:3:"-90";s:6:"Tcaron";s:3:"-90";s:12:"Tcommaaccent";s:3:"-90";s:1:"V";s:4:"-110";s:1:"W";s:3:"-80";s:1:"Y";s:4:"-120";s:6:"Yacute";s:4:"-120";s:9:"Ydieresis";s:4:"-120";s:13:"quotedblright";s:4:"-140";s:10:"quoteright";s:4:"-140";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:1:"O";a:21:{s:1:"A";s:3:"-50";s:6:"Aacute";s:3:"-50";s:6:"Abreve";s:3:"-50";s:11:"Acircumflex";s:3:"-50";s:9:"Adieresis";s:3:"-50";s:6:"Agrave";s:3:"-50";s:7:"Amacron";s:3:"-50";s:7:"Aogonek";s:3:"-50";s:5:"Aring";s:3:"-50";s:6:"Atilde";s:3:"-50";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-50";s:1:"X";s:3:"-50";s:1:"Y";s:3:"-70";s:6:"Yacute";s:3:"-70";s:9:"Ydieresis";s:3:"-70";s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";}s:6:"Oacute";a:21:{s:1:"A";s:3:"-50";s:6:"Aacute";s:3:"-50";s:6:"Abreve";s:3:"-50";s:11:"Acircumflex";s:3:"-50";s:9:"Adieresis";s:3:"-50";s:6:"Agrave";s:3:"-50";s:7:"Amacron";s:3:"-50";s:7:"Aogonek";s:3:"-50";s:5:"Aring";s:3:"-50";s:6:"Atilde";s:3:"-50";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-50";s:1:"X";s:3:"-50";s:1:"Y";s:3:"-70";s:6:"Yacute";s:3:"-70";s:9:"Ydieresis";s:3:"-70";s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";}s:11:"Ocircumflex";a:21:{s:1:"A";s:3:"-50";s:6:"Aacute";s:3:"-50";s:6:"Abreve";s:3:"-50";s:11:"Acircumflex";s:3:"-50";s:9:"Adieresis";s:3:"-50";s:6:"Agrave";s:3:"-50";s:7:"Amacron";s:3:"-50";s:7:"Aogonek";s:3:"-50";s:5:"Aring";s:3:"-50";s:6:"Atilde";s:3:"-50";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-50";s:1:"X";s:3:"-50";s:1:"Y";s:3:"-70";s:6:"Yacute";s:3:"-70";s:9:"Ydieresis";s:3:"-70";s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";}s:9:"Odieresis";a:21:{s:1:"A";s:3:"-50";s:6:"Aacute";s:3:"-50";s:6:"Abreve";s:3:"-50";s:11:"Acircumflex";s:3:"-50";s:9:"Adieresis";s:3:"-50";s:6:"Agrave";s:3:"-50";s:7:"Amacron";s:3:"-50";s:7:"Aogonek";s:3:"-50";s:5:"Aring";s:3:"-50";s:6:"Atilde";s:3:"-50";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-50";s:1:"X";s:3:"-50";s:1:"Y";s:3:"-70";s:6:"Yacute";s:3:"-70";s:9:"Ydieresis";s:3:"-70";s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";}s:6:"Ograve";a:21:{s:1:"A";s:3:"-50";s:6:"Aacute";s:3:"-50";s:6:"Abreve";s:3:"-50";s:11:"Acircumflex";s:3:"-50";s:9:"Adieresis";s:3:"-50";s:6:"Agrave";s:3:"-50";s:7:"Amacron";s:3:"-50";s:7:"Aogonek";s:3:"-50";s:5:"Aring";s:3:"-50";s:6:"Atilde";s:3:"-50";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-50";s:1:"X";s:3:"-50";s:1:"Y";s:3:"-70";s:6:"Yacute";s:3:"-70";s:9:"Ydieresis";s:3:"-70";s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";}s:13:"Ohungarumlaut";a:21:{s:1:"A";s:3:"-50";s:6:"Aacute";s:3:"-50";s:6:"Abreve";s:3:"-50";s:11:"Acircumflex";s:3:"-50";s:9:"Adieresis";s:3:"-50";s:6:"Agrave";s:3:"-50";s:7:"Amacron";s:3:"-50";s:7:"Aogonek";s:3:"-50";s:5:"Aring";s:3:"-50";s:6:"Atilde";s:3:"-50";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-50";s:1:"X";s:3:"-50";s:1:"Y";s:3:"-70";s:6:"Yacute";s:3:"-70";s:9:"Ydieresis";s:3:"-70";s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";}s:7:"Omacron";a:21:{s:1:"A";s:3:"-50";s:6:"Aacute";s:3:"-50";s:6:"Abreve";s:3:"-50";s:11:"Acircumflex";s:3:"-50";s:9:"Adieresis";s:3:"-50";s:6:"Agrave";s:3:"-50";s:7:"Amacron";s:3:"-50";s:7:"Aogonek";s:3:"-50";s:5:"Aring";s:3:"-50";s:6:"Atilde";s:3:"-50";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-50";s:1:"X";s:3:"-50";s:1:"Y";s:3:"-70";s:6:"Yacute";s:3:"-70";s:9:"Ydieresis";s:3:"-70";s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";}s:6:"Oslash";a:21:{s:1:"A";s:3:"-50";s:6:"Aacute";s:3:"-50";s:6:"Abreve";s:3:"-50";s:11:"Acircumflex";s:3:"-50";s:9:"Adieresis";s:3:"-50";s:6:"Agrave";s:3:"-50";s:7:"Amacron";s:3:"-50";s:7:"Aogonek";s:3:"-50";s:5:"Aring";s:3:"-50";s:6:"Atilde";s:3:"-50";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-50";s:1:"X";s:3:"-50";s:1:"Y";s:3:"-70";s:6:"Yacute";s:3:"-70";s:9:"Ydieresis";s:3:"-70";s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";}s:6:"Otilde";a:21:{s:1:"A";s:3:"-50";s:6:"Aacute";s:3:"-50";s:6:"Abreve";s:3:"-50";s:11:"Acircumflex";s:3:"-50";s:9:"Adieresis";s:3:"-50";s:6:"Agrave";s:3:"-50";s:7:"Amacron";s:3:"-50";s:7:"Aogonek";s:3:"-50";s:5:"Aring";s:3:"-50";s:6:"Atilde";s:3:"-50";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-50";s:1:"X";s:3:"-50";s:1:"Y";s:3:"-70";s:6:"Yacute";s:3:"-70";s:9:"Ydieresis";s:3:"-70";s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";}s:1:"P";a:40:{s:1:"A";s:4:"-100";s:6:"Aacute";s:4:"-100";s:6:"Abreve";s:4:"-100";s:11:"Acircumflex";s:4:"-100";s:9:"Adieresis";s:4:"-100";s:6:"Agrave";s:4:"-100";s:7:"Amacron";s:4:"-100";s:7:"Aogonek";s:4:"-100";s:5:"Aring";s:4:"-100";s:6:"Atilde";s:4:"-100";s:1:"a";s:3:"-30";s:6:"aacute";s:3:"-30";s:6:"abreve";s:3:"-30";s:11:"acircumflex";s:3:"-30";s:9:"adieresis";s:3:"-30";s:6:"agrave";s:3:"-30";s:7:"amacron";s:3:"-30";s:7:"aogonek";s:3:"-30";s:5:"aring";s:3:"-30";s:6:"atilde";s:3:"-30";s:5:"comma";s:4:"-120";s:1:"e";s:3:"-30";s:6:"eacute";s:3:"-30";s:6:"ecaron";s:3:"-30";s:11:"ecircumflex";s:3:"-30";s:9:"edieresis";s:3:"-30";s:10:"edotaccent";s:3:"-30";s:6:"egrave";s:3:"-30";s:7:"emacron";s:3:"-30";s:7:"eogonek";s:3:"-30";s:1:"o";s:3:"-40";s:6:"oacute";s:3:"-40";s:11:"ocircumflex";s:3:"-40";s:9:"odieresis";s:3:"-40";s:6:"ograve";s:3:"-40";s:13:"ohungarumlaut";s:3:"-40";s:7:"omacron";s:3:"-40";s:6:"oslash";s:3:"-40";s:6:"otilde";s:3:"-40";s:6:"period";s:4:"-120";}s:1:"Q";a:11:{s:1:"U";s:3:"-10";s:6:"Uacute";s:3:"-10";s:11:"Ucircumflex";s:3:"-10";s:9:"Udieresis";s:3:"-10";s:6:"Ugrave";s:3:"-10";s:13:"Uhungarumlaut";s:3:"-10";s:7:"Umacron";s:3:"-10";s:7:"Uogonek";s:3:"-10";s:5:"Uring";s:3:"-10";s:5:"comma";s:2:"20";s:6:"period";s:2:"20";}s:1:"R";a:26:{s:1:"O";s:3:"-20";s:6:"Oacute";s:3:"-20";s:11:"Ocircumflex";s:3:"-20";s:9:"Odieresis";s:3:"-20";s:6:"Ograve";s:3:"-20";s:13:"Ohungarumlaut";s:3:"-20";s:7:"Omacron";s:3:"-20";s:6:"Oslash";s:3:"-20";s:6:"Otilde";s:3:"-20";s:1:"T";s:3:"-20";s:6:"Tcaron";s:3:"-20";s:12:"Tcommaaccent";s:3:"-20";s:1:"U";s:3:"-20";s:6:"Uacute";s:3:"-20";s:11:"Ucircumflex";s:3:"-20";s:9:"Udieresis";s:3:"-20";s:6:"Ugrave";s:3:"-20";s:13:"Uhungarumlaut";s:3:"-20";s:7:"Umacron";s:3:"-20";s:7:"Uogonek";s:3:"-20";s:5:"Uring";s:3:"-20";s:1:"V";s:3:"-50";s:1:"W";s:3:"-40";s:1:"Y";s:3:"-50";s:6:"Yacute";s:3:"-50";s:9:"Ydieresis";s:3:"-50";}s:6:"Racute";a:26:{s:1:"O";s:3:"-20";s:6:"Oacute";s:3:"-20";s:11:"Ocircumflex";s:3:"-20";s:9:"Odieresis";s:3:"-20";s:6:"Ograve";s:3:"-20";s:13:"Ohungarumlaut";s:3:"-20";s:7:"Omacron";s:3:"-20";s:6:"Oslash";s:3:"-20";s:6:"Otilde";s:3:"-20";s:1:"T";s:3:"-20";s:6:"Tcaron";s:3:"-20";s:12:"Tcommaaccent";s:3:"-20";s:1:"U";s:3:"-20";s:6:"Uacute";s:3:"-20";s:11:"Ucircumflex";s:3:"-20";s:9:"Udieresis";s:3:"-20";s:6:"Ugrave";s:3:"-20";s:13:"Uhungarumlaut";s:3:"-20";s:7:"Umacron";s:3:"-20";s:7:"Uogonek";s:3:"-20";s:5:"Uring";s:3:"-20";s:1:"V";s:3:"-50";s:1:"W";s:3:"-40";s:1:"Y";s:3:"-50";s:6:"Yacute";s:3:"-50";s:9:"Ydieresis";s:3:"-50";}s:6:"Rcaron";a:26:{s:1:"O";s:3:"-20";s:6:"Oacute";s:3:"-20";s:11:"Ocircumflex";s:3:"-20";s:9:"Odieresis";s:3:"-20";s:6:"Ograve";s:3:"-20";s:13:"Ohungarumlaut";s:3:"-20";s:7:"Omacron";s:3:"-20";s:6:"Oslash";s:3:"-20";s:6:"Otilde";s:3:"-20";s:1:"T";s:3:"-20";s:6:"Tcaron";s:3:"-20";s:12:"Tcommaaccent";s:3:"-20";s:1:"U";s:3:"-20";s:6:"Uacute";s:3:"-20";s:11:"Ucircumflex";s:3:"-20";s:9:"Udieresis";s:3:"-20";s:6:"Ugrave";s:3:"-20";s:13:"Uhungarumlaut";s:3:"-20";s:7:"Umacron";s:3:"-20";s:7:"Uogonek";s:3:"-20";s:5:"Uring";s:3:"-20";s:1:"V";s:3:"-50";s:1:"W";s:3:"-40";s:1:"Y";s:3:"-50";s:6:"Yacute";s:3:"-50";s:9:"Ydieresis";s:3:"-50";}s:12:"Rcommaaccent";a:26:{s:1:"O";s:3:"-20";s:6:"Oacute";s:3:"-20";s:11:"Ocircumflex";s:3:"-20";s:9:"Odieresis";s:3:"-20";s:6:"Ograve";s:3:"-20";s:13:"Ohungarumlaut";s:3:"-20";s:7:"Omacron";s:3:"-20";s:6:"Oslash";s:3:"-20";s:6:"Otilde";s:3:"-20";s:1:"T";s:3:"-20";s:6:"Tcaron";s:3:"-20";s:12:"Tcommaaccent";s:3:"-20";s:1:"U";s:3:"-20";s:6:"Uacute";s:3:"-20";s:11:"Ucircumflex";s:3:"-20";s:9:"Udieresis";s:3:"-20";s:6:"Ugrave";s:3:"-20";s:13:"Uhungarumlaut";s:3:"-20";s:7:"Umacron";s:3:"-20";s:7:"Uogonek";s:3:"-20";s:5:"Uring";s:3:"-20";s:1:"V";s:3:"-50";s:1:"W";s:3:"-40";s:1:"Y";s:3:"-50";s:6:"Yacute";s:3:"-50";s:9:"Ydieresis";s:3:"-50";}s:1:"T";a:68:{s:1:"A";s:3:"-90";s:6:"Aacute";s:3:"-90";s:6:"Abreve";s:3:"-90";s:11:"Acircumflex";s:3:"-90";s:9:"Adieresis";s:3:"-90";s:6:"Agrave";s:3:"-90";s:7:"Amacron";s:3:"-90";s:7:"Aogonek";s:3:"-90";s:5:"Aring";s:3:"-90";s:6:"Atilde";s:3:"-90";s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"a";s:3:"-80";s:6:"aacute";s:3:"-80";s:6:"abreve";s:3:"-80";s:11:"acircumflex";s:3:"-80";s:9:"adieresis";s:3:"-80";s:6:"agrave";s:3:"-80";s:7:"amacron";s:3:"-80";s:7:"aogonek";s:3:"-80";s:5:"aring";s:3:"-80";s:6:"atilde";s:3:"-80";s:5:"colon";s:3:"-40";s:5:"comma";s:3:"-80";s:1:"e";s:3:"-60";s:6:"eacute";s:3:"-60";s:6:"ecaron";s:3:"-60";s:11:"ecircumflex";s:3:"-60";s:9:"edieresis";s:3:"-60";s:10:"edotaccent";s:3:"-60";s:6:"egrave";s:3:"-60";s:7:"emacron";s:3:"-60";s:7:"eogonek";s:3:"-60";s:6:"hyphen";s:4:"-120";s:1:"o";s:3:"-80";s:6:"oacute";s:3:"-80";s:11:"ocircumflex";s:3:"-80";s:9:"odieresis";s:3:"-80";s:6:"ograve";s:3:"-80";s:13:"ohungarumlaut";s:3:"-80";s:7:"omacron";s:3:"-80";s:6:"oslash";s:3:"-80";s:6:"otilde";s:3:"-80";s:6:"period";s:3:"-80";s:1:"r";s:3:"-80";s:6:"racute";s:3:"-80";s:12:"rcommaaccent";s:3:"-80";s:9:"semicolon";s:3:"-40";s:1:"u";s:3:"-90";s:6:"uacute";s:3:"-90";s:11:"ucircumflex";s:3:"-90";s:9:"udieresis";s:3:"-90";s:6:"ugrave";s:3:"-90";s:13:"uhungarumlaut";s:3:"-90";s:7:"umacron";s:3:"-90";s:7:"uogonek";s:3:"-90";s:5:"uring";s:3:"-90";s:1:"w";s:3:"-60";s:1:"y";s:3:"-60";s:6:"yacute";s:3:"-60";s:9:"ydieresis";s:3:"-60";}s:6:"Tcaron";a:68:{s:1:"A";s:3:"-90";s:6:"Aacute";s:3:"-90";s:6:"Abreve";s:3:"-90";s:11:"Acircumflex";s:3:"-90";s:9:"Adieresis";s:3:"-90";s:6:"Agrave";s:3:"-90";s:7:"Amacron";s:3:"-90";s:7:"Aogonek";s:3:"-90";s:5:"Aring";s:3:"-90";s:6:"Atilde";s:3:"-90";s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"a";s:3:"-80";s:6:"aacute";s:3:"-80";s:6:"abreve";s:3:"-80";s:11:"acircumflex";s:3:"-80";s:9:"adieresis";s:3:"-80";s:6:"agrave";s:3:"-80";s:7:"amacron";s:3:"-80";s:7:"aogonek";s:3:"-80";s:5:"aring";s:3:"-80";s:6:"atilde";s:3:"-80";s:5:"colon";s:3:"-40";s:5:"comma";s:3:"-80";s:1:"e";s:3:"-60";s:6:"eacute";s:3:"-60";s:6:"ecaron";s:3:"-60";s:11:"ecircumflex";s:3:"-60";s:9:"edieresis";s:3:"-60";s:10:"edotaccent";s:3:"-60";s:6:"egrave";s:3:"-60";s:7:"emacron";s:3:"-60";s:7:"eogonek";s:3:"-60";s:6:"hyphen";s:4:"-120";s:1:"o";s:3:"-80";s:6:"oacute";s:3:"-80";s:11:"ocircumflex";s:3:"-80";s:9:"odieresis";s:3:"-80";s:6:"ograve";s:3:"-80";s:13:"ohungarumlaut";s:3:"-80";s:7:"omacron";s:3:"-80";s:6:"oslash";s:3:"-80";s:6:"otilde";s:3:"-80";s:6:"period";s:3:"-80";s:1:"r";s:3:"-80";s:6:"racute";s:3:"-80";s:12:"rcommaaccent";s:3:"-80";s:9:"semicolon";s:3:"-40";s:1:"u";s:3:"-90";s:6:"uacute";s:3:"-90";s:11:"ucircumflex";s:3:"-90";s:9:"udieresis";s:3:"-90";s:6:"ugrave";s:3:"-90";s:13:"uhungarumlaut";s:3:"-90";s:7:"umacron";s:3:"-90";s:7:"uogonek";s:3:"-90";s:5:"uring";s:3:"-90";s:1:"w";s:3:"-60";s:1:"y";s:3:"-60";s:6:"yacute";s:3:"-60";s:9:"ydieresis";s:3:"-60";}s:12:"Tcommaaccent";a:68:{s:1:"A";s:3:"-90";s:6:"Aacute";s:3:"-90";s:6:"Abreve";s:3:"-90";s:11:"Acircumflex";s:3:"-90";s:9:"Adieresis";s:3:"-90";s:6:"Agrave";s:3:"-90";s:7:"Amacron";s:3:"-90";s:7:"Aogonek";s:3:"-90";s:5:"Aring";s:3:"-90";s:6:"Atilde";s:3:"-90";s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"a";s:3:"-80";s:6:"aacute";s:3:"-80";s:6:"abreve";s:3:"-80";s:11:"acircumflex";s:3:"-80";s:9:"adieresis";s:3:"-80";s:6:"agrave";s:3:"-80";s:7:"amacron";s:3:"-80";s:7:"aogonek";s:3:"-80";s:5:"aring";s:3:"-80";s:6:"atilde";s:3:"-80";s:5:"colon";s:3:"-40";s:5:"comma";s:3:"-80";s:1:"e";s:3:"-60";s:6:"eacute";s:3:"-60";s:6:"ecaron";s:3:"-60";s:11:"ecircumflex";s:3:"-60";s:9:"edieresis";s:3:"-60";s:10:"edotaccent";s:3:"-60";s:6:"egrave";s:3:"-60";s:7:"emacron";s:3:"-60";s:7:"eogonek";s:3:"-60";s:6:"hyphen";s:4:"-120";s:1:"o";s:3:"-80";s:6:"oacute";s:3:"-80";s:11:"ocircumflex";s:3:"-80";s:9:"odieresis";s:3:"-80";s:6:"ograve";s:3:"-80";s:13:"ohungarumlaut";s:3:"-80";s:7:"omacron";s:3:"-80";s:6:"oslash";s:3:"-80";s:6:"otilde";s:3:"-80";s:6:"period";s:3:"-80";s:1:"r";s:3:"-80";s:6:"racute";s:3:"-80";s:12:"rcommaaccent";s:3:"-80";s:9:"semicolon";s:3:"-40";s:1:"u";s:3:"-90";s:6:"uacute";s:3:"-90";s:11:"ucircumflex";s:3:"-90";s:9:"udieresis";s:3:"-90";s:6:"ugrave";s:3:"-90";s:13:"uhungarumlaut";s:3:"-90";s:7:"umacron";s:3:"-90";s:7:"uogonek";s:3:"-90";s:5:"uring";s:3:"-90";s:1:"w";s:3:"-60";s:1:"y";s:3:"-60";s:6:"yacute";s:3:"-60";s:9:"ydieresis";s:3:"-60";}s:1:"U";a:12:{s:1:"A";s:3:"-50";s:6:"Aacute";s:3:"-50";s:6:"Abreve";s:3:"-50";s:11:"Acircumflex";s:3:"-50";s:9:"Adieresis";s:3:"-50";s:6:"Agrave";s:3:"-50";s:7:"Amacron";s:3:"-50";s:7:"Aogonek";s:3:"-50";s:5:"Aring";s:3:"-50";s:6:"Atilde";s:3:"-50";s:5:"comma";s:3:"-30";s:6:"period";s:3:"-30";}s:6:"Uacute";a:12:{s:1:"A";s:3:"-50";s:6:"Aacute";s:3:"-50";s:6:"Abreve";s:3:"-50";s:11:"Acircumflex";s:3:"-50";s:9:"Adieresis";s:3:"-50";s:6:"Agrave";s:3:"-50";s:7:"Amacron";s:3:"-50";s:7:"Aogonek";s:3:"-50";s:5:"Aring";s:3:"-50";s:6:"Atilde";s:3:"-50";s:5:"comma";s:3:"-30";s:6:"period";s:3:"-30";}s:11:"Ucircumflex";a:12:{s:1:"A";s:3:"-50";s:6:"Aacute";s:3:"-50";s:6:"Abreve";s:3:"-50";s:11:"Acircumflex";s:3:"-50";s:9:"Adieresis";s:3:"-50";s:6:"Agrave";s:3:"-50";s:7:"Amacron";s:3:"-50";s:7:"Aogonek";s:3:"-50";s:5:"Aring";s:3:"-50";s:6:"Atilde";s:3:"-50";s:5:"comma";s:3:"-30";s:6:"period";s:3:"-30";}s:9:"Udieresis";a:12:{s:1:"A";s:3:"-50";s:6:"Aacute";s:3:"-50";s:6:"Abreve";s:3:"-50";s:11:"Acircumflex";s:3:"-50";s:9:"Adieresis";s:3:"-50";s:6:"Agrave";s:3:"-50";s:7:"Amacron";s:3:"-50";s:7:"Aogonek";s:3:"-50";s:5:"Aring";s:3:"-50";s:6:"Atilde";s:3:"-50";s:5:"comma";s:3:"-30";s:6:"period";s:3:"-30";}s:6:"Ugrave";a:12:{s:1:"A";s:3:"-50";s:6:"Aacute";s:3:"-50";s:6:"Abreve";s:3:"-50";s:11:"Acircumflex";s:3:"-50";s:9:"Adieresis";s:3:"-50";s:6:"Agrave";s:3:"-50";s:7:"Amacron";s:3:"-50";s:7:"Aogonek";s:3:"-50";s:5:"Aring";s:3:"-50";s:6:"Atilde";s:3:"-50";s:5:"comma";s:3:"-30";s:6:"period";s:3:"-30";}s:13:"Uhungarumlaut";a:12:{s:1:"A";s:3:"-50";s:6:"Aacute";s:3:"-50";s:6:"Abreve";s:3:"-50";s:11:"Acircumflex";s:3:"-50";s:9:"Adieresis";s:3:"-50";s:6:"Agrave";s:3:"-50";s:7:"Amacron";s:3:"-50";s:7:"Aogonek";s:3:"-50";s:5:"Aring";s:3:"-50";s:6:"Atilde";s:3:"-50";s:5:"comma";s:3:"-30";s:6:"period";s:3:"-30";}s:7:"Umacron";a:12:{s:1:"A";s:3:"-50";s:6:"Aacute";s:3:"-50";s:6:"Abreve";s:3:"-50";s:11:"Acircumflex";s:3:"-50";s:9:"Adieresis";s:3:"-50";s:6:"Agrave";s:3:"-50";s:7:"Amacron";s:3:"-50";s:7:"Aogonek";s:3:"-50";s:5:"Aring";s:3:"-50";s:6:"Atilde";s:3:"-50";s:5:"comma";s:3:"-30";s:6:"period";s:3:"-30";}s:7:"Uogonek";a:12:{s:1:"A";s:3:"-50";s:6:"Aacute";s:3:"-50";s:6:"Abreve";s:3:"-50";s:11:"Acircumflex";s:3:"-50";s:9:"Adieresis";s:3:"-50";s:6:"Agrave";s:3:"-50";s:7:"Amacron";s:3:"-50";s:7:"Aogonek";s:3:"-50";s:5:"Aring";s:3:"-50";s:6:"Atilde";s:3:"-50";s:5:"comma";s:3:"-30";s:6:"period";s:3:"-30";}s:5:"Uring";a:12:{s:1:"A";s:3:"-50";s:6:"Aacute";s:3:"-50";s:6:"Abreve";s:3:"-50";s:11:"Acircumflex";s:3:"-50";s:9:"Adieresis";s:3:"-50";s:6:"Agrave";s:3:"-50";s:7:"Amacron";s:3:"-50";s:7:"Aogonek";s:3:"-50";s:5:"Aring";s:3:"-50";s:6:"Atilde";s:3:"-50";s:5:"comma";s:3:"-30";s:6:"period";s:3:"-30";}s:1:"V";a:64:{s:1:"A";s:3:"-80";s:6:"Aacute";s:3:"-80";s:6:"Abreve";s:3:"-80";s:11:"Acircumflex";s:3:"-80";s:9:"Adieresis";s:3:"-80";s:6:"Agrave";s:3:"-80";s:7:"Amacron";s:3:"-80";s:7:"Aogonek";s:3:"-80";s:5:"Aring";s:3:"-80";s:6:"Atilde";s:3:"-80";s:1:"G";s:3:"-50";s:6:"Gbreve";s:3:"-50";s:12:"Gcommaaccent";s:3:"-50";s:1:"O";s:3:"-50";s:6:"Oacute";s:3:"-50";s:11:"Ocircumflex";s:3:"-50";s:9:"Odieresis";s:3:"-50";s:6:"Ograve";s:3:"-50";s:13:"Ohungarumlaut";s:3:"-50";s:7:"Omacron";s:3:"-50";s:6:"Oslash";s:3:"-50";s:6:"Otilde";s:3:"-50";s:1:"a";s:3:"-60";s:6:"aacute";s:3:"-60";s:6:"abreve";s:3:"-60";s:11:"acircumflex";s:3:"-60";s:9:"adieresis";s:3:"-60";s:6:"agrave";s:3:"-60";s:7:"amacron";s:3:"-60";s:7:"aogonek";s:3:"-60";s:5:"aring";s:3:"-60";s:6:"atilde";s:3:"-60";s:5:"colon";s:3:"-40";s:5:"comma";s:4:"-120";s:1:"e";s:3:"-50";s:6:"eacute";s:3:"-50";s:6:"ecaron";s:3:"-50";s:11:"ecircumflex";s:3:"-50";s:9:"edieresis";s:3:"-50";s:10:"edotaccent";s:3:"-50";s:6:"egrave";s:3:"-50";s:7:"emacron";s:3:"-50";s:7:"eogonek";s:3:"-50";s:6:"hyphen";s:3:"-80";s:1:"o";s:3:"-90";s:6:"oacute";s:3:"-90";s:11:"ocircumflex";s:3:"-90";s:9:"odieresis";s:3:"-90";s:6:"ograve";s:3:"-90";s:13:"ohungarumlaut";s:3:"-90";s:7:"omacron";s:3:"-90";s:6:"oslash";s:3:"-90";s:6:"otilde";s:3:"-90";s:6:"period";s:4:"-120";s:9:"semicolon";s:3:"-40";s:1:"u";s:3:"-60";s:6:"uacute";s:3:"-60";s:11:"ucircumflex";s:3:"-60";s:9:"udieresis";s:3:"-60";s:6:"ugrave";s:3:"-60";s:13:"uhungarumlaut";s:3:"-60";s:7:"umacron";s:3:"-60";s:7:"uogonek";s:3:"-60";s:5:"uring";s:3:"-60";}s:1:"W";a:64:{s:1:"A";s:3:"-60";s:6:"Aacute";s:3:"-60";s:6:"Abreve";s:3:"-60";s:11:"Acircumflex";s:3:"-60";s:9:"Adieresis";s:3:"-60";s:6:"Agrave";s:3:"-60";s:7:"Amacron";s:3:"-60";s:7:"Aogonek";s:3:"-60";s:5:"Aring";s:3:"-60";s:6:"Atilde";s:3:"-60";s:1:"O";s:3:"-20";s:6:"Oacute";s:3:"-20";s:11:"Ocircumflex";s:3:"-20";s:9:"Odieresis";s:3:"-20";s:6:"Ograve";s:3:"-20";s:13:"Ohungarumlaut";s:3:"-20";s:7:"Omacron";s:3:"-20";s:6:"Oslash";s:3:"-20";s:6:"Otilde";s:3:"-20";s:1:"a";s:3:"-40";s:6:"aacute";s:3:"-40";s:6:"abreve";s:3:"-40";s:11:"acircumflex";s:3:"-40";s:9:"adieresis";s:3:"-40";s:6:"agrave";s:3:"-40";s:7:"amacron";s:3:"-40";s:7:"aogonek";s:3:"-40";s:5:"aring";s:3:"-40";s:6:"atilde";s:3:"-40";s:5:"colon";s:3:"-10";s:5:"comma";s:3:"-80";s:1:"e";s:3:"-35";s:6:"eacute";s:3:"-35";s:6:"ecaron";s:3:"-35";s:11:"ecircumflex";s:3:"-35";s:9:"edieresis";s:3:"-35";s:10:"edotaccent";s:3:"-35";s:6:"egrave";s:3:"-35";s:7:"emacron";s:3:"-35";s:7:"eogonek";s:3:"-35";s:6:"hyphen";s:3:"-40";s:1:"o";s:3:"-60";s:6:"oacute";s:3:"-60";s:11:"ocircumflex";s:3:"-60";s:9:"odieresis";s:3:"-60";s:6:"ograve";s:3:"-60";s:13:"ohungarumlaut";s:3:"-60";s:7:"omacron";s:3:"-60";s:6:"oslash";s:3:"-60";s:6:"otilde";s:3:"-60";s:6:"period";s:3:"-80";s:9:"semicolon";s:3:"-10";s:1:"u";s:3:"-45";s:6:"uacute";s:3:"-45";s:11:"ucircumflex";s:3:"-45";s:9:"udieresis";s:3:"-45";s:6:"ugrave";s:3:"-45";s:13:"uhungarumlaut";s:3:"-45";s:7:"umacron";s:3:"-45";s:7:"uogonek";s:3:"-45";s:5:"uring";s:3:"-45";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:1:"Y";a:60:{s:1:"A";s:4:"-110";s:6:"Aacute";s:4:"-110";s:6:"Abreve";s:4:"-110";s:11:"Acircumflex";s:4:"-110";s:9:"Adieresis";s:4:"-110";s:6:"Agrave";s:4:"-110";s:7:"Amacron";s:4:"-110";s:7:"Aogonek";s:4:"-110";s:5:"Aring";s:4:"-110";s:6:"Atilde";s:4:"-110";s:1:"O";s:3:"-70";s:6:"Oacute";s:3:"-70";s:11:"Ocircumflex";s:3:"-70";s:9:"Odieresis";s:3:"-70";s:6:"Ograve";s:3:"-70";s:13:"Ohungarumlaut";s:3:"-70";s:7:"Omacron";s:3:"-70";s:6:"Oslash";s:3:"-70";s:6:"Otilde";s:3:"-70";s:1:"a";s:3:"-90";s:6:"aacute";s:3:"-90";s:6:"abreve";s:3:"-90";s:11:"acircumflex";s:3:"-90";s:9:"adieresis";s:3:"-90";s:6:"agrave";s:3:"-90";s:7:"amacron";s:3:"-90";s:7:"aogonek";s:3:"-90";s:5:"aring";s:3:"-90";s:6:"atilde";s:3:"-90";s:5:"colon";s:3:"-50";s:5:"comma";s:4:"-100";s:1:"e";s:3:"-80";s:6:"eacute";s:3:"-80";s:6:"ecaron";s:3:"-80";s:11:"ecircumflex";s:3:"-80";s:9:"edieresis";s:3:"-80";s:10:"edotaccent";s:3:"-80";s:6:"egrave";s:3:"-80";s:7:"emacron";s:3:"-80";s:7:"eogonek";s:3:"-80";s:1:"o";s:4:"-100";s:6:"oacute";s:4:"-100";s:11:"ocircumflex";s:4:"-100";s:9:"odieresis";s:4:"-100";s:6:"ograve";s:4:"-100";s:13:"ohungarumlaut";s:4:"-100";s:7:"omacron";s:4:"-100";s:6:"oslash";s:4:"-100";s:6:"otilde";s:4:"-100";s:6:"period";s:4:"-100";s:9:"semicolon";s:3:"-50";s:1:"u";s:4:"-100";s:6:"uacute";s:4:"-100";s:11:"ucircumflex";s:4:"-100";s:9:"udieresis";s:4:"-100";s:6:"ugrave";s:4:"-100";s:13:"uhungarumlaut";s:4:"-100";s:7:"umacron";s:4:"-100";s:7:"uogonek";s:4:"-100";s:5:"uring";s:4:"-100";}s:6:"Yacute";a:60:{s:1:"A";s:4:"-110";s:6:"Aacute";s:4:"-110";s:6:"Abreve";s:4:"-110";s:11:"Acircumflex";s:4:"-110";s:9:"Adieresis";s:4:"-110";s:6:"Agrave";s:4:"-110";s:7:"Amacron";s:4:"-110";s:7:"Aogonek";s:4:"-110";s:5:"Aring";s:4:"-110";s:6:"Atilde";s:4:"-110";s:1:"O";s:3:"-70";s:6:"Oacute";s:3:"-70";s:11:"Ocircumflex";s:3:"-70";s:9:"Odieresis";s:3:"-70";s:6:"Ograve";s:3:"-70";s:13:"Ohungarumlaut";s:3:"-70";s:7:"Omacron";s:3:"-70";s:6:"Oslash";s:3:"-70";s:6:"Otilde";s:3:"-70";s:1:"a";s:3:"-90";s:6:"aacute";s:3:"-90";s:6:"abreve";s:3:"-90";s:11:"acircumflex";s:3:"-90";s:9:"adieresis";s:3:"-90";s:6:"agrave";s:3:"-90";s:7:"amacron";s:3:"-90";s:7:"aogonek";s:3:"-90";s:5:"aring";s:3:"-90";s:6:"atilde";s:3:"-90";s:5:"colon";s:3:"-50";s:5:"comma";s:4:"-100";s:1:"e";s:3:"-80";s:6:"eacute";s:3:"-80";s:6:"ecaron";s:3:"-80";s:11:"ecircumflex";s:3:"-80";s:9:"edieresis";s:3:"-80";s:10:"edotaccent";s:3:"-80";s:6:"egrave";s:3:"-80";s:7:"emacron";s:3:"-80";s:7:"eogonek";s:3:"-80";s:1:"o";s:4:"-100";s:6:"oacute";s:4:"-100";s:11:"ocircumflex";s:4:"-100";s:9:"odieresis";s:4:"-100";s:6:"ograve";s:4:"-100";s:13:"ohungarumlaut";s:4:"-100";s:7:"omacron";s:4:"-100";s:6:"oslash";s:4:"-100";s:6:"otilde";s:4:"-100";s:6:"period";s:4:"-100";s:9:"semicolon";s:3:"-50";s:1:"u";s:4:"-100";s:6:"uacute";s:4:"-100";s:11:"ucircumflex";s:4:"-100";s:9:"udieresis";s:4:"-100";s:6:"ugrave";s:4:"-100";s:13:"uhungarumlaut";s:4:"-100";s:7:"umacron";s:4:"-100";s:7:"uogonek";s:4:"-100";s:5:"uring";s:4:"-100";}s:9:"Ydieresis";a:60:{s:1:"A";s:4:"-110";s:6:"Aacute";s:4:"-110";s:6:"Abreve";s:4:"-110";s:11:"Acircumflex";s:4:"-110";s:9:"Adieresis";s:4:"-110";s:6:"Agrave";s:4:"-110";s:7:"Amacron";s:4:"-110";s:7:"Aogonek";s:4:"-110";s:5:"Aring";s:4:"-110";s:6:"Atilde";s:4:"-110";s:1:"O";s:3:"-70";s:6:"Oacute";s:3:"-70";s:11:"Ocircumflex";s:3:"-70";s:9:"Odieresis";s:3:"-70";s:6:"Ograve";s:3:"-70";s:13:"Ohungarumlaut";s:3:"-70";s:7:"Omacron";s:3:"-70";s:6:"Oslash";s:3:"-70";s:6:"Otilde";s:3:"-70";s:1:"a";s:3:"-90";s:6:"aacute";s:3:"-90";s:6:"abreve";s:3:"-90";s:11:"acircumflex";s:3:"-90";s:9:"adieresis";s:3:"-90";s:6:"agrave";s:3:"-90";s:7:"amacron";s:3:"-90";s:7:"aogonek";s:3:"-90";s:5:"aring";s:3:"-90";s:6:"atilde";s:3:"-90";s:5:"colon";s:3:"-50";s:5:"comma";s:4:"-100";s:1:"e";s:3:"-80";s:6:"eacute";s:3:"-80";s:6:"ecaron";s:3:"-80";s:11:"ecircumflex";s:3:"-80";s:9:"edieresis";s:3:"-80";s:10:"edotaccent";s:3:"-80";s:6:"egrave";s:3:"-80";s:7:"emacron";s:3:"-80";s:7:"eogonek";s:3:"-80";s:1:"o";s:4:"-100";s:6:"oacute";s:4:"-100";s:11:"ocircumflex";s:4:"-100";s:9:"odieresis";s:4:"-100";s:6:"ograve";s:4:"-100";s:13:"ohungarumlaut";s:4:"-100";s:7:"omacron";s:4:"-100";s:6:"oslash";s:4:"-100";s:6:"otilde";s:4:"-100";s:6:"period";s:4:"-100";s:9:"semicolon";s:3:"-50";s:1:"u";s:4:"-100";s:6:"uacute";s:4:"-100";s:11:"ucircumflex";s:4:"-100";s:9:"udieresis";s:4:"-100";s:6:"ugrave";s:4:"-100";s:13:"uhungarumlaut";s:4:"-100";s:7:"umacron";s:4:"-100";s:7:"uogonek";s:4:"-100";s:5:"uring";s:4:"-100";}s:1:"a";a:8:{s:1:"g";s:3:"-10";s:6:"gbreve";s:3:"-10";s:12:"gcommaaccent";s:3:"-10";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:6:"aacute";a:8:{s:1:"g";s:3:"-10";s:6:"gbreve";s:3:"-10";s:12:"gcommaaccent";s:3:"-10";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:6:"abreve";a:8:{s:1:"g";s:3:"-10";s:6:"gbreve";s:3:"-10";s:12:"gcommaaccent";s:3:"-10";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:11:"acircumflex";a:8:{s:1:"g";s:3:"-10";s:6:"gbreve";s:3:"-10";s:12:"gcommaaccent";s:3:"-10";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:9:"adieresis";a:8:{s:1:"g";s:3:"-10";s:6:"gbreve";s:3:"-10";s:12:"gcommaaccent";s:3:"-10";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:6:"agrave";a:8:{s:1:"g";s:3:"-10";s:6:"gbreve";s:3:"-10";s:12:"gcommaaccent";s:3:"-10";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:7:"amacron";a:8:{s:1:"g";s:3:"-10";s:6:"gbreve";s:3:"-10";s:12:"gcommaaccent";s:3:"-10";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:7:"aogonek";a:8:{s:1:"g";s:3:"-10";s:6:"gbreve";s:3:"-10";s:12:"gcommaaccent";s:3:"-10";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:5:"aring";a:8:{s:1:"g";s:3:"-10";s:6:"gbreve";s:3:"-10";s:12:"gcommaaccent";s:3:"-10";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:6:"atilde";a:8:{s:1:"g";s:3:"-10";s:6:"gbreve";s:3:"-10";s:12:"gcommaaccent";s:3:"-10";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:1:"b";a:17:{s:1:"l";s:3:"-10";s:6:"lacute";s:3:"-10";s:12:"lcommaaccent";s:3:"-10";s:6:"lslash";s:3:"-10";s:1:"u";s:3:"-20";s:6:"uacute";s:3:"-20";s:11:"ucircumflex";s:3:"-20";s:9:"udieresis";s:3:"-20";s:6:"ugrave";s:3:"-20";s:13:"uhungarumlaut";s:3:"-20";s:7:"umacron";s:3:"-20";s:7:"uogonek";s:3:"-20";s:5:"uring";s:3:"-20";s:1:"v";s:3:"-20";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:1:"c";a:10:{s:1:"h";s:3:"-10";s:1:"k";s:3:"-20";s:12:"kcommaaccent";s:3:"-20";s:1:"l";s:3:"-20";s:6:"lacute";s:3:"-20";s:12:"lcommaaccent";s:3:"-20";s:6:"lslash";s:3:"-20";s:1:"y";s:3:"-10";s:6:"yacute";s:3:"-10";s:9:"ydieresis";s:3:"-10";}s:6:"cacute";a:10:{s:1:"h";s:3:"-10";s:1:"k";s:3:"-20";s:12:"kcommaaccent";s:3:"-20";s:1:"l";s:3:"-20";s:6:"lacute";s:3:"-20";s:12:"lcommaaccent";s:3:"-20";s:6:"lslash";s:3:"-20";s:1:"y";s:3:"-10";s:6:"yacute";s:3:"-10";s:9:"ydieresis";s:3:"-10";}s:6:"ccaron";a:10:{s:1:"h";s:3:"-10";s:1:"k";s:3:"-20";s:12:"kcommaaccent";s:3:"-20";s:1:"l";s:3:"-20";s:6:"lacute";s:3:"-20";s:12:"lcommaaccent";s:3:"-20";s:6:"lslash";s:3:"-20";s:1:"y";s:3:"-10";s:6:"yacute";s:3:"-10";s:9:"ydieresis";s:3:"-10";}s:8:"ccedilla";a:10:{s:1:"h";s:3:"-10";s:1:"k";s:3:"-20";s:12:"kcommaaccent";s:3:"-20";s:1:"l";s:3:"-20";s:6:"lacute";s:3:"-20";s:12:"lcommaaccent";s:3:"-20";s:6:"lslash";s:3:"-20";s:1:"y";s:3:"-10";s:6:"yacute";s:3:"-10";s:9:"ydieresis";s:3:"-10";}s:5:"colon";a:1:{s:5:"space";s:3:"-40";}s:5:"comma";a:3:{s:13:"quotedblright";s:4:"-120";s:10:"quoteright";s:4:"-120";s:5:"space";s:3:"-40";}s:1:"d";a:7:{s:1:"d";s:3:"-10";s:6:"dcroat";s:3:"-10";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:6:"dcroat";a:7:{s:1:"d";s:3:"-10";s:6:"dcroat";s:3:"-10";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:1:"e";a:8:{s:5:"comma";s:2:"10";s:6:"period";s:2:"20";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"x";s:3:"-15";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:6:"eacute";a:8:{s:5:"comma";s:2:"10";s:6:"period";s:2:"20";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"x";s:3:"-15";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:6:"ecaron";a:8:{s:5:"comma";s:2:"10";s:6:"period";s:2:"20";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"x";s:3:"-15";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:11:"ecircumflex";a:8:{s:5:"comma";s:2:"10";s:6:"period";s:2:"20";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"x";s:3:"-15";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:9:"edieresis";a:8:{s:5:"comma";s:2:"10";s:6:"period";s:2:"20";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"x";s:3:"-15";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:10:"edotaccent";a:8:{s:5:"comma";s:2:"10";s:6:"period";s:2:"20";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"x";s:3:"-15";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:6:"egrave";a:8:{s:5:"comma";s:2:"10";s:6:"period";s:2:"20";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"x";s:3:"-15";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:7:"emacron";a:8:{s:5:"comma";s:2:"10";s:6:"period";s:2:"20";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"x";s:3:"-15";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:7:"eogonek";a:8:{s:5:"comma";s:2:"10";s:6:"period";s:2:"20";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"x";s:3:"-15";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:1:"f";a:22:{s:5:"comma";s:3:"-10";s:1:"e";s:3:"-10";s:6:"eacute";s:3:"-10";s:6:"ecaron";s:3:"-10";s:11:"ecircumflex";s:3:"-10";s:9:"edieresis";s:3:"-10";s:10:"edotaccent";s:3:"-10";s:6:"egrave";s:3:"-10";s:7:"emacron";s:3:"-10";s:7:"eogonek";s:3:"-10";s:1:"o";s:3:"-20";s:6:"oacute";s:3:"-20";s:11:"ocircumflex";s:3:"-20";s:9:"odieresis";s:3:"-20";s:6:"ograve";s:3:"-20";s:13:"ohungarumlaut";s:3:"-20";s:7:"omacron";s:3:"-20";s:6:"oslash";s:3:"-20";s:6:"otilde";s:3:"-20";s:6:"period";s:3:"-10";s:13:"quotedblright";s:2:"30";s:10:"quoteright";s:2:"30";}s:1:"g";a:12:{s:1:"e";s:2:"10";s:6:"eacute";s:2:"10";s:6:"ecaron";s:2:"10";s:11:"ecircumflex";s:2:"10";s:9:"edieresis";s:2:"10";s:10:"edotaccent";s:2:"10";s:6:"egrave";s:2:"10";s:7:"emacron";s:2:"10";s:7:"eogonek";s:2:"10";s:1:"g";s:3:"-10";s:6:"gbreve";s:3:"-10";s:12:"gcommaaccent";s:3:"-10";}s:6:"gbreve";a:12:{s:1:"e";s:2:"10";s:6:"eacute";s:2:"10";s:6:"ecaron";s:2:"10";s:11:"ecircumflex";s:2:"10";s:9:"edieresis";s:2:"10";s:10:"edotaccent";s:2:"10";s:6:"egrave";s:2:"10";s:7:"emacron";s:2:"10";s:7:"eogonek";s:2:"10";s:1:"g";s:3:"-10";s:6:"gbreve";s:3:"-10";s:12:"gcommaaccent";s:3:"-10";}s:12:"gcommaaccent";a:12:{s:1:"e";s:2:"10";s:6:"eacute";s:2:"10";s:6:"ecaron";s:2:"10";s:11:"ecircumflex";s:2:"10";s:9:"edieresis";s:2:"10";s:10:"edotaccent";s:2:"10";s:6:"egrave";s:2:"10";s:7:"emacron";s:2:"10";s:7:"eogonek";s:2:"10";s:1:"g";s:3:"-10";s:6:"gbreve";s:3:"-10";s:12:"gcommaaccent";s:3:"-10";}s:1:"h";a:3:{s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:1:"k";a:9:{s:1:"o";s:3:"-15";s:6:"oacute";s:3:"-15";s:11:"ocircumflex";s:3:"-15";s:9:"odieresis";s:3:"-15";s:6:"ograve";s:3:"-15";s:13:"ohungarumlaut";s:3:"-15";s:7:"omacron";s:3:"-15";s:6:"oslash";s:3:"-15";s:6:"otilde";s:3:"-15";}s:12:"kcommaaccent";a:9:{s:1:"o";s:3:"-15";s:6:"oacute";s:3:"-15";s:11:"ocircumflex";s:3:"-15";s:9:"odieresis";s:3:"-15";s:6:"ograve";s:3:"-15";s:13:"ohungarumlaut";s:3:"-15";s:7:"omacron";s:3:"-15";s:6:"oslash";s:3:"-15";s:6:"otilde";s:3:"-15";}s:1:"l";a:4:{s:1:"w";s:3:"-15";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:6:"lacute";a:4:{s:1:"w";s:3:"-15";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:12:"lcommaaccent";a:4:{s:1:"w";s:3:"-15";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:6:"lslash";a:4:{s:1:"w";s:3:"-15";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:1:"m";a:12:{s:1:"u";s:3:"-20";s:6:"uacute";s:3:"-20";s:11:"ucircumflex";s:3:"-20";s:9:"udieresis";s:3:"-20";s:6:"ugrave";s:3:"-20";s:13:"uhungarumlaut";s:3:"-20";s:7:"umacron";s:3:"-20";s:7:"uogonek";s:3:"-20";s:5:"uring";s:3:"-20";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:1:"n";a:13:{s:1:"u";s:3:"-10";s:6:"uacute";s:3:"-10";s:11:"ucircumflex";s:3:"-10";s:9:"udieresis";s:3:"-10";s:6:"ugrave";s:3:"-10";s:13:"uhungarumlaut";s:3:"-10";s:7:"umacron";s:3:"-10";s:7:"uogonek";s:3:"-10";s:5:"uring";s:3:"-10";s:1:"v";s:3:"-40";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:6:"nacute";a:13:{s:1:"u";s:3:"-10";s:6:"uacute";s:3:"-10";s:11:"ucircumflex";s:3:"-10";s:9:"udieresis";s:3:"-10";s:6:"ugrave";s:3:"-10";s:13:"uhungarumlaut";s:3:"-10";s:7:"umacron";s:3:"-10";s:7:"uogonek";s:3:"-10";s:5:"uring";s:3:"-10";s:1:"v";s:3:"-40";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:6:"ncaron";a:13:{s:1:"u";s:3:"-10";s:6:"uacute";s:3:"-10";s:11:"ucircumflex";s:3:"-10";s:9:"udieresis";s:3:"-10";s:6:"ugrave";s:3:"-10";s:13:"uhungarumlaut";s:3:"-10";s:7:"umacron";s:3:"-10";s:7:"uogonek";s:3:"-10";s:5:"uring";s:3:"-10";s:1:"v";s:3:"-40";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:12:"ncommaaccent";a:13:{s:1:"u";s:3:"-10";s:6:"uacute";s:3:"-10";s:11:"ucircumflex";s:3:"-10";s:9:"udieresis";s:3:"-10";s:6:"ugrave";s:3:"-10";s:13:"uhungarumlaut";s:3:"-10";s:7:"umacron";s:3:"-10";s:7:"uogonek";s:3:"-10";s:5:"uring";s:3:"-10";s:1:"v";s:3:"-40";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:6:"ntilde";a:13:{s:1:"u";s:3:"-10";s:6:"uacute";s:3:"-10";s:11:"ucircumflex";s:3:"-10";s:9:"udieresis";s:3:"-10";s:6:"ugrave";s:3:"-10";s:13:"uhungarumlaut";s:3:"-10";s:7:"umacron";s:3:"-10";s:7:"uogonek";s:3:"-10";s:5:"uring";s:3:"-10";s:1:"v";s:3:"-40";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:1:"o";a:6:{s:1:"v";s:3:"-20";s:1:"w";s:3:"-15";s:1:"x";s:3:"-30";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:6:"oacute";a:6:{s:1:"v";s:3:"-20";s:1:"w";s:3:"-15";s:1:"x";s:3:"-30";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:11:"ocircumflex";a:6:{s:1:"v";s:3:"-20";s:1:"w";s:3:"-15";s:1:"x";s:3:"-30";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:9:"odieresis";a:6:{s:1:"v";s:3:"-20";s:1:"w";s:3:"-15";s:1:"x";s:3:"-30";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:6:"ograve";a:6:{s:1:"v";s:3:"-20";s:1:"w";s:3:"-15";s:1:"x";s:3:"-30";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:13:"ohungarumlaut";a:6:{s:1:"v";s:3:"-20";s:1:"w";s:3:"-15";s:1:"x";s:3:"-30";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:7:"omacron";a:6:{s:1:"v";s:3:"-20";s:1:"w";s:3:"-15";s:1:"x";s:3:"-30";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:6:"oslash";a:6:{s:1:"v";s:3:"-20";s:1:"w";s:3:"-15";s:1:"x";s:3:"-30";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:6:"otilde";a:6:{s:1:"v";s:3:"-20";s:1:"w";s:3:"-15";s:1:"x";s:3:"-30";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:1:"p";a:3:{s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:6:"period";a:3:{s:13:"quotedblright";s:4:"-120";s:10:"quoteright";s:4:"-120";s:5:"space";s:3:"-40";}s:13:"quotedblright";a:1:{s:5:"space";s:3:"-80";}s:9:"quoteleft";a:1:{s:9:"quoteleft";s:3:"-46";}s:10:"quoteright";a:18:{s:1:"d";s:3:"-80";s:6:"dcroat";s:3:"-80";s:1:"l";s:3:"-20";s:6:"lacute";s:3:"-20";s:12:"lcommaaccent";s:3:"-20";s:6:"lslash";s:3:"-20";s:10:"quoteright";s:3:"-46";s:1:"r";s:3:"-40";s:6:"racute";s:3:"-40";s:6:"rcaron";s:3:"-40";s:12:"rcommaaccent";s:3:"-40";s:1:"s";s:3:"-60";s:6:"sacute";s:3:"-60";s:6:"scaron";s:3:"-60";s:8:"scedilla";s:3:"-60";s:12:"scommaaccent";s:3:"-60";s:5:"space";s:3:"-80";s:1:"v";s:3:"-20";}s:1:"r";a:33:{s:1:"c";s:3:"-20";s:6:"cacute";s:3:"-20";s:6:"ccaron";s:3:"-20";s:8:"ccedilla";s:3:"-20";s:5:"comma";s:3:"-60";s:1:"d";s:3:"-20";s:6:"dcroat";s:3:"-20";s:1:"g";s:3:"-15";s:6:"gbreve";s:3:"-15";s:12:"gcommaaccent";s:3:"-15";s:6:"hyphen";s:3:"-20";s:1:"o";s:3:"-20";s:6:"oacute";s:3:"-20";s:11:"ocircumflex";s:3:"-20";s:9:"odieresis";s:3:"-20";s:6:"ograve";s:3:"-20";s:13:"ohungarumlaut";s:3:"-20";s:7:"omacron";s:3:"-20";s:6:"oslash";s:3:"-20";s:6:"otilde";s:3:"-20";s:6:"period";s:3:"-60";s:1:"q";s:3:"-20";s:1:"s";s:3:"-15";s:6:"sacute";s:3:"-15";s:6:"scaron";s:3:"-15";s:8:"scedilla";s:3:"-15";s:12:"scommaaccent";s:3:"-15";s:1:"t";s:2:"20";s:12:"tcommaaccent";s:2:"20";s:1:"v";s:2:"10";s:1:"y";s:2:"10";s:6:"yacute";s:2:"10";s:9:"ydieresis";s:2:"10";}s:6:"racute";a:33:{s:1:"c";s:3:"-20";s:6:"cacute";s:3:"-20";s:6:"ccaron";s:3:"-20";s:8:"ccedilla";s:3:"-20";s:5:"comma";s:3:"-60";s:1:"d";s:3:"-20";s:6:"dcroat";s:3:"-20";s:1:"g";s:3:"-15";s:6:"gbreve";s:3:"-15";s:12:"gcommaaccent";s:3:"-15";s:6:"hyphen";s:3:"-20";s:1:"o";s:3:"-20";s:6:"oacute";s:3:"-20";s:11:"ocircumflex";s:3:"-20";s:9:"odieresis";s:3:"-20";s:6:"ograve";s:3:"-20";s:13:"ohungarumlaut";s:3:"-20";s:7:"omacron";s:3:"-20";s:6:"oslash";s:3:"-20";s:6:"otilde";s:3:"-20";s:6:"period";s:3:"-60";s:1:"q";s:3:"-20";s:1:"s";s:3:"-15";s:6:"sacute";s:3:"-15";s:6:"scaron";s:3:"-15";s:8:"scedilla";s:3:"-15";s:12:"scommaaccent";s:3:"-15";s:1:"t";s:2:"20";s:12:"tcommaaccent";s:2:"20";s:1:"v";s:2:"10";s:1:"y";s:2:"10";s:6:"yacute";s:2:"10";s:9:"ydieresis";s:2:"10";}s:6:"rcaron";a:33:{s:1:"c";s:3:"-20";s:6:"cacute";s:3:"-20";s:6:"ccaron";s:3:"-20";s:8:"ccedilla";s:3:"-20";s:5:"comma";s:3:"-60";s:1:"d";s:3:"-20";s:6:"dcroat";s:3:"-20";s:1:"g";s:3:"-15";s:6:"gbreve";s:3:"-15";s:12:"gcommaaccent";s:3:"-15";s:6:"hyphen";s:3:"-20";s:1:"o";s:3:"-20";s:6:"oacute";s:3:"-20";s:11:"ocircumflex";s:3:"-20";s:9:"odieresis";s:3:"-20";s:6:"ograve";s:3:"-20";s:13:"ohungarumlaut";s:3:"-20";s:7:"omacron";s:3:"-20";s:6:"oslash";s:3:"-20";s:6:"otilde";s:3:"-20";s:6:"period";s:3:"-60";s:1:"q";s:3:"-20";s:1:"s";s:3:"-15";s:6:"sacute";s:3:"-15";s:6:"scaron";s:3:"-15";s:8:"scedilla";s:3:"-15";s:12:"scommaaccent";s:3:"-15";s:1:"t";s:2:"20";s:12:"tcommaaccent";s:2:"20";s:1:"v";s:2:"10";s:1:"y";s:2:"10";s:6:"yacute";s:2:"10";s:9:"ydieresis";s:2:"10";}s:12:"rcommaaccent";a:33:{s:1:"c";s:3:"-20";s:6:"cacute";s:3:"-20";s:6:"ccaron";s:3:"-20";s:8:"ccedilla";s:3:"-20";s:5:"comma";s:3:"-60";s:1:"d";s:3:"-20";s:6:"dcroat";s:3:"-20";s:1:"g";s:3:"-15";s:6:"gbreve";s:3:"-15";s:12:"gcommaaccent";s:3:"-15";s:6:"hyphen";s:3:"-20";s:1:"o";s:3:"-20";s:6:"oacute";s:3:"-20";s:11:"ocircumflex";s:3:"-20";s:9:"odieresis";s:3:"-20";s:6:"ograve";s:3:"-20";s:13:"ohungarumlaut";s:3:"-20";s:7:"omacron";s:3:"-20";s:6:"oslash";s:3:"-20";s:6:"otilde";s:3:"-20";s:6:"period";s:3:"-60";s:1:"q";s:3:"-20";s:1:"s";s:3:"-15";s:6:"sacute";s:3:"-15";s:6:"scaron";s:3:"-15";s:8:"scedilla";s:3:"-15";s:12:"scommaaccent";s:3:"-15";s:1:"t";s:2:"20";s:12:"tcommaaccent";s:2:"20";s:1:"v";s:2:"10";s:1:"y";s:2:"10";s:6:"yacute";s:2:"10";s:9:"ydieresis";s:2:"10";}s:1:"s";a:1:{s:1:"w";s:3:"-15";}s:6:"sacute";a:1:{s:1:"w";s:3:"-15";}s:6:"scaron";a:1:{s:1:"w";s:3:"-15";}s:8:"scedilla";a:1:{s:1:"w";s:3:"-15";}s:12:"scommaaccent";a:1:{s:1:"w";s:3:"-15";}s:9:"semicolon";a:1:{s:5:"space";s:3:"-40";}s:5:"space";a:10:{s:1:"T";s:4:"-100";s:6:"Tcaron";s:4:"-100";s:12:"Tcommaaccent";s:4:"-100";s:1:"V";s:3:"-80";s:1:"W";s:3:"-80";s:1:"Y";s:4:"-120";s:6:"Yacute";s:4:"-120";s:9:"Ydieresis";s:4:"-120";s:12:"quotedblleft";s:3:"-80";s:9:"quoteleft";s:3:"-60";}s:1:"v";a:21:{s:1:"a";s:3:"-20";s:6:"aacute";s:3:"-20";s:6:"abreve";s:3:"-20";s:11:"acircumflex";s:3:"-20";s:9:"adieresis";s:3:"-20";s:6:"agrave";s:3:"-20";s:7:"amacron";s:3:"-20";s:7:"aogonek";s:3:"-20";s:5:"aring";s:3:"-20";s:6:"atilde";s:3:"-20";s:5:"comma";s:3:"-80";s:1:"o";s:3:"-30";s:6:"oacute";s:3:"-30";s:11:"ocircumflex";s:3:"-30";s:9:"odieresis";s:3:"-30";s:6:"ograve";s:3:"-30";s:13:"ohungarumlaut";s:3:"-30";s:7:"omacron";s:3:"-30";s:6:"oslash";s:3:"-30";s:6:"otilde";s:3:"-30";s:6:"period";s:3:"-80";}s:1:"w";a:11:{s:5:"comma";s:3:"-40";s:1:"o";s:3:"-20";s:6:"oacute";s:3:"-20";s:11:"ocircumflex";s:3:"-20";s:9:"odieresis";s:3:"-20";s:6:"ograve";s:3:"-20";s:13:"ohungarumlaut";s:3:"-20";s:7:"omacron";s:3:"-20";s:6:"oslash";s:3:"-20";s:6:"otilde";s:3:"-20";s:6:"period";s:3:"-40";}s:1:"x";a:9:{s:1:"e";s:3:"-10";s:6:"eacute";s:3:"-10";s:6:"ecaron";s:3:"-10";s:11:"ecircumflex";s:3:"-10";s:9:"edieresis";s:3:"-10";s:10:"edotaccent";s:3:"-10";s:6:"egrave";s:3:"-10";s:7:"emacron";s:3:"-10";s:7:"eogonek";s:3:"-10";}s:1:"y";a:30:{s:1:"a";s:3:"-30";s:6:"aacute";s:3:"-30";s:6:"abreve";s:3:"-30";s:11:"acircumflex";s:3:"-30";s:9:"adieresis";s:3:"-30";s:6:"agrave";s:3:"-30";s:7:"amacron";s:3:"-30";s:7:"aogonek";s:3:"-30";s:5:"aring";s:3:"-30";s:6:"atilde";s:3:"-30";s:5:"comma";s:3:"-80";s:1:"e";s:3:"-10";s:6:"eacute";s:3:"-10";s:6:"ecaron";s:3:"-10";s:11:"ecircumflex";s:3:"-10";s:9:"edieresis";s:3:"-10";s:10:"edotaccent";s:3:"-10";s:6:"egrave";s:3:"-10";s:7:"emacron";s:3:"-10";s:7:"eogonek";s:3:"-10";s:1:"o";s:3:"-25";s:6:"oacute";s:3:"-25";s:11:"ocircumflex";s:3:"-25";s:9:"odieresis";s:3:"-25";s:6:"ograve";s:3:"-25";s:13:"ohungarumlaut";s:3:"-25";s:7:"omacron";s:3:"-25";s:6:"oslash";s:3:"-25";s:6:"otilde";s:3:"-25";s:6:"period";s:3:"-80";}s:6:"yacute";a:30:{s:1:"a";s:3:"-30";s:6:"aacute";s:3:"-30";s:6:"abreve";s:3:"-30";s:11:"acircumflex";s:3:"-30";s:9:"adieresis";s:3:"-30";s:6:"agrave";s:3:"-30";s:7:"amacron";s:3:"-30";s:7:"aogonek";s:3:"-30";s:5:"aring";s:3:"-30";s:6:"atilde";s:3:"-30";s:5:"comma";s:3:"-80";s:1:"e";s:3:"-10";s:6:"eacute";s:3:"-10";s:6:"ecaron";s:3:"-10";s:11:"ecircumflex";s:3:"-10";s:9:"edieresis";s:3:"-10";s:10:"edotaccent";s:3:"-10";s:6:"egrave";s:3:"-10";s:7:"emacron";s:3:"-10";s:7:"eogonek";s:3:"-10";s:1:"o";s:3:"-25";s:6:"oacute";s:3:"-25";s:11:"ocircumflex";s:3:"-25";s:9:"odieresis";s:3:"-25";s:6:"ograve";s:3:"-25";s:13:"ohungarumlaut";s:3:"-25";s:7:"omacron";s:3:"-25";s:6:"oslash";s:3:"-25";s:6:"otilde";s:3:"-25";s:6:"period";s:3:"-80";}s:9:"ydieresis";a:30:{s:1:"a";s:3:"-30";s:6:"aacute";s:3:"-30";s:6:"abreve";s:3:"-30";s:11:"acircumflex";s:3:"-30";s:9:"adieresis";s:3:"-30";s:6:"agrave";s:3:"-30";s:7:"amacron";s:3:"-30";s:7:"aogonek";s:3:"-30";s:5:"aring";s:3:"-30";s:6:"atilde";s:3:"-30";s:5:"comma";s:3:"-80";s:1:"e";s:3:"-10";s:6:"eacute";s:3:"-10";s:6:"ecaron";s:3:"-10";s:11:"ecircumflex";s:3:"-10";s:9:"edieresis";s:3:"-10";s:10:"edotaccent";s:3:"-10";s:6:"egrave";s:3:"-10";s:7:"emacron";s:3:"-10";s:7:"eogonek";s:3:"-10";s:1:"o";s:3:"-25";s:6:"oacute";s:3:"-25";s:11:"ocircumflex";s:3:"-25";s:9:"odieresis";s:3:"-25";s:6:"ograve";s:3:"-25";s:13:"ohungarumlaut";s:3:"-25";s:7:"omacron";s:3:"-25";s:6:"oslash";s:3:"-25";s:6:"otilde";s:3:"-25";s:6:"period";s:3:"-80";}s:1:"z";a:9:{s:1:"e";s:2:"10";s:6:"eacute";s:2:"10";s:6:"ecaron";s:2:"10";s:11:"ecircumflex";s:2:"10";s:9:"edieresis";s:2:"10";s:10:"edotaccent";s:2:"10";s:6:"egrave";s:2:"10";s:7:"emacron";s:2:"10";s:7:"eogonek";s:2:"10";}s:6:"zacute";a:9:{s:1:"e";s:2:"10";s:6:"eacute";s:2:"10";s:6:"ecaron";s:2:"10";s:11:"ecircumflex";s:2:"10";s:9:"edieresis";s:2:"10";s:10:"edotaccent";s:2:"10";s:6:"egrave";s:2:"10";s:7:"emacron";s:2:"10";s:7:"eogonek";s:2:"10";}s:6:"zcaron";a:9:{s:1:"e";s:2:"10";s:6:"eacute";s:2:"10";s:6:"ecaron";s:2:"10";s:11:"ecircumflex";s:2:"10";s:9:"edieresis";s:2:"10";s:10:"edotaccent";s:2:"10";s:6:"egrave";s:2:"10";s:7:"emacron";s:2:"10";s:7:"eogonek";s:2:"10";}s:10:"zdotaccent";a:9:{s:1:"e";s:2:"10";s:6:"eacute";s:2:"10";s:6:"ecaron";s:2:"10";s:11:"ecircumflex";s:2:"10";s:9:"edieresis";s:2:"10";s:10:"edotaccent";s:2:"10";s:6:"egrave";s:2:"10";s:7:"emacron";s:2:"10";s:7:"eogonek";s:2:"10";}}s:9:"_version_";i:1;}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/php_Helvetica-Oblique.afm b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/php_Helvetica-Oblique.afm new file mode 100755 index 00000000..5b32a2fd --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/php_Helvetica-Oblique.afm @@ -0,0 +1 @@ +a:22:{s:8:"FontName";s:17:"Helvetica-Oblique";s:8:"FullName";s:17:"Helvetica Oblique";s:10:"FamilyName";s:9:"Helvetica";s:6:"Weight";s:6:"Medium";s:11:"ItalicAngle";s:3:"-12";s:12:"IsFixedPitch";s:5:"false";s:12:"CharacterSet";s:13:"ExtendedRoman";s:8:"FontBBox";a:4:{i:0;s:4:"-170";i:1;s:4:"-225";i:2;s:4:"1116";i:3;s:3:"931";}s:17:"UnderlinePosition";s:4:"-100";s:18:"UnderlineThickness";s:2:"50";s:7:"Version";s:7:"002.000";s:14:"EncodingScheme";s:21:"AdobeStandardEncoding";s:9:"CapHeight";s:3:"718";s:7:"XHeight";s:3:"523";s:8:"Ascender";s:3:"718";s:9:"Descender";s:4:"-207";s:5:"StdHW";s:2:"76";s:5:"StdVW";s:2:"88";s:16:"StartCharMetrics";s:3:"315";s:1:"C";a:464:{i:32;a:4:{s:1:"C";s:2:"32";s:2:"WX";s:3:"278";s:1:"N";s:5:"space";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:1:"0";i:2;s:1:"0";i:3;s:1:"0";}}s:5:"space";a:4:{s:1:"C";s:2:"32";s:2:"WX";s:3:"278";s:1:"N";s:5:"space";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:1:"0";i:2;s:1:"0";i:3;s:1:"0";}}i:33;a:4:{s:1:"C";s:2:"33";s:2:"WX";s:3:"278";s:1:"N";s:6:"exclam";s:1:"B";a:4:{i:0;s:2:"90";i:1;s:1:"0";i:2;s:3:"340";i:3;s:3:"718";}}s:6:"exclam";a:4:{s:1:"C";s:2:"33";s:2:"WX";s:3:"278";s:1:"N";s:6:"exclam";s:1:"B";a:4:{i:0;s:2:"90";i:1;s:1:"0";i:2;s:3:"340";i:3;s:3:"718";}}i:34;a:4:{s:1:"C";s:2:"34";s:2:"WX";s:3:"355";s:1:"N";s:8:"quotedbl";s:1:"B";a:4:{i:0;s:3:"168";i:1;s:3:"463";i:2;s:3:"438";i:3;s:3:"718";}}s:8:"quotedbl";a:4:{s:1:"C";s:2:"34";s:2:"WX";s:3:"355";s:1:"N";s:8:"quotedbl";s:1:"B";a:4:{i:0;s:3:"168";i:1;s:3:"463";i:2;s:3:"438";i:3;s:3:"718";}}i:35;a:4:{s:1:"C";s:2:"35";s:2:"WX";s:3:"556";s:1:"N";s:10:"numbersign";s:1:"B";a:4:{i:0;s:2:"73";i:1;s:1:"0";i:2;s:3:"631";i:3;s:3:"688";}}s:10:"numbersign";a:4:{s:1:"C";s:2:"35";s:2:"WX";s:3:"556";s:1:"N";s:10:"numbersign";s:1:"B";a:4:{i:0;s:2:"73";i:1;s:1:"0";i:2;s:3:"631";i:3;s:3:"688";}}i:36;a:4:{s:1:"C";s:2:"36";s:2:"WX";s:3:"556";s:1:"N";s:6:"dollar";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:4:"-115";i:2;s:3:"617";i:3;s:3:"775";}}s:6:"dollar";a:4:{s:1:"C";s:2:"36";s:2:"WX";s:3:"556";s:1:"N";s:6:"dollar";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:4:"-115";i:2;s:3:"617";i:3;s:3:"775";}}i:37;a:4:{s:1:"C";s:2:"37";s:2:"WX";s:3:"889";s:1:"N";s:7:"percent";s:1:"B";a:4:{i:0;s:3:"147";i:1;s:3:"-19";i:2;s:3:"889";i:3;s:3:"703";}}s:7:"percent";a:4:{s:1:"C";s:2:"37";s:2:"WX";s:3:"889";s:1:"N";s:7:"percent";s:1:"B";a:4:{i:0;s:3:"147";i:1;s:3:"-19";i:2;s:3:"889";i:3;s:3:"703";}}i:38;a:4:{s:1:"C";s:2:"38";s:2:"WX";s:3:"667";s:1:"N";s:9:"ampersand";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:3:"-15";i:2;s:3:"647";i:3;s:3:"718";}}s:9:"ampersand";a:4:{s:1:"C";s:2:"38";s:2:"WX";s:3:"667";s:1:"N";s:9:"ampersand";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:3:"-15";i:2;s:3:"647";i:3;s:3:"718";}}i:39;a:4:{s:1:"C";s:2:"39";s:2:"WX";s:3:"222";s:1:"N";s:10:"quoteright";s:1:"B";a:4:{i:0;s:3:"151";i:1;s:3:"463";i:2;s:3:"310";i:3;s:3:"718";}}s:10:"quoteright";a:4:{s:1:"C";s:2:"39";s:2:"WX";s:3:"222";s:1:"N";s:10:"quoteright";s:1:"B";a:4:{i:0;s:3:"151";i:1;s:3:"463";i:2;s:3:"310";i:3;s:3:"718";}}i:40;a:4:{s:1:"C";s:2:"40";s:2:"WX";s:3:"333";s:1:"N";s:9:"parenleft";s:1:"B";a:4:{i:0;s:3:"108";i:1;s:4:"-207";i:2;s:3:"454";i:3;s:3:"733";}}s:9:"parenleft";a:4:{s:1:"C";s:2:"40";s:2:"WX";s:3:"333";s:1:"N";s:9:"parenleft";s:1:"B";a:4:{i:0;s:3:"108";i:1;s:4:"-207";i:2;s:3:"454";i:3;s:3:"733";}}i:41;a:4:{s:1:"C";s:2:"41";s:2:"WX";s:3:"333";s:1:"N";s:10:"parenright";s:1:"B";a:4:{i:0;s:2:"-9";i:1;s:4:"-207";i:2;s:3:"337";i:3;s:3:"733";}}s:10:"parenright";a:4:{s:1:"C";s:2:"41";s:2:"WX";s:3:"333";s:1:"N";s:10:"parenright";s:1:"B";a:4:{i:0;s:2:"-9";i:1;s:4:"-207";i:2;s:3:"337";i:3;s:3:"733";}}i:42;a:4:{s:1:"C";s:2:"42";s:2:"WX";s:3:"389";s:1:"N";s:8:"asterisk";s:1:"B";a:4:{i:0;s:3:"165";i:1;s:3:"431";i:2;s:3:"475";i:3;s:3:"718";}}s:8:"asterisk";a:4:{s:1:"C";s:2:"42";s:2:"WX";s:3:"389";s:1:"N";s:8:"asterisk";s:1:"B";a:4:{i:0;s:3:"165";i:1;s:3:"431";i:2;s:3:"475";i:3;s:3:"718";}}i:43;a:4:{s:1:"C";s:2:"43";s:2:"WX";s:3:"584";s:1:"N";s:4:"plus";s:1:"B";a:4:{i:0;s:2:"85";i:1;s:1:"0";i:2;s:3:"606";i:3;s:3:"505";}}s:4:"plus";a:4:{s:1:"C";s:2:"43";s:2:"WX";s:3:"584";s:1:"N";s:4:"plus";s:1:"B";a:4:{i:0;s:2:"85";i:1;s:1:"0";i:2;s:3:"606";i:3;s:3:"505";}}i:44;a:4:{s:1:"C";s:2:"44";s:2:"WX";s:3:"278";s:1:"N";s:5:"comma";s:1:"B";a:4:{i:0;s:2:"56";i:1;s:4:"-147";i:2;s:3:"214";i:3;s:3:"106";}}s:5:"comma";a:4:{s:1:"C";s:2:"44";s:2:"WX";s:3:"278";s:1:"N";s:5:"comma";s:1:"B";a:4:{i:0;s:2:"56";i:1;s:4:"-147";i:2;s:3:"214";i:3;s:3:"106";}}i:45;a:4:{s:1:"C";s:2:"45";s:2:"WX";s:3:"333";s:1:"N";s:6:"hyphen";s:1:"B";a:4:{i:0;s:2:"93";i:1;s:3:"232";i:2;s:3:"357";i:3;s:3:"322";}}s:6:"hyphen";a:4:{s:1:"C";s:2:"45";s:2:"WX";s:3:"333";s:1:"N";s:6:"hyphen";s:1:"B";a:4:{i:0;s:2:"93";i:1;s:3:"232";i:2;s:3:"357";i:3;s:3:"322";}}i:46;a:4:{s:1:"C";s:2:"46";s:2:"WX";s:3:"278";s:1:"N";s:6:"period";s:1:"B";a:4:{i:0;s:2:"87";i:1;s:1:"0";i:2;s:3:"214";i:3;s:3:"106";}}s:6:"period";a:4:{s:1:"C";s:2:"46";s:2:"WX";s:3:"278";s:1:"N";s:6:"period";s:1:"B";a:4:{i:0;s:2:"87";i:1;s:1:"0";i:2;s:3:"214";i:3;s:3:"106";}}i:47;a:4:{s:1:"C";s:2:"47";s:2:"WX";s:3:"278";s:1:"N";s:5:"slash";s:1:"B";a:4:{i:0;s:3:"-21";i:1;s:3:"-19";i:2;s:3:"452";i:3;s:3:"737";}}s:5:"slash";a:4:{s:1:"C";s:2:"47";s:2:"WX";s:3:"278";s:1:"N";s:5:"slash";s:1:"B";a:4:{i:0;s:3:"-21";i:1;s:3:"-19";i:2;s:3:"452";i:3;s:3:"737";}}i:48;a:4:{s:1:"C";s:2:"48";s:2:"WX";s:3:"556";s:1:"N";s:4:"zero";s:1:"B";a:4:{i:0;s:2:"93";i:1;s:3:"-19";i:2;s:3:"608";i:3;s:3:"703";}}s:4:"zero";a:4:{s:1:"C";s:2:"48";s:2:"WX";s:3:"556";s:1:"N";s:4:"zero";s:1:"B";a:4:{i:0;s:2:"93";i:1;s:3:"-19";i:2;s:3:"608";i:3;s:3:"703";}}i:49;a:4:{s:1:"C";s:2:"49";s:2:"WX";s:3:"556";s:1:"N";s:3:"one";s:1:"B";a:4:{i:0;s:3:"207";i:1;s:1:"0";i:2;s:3:"508";i:3;s:3:"703";}}s:3:"one";a:4:{s:1:"C";s:2:"49";s:2:"WX";s:3:"556";s:1:"N";s:3:"one";s:1:"B";a:4:{i:0;s:3:"207";i:1;s:1:"0";i:2;s:3:"508";i:3;s:3:"703";}}i:50;a:4:{s:1:"C";s:2:"50";s:2:"WX";s:3:"556";s:1:"N";s:3:"two";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:1:"0";i:2;s:3:"617";i:3;s:3:"703";}}s:3:"two";a:4:{s:1:"C";s:2:"50";s:2:"WX";s:3:"556";s:1:"N";s:3:"two";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:1:"0";i:2;s:3:"617";i:3;s:3:"703";}}i:51;a:4:{s:1:"C";s:2:"51";s:2:"WX";s:3:"556";s:1:"N";s:5:"three";s:1:"B";a:4:{i:0;s:2:"75";i:1;s:3:"-19";i:2;s:3:"610";i:3;s:3:"703";}}s:5:"three";a:4:{s:1:"C";s:2:"51";s:2:"WX";s:3:"556";s:1:"N";s:5:"three";s:1:"B";a:4:{i:0;s:2:"75";i:1;s:3:"-19";i:2;s:3:"610";i:3;s:3:"703";}}i:52;a:4:{s:1:"C";s:2:"52";s:2:"WX";s:3:"556";s:1:"N";s:4:"four";s:1:"B";a:4:{i:0;s:2:"61";i:1;s:1:"0";i:2;s:3:"576";i:3;s:3:"703";}}s:4:"four";a:4:{s:1:"C";s:2:"52";s:2:"WX";s:3:"556";s:1:"N";s:4:"four";s:1:"B";a:4:{i:0;s:2:"61";i:1;s:1:"0";i:2;s:3:"576";i:3;s:3:"703";}}i:53;a:4:{s:1:"C";s:2:"53";s:2:"WX";s:3:"556";s:1:"N";s:4:"five";s:1:"B";a:4:{i:0;s:2:"68";i:1;s:3:"-19";i:2;s:3:"621";i:3;s:3:"688";}}s:4:"five";a:4:{s:1:"C";s:2:"53";s:2:"WX";s:3:"556";s:1:"N";s:4:"five";s:1:"B";a:4:{i:0;s:2:"68";i:1;s:3:"-19";i:2;s:3:"621";i:3;s:3:"688";}}i:54;a:4:{s:1:"C";s:2:"54";s:2:"WX";s:3:"556";s:1:"N";s:3:"six";s:1:"B";a:4:{i:0;s:2:"91";i:1;s:3:"-19";i:2;s:3:"615";i:3;s:3:"703";}}s:3:"six";a:4:{s:1:"C";s:2:"54";s:2:"WX";s:3:"556";s:1:"N";s:3:"six";s:1:"B";a:4:{i:0;s:2:"91";i:1;s:3:"-19";i:2;s:3:"615";i:3;s:3:"703";}}i:55;a:4:{s:1:"C";s:2:"55";s:2:"WX";s:3:"556";s:1:"N";s:5:"seven";s:1:"B";a:4:{i:0;s:3:"137";i:1;s:1:"0";i:2;s:3:"669";i:3;s:3:"688";}}s:5:"seven";a:4:{s:1:"C";s:2:"55";s:2:"WX";s:3:"556";s:1:"N";s:5:"seven";s:1:"B";a:4:{i:0;s:3:"137";i:1;s:1:"0";i:2;s:3:"669";i:3;s:3:"688";}}i:56;a:4:{s:1:"C";s:2:"56";s:2:"WX";s:3:"556";s:1:"N";s:5:"eight";s:1:"B";a:4:{i:0;s:2:"74";i:1;s:3:"-19";i:2;s:3:"607";i:3;s:3:"703";}}s:5:"eight";a:4:{s:1:"C";s:2:"56";s:2:"WX";s:3:"556";s:1:"N";s:5:"eight";s:1:"B";a:4:{i:0;s:2:"74";i:1;s:3:"-19";i:2;s:3:"607";i:3;s:3:"703";}}i:57;a:4:{s:1:"C";s:2:"57";s:2:"WX";s:3:"556";s:1:"N";s:4:"nine";s:1:"B";a:4:{i:0;s:2:"82";i:1;s:3:"-19";i:2;s:3:"609";i:3;s:3:"703";}}s:4:"nine";a:4:{s:1:"C";s:2:"57";s:2:"WX";s:3:"556";s:1:"N";s:4:"nine";s:1:"B";a:4:{i:0;s:2:"82";i:1;s:3:"-19";i:2;s:3:"609";i:3;s:3:"703";}}i:58;a:4:{s:1:"C";s:2:"58";s:2:"WX";s:3:"278";s:1:"N";s:5:"colon";s:1:"B";a:4:{i:0;s:2:"87";i:1;s:1:"0";i:2;s:3:"301";i:3;s:3:"516";}}s:5:"colon";a:4:{s:1:"C";s:2:"58";s:2:"WX";s:3:"278";s:1:"N";s:5:"colon";s:1:"B";a:4:{i:0;s:2:"87";i:1;s:1:"0";i:2;s:3:"301";i:3;s:3:"516";}}i:59;a:4:{s:1:"C";s:2:"59";s:2:"WX";s:3:"278";s:1:"N";s:9:"semicolon";s:1:"B";a:4:{i:0;s:2:"56";i:1;s:4:"-147";i:2;s:3:"301";i:3;s:3:"516";}}s:9:"semicolon";a:4:{s:1:"C";s:2:"59";s:2:"WX";s:3:"278";s:1:"N";s:9:"semicolon";s:1:"B";a:4:{i:0;s:2:"56";i:1;s:4:"-147";i:2;s:3:"301";i:3;s:3:"516";}}i:60;a:4:{s:1:"C";s:2:"60";s:2:"WX";s:3:"584";s:1:"N";s:4:"less";s:1:"B";a:4:{i:0;s:2:"94";i:1;s:2:"11";i:2;s:3:"641";i:3;s:3:"495";}}s:4:"less";a:4:{s:1:"C";s:2:"60";s:2:"WX";s:3:"584";s:1:"N";s:4:"less";s:1:"B";a:4:{i:0;s:2:"94";i:1;s:2:"11";i:2;s:3:"641";i:3;s:3:"495";}}i:61;a:4:{s:1:"C";s:2:"61";s:2:"WX";s:3:"584";s:1:"N";s:5:"equal";s:1:"B";a:4:{i:0;s:2:"63";i:1;s:3:"115";i:2;s:3:"628";i:3;s:3:"390";}}s:5:"equal";a:4:{s:1:"C";s:2:"61";s:2:"WX";s:3:"584";s:1:"N";s:5:"equal";s:1:"B";a:4:{i:0;s:2:"63";i:1;s:3:"115";i:2;s:3:"628";i:3;s:3:"390";}}i:62;a:4:{s:1:"C";s:2:"62";s:2:"WX";s:3:"584";s:1:"N";s:7:"greater";s:1:"B";a:4:{i:0;s:2:"50";i:1;s:2:"11";i:2;s:3:"597";i:3;s:3:"495";}}s:7:"greater";a:4:{s:1:"C";s:2:"62";s:2:"WX";s:3:"584";s:1:"N";s:7:"greater";s:1:"B";a:4:{i:0;s:2:"50";i:1;s:2:"11";i:2;s:3:"597";i:3;s:3:"495";}}i:63;a:4:{s:1:"C";s:2:"63";s:2:"WX";s:3:"556";s:1:"N";s:8:"question";s:1:"B";a:4:{i:0;s:3:"161";i:1;s:1:"0";i:2;s:3:"610";i:3;s:3:"727";}}s:8:"question";a:4:{s:1:"C";s:2:"63";s:2:"WX";s:3:"556";s:1:"N";s:8:"question";s:1:"B";a:4:{i:0;s:3:"161";i:1;s:1:"0";i:2;s:3:"610";i:3;s:3:"727";}}i:64;a:4:{s:1:"C";s:2:"64";s:2:"WX";s:4:"1015";s:1:"N";s:2:"at";s:1:"B";a:4:{i:0;s:3:"215";i:1;s:3:"-19";i:2;s:3:"965";i:3;s:3:"737";}}s:2:"at";a:4:{s:1:"C";s:2:"64";s:2:"WX";s:4:"1015";s:1:"N";s:2:"at";s:1:"B";a:4:{i:0;s:3:"215";i:1;s:3:"-19";i:2;s:3:"965";i:3;s:3:"737";}}i:65;a:4:{s:1:"C";s:2:"65";s:2:"WX";s:3:"667";s:1:"N";s:1:"A";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:1:"0";i:2;s:3:"654";i:3;s:3:"718";}}s:1:"A";a:4:{s:1:"C";s:2:"65";s:2:"WX";s:3:"667";s:1:"N";s:1:"A";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:1:"0";i:2;s:3:"654";i:3;s:3:"718";}}i:66;a:4:{s:1:"C";s:2:"66";s:2:"WX";s:3:"667";s:1:"N";s:1:"B";s:1:"B";a:4:{i:0;s:2:"74";i:1;s:1:"0";i:2;s:3:"712";i:3;s:3:"718";}}s:1:"B";a:4:{s:1:"C";s:2:"66";s:2:"WX";s:3:"667";s:1:"N";s:1:"B";s:1:"B";a:4:{i:0;s:2:"74";i:1;s:1:"0";i:2;s:3:"712";i:3;s:3:"718";}}i:67;a:4:{s:1:"C";s:2:"67";s:2:"WX";s:3:"722";s:1:"N";s:1:"C";s:1:"B";a:4:{i:0;s:3:"108";i:1;s:3:"-19";i:2;s:3:"782";i:3;s:3:"737";}}s:1:"C";a:4:{s:1:"C";s:2:"67";s:2:"WX";s:3:"722";s:1:"N";s:1:"C";s:1:"B";a:4:{i:0;s:3:"108";i:1;s:3:"-19";i:2;s:3:"782";i:3;s:3:"737";}}i:68;a:4:{s:1:"C";s:2:"68";s:2:"WX";s:3:"722";s:1:"N";s:1:"D";s:1:"B";a:4:{i:0;s:2:"81";i:1;s:1:"0";i:2;s:3:"764";i:3;s:3:"718";}}s:1:"D";a:4:{s:1:"C";s:2:"68";s:2:"WX";s:3:"722";s:1:"N";s:1:"D";s:1:"B";a:4:{i:0;s:2:"81";i:1;s:1:"0";i:2;s:3:"764";i:3;s:3:"718";}}i:69;a:4:{s:1:"C";s:2:"69";s:2:"WX";s:3:"667";s:1:"N";s:1:"E";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:1:"0";i:2;s:3:"762";i:3;s:3:"718";}}s:1:"E";a:4:{s:1:"C";s:2:"69";s:2:"WX";s:3:"667";s:1:"N";s:1:"E";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:1:"0";i:2;s:3:"762";i:3;s:3:"718";}}i:70;a:4:{s:1:"C";s:2:"70";s:2:"WX";s:3:"611";s:1:"N";s:1:"F";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:1:"0";i:2;s:3:"736";i:3;s:3:"718";}}s:1:"F";a:4:{s:1:"C";s:2:"70";s:2:"WX";s:3:"611";s:1:"N";s:1:"F";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:1:"0";i:2;s:3:"736";i:3;s:3:"718";}}i:71;a:4:{s:1:"C";s:2:"71";s:2:"WX";s:3:"778";s:1:"N";s:1:"G";s:1:"B";a:4:{i:0;s:3:"111";i:1;s:3:"-19";i:2;s:3:"799";i:3;s:3:"737";}}s:1:"G";a:4:{s:1:"C";s:2:"71";s:2:"WX";s:3:"778";s:1:"N";s:1:"G";s:1:"B";a:4:{i:0;s:3:"111";i:1;s:3:"-19";i:2;s:3:"799";i:3;s:3:"737";}}i:72;a:4:{s:1:"C";s:2:"72";s:2:"WX";s:3:"722";s:1:"N";s:1:"H";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:1:"0";i:2;s:3:"799";i:3;s:3:"718";}}s:1:"H";a:4:{s:1:"C";s:2:"72";s:2:"WX";s:3:"722";s:1:"N";s:1:"H";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:1:"0";i:2;s:3:"799";i:3;s:3:"718";}}i:73;a:4:{s:1:"C";s:2:"73";s:2:"WX";s:3:"278";s:1:"N";s:1:"I";s:1:"B";a:4:{i:0;s:2:"91";i:1;s:1:"0";i:2;s:3:"341";i:3;s:3:"718";}}s:1:"I";a:4:{s:1:"C";s:2:"73";s:2:"WX";s:3:"278";s:1:"N";s:1:"I";s:1:"B";a:4:{i:0;s:2:"91";i:1;s:1:"0";i:2;s:3:"341";i:3;s:3:"718";}}i:74;a:4:{s:1:"C";s:2:"74";s:2:"WX";s:3:"500";s:1:"N";s:1:"J";s:1:"B";a:4:{i:0;s:2:"47";i:1;s:3:"-19";i:2;s:3:"581";i:3;s:3:"718";}}s:1:"J";a:4:{s:1:"C";s:2:"74";s:2:"WX";s:3:"500";s:1:"N";s:1:"J";s:1:"B";a:4:{i:0;s:2:"47";i:1;s:3:"-19";i:2;s:3:"581";i:3;s:3:"718";}}i:75;a:4:{s:1:"C";s:2:"75";s:2:"WX";s:3:"667";s:1:"N";s:1:"K";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"808";i:3;s:3:"718";}}s:1:"K";a:4:{s:1:"C";s:2:"75";s:2:"WX";s:3:"667";s:1:"N";s:1:"K";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"808";i:3;s:3:"718";}}i:76;a:4:{s:1:"C";s:2:"76";s:2:"WX";s:3:"556";s:1:"N";s:1:"L";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"555";i:3;s:3:"718";}}s:1:"L";a:4:{s:1:"C";s:2:"76";s:2:"WX";s:3:"556";s:1:"N";s:1:"L";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"555";i:3;s:3:"718";}}i:77;a:4:{s:1:"C";s:2:"77";s:2:"WX";s:3:"833";s:1:"N";s:1:"M";s:1:"B";a:4:{i:0;s:2:"73";i:1;s:1:"0";i:2;s:3:"914";i:3;s:3:"718";}}s:1:"M";a:4:{s:1:"C";s:2:"77";s:2:"WX";s:3:"833";s:1:"N";s:1:"M";s:1:"B";a:4:{i:0;s:2:"73";i:1;s:1:"0";i:2;s:3:"914";i:3;s:3:"718";}}i:78;a:4:{s:1:"C";s:2:"78";s:2:"WX";s:3:"722";s:1:"N";s:1:"N";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"799";i:3;s:3:"718";}}s:1:"N";a:4:{s:1:"C";s:2:"78";s:2:"WX";s:3:"722";s:1:"N";s:1:"N";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"799";i:3;s:3:"718";}}i:79;a:4:{s:1:"C";s:2:"79";s:2:"WX";s:3:"778";s:1:"N";s:1:"O";s:1:"B";a:4:{i:0;s:3:"105";i:1;s:3:"-19";i:2;s:3:"826";i:3;s:3:"737";}}s:1:"O";a:4:{s:1:"C";s:2:"79";s:2:"WX";s:3:"778";s:1:"N";s:1:"O";s:1:"B";a:4:{i:0;s:3:"105";i:1;s:3:"-19";i:2;s:3:"826";i:3;s:3:"737";}}i:80;a:4:{s:1:"C";s:2:"80";s:2:"WX";s:3:"667";s:1:"N";s:1:"P";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:1:"0";i:2;s:3:"737";i:3;s:3:"718";}}s:1:"P";a:4:{s:1:"C";s:2:"80";s:2:"WX";s:3:"667";s:1:"N";s:1:"P";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:1:"0";i:2;s:3:"737";i:3;s:3:"718";}}i:81;a:4:{s:1:"C";s:2:"81";s:2:"WX";s:3:"778";s:1:"N";s:1:"Q";s:1:"B";a:4:{i:0;s:3:"105";i:1;s:3:"-56";i:2;s:3:"826";i:3;s:3:"737";}}s:1:"Q";a:4:{s:1:"C";s:2:"81";s:2:"WX";s:3:"778";s:1:"N";s:1:"Q";s:1:"B";a:4:{i:0;s:3:"105";i:1;s:3:"-56";i:2;s:3:"826";i:3;s:3:"737";}}i:82;a:4:{s:1:"C";s:2:"82";s:2:"WX";s:3:"722";s:1:"N";s:1:"R";s:1:"B";a:4:{i:0;s:2:"88";i:1;s:1:"0";i:2;s:3:"773";i:3;s:3:"718";}}s:1:"R";a:4:{s:1:"C";s:2:"82";s:2:"WX";s:3:"722";s:1:"N";s:1:"R";s:1:"B";a:4:{i:0;s:2:"88";i:1;s:1:"0";i:2;s:3:"773";i:3;s:3:"718";}}i:83;a:4:{s:1:"C";s:2:"83";s:2:"WX";s:3:"667";s:1:"N";s:1:"S";s:1:"B";a:4:{i:0;s:2:"90";i:1;s:3:"-19";i:2;s:3:"713";i:3;s:3:"737";}}s:1:"S";a:4:{s:1:"C";s:2:"83";s:2:"WX";s:3:"667";s:1:"N";s:1:"S";s:1:"B";a:4:{i:0;s:2:"90";i:1;s:3:"-19";i:2;s:3:"713";i:3;s:3:"737";}}i:84;a:4:{s:1:"C";s:2:"84";s:2:"WX";s:3:"611";s:1:"N";s:1:"T";s:1:"B";a:4:{i:0;s:3:"148";i:1;s:1:"0";i:2;s:3:"750";i:3;s:3:"718";}}s:1:"T";a:4:{s:1:"C";s:2:"84";s:2:"WX";s:3:"611";s:1:"N";s:1:"T";s:1:"B";a:4:{i:0;s:3:"148";i:1;s:1:"0";i:2;s:3:"750";i:3;s:3:"718";}}i:85;a:4:{s:1:"C";s:2:"85";s:2:"WX";s:3:"722";s:1:"N";s:1:"U";s:1:"B";a:4:{i:0;s:3:"123";i:1;s:3:"-19";i:2;s:3:"797";i:3;s:3:"718";}}s:1:"U";a:4:{s:1:"C";s:2:"85";s:2:"WX";s:3:"722";s:1:"N";s:1:"U";s:1:"B";a:4:{i:0;s:3:"123";i:1;s:3:"-19";i:2;s:3:"797";i:3;s:3:"718";}}i:86;a:4:{s:1:"C";s:2:"86";s:2:"WX";s:3:"667";s:1:"N";s:1:"V";s:1:"B";a:4:{i:0;s:3:"173";i:1;s:1:"0";i:2;s:3:"800";i:3;s:3:"718";}}s:1:"V";a:4:{s:1:"C";s:2:"86";s:2:"WX";s:3:"667";s:1:"N";s:1:"V";s:1:"B";a:4:{i:0;s:3:"173";i:1;s:1:"0";i:2;s:3:"800";i:3;s:3:"718";}}i:87;a:4:{s:1:"C";s:2:"87";s:2:"WX";s:3:"944";s:1:"N";s:1:"W";s:1:"B";a:4:{i:0;s:3:"169";i:1;s:1:"0";i:2;s:4:"1081";i:3;s:3:"718";}}s:1:"W";a:4:{s:1:"C";s:2:"87";s:2:"WX";s:3:"944";s:1:"N";s:1:"W";s:1:"B";a:4:{i:0;s:3:"169";i:1;s:1:"0";i:2;s:4:"1081";i:3;s:3:"718";}}i:88;a:4:{s:1:"C";s:2:"88";s:2:"WX";s:3:"667";s:1:"N";s:1:"X";s:1:"B";a:4:{i:0;s:2:"19";i:1;s:1:"0";i:2;s:3:"790";i:3;s:3:"718";}}s:1:"X";a:4:{s:1:"C";s:2:"88";s:2:"WX";s:3:"667";s:1:"N";s:1:"X";s:1:"B";a:4:{i:0;s:2:"19";i:1;s:1:"0";i:2;s:3:"790";i:3;s:3:"718";}}i:89;a:4:{s:1:"C";s:2:"89";s:2:"WX";s:3:"667";s:1:"N";s:1:"Y";s:1:"B";a:4:{i:0;s:3:"167";i:1;s:1:"0";i:2;s:3:"806";i:3;s:3:"718";}}s:1:"Y";a:4:{s:1:"C";s:2:"89";s:2:"WX";s:3:"667";s:1:"N";s:1:"Y";s:1:"B";a:4:{i:0;s:3:"167";i:1;s:1:"0";i:2;s:3:"806";i:3;s:3:"718";}}i:90;a:4:{s:1:"C";s:2:"90";s:2:"WX";s:3:"611";s:1:"N";s:1:"Z";s:1:"B";a:4:{i:0;s:2:"23";i:1;s:1:"0";i:2;s:3:"741";i:3;s:3:"718";}}s:1:"Z";a:4:{s:1:"C";s:2:"90";s:2:"WX";s:3:"611";s:1:"N";s:1:"Z";s:1:"B";a:4:{i:0;s:2:"23";i:1;s:1:"0";i:2;s:3:"741";i:3;s:3:"718";}}i:91;a:4:{s:1:"C";s:2:"91";s:2:"WX";s:3:"278";s:1:"N";s:11:"bracketleft";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:4:"-196";i:2;s:3:"403";i:3;s:3:"722";}}s:11:"bracketleft";a:4:{s:1:"C";s:2:"91";s:2:"WX";s:3:"278";s:1:"N";s:11:"bracketleft";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:4:"-196";i:2;s:3:"403";i:3;s:3:"722";}}i:92;a:4:{s:1:"C";s:2:"92";s:2:"WX";s:3:"278";s:1:"N";s:9:"backslash";s:1:"B";a:4:{i:0;s:3:"140";i:1;s:3:"-19";i:2;s:3:"291";i:3;s:3:"737";}}s:9:"backslash";a:4:{s:1:"C";s:2:"92";s:2:"WX";s:3:"278";s:1:"N";s:9:"backslash";s:1:"B";a:4:{i:0;s:3:"140";i:1;s:3:"-19";i:2;s:3:"291";i:3;s:3:"737";}}i:93;a:4:{s:1:"C";s:2:"93";s:2:"WX";s:3:"278";s:1:"N";s:12:"bracketright";s:1:"B";a:4:{i:0;s:3:"-14";i:1;s:4:"-196";i:2;s:3:"368";i:3;s:3:"722";}}s:12:"bracketright";a:4:{s:1:"C";s:2:"93";s:2:"WX";s:3:"278";s:1:"N";s:12:"bracketright";s:1:"B";a:4:{i:0;s:3:"-14";i:1;s:4:"-196";i:2;s:3:"368";i:3;s:3:"722";}}i:94;a:4:{s:1:"C";s:2:"94";s:2:"WX";s:3:"469";s:1:"N";s:11:"asciicircum";s:1:"B";a:4:{i:0;s:2:"42";i:1;s:3:"264";i:2;s:3:"539";i:3;s:3:"688";}}s:11:"asciicircum";a:4:{s:1:"C";s:2:"94";s:2:"WX";s:3:"469";s:1:"N";s:11:"asciicircum";s:1:"B";a:4:{i:0;s:2:"42";i:1;s:3:"264";i:2;s:3:"539";i:3;s:3:"688";}}i:95;a:4:{s:1:"C";s:2:"95";s:2:"WX";s:3:"556";s:1:"N";s:10:"underscore";s:1:"B";a:4:{i:0;s:3:"-27";i:1;s:4:"-125";i:2;s:3:"540";i:3;s:3:"-75";}}s:10:"underscore";a:4:{s:1:"C";s:2:"95";s:2:"WX";s:3:"556";s:1:"N";s:10:"underscore";s:1:"B";a:4:{i:0;s:3:"-27";i:1;s:4:"-125";i:2;s:3:"540";i:3;s:3:"-75";}}i:96;a:4:{s:1:"C";s:2:"96";s:2:"WX";s:3:"222";s:1:"N";s:9:"quoteleft";s:1:"B";a:4:{i:0;s:3:"165";i:1;s:3:"470";i:2;s:3:"323";i:3;s:3:"725";}}s:9:"quoteleft";a:4:{s:1:"C";s:2:"96";s:2:"WX";s:3:"222";s:1:"N";s:9:"quoteleft";s:1:"B";a:4:{i:0;s:3:"165";i:1;s:3:"470";i:2;s:3:"323";i:3;s:3:"725";}}i:97;a:4:{s:1:"C";s:2:"97";s:2:"WX";s:3:"556";s:1:"N";s:1:"a";s:1:"B";a:4:{i:0;s:2:"61";i:1;s:3:"-15";i:2;s:3:"559";i:3;s:3:"538";}}s:1:"a";a:4:{s:1:"C";s:2:"97";s:2:"WX";s:3:"556";s:1:"N";s:1:"a";s:1:"B";a:4:{i:0;s:2:"61";i:1;s:3:"-15";i:2;s:3:"559";i:3;s:3:"538";}}i:98;a:4:{s:1:"C";s:2:"98";s:2:"WX";s:3:"556";s:1:"N";s:1:"b";s:1:"B";a:4:{i:0;s:2:"58";i:1;s:3:"-15";i:2;s:3:"584";i:3;s:3:"718";}}s:1:"b";a:4:{s:1:"C";s:2:"98";s:2:"WX";s:3:"556";s:1:"N";s:1:"b";s:1:"B";a:4:{i:0;s:2:"58";i:1;s:3:"-15";i:2;s:3:"584";i:3;s:3:"718";}}i:99;a:4:{s:1:"C";s:2:"99";s:2:"WX";s:3:"500";s:1:"N";s:1:"c";s:1:"B";a:4:{i:0;s:2:"74";i:1;s:3:"-15";i:2;s:3:"553";i:3;s:3:"538";}}s:1:"c";a:4:{s:1:"C";s:2:"99";s:2:"WX";s:3:"500";s:1:"N";s:1:"c";s:1:"B";a:4:{i:0;s:2:"74";i:1;s:3:"-15";i:2;s:3:"553";i:3;s:3:"538";}}i:100;a:4:{s:1:"C";s:3:"100";s:2:"WX";s:3:"556";s:1:"N";s:1:"d";s:1:"B";a:4:{i:0;s:2:"84";i:1;s:3:"-15";i:2;s:3:"652";i:3;s:3:"718";}}s:1:"d";a:4:{s:1:"C";s:3:"100";s:2:"WX";s:3:"556";s:1:"N";s:1:"d";s:1:"B";a:4:{i:0;s:2:"84";i:1;s:3:"-15";i:2;s:3:"652";i:3;s:3:"718";}}i:101;a:4:{s:1:"C";s:3:"101";s:2:"WX";s:3:"556";s:1:"N";s:1:"e";s:1:"B";a:4:{i:0;s:2:"84";i:1;s:3:"-15";i:2;s:3:"578";i:3;s:3:"538";}}s:1:"e";a:4:{s:1:"C";s:3:"101";s:2:"WX";s:3:"556";s:1:"N";s:1:"e";s:1:"B";a:4:{i:0;s:2:"84";i:1;s:3:"-15";i:2;s:3:"578";i:3;s:3:"538";}}i:102;a:5:{s:1:"C";s:3:"102";s:2:"WX";s:3:"278";s:1:"N";s:1:"f";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:1:"0";i:2;s:3:"416";i:3;s:3:"728";}s:1:"L";a:2:{i:0;s:1:"l";i:1;s:2:"fl";}}s:1:"f";a:5:{s:1:"C";s:3:"102";s:2:"WX";s:3:"278";s:1:"N";s:1:"f";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:1:"0";i:2;s:3:"416";i:3;s:3:"728";}s:1:"L";a:2:{i:0;s:1:"l";i:1;s:2:"fl";}}i:103;a:4:{s:1:"C";s:3:"103";s:2:"WX";s:3:"556";s:1:"N";s:1:"g";s:1:"B";a:4:{i:0;s:2:"42";i:1;s:4:"-220";i:2;s:3:"610";i:3;s:3:"538";}}s:1:"g";a:4:{s:1:"C";s:3:"103";s:2:"WX";s:3:"556";s:1:"N";s:1:"g";s:1:"B";a:4:{i:0;s:2:"42";i:1;s:4:"-220";i:2;s:3:"610";i:3;s:3:"538";}}i:104;a:4:{s:1:"C";s:3:"104";s:2:"WX";s:3:"556";s:1:"N";s:1:"h";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:1:"0";i:2;s:3:"573";i:3;s:3:"718";}}s:1:"h";a:4:{s:1:"C";s:3:"104";s:2:"WX";s:3:"556";s:1:"N";s:1:"h";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:1:"0";i:2;s:3:"573";i:3;s:3:"718";}}i:105;a:4:{s:1:"C";s:3:"105";s:2:"WX";s:3:"222";s:1:"N";s:1:"i";s:1:"B";a:4:{i:0;s:2:"67";i:1;s:1:"0";i:2;s:3:"308";i:3;s:3:"718";}}s:1:"i";a:4:{s:1:"C";s:3:"105";s:2:"WX";s:3:"222";s:1:"N";s:1:"i";s:1:"B";a:4:{i:0;s:2:"67";i:1;s:1:"0";i:2;s:3:"308";i:3;s:3:"718";}}i:106;a:4:{s:1:"C";s:3:"106";s:2:"WX";s:3:"222";s:1:"N";s:1:"j";s:1:"B";a:4:{i:0;s:3:"-60";i:1;s:4:"-210";i:2;s:3:"308";i:3;s:3:"718";}}s:1:"j";a:4:{s:1:"C";s:3:"106";s:2:"WX";s:3:"222";s:1:"N";s:1:"j";s:1:"B";a:4:{i:0;s:3:"-60";i:1;s:4:"-210";i:2;s:3:"308";i:3;s:3:"718";}}i:107;a:4:{s:1:"C";s:3:"107";s:2:"WX";s:3:"500";s:1:"N";s:1:"k";s:1:"B";a:4:{i:0;s:2:"67";i:1;s:1:"0";i:2;s:3:"600";i:3;s:3:"718";}}s:1:"k";a:4:{s:1:"C";s:3:"107";s:2:"WX";s:3:"500";s:1:"N";s:1:"k";s:1:"B";a:4:{i:0;s:2:"67";i:1;s:1:"0";i:2;s:3:"600";i:3;s:3:"718";}}i:108;a:4:{s:1:"C";s:3:"108";s:2:"WX";s:3:"222";s:1:"N";s:1:"l";s:1:"B";a:4:{i:0;s:2:"67";i:1;s:1:"0";i:2;s:3:"308";i:3;s:3:"718";}}s:1:"l";a:4:{s:1:"C";s:3:"108";s:2:"WX";s:3:"222";s:1:"N";s:1:"l";s:1:"B";a:4:{i:0;s:2:"67";i:1;s:1:"0";i:2;s:3:"308";i:3;s:3:"718";}}i:109;a:4:{s:1:"C";s:3:"109";s:2:"WX";s:3:"833";s:1:"N";s:1:"m";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:1:"0";i:2;s:3:"852";i:3;s:3:"538";}}s:1:"m";a:4:{s:1:"C";s:3:"109";s:2:"WX";s:3:"833";s:1:"N";s:1:"m";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:1:"0";i:2;s:3:"852";i:3;s:3:"538";}}i:110;a:4:{s:1:"C";s:3:"110";s:2:"WX";s:3:"556";s:1:"N";s:1:"n";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:1:"0";i:2;s:3:"573";i:3;s:3:"538";}}s:1:"n";a:4:{s:1:"C";s:3:"110";s:2:"WX";s:3:"556";s:1:"N";s:1:"n";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:1:"0";i:2;s:3:"573";i:3;s:3:"538";}}i:111;a:4:{s:1:"C";s:3:"111";s:2:"WX";s:3:"556";s:1:"N";s:1:"o";s:1:"B";a:4:{i:0;s:2:"83";i:1;s:3:"-14";i:2;s:3:"585";i:3;s:3:"538";}}s:1:"o";a:4:{s:1:"C";s:3:"111";s:2:"WX";s:3:"556";s:1:"N";s:1:"o";s:1:"B";a:4:{i:0;s:2:"83";i:1;s:3:"-14";i:2;s:3:"585";i:3;s:3:"538";}}i:112;a:4:{s:1:"C";s:3:"112";s:2:"WX";s:3:"556";s:1:"N";s:1:"p";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:4:"-207";i:2;s:3:"584";i:3;s:3:"538";}}s:1:"p";a:4:{s:1:"C";s:3:"112";s:2:"WX";s:3:"556";s:1:"N";s:1:"p";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:4:"-207";i:2;s:3:"584";i:3;s:3:"538";}}i:113;a:4:{s:1:"C";s:3:"113";s:2:"WX";s:3:"556";s:1:"N";s:1:"q";s:1:"B";a:4:{i:0;s:2:"84";i:1;s:4:"-207";i:2;s:3:"605";i:3;s:3:"538";}}s:1:"q";a:4:{s:1:"C";s:3:"113";s:2:"WX";s:3:"556";s:1:"N";s:1:"q";s:1:"B";a:4:{i:0;s:2:"84";i:1;s:4:"-207";i:2;s:3:"605";i:3;s:3:"538";}}i:114;a:4:{s:1:"C";s:3:"114";s:2:"WX";s:3:"333";s:1:"N";s:1:"r";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:1:"0";i:2;s:3:"446";i:3;s:3:"538";}}s:1:"r";a:4:{s:1:"C";s:3:"114";s:2:"WX";s:3:"333";s:1:"N";s:1:"r";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:1:"0";i:2;s:3:"446";i:3;s:3:"538";}}i:115;a:4:{s:1:"C";s:3:"115";s:2:"WX";s:3:"500";s:1:"N";s:1:"s";s:1:"B";a:4:{i:0;s:2:"63";i:1;s:3:"-15";i:2;s:3:"529";i:3;s:3:"538";}}s:1:"s";a:4:{s:1:"C";s:3:"115";s:2:"WX";s:3:"500";s:1:"N";s:1:"s";s:1:"B";a:4:{i:0;s:2:"63";i:1;s:3:"-15";i:2;s:3:"529";i:3;s:3:"538";}}i:116;a:4:{s:1:"C";s:3:"116";s:2:"WX";s:3:"278";s:1:"N";s:1:"t";s:1:"B";a:4:{i:0;s:3:"102";i:1;s:2:"-7";i:2;s:3:"368";i:3;s:3:"669";}}s:1:"t";a:4:{s:1:"C";s:3:"116";s:2:"WX";s:3:"278";s:1:"N";s:1:"t";s:1:"B";a:4:{i:0;s:3:"102";i:1;s:2:"-7";i:2;s:3:"368";i:3;s:3:"669";}}i:117;a:4:{s:1:"C";s:3:"117";s:2:"WX";s:3:"556";s:1:"N";s:1:"u";s:1:"B";a:4:{i:0;s:2:"94";i:1;s:3:"-15";i:2;s:3:"600";i:3;s:3:"523";}}s:1:"u";a:4:{s:1:"C";s:3:"117";s:2:"WX";s:3:"556";s:1:"N";s:1:"u";s:1:"B";a:4:{i:0;s:2:"94";i:1;s:3:"-15";i:2;s:3:"600";i:3;s:3:"523";}}i:118;a:4:{s:1:"C";s:3:"118";s:2:"WX";s:3:"500";s:1:"N";s:1:"v";s:1:"B";a:4:{i:0;s:3:"119";i:1;s:1:"0";i:2;s:3:"603";i:3;s:3:"523";}}s:1:"v";a:4:{s:1:"C";s:3:"118";s:2:"WX";s:3:"500";s:1:"N";s:1:"v";s:1:"B";a:4:{i:0;s:3:"119";i:1;s:1:"0";i:2;s:3:"603";i:3;s:3:"523";}}i:119;a:4:{s:1:"C";s:3:"119";s:2:"WX";s:3:"722";s:1:"N";s:1:"w";s:1:"B";a:4:{i:0;s:3:"125";i:1;s:1:"0";i:2;s:3:"820";i:3;s:3:"523";}}s:1:"w";a:4:{s:1:"C";s:3:"119";s:2:"WX";s:3:"722";s:1:"N";s:1:"w";s:1:"B";a:4:{i:0;s:3:"125";i:1;s:1:"0";i:2;s:3:"820";i:3;s:3:"523";}}i:120;a:4:{s:1:"C";s:3:"120";s:2:"WX";s:3:"500";s:1:"N";s:1:"x";s:1:"B";a:4:{i:0;s:2:"11";i:1;s:1:"0";i:2;s:3:"594";i:3;s:3:"523";}}s:1:"x";a:4:{s:1:"C";s:3:"120";s:2:"WX";s:3:"500";s:1:"N";s:1:"x";s:1:"B";a:4:{i:0;s:2:"11";i:1;s:1:"0";i:2;s:3:"594";i:3;s:3:"523";}}i:121;a:4:{s:1:"C";s:3:"121";s:2:"WX";s:3:"500";s:1:"N";s:1:"y";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:4:"-214";i:2;s:3:"600";i:3;s:3:"523";}}s:1:"y";a:4:{s:1:"C";s:3:"121";s:2:"WX";s:3:"500";s:1:"N";s:1:"y";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:4:"-214";i:2;s:3:"600";i:3;s:3:"523";}}i:122;a:4:{s:1:"C";s:3:"122";s:2:"WX";s:3:"500";s:1:"N";s:1:"z";s:1:"B";a:4:{i:0;s:2:"31";i:1;s:1:"0";i:2;s:3:"571";i:3;s:3:"523";}}s:1:"z";a:4:{s:1:"C";s:3:"122";s:2:"WX";s:3:"500";s:1:"N";s:1:"z";s:1:"B";a:4:{i:0;s:2:"31";i:1;s:1:"0";i:2;s:3:"571";i:3;s:3:"523";}}i:123;a:4:{s:1:"C";s:3:"123";s:2:"WX";s:3:"334";s:1:"N";s:9:"braceleft";s:1:"B";a:4:{i:0;s:2:"92";i:1;s:4:"-196";i:2;s:3:"445";i:3;s:3:"722";}}s:9:"braceleft";a:4:{s:1:"C";s:3:"123";s:2:"WX";s:3:"334";s:1:"N";s:9:"braceleft";s:1:"B";a:4:{i:0;s:2:"92";i:1;s:4:"-196";i:2;s:3:"445";i:3;s:3:"722";}}i:124;a:4:{s:1:"C";s:3:"124";s:2:"WX";s:3:"260";s:1:"N";s:3:"bar";s:1:"B";a:4:{i:0;s:2:"46";i:1;s:4:"-225";i:2;s:3:"332";i:3;s:3:"775";}}s:3:"bar";a:4:{s:1:"C";s:3:"124";s:2:"WX";s:3:"260";s:1:"N";s:3:"bar";s:1:"B";a:4:{i:0;s:2:"46";i:1;s:4:"-225";i:2;s:3:"332";i:3;s:3:"775";}}i:125;a:4:{s:1:"C";s:3:"125";s:2:"WX";s:3:"334";s:1:"N";s:10:"braceright";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:4:"-196";i:2;s:3:"354";i:3;s:3:"722";}}s:10:"braceright";a:4:{s:1:"C";s:3:"125";s:2:"WX";s:3:"334";s:1:"N";s:10:"braceright";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:4:"-196";i:2;s:3:"354";i:3;s:3:"722";}}i:126;a:4:{s:1:"C";s:3:"126";s:2:"WX";s:3:"584";s:1:"N";s:10:"asciitilde";s:1:"B";a:4:{i:0;s:3:"111";i:1;s:3:"180";i:2;s:3:"580";i:3;s:3:"326";}}s:10:"asciitilde";a:4:{s:1:"C";s:3:"126";s:2:"WX";s:3:"584";s:1:"N";s:10:"asciitilde";s:1:"B";a:4:{i:0;s:3:"111";i:1;s:3:"180";i:2;s:3:"580";i:3;s:3:"326";}}i:161;a:4:{s:1:"C";s:3:"161";s:2:"WX";s:3:"333";s:1:"N";s:10:"exclamdown";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:4:"-195";i:2;s:3:"326";i:3;s:3:"523";}}s:10:"exclamdown";a:4:{s:1:"C";s:3:"161";s:2:"WX";s:3:"333";s:1:"N";s:10:"exclamdown";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:4:"-195";i:2;s:3:"326";i:3;s:3:"523";}}i:162;a:4:{s:1:"C";s:3:"162";s:2:"WX";s:3:"556";s:1:"N";s:4:"cent";s:1:"B";a:4:{i:0;s:2:"95";i:1;s:4:"-115";i:2;s:3:"584";i:3;s:3:"623";}}s:4:"cent";a:4:{s:1:"C";s:3:"162";s:2:"WX";s:3:"556";s:1:"N";s:4:"cent";s:1:"B";a:4:{i:0;s:2:"95";i:1;s:4:"-115";i:2;s:3:"584";i:3;s:3:"623";}}i:163;a:4:{s:1:"C";s:3:"163";s:2:"WX";s:3:"556";s:1:"N";s:8:"sterling";s:1:"B";a:4:{i:0;s:2:"49";i:1;s:3:"-16";i:2;s:3:"634";i:3;s:3:"718";}}s:8:"sterling";a:4:{s:1:"C";s:3:"163";s:2:"WX";s:3:"556";s:1:"N";s:8:"sterling";s:1:"B";a:4:{i:0;s:2:"49";i:1;s:3:"-16";i:2;s:3:"634";i:3;s:3:"718";}}i:164;a:4:{s:1:"C";s:3:"164";s:2:"WX";s:3:"167";s:1:"N";s:8:"fraction";s:1:"B";a:4:{i:0;s:4:"-170";i:1;s:3:"-19";i:2;s:3:"482";i:3;s:3:"703";}}s:8:"fraction";a:4:{s:1:"C";s:3:"164";s:2:"WX";s:3:"167";s:1:"N";s:8:"fraction";s:1:"B";a:4:{i:0;s:4:"-170";i:1;s:3:"-19";i:2;s:3:"482";i:3;s:3:"703";}}i:165;a:4:{s:1:"C";s:3:"165";s:2:"WX";s:3:"556";s:1:"N";s:3:"yen";s:1:"B";a:4:{i:0;s:2:"81";i:1;s:1:"0";i:2;s:3:"699";i:3;s:3:"688";}}s:3:"yen";a:4:{s:1:"C";s:3:"165";s:2:"WX";s:3:"556";s:1:"N";s:3:"yen";s:1:"B";a:4:{i:0;s:2:"81";i:1;s:1:"0";i:2;s:3:"699";i:3;s:3:"688";}}i:166;a:4:{s:1:"C";s:3:"166";s:2:"WX";s:3:"556";s:1:"N";s:6:"florin";s:1:"B";a:4:{i:0;s:3:"-52";i:1;s:4:"-207";i:2;s:3:"654";i:3;s:3:"737";}}s:6:"florin";a:4:{s:1:"C";s:3:"166";s:2:"WX";s:3:"556";s:1:"N";s:6:"florin";s:1:"B";a:4:{i:0;s:3:"-52";i:1;s:4:"-207";i:2;s:3:"654";i:3;s:3:"737";}}i:167;a:4:{s:1:"C";s:3:"167";s:2:"WX";s:3:"556";s:1:"N";s:7:"section";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:4:"-191";i:2;s:3:"584";i:3;s:3:"737";}}s:7:"section";a:4:{s:1:"C";s:3:"167";s:2:"WX";s:3:"556";s:1:"N";s:7:"section";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:4:"-191";i:2;s:3:"584";i:3;s:3:"737";}}i:168;a:4:{s:1:"C";s:3:"168";s:2:"WX";s:3:"556";s:1:"N";s:8:"currency";s:1:"B";a:4:{i:0;s:2:"60";i:1;s:2:"99";i:2;s:3:"646";i:3;s:3:"603";}}s:8:"currency";a:4:{s:1:"C";s:3:"168";s:2:"WX";s:3:"556";s:1:"N";s:8:"currency";s:1:"B";a:4:{i:0;s:2:"60";i:1;s:2:"99";i:2;s:3:"646";i:3;s:3:"603";}}i:169;a:4:{s:1:"C";s:3:"169";s:2:"WX";s:3:"191";s:1:"N";s:11:"quotesingle";s:1:"B";a:4:{i:0;s:3:"157";i:1;s:3:"463";i:2;s:3:"285";i:3;s:3:"718";}}s:11:"quotesingle";a:4:{s:1:"C";s:3:"169";s:2:"WX";s:3:"191";s:1:"N";s:11:"quotesingle";s:1:"B";a:4:{i:0;s:3:"157";i:1;s:3:"463";i:2;s:3:"285";i:3;s:3:"718";}}i:170;a:4:{s:1:"C";s:3:"170";s:2:"WX";s:3:"333";s:1:"N";s:12:"quotedblleft";s:1:"B";a:4:{i:0;s:3:"138";i:1;s:3:"470";i:2;s:3:"461";i:3;s:3:"725";}}s:12:"quotedblleft";a:4:{s:1:"C";s:3:"170";s:2:"WX";s:3:"333";s:1:"N";s:12:"quotedblleft";s:1:"B";a:4:{i:0;s:3:"138";i:1;s:3:"470";i:2;s:3:"461";i:3;s:3:"725";}}i:171;a:4:{s:1:"C";s:3:"171";s:2:"WX";s:3:"556";s:1:"N";s:13:"guillemotleft";s:1:"B";a:4:{i:0;s:3:"146";i:1;s:3:"108";i:2;s:3:"554";i:3;s:3:"446";}}s:13:"guillemotleft";a:4:{s:1:"C";s:3:"171";s:2:"WX";s:3:"556";s:1:"N";s:13:"guillemotleft";s:1:"B";a:4:{i:0;s:3:"146";i:1;s:3:"108";i:2;s:3:"554";i:3;s:3:"446";}}i:172;a:4:{s:1:"C";s:3:"172";s:2:"WX";s:3:"333";s:1:"N";s:13:"guilsinglleft";s:1:"B";a:4:{i:0;s:3:"137";i:1;s:3:"108";i:2;s:3:"340";i:3;s:3:"446";}}s:13:"guilsinglleft";a:4:{s:1:"C";s:3:"172";s:2:"WX";s:3:"333";s:1:"N";s:13:"guilsinglleft";s:1:"B";a:4:{i:0;s:3:"137";i:1;s:3:"108";i:2;s:3:"340";i:3;s:3:"446";}}i:173;a:4:{s:1:"C";s:3:"173";s:2:"WX";s:3:"333";s:1:"N";s:14:"guilsinglright";s:1:"B";a:4:{i:0;s:3:"111";i:1;s:3:"108";i:2;s:3:"314";i:3;s:3:"446";}}s:14:"guilsinglright";a:4:{s:1:"C";s:3:"173";s:2:"WX";s:3:"333";s:1:"N";s:14:"guilsinglright";s:1:"B";a:4:{i:0;s:3:"111";i:1;s:3:"108";i:2;s:3:"314";i:3;s:3:"446";}}i:174;a:4:{s:1:"C";s:3:"174";s:2:"WX";s:3:"500";s:1:"N";s:2:"fi";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:1:"0";i:2;s:3:"587";i:3;s:3:"728";}}s:2:"fi";a:4:{s:1:"C";s:3:"174";s:2:"WX";s:3:"500";s:1:"N";s:2:"fi";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:1:"0";i:2;s:3:"587";i:3;s:3:"728";}}i:175;a:4:{s:1:"C";s:3:"175";s:2:"WX";s:3:"500";s:1:"N";s:2:"fl";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:1:"0";i:2;s:3:"585";i:3;s:3:"728";}}s:2:"fl";a:4:{s:1:"C";s:3:"175";s:2:"WX";s:3:"500";s:1:"N";s:2:"fl";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:1:"0";i:2;s:3:"585";i:3;s:3:"728";}}i:177;a:4:{s:1:"C";s:3:"177";s:2:"WX";s:3:"556";s:1:"N";s:6:"endash";s:1:"B";a:4:{i:0;s:2:"51";i:1;s:3:"240";i:2;s:3:"623";i:3;s:3:"313";}}s:6:"endash";a:4:{s:1:"C";s:3:"177";s:2:"WX";s:3:"556";s:1:"N";s:6:"endash";s:1:"B";a:4:{i:0;s:2:"51";i:1;s:3:"240";i:2;s:3:"623";i:3;s:3:"313";}}i:178;a:4:{s:1:"C";s:3:"178";s:2:"WX";s:3:"556";s:1:"N";s:6:"dagger";s:1:"B";a:4:{i:0;s:3:"135";i:1;s:4:"-159";i:2;s:3:"622";i:3;s:3:"718";}}s:6:"dagger";a:4:{s:1:"C";s:3:"178";s:2:"WX";s:3:"556";s:1:"N";s:6:"dagger";s:1:"B";a:4:{i:0;s:3:"135";i:1;s:4:"-159";i:2;s:3:"622";i:3;s:3:"718";}}i:179;a:4:{s:1:"C";s:3:"179";s:2:"WX";s:3:"556";s:1:"N";s:9:"daggerdbl";s:1:"B";a:4:{i:0;s:2:"52";i:1;s:4:"-159";i:2;s:3:"623";i:3;s:3:"718";}}s:9:"daggerdbl";a:4:{s:1:"C";s:3:"179";s:2:"WX";s:3:"556";s:1:"N";s:9:"daggerdbl";s:1:"B";a:4:{i:0;s:2:"52";i:1;s:4:"-159";i:2;s:3:"623";i:3;s:3:"718";}}i:180;a:4:{s:1:"C";s:3:"180";s:2:"WX";s:3:"278";s:1:"N";s:14:"periodcentered";s:1:"B";a:4:{i:0;s:3:"129";i:1;s:3:"190";i:2;s:3:"257";i:3;s:3:"315";}}s:14:"periodcentered";a:4:{s:1:"C";s:3:"180";s:2:"WX";s:3:"278";s:1:"N";s:14:"periodcentered";s:1:"B";a:4:{i:0;s:3:"129";i:1;s:3:"190";i:2;s:3:"257";i:3;s:3:"315";}}i:182;a:4:{s:1:"C";s:3:"182";s:2:"WX";s:3:"537";s:1:"N";s:9:"paragraph";s:1:"B";a:4:{i:0;s:3:"126";i:1;s:4:"-173";i:2;s:3:"650";i:3;s:3:"718";}}s:9:"paragraph";a:4:{s:1:"C";s:3:"182";s:2:"WX";s:3:"537";s:1:"N";s:9:"paragraph";s:1:"B";a:4:{i:0;s:3:"126";i:1;s:4:"-173";i:2;s:3:"650";i:3;s:3:"718";}}i:183;a:4:{s:1:"C";s:3:"183";s:2:"WX";s:3:"350";s:1:"N";s:6:"bullet";s:1:"B";a:4:{i:0;s:2:"91";i:1;s:3:"202";i:2;s:3:"413";i:3;s:3:"517";}}s:6:"bullet";a:4:{s:1:"C";s:3:"183";s:2:"WX";s:3:"350";s:1:"N";s:6:"bullet";s:1:"B";a:4:{i:0;s:2:"91";i:1;s:3:"202";i:2;s:3:"413";i:3;s:3:"517";}}i:184;a:4:{s:1:"C";s:3:"184";s:2:"WX";s:3:"222";s:1:"N";s:14:"quotesinglbase";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:4:"-149";i:2;s:3:"180";i:3;s:3:"106";}}s:14:"quotesinglbase";a:4:{s:1:"C";s:3:"184";s:2:"WX";s:3:"222";s:1:"N";s:14:"quotesinglbase";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:4:"-149";i:2;s:3:"180";i:3;s:3:"106";}}i:185;a:4:{s:1:"C";s:3:"185";s:2:"WX";s:3:"333";s:1:"N";s:12:"quotedblbase";s:1:"B";a:4:{i:0;s:2:"-6";i:1;s:4:"-149";i:2;s:3:"318";i:3;s:3:"106";}}s:12:"quotedblbase";a:4:{s:1:"C";s:3:"185";s:2:"WX";s:3:"333";s:1:"N";s:12:"quotedblbase";s:1:"B";a:4:{i:0;s:2:"-6";i:1;s:4:"-149";i:2;s:3:"318";i:3;s:3:"106";}}i:186;a:4:{s:1:"C";s:3:"186";s:2:"WX";s:3:"333";s:1:"N";s:13:"quotedblright";s:1:"B";a:4:{i:0;s:3:"124";i:1;s:3:"463";i:2;s:3:"448";i:3;s:3:"718";}}s:13:"quotedblright";a:4:{s:1:"C";s:3:"186";s:2:"WX";s:3:"333";s:1:"N";s:13:"quotedblright";s:1:"B";a:4:{i:0;s:3:"124";i:1;s:3:"463";i:2;s:3:"448";i:3;s:3:"718";}}i:187;a:4:{s:1:"C";s:3:"187";s:2:"WX";s:3:"556";s:1:"N";s:14:"guillemotright";s:1:"B";a:4:{i:0;s:3:"120";i:1;s:3:"108";i:2;s:3:"528";i:3;s:3:"446";}}s:14:"guillemotright";a:4:{s:1:"C";s:3:"187";s:2:"WX";s:3:"556";s:1:"N";s:14:"guillemotright";s:1:"B";a:4:{i:0;s:3:"120";i:1;s:3:"108";i:2;s:3:"528";i:3;s:3:"446";}}i:188;a:4:{s:1:"C";s:3:"188";s:2:"WX";s:4:"1000";s:1:"N";s:8:"ellipsis";s:1:"B";a:4:{i:0;s:3:"115";i:1;s:1:"0";i:2;s:3:"908";i:3;s:3:"106";}}s:8:"ellipsis";a:4:{s:1:"C";s:3:"188";s:2:"WX";s:4:"1000";s:1:"N";s:8:"ellipsis";s:1:"B";a:4:{i:0;s:3:"115";i:1;s:1:"0";i:2;s:3:"908";i:3;s:3:"106";}}i:189;a:4:{s:1:"C";s:3:"189";s:2:"WX";s:4:"1000";s:1:"N";s:11:"perthousand";s:1:"B";a:4:{i:0;s:2:"88";i:1;s:3:"-19";i:2;s:4:"1029";i:3;s:3:"703";}}s:11:"perthousand";a:4:{s:1:"C";s:3:"189";s:2:"WX";s:4:"1000";s:1:"N";s:11:"perthousand";s:1:"B";a:4:{i:0;s:2:"88";i:1;s:3:"-19";i:2;s:4:"1029";i:3;s:3:"703";}}i:191;a:4:{s:1:"C";s:3:"191";s:2:"WX";s:3:"611";s:1:"N";s:12:"questiondown";s:1:"B";a:4:{i:0;s:2:"85";i:1;s:4:"-201";i:2;s:3:"534";i:3;s:3:"525";}}s:12:"questiondown";a:4:{s:1:"C";s:3:"191";s:2:"WX";s:3:"611";s:1:"N";s:12:"questiondown";s:1:"B";a:4:{i:0;s:2:"85";i:1;s:4:"-201";i:2;s:3:"534";i:3;s:3:"525";}}i:193;a:4:{s:1:"C";s:3:"193";s:2:"WX";s:3:"333";s:1:"N";s:5:"grave";s:1:"B";a:4:{i:0;s:3:"170";i:1;s:3:"593";i:2;s:3:"337";i:3;s:3:"734";}}s:5:"grave";a:4:{s:1:"C";s:3:"193";s:2:"WX";s:3:"333";s:1:"N";s:5:"grave";s:1:"B";a:4:{i:0;s:3:"170";i:1;s:3:"593";i:2;s:3:"337";i:3;s:3:"734";}}i:194;a:4:{s:1:"C";s:3:"194";s:2:"WX";s:3:"333";s:1:"N";s:5:"acute";s:1:"B";a:4:{i:0;s:3:"248";i:1;s:3:"593";i:2;s:3:"475";i:3;s:3:"734";}}s:5:"acute";a:4:{s:1:"C";s:3:"194";s:2:"WX";s:3:"333";s:1:"N";s:5:"acute";s:1:"B";a:4:{i:0;s:3:"248";i:1;s:3:"593";i:2;s:3:"475";i:3;s:3:"734";}}i:195;a:4:{s:1:"C";s:3:"195";s:2:"WX";s:3:"333";s:1:"N";s:10:"circumflex";s:1:"B";a:4:{i:0;s:3:"147";i:1;s:3:"593";i:2;s:3:"438";i:3;s:3:"734";}}s:10:"circumflex";a:4:{s:1:"C";s:3:"195";s:2:"WX";s:3:"333";s:1:"N";s:10:"circumflex";s:1:"B";a:4:{i:0;s:3:"147";i:1;s:3:"593";i:2;s:3:"438";i:3;s:3:"734";}}i:196;a:4:{s:1:"C";s:3:"196";s:2:"WX";s:3:"333";s:1:"N";s:5:"tilde";s:1:"B";a:4:{i:0;s:3:"125";i:1;s:3:"606";i:2;s:3:"490";i:3;s:3:"722";}}s:5:"tilde";a:4:{s:1:"C";s:3:"196";s:2:"WX";s:3:"333";s:1:"N";s:5:"tilde";s:1:"B";a:4:{i:0;s:3:"125";i:1;s:3:"606";i:2;s:3:"490";i:3;s:3:"722";}}i:197;a:4:{s:1:"C";s:3:"197";s:2:"WX";s:3:"333";s:1:"N";s:6:"macron";s:1:"B";a:4:{i:0;s:3:"143";i:1;s:3:"627";i:2;s:3:"468";i:3;s:3:"684";}}s:6:"macron";a:4:{s:1:"C";s:3:"197";s:2:"WX";s:3:"333";s:1:"N";s:6:"macron";s:1:"B";a:4:{i:0;s:3:"143";i:1;s:3:"627";i:2;s:3:"468";i:3;s:3:"684";}}i:198;a:4:{s:1:"C";s:3:"198";s:2:"WX";s:3:"333";s:1:"N";s:5:"breve";s:1:"B";a:4:{i:0;s:3:"167";i:1;s:3:"595";i:2;s:3:"476";i:3;s:3:"731";}}s:5:"breve";a:4:{s:1:"C";s:3:"198";s:2:"WX";s:3:"333";s:1:"N";s:5:"breve";s:1:"B";a:4:{i:0;s:3:"167";i:1;s:3:"595";i:2;s:3:"476";i:3;s:3:"731";}}i:199;a:4:{s:1:"C";s:3:"199";s:2:"WX";s:3:"333";s:1:"N";s:9:"dotaccent";s:1:"B";a:4:{i:0;s:3:"249";i:1;s:3:"604";i:2;s:3:"362";i:3;s:3:"706";}}s:9:"dotaccent";a:4:{s:1:"C";s:3:"199";s:2:"WX";s:3:"333";s:1:"N";s:9:"dotaccent";s:1:"B";a:4:{i:0;s:3:"249";i:1;s:3:"604";i:2;s:3:"362";i:3;s:3:"706";}}i:200;a:4:{s:1:"C";s:3:"200";s:2:"WX";s:3:"333";s:1:"N";s:8:"dieresis";s:1:"B";a:4:{i:0;s:3:"168";i:1;s:3:"604";i:2;s:3:"443";i:3;s:3:"706";}}s:8:"dieresis";a:4:{s:1:"C";s:3:"200";s:2:"WX";s:3:"333";s:1:"N";s:8:"dieresis";s:1:"B";a:4:{i:0;s:3:"168";i:1;s:3:"604";i:2;s:3:"443";i:3;s:3:"706";}}i:202;a:4:{s:1:"C";s:3:"202";s:2:"WX";s:3:"333";s:1:"N";s:4:"ring";s:1:"B";a:4:{i:0;s:3:"214";i:1;s:3:"572";i:2;s:3:"402";i:3;s:3:"756";}}s:4:"ring";a:4:{s:1:"C";s:3:"202";s:2:"WX";s:3:"333";s:1:"N";s:4:"ring";s:1:"B";a:4:{i:0;s:3:"214";i:1;s:3:"572";i:2;s:3:"402";i:3;s:3:"756";}}i:203;a:4:{s:1:"C";s:3:"203";s:2:"WX";s:3:"333";s:1:"N";s:7:"cedilla";s:1:"B";a:4:{i:0;s:1:"2";i:1;s:4:"-225";i:2;s:3:"232";i:3;s:1:"0";}}s:7:"cedilla";a:4:{s:1:"C";s:3:"203";s:2:"WX";s:3:"333";s:1:"N";s:7:"cedilla";s:1:"B";a:4:{i:0;s:1:"2";i:1;s:4:"-225";i:2;s:3:"232";i:3;s:1:"0";}}i:205;a:4:{s:1:"C";s:3:"205";s:2:"WX";s:3:"333";s:1:"N";s:12:"hungarumlaut";s:1:"B";a:4:{i:0;s:3:"157";i:1;s:3:"593";i:2;s:3:"565";i:3;s:3:"734";}}s:12:"hungarumlaut";a:4:{s:1:"C";s:3:"205";s:2:"WX";s:3:"333";s:1:"N";s:12:"hungarumlaut";s:1:"B";a:4:{i:0;s:3:"157";i:1;s:3:"593";i:2;s:3:"565";i:3;s:3:"734";}}i:206;a:4:{s:1:"C";s:3:"206";s:2:"WX";s:3:"333";s:1:"N";s:6:"ogonek";s:1:"B";a:4:{i:0;s:2:"43";i:1;s:4:"-225";i:2;s:3:"249";i:3;s:1:"0";}}s:6:"ogonek";a:4:{s:1:"C";s:3:"206";s:2:"WX";s:3:"333";s:1:"N";s:6:"ogonek";s:1:"B";a:4:{i:0;s:2:"43";i:1;s:4:"-225";i:2;s:3:"249";i:3;s:1:"0";}}i:207;a:4:{s:1:"C";s:3:"207";s:2:"WX";s:3:"333";s:1:"N";s:5:"caron";s:1:"B";a:4:{i:0;s:3:"177";i:1;s:3:"593";i:2;s:3:"468";i:3;s:3:"734";}}s:5:"caron";a:4:{s:1:"C";s:3:"207";s:2:"WX";s:3:"333";s:1:"N";s:5:"caron";s:1:"B";a:4:{i:0;s:3:"177";i:1;s:3:"593";i:2;s:3:"468";i:3;s:3:"734";}}i:208;a:4:{s:1:"C";s:3:"208";s:2:"WX";s:4:"1000";s:1:"N";s:6:"emdash";s:1:"B";a:4:{i:0;s:2:"51";i:1;s:3:"240";i:2;s:4:"1067";i:3;s:3:"313";}}s:6:"emdash";a:4:{s:1:"C";s:3:"208";s:2:"WX";s:4:"1000";s:1:"N";s:6:"emdash";s:1:"B";a:4:{i:0;s:2:"51";i:1;s:3:"240";i:2;s:4:"1067";i:3;s:3:"313";}}i:225;a:4:{s:1:"C";s:3:"225";s:2:"WX";s:4:"1000";s:1:"N";s:2:"AE";s:1:"B";a:4:{i:0;s:1:"8";i:1;s:1:"0";i:2;s:4:"1097";i:3;s:3:"718";}}s:2:"AE";a:4:{s:1:"C";s:3:"225";s:2:"WX";s:4:"1000";s:1:"N";s:2:"AE";s:1:"B";a:4:{i:0;s:1:"8";i:1;s:1:"0";i:2;s:4:"1097";i:3;s:3:"718";}}i:227;a:4:{s:1:"C";s:3:"227";s:2:"WX";s:3:"370";s:1:"N";s:11:"ordfeminine";s:1:"B";a:4:{i:0;s:3:"127";i:1;s:3:"405";i:2;s:3:"449";i:3;s:3:"737";}}s:11:"ordfeminine";a:4:{s:1:"C";s:3:"227";s:2:"WX";s:3:"370";s:1:"N";s:11:"ordfeminine";s:1:"B";a:4:{i:0;s:3:"127";i:1;s:3:"405";i:2;s:3:"449";i:3;s:3:"737";}}i:232;a:4:{s:1:"C";s:3:"232";s:2:"WX";s:3:"556";s:1:"N";s:6:"Lslash";s:1:"B";a:4:{i:0;s:2:"41";i:1;s:1:"0";i:2;s:3:"555";i:3;s:3:"718";}}s:6:"Lslash";a:4:{s:1:"C";s:3:"232";s:2:"WX";s:3:"556";s:1:"N";s:6:"Lslash";s:1:"B";a:4:{i:0;s:2:"41";i:1;s:1:"0";i:2;s:3:"555";i:3;s:3:"718";}}i:233;a:4:{s:1:"C";s:3:"233";s:2:"WX";s:3:"778";s:1:"N";s:6:"Oslash";s:1:"B";a:4:{i:0;s:2:"43";i:1;s:3:"-19";i:2;s:3:"890";i:3;s:3:"737";}}s:6:"Oslash";a:4:{s:1:"C";s:3:"233";s:2:"WX";s:3:"778";s:1:"N";s:6:"Oslash";s:1:"B";a:4:{i:0;s:2:"43";i:1;s:3:"-19";i:2;s:3:"890";i:3;s:3:"737";}}i:234;a:4:{s:1:"C";s:3:"234";s:2:"WX";s:4:"1000";s:1:"N";s:2:"OE";s:1:"B";a:4:{i:0;s:2:"98";i:1;s:3:"-19";i:2;s:4:"1116";i:3;s:3:"737";}}s:2:"OE";a:4:{s:1:"C";s:3:"234";s:2:"WX";s:4:"1000";s:1:"N";s:2:"OE";s:1:"B";a:4:{i:0;s:2:"98";i:1;s:3:"-19";i:2;s:4:"1116";i:3;s:3:"737";}}i:235;a:4:{s:1:"C";s:3:"235";s:2:"WX";s:3:"365";s:1:"N";s:12:"ordmasculine";s:1:"B";a:4:{i:0;s:3:"141";i:1;s:3:"405";i:2;s:3:"468";i:3;s:3:"737";}}s:12:"ordmasculine";a:4:{s:1:"C";s:3:"235";s:2:"WX";s:3:"365";s:1:"N";s:12:"ordmasculine";s:1:"B";a:4:{i:0;s:3:"141";i:1;s:3:"405";i:2;s:3:"468";i:3;s:3:"737";}}i:241;a:4:{s:1:"C";s:3:"241";s:2:"WX";s:3:"889";s:1:"N";s:2:"ae";s:1:"B";a:4:{i:0;s:2:"61";i:1;s:3:"-15";i:2;s:3:"909";i:3;s:3:"538";}}s:2:"ae";a:4:{s:1:"C";s:3:"241";s:2:"WX";s:3:"889";s:1:"N";s:2:"ae";s:1:"B";a:4:{i:0;s:2:"61";i:1;s:3:"-15";i:2;s:3:"909";i:3;s:3:"538";}}i:245;a:4:{s:1:"C";s:3:"245";s:2:"WX";s:3:"278";s:1:"N";s:8:"dotlessi";s:1:"B";a:4:{i:0;s:2:"95";i:1;s:1:"0";i:2;s:3:"294";i:3;s:3:"523";}}s:8:"dotlessi";a:4:{s:1:"C";s:3:"245";s:2:"WX";s:3:"278";s:1:"N";s:8:"dotlessi";s:1:"B";a:4:{i:0;s:2:"95";i:1;s:1:"0";i:2;s:3:"294";i:3;s:3:"523";}}i:248;a:4:{s:1:"C";s:3:"248";s:2:"WX";s:3:"222";s:1:"N";s:6:"lslash";s:1:"B";a:4:{i:0;s:2:"41";i:1;s:1:"0";i:2;s:3:"347";i:3;s:3:"718";}}s:6:"lslash";a:4:{s:1:"C";s:3:"248";s:2:"WX";s:3:"222";s:1:"N";s:6:"lslash";s:1:"B";a:4:{i:0;s:2:"41";i:1;s:1:"0";i:2;s:3:"347";i:3;s:3:"718";}}i:249;a:4:{s:1:"C";s:3:"249";s:2:"WX";s:3:"611";s:1:"N";s:6:"oslash";s:1:"B";a:4:{i:0;s:2:"29";i:1;s:3:"-22";i:2;s:3:"647";i:3;s:3:"545";}}s:6:"oslash";a:4:{s:1:"C";s:3:"249";s:2:"WX";s:3:"611";s:1:"N";s:6:"oslash";s:1:"B";a:4:{i:0;s:2:"29";i:1;s:3:"-22";i:2;s:3:"647";i:3;s:3:"545";}}i:250;a:4:{s:1:"C";s:3:"250";s:2:"WX";s:3:"944";s:1:"N";s:2:"oe";s:1:"B";a:4:{i:0;s:2:"83";i:1;s:3:"-15";i:2;s:3:"964";i:3;s:3:"538";}}s:2:"oe";a:4:{s:1:"C";s:3:"250";s:2:"WX";s:3:"944";s:1:"N";s:2:"oe";s:1:"B";a:4:{i:0;s:2:"83";i:1;s:3:"-15";i:2;s:3:"964";i:3;s:3:"538";}}i:251;a:4:{s:1:"C";s:3:"251";s:2:"WX";s:3:"611";s:1:"N";s:10:"germandbls";s:1:"B";a:4:{i:0;s:2:"67";i:1;s:3:"-15";i:2;s:3:"658";i:3;s:3:"728";}}s:10:"germandbls";a:4:{s:1:"C";s:3:"251";s:2:"WX";s:3:"611";s:1:"N";s:10:"germandbls";s:1:"B";a:4:{i:0;s:2:"67";i:1;s:3:"-15";i:2;s:3:"658";i:3;s:3:"728";}}s:9:"Idieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:9:"Idieresis";s:1:"B";a:4:{i:0;s:2:"91";i:1;s:1:"0";i:2;s:3:"458";i:3;s:3:"901";}}s:6:"eacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"eacute";s:1:"B";a:4:{i:0;s:2:"84";i:1;s:3:"-15";i:2;s:3:"587";i:3;s:3:"734";}}s:6:"abreve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"abreve";s:1:"B";a:4:{i:0;s:2:"61";i:1;s:3:"-15";i:2;s:3:"578";i:3;s:3:"731";}}s:13:"uhungarumlaut";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:13:"uhungarumlaut";s:1:"B";a:4:{i:0;s:2:"94";i:1;s:3:"-15";i:2;s:3:"677";i:3;s:3:"734";}}s:6:"ecaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"ecaron";s:1:"B";a:4:{i:0;s:2:"84";i:1;s:3:"-15";i:2;s:3:"580";i:3;s:3:"734";}}s:9:"Ydieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:9:"Ydieresis";s:1:"B";a:4:{i:0;s:3:"167";i:1;s:1:"0";i:2;s:3:"806";i:3;s:3:"901";}}s:6:"divide";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"584";s:1:"N";s:6:"divide";s:1:"B";a:4:{i:0;s:2:"85";i:1;s:3:"-19";i:2;s:3:"606";i:3;s:3:"524";}}s:6:"Yacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Yacute";s:1:"B";a:4:{i:0;s:3:"167";i:1;s:1:"0";i:2;s:3:"806";i:3;s:3:"929";}}s:11:"Acircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:11:"Acircumflex";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:1:"0";i:2;s:3:"654";i:3;s:3:"929";}}s:6:"aacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"aacute";s:1:"B";a:4:{i:0;s:2:"61";i:1;s:3:"-15";i:2;s:3:"587";i:3;s:3:"734";}}s:11:"Ucircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:11:"Ucircumflex";s:1:"B";a:4:{i:0;s:3:"123";i:1;s:3:"-19";i:2;s:3:"797";i:3;s:3:"929";}}s:6:"yacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"yacute";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:4:"-214";i:2;s:3:"600";i:3;s:3:"734";}}s:12:"scommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:12:"scommaaccent";s:1:"B";a:4:{i:0;s:2:"63";i:1;s:4:"-225";i:2;s:3:"529";i:3;s:3:"538";}}s:11:"ecircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:11:"ecircumflex";s:1:"B";a:4:{i:0;s:2:"84";i:1;s:3:"-15";i:2;s:3:"578";i:3;s:3:"734";}}s:5:"Uring";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:5:"Uring";s:1:"B";a:4:{i:0;s:3:"123";i:1;s:3:"-19";i:2;s:3:"797";i:3;s:3:"931";}}s:9:"Udieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:9:"Udieresis";s:1:"B";a:4:{i:0;s:3:"123";i:1;s:3:"-19";i:2;s:3:"797";i:3;s:3:"901";}}s:7:"aogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:7:"aogonek";s:1:"B";a:4:{i:0;s:2:"61";i:1;s:4:"-220";i:2;s:3:"559";i:3;s:3:"538";}}s:6:"Uacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Uacute";s:1:"B";a:4:{i:0;s:3:"123";i:1;s:3:"-19";i:2;s:3:"797";i:3;s:3:"929";}}s:7:"uogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:7:"uogonek";s:1:"B";a:4:{i:0;s:2:"94";i:1;s:4:"-225";i:2;s:3:"600";i:3;s:3:"523";}}s:9:"Edieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:9:"Edieresis";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:1:"0";i:2;s:3:"762";i:3;s:3:"901";}}s:6:"Dcroat";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Dcroat";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:1:"0";i:2;s:3:"764";i:3;s:3:"718";}}s:11:"commaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"250";s:1:"N";s:11:"commaaccent";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:4:"-225";i:2;s:3:"172";i:3;s:3:"-40";}}s:9:"copyright";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"737";s:1:"N";s:9:"copyright";s:1:"B";a:4:{i:0;s:2:"54";i:1;s:3:"-19";i:2;s:3:"837";i:3;s:3:"737";}}s:7:"Emacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:7:"Emacron";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:1:"0";i:2;s:3:"762";i:3;s:3:"879";}}s:6:"ccaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"ccaron";s:1:"B";a:4:{i:0;s:2:"74";i:1;s:3:"-15";i:2;s:3:"553";i:3;s:3:"734";}}s:5:"aring";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:5:"aring";s:1:"B";a:4:{i:0;s:2:"61";i:1;s:3:"-15";i:2;s:3:"559";i:3;s:3:"756";}}s:12:"Ncommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:12:"Ncommaaccent";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:4:"-225";i:2;s:3:"799";i:3;s:3:"718";}}s:6:"lacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"222";s:1:"N";s:6:"lacute";s:1:"B";a:4:{i:0;s:2:"67";i:1;s:1:"0";i:2;s:3:"461";i:3;s:3:"929";}}s:6:"agrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"agrave";s:1:"B";a:4:{i:0;s:2:"61";i:1;s:3:"-15";i:2;s:3:"559";i:3;s:3:"734";}}s:12:"Tcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:12:"Tcommaaccent";s:1:"B";a:4:{i:0;s:3:"148";i:1;s:4:"-225";i:2;s:3:"750";i:3;s:3:"718";}}s:6:"Cacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Cacute";s:1:"B";a:4:{i:0;s:3:"108";i:1;s:3:"-19";i:2;s:3:"782";i:3;s:3:"929";}}s:6:"atilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"atilde";s:1:"B";a:4:{i:0;s:2:"61";i:1;s:3:"-15";i:2;s:3:"592";i:3;s:3:"722";}}s:10:"Edotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:10:"Edotaccent";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:1:"0";i:2;s:3:"762";i:3;s:3:"901";}}s:6:"scaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"scaron";s:1:"B";a:4:{i:0;s:2:"63";i:1;s:3:"-15";i:2;s:3:"552";i:3;s:3:"734";}}s:8:"scedilla";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:8:"scedilla";s:1:"B";a:4:{i:0;s:2:"63";i:1;s:4:"-225";i:2;s:3:"529";i:3;s:3:"538";}}s:6:"iacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:6:"iacute";s:1:"B";a:4:{i:0;s:2:"95";i:1;s:1:"0";i:2;s:3:"448";i:3;s:3:"734";}}s:7:"lozenge";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"471";s:1:"N";s:7:"lozenge";s:1:"B";a:4:{i:0;s:2:"88";i:1;s:1:"0";i:2;s:3:"540";i:3;s:3:"728";}}s:6:"Rcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Rcaron";s:1:"B";a:4:{i:0;s:2:"88";i:1;s:1:"0";i:2;s:3:"773";i:3;s:3:"929";}}s:12:"Gcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"778";s:1:"N";s:12:"Gcommaaccent";s:1:"B";a:4:{i:0;s:3:"111";i:1;s:4:"-225";i:2;s:3:"799";i:3;s:3:"737";}}s:11:"ucircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:11:"ucircumflex";s:1:"B";a:4:{i:0;s:2:"94";i:1;s:3:"-15";i:2;s:3:"600";i:3;s:3:"734";}}s:11:"acircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:11:"acircumflex";s:1:"B";a:4:{i:0;s:2:"61";i:1;s:3:"-15";i:2;s:3:"559";i:3;s:3:"734";}}s:7:"Amacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:7:"Amacron";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:1:"0";i:2;s:3:"677";i:3;s:3:"879";}}s:6:"rcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"333";s:1:"N";s:6:"rcaron";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:1:"0";i:2;s:3:"508";i:3;s:3:"734";}}s:8:"ccedilla";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:8:"ccedilla";s:1:"B";a:4:{i:0;s:2:"74";i:1;s:4:"-225";i:2;s:3:"553";i:3;s:3:"538";}}s:10:"Zdotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:10:"Zdotaccent";s:1:"B";a:4:{i:0;s:2:"23";i:1;s:1:"0";i:2;s:3:"741";i:3;s:3:"901";}}s:5:"Thorn";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:5:"Thorn";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:1:"0";i:2;s:3:"712";i:3;s:3:"718";}}s:7:"Omacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"778";s:1:"N";s:7:"Omacron";s:1:"B";a:4:{i:0;s:3:"105";i:1;s:3:"-19";i:2;s:3:"826";i:3;s:3:"879";}}s:6:"Racute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Racute";s:1:"B";a:4:{i:0;s:2:"88";i:1;s:1:"0";i:2;s:3:"773";i:3;s:3:"929";}}s:6:"Sacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Sacute";s:1:"B";a:4:{i:0;s:2:"90";i:1;s:3:"-19";i:2;s:3:"713";i:3;s:3:"929";}}s:6:"dcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"643";s:1:"N";s:6:"dcaron";s:1:"B";a:4:{i:0;s:2:"84";i:1;s:3:"-15";i:2;s:3:"808";i:3;s:3:"718";}}s:7:"Umacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:7:"Umacron";s:1:"B";a:4:{i:0;s:3:"123";i:1;s:3:"-19";i:2;s:3:"797";i:3;s:3:"879";}}s:5:"uring";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:5:"uring";s:1:"B";a:4:{i:0;s:2:"94";i:1;s:3:"-15";i:2;s:3:"600";i:3;s:3:"756";}}s:13:"threesuperior";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"333";s:1:"N";s:13:"threesuperior";s:1:"B";a:4:{i:0;s:2:"90";i:1;s:3:"270";i:2;s:3:"436";i:3;s:3:"703";}}s:6:"Ograve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"778";s:1:"N";s:6:"Ograve";s:1:"B";a:4:{i:0;s:3:"105";i:1;s:3:"-19";i:2;s:3:"826";i:3;s:3:"929";}}s:6:"Agrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Agrave";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:1:"0";i:2;s:3:"654";i:3;s:3:"929";}}s:6:"Abreve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Abreve";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:1:"0";i:2;s:3:"685";i:3;s:3:"926";}}s:8:"multiply";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"584";s:1:"N";s:8:"multiply";s:1:"B";a:4:{i:0;s:2:"50";i:1;s:1:"0";i:2;s:3:"642";i:3;s:3:"506";}}s:6:"uacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"uacute";s:1:"B";a:4:{i:0;s:2:"94";i:1;s:3:"-15";i:2;s:3:"600";i:3;s:3:"734";}}s:6:"Tcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"Tcaron";s:1:"B";a:4:{i:0;s:3:"148";i:1;s:1:"0";i:2;s:3:"750";i:3;s:3:"929";}}s:11:"partialdiff";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"476";s:1:"N";s:11:"partialdiff";s:1:"B";a:4:{i:0;s:2:"41";i:1;s:3:"-38";i:2;s:3:"550";i:3;s:3:"714";}}s:9:"ydieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:9:"ydieresis";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:4:"-214";i:2;s:3:"600";i:3;s:3:"706";}}s:6:"Nacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Nacute";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"799";i:3;s:3:"929";}}s:11:"icircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:11:"icircumflex";s:1:"B";a:4:{i:0;s:2:"95";i:1;s:1:"0";i:2;s:3:"411";i:3;s:3:"734";}}s:11:"Ecircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:11:"Ecircumflex";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:1:"0";i:2;s:3:"762";i:3;s:3:"929";}}s:9:"adieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:9:"adieresis";s:1:"B";a:4:{i:0;s:2:"61";i:1;s:3:"-15";i:2;s:3:"559";i:3;s:3:"706";}}s:9:"edieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:9:"edieresis";s:1:"B";a:4:{i:0;s:2:"84";i:1;s:3:"-15";i:2;s:3:"578";i:3;s:3:"706";}}s:6:"cacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"cacute";s:1:"B";a:4:{i:0;s:2:"74";i:1;s:3:"-15";i:2;s:3:"559";i:3;s:3:"734";}}s:6:"nacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"nacute";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:1:"0";i:2;s:3:"587";i:3;s:3:"734";}}s:7:"umacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:7:"umacron";s:1:"B";a:4:{i:0;s:2:"94";i:1;s:3:"-15";i:2;s:3:"600";i:3;s:3:"684";}}s:6:"Ncaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Ncaron";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"799";i:3;s:3:"929";}}s:6:"Iacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:6:"Iacute";s:1:"B";a:4:{i:0;s:2:"91";i:1;s:1:"0";i:2;s:3:"489";i:3;s:3:"929";}}s:9:"plusminus";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"584";s:1:"N";s:9:"plusminus";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:1:"0";i:2;s:3:"618";i:3;s:3:"506";}}s:9:"brokenbar";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"260";s:1:"N";s:9:"brokenbar";s:1:"B";a:4:{i:0;s:2:"62";i:1;s:4:"-150";i:2;s:3:"316";i:3;s:3:"700";}}s:10:"registered";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"737";s:1:"N";s:10:"registered";s:1:"B";a:4:{i:0;s:2:"54";i:1;s:3:"-19";i:2;s:3:"837";i:3;s:3:"737";}}s:6:"Gbreve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"778";s:1:"N";s:6:"Gbreve";s:1:"B";a:4:{i:0;s:3:"111";i:1;s:3:"-19";i:2;s:3:"799";i:3;s:3:"926";}}s:10:"Idotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:10:"Idotaccent";s:1:"B";a:4:{i:0;s:2:"91";i:1;s:1:"0";i:2;s:3:"377";i:3;s:3:"901";}}s:9:"summation";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"summation";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:3:"-10";i:2;s:3:"671";i:3;s:3:"706";}}s:6:"Egrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Egrave";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:1:"0";i:2;s:3:"762";i:3;s:3:"929";}}s:6:"racute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"333";s:1:"N";s:6:"racute";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:1:"0";i:2;s:3:"475";i:3;s:3:"734";}}s:7:"omacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:7:"omacron";s:1:"B";a:4:{i:0;s:2:"83";i:1;s:3:"-14";i:2;s:3:"585";i:3;s:3:"684";}}s:6:"Zacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"Zacute";s:1:"B";a:4:{i:0;s:2:"23";i:1;s:1:"0";i:2;s:3:"741";i:3;s:3:"929";}}s:6:"Zcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"Zcaron";s:1:"B";a:4:{i:0;s:2:"23";i:1;s:1:"0";i:2;s:3:"741";i:3;s:3:"929";}}s:12:"greaterequal";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"549";s:1:"N";s:12:"greaterequal";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:1:"0";i:2;s:3:"620";i:3;s:3:"674";}}s:3:"Eth";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:3:"Eth";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:1:"0";i:2;s:3:"764";i:3;s:3:"718";}}s:8:"Ccedilla";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:8:"Ccedilla";s:1:"B";a:4:{i:0;s:3:"108";i:1;s:4:"-225";i:2;s:3:"782";i:3;s:3:"737";}}s:12:"lcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"222";s:1:"N";s:12:"lcommaaccent";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:4:"-225";i:2;s:3:"308";i:3;s:3:"718";}}s:6:"tcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"317";s:1:"N";s:6:"tcaron";s:1:"B";a:4:{i:0;s:3:"102";i:1;s:2:"-7";i:2;s:3:"501";i:3;s:3:"808";}}s:7:"eogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:7:"eogonek";s:1:"B";a:4:{i:0;s:2:"84";i:1;s:4:"-225";i:2;s:3:"578";i:3;s:3:"538";}}s:7:"Uogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:7:"Uogonek";s:1:"B";a:4:{i:0;s:3:"123";i:1;s:4:"-225";i:2;s:3:"797";i:3;s:3:"718";}}s:6:"Aacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Aacute";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:1:"0";i:2;s:3:"683";i:3;s:3:"929";}}s:9:"Adieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:9:"Adieresis";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:1:"0";i:2;s:3:"654";i:3;s:3:"901";}}s:6:"egrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"egrave";s:1:"B";a:4:{i:0;s:2:"84";i:1;s:3:"-15";i:2;s:3:"578";i:3;s:3:"734";}}s:6:"zacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"zacute";s:1:"B";a:4:{i:0;s:2:"31";i:1;s:1:"0";i:2;s:3:"571";i:3;s:3:"734";}}s:7:"iogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"222";s:1:"N";s:7:"iogonek";s:1:"B";a:4:{i:0;s:3:"-61";i:1;s:4:"-225";i:2;s:3:"308";i:3;s:3:"718";}}s:6:"Oacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"778";s:1:"N";s:6:"Oacute";s:1:"B";a:4:{i:0;s:3:"105";i:1;s:3:"-19";i:2;s:3:"826";i:3;s:3:"929";}}s:6:"oacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"oacute";s:1:"B";a:4:{i:0;s:2:"83";i:1;s:3:"-14";i:2;s:3:"587";i:3;s:3:"734";}}s:7:"amacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:7:"amacron";s:1:"B";a:4:{i:0;s:2:"61";i:1;s:3:"-15";i:2;s:3:"580";i:3;s:3:"684";}}s:6:"sacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"sacute";s:1:"B";a:4:{i:0;s:2:"63";i:1;s:3:"-15";i:2;s:3:"559";i:3;s:3:"734";}}s:9:"idieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:9:"idieresis";s:1:"B";a:4:{i:0;s:2:"95";i:1;s:1:"0";i:2;s:3:"416";i:3;s:3:"706";}}s:11:"Ocircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"778";s:1:"N";s:11:"Ocircumflex";s:1:"B";a:4:{i:0;s:3:"105";i:1;s:3:"-19";i:2;s:3:"826";i:3;s:3:"929";}}s:6:"Ugrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Ugrave";s:1:"B";a:4:{i:0;s:3:"123";i:1;s:3:"-19";i:2;s:3:"797";i:3;s:3:"929";}}s:5:"Delta";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"612";s:1:"N";s:5:"Delta";s:1:"B";a:4:{i:0;s:1:"6";i:1;s:1:"0";i:2;s:3:"608";i:3;s:3:"688";}}s:5:"thorn";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:5:"thorn";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:4:"-207";i:2;s:3:"584";i:3;s:3:"718";}}s:11:"twosuperior";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"333";s:1:"N";s:11:"twosuperior";s:1:"B";a:4:{i:0;s:2:"64";i:1;s:3:"281";i:2;s:3:"449";i:3;s:3:"703";}}s:9:"Odieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"778";s:1:"N";s:9:"Odieresis";s:1:"B";a:4:{i:0;s:3:"105";i:1;s:3:"-19";i:2;s:3:"826";i:3;s:3:"901";}}s:2:"mu";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:2:"mu";s:1:"B";a:4:{i:0;s:2:"24";i:1;s:4:"-207";i:2;s:3:"600";i:3;s:3:"523";}}s:6:"igrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:6:"igrave";s:1:"B";a:4:{i:0;s:2:"95";i:1;s:1:"0";i:2;s:3:"310";i:3;s:3:"734";}}s:13:"ohungarumlaut";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:13:"ohungarumlaut";s:1:"B";a:4:{i:0;s:2:"83";i:1;s:3:"-14";i:2;s:3:"677";i:3;s:3:"734";}}s:7:"Eogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:7:"Eogonek";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:4:"-220";i:2;s:3:"762";i:3;s:3:"718";}}s:6:"dcroat";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"dcroat";s:1:"B";a:4:{i:0;s:2:"84";i:1;s:3:"-15";i:2;s:3:"689";i:3;s:3:"718";}}s:13:"threequarters";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"834";s:1:"N";s:13:"threequarters";s:1:"B";a:4:{i:0;s:3:"130";i:1;s:3:"-19";i:2;s:3:"861";i:3;s:3:"703";}}s:8:"Scedilla";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:8:"Scedilla";s:1:"B";a:4:{i:0;s:2:"90";i:1;s:4:"-225";i:2;s:3:"713";i:3;s:3:"737";}}s:6:"lcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"299";s:1:"N";s:6:"lcaron";s:1:"B";a:4:{i:0;s:2:"67";i:1;s:1:"0";i:2;s:3:"464";i:3;s:3:"718";}}s:12:"Kcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:12:"Kcommaaccent";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:4:"-225";i:2;s:3:"808";i:3;s:3:"718";}}s:6:"Lacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"Lacute";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"555";i:3;s:3:"929";}}s:9:"trademark";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:4:"1000";s:1:"N";s:9:"trademark";s:1:"B";a:4:{i:0;s:3:"186";i:1;s:3:"306";i:2;s:4:"1056";i:3;s:3:"718";}}s:10:"edotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:10:"edotaccent";s:1:"B";a:4:{i:0;s:2:"84";i:1;s:3:"-15";i:2;s:3:"578";i:3;s:3:"706";}}s:6:"Igrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:6:"Igrave";s:1:"B";a:4:{i:0;s:2:"91";i:1;s:1:"0";i:2;s:3:"351";i:3;s:3:"929";}}s:7:"Imacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:7:"Imacron";s:1:"B";a:4:{i:0;s:2:"91";i:1;s:1:"0";i:2;s:3:"483";i:3;s:3:"879";}}s:6:"Lcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"Lcaron";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"570";i:3;s:3:"718";}}s:7:"onehalf";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"834";s:1:"N";s:7:"onehalf";s:1:"B";a:4:{i:0;s:3:"114";i:1;s:3:"-19";i:2;s:3:"839";i:3;s:3:"703";}}s:9:"lessequal";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"549";s:1:"N";s:9:"lessequal";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:1:"0";i:2;s:3:"666";i:3;s:3:"674";}}s:11:"ocircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:11:"ocircumflex";s:1:"B";a:4:{i:0;s:2:"83";i:1;s:3:"-14";i:2;s:3:"585";i:3;s:3:"734";}}s:6:"ntilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"ntilde";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:1:"0";i:2;s:3:"592";i:3;s:3:"722";}}s:13:"Uhungarumlaut";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:13:"Uhungarumlaut";s:1:"B";a:4:{i:0;s:3:"123";i:1;s:3:"-19";i:2;s:3:"801";i:3;s:3:"929";}}s:6:"Eacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Eacute";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:1:"0";i:2;s:3:"762";i:3;s:3:"929";}}s:7:"emacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:7:"emacron";s:1:"B";a:4:{i:0;s:2:"84";i:1;s:3:"-15";i:2;s:3:"580";i:3;s:3:"684";}}s:6:"gbreve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"gbreve";s:1:"B";a:4:{i:0;s:2:"42";i:1;s:4:"-220";i:2;s:3:"610";i:3;s:3:"731";}}s:10:"onequarter";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"834";s:1:"N";s:10:"onequarter";s:1:"B";a:4:{i:0;s:3:"150";i:1;s:3:"-19";i:2;s:3:"802";i:3;s:3:"703";}}s:6:"Scaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Scaron";s:1:"B";a:4:{i:0;s:2:"90";i:1;s:3:"-19";i:2;s:3:"713";i:3;s:3:"929";}}s:12:"Scommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:12:"Scommaaccent";s:1:"B";a:4:{i:0;s:2:"90";i:1;s:4:"-225";i:2;s:3:"713";i:3;s:3:"737";}}s:13:"Ohungarumlaut";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"778";s:1:"N";s:13:"Ohungarumlaut";s:1:"B";a:4:{i:0;s:3:"105";i:1;s:3:"-19";i:2;s:3:"829";i:3;s:3:"929";}}s:6:"degree";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"400";s:1:"N";s:6:"degree";s:1:"B";a:4:{i:0;s:3:"169";i:1;s:3:"411";i:2;s:3:"468";i:3;s:3:"703";}}s:6:"ograve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"ograve";s:1:"B";a:4:{i:0;s:2:"83";i:1;s:3:"-14";i:2;s:3:"585";i:3;s:3:"734";}}s:6:"Ccaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Ccaron";s:1:"B";a:4:{i:0;s:3:"108";i:1;s:3:"-19";i:2;s:3:"782";i:3;s:3:"929";}}s:6:"ugrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"ugrave";s:1:"B";a:4:{i:0;s:2:"94";i:1;s:3:"-15";i:2;s:3:"600";i:3;s:3:"734";}}s:7:"radical";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"453";s:1:"N";s:7:"radical";s:1:"B";a:4:{i:0;s:2:"79";i:1;s:3:"-80";i:2;s:3:"617";i:3;s:3:"762";}}s:6:"Dcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Dcaron";s:1:"B";a:4:{i:0;s:2:"81";i:1;s:1:"0";i:2;s:3:"764";i:3;s:3:"929";}}s:12:"rcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"333";s:1:"N";s:12:"rcommaaccent";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:4:"-225";i:2;s:3:"446";i:3;s:3:"538";}}s:6:"Ntilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Ntilde";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"799";i:3;s:3:"917";}}s:6:"otilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"otilde";s:1:"B";a:4:{i:0;s:2:"83";i:1;s:3:"-14";i:2;s:3:"602";i:3;s:3:"722";}}s:12:"Rcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:12:"Rcommaaccent";s:1:"B";a:4:{i:0;s:2:"88";i:1;s:4:"-225";i:2;s:3:"773";i:3;s:3:"718";}}s:12:"Lcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:12:"Lcommaaccent";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:4:"-225";i:2;s:3:"555";i:3;s:3:"718";}}s:6:"Atilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Atilde";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:1:"0";i:2;s:3:"699";i:3;s:3:"917";}}s:7:"Aogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:7:"Aogonek";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:4:"-225";i:2;s:3:"654";i:3;s:3:"718";}}s:5:"Aring";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:5:"Aring";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:1:"0";i:2;s:3:"654";i:3;s:3:"931";}}s:6:"Otilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"778";s:1:"N";s:6:"Otilde";s:1:"B";a:4:{i:0;s:3:"105";i:1;s:3:"-19";i:2;s:3:"826";i:3;s:3:"917";}}s:10:"zdotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:10:"zdotaccent";s:1:"B";a:4:{i:0;s:2:"31";i:1;s:1:"0";i:2;s:3:"571";i:3;s:3:"706";}}s:6:"Ecaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Ecaron";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:1:"0";i:2;s:3:"762";i:3;s:3:"929";}}s:7:"Iogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:7:"Iogonek";s:1:"B";a:4:{i:0;s:3:"-33";i:1;s:4:"-225";i:2;s:3:"341";i:3;s:3:"718";}}s:12:"kcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:12:"kcommaaccent";s:1:"B";a:4:{i:0;s:2:"67";i:1;s:4:"-225";i:2;s:3:"600";i:3;s:3:"718";}}s:5:"minus";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"584";s:1:"N";s:5:"minus";s:1:"B";a:4:{i:0;s:2:"85";i:1;s:3:"216";i:2;s:3:"606";i:3;s:3:"289";}}s:11:"Icircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:11:"Icircumflex";s:1:"B";a:4:{i:0;s:2:"91";i:1;s:1:"0";i:2;s:3:"452";i:3;s:3:"929";}}s:6:"ncaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"ncaron";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:1:"0";i:2;s:3:"580";i:3;s:3:"734";}}s:12:"tcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:12:"tcommaaccent";s:1:"B";a:4:{i:0;s:2:"63";i:1;s:4:"-225";i:2;s:3:"368";i:3;s:3:"669";}}s:10:"logicalnot";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"584";s:1:"N";s:10:"logicalnot";s:1:"B";a:4:{i:0;s:3:"106";i:1;s:3:"108";i:2;s:3:"628";i:3;s:3:"390";}}s:9:"odieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:9:"odieresis";s:1:"B";a:4:{i:0;s:2:"83";i:1;s:3:"-14";i:2;s:3:"585";i:3;s:3:"706";}}s:9:"udieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:9:"udieresis";s:1:"B";a:4:{i:0;s:2:"94";i:1;s:3:"-15";i:2;s:3:"600";i:3;s:3:"706";}}s:8:"notequal";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"549";s:1:"N";s:8:"notequal";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-35";i:2;s:3:"623";i:3;s:3:"551";}}s:12:"gcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:12:"gcommaaccent";s:1:"B";a:4:{i:0;s:2:"42";i:1;s:4:"-220";i:2;s:3:"610";i:3;s:3:"822";}}s:3:"eth";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:3:"eth";s:1:"B";a:4:{i:0;s:2:"81";i:1;s:3:"-15";i:2;s:3:"617";i:3;s:3:"737";}}s:6:"zcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"zcaron";s:1:"B";a:4:{i:0;s:2:"31";i:1;s:1:"0";i:2;s:3:"571";i:3;s:3:"734";}}s:12:"ncommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:12:"ncommaaccent";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:4:"-225";i:2;s:3:"573";i:3;s:3:"538";}}s:11:"onesuperior";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"333";s:1:"N";s:11:"onesuperior";s:1:"B";a:4:{i:0;s:3:"166";i:1;s:3:"281";i:2;s:3:"371";i:3;s:3:"703";}}s:7:"imacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:7:"imacron";s:1:"B";a:4:{i:0;s:2:"95";i:1;s:1:"0";i:2;s:3:"417";i:3;s:3:"684";}}s:4:"Euro";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:4:"Euro";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:1:"0";i:2;s:1:"0";i:3;s:1:"0";}}}s:3:"KPX";a:138:{s:1:"A";a:48:{s:1:"C";s:3:"-30";s:6:"Cacute";s:3:"-30";s:6:"Ccaron";s:3:"-30";s:8:"Ccedilla";s:3:"-30";s:1:"G";s:3:"-30";s:6:"Gbreve";s:3:"-30";s:12:"Gcommaaccent";s:3:"-30";s:1:"O";s:3:"-30";s:6:"Oacute";s:3:"-30";s:11:"Ocircumflex";s:3:"-30";s:9:"Odieresis";s:3:"-30";s:6:"Ograve";s:3:"-30";s:13:"Ohungarumlaut";s:3:"-30";s:7:"Omacron";s:3:"-30";s:6:"Oslash";s:3:"-30";s:6:"Otilde";s:3:"-30";s:1:"Q";s:3:"-30";s:1:"T";s:4:"-120";s:6:"Tcaron";s:4:"-120";s:12:"Tcommaaccent";s:4:"-120";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:3:"-70";s:1:"W";s:3:"-50";s:1:"Y";s:4:"-100";s:6:"Yacute";s:4:"-100";s:9:"Ydieresis";s:4:"-100";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"v";s:3:"-40";s:1:"w";s:3:"-40";s:1:"y";s:3:"-40";s:6:"yacute";s:3:"-40";s:9:"ydieresis";s:3:"-40";}s:6:"Aacute";a:48:{s:1:"C";s:3:"-30";s:6:"Cacute";s:3:"-30";s:6:"Ccaron";s:3:"-30";s:8:"Ccedilla";s:3:"-30";s:1:"G";s:3:"-30";s:6:"Gbreve";s:3:"-30";s:12:"Gcommaaccent";s:3:"-30";s:1:"O";s:3:"-30";s:6:"Oacute";s:3:"-30";s:11:"Ocircumflex";s:3:"-30";s:9:"Odieresis";s:3:"-30";s:6:"Ograve";s:3:"-30";s:13:"Ohungarumlaut";s:3:"-30";s:7:"Omacron";s:3:"-30";s:6:"Oslash";s:3:"-30";s:6:"Otilde";s:3:"-30";s:1:"Q";s:3:"-30";s:1:"T";s:4:"-120";s:6:"Tcaron";s:4:"-120";s:12:"Tcommaaccent";s:4:"-120";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:3:"-70";s:1:"W";s:3:"-50";s:1:"Y";s:4:"-100";s:6:"Yacute";s:4:"-100";s:9:"Ydieresis";s:4:"-100";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"v";s:3:"-40";s:1:"w";s:3:"-40";s:1:"y";s:3:"-40";s:6:"yacute";s:3:"-40";s:9:"ydieresis";s:3:"-40";}s:6:"Abreve";a:48:{s:1:"C";s:3:"-30";s:6:"Cacute";s:3:"-30";s:6:"Ccaron";s:3:"-30";s:8:"Ccedilla";s:3:"-30";s:1:"G";s:3:"-30";s:6:"Gbreve";s:3:"-30";s:12:"Gcommaaccent";s:3:"-30";s:1:"O";s:3:"-30";s:6:"Oacute";s:3:"-30";s:11:"Ocircumflex";s:3:"-30";s:9:"Odieresis";s:3:"-30";s:6:"Ograve";s:3:"-30";s:13:"Ohungarumlaut";s:3:"-30";s:7:"Omacron";s:3:"-30";s:6:"Oslash";s:3:"-30";s:6:"Otilde";s:3:"-30";s:1:"Q";s:3:"-30";s:1:"T";s:4:"-120";s:6:"Tcaron";s:4:"-120";s:12:"Tcommaaccent";s:4:"-120";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:3:"-70";s:1:"W";s:3:"-50";s:1:"Y";s:4:"-100";s:6:"Yacute";s:4:"-100";s:9:"Ydieresis";s:4:"-100";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"v";s:3:"-40";s:1:"w";s:3:"-40";s:1:"y";s:3:"-40";s:6:"yacute";s:3:"-40";s:9:"ydieresis";s:3:"-40";}s:11:"Acircumflex";a:48:{s:1:"C";s:3:"-30";s:6:"Cacute";s:3:"-30";s:6:"Ccaron";s:3:"-30";s:8:"Ccedilla";s:3:"-30";s:1:"G";s:3:"-30";s:6:"Gbreve";s:3:"-30";s:12:"Gcommaaccent";s:3:"-30";s:1:"O";s:3:"-30";s:6:"Oacute";s:3:"-30";s:11:"Ocircumflex";s:3:"-30";s:9:"Odieresis";s:3:"-30";s:6:"Ograve";s:3:"-30";s:13:"Ohungarumlaut";s:3:"-30";s:7:"Omacron";s:3:"-30";s:6:"Oslash";s:3:"-30";s:6:"Otilde";s:3:"-30";s:1:"Q";s:3:"-30";s:1:"T";s:4:"-120";s:6:"Tcaron";s:4:"-120";s:12:"Tcommaaccent";s:4:"-120";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:3:"-70";s:1:"W";s:3:"-50";s:1:"Y";s:4:"-100";s:6:"Yacute";s:4:"-100";s:9:"Ydieresis";s:4:"-100";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"v";s:3:"-40";s:1:"w";s:3:"-40";s:1:"y";s:3:"-40";s:6:"yacute";s:3:"-40";s:9:"ydieresis";s:3:"-40";}s:9:"Adieresis";a:48:{s:1:"C";s:3:"-30";s:6:"Cacute";s:3:"-30";s:6:"Ccaron";s:3:"-30";s:8:"Ccedilla";s:3:"-30";s:1:"G";s:3:"-30";s:6:"Gbreve";s:3:"-30";s:12:"Gcommaaccent";s:3:"-30";s:1:"O";s:3:"-30";s:6:"Oacute";s:3:"-30";s:11:"Ocircumflex";s:3:"-30";s:9:"Odieresis";s:3:"-30";s:6:"Ograve";s:3:"-30";s:13:"Ohungarumlaut";s:3:"-30";s:7:"Omacron";s:3:"-30";s:6:"Oslash";s:3:"-30";s:6:"Otilde";s:3:"-30";s:1:"Q";s:3:"-30";s:1:"T";s:4:"-120";s:6:"Tcaron";s:4:"-120";s:12:"Tcommaaccent";s:4:"-120";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:3:"-70";s:1:"W";s:3:"-50";s:1:"Y";s:4:"-100";s:6:"Yacute";s:4:"-100";s:9:"Ydieresis";s:4:"-100";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"v";s:3:"-40";s:1:"w";s:3:"-40";s:1:"y";s:3:"-40";s:6:"yacute";s:3:"-40";s:9:"ydieresis";s:3:"-40";}s:6:"Agrave";a:48:{s:1:"C";s:3:"-30";s:6:"Cacute";s:3:"-30";s:6:"Ccaron";s:3:"-30";s:8:"Ccedilla";s:3:"-30";s:1:"G";s:3:"-30";s:6:"Gbreve";s:3:"-30";s:12:"Gcommaaccent";s:3:"-30";s:1:"O";s:3:"-30";s:6:"Oacute";s:3:"-30";s:11:"Ocircumflex";s:3:"-30";s:9:"Odieresis";s:3:"-30";s:6:"Ograve";s:3:"-30";s:13:"Ohungarumlaut";s:3:"-30";s:7:"Omacron";s:3:"-30";s:6:"Oslash";s:3:"-30";s:6:"Otilde";s:3:"-30";s:1:"Q";s:3:"-30";s:1:"T";s:4:"-120";s:6:"Tcaron";s:4:"-120";s:12:"Tcommaaccent";s:4:"-120";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:3:"-70";s:1:"W";s:3:"-50";s:1:"Y";s:4:"-100";s:6:"Yacute";s:4:"-100";s:9:"Ydieresis";s:4:"-100";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"v";s:3:"-40";s:1:"w";s:3:"-40";s:1:"y";s:3:"-40";s:6:"yacute";s:3:"-40";s:9:"ydieresis";s:3:"-40";}s:7:"Amacron";a:48:{s:1:"C";s:3:"-30";s:6:"Cacute";s:3:"-30";s:6:"Ccaron";s:3:"-30";s:8:"Ccedilla";s:3:"-30";s:1:"G";s:3:"-30";s:6:"Gbreve";s:3:"-30";s:12:"Gcommaaccent";s:3:"-30";s:1:"O";s:3:"-30";s:6:"Oacute";s:3:"-30";s:11:"Ocircumflex";s:3:"-30";s:9:"Odieresis";s:3:"-30";s:6:"Ograve";s:3:"-30";s:13:"Ohungarumlaut";s:3:"-30";s:7:"Omacron";s:3:"-30";s:6:"Oslash";s:3:"-30";s:6:"Otilde";s:3:"-30";s:1:"Q";s:3:"-30";s:1:"T";s:4:"-120";s:6:"Tcaron";s:4:"-120";s:12:"Tcommaaccent";s:4:"-120";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:3:"-70";s:1:"W";s:3:"-50";s:1:"Y";s:4:"-100";s:6:"Yacute";s:4:"-100";s:9:"Ydieresis";s:4:"-100";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"v";s:3:"-40";s:1:"w";s:3:"-40";s:1:"y";s:3:"-40";s:6:"yacute";s:3:"-40";s:9:"ydieresis";s:3:"-40";}s:7:"Aogonek";a:48:{s:1:"C";s:3:"-30";s:6:"Cacute";s:3:"-30";s:6:"Ccaron";s:3:"-30";s:8:"Ccedilla";s:3:"-30";s:1:"G";s:3:"-30";s:6:"Gbreve";s:3:"-30";s:12:"Gcommaaccent";s:3:"-30";s:1:"O";s:3:"-30";s:6:"Oacute";s:3:"-30";s:11:"Ocircumflex";s:3:"-30";s:9:"Odieresis";s:3:"-30";s:6:"Ograve";s:3:"-30";s:13:"Ohungarumlaut";s:3:"-30";s:7:"Omacron";s:3:"-30";s:6:"Oslash";s:3:"-30";s:6:"Otilde";s:3:"-30";s:1:"Q";s:3:"-30";s:1:"T";s:4:"-120";s:6:"Tcaron";s:4:"-120";s:12:"Tcommaaccent";s:4:"-120";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:3:"-70";s:1:"W";s:3:"-50";s:1:"Y";s:4:"-100";s:6:"Yacute";s:4:"-100";s:9:"Ydieresis";s:4:"-100";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"v";s:3:"-40";s:1:"w";s:3:"-40";s:1:"y";s:3:"-40";s:6:"yacute";s:3:"-40";s:9:"ydieresis";s:3:"-40";}s:5:"Aring";a:48:{s:1:"C";s:3:"-30";s:6:"Cacute";s:3:"-30";s:6:"Ccaron";s:3:"-30";s:8:"Ccedilla";s:3:"-30";s:1:"G";s:3:"-30";s:6:"Gbreve";s:3:"-30";s:12:"Gcommaaccent";s:3:"-30";s:1:"O";s:3:"-30";s:6:"Oacute";s:3:"-30";s:11:"Ocircumflex";s:3:"-30";s:9:"Odieresis";s:3:"-30";s:6:"Ograve";s:3:"-30";s:13:"Ohungarumlaut";s:3:"-30";s:7:"Omacron";s:3:"-30";s:6:"Oslash";s:3:"-30";s:6:"Otilde";s:3:"-30";s:1:"Q";s:3:"-30";s:1:"T";s:4:"-120";s:6:"Tcaron";s:4:"-120";s:12:"Tcommaaccent";s:4:"-120";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:3:"-70";s:1:"W";s:3:"-50";s:1:"Y";s:4:"-100";s:6:"Yacute";s:4:"-100";s:9:"Ydieresis";s:4:"-100";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"v";s:3:"-40";s:1:"w";s:3:"-40";s:1:"y";s:3:"-40";s:6:"yacute";s:3:"-40";s:9:"ydieresis";s:3:"-40";}s:6:"Atilde";a:48:{s:1:"C";s:3:"-30";s:6:"Cacute";s:3:"-30";s:6:"Ccaron";s:3:"-30";s:8:"Ccedilla";s:3:"-30";s:1:"G";s:3:"-30";s:6:"Gbreve";s:3:"-30";s:12:"Gcommaaccent";s:3:"-30";s:1:"O";s:3:"-30";s:6:"Oacute";s:3:"-30";s:11:"Ocircumflex";s:3:"-30";s:9:"Odieresis";s:3:"-30";s:6:"Ograve";s:3:"-30";s:13:"Ohungarumlaut";s:3:"-30";s:7:"Omacron";s:3:"-30";s:6:"Oslash";s:3:"-30";s:6:"Otilde";s:3:"-30";s:1:"Q";s:3:"-30";s:1:"T";s:4:"-120";s:6:"Tcaron";s:4:"-120";s:12:"Tcommaaccent";s:4:"-120";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:3:"-70";s:1:"W";s:3:"-50";s:1:"Y";s:4:"-100";s:6:"Yacute";s:4:"-100";s:9:"Ydieresis";s:4:"-100";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"v";s:3:"-40";s:1:"w";s:3:"-40";s:1:"y";s:3:"-40";s:6:"yacute";s:3:"-40";s:9:"ydieresis";s:3:"-40";}s:1:"B";a:11:{s:1:"U";s:3:"-10";s:6:"Uacute";s:3:"-10";s:11:"Ucircumflex";s:3:"-10";s:9:"Udieresis";s:3:"-10";s:6:"Ugrave";s:3:"-10";s:13:"Uhungarumlaut";s:3:"-10";s:7:"Umacron";s:3:"-10";s:7:"Uogonek";s:3:"-10";s:5:"Uring";s:3:"-10";s:5:"comma";s:3:"-20";s:6:"period";s:3:"-20";}s:1:"C";a:2:{s:5:"comma";s:3:"-30";s:6:"period";s:3:"-30";}s:6:"Cacute";a:2:{s:5:"comma";s:3:"-30";s:6:"period";s:3:"-30";}s:6:"Ccaron";a:2:{s:5:"comma";s:3:"-30";s:6:"period";s:3:"-30";}s:8:"Ccedilla";a:2:{s:5:"comma";s:3:"-30";s:6:"period";s:3:"-30";}s:1:"D";a:17:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:1:"V";s:3:"-70";s:1:"W";s:3:"-40";s:1:"Y";s:3:"-90";s:6:"Yacute";s:3:"-90";s:9:"Ydieresis";s:3:"-90";s:5:"comma";s:3:"-70";s:6:"period";s:3:"-70";}s:6:"Dcaron";a:17:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:1:"V";s:3:"-70";s:1:"W";s:3:"-40";s:1:"Y";s:3:"-90";s:6:"Yacute";s:3:"-90";s:9:"Ydieresis";s:3:"-90";s:5:"comma";s:3:"-70";s:6:"period";s:3:"-70";}s:6:"Dcroat";a:17:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:1:"V";s:3:"-70";s:1:"W";s:3:"-40";s:1:"Y";s:3:"-90";s:6:"Yacute";s:3:"-90";s:9:"Ydieresis";s:3:"-90";s:5:"comma";s:3:"-70";s:6:"period";s:3:"-70";}s:1:"F";a:44:{s:1:"A";s:3:"-80";s:6:"Aacute";s:3:"-80";s:6:"Abreve";s:3:"-80";s:11:"Acircumflex";s:3:"-80";s:9:"Adieresis";s:3:"-80";s:6:"Agrave";s:3:"-80";s:7:"Amacron";s:3:"-80";s:7:"Aogonek";s:3:"-80";s:5:"Aring";s:3:"-80";s:6:"Atilde";s:3:"-80";s:1:"a";s:3:"-50";s:6:"aacute";s:3:"-50";s:6:"abreve";s:3:"-50";s:11:"acircumflex";s:3:"-50";s:9:"adieresis";s:3:"-50";s:6:"agrave";s:3:"-50";s:7:"amacron";s:3:"-50";s:7:"aogonek";s:3:"-50";s:5:"aring";s:3:"-50";s:6:"atilde";s:3:"-50";s:5:"comma";s:4:"-150";s:1:"e";s:3:"-30";s:6:"eacute";s:3:"-30";s:6:"ecaron";s:3:"-30";s:11:"ecircumflex";s:3:"-30";s:9:"edieresis";s:3:"-30";s:10:"edotaccent";s:3:"-30";s:6:"egrave";s:3:"-30";s:7:"emacron";s:3:"-30";s:7:"eogonek";s:3:"-30";s:1:"o";s:3:"-30";s:6:"oacute";s:3:"-30";s:11:"ocircumflex";s:3:"-30";s:9:"odieresis";s:3:"-30";s:6:"ograve";s:3:"-30";s:13:"ohungarumlaut";s:3:"-30";s:7:"omacron";s:3:"-30";s:6:"oslash";s:3:"-30";s:6:"otilde";s:3:"-30";s:6:"period";s:4:"-150";s:1:"r";s:3:"-45";s:6:"racute";s:3:"-45";s:6:"rcaron";s:3:"-45";s:12:"rcommaaccent";s:3:"-45";}s:1:"J";a:31:{s:1:"A";s:3:"-20";s:6:"Aacute";s:3:"-20";s:6:"Abreve";s:3:"-20";s:11:"Acircumflex";s:3:"-20";s:9:"Adieresis";s:3:"-20";s:6:"Agrave";s:3:"-20";s:7:"Amacron";s:3:"-20";s:7:"Aogonek";s:3:"-20";s:5:"Aring";s:3:"-20";s:6:"Atilde";s:3:"-20";s:1:"a";s:3:"-20";s:6:"aacute";s:3:"-20";s:6:"abreve";s:3:"-20";s:11:"acircumflex";s:3:"-20";s:9:"adieresis";s:3:"-20";s:6:"agrave";s:3:"-20";s:7:"amacron";s:3:"-20";s:7:"aogonek";s:3:"-20";s:5:"aring";s:3:"-20";s:6:"atilde";s:3:"-20";s:5:"comma";s:3:"-30";s:6:"period";s:3:"-30";s:1:"u";s:3:"-20";s:6:"uacute";s:3:"-20";s:11:"ucircumflex";s:3:"-20";s:9:"udieresis";s:3:"-20";s:6:"ugrave";s:3:"-20";s:13:"uhungarumlaut";s:3:"-20";s:7:"umacron";s:3:"-20";s:7:"uogonek";s:3:"-20";s:5:"uring";s:3:"-20";}s:1:"K";a:39:{s:1:"O";s:3:"-50";s:6:"Oacute";s:3:"-50";s:11:"Ocircumflex";s:3:"-50";s:9:"Odieresis";s:3:"-50";s:6:"Ograve";s:3:"-50";s:13:"Ohungarumlaut";s:3:"-50";s:7:"Omacron";s:3:"-50";s:6:"Oslash";s:3:"-50";s:6:"Otilde";s:3:"-50";s:1:"e";s:3:"-40";s:6:"eacute";s:3:"-40";s:6:"ecaron";s:3:"-40";s:11:"ecircumflex";s:3:"-40";s:9:"edieresis";s:3:"-40";s:10:"edotaccent";s:3:"-40";s:6:"egrave";s:3:"-40";s:7:"emacron";s:3:"-40";s:7:"eogonek";s:3:"-40";s:1:"o";s:3:"-40";s:6:"oacute";s:3:"-40";s:11:"ocircumflex";s:3:"-40";s:9:"odieresis";s:3:"-40";s:6:"ograve";s:3:"-40";s:13:"ohungarumlaut";s:3:"-40";s:7:"omacron";s:3:"-40";s:6:"oslash";s:3:"-40";s:6:"otilde";s:3:"-40";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"y";s:3:"-50";s:6:"yacute";s:3:"-50";s:9:"ydieresis";s:3:"-50";}s:12:"Kcommaaccent";a:39:{s:1:"O";s:3:"-50";s:6:"Oacute";s:3:"-50";s:11:"Ocircumflex";s:3:"-50";s:9:"Odieresis";s:3:"-50";s:6:"Ograve";s:3:"-50";s:13:"Ohungarumlaut";s:3:"-50";s:7:"Omacron";s:3:"-50";s:6:"Oslash";s:3:"-50";s:6:"Otilde";s:3:"-50";s:1:"e";s:3:"-40";s:6:"eacute";s:3:"-40";s:6:"ecaron";s:3:"-40";s:11:"ecircumflex";s:3:"-40";s:9:"edieresis";s:3:"-40";s:10:"edotaccent";s:3:"-40";s:6:"egrave";s:3:"-40";s:7:"emacron";s:3:"-40";s:7:"eogonek";s:3:"-40";s:1:"o";s:3:"-40";s:6:"oacute";s:3:"-40";s:11:"ocircumflex";s:3:"-40";s:9:"odieresis";s:3:"-40";s:6:"ograve";s:3:"-40";s:13:"ohungarumlaut";s:3:"-40";s:7:"omacron";s:3:"-40";s:6:"oslash";s:3:"-40";s:6:"otilde";s:3:"-40";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"y";s:3:"-50";s:6:"yacute";s:3:"-50";s:9:"ydieresis";s:3:"-50";}s:1:"L";a:13:{s:1:"T";s:4:"-110";s:6:"Tcaron";s:4:"-110";s:12:"Tcommaaccent";s:4:"-110";s:1:"V";s:4:"-110";s:1:"W";s:3:"-70";s:1:"Y";s:4:"-140";s:6:"Yacute";s:4:"-140";s:9:"Ydieresis";s:4:"-140";s:13:"quotedblright";s:4:"-140";s:10:"quoteright";s:4:"-160";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:6:"Lacute";a:13:{s:1:"T";s:4:"-110";s:6:"Tcaron";s:4:"-110";s:12:"Tcommaaccent";s:4:"-110";s:1:"V";s:4:"-110";s:1:"W";s:3:"-70";s:1:"Y";s:4:"-140";s:6:"Yacute";s:4:"-140";s:9:"Ydieresis";s:4:"-140";s:13:"quotedblright";s:4:"-140";s:10:"quoteright";s:4:"-160";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:6:"Lcaron";a:13:{s:1:"T";s:4:"-110";s:6:"Tcaron";s:4:"-110";s:12:"Tcommaaccent";s:4:"-110";s:1:"V";s:4:"-110";s:1:"W";s:3:"-70";s:1:"Y";s:4:"-140";s:6:"Yacute";s:4:"-140";s:9:"Ydieresis";s:4:"-140";s:13:"quotedblright";s:4:"-140";s:10:"quoteright";s:4:"-160";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:12:"Lcommaaccent";a:13:{s:1:"T";s:4:"-110";s:6:"Tcaron";s:4:"-110";s:12:"Tcommaaccent";s:4:"-110";s:1:"V";s:4:"-110";s:1:"W";s:3:"-70";s:1:"Y";s:4:"-140";s:6:"Yacute";s:4:"-140";s:9:"Ydieresis";s:4:"-140";s:13:"quotedblright";s:4:"-140";s:10:"quoteright";s:4:"-160";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:6:"Lslash";a:13:{s:1:"T";s:4:"-110";s:6:"Tcaron";s:4:"-110";s:12:"Tcommaaccent";s:4:"-110";s:1:"V";s:4:"-110";s:1:"W";s:3:"-70";s:1:"Y";s:4:"-140";s:6:"Yacute";s:4:"-140";s:9:"Ydieresis";s:4:"-140";s:13:"quotedblright";s:4:"-140";s:10:"quoteright";s:4:"-160";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:1:"O";a:21:{s:1:"A";s:3:"-20";s:6:"Aacute";s:3:"-20";s:6:"Abreve";s:3:"-20";s:11:"Acircumflex";s:3:"-20";s:9:"Adieresis";s:3:"-20";s:6:"Agrave";s:3:"-20";s:7:"Amacron";s:3:"-20";s:7:"Aogonek";s:3:"-20";s:5:"Aring";s:3:"-20";s:6:"Atilde";s:3:"-20";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-30";s:1:"X";s:3:"-60";s:1:"Y";s:3:"-70";s:6:"Yacute";s:3:"-70";s:9:"Ydieresis";s:3:"-70";s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";}s:6:"Oacute";a:21:{s:1:"A";s:3:"-20";s:6:"Aacute";s:3:"-20";s:6:"Abreve";s:3:"-20";s:11:"Acircumflex";s:3:"-20";s:9:"Adieresis";s:3:"-20";s:6:"Agrave";s:3:"-20";s:7:"Amacron";s:3:"-20";s:7:"Aogonek";s:3:"-20";s:5:"Aring";s:3:"-20";s:6:"Atilde";s:3:"-20";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-30";s:1:"X";s:3:"-60";s:1:"Y";s:3:"-70";s:6:"Yacute";s:3:"-70";s:9:"Ydieresis";s:3:"-70";s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";}s:11:"Ocircumflex";a:21:{s:1:"A";s:3:"-20";s:6:"Aacute";s:3:"-20";s:6:"Abreve";s:3:"-20";s:11:"Acircumflex";s:3:"-20";s:9:"Adieresis";s:3:"-20";s:6:"Agrave";s:3:"-20";s:7:"Amacron";s:3:"-20";s:7:"Aogonek";s:3:"-20";s:5:"Aring";s:3:"-20";s:6:"Atilde";s:3:"-20";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-30";s:1:"X";s:3:"-60";s:1:"Y";s:3:"-70";s:6:"Yacute";s:3:"-70";s:9:"Ydieresis";s:3:"-70";s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";}s:9:"Odieresis";a:21:{s:1:"A";s:3:"-20";s:6:"Aacute";s:3:"-20";s:6:"Abreve";s:3:"-20";s:11:"Acircumflex";s:3:"-20";s:9:"Adieresis";s:3:"-20";s:6:"Agrave";s:3:"-20";s:7:"Amacron";s:3:"-20";s:7:"Aogonek";s:3:"-20";s:5:"Aring";s:3:"-20";s:6:"Atilde";s:3:"-20";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-30";s:1:"X";s:3:"-60";s:1:"Y";s:3:"-70";s:6:"Yacute";s:3:"-70";s:9:"Ydieresis";s:3:"-70";s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";}s:6:"Ograve";a:21:{s:1:"A";s:3:"-20";s:6:"Aacute";s:3:"-20";s:6:"Abreve";s:3:"-20";s:11:"Acircumflex";s:3:"-20";s:9:"Adieresis";s:3:"-20";s:6:"Agrave";s:3:"-20";s:7:"Amacron";s:3:"-20";s:7:"Aogonek";s:3:"-20";s:5:"Aring";s:3:"-20";s:6:"Atilde";s:3:"-20";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-30";s:1:"X";s:3:"-60";s:1:"Y";s:3:"-70";s:6:"Yacute";s:3:"-70";s:9:"Ydieresis";s:3:"-70";s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";}s:13:"Ohungarumlaut";a:21:{s:1:"A";s:3:"-20";s:6:"Aacute";s:3:"-20";s:6:"Abreve";s:3:"-20";s:11:"Acircumflex";s:3:"-20";s:9:"Adieresis";s:3:"-20";s:6:"Agrave";s:3:"-20";s:7:"Amacron";s:3:"-20";s:7:"Aogonek";s:3:"-20";s:5:"Aring";s:3:"-20";s:6:"Atilde";s:3:"-20";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-30";s:1:"X";s:3:"-60";s:1:"Y";s:3:"-70";s:6:"Yacute";s:3:"-70";s:9:"Ydieresis";s:3:"-70";s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";}s:7:"Omacron";a:21:{s:1:"A";s:3:"-20";s:6:"Aacute";s:3:"-20";s:6:"Abreve";s:3:"-20";s:11:"Acircumflex";s:3:"-20";s:9:"Adieresis";s:3:"-20";s:6:"Agrave";s:3:"-20";s:7:"Amacron";s:3:"-20";s:7:"Aogonek";s:3:"-20";s:5:"Aring";s:3:"-20";s:6:"Atilde";s:3:"-20";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-30";s:1:"X";s:3:"-60";s:1:"Y";s:3:"-70";s:6:"Yacute";s:3:"-70";s:9:"Ydieresis";s:3:"-70";s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";}s:6:"Oslash";a:21:{s:1:"A";s:3:"-20";s:6:"Aacute";s:3:"-20";s:6:"Abreve";s:3:"-20";s:11:"Acircumflex";s:3:"-20";s:9:"Adieresis";s:3:"-20";s:6:"Agrave";s:3:"-20";s:7:"Amacron";s:3:"-20";s:7:"Aogonek";s:3:"-20";s:5:"Aring";s:3:"-20";s:6:"Atilde";s:3:"-20";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-30";s:1:"X";s:3:"-60";s:1:"Y";s:3:"-70";s:6:"Yacute";s:3:"-70";s:9:"Ydieresis";s:3:"-70";s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";}s:6:"Otilde";a:21:{s:1:"A";s:3:"-20";s:6:"Aacute";s:3:"-20";s:6:"Abreve";s:3:"-20";s:11:"Acircumflex";s:3:"-20";s:9:"Adieresis";s:3:"-20";s:6:"Agrave";s:3:"-20";s:7:"Amacron";s:3:"-20";s:7:"Aogonek";s:3:"-20";s:5:"Aring";s:3:"-20";s:6:"Atilde";s:3:"-20";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-30";s:1:"X";s:3:"-60";s:1:"Y";s:3:"-70";s:6:"Yacute";s:3:"-70";s:9:"Ydieresis";s:3:"-70";s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";}s:1:"P";a:40:{s:1:"A";s:4:"-120";s:6:"Aacute";s:4:"-120";s:6:"Abreve";s:4:"-120";s:11:"Acircumflex";s:4:"-120";s:9:"Adieresis";s:4:"-120";s:6:"Agrave";s:4:"-120";s:7:"Amacron";s:4:"-120";s:7:"Aogonek";s:4:"-120";s:5:"Aring";s:4:"-120";s:6:"Atilde";s:4:"-120";s:1:"a";s:3:"-40";s:6:"aacute";s:3:"-40";s:6:"abreve";s:3:"-40";s:11:"acircumflex";s:3:"-40";s:9:"adieresis";s:3:"-40";s:6:"agrave";s:3:"-40";s:7:"amacron";s:3:"-40";s:7:"aogonek";s:3:"-40";s:5:"aring";s:3:"-40";s:6:"atilde";s:3:"-40";s:5:"comma";s:4:"-180";s:1:"e";s:3:"-50";s:6:"eacute";s:3:"-50";s:6:"ecaron";s:3:"-50";s:11:"ecircumflex";s:3:"-50";s:9:"edieresis";s:3:"-50";s:10:"edotaccent";s:3:"-50";s:6:"egrave";s:3:"-50";s:7:"emacron";s:3:"-50";s:7:"eogonek";s:3:"-50";s:1:"o";s:3:"-50";s:6:"oacute";s:3:"-50";s:11:"ocircumflex";s:3:"-50";s:9:"odieresis";s:3:"-50";s:6:"ograve";s:3:"-50";s:13:"ohungarumlaut";s:3:"-50";s:7:"omacron";s:3:"-50";s:6:"oslash";s:3:"-50";s:6:"otilde";s:3:"-50";s:6:"period";s:4:"-180";}s:1:"Q";a:9:{s:1:"U";s:3:"-10";s:6:"Uacute";s:3:"-10";s:11:"Ucircumflex";s:3:"-10";s:9:"Udieresis";s:3:"-10";s:6:"Ugrave";s:3:"-10";s:13:"Uhungarumlaut";s:3:"-10";s:7:"Umacron";s:3:"-10";s:7:"Uogonek";s:3:"-10";s:5:"Uring";s:3:"-10";}s:1:"R";a:26:{s:1:"O";s:3:"-20";s:6:"Oacute";s:3:"-20";s:11:"Ocircumflex";s:3:"-20";s:9:"Odieresis";s:3:"-20";s:6:"Ograve";s:3:"-20";s:13:"Ohungarumlaut";s:3:"-20";s:7:"Omacron";s:3:"-20";s:6:"Oslash";s:3:"-20";s:6:"Otilde";s:3:"-20";s:1:"T";s:3:"-30";s:6:"Tcaron";s:3:"-30";s:12:"Tcommaaccent";s:3:"-30";s:1:"U";s:3:"-40";s:6:"Uacute";s:3:"-40";s:11:"Ucircumflex";s:3:"-40";s:9:"Udieresis";s:3:"-40";s:6:"Ugrave";s:3:"-40";s:13:"Uhungarumlaut";s:3:"-40";s:7:"Umacron";s:3:"-40";s:7:"Uogonek";s:3:"-40";s:5:"Uring";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-30";s:1:"Y";s:3:"-50";s:6:"Yacute";s:3:"-50";s:9:"Ydieresis";s:3:"-50";}s:6:"Racute";a:26:{s:1:"O";s:3:"-20";s:6:"Oacute";s:3:"-20";s:11:"Ocircumflex";s:3:"-20";s:9:"Odieresis";s:3:"-20";s:6:"Ograve";s:3:"-20";s:13:"Ohungarumlaut";s:3:"-20";s:7:"Omacron";s:3:"-20";s:6:"Oslash";s:3:"-20";s:6:"Otilde";s:3:"-20";s:1:"T";s:3:"-30";s:6:"Tcaron";s:3:"-30";s:12:"Tcommaaccent";s:3:"-30";s:1:"U";s:3:"-40";s:6:"Uacute";s:3:"-40";s:11:"Ucircumflex";s:3:"-40";s:9:"Udieresis";s:3:"-40";s:6:"Ugrave";s:3:"-40";s:13:"Uhungarumlaut";s:3:"-40";s:7:"Umacron";s:3:"-40";s:7:"Uogonek";s:3:"-40";s:5:"Uring";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-30";s:1:"Y";s:3:"-50";s:6:"Yacute";s:3:"-50";s:9:"Ydieresis";s:3:"-50";}s:6:"Rcaron";a:26:{s:1:"O";s:3:"-20";s:6:"Oacute";s:3:"-20";s:11:"Ocircumflex";s:3:"-20";s:9:"Odieresis";s:3:"-20";s:6:"Ograve";s:3:"-20";s:13:"Ohungarumlaut";s:3:"-20";s:7:"Omacron";s:3:"-20";s:6:"Oslash";s:3:"-20";s:6:"Otilde";s:3:"-20";s:1:"T";s:3:"-30";s:6:"Tcaron";s:3:"-30";s:12:"Tcommaaccent";s:3:"-30";s:1:"U";s:3:"-40";s:6:"Uacute";s:3:"-40";s:11:"Ucircumflex";s:3:"-40";s:9:"Udieresis";s:3:"-40";s:6:"Ugrave";s:3:"-40";s:13:"Uhungarumlaut";s:3:"-40";s:7:"Umacron";s:3:"-40";s:7:"Uogonek";s:3:"-40";s:5:"Uring";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-30";s:1:"Y";s:3:"-50";s:6:"Yacute";s:3:"-50";s:9:"Ydieresis";s:3:"-50";}s:12:"Rcommaaccent";a:26:{s:1:"O";s:3:"-20";s:6:"Oacute";s:3:"-20";s:11:"Ocircumflex";s:3:"-20";s:9:"Odieresis";s:3:"-20";s:6:"Ograve";s:3:"-20";s:13:"Ohungarumlaut";s:3:"-20";s:7:"Omacron";s:3:"-20";s:6:"Oslash";s:3:"-20";s:6:"Otilde";s:3:"-20";s:1:"T";s:3:"-30";s:6:"Tcaron";s:3:"-30";s:12:"Tcommaaccent";s:3:"-30";s:1:"U";s:3:"-40";s:6:"Uacute";s:3:"-40";s:11:"Ucircumflex";s:3:"-40";s:9:"Udieresis";s:3:"-40";s:6:"Ugrave";s:3:"-40";s:13:"Uhungarumlaut";s:3:"-40";s:7:"Umacron";s:3:"-40";s:7:"Uogonek";s:3:"-40";s:5:"Uring";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-30";s:1:"Y";s:3:"-50";s:6:"Yacute";s:3:"-50";s:9:"Ydieresis";s:3:"-50";}s:1:"S";a:2:{s:5:"comma";s:3:"-20";s:6:"period";s:3:"-20";}s:6:"Sacute";a:2:{s:5:"comma";s:3:"-20";s:6:"period";s:3:"-20";}s:6:"Scaron";a:2:{s:5:"comma";s:3:"-20";s:6:"period";s:3:"-20";}s:8:"Scedilla";a:2:{s:5:"comma";s:3:"-20";s:6:"period";s:3:"-20";}s:12:"Scommaaccent";a:2:{s:5:"comma";s:3:"-20";s:6:"period";s:3:"-20";}s:1:"T";a:69:{s:1:"A";s:4:"-120";s:6:"Aacute";s:4:"-120";s:6:"Abreve";s:4:"-120";s:11:"Acircumflex";s:4:"-120";s:9:"Adieresis";s:4:"-120";s:6:"Agrave";s:4:"-120";s:7:"Amacron";s:4:"-120";s:7:"Aogonek";s:4:"-120";s:5:"Aring";s:4:"-120";s:6:"Atilde";s:4:"-120";s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"a";s:4:"-120";s:6:"aacute";s:4:"-120";s:6:"abreve";s:3:"-60";s:11:"acircumflex";s:4:"-120";s:9:"adieresis";s:4:"-120";s:6:"agrave";s:4:"-120";s:7:"amacron";s:3:"-60";s:7:"aogonek";s:4:"-120";s:5:"aring";s:4:"-120";s:6:"atilde";s:3:"-60";s:5:"colon";s:3:"-20";s:5:"comma";s:4:"-120";s:1:"e";s:4:"-120";s:6:"eacute";s:4:"-120";s:6:"ecaron";s:4:"-120";s:11:"ecircumflex";s:4:"-120";s:9:"edieresis";s:4:"-120";s:10:"edotaccent";s:4:"-120";s:6:"egrave";s:3:"-60";s:7:"emacron";s:3:"-60";s:7:"eogonek";s:4:"-120";s:6:"hyphen";s:4:"-140";s:1:"o";s:4:"-120";s:6:"oacute";s:4:"-120";s:11:"ocircumflex";s:4:"-120";s:9:"odieresis";s:4:"-120";s:6:"ograve";s:4:"-120";s:13:"ohungarumlaut";s:4:"-120";s:7:"omacron";s:3:"-60";s:6:"oslash";s:4:"-120";s:6:"otilde";s:3:"-60";s:6:"period";s:4:"-120";s:1:"r";s:4:"-120";s:6:"racute";s:4:"-120";s:6:"rcaron";s:4:"-120";s:12:"rcommaaccent";s:4:"-120";s:9:"semicolon";s:3:"-20";s:1:"u";s:4:"-120";s:6:"uacute";s:4:"-120";s:11:"ucircumflex";s:4:"-120";s:9:"udieresis";s:4:"-120";s:6:"ugrave";s:4:"-120";s:13:"uhungarumlaut";s:4:"-120";s:7:"umacron";s:3:"-60";s:7:"uogonek";s:4:"-120";s:5:"uring";s:4:"-120";s:1:"w";s:4:"-120";s:1:"y";s:4:"-120";s:6:"yacute";s:4:"-120";s:9:"ydieresis";s:3:"-60";}s:6:"Tcaron";a:69:{s:1:"A";s:4:"-120";s:6:"Aacute";s:4:"-120";s:6:"Abreve";s:4:"-120";s:11:"Acircumflex";s:4:"-120";s:9:"Adieresis";s:4:"-120";s:6:"Agrave";s:4:"-120";s:7:"Amacron";s:4:"-120";s:7:"Aogonek";s:4:"-120";s:5:"Aring";s:4:"-120";s:6:"Atilde";s:4:"-120";s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"a";s:4:"-120";s:6:"aacute";s:4:"-120";s:6:"abreve";s:3:"-60";s:11:"acircumflex";s:4:"-120";s:9:"adieresis";s:4:"-120";s:6:"agrave";s:4:"-120";s:7:"amacron";s:3:"-60";s:7:"aogonek";s:4:"-120";s:5:"aring";s:4:"-120";s:6:"atilde";s:3:"-60";s:5:"colon";s:3:"-20";s:5:"comma";s:4:"-120";s:1:"e";s:4:"-120";s:6:"eacute";s:4:"-120";s:6:"ecaron";s:4:"-120";s:11:"ecircumflex";s:4:"-120";s:9:"edieresis";s:4:"-120";s:10:"edotaccent";s:4:"-120";s:6:"egrave";s:3:"-60";s:7:"emacron";s:3:"-60";s:7:"eogonek";s:4:"-120";s:6:"hyphen";s:4:"-140";s:1:"o";s:4:"-120";s:6:"oacute";s:4:"-120";s:11:"ocircumflex";s:4:"-120";s:9:"odieresis";s:4:"-120";s:6:"ograve";s:4:"-120";s:13:"ohungarumlaut";s:4:"-120";s:7:"omacron";s:3:"-60";s:6:"oslash";s:4:"-120";s:6:"otilde";s:3:"-60";s:6:"period";s:4:"-120";s:1:"r";s:4:"-120";s:6:"racute";s:4:"-120";s:6:"rcaron";s:4:"-120";s:12:"rcommaaccent";s:4:"-120";s:9:"semicolon";s:3:"-20";s:1:"u";s:4:"-120";s:6:"uacute";s:4:"-120";s:11:"ucircumflex";s:4:"-120";s:9:"udieresis";s:4:"-120";s:6:"ugrave";s:4:"-120";s:13:"uhungarumlaut";s:4:"-120";s:7:"umacron";s:3:"-60";s:7:"uogonek";s:4:"-120";s:5:"uring";s:4:"-120";s:1:"w";s:4:"-120";s:1:"y";s:4:"-120";s:6:"yacute";s:4:"-120";s:9:"ydieresis";s:3:"-60";}s:12:"Tcommaaccent";a:69:{s:1:"A";s:4:"-120";s:6:"Aacute";s:4:"-120";s:6:"Abreve";s:4:"-120";s:11:"Acircumflex";s:4:"-120";s:9:"Adieresis";s:4:"-120";s:6:"Agrave";s:4:"-120";s:7:"Amacron";s:4:"-120";s:7:"Aogonek";s:4:"-120";s:5:"Aring";s:4:"-120";s:6:"Atilde";s:4:"-120";s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"a";s:4:"-120";s:6:"aacute";s:4:"-120";s:6:"abreve";s:3:"-60";s:11:"acircumflex";s:4:"-120";s:9:"adieresis";s:4:"-120";s:6:"agrave";s:4:"-120";s:7:"amacron";s:3:"-60";s:7:"aogonek";s:4:"-120";s:5:"aring";s:4:"-120";s:6:"atilde";s:3:"-60";s:5:"colon";s:3:"-20";s:5:"comma";s:4:"-120";s:1:"e";s:4:"-120";s:6:"eacute";s:4:"-120";s:6:"ecaron";s:4:"-120";s:11:"ecircumflex";s:4:"-120";s:9:"edieresis";s:4:"-120";s:10:"edotaccent";s:4:"-120";s:6:"egrave";s:3:"-60";s:7:"emacron";s:3:"-60";s:7:"eogonek";s:4:"-120";s:6:"hyphen";s:4:"-140";s:1:"o";s:4:"-120";s:6:"oacute";s:4:"-120";s:11:"ocircumflex";s:4:"-120";s:9:"odieresis";s:4:"-120";s:6:"ograve";s:4:"-120";s:13:"ohungarumlaut";s:4:"-120";s:7:"omacron";s:3:"-60";s:6:"oslash";s:4:"-120";s:6:"otilde";s:3:"-60";s:6:"period";s:4:"-120";s:1:"r";s:4:"-120";s:6:"racute";s:4:"-120";s:6:"rcaron";s:4:"-120";s:12:"rcommaaccent";s:4:"-120";s:9:"semicolon";s:3:"-20";s:1:"u";s:4:"-120";s:6:"uacute";s:4:"-120";s:11:"ucircumflex";s:4:"-120";s:9:"udieresis";s:4:"-120";s:6:"ugrave";s:4:"-120";s:13:"uhungarumlaut";s:4:"-120";s:7:"umacron";s:3:"-60";s:7:"uogonek";s:4:"-120";s:5:"uring";s:4:"-120";s:1:"w";s:4:"-120";s:1:"y";s:4:"-120";s:6:"yacute";s:4:"-120";s:9:"ydieresis";s:3:"-60";}s:1:"U";a:12:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";}s:6:"Uacute";a:12:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";}s:11:"Ucircumflex";a:12:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";}s:9:"Udieresis";a:12:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";}s:6:"Ugrave";a:12:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";}s:13:"Uhungarumlaut";a:12:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";}s:7:"Umacron";a:12:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";}s:7:"Uogonek";a:12:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";}s:5:"Uring";a:12:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";}s:1:"V";a:64:{s:1:"A";s:3:"-80";s:6:"Aacute";s:3:"-80";s:6:"Abreve";s:3:"-80";s:11:"Acircumflex";s:3:"-80";s:9:"Adieresis";s:3:"-80";s:6:"Agrave";s:3:"-80";s:7:"Amacron";s:3:"-80";s:7:"Aogonek";s:3:"-80";s:5:"Aring";s:3:"-80";s:6:"Atilde";s:3:"-80";s:1:"G";s:3:"-40";s:6:"Gbreve";s:3:"-40";s:12:"Gcommaaccent";s:3:"-40";s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"a";s:3:"-70";s:6:"aacute";s:3:"-70";s:6:"abreve";s:3:"-70";s:11:"acircumflex";s:3:"-70";s:9:"adieresis";s:3:"-70";s:6:"agrave";s:3:"-70";s:7:"amacron";s:3:"-70";s:7:"aogonek";s:3:"-70";s:5:"aring";s:3:"-70";s:6:"atilde";s:3:"-70";s:5:"colon";s:3:"-40";s:5:"comma";s:4:"-125";s:1:"e";s:3:"-80";s:6:"eacute";s:3:"-80";s:6:"ecaron";s:3:"-80";s:11:"ecircumflex";s:3:"-80";s:9:"edieresis";s:3:"-80";s:10:"edotaccent";s:3:"-80";s:6:"egrave";s:3:"-80";s:7:"emacron";s:3:"-80";s:7:"eogonek";s:3:"-80";s:6:"hyphen";s:3:"-80";s:1:"o";s:3:"-80";s:6:"oacute";s:3:"-80";s:11:"ocircumflex";s:3:"-80";s:9:"odieresis";s:3:"-80";s:6:"ograve";s:3:"-80";s:13:"ohungarumlaut";s:3:"-80";s:7:"omacron";s:3:"-80";s:6:"oslash";s:3:"-80";s:6:"otilde";s:3:"-80";s:6:"period";s:4:"-125";s:9:"semicolon";s:3:"-40";s:1:"u";s:3:"-70";s:6:"uacute";s:3:"-70";s:11:"ucircumflex";s:3:"-70";s:9:"udieresis";s:3:"-70";s:6:"ugrave";s:3:"-70";s:13:"uhungarumlaut";s:3:"-70";s:7:"umacron";s:3:"-70";s:7:"uogonek";s:3:"-70";s:5:"uring";s:3:"-70";}s:1:"W";a:62:{s:1:"A";s:3:"-50";s:6:"Aacute";s:3:"-50";s:6:"Abreve";s:3:"-50";s:11:"Acircumflex";s:3:"-50";s:9:"Adieresis";s:3:"-50";s:6:"Agrave";s:3:"-50";s:7:"Amacron";s:3:"-50";s:7:"Aogonek";s:3:"-50";s:5:"Aring";s:3:"-50";s:6:"Atilde";s:3:"-50";s:1:"O";s:3:"-20";s:6:"Oacute";s:3:"-20";s:11:"Ocircumflex";s:3:"-20";s:9:"Odieresis";s:3:"-20";s:6:"Ograve";s:3:"-20";s:13:"Ohungarumlaut";s:3:"-20";s:7:"Omacron";s:3:"-20";s:6:"Oslash";s:3:"-20";s:6:"Otilde";s:3:"-20";s:1:"a";s:3:"-40";s:6:"aacute";s:3:"-40";s:6:"abreve";s:3:"-40";s:11:"acircumflex";s:3:"-40";s:9:"adieresis";s:3:"-40";s:6:"agrave";s:3:"-40";s:7:"amacron";s:3:"-40";s:7:"aogonek";s:3:"-40";s:5:"aring";s:3:"-40";s:6:"atilde";s:3:"-40";s:5:"comma";s:3:"-80";s:1:"e";s:3:"-30";s:6:"eacute";s:3:"-30";s:6:"ecaron";s:3:"-30";s:11:"ecircumflex";s:3:"-30";s:9:"edieresis";s:3:"-30";s:10:"edotaccent";s:3:"-30";s:6:"egrave";s:3:"-30";s:7:"emacron";s:3:"-30";s:7:"eogonek";s:3:"-30";s:6:"hyphen";s:3:"-40";s:1:"o";s:3:"-30";s:6:"oacute";s:3:"-30";s:11:"ocircumflex";s:3:"-30";s:9:"odieresis";s:3:"-30";s:6:"ograve";s:3:"-30";s:13:"ohungarumlaut";s:3:"-30";s:7:"omacron";s:3:"-30";s:6:"oslash";s:3:"-30";s:6:"otilde";s:3:"-30";s:6:"period";s:3:"-80";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:1:"Y";a:64:{s:1:"A";s:4:"-110";s:6:"Aacute";s:4:"-110";s:6:"Abreve";s:4:"-110";s:11:"Acircumflex";s:4:"-110";s:9:"Adieresis";s:4:"-110";s:6:"Agrave";s:4:"-110";s:7:"Amacron";s:4:"-110";s:7:"Aogonek";s:4:"-110";s:5:"Aring";s:4:"-110";s:6:"Atilde";s:4:"-110";s:1:"O";s:3:"-85";s:6:"Oacute";s:3:"-85";s:11:"Ocircumflex";s:3:"-85";s:9:"Odieresis";s:3:"-85";s:6:"Ograve";s:3:"-85";s:13:"Ohungarumlaut";s:3:"-85";s:7:"Omacron";s:3:"-85";s:6:"Oslash";s:3:"-85";s:6:"Otilde";s:3:"-85";s:1:"a";s:4:"-140";s:6:"aacute";s:4:"-140";s:6:"abreve";s:3:"-70";s:11:"acircumflex";s:4:"-140";s:9:"adieresis";s:4:"-140";s:6:"agrave";s:4:"-140";s:7:"amacron";s:3:"-70";s:7:"aogonek";s:4:"-140";s:5:"aring";s:4:"-140";s:6:"atilde";s:4:"-140";s:5:"colon";s:3:"-60";s:5:"comma";s:4:"-140";s:1:"e";s:4:"-140";s:6:"eacute";s:4:"-140";s:6:"ecaron";s:4:"-140";s:11:"ecircumflex";s:4:"-140";s:9:"edieresis";s:4:"-140";s:10:"edotaccent";s:4:"-140";s:6:"egrave";s:4:"-140";s:7:"emacron";s:3:"-70";s:7:"eogonek";s:4:"-140";s:6:"hyphen";s:4:"-140";s:1:"i";s:3:"-20";s:6:"iacute";s:3:"-20";s:7:"iogonek";s:3:"-20";s:1:"o";s:4:"-140";s:6:"oacute";s:4:"-140";s:11:"ocircumflex";s:4:"-140";s:9:"odieresis";s:4:"-140";s:6:"ograve";s:4:"-140";s:13:"ohungarumlaut";s:4:"-140";s:7:"omacron";s:4:"-140";s:6:"oslash";s:4:"-140";s:6:"otilde";s:4:"-140";s:6:"period";s:4:"-140";s:9:"semicolon";s:3:"-60";s:1:"u";s:4:"-110";s:6:"uacute";s:4:"-110";s:11:"ucircumflex";s:4:"-110";s:9:"udieresis";s:4:"-110";s:6:"ugrave";s:4:"-110";s:13:"uhungarumlaut";s:4:"-110";s:7:"umacron";s:4:"-110";s:7:"uogonek";s:4:"-110";s:5:"uring";s:4:"-110";}s:6:"Yacute";a:64:{s:1:"A";s:4:"-110";s:6:"Aacute";s:4:"-110";s:6:"Abreve";s:4:"-110";s:11:"Acircumflex";s:4:"-110";s:9:"Adieresis";s:4:"-110";s:6:"Agrave";s:4:"-110";s:7:"Amacron";s:4:"-110";s:7:"Aogonek";s:4:"-110";s:5:"Aring";s:4:"-110";s:6:"Atilde";s:4:"-110";s:1:"O";s:3:"-85";s:6:"Oacute";s:3:"-85";s:11:"Ocircumflex";s:3:"-85";s:9:"Odieresis";s:3:"-85";s:6:"Ograve";s:3:"-85";s:13:"Ohungarumlaut";s:3:"-85";s:7:"Omacron";s:3:"-85";s:6:"Oslash";s:3:"-85";s:6:"Otilde";s:3:"-85";s:1:"a";s:4:"-140";s:6:"aacute";s:4:"-140";s:6:"abreve";s:3:"-70";s:11:"acircumflex";s:4:"-140";s:9:"adieresis";s:4:"-140";s:6:"agrave";s:4:"-140";s:7:"amacron";s:3:"-70";s:7:"aogonek";s:4:"-140";s:5:"aring";s:4:"-140";s:6:"atilde";s:3:"-70";s:5:"colon";s:3:"-60";s:5:"comma";s:4:"-140";s:1:"e";s:4:"-140";s:6:"eacute";s:4:"-140";s:6:"ecaron";s:4:"-140";s:11:"ecircumflex";s:4:"-140";s:9:"edieresis";s:4:"-140";s:10:"edotaccent";s:4:"-140";s:6:"egrave";s:4:"-140";s:7:"emacron";s:3:"-70";s:7:"eogonek";s:4:"-140";s:6:"hyphen";s:4:"-140";s:1:"i";s:3:"-20";s:6:"iacute";s:3:"-20";s:7:"iogonek";s:3:"-20";s:1:"o";s:4:"-140";s:6:"oacute";s:4:"-140";s:11:"ocircumflex";s:4:"-140";s:9:"odieresis";s:4:"-140";s:6:"ograve";s:4:"-140";s:13:"ohungarumlaut";s:4:"-140";s:7:"omacron";s:3:"-70";s:6:"oslash";s:4:"-140";s:6:"otilde";s:4:"-140";s:6:"period";s:4:"-140";s:9:"semicolon";s:3:"-60";s:1:"u";s:4:"-110";s:6:"uacute";s:4:"-110";s:11:"ucircumflex";s:4:"-110";s:9:"udieresis";s:4:"-110";s:6:"ugrave";s:4:"-110";s:13:"uhungarumlaut";s:4:"-110";s:7:"umacron";s:4:"-110";s:7:"uogonek";s:4:"-110";s:5:"uring";s:4:"-110";}s:9:"Ydieresis";a:64:{s:1:"A";s:4:"-110";s:6:"Aacute";s:4:"-110";s:6:"Abreve";s:4:"-110";s:11:"Acircumflex";s:4:"-110";s:9:"Adieresis";s:4:"-110";s:6:"Agrave";s:4:"-110";s:7:"Amacron";s:4:"-110";s:7:"Aogonek";s:4:"-110";s:5:"Aring";s:4:"-110";s:6:"Atilde";s:4:"-110";s:1:"O";s:3:"-85";s:6:"Oacute";s:3:"-85";s:11:"Ocircumflex";s:3:"-85";s:9:"Odieresis";s:3:"-85";s:6:"Ograve";s:3:"-85";s:13:"Ohungarumlaut";s:3:"-85";s:7:"Omacron";s:3:"-85";s:6:"Oslash";s:3:"-85";s:6:"Otilde";s:3:"-85";s:1:"a";s:4:"-140";s:6:"aacute";s:4:"-140";s:6:"abreve";s:3:"-70";s:11:"acircumflex";s:4:"-140";s:9:"adieresis";s:4:"-140";s:6:"agrave";s:4:"-140";s:7:"amacron";s:3:"-70";s:7:"aogonek";s:4:"-140";s:5:"aring";s:4:"-140";s:6:"atilde";s:3:"-70";s:5:"colon";s:3:"-60";s:5:"comma";s:4:"-140";s:1:"e";s:4:"-140";s:6:"eacute";s:4:"-140";s:6:"ecaron";s:4:"-140";s:11:"ecircumflex";s:4:"-140";s:9:"edieresis";s:4:"-140";s:10:"edotaccent";s:4:"-140";s:6:"egrave";s:4:"-140";s:7:"emacron";s:3:"-70";s:7:"eogonek";s:4:"-140";s:6:"hyphen";s:4:"-140";s:1:"i";s:3:"-20";s:6:"iacute";s:3:"-20";s:7:"iogonek";s:3:"-20";s:1:"o";s:4:"-140";s:6:"oacute";s:4:"-140";s:11:"ocircumflex";s:4:"-140";s:9:"odieresis";s:4:"-140";s:6:"ograve";s:4:"-140";s:13:"ohungarumlaut";s:4:"-140";s:7:"omacron";s:4:"-140";s:6:"oslash";s:4:"-140";s:6:"otilde";s:4:"-140";s:6:"period";s:4:"-140";s:9:"semicolon";s:3:"-60";s:1:"u";s:4:"-110";s:6:"uacute";s:4:"-110";s:11:"ucircumflex";s:4:"-110";s:9:"udieresis";s:4:"-110";s:6:"ugrave";s:4:"-110";s:13:"uhungarumlaut";s:4:"-110";s:7:"umacron";s:4:"-110";s:7:"uogonek";s:4:"-110";s:5:"uring";s:4:"-110";}s:1:"a";a:5:{s:1:"v";s:3:"-20";s:1:"w";s:3:"-20";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:6:"aacute";a:5:{s:1:"v";s:3:"-20";s:1:"w";s:3:"-20";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:6:"abreve";a:5:{s:1:"v";s:3:"-20";s:1:"w";s:3:"-20";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:11:"acircumflex";a:5:{s:1:"v";s:3:"-20";s:1:"w";s:3:"-20";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:9:"adieresis";a:5:{s:1:"v";s:3:"-20";s:1:"w";s:3:"-20";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:6:"agrave";a:5:{s:1:"v";s:3:"-20";s:1:"w";s:3:"-20";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:7:"amacron";a:5:{s:1:"v";s:3:"-20";s:1:"w";s:3:"-20";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:7:"aogonek";a:5:{s:1:"v";s:3:"-20";s:1:"w";s:3:"-20";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:5:"aring";a:5:{s:1:"v";s:3:"-20";s:1:"w";s:3:"-20";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:6:"atilde";a:5:{s:1:"v";s:3:"-20";s:1:"w";s:3:"-20";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:1:"b";a:20:{s:1:"b";s:3:"-10";s:5:"comma";s:3:"-40";s:1:"l";s:3:"-20";s:6:"lacute";s:3:"-20";s:12:"lcommaaccent";s:3:"-20";s:6:"lslash";s:3:"-20";s:6:"period";s:3:"-40";s:1:"u";s:3:"-20";s:6:"uacute";s:3:"-20";s:11:"ucircumflex";s:3:"-20";s:9:"udieresis";s:3:"-20";s:6:"ugrave";s:3:"-20";s:13:"uhungarumlaut";s:3:"-20";s:7:"umacron";s:3:"-20";s:7:"uogonek";s:3:"-20";s:5:"uring";s:3:"-20";s:1:"v";s:3:"-20";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:1:"c";a:3:{s:5:"comma";s:3:"-15";s:1:"k";s:3:"-20";s:12:"kcommaaccent";s:3:"-20";}s:6:"cacute";a:3:{s:5:"comma";s:3:"-15";s:1:"k";s:3:"-20";s:12:"kcommaaccent";s:3:"-20";}s:6:"ccaron";a:3:{s:5:"comma";s:3:"-15";s:1:"k";s:3:"-20";s:12:"kcommaaccent";s:3:"-20";}s:8:"ccedilla";a:3:{s:5:"comma";s:3:"-15";s:1:"k";s:3:"-20";s:12:"kcommaaccent";s:3:"-20";}s:5:"colon";a:1:{s:5:"space";s:3:"-50";}s:5:"comma";a:2:{s:13:"quotedblright";s:4:"-100";s:10:"quoteright";s:4:"-100";}s:1:"e";a:8:{s:5:"comma";s:3:"-15";s:6:"period";s:3:"-15";s:1:"v";s:3:"-30";s:1:"w";s:3:"-20";s:1:"x";s:3:"-30";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:6:"eacute";a:8:{s:5:"comma";s:3:"-15";s:6:"period";s:3:"-15";s:1:"v";s:3:"-30";s:1:"w";s:3:"-20";s:1:"x";s:3:"-30";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:6:"ecaron";a:8:{s:5:"comma";s:3:"-15";s:6:"period";s:3:"-15";s:1:"v";s:3:"-30";s:1:"w";s:3:"-20";s:1:"x";s:3:"-30";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:11:"ecircumflex";a:8:{s:5:"comma";s:3:"-15";s:6:"period";s:3:"-15";s:1:"v";s:3:"-30";s:1:"w";s:3:"-20";s:1:"x";s:3:"-30";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:9:"edieresis";a:8:{s:5:"comma";s:3:"-15";s:6:"period";s:3:"-15";s:1:"v";s:3:"-30";s:1:"w";s:3:"-20";s:1:"x";s:3:"-30";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:10:"edotaccent";a:8:{s:5:"comma";s:3:"-15";s:6:"period";s:3:"-15";s:1:"v";s:3:"-30";s:1:"w";s:3:"-20";s:1:"x";s:3:"-30";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:6:"egrave";a:8:{s:5:"comma";s:3:"-15";s:6:"period";s:3:"-15";s:1:"v";s:3:"-30";s:1:"w";s:3:"-20";s:1:"x";s:3:"-30";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:7:"emacron";a:8:{s:5:"comma";s:3:"-15";s:6:"period";s:3:"-15";s:1:"v";s:3:"-30";s:1:"w";s:3:"-20";s:1:"x";s:3:"-30";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:7:"eogonek";a:8:{s:5:"comma";s:3:"-15";s:6:"period";s:3:"-15";s:1:"v";s:3:"-30";s:1:"w";s:3:"-20";s:1:"x";s:3:"-30";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:1:"f";a:33:{s:1:"a";s:3:"-30";s:6:"aacute";s:3:"-30";s:6:"abreve";s:3:"-30";s:11:"acircumflex";s:3:"-30";s:9:"adieresis";s:3:"-30";s:6:"agrave";s:3:"-30";s:7:"amacron";s:3:"-30";s:7:"aogonek";s:3:"-30";s:5:"aring";s:3:"-30";s:6:"atilde";s:3:"-30";s:5:"comma";s:3:"-30";s:8:"dotlessi";s:3:"-28";s:1:"e";s:3:"-30";s:6:"eacute";s:3:"-30";s:6:"ecaron";s:3:"-30";s:11:"ecircumflex";s:3:"-30";s:9:"edieresis";s:3:"-30";s:10:"edotaccent";s:3:"-30";s:6:"egrave";s:3:"-30";s:7:"emacron";s:3:"-30";s:7:"eogonek";s:3:"-30";s:1:"o";s:3:"-30";s:6:"oacute";s:3:"-30";s:11:"ocircumflex";s:3:"-30";s:9:"odieresis";s:3:"-30";s:6:"ograve";s:3:"-30";s:13:"ohungarumlaut";s:3:"-30";s:7:"omacron";s:3:"-30";s:6:"oslash";s:3:"-30";s:6:"otilde";s:3:"-30";s:6:"period";s:3:"-30";s:13:"quotedblright";s:2:"60";s:10:"quoteright";s:2:"50";}s:1:"g";a:4:{s:1:"r";s:3:"-10";s:6:"racute";s:3:"-10";s:6:"rcaron";s:3:"-10";s:12:"rcommaaccent";s:3:"-10";}s:6:"gbreve";a:4:{s:1:"r";s:3:"-10";s:6:"racute";s:3:"-10";s:6:"rcaron";s:3:"-10";s:12:"rcommaaccent";s:3:"-10";}s:12:"gcommaaccent";a:4:{s:1:"r";s:3:"-10";s:6:"racute";s:3:"-10";s:6:"rcaron";s:3:"-10";s:12:"rcommaaccent";s:3:"-10";}s:1:"h";a:3:{s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:1:"k";a:18:{s:1:"e";s:3:"-20";s:6:"eacute";s:3:"-20";s:6:"ecaron";s:3:"-20";s:11:"ecircumflex";s:3:"-20";s:9:"edieresis";s:3:"-20";s:10:"edotaccent";s:3:"-20";s:6:"egrave";s:3:"-20";s:7:"emacron";s:3:"-20";s:7:"eogonek";s:3:"-20";s:1:"o";s:3:"-20";s:6:"oacute";s:3:"-20";s:11:"ocircumflex";s:3:"-20";s:9:"odieresis";s:3:"-20";s:6:"ograve";s:3:"-20";s:13:"ohungarumlaut";s:3:"-20";s:7:"omacron";s:3:"-20";s:6:"oslash";s:3:"-20";s:6:"otilde";s:3:"-20";}s:12:"kcommaaccent";a:18:{s:1:"e";s:3:"-20";s:6:"eacute";s:3:"-20";s:6:"ecaron";s:3:"-20";s:11:"ecircumflex";s:3:"-20";s:9:"edieresis";s:3:"-20";s:10:"edotaccent";s:3:"-20";s:6:"egrave";s:3:"-20";s:7:"emacron";s:3:"-20";s:7:"eogonek";s:3:"-20";s:1:"o";s:3:"-20";s:6:"oacute";s:3:"-20";s:11:"ocircumflex";s:3:"-20";s:9:"odieresis";s:3:"-20";s:6:"ograve";s:3:"-20";s:13:"ohungarumlaut";s:3:"-20";s:7:"omacron";s:3:"-20";s:6:"oslash";s:3:"-20";s:6:"otilde";s:3:"-20";}s:1:"m";a:12:{s:1:"u";s:3:"-10";s:6:"uacute";s:3:"-10";s:11:"ucircumflex";s:3:"-10";s:9:"udieresis";s:3:"-10";s:6:"ugrave";s:3:"-10";s:13:"uhungarumlaut";s:3:"-10";s:7:"umacron";s:3:"-10";s:7:"uogonek";s:3:"-10";s:5:"uring";s:3:"-10";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:1:"n";a:13:{s:1:"u";s:3:"-10";s:6:"uacute";s:3:"-10";s:11:"ucircumflex";s:3:"-10";s:9:"udieresis";s:3:"-10";s:6:"ugrave";s:3:"-10";s:13:"uhungarumlaut";s:3:"-10";s:7:"umacron";s:3:"-10";s:7:"uogonek";s:3:"-10";s:5:"uring";s:3:"-10";s:1:"v";s:3:"-20";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:6:"nacute";a:13:{s:1:"u";s:3:"-10";s:6:"uacute";s:3:"-10";s:11:"ucircumflex";s:3:"-10";s:9:"udieresis";s:3:"-10";s:6:"ugrave";s:3:"-10";s:13:"uhungarumlaut";s:3:"-10";s:7:"umacron";s:3:"-10";s:7:"uogonek";s:3:"-10";s:5:"uring";s:3:"-10";s:1:"v";s:3:"-20";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:6:"ncaron";a:13:{s:1:"u";s:3:"-10";s:6:"uacute";s:3:"-10";s:11:"ucircumflex";s:3:"-10";s:9:"udieresis";s:3:"-10";s:6:"ugrave";s:3:"-10";s:13:"uhungarumlaut";s:3:"-10";s:7:"umacron";s:3:"-10";s:7:"uogonek";s:3:"-10";s:5:"uring";s:3:"-10";s:1:"v";s:3:"-20";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:12:"ncommaaccent";a:13:{s:1:"u";s:3:"-10";s:6:"uacute";s:3:"-10";s:11:"ucircumflex";s:3:"-10";s:9:"udieresis";s:3:"-10";s:6:"ugrave";s:3:"-10";s:13:"uhungarumlaut";s:3:"-10";s:7:"umacron";s:3:"-10";s:7:"uogonek";s:3:"-10";s:5:"uring";s:3:"-10";s:1:"v";s:3:"-20";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:6:"ntilde";a:13:{s:1:"u";s:3:"-10";s:6:"uacute";s:3:"-10";s:11:"ucircumflex";s:3:"-10";s:9:"udieresis";s:3:"-10";s:6:"ugrave";s:3:"-10";s:13:"uhungarumlaut";s:3:"-10";s:7:"umacron";s:3:"-10";s:7:"uogonek";s:3:"-10";s:5:"uring";s:3:"-10";s:1:"v";s:3:"-20";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:1:"o";a:8:{s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"x";s:3:"-30";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:6:"oacute";a:8:{s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"x";s:3:"-30";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:11:"ocircumflex";a:8:{s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"x";s:3:"-30";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:9:"odieresis";a:8:{s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"x";s:3:"-30";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:6:"ograve";a:8:{s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"x";s:3:"-30";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:13:"ohungarumlaut";a:8:{s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"x";s:3:"-30";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:7:"omacron";a:8:{s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"x";s:3:"-30";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:6:"oslash";a:94:{s:1:"a";s:3:"-55";s:6:"aacute";s:3:"-55";s:6:"abreve";s:3:"-55";s:11:"acircumflex";s:3:"-55";s:9:"adieresis";s:3:"-55";s:6:"agrave";s:3:"-55";s:7:"amacron";s:3:"-55";s:7:"aogonek";s:3:"-55";s:5:"aring";s:3:"-55";s:6:"atilde";s:3:"-55";s:1:"b";s:3:"-55";s:1:"c";s:3:"-55";s:6:"cacute";s:3:"-55";s:6:"ccaron";s:3:"-55";s:8:"ccedilla";s:3:"-55";s:5:"comma";s:3:"-95";s:1:"d";s:3:"-55";s:6:"dcroat";s:3:"-55";s:1:"e";s:3:"-55";s:6:"eacute";s:3:"-55";s:6:"ecaron";s:3:"-55";s:11:"ecircumflex";s:3:"-55";s:9:"edieresis";s:3:"-55";s:10:"edotaccent";s:3:"-55";s:6:"egrave";s:3:"-55";s:7:"emacron";s:3:"-55";s:7:"eogonek";s:3:"-55";s:1:"f";s:3:"-55";s:1:"g";s:3:"-55";s:6:"gbreve";s:3:"-55";s:12:"gcommaaccent";s:3:"-55";s:1:"h";s:3:"-55";s:1:"i";s:3:"-55";s:6:"iacute";s:3:"-55";s:11:"icircumflex";s:3:"-55";s:9:"idieresis";s:3:"-55";s:6:"igrave";s:3:"-55";s:7:"imacron";s:3:"-55";s:7:"iogonek";s:3:"-55";s:1:"j";s:3:"-55";s:1:"k";s:3:"-55";s:12:"kcommaaccent";s:3:"-55";s:1:"l";s:3:"-55";s:6:"lacute";s:3:"-55";s:12:"lcommaaccent";s:3:"-55";s:6:"lslash";s:3:"-55";s:1:"m";s:3:"-55";s:1:"n";s:3:"-55";s:6:"nacute";s:3:"-55";s:6:"ncaron";s:3:"-55";s:12:"ncommaaccent";s:3:"-55";s:6:"ntilde";s:3:"-55";s:1:"o";s:3:"-55";s:6:"oacute";s:3:"-55";s:11:"ocircumflex";s:3:"-55";s:9:"odieresis";s:3:"-55";s:6:"ograve";s:3:"-55";s:13:"ohungarumlaut";s:3:"-55";s:7:"omacron";s:3:"-55";s:6:"oslash";s:3:"-55";s:6:"otilde";s:3:"-55";s:1:"p";s:3:"-55";s:6:"period";s:3:"-95";s:1:"q";s:3:"-55";s:1:"r";s:3:"-55";s:6:"racute";s:3:"-55";s:6:"rcaron";s:3:"-55";s:12:"rcommaaccent";s:3:"-55";s:1:"s";s:3:"-55";s:6:"sacute";s:3:"-55";s:6:"scaron";s:3:"-55";s:8:"scedilla";s:3:"-55";s:12:"scommaaccent";s:3:"-55";s:1:"t";s:3:"-55";s:12:"tcommaaccent";s:3:"-55";s:1:"u";s:3:"-55";s:6:"uacute";s:3:"-55";s:11:"ucircumflex";s:3:"-55";s:9:"udieresis";s:3:"-55";s:6:"ugrave";s:3:"-55";s:13:"uhungarumlaut";s:3:"-55";s:7:"umacron";s:3:"-55";s:7:"uogonek";s:3:"-55";s:5:"uring";s:3:"-55";s:1:"v";s:3:"-70";s:1:"w";s:3:"-70";s:1:"x";s:3:"-85";s:1:"y";s:3:"-70";s:6:"yacute";s:3:"-70";s:9:"ydieresis";s:3:"-70";s:1:"z";s:3:"-55";s:6:"zacute";s:3:"-55";s:6:"zcaron";s:3:"-55";s:10:"zdotaccent";s:3:"-55";}s:6:"otilde";a:8:{s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"x";s:3:"-30";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:1:"p";a:5:{s:5:"comma";s:3:"-35";s:6:"period";s:3:"-35";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:6:"period";a:3:{s:13:"quotedblright";s:4:"-100";s:10:"quoteright";s:4:"-100";s:5:"space";s:3:"-60";}s:13:"quotedblright";a:1:{s:5:"space";s:3:"-40";}s:9:"quoteleft";a:1:{s:9:"quoteleft";s:3:"-57";}s:10:"quoteright";a:13:{s:1:"d";s:3:"-50";s:6:"dcroat";s:3:"-50";s:10:"quoteright";s:3:"-57";s:1:"r";s:3:"-50";s:6:"racute";s:3:"-50";s:6:"rcaron";s:3:"-50";s:12:"rcommaaccent";s:3:"-50";s:1:"s";s:3:"-50";s:6:"sacute";s:3:"-50";s:6:"scaron";s:3:"-50";s:8:"scedilla";s:3:"-50";s:12:"scommaaccent";s:3:"-50";s:5:"space";s:3:"-70";}s:1:"r";a:49:{s:1:"a";s:3:"-10";s:6:"aacute";s:3:"-10";s:6:"abreve";s:3:"-10";s:11:"acircumflex";s:3:"-10";s:9:"adieresis";s:3:"-10";s:6:"agrave";s:3:"-10";s:7:"amacron";s:3:"-10";s:7:"aogonek";s:3:"-10";s:5:"aring";s:3:"-10";s:6:"atilde";s:3:"-10";s:5:"colon";s:2:"30";s:5:"comma";s:3:"-50";s:1:"i";s:2:"15";s:6:"iacute";s:2:"15";s:11:"icircumflex";s:2:"15";s:9:"idieresis";s:2:"15";s:6:"igrave";s:2:"15";s:7:"imacron";s:2:"15";s:7:"iogonek";s:2:"15";s:1:"k";s:2:"15";s:12:"kcommaaccent";s:2:"15";s:1:"l";s:2:"15";s:6:"lacute";s:2:"15";s:12:"lcommaaccent";s:2:"15";s:6:"lslash";s:2:"15";s:1:"m";s:2:"25";s:1:"n";s:2:"25";s:6:"nacute";s:2:"25";s:6:"ncaron";s:2:"25";s:12:"ncommaaccent";s:2:"25";s:6:"ntilde";s:2:"25";s:1:"p";s:2:"30";s:6:"period";s:3:"-50";s:9:"semicolon";s:2:"30";s:1:"t";s:2:"40";s:12:"tcommaaccent";s:2:"40";s:1:"u";s:2:"15";s:6:"uacute";s:2:"15";s:11:"ucircumflex";s:2:"15";s:9:"udieresis";s:2:"15";s:6:"ugrave";s:2:"15";s:13:"uhungarumlaut";s:2:"15";s:7:"umacron";s:2:"15";s:7:"uogonek";s:2:"15";s:5:"uring";s:2:"15";s:1:"v";s:2:"30";s:1:"y";s:2:"30";s:6:"yacute";s:2:"30";s:9:"ydieresis";s:2:"30";}s:6:"racute";a:49:{s:1:"a";s:3:"-10";s:6:"aacute";s:3:"-10";s:6:"abreve";s:3:"-10";s:11:"acircumflex";s:3:"-10";s:9:"adieresis";s:3:"-10";s:6:"agrave";s:3:"-10";s:7:"amacron";s:3:"-10";s:7:"aogonek";s:3:"-10";s:5:"aring";s:3:"-10";s:6:"atilde";s:3:"-10";s:5:"colon";s:2:"30";s:5:"comma";s:3:"-50";s:1:"i";s:2:"15";s:6:"iacute";s:2:"15";s:11:"icircumflex";s:2:"15";s:9:"idieresis";s:2:"15";s:6:"igrave";s:2:"15";s:7:"imacron";s:2:"15";s:7:"iogonek";s:2:"15";s:1:"k";s:2:"15";s:12:"kcommaaccent";s:2:"15";s:1:"l";s:2:"15";s:6:"lacute";s:2:"15";s:12:"lcommaaccent";s:2:"15";s:6:"lslash";s:2:"15";s:1:"m";s:2:"25";s:1:"n";s:2:"25";s:6:"nacute";s:2:"25";s:6:"ncaron";s:2:"25";s:12:"ncommaaccent";s:2:"25";s:6:"ntilde";s:2:"25";s:1:"p";s:2:"30";s:6:"period";s:3:"-50";s:9:"semicolon";s:2:"30";s:1:"t";s:2:"40";s:12:"tcommaaccent";s:2:"40";s:1:"u";s:2:"15";s:6:"uacute";s:2:"15";s:11:"ucircumflex";s:2:"15";s:9:"udieresis";s:2:"15";s:6:"ugrave";s:2:"15";s:13:"uhungarumlaut";s:2:"15";s:7:"umacron";s:2:"15";s:7:"uogonek";s:2:"15";s:5:"uring";s:2:"15";s:1:"v";s:2:"30";s:1:"y";s:2:"30";s:6:"yacute";s:2:"30";s:9:"ydieresis";s:2:"30";}s:6:"rcaron";a:49:{s:1:"a";s:3:"-10";s:6:"aacute";s:3:"-10";s:6:"abreve";s:3:"-10";s:11:"acircumflex";s:3:"-10";s:9:"adieresis";s:3:"-10";s:6:"agrave";s:3:"-10";s:7:"amacron";s:3:"-10";s:7:"aogonek";s:3:"-10";s:5:"aring";s:3:"-10";s:6:"atilde";s:3:"-10";s:5:"colon";s:2:"30";s:5:"comma";s:3:"-50";s:1:"i";s:2:"15";s:6:"iacute";s:2:"15";s:11:"icircumflex";s:2:"15";s:9:"idieresis";s:2:"15";s:6:"igrave";s:2:"15";s:7:"imacron";s:2:"15";s:7:"iogonek";s:2:"15";s:1:"k";s:2:"15";s:12:"kcommaaccent";s:2:"15";s:1:"l";s:2:"15";s:6:"lacute";s:2:"15";s:12:"lcommaaccent";s:2:"15";s:6:"lslash";s:2:"15";s:1:"m";s:2:"25";s:1:"n";s:2:"25";s:6:"nacute";s:2:"25";s:6:"ncaron";s:2:"25";s:12:"ncommaaccent";s:2:"25";s:6:"ntilde";s:2:"25";s:1:"p";s:2:"30";s:6:"period";s:3:"-50";s:9:"semicolon";s:2:"30";s:1:"t";s:2:"40";s:12:"tcommaaccent";s:2:"40";s:1:"u";s:2:"15";s:6:"uacute";s:2:"15";s:11:"ucircumflex";s:2:"15";s:9:"udieresis";s:2:"15";s:6:"ugrave";s:2:"15";s:13:"uhungarumlaut";s:2:"15";s:7:"umacron";s:2:"15";s:7:"uogonek";s:2:"15";s:5:"uring";s:2:"15";s:1:"v";s:2:"30";s:1:"y";s:2:"30";s:6:"yacute";s:2:"30";s:9:"ydieresis";s:2:"30";}s:12:"rcommaaccent";a:49:{s:1:"a";s:3:"-10";s:6:"aacute";s:3:"-10";s:6:"abreve";s:3:"-10";s:11:"acircumflex";s:3:"-10";s:9:"adieresis";s:3:"-10";s:6:"agrave";s:3:"-10";s:7:"amacron";s:3:"-10";s:7:"aogonek";s:3:"-10";s:5:"aring";s:3:"-10";s:6:"atilde";s:3:"-10";s:5:"colon";s:2:"30";s:5:"comma";s:3:"-50";s:1:"i";s:2:"15";s:6:"iacute";s:2:"15";s:11:"icircumflex";s:2:"15";s:9:"idieresis";s:2:"15";s:6:"igrave";s:2:"15";s:7:"imacron";s:2:"15";s:7:"iogonek";s:2:"15";s:1:"k";s:2:"15";s:12:"kcommaaccent";s:2:"15";s:1:"l";s:2:"15";s:6:"lacute";s:2:"15";s:12:"lcommaaccent";s:2:"15";s:6:"lslash";s:2:"15";s:1:"m";s:2:"25";s:1:"n";s:2:"25";s:6:"nacute";s:2:"25";s:6:"ncaron";s:2:"25";s:12:"ncommaaccent";s:2:"25";s:6:"ntilde";s:2:"25";s:1:"p";s:2:"30";s:6:"period";s:3:"-50";s:9:"semicolon";s:2:"30";s:1:"t";s:2:"40";s:12:"tcommaaccent";s:2:"40";s:1:"u";s:2:"15";s:6:"uacute";s:2:"15";s:11:"ucircumflex";s:2:"15";s:9:"udieresis";s:2:"15";s:6:"ugrave";s:2:"15";s:13:"uhungarumlaut";s:2:"15";s:7:"umacron";s:2:"15";s:7:"uogonek";s:2:"15";s:5:"uring";s:2:"15";s:1:"v";s:2:"30";s:1:"y";s:2:"30";s:6:"yacute";s:2:"30";s:9:"ydieresis";s:2:"30";}s:1:"s";a:3:{s:5:"comma";s:3:"-15";s:6:"period";s:3:"-15";s:1:"w";s:3:"-30";}s:6:"sacute";a:3:{s:5:"comma";s:3:"-15";s:6:"period";s:3:"-15";s:1:"w";s:3:"-30";}s:6:"scaron";a:3:{s:5:"comma";s:3:"-15";s:6:"period";s:3:"-15";s:1:"w";s:3:"-30";}s:8:"scedilla";a:3:{s:5:"comma";s:3:"-15";s:6:"period";s:3:"-15";s:1:"w";s:3:"-30";}s:12:"scommaaccent";a:3:{s:5:"comma";s:3:"-15";s:6:"period";s:3:"-15";s:1:"w";s:3:"-30";}s:9:"semicolon";a:1:{s:5:"space";s:3:"-50";}s:5:"space";a:10:{s:1:"T";s:3:"-50";s:6:"Tcaron";s:3:"-50";s:12:"Tcommaaccent";s:3:"-50";s:1:"V";s:3:"-50";s:1:"W";s:3:"-40";s:1:"Y";s:3:"-90";s:6:"Yacute";s:3:"-90";s:9:"Ydieresis";s:3:"-90";s:12:"quotedblleft";s:3:"-30";s:9:"quoteleft";s:3:"-60";}s:1:"v";a:30:{s:1:"a";s:3:"-25";s:6:"aacute";s:3:"-25";s:6:"abreve";s:3:"-25";s:11:"acircumflex";s:3:"-25";s:9:"adieresis";s:3:"-25";s:6:"agrave";s:3:"-25";s:7:"amacron";s:3:"-25";s:7:"aogonek";s:3:"-25";s:5:"aring";s:3:"-25";s:6:"atilde";s:3:"-25";s:5:"comma";s:3:"-80";s:1:"e";s:3:"-25";s:6:"eacute";s:3:"-25";s:6:"ecaron";s:3:"-25";s:11:"ecircumflex";s:3:"-25";s:9:"edieresis";s:3:"-25";s:10:"edotaccent";s:3:"-25";s:6:"egrave";s:3:"-25";s:7:"emacron";s:3:"-25";s:7:"eogonek";s:3:"-25";s:1:"o";s:3:"-25";s:6:"oacute";s:3:"-25";s:11:"ocircumflex";s:3:"-25";s:9:"odieresis";s:3:"-25";s:6:"ograve";s:3:"-25";s:13:"ohungarumlaut";s:3:"-25";s:7:"omacron";s:3:"-25";s:6:"oslash";s:3:"-25";s:6:"otilde";s:3:"-25";s:6:"period";s:3:"-80";}s:1:"w";a:30:{s:1:"a";s:3:"-15";s:6:"aacute";s:3:"-15";s:6:"abreve";s:3:"-15";s:11:"acircumflex";s:3:"-15";s:9:"adieresis";s:3:"-15";s:6:"agrave";s:3:"-15";s:7:"amacron";s:3:"-15";s:7:"aogonek";s:3:"-15";s:5:"aring";s:3:"-15";s:6:"atilde";s:3:"-15";s:5:"comma";s:3:"-60";s:1:"e";s:3:"-10";s:6:"eacute";s:3:"-10";s:6:"ecaron";s:3:"-10";s:11:"ecircumflex";s:3:"-10";s:9:"edieresis";s:3:"-10";s:10:"edotaccent";s:3:"-10";s:6:"egrave";s:3:"-10";s:7:"emacron";s:3:"-10";s:7:"eogonek";s:3:"-10";s:1:"o";s:3:"-10";s:6:"oacute";s:3:"-10";s:11:"ocircumflex";s:3:"-10";s:9:"odieresis";s:3:"-10";s:6:"ograve";s:3:"-10";s:13:"ohungarumlaut";s:3:"-10";s:7:"omacron";s:3:"-10";s:6:"oslash";s:3:"-10";s:6:"otilde";s:3:"-10";s:6:"period";s:3:"-60";}s:1:"x";a:9:{s:1:"e";s:3:"-30";s:6:"eacute";s:3:"-30";s:6:"ecaron";s:3:"-30";s:11:"ecircumflex";s:3:"-30";s:9:"edieresis";s:3:"-30";s:10:"edotaccent";s:3:"-30";s:6:"egrave";s:3:"-30";s:7:"emacron";s:3:"-30";s:7:"eogonek";s:3:"-30";}s:1:"y";a:30:{s:1:"a";s:3:"-20";s:6:"aacute";s:3:"-20";s:6:"abreve";s:3:"-20";s:11:"acircumflex";s:3:"-20";s:9:"adieresis";s:3:"-20";s:6:"agrave";s:3:"-20";s:7:"amacron";s:3:"-20";s:7:"aogonek";s:3:"-20";s:5:"aring";s:3:"-20";s:6:"atilde";s:3:"-20";s:5:"comma";s:4:"-100";s:1:"e";s:3:"-20";s:6:"eacute";s:3:"-20";s:6:"ecaron";s:3:"-20";s:11:"ecircumflex";s:3:"-20";s:9:"edieresis";s:3:"-20";s:10:"edotaccent";s:3:"-20";s:6:"egrave";s:3:"-20";s:7:"emacron";s:3:"-20";s:7:"eogonek";s:3:"-20";s:1:"o";s:3:"-20";s:6:"oacute";s:3:"-20";s:11:"ocircumflex";s:3:"-20";s:9:"odieresis";s:3:"-20";s:6:"ograve";s:3:"-20";s:13:"ohungarumlaut";s:3:"-20";s:7:"omacron";s:3:"-20";s:6:"oslash";s:3:"-20";s:6:"otilde";s:3:"-20";s:6:"period";s:4:"-100";}s:6:"yacute";a:30:{s:1:"a";s:3:"-20";s:6:"aacute";s:3:"-20";s:6:"abreve";s:3:"-20";s:11:"acircumflex";s:3:"-20";s:9:"adieresis";s:3:"-20";s:6:"agrave";s:3:"-20";s:7:"amacron";s:3:"-20";s:7:"aogonek";s:3:"-20";s:5:"aring";s:3:"-20";s:6:"atilde";s:3:"-20";s:5:"comma";s:4:"-100";s:1:"e";s:3:"-20";s:6:"eacute";s:3:"-20";s:6:"ecaron";s:3:"-20";s:11:"ecircumflex";s:3:"-20";s:9:"edieresis";s:3:"-20";s:10:"edotaccent";s:3:"-20";s:6:"egrave";s:3:"-20";s:7:"emacron";s:3:"-20";s:7:"eogonek";s:3:"-20";s:1:"o";s:3:"-20";s:6:"oacute";s:3:"-20";s:11:"ocircumflex";s:3:"-20";s:9:"odieresis";s:3:"-20";s:6:"ograve";s:3:"-20";s:13:"ohungarumlaut";s:3:"-20";s:7:"omacron";s:3:"-20";s:6:"oslash";s:3:"-20";s:6:"otilde";s:3:"-20";s:6:"period";s:4:"-100";}s:9:"ydieresis";a:30:{s:1:"a";s:3:"-20";s:6:"aacute";s:3:"-20";s:6:"abreve";s:3:"-20";s:11:"acircumflex";s:3:"-20";s:9:"adieresis";s:3:"-20";s:6:"agrave";s:3:"-20";s:7:"amacron";s:3:"-20";s:7:"aogonek";s:3:"-20";s:5:"aring";s:3:"-20";s:6:"atilde";s:3:"-20";s:5:"comma";s:4:"-100";s:1:"e";s:3:"-20";s:6:"eacute";s:3:"-20";s:6:"ecaron";s:3:"-20";s:11:"ecircumflex";s:3:"-20";s:9:"edieresis";s:3:"-20";s:10:"edotaccent";s:3:"-20";s:6:"egrave";s:3:"-20";s:7:"emacron";s:3:"-20";s:7:"eogonek";s:3:"-20";s:1:"o";s:3:"-20";s:6:"oacute";s:3:"-20";s:11:"ocircumflex";s:3:"-20";s:9:"odieresis";s:3:"-20";s:6:"ograve";s:3:"-20";s:13:"ohungarumlaut";s:3:"-20";s:7:"omacron";s:3:"-20";s:6:"oslash";s:3:"-20";s:6:"otilde";s:3:"-20";s:6:"period";s:4:"-100";}s:1:"z";a:18:{s:1:"e";s:3:"-15";s:6:"eacute";s:3:"-15";s:6:"ecaron";s:3:"-15";s:11:"ecircumflex";s:3:"-15";s:9:"edieresis";s:3:"-15";s:10:"edotaccent";s:3:"-15";s:6:"egrave";s:3:"-15";s:7:"emacron";s:3:"-15";s:7:"eogonek";s:3:"-15";s:1:"o";s:3:"-15";s:6:"oacute";s:3:"-15";s:11:"ocircumflex";s:3:"-15";s:9:"odieresis";s:3:"-15";s:6:"ograve";s:3:"-15";s:13:"ohungarumlaut";s:3:"-15";s:7:"omacron";s:3:"-15";s:6:"oslash";s:3:"-15";s:6:"otilde";s:3:"-15";}s:6:"zacute";a:18:{s:1:"e";s:3:"-15";s:6:"eacute";s:3:"-15";s:6:"ecaron";s:3:"-15";s:11:"ecircumflex";s:3:"-15";s:9:"edieresis";s:3:"-15";s:10:"edotaccent";s:3:"-15";s:6:"egrave";s:3:"-15";s:7:"emacron";s:3:"-15";s:7:"eogonek";s:3:"-15";s:1:"o";s:3:"-15";s:6:"oacute";s:3:"-15";s:11:"ocircumflex";s:3:"-15";s:9:"odieresis";s:3:"-15";s:6:"ograve";s:3:"-15";s:13:"ohungarumlaut";s:3:"-15";s:7:"omacron";s:3:"-15";s:6:"oslash";s:3:"-15";s:6:"otilde";s:3:"-15";}s:6:"zcaron";a:18:{s:1:"e";s:3:"-15";s:6:"eacute";s:3:"-15";s:6:"ecaron";s:3:"-15";s:11:"ecircumflex";s:3:"-15";s:9:"edieresis";s:3:"-15";s:10:"edotaccent";s:3:"-15";s:6:"egrave";s:3:"-15";s:7:"emacron";s:3:"-15";s:7:"eogonek";s:3:"-15";s:1:"o";s:3:"-15";s:6:"oacute";s:3:"-15";s:11:"ocircumflex";s:3:"-15";s:9:"odieresis";s:3:"-15";s:6:"ograve";s:3:"-15";s:13:"ohungarumlaut";s:3:"-15";s:7:"omacron";s:3:"-15";s:6:"oslash";s:3:"-15";s:6:"otilde";s:3:"-15";}s:10:"zdotaccent";a:18:{s:1:"e";s:3:"-15";s:6:"eacute";s:3:"-15";s:6:"ecaron";s:3:"-15";s:11:"ecircumflex";s:3:"-15";s:9:"edieresis";s:3:"-15";s:10:"edotaccent";s:3:"-15";s:6:"egrave";s:3:"-15";s:7:"emacron";s:3:"-15";s:7:"eogonek";s:3:"-15";s:1:"o";s:3:"-15";s:6:"oacute";s:3:"-15";s:11:"ocircumflex";s:3:"-15";s:9:"odieresis";s:3:"-15";s:6:"ograve";s:3:"-15";s:13:"ohungarumlaut";s:3:"-15";s:7:"omacron";s:3:"-15";s:6:"oslash";s:3:"-15";s:6:"otilde";s:3:"-15";}}s:9:"_version_";i:1;}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/php_Helvetica.afm b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/php_Helvetica.afm new file mode 100755 index 00000000..f8c7f2ba --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/php_Helvetica.afm @@ -0,0 +1 @@ +a:22:{s:8:"FontName";s:9:"Helvetica";s:8:"FullName";s:9:"Helvetica";s:10:"FamilyName";s:9:"Helvetica";s:6:"Weight";s:6:"Medium";s:11:"ItalicAngle";s:1:"0";s:12:"IsFixedPitch";s:5:"false";s:12:"CharacterSet";s:13:"ExtendedRoman";s:8:"FontBBox";a:4:{i:0;s:4:"-166";i:1;s:4:"-225";i:2;s:4:"1000";i:3;s:3:"931";}s:17:"UnderlinePosition";s:4:"-100";s:18:"UnderlineThickness";s:2:"50";s:7:"Version";s:7:"002.000";s:14:"EncodingScheme";s:21:"AdobeStandardEncoding";s:9:"CapHeight";s:3:"718";s:7:"XHeight";s:3:"523";s:8:"Ascender";s:3:"718";s:9:"Descender";s:4:"-207";s:5:"StdHW";s:2:"76";s:5:"StdVW";s:2:"88";s:16:"StartCharMetrics";s:3:"315";s:1:"C";a:464:{i:32;a:4:{s:1:"C";s:2:"32";s:2:"WX";s:3:"278";s:1:"N";s:5:"space";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:1:"0";i:2;s:1:"0";i:3;s:1:"0";}}s:5:"space";a:4:{s:1:"C";s:2:"32";s:2:"WX";s:3:"278";s:1:"N";s:5:"space";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:1:"0";i:2;s:1:"0";i:3;s:1:"0";}}i:33;a:4:{s:1:"C";s:2:"33";s:2:"WX";s:3:"278";s:1:"N";s:6:"exclam";s:1:"B";a:4:{i:0;s:2:"90";i:1;s:1:"0";i:2;s:3:"187";i:3;s:3:"718";}}s:6:"exclam";a:4:{s:1:"C";s:2:"33";s:2:"WX";s:3:"278";s:1:"N";s:6:"exclam";s:1:"B";a:4:{i:0;s:2:"90";i:1;s:1:"0";i:2;s:3:"187";i:3;s:3:"718";}}i:34;a:4:{s:1:"C";s:2:"34";s:2:"WX";s:3:"355";s:1:"N";s:8:"quotedbl";s:1:"B";a:4:{i:0;s:2:"70";i:1;s:3:"463";i:2;s:3:"285";i:3;s:3:"718";}}s:8:"quotedbl";a:4:{s:1:"C";s:2:"34";s:2:"WX";s:3:"355";s:1:"N";s:8:"quotedbl";s:1:"B";a:4:{i:0;s:2:"70";i:1;s:3:"463";i:2;s:3:"285";i:3;s:3:"718";}}i:35;a:4:{s:1:"C";s:2:"35";s:2:"WX";s:3:"556";s:1:"N";s:10:"numbersign";s:1:"B";a:4:{i:0;s:2:"28";i:1;s:1:"0";i:2;s:3:"529";i:3;s:3:"688";}}s:10:"numbersign";a:4:{s:1:"C";s:2:"35";s:2:"WX";s:3:"556";s:1:"N";s:10:"numbersign";s:1:"B";a:4:{i:0;s:2:"28";i:1;s:1:"0";i:2;s:3:"529";i:3;s:3:"688";}}i:36;a:4:{s:1:"C";s:2:"36";s:2:"WX";s:3:"556";s:1:"N";s:6:"dollar";s:1:"B";a:4:{i:0;s:2:"32";i:1;s:4:"-115";i:2;s:3:"520";i:3;s:3:"775";}}s:6:"dollar";a:4:{s:1:"C";s:2:"36";s:2:"WX";s:3:"556";s:1:"N";s:6:"dollar";s:1:"B";a:4:{i:0;s:2:"32";i:1;s:4:"-115";i:2;s:3:"520";i:3;s:3:"775";}}i:37;a:4:{s:1:"C";s:2:"37";s:2:"WX";s:3:"889";s:1:"N";s:7:"percent";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:3:"-19";i:2;s:3:"850";i:3;s:3:"703";}}s:7:"percent";a:4:{s:1:"C";s:2:"37";s:2:"WX";s:3:"889";s:1:"N";s:7:"percent";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:3:"-19";i:2;s:3:"850";i:3;s:3:"703";}}i:38;a:4:{s:1:"C";s:2:"38";s:2:"WX";s:3:"667";s:1:"N";s:9:"ampersand";s:1:"B";a:4:{i:0;s:2:"44";i:1;s:3:"-15";i:2;s:3:"645";i:3;s:3:"718";}}s:9:"ampersand";a:4:{s:1:"C";s:2:"38";s:2:"WX";s:3:"667";s:1:"N";s:9:"ampersand";s:1:"B";a:4:{i:0;s:2:"44";i:1;s:3:"-15";i:2;s:3:"645";i:3;s:3:"718";}}i:39;a:4:{s:1:"C";s:2:"39";s:2:"WX";s:3:"222";s:1:"N";s:10:"quoteright";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:3:"463";i:2;s:3:"157";i:3;s:3:"718";}}s:10:"quoteright";a:4:{s:1:"C";s:2:"39";s:2:"WX";s:3:"222";s:1:"N";s:10:"quoteright";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:3:"463";i:2;s:3:"157";i:3;s:3:"718";}}i:40;a:4:{s:1:"C";s:2:"40";s:2:"WX";s:3:"333";s:1:"N";s:9:"parenleft";s:1:"B";a:4:{i:0;s:2:"68";i:1;s:4:"-207";i:2;s:3:"299";i:3;s:3:"733";}}s:9:"parenleft";a:4:{s:1:"C";s:2:"40";s:2:"WX";s:3:"333";s:1:"N";s:9:"parenleft";s:1:"B";a:4:{i:0;s:2:"68";i:1;s:4:"-207";i:2;s:3:"299";i:3;s:3:"733";}}i:41;a:4:{s:1:"C";s:2:"41";s:2:"WX";s:3:"333";s:1:"N";s:10:"parenright";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:4:"-207";i:2;s:3:"265";i:3;s:3:"733";}}s:10:"parenright";a:4:{s:1:"C";s:2:"41";s:2:"WX";s:3:"333";s:1:"N";s:10:"parenright";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:4:"-207";i:2;s:3:"265";i:3;s:3:"733";}}i:42;a:4:{s:1:"C";s:2:"42";s:2:"WX";s:3:"389";s:1:"N";s:8:"asterisk";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:3:"431";i:2;s:3:"349";i:3;s:3:"718";}}s:8:"asterisk";a:4:{s:1:"C";s:2:"42";s:2:"WX";s:3:"389";s:1:"N";s:8:"asterisk";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:3:"431";i:2;s:3:"349";i:3;s:3:"718";}}i:43;a:4:{s:1:"C";s:2:"43";s:2:"WX";s:3:"584";s:1:"N";s:4:"plus";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:1:"0";i:2;s:3:"545";i:3;s:3:"505";}}s:4:"plus";a:4:{s:1:"C";s:2:"43";s:2:"WX";s:3:"584";s:1:"N";s:4:"plus";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:1:"0";i:2;s:3:"545";i:3;s:3:"505";}}i:44;a:4:{s:1:"C";s:2:"44";s:2:"WX";s:3:"278";s:1:"N";s:5:"comma";s:1:"B";a:4:{i:0;s:2:"87";i:1;s:4:"-147";i:2;s:3:"191";i:3;s:3:"106";}}s:5:"comma";a:4:{s:1:"C";s:2:"44";s:2:"WX";s:3:"278";s:1:"N";s:5:"comma";s:1:"B";a:4:{i:0;s:2:"87";i:1;s:4:"-147";i:2;s:3:"191";i:3;s:3:"106";}}i:45;a:4:{s:1:"C";s:2:"45";s:2:"WX";s:3:"333";s:1:"N";s:6:"hyphen";s:1:"B";a:4:{i:0;s:2:"44";i:1;s:3:"232";i:2;s:3:"289";i:3;s:3:"322";}}s:6:"hyphen";a:4:{s:1:"C";s:2:"45";s:2:"WX";s:3:"333";s:1:"N";s:6:"hyphen";s:1:"B";a:4:{i:0;s:2:"44";i:1;s:3:"232";i:2;s:3:"289";i:3;s:3:"322";}}i:46;a:4:{s:1:"C";s:2:"46";s:2:"WX";s:3:"278";s:1:"N";s:6:"period";s:1:"B";a:4:{i:0;s:2:"87";i:1;s:1:"0";i:2;s:3:"191";i:3;s:3:"106";}}s:6:"period";a:4:{s:1:"C";s:2:"46";s:2:"WX";s:3:"278";s:1:"N";s:6:"period";s:1:"B";a:4:{i:0;s:2:"87";i:1;s:1:"0";i:2;s:3:"191";i:3;s:3:"106";}}i:47;a:4:{s:1:"C";s:2:"47";s:2:"WX";s:3:"278";s:1:"N";s:5:"slash";s:1:"B";a:4:{i:0;s:3:"-17";i:1;s:3:"-19";i:2;s:3:"295";i:3;s:3:"737";}}s:5:"slash";a:4:{s:1:"C";s:2:"47";s:2:"WX";s:3:"278";s:1:"N";s:5:"slash";s:1:"B";a:4:{i:0;s:3:"-17";i:1;s:3:"-19";i:2;s:3:"295";i:3;s:3:"737";}}i:48;a:4:{s:1:"C";s:2:"48";s:2:"WX";s:3:"556";s:1:"N";s:4:"zero";s:1:"B";a:4:{i:0;s:2:"37";i:1;s:3:"-19";i:2;s:3:"519";i:3;s:3:"703";}}s:4:"zero";a:4:{s:1:"C";s:2:"48";s:2:"WX";s:3:"556";s:1:"N";s:4:"zero";s:1:"B";a:4:{i:0;s:2:"37";i:1;s:3:"-19";i:2;s:3:"519";i:3;s:3:"703";}}i:49;a:4:{s:1:"C";s:2:"49";s:2:"WX";s:3:"556";s:1:"N";s:3:"one";s:1:"B";a:4:{i:0;s:3:"101";i:1;s:1:"0";i:2;s:3:"359";i:3;s:3:"703";}}s:3:"one";a:4:{s:1:"C";s:2:"49";s:2:"WX";s:3:"556";s:1:"N";s:3:"one";s:1:"B";a:4:{i:0;s:3:"101";i:1;s:1:"0";i:2;s:3:"359";i:3;s:3:"703";}}i:50;a:4:{s:1:"C";s:2:"50";s:2:"WX";s:3:"556";s:1:"N";s:3:"two";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:1:"0";i:2;s:3:"507";i:3;s:3:"703";}}s:3:"two";a:4:{s:1:"C";s:2:"50";s:2:"WX";s:3:"556";s:1:"N";s:3:"two";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:1:"0";i:2;s:3:"507";i:3;s:3:"703";}}i:51;a:4:{s:1:"C";s:2:"51";s:2:"WX";s:3:"556";s:1:"N";s:5:"three";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-19";i:2;s:3:"522";i:3;s:3:"703";}}s:5:"three";a:4:{s:1:"C";s:2:"51";s:2:"WX";s:3:"556";s:1:"N";s:5:"three";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-19";i:2;s:3:"522";i:3;s:3:"703";}}i:52;a:4:{s:1:"C";s:2:"52";s:2:"WX";s:3:"556";s:1:"N";s:4:"four";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:1:"0";i:2;s:3:"523";i:3;s:3:"703";}}s:4:"four";a:4:{s:1:"C";s:2:"52";s:2:"WX";s:3:"556";s:1:"N";s:4:"four";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:1:"0";i:2;s:3:"523";i:3;s:3:"703";}}i:53;a:4:{s:1:"C";s:2:"53";s:2:"WX";s:3:"556";s:1:"N";s:4:"five";s:1:"B";a:4:{i:0;s:2:"32";i:1;s:3:"-19";i:2;s:3:"514";i:3;s:3:"688";}}s:4:"five";a:4:{s:1:"C";s:2:"53";s:2:"WX";s:3:"556";s:1:"N";s:4:"five";s:1:"B";a:4:{i:0;s:2:"32";i:1;s:3:"-19";i:2;s:3:"514";i:3;s:3:"688";}}i:54;a:4:{s:1:"C";s:2:"54";s:2:"WX";s:3:"556";s:1:"N";s:3:"six";s:1:"B";a:4:{i:0;s:2:"38";i:1;s:3:"-19";i:2;s:3:"518";i:3;s:3:"703";}}s:3:"six";a:4:{s:1:"C";s:2:"54";s:2:"WX";s:3:"556";s:1:"N";s:3:"six";s:1:"B";a:4:{i:0;s:2:"38";i:1;s:3:"-19";i:2;s:3:"518";i:3;s:3:"703";}}i:55;a:4:{s:1:"C";s:2:"55";s:2:"WX";s:3:"556";s:1:"N";s:5:"seven";s:1:"B";a:4:{i:0;s:2:"37";i:1;s:1:"0";i:2;s:3:"523";i:3;s:3:"688";}}s:5:"seven";a:4:{s:1:"C";s:2:"55";s:2:"WX";s:3:"556";s:1:"N";s:5:"seven";s:1:"B";a:4:{i:0;s:2:"37";i:1;s:1:"0";i:2;s:3:"523";i:3;s:3:"688";}}i:56;a:4:{s:1:"C";s:2:"56";s:2:"WX";s:3:"556";s:1:"N";s:5:"eight";s:1:"B";a:4:{i:0;s:2:"38";i:1;s:3:"-19";i:2;s:3:"517";i:3;s:3:"703";}}s:5:"eight";a:4:{s:1:"C";s:2:"56";s:2:"WX";s:3:"556";s:1:"N";s:5:"eight";s:1:"B";a:4:{i:0;s:2:"38";i:1;s:3:"-19";i:2;s:3:"517";i:3;s:3:"703";}}i:57;a:4:{s:1:"C";s:2:"57";s:2:"WX";s:3:"556";s:1:"N";s:4:"nine";s:1:"B";a:4:{i:0;s:2:"42";i:1;s:3:"-19";i:2;s:3:"514";i:3;s:3:"703";}}s:4:"nine";a:4:{s:1:"C";s:2:"57";s:2:"WX";s:3:"556";s:1:"N";s:4:"nine";s:1:"B";a:4:{i:0;s:2:"42";i:1;s:3:"-19";i:2;s:3:"514";i:3;s:3:"703";}}i:58;a:4:{s:1:"C";s:2:"58";s:2:"WX";s:3:"278";s:1:"N";s:5:"colon";s:1:"B";a:4:{i:0;s:2:"87";i:1;s:1:"0";i:2;s:3:"191";i:3;s:3:"516";}}s:5:"colon";a:4:{s:1:"C";s:2:"58";s:2:"WX";s:3:"278";s:1:"N";s:5:"colon";s:1:"B";a:4:{i:0;s:2:"87";i:1;s:1:"0";i:2;s:3:"191";i:3;s:3:"516";}}i:59;a:4:{s:1:"C";s:2:"59";s:2:"WX";s:3:"278";s:1:"N";s:9:"semicolon";s:1:"B";a:4:{i:0;s:2:"87";i:1;s:4:"-147";i:2;s:3:"191";i:3;s:3:"516";}}s:9:"semicolon";a:4:{s:1:"C";s:2:"59";s:2:"WX";s:3:"278";s:1:"N";s:9:"semicolon";s:1:"B";a:4:{i:0;s:2:"87";i:1;s:4:"-147";i:2;s:3:"191";i:3;s:3:"516";}}i:60;a:4:{s:1:"C";s:2:"60";s:2:"WX";s:3:"584";s:1:"N";s:4:"less";s:1:"B";a:4:{i:0;s:2:"48";i:1;s:2:"11";i:2;s:3:"536";i:3;s:3:"495";}}s:4:"less";a:4:{s:1:"C";s:2:"60";s:2:"WX";s:3:"584";s:1:"N";s:4:"less";s:1:"B";a:4:{i:0;s:2:"48";i:1;s:2:"11";i:2;s:3:"536";i:3;s:3:"495";}}i:61;a:4:{s:1:"C";s:2:"61";s:2:"WX";s:3:"584";s:1:"N";s:5:"equal";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:3:"115";i:2;s:3:"545";i:3;s:3:"390";}}s:5:"equal";a:4:{s:1:"C";s:2:"61";s:2:"WX";s:3:"584";s:1:"N";s:5:"equal";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:3:"115";i:2;s:3:"545";i:3;s:3:"390";}}i:62;a:4:{s:1:"C";s:2:"62";s:2:"WX";s:3:"584";s:1:"N";s:7:"greater";s:1:"B";a:4:{i:0;s:2:"48";i:1;s:2:"11";i:2;s:3:"536";i:3;s:3:"495";}}s:7:"greater";a:4:{s:1:"C";s:2:"62";s:2:"WX";s:3:"584";s:1:"N";s:7:"greater";s:1:"B";a:4:{i:0;s:2:"48";i:1;s:2:"11";i:2;s:3:"536";i:3;s:3:"495";}}i:63;a:4:{s:1:"C";s:2:"63";s:2:"WX";s:3:"556";s:1:"N";s:8:"question";s:1:"B";a:4:{i:0;s:2:"56";i:1;s:1:"0";i:2;s:3:"492";i:3;s:3:"727";}}s:8:"question";a:4:{s:1:"C";s:2:"63";s:2:"WX";s:3:"556";s:1:"N";s:8:"question";s:1:"B";a:4:{i:0;s:2:"56";i:1;s:1:"0";i:2;s:3:"492";i:3;s:3:"727";}}i:64;a:4:{s:1:"C";s:2:"64";s:2:"WX";s:4:"1015";s:1:"N";s:2:"at";s:1:"B";a:4:{i:0;s:3:"147";i:1;s:3:"-19";i:2;s:3:"868";i:3;s:3:"737";}}s:2:"at";a:4:{s:1:"C";s:2:"64";s:2:"WX";s:4:"1015";s:1:"N";s:2:"at";s:1:"B";a:4:{i:0;s:3:"147";i:1;s:3:"-19";i:2;s:3:"868";i:3;s:3:"737";}}i:65;a:4:{s:1:"C";s:2:"65";s:2:"WX";s:3:"667";s:1:"N";s:1:"A";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:1:"0";i:2;s:3:"654";i:3;s:3:"718";}}s:1:"A";a:4:{s:1:"C";s:2:"65";s:2:"WX";s:3:"667";s:1:"N";s:1:"A";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:1:"0";i:2;s:3:"654";i:3;s:3:"718";}}i:66;a:4:{s:1:"C";s:2:"66";s:2:"WX";s:3:"667";s:1:"N";s:1:"B";s:1:"B";a:4:{i:0;s:2:"74";i:1;s:1:"0";i:2;s:3:"627";i:3;s:3:"718";}}s:1:"B";a:4:{s:1:"C";s:2:"66";s:2:"WX";s:3:"667";s:1:"N";s:1:"B";s:1:"B";a:4:{i:0;s:2:"74";i:1;s:1:"0";i:2;s:3:"627";i:3;s:3:"718";}}i:67;a:4:{s:1:"C";s:2:"67";s:2:"WX";s:3:"722";s:1:"N";s:1:"C";s:1:"B";a:4:{i:0;s:2:"44";i:1;s:3:"-19";i:2;s:3:"681";i:3;s:3:"737";}}s:1:"C";a:4:{s:1:"C";s:2:"67";s:2:"WX";s:3:"722";s:1:"N";s:1:"C";s:1:"B";a:4:{i:0;s:2:"44";i:1;s:3:"-19";i:2;s:3:"681";i:3;s:3:"737";}}i:68;a:4:{s:1:"C";s:2:"68";s:2:"WX";s:3:"722";s:1:"N";s:1:"D";s:1:"B";a:4:{i:0;s:2:"81";i:1;s:1:"0";i:2;s:3:"674";i:3;s:3:"718";}}s:1:"D";a:4:{s:1:"C";s:2:"68";s:2:"WX";s:3:"722";s:1:"N";s:1:"D";s:1:"B";a:4:{i:0;s:2:"81";i:1;s:1:"0";i:2;s:3:"674";i:3;s:3:"718";}}i:69;a:4:{s:1:"C";s:2:"69";s:2:"WX";s:3:"667";s:1:"N";s:1:"E";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:1:"0";i:2;s:3:"616";i:3;s:3:"718";}}s:1:"E";a:4:{s:1:"C";s:2:"69";s:2:"WX";s:3:"667";s:1:"N";s:1:"E";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:1:"0";i:2;s:3:"616";i:3;s:3:"718";}}i:70;a:4:{s:1:"C";s:2:"70";s:2:"WX";s:3:"611";s:1:"N";s:1:"F";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:1:"0";i:2;s:3:"583";i:3;s:3:"718";}}s:1:"F";a:4:{s:1:"C";s:2:"70";s:2:"WX";s:3:"611";s:1:"N";s:1:"F";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:1:"0";i:2;s:3:"583";i:3;s:3:"718";}}i:71;a:4:{s:1:"C";s:2:"71";s:2:"WX";s:3:"778";s:1:"N";s:1:"G";s:1:"B";a:4:{i:0;s:2:"48";i:1;s:3:"-19";i:2;s:3:"704";i:3;s:3:"737";}}s:1:"G";a:4:{s:1:"C";s:2:"71";s:2:"WX";s:3:"778";s:1:"N";s:1:"G";s:1:"B";a:4:{i:0;s:2:"48";i:1;s:3:"-19";i:2;s:3:"704";i:3;s:3:"737";}}i:72;a:4:{s:1:"C";s:2:"72";s:2:"WX";s:3:"722";s:1:"N";s:1:"H";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:1:"0";i:2;s:3:"646";i:3;s:3:"718";}}s:1:"H";a:4:{s:1:"C";s:2:"72";s:2:"WX";s:3:"722";s:1:"N";s:1:"H";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:1:"0";i:2;s:3:"646";i:3;s:3:"718";}}i:73;a:4:{s:1:"C";s:2:"73";s:2:"WX";s:3:"278";s:1:"N";s:1:"I";s:1:"B";a:4:{i:0;s:2:"91";i:1;s:1:"0";i:2;s:3:"188";i:3;s:3:"718";}}s:1:"I";a:4:{s:1:"C";s:2:"73";s:2:"WX";s:3:"278";s:1:"N";s:1:"I";s:1:"B";a:4:{i:0;s:2:"91";i:1;s:1:"0";i:2;s:3:"188";i:3;s:3:"718";}}i:74;a:4:{s:1:"C";s:2:"74";s:2:"WX";s:3:"500";s:1:"N";s:1:"J";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:3:"-19";i:2;s:3:"428";i:3;s:3:"718";}}s:1:"J";a:4:{s:1:"C";s:2:"74";s:2:"WX";s:3:"500";s:1:"N";s:1:"J";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:3:"-19";i:2;s:3:"428";i:3;s:3:"718";}}i:75;a:4:{s:1:"C";s:2:"75";s:2:"WX";s:3:"667";s:1:"N";s:1:"K";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"663";i:3;s:3:"718";}}s:1:"K";a:4:{s:1:"C";s:2:"75";s:2:"WX";s:3:"667";s:1:"N";s:1:"K";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"663";i:3;s:3:"718";}}i:76;a:4:{s:1:"C";s:2:"76";s:2:"WX";s:3:"556";s:1:"N";s:1:"L";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"537";i:3;s:3:"718";}}s:1:"L";a:4:{s:1:"C";s:2:"76";s:2:"WX";s:3:"556";s:1:"N";s:1:"L";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"537";i:3;s:3:"718";}}i:77;a:4:{s:1:"C";s:2:"77";s:2:"WX";s:3:"833";s:1:"N";s:1:"M";s:1:"B";a:4:{i:0;s:2:"73";i:1;s:1:"0";i:2;s:3:"761";i:3;s:3:"718";}}s:1:"M";a:4:{s:1:"C";s:2:"77";s:2:"WX";s:3:"833";s:1:"N";s:1:"M";s:1:"B";a:4:{i:0;s:2:"73";i:1;s:1:"0";i:2;s:3:"761";i:3;s:3:"718";}}i:78;a:4:{s:1:"C";s:2:"78";s:2:"WX";s:3:"722";s:1:"N";s:1:"N";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"646";i:3;s:3:"718";}}s:1:"N";a:4:{s:1:"C";s:2:"78";s:2:"WX";s:3:"722";s:1:"N";s:1:"N";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"646";i:3;s:3:"718";}}i:79;a:4:{s:1:"C";s:2:"79";s:2:"WX";s:3:"778";s:1:"N";s:1:"O";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:3:"-19";i:2;s:3:"739";i:3;s:3:"737";}}s:1:"O";a:4:{s:1:"C";s:2:"79";s:2:"WX";s:3:"778";s:1:"N";s:1:"O";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:3:"-19";i:2;s:3:"739";i:3;s:3:"737";}}i:80;a:4:{s:1:"C";s:2:"80";s:2:"WX";s:3:"667";s:1:"N";s:1:"P";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:1:"0";i:2;s:3:"622";i:3;s:3:"718";}}s:1:"P";a:4:{s:1:"C";s:2:"80";s:2:"WX";s:3:"667";s:1:"N";s:1:"P";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:1:"0";i:2;s:3:"622";i:3;s:3:"718";}}i:81;a:4:{s:1:"C";s:2:"81";s:2:"WX";s:3:"778";s:1:"N";s:1:"Q";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:3:"-56";i:2;s:3:"739";i:3;s:3:"737";}}s:1:"Q";a:4:{s:1:"C";s:2:"81";s:2:"WX";s:3:"778";s:1:"N";s:1:"Q";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:3:"-56";i:2;s:3:"739";i:3;s:3:"737";}}i:82;a:4:{s:1:"C";s:2:"82";s:2:"WX";s:3:"722";s:1:"N";s:1:"R";s:1:"B";a:4:{i:0;s:2:"88";i:1;s:1:"0";i:2;s:3:"684";i:3;s:3:"718";}}s:1:"R";a:4:{s:1:"C";s:2:"82";s:2:"WX";s:3:"722";s:1:"N";s:1:"R";s:1:"B";a:4:{i:0;s:2:"88";i:1;s:1:"0";i:2;s:3:"684";i:3;s:3:"718";}}i:83;a:4:{s:1:"C";s:2:"83";s:2:"WX";s:3:"667";s:1:"N";s:1:"S";s:1:"B";a:4:{i:0;s:2:"49";i:1;s:3:"-19";i:2;s:3:"620";i:3;s:3:"737";}}s:1:"S";a:4:{s:1:"C";s:2:"83";s:2:"WX";s:3:"667";s:1:"N";s:1:"S";s:1:"B";a:4:{i:0;s:2:"49";i:1;s:3:"-19";i:2;s:3:"620";i:3;s:3:"737";}}i:84;a:4:{s:1:"C";s:2:"84";s:2:"WX";s:3:"611";s:1:"N";s:1:"T";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:1:"0";i:2;s:3:"597";i:3;s:3:"718";}}s:1:"T";a:4:{s:1:"C";s:2:"84";s:2:"WX";s:3:"611";s:1:"N";s:1:"T";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:1:"0";i:2;s:3:"597";i:3;s:3:"718";}}i:85;a:4:{s:1:"C";s:2:"85";s:2:"WX";s:3:"722";s:1:"N";s:1:"U";s:1:"B";a:4:{i:0;s:2:"79";i:1;s:3:"-19";i:2;s:3:"644";i:3;s:3:"718";}}s:1:"U";a:4:{s:1:"C";s:2:"85";s:2:"WX";s:3:"722";s:1:"N";s:1:"U";s:1:"B";a:4:{i:0;s:2:"79";i:1;s:3:"-19";i:2;s:3:"644";i:3;s:3:"718";}}i:86;a:4:{s:1:"C";s:2:"86";s:2:"WX";s:3:"667";s:1:"N";s:1:"V";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:1:"0";i:2;s:3:"647";i:3;s:3:"718";}}s:1:"V";a:4:{s:1:"C";s:2:"86";s:2:"WX";s:3:"667";s:1:"N";s:1:"V";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:1:"0";i:2;s:3:"647";i:3;s:3:"718";}}i:87;a:4:{s:1:"C";s:2:"87";s:2:"WX";s:3:"944";s:1:"N";s:1:"W";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:1:"0";i:2;s:3:"928";i:3;s:3:"718";}}s:1:"W";a:4:{s:1:"C";s:2:"87";s:2:"WX";s:3:"944";s:1:"N";s:1:"W";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:1:"0";i:2;s:3:"928";i:3;s:3:"718";}}i:88;a:4:{s:1:"C";s:2:"88";s:2:"WX";s:3:"667";s:1:"N";s:1:"X";s:1:"B";a:4:{i:0;s:2:"19";i:1;s:1:"0";i:2;s:3:"648";i:3;s:3:"718";}}s:1:"X";a:4:{s:1:"C";s:2:"88";s:2:"WX";s:3:"667";s:1:"N";s:1:"X";s:1:"B";a:4:{i:0;s:2:"19";i:1;s:1:"0";i:2;s:3:"648";i:3;s:3:"718";}}i:89;a:4:{s:1:"C";s:2:"89";s:2:"WX";s:3:"667";s:1:"N";s:1:"Y";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:1:"0";i:2;s:3:"653";i:3;s:3:"718";}}s:1:"Y";a:4:{s:1:"C";s:2:"89";s:2:"WX";s:3:"667";s:1:"N";s:1:"Y";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:1:"0";i:2;s:3:"653";i:3;s:3:"718";}}i:90;a:4:{s:1:"C";s:2:"90";s:2:"WX";s:3:"611";s:1:"N";s:1:"Z";s:1:"B";a:4:{i:0;s:2:"23";i:1;s:1:"0";i:2;s:3:"588";i:3;s:3:"718";}}s:1:"Z";a:4:{s:1:"C";s:2:"90";s:2:"WX";s:3:"611";s:1:"N";s:1:"Z";s:1:"B";a:4:{i:0;s:2:"23";i:1;s:1:"0";i:2;s:3:"588";i:3;s:3:"718";}}i:91;a:4:{s:1:"C";s:2:"91";s:2:"WX";s:3:"278";s:1:"N";s:11:"bracketleft";s:1:"B";a:4:{i:0;s:2:"63";i:1;s:4:"-196";i:2;s:3:"250";i:3;s:3:"722";}}s:11:"bracketleft";a:4:{s:1:"C";s:2:"91";s:2:"WX";s:3:"278";s:1:"N";s:11:"bracketleft";s:1:"B";a:4:{i:0;s:2:"63";i:1;s:4:"-196";i:2;s:3:"250";i:3;s:3:"722";}}i:92;a:4:{s:1:"C";s:2:"92";s:2:"WX";s:3:"278";s:1:"N";s:9:"backslash";s:1:"B";a:4:{i:0;s:3:"-17";i:1;s:3:"-19";i:2;s:3:"295";i:3;s:3:"737";}}s:9:"backslash";a:4:{s:1:"C";s:2:"92";s:2:"WX";s:3:"278";s:1:"N";s:9:"backslash";s:1:"B";a:4:{i:0;s:3:"-17";i:1;s:3:"-19";i:2;s:3:"295";i:3;s:3:"737";}}i:93;a:4:{s:1:"C";s:2:"93";s:2:"WX";s:3:"278";s:1:"N";s:12:"bracketright";s:1:"B";a:4:{i:0;s:2:"28";i:1;s:4:"-196";i:2;s:3:"215";i:3;s:3:"722";}}s:12:"bracketright";a:4:{s:1:"C";s:2:"93";s:2:"WX";s:3:"278";s:1:"N";s:12:"bracketright";s:1:"B";a:4:{i:0;s:2:"28";i:1;s:4:"-196";i:2;s:3:"215";i:3;s:3:"722";}}i:94;a:4:{s:1:"C";s:2:"94";s:2:"WX";s:3:"469";s:1:"N";s:11:"asciicircum";s:1:"B";a:4:{i:0;s:3:"-14";i:1;s:3:"264";i:2;s:3:"483";i:3;s:3:"688";}}s:11:"asciicircum";a:4:{s:1:"C";s:2:"94";s:2:"WX";s:3:"469";s:1:"N";s:11:"asciicircum";s:1:"B";a:4:{i:0;s:3:"-14";i:1;s:3:"264";i:2;s:3:"483";i:3;s:3:"688";}}i:95;a:4:{s:1:"C";s:2:"95";s:2:"WX";s:3:"556";s:1:"N";s:10:"underscore";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:4:"-125";i:2;s:3:"556";i:3;s:3:"-75";}}s:10:"underscore";a:4:{s:1:"C";s:2:"95";s:2:"WX";s:3:"556";s:1:"N";s:10:"underscore";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:4:"-125";i:2;s:3:"556";i:3;s:3:"-75";}}i:96;a:4:{s:1:"C";s:2:"96";s:2:"WX";s:3:"222";s:1:"N";s:9:"quoteleft";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:3:"470";i:2;s:3:"169";i:3;s:3:"725";}}s:9:"quoteleft";a:4:{s:1:"C";s:2:"96";s:2:"WX";s:3:"222";s:1:"N";s:9:"quoteleft";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:3:"470";i:2;s:3:"169";i:3;s:3:"725";}}i:97;a:4:{s:1:"C";s:2:"97";s:2:"WX";s:3:"556";s:1:"N";s:1:"a";s:1:"B";a:4:{i:0;s:2:"36";i:1;s:3:"-15";i:2;s:3:"530";i:3;s:3:"538";}}s:1:"a";a:4:{s:1:"C";s:2:"97";s:2:"WX";s:3:"556";s:1:"N";s:1:"a";s:1:"B";a:4:{i:0;s:2:"36";i:1;s:3:"-15";i:2;s:3:"530";i:3;s:3:"538";}}i:98;a:4:{s:1:"C";s:2:"98";s:2:"WX";s:3:"556";s:1:"N";s:1:"b";s:1:"B";a:4:{i:0;s:2:"58";i:1;s:3:"-15";i:2;s:3:"517";i:3;s:3:"718";}}s:1:"b";a:4:{s:1:"C";s:2:"98";s:2:"WX";s:3:"556";s:1:"N";s:1:"b";s:1:"B";a:4:{i:0;s:2:"58";i:1;s:3:"-15";i:2;s:3:"517";i:3;s:3:"718";}}i:99;a:4:{s:1:"C";s:2:"99";s:2:"WX";s:3:"500";s:1:"N";s:1:"c";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:3:"-15";i:2;s:3:"477";i:3;s:3:"538";}}s:1:"c";a:4:{s:1:"C";s:2:"99";s:2:"WX";s:3:"500";s:1:"N";s:1:"c";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:3:"-15";i:2;s:3:"477";i:3;s:3:"538";}}i:100;a:4:{s:1:"C";s:3:"100";s:2:"WX";s:3:"556";s:1:"N";s:1:"d";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-15";i:2;s:3:"499";i:3;s:3:"718";}}s:1:"d";a:4:{s:1:"C";s:3:"100";s:2:"WX";s:3:"556";s:1:"N";s:1:"d";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-15";i:2;s:3:"499";i:3;s:3:"718";}}i:101;a:4:{s:1:"C";s:3:"101";s:2:"WX";s:3:"556";s:1:"N";s:1:"e";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:3:"-15";i:2;s:3:"516";i:3;s:3:"538";}}s:1:"e";a:4:{s:1:"C";s:3:"101";s:2:"WX";s:3:"556";s:1:"N";s:1:"e";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:3:"-15";i:2;s:3:"516";i:3;s:3:"538";}}i:102;a:5:{s:1:"C";s:3:"102";s:2:"WX";s:3:"278";s:1:"N";s:1:"f";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:1:"0";i:2;s:3:"262";i:3;s:3:"728";}s:1:"L";a:2:{i:0;s:1:"l";i:1;s:2:"fl";}}s:1:"f";a:5:{s:1:"C";s:3:"102";s:2:"WX";s:3:"278";s:1:"N";s:1:"f";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:1:"0";i:2;s:3:"262";i:3;s:3:"728";}s:1:"L";a:2:{i:0;s:1:"l";i:1;s:2:"fl";}}i:103;a:4:{s:1:"C";s:3:"103";s:2:"WX";s:3:"556";s:1:"N";s:1:"g";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:4:"-220";i:2;s:3:"499";i:3;s:3:"538";}}s:1:"g";a:4:{s:1:"C";s:3:"103";s:2:"WX";s:3:"556";s:1:"N";s:1:"g";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:4:"-220";i:2;s:3:"499";i:3;s:3:"538";}}i:104;a:4:{s:1:"C";s:3:"104";s:2:"WX";s:3:"556";s:1:"N";s:1:"h";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:1:"0";i:2;s:3:"491";i:3;s:3:"718";}}s:1:"h";a:4:{s:1:"C";s:3:"104";s:2:"WX";s:3:"556";s:1:"N";s:1:"h";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:1:"0";i:2;s:3:"491";i:3;s:3:"718";}}i:105;a:4:{s:1:"C";s:3:"105";s:2:"WX";s:3:"222";s:1:"N";s:1:"i";s:1:"B";a:4:{i:0;s:2:"67";i:1;s:1:"0";i:2;s:3:"155";i:3;s:3:"718";}}s:1:"i";a:4:{s:1:"C";s:3:"105";s:2:"WX";s:3:"222";s:1:"N";s:1:"i";s:1:"B";a:4:{i:0;s:2:"67";i:1;s:1:"0";i:2;s:3:"155";i:3;s:3:"718";}}i:106;a:4:{s:1:"C";s:3:"106";s:2:"WX";s:3:"222";s:1:"N";s:1:"j";s:1:"B";a:4:{i:0;s:3:"-16";i:1;s:4:"-210";i:2;s:3:"155";i:3;s:3:"718";}}s:1:"j";a:4:{s:1:"C";s:3:"106";s:2:"WX";s:3:"222";s:1:"N";s:1:"j";s:1:"B";a:4:{i:0;s:3:"-16";i:1;s:4:"-210";i:2;s:3:"155";i:3;s:3:"718";}}i:107;a:4:{s:1:"C";s:3:"107";s:2:"WX";s:3:"500";s:1:"N";s:1:"k";s:1:"B";a:4:{i:0;s:2:"67";i:1;s:1:"0";i:2;s:3:"501";i:3;s:3:"718";}}s:1:"k";a:4:{s:1:"C";s:3:"107";s:2:"WX";s:3:"500";s:1:"N";s:1:"k";s:1:"B";a:4:{i:0;s:2:"67";i:1;s:1:"0";i:2;s:3:"501";i:3;s:3:"718";}}i:108;a:4:{s:1:"C";s:3:"108";s:2:"WX";s:3:"222";s:1:"N";s:1:"l";s:1:"B";a:4:{i:0;s:2:"67";i:1;s:1:"0";i:2;s:3:"155";i:3;s:3:"718";}}s:1:"l";a:4:{s:1:"C";s:3:"108";s:2:"WX";s:3:"222";s:1:"N";s:1:"l";s:1:"B";a:4:{i:0;s:2:"67";i:1;s:1:"0";i:2;s:3:"155";i:3;s:3:"718";}}i:109;a:4:{s:1:"C";s:3:"109";s:2:"WX";s:3:"833";s:1:"N";s:1:"m";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:1:"0";i:2;s:3:"769";i:3;s:3:"538";}}s:1:"m";a:4:{s:1:"C";s:3:"109";s:2:"WX";s:3:"833";s:1:"N";s:1:"m";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:1:"0";i:2;s:3:"769";i:3;s:3:"538";}}i:110;a:4:{s:1:"C";s:3:"110";s:2:"WX";s:3:"556";s:1:"N";s:1:"n";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:1:"0";i:2;s:3:"491";i:3;s:3:"538";}}s:1:"n";a:4:{s:1:"C";s:3:"110";s:2:"WX";s:3:"556";s:1:"N";s:1:"n";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:1:"0";i:2;s:3:"491";i:3;s:3:"538";}}i:111;a:4:{s:1:"C";s:3:"111";s:2:"WX";s:3:"556";s:1:"N";s:1:"o";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"521";i:3;s:3:"538";}}s:1:"o";a:4:{s:1:"C";s:3:"111";s:2:"WX";s:3:"556";s:1:"N";s:1:"o";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"521";i:3;s:3:"538";}}i:112;a:4:{s:1:"C";s:3:"112";s:2:"WX";s:3:"556";s:1:"N";s:1:"p";s:1:"B";a:4:{i:0;s:2:"58";i:1;s:4:"-207";i:2;s:3:"517";i:3;s:3:"538";}}s:1:"p";a:4:{s:1:"C";s:3:"112";s:2:"WX";s:3:"556";s:1:"N";s:1:"p";s:1:"B";a:4:{i:0;s:2:"58";i:1;s:4:"-207";i:2;s:3:"517";i:3;s:3:"538";}}i:113;a:4:{s:1:"C";s:3:"113";s:2:"WX";s:3:"556";s:1:"N";s:1:"q";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:4:"-207";i:2;s:3:"494";i:3;s:3:"538";}}s:1:"q";a:4:{s:1:"C";s:3:"113";s:2:"WX";s:3:"556";s:1:"N";s:1:"q";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:4:"-207";i:2;s:3:"494";i:3;s:3:"538";}}i:114;a:4:{s:1:"C";s:3:"114";s:2:"WX";s:3:"333";s:1:"N";s:1:"r";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:1:"0";i:2;s:3:"332";i:3;s:3:"538";}}s:1:"r";a:4:{s:1:"C";s:3:"114";s:2:"WX";s:3:"333";s:1:"N";s:1:"r";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:1:"0";i:2;s:3:"332";i:3;s:3:"538";}}i:115;a:4:{s:1:"C";s:3:"115";s:2:"WX";s:3:"500";s:1:"N";s:1:"s";s:1:"B";a:4:{i:0;s:2:"32";i:1;s:3:"-15";i:2;s:3:"464";i:3;s:3:"538";}}s:1:"s";a:4:{s:1:"C";s:3:"115";s:2:"WX";s:3:"500";s:1:"N";s:1:"s";s:1:"B";a:4:{i:0;s:2:"32";i:1;s:3:"-15";i:2;s:3:"464";i:3;s:3:"538";}}i:116;a:4:{s:1:"C";s:3:"116";s:2:"WX";s:3:"278";s:1:"N";s:1:"t";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:2:"-7";i:2;s:3:"257";i:3;s:3:"669";}}s:1:"t";a:4:{s:1:"C";s:3:"116";s:2:"WX";s:3:"278";s:1:"N";s:1:"t";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:2:"-7";i:2;s:3:"257";i:3;s:3:"669";}}i:117;a:4:{s:1:"C";s:3:"117";s:2:"WX";s:3:"556";s:1:"N";s:1:"u";s:1:"B";a:4:{i:0;s:2:"68";i:1;s:3:"-15";i:2;s:3:"489";i:3;s:3:"523";}}s:1:"u";a:4:{s:1:"C";s:3:"117";s:2:"WX";s:3:"556";s:1:"N";s:1:"u";s:1:"B";a:4:{i:0;s:2:"68";i:1;s:3:"-15";i:2;s:3:"489";i:3;s:3:"523";}}i:118;a:4:{s:1:"C";s:3:"118";s:2:"WX";s:3:"500";s:1:"N";s:1:"v";s:1:"B";a:4:{i:0;s:1:"8";i:1;s:1:"0";i:2;s:3:"492";i:3;s:3:"523";}}s:1:"v";a:4:{s:1:"C";s:3:"118";s:2:"WX";s:3:"500";s:1:"N";s:1:"v";s:1:"B";a:4:{i:0;s:1:"8";i:1;s:1:"0";i:2;s:3:"492";i:3;s:3:"523";}}i:119;a:4:{s:1:"C";s:3:"119";s:2:"WX";s:3:"722";s:1:"N";s:1:"w";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:1:"0";i:2;s:3:"709";i:3;s:3:"523";}}s:1:"w";a:4:{s:1:"C";s:3:"119";s:2:"WX";s:3:"722";s:1:"N";s:1:"w";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:1:"0";i:2;s:3:"709";i:3;s:3:"523";}}i:120;a:4:{s:1:"C";s:3:"120";s:2:"WX";s:3:"500";s:1:"N";s:1:"x";s:1:"B";a:4:{i:0;s:2:"11";i:1;s:1:"0";i:2;s:3:"490";i:3;s:3:"523";}}s:1:"x";a:4:{s:1:"C";s:3:"120";s:2:"WX";s:3:"500";s:1:"N";s:1:"x";s:1:"B";a:4:{i:0;s:2:"11";i:1;s:1:"0";i:2;s:3:"490";i:3;s:3:"523";}}i:121;a:4:{s:1:"C";s:3:"121";s:2:"WX";s:3:"500";s:1:"N";s:1:"y";s:1:"B";a:4:{i:0;s:2:"11";i:1;s:4:"-214";i:2;s:3:"489";i:3;s:3:"523";}}s:1:"y";a:4:{s:1:"C";s:3:"121";s:2:"WX";s:3:"500";s:1:"N";s:1:"y";s:1:"B";a:4:{i:0;s:2:"11";i:1;s:4:"-214";i:2;s:3:"489";i:3;s:3:"523";}}i:122;a:4:{s:1:"C";s:3:"122";s:2:"WX";s:3:"500";s:1:"N";s:1:"z";s:1:"B";a:4:{i:0;s:2:"31";i:1;s:1:"0";i:2;s:3:"469";i:3;s:3:"523";}}s:1:"z";a:4:{s:1:"C";s:3:"122";s:2:"WX";s:3:"500";s:1:"N";s:1:"z";s:1:"B";a:4:{i:0;s:2:"31";i:1;s:1:"0";i:2;s:3:"469";i:3;s:3:"523";}}i:123;a:4:{s:1:"C";s:3:"123";s:2:"WX";s:3:"334";s:1:"N";s:9:"braceleft";s:1:"B";a:4:{i:0;s:2:"42";i:1;s:4:"-196";i:2;s:3:"292";i:3;s:3:"722";}}s:9:"braceleft";a:4:{s:1:"C";s:3:"123";s:2:"WX";s:3:"334";s:1:"N";s:9:"braceleft";s:1:"B";a:4:{i:0;s:2:"42";i:1;s:4:"-196";i:2;s:3:"292";i:3;s:3:"722";}}i:124;a:4:{s:1:"C";s:3:"124";s:2:"WX";s:3:"260";s:1:"N";s:3:"bar";s:1:"B";a:4:{i:0;s:2:"94";i:1;s:4:"-225";i:2;s:3:"167";i:3;s:3:"775";}}s:3:"bar";a:4:{s:1:"C";s:3:"124";s:2:"WX";s:3:"260";s:1:"N";s:3:"bar";s:1:"B";a:4:{i:0;s:2:"94";i:1;s:4:"-225";i:2;s:3:"167";i:3;s:3:"775";}}i:125;a:4:{s:1:"C";s:3:"125";s:2:"WX";s:3:"334";s:1:"N";s:10:"braceright";s:1:"B";a:4:{i:0;s:2:"42";i:1;s:4:"-196";i:2;s:3:"292";i:3;s:3:"722";}}s:10:"braceright";a:4:{s:1:"C";s:3:"125";s:2:"WX";s:3:"334";s:1:"N";s:10:"braceright";s:1:"B";a:4:{i:0;s:2:"42";i:1;s:4:"-196";i:2;s:3:"292";i:3;s:3:"722";}}i:126;a:4:{s:1:"C";s:3:"126";s:2:"WX";s:3:"584";s:1:"N";s:10:"asciitilde";s:1:"B";a:4:{i:0;s:2:"61";i:1;s:3:"180";i:2;s:3:"523";i:3;s:3:"326";}}s:10:"asciitilde";a:4:{s:1:"C";s:3:"126";s:2:"WX";s:3:"584";s:1:"N";s:10:"asciitilde";s:1:"B";a:4:{i:0;s:2:"61";i:1;s:3:"180";i:2;s:3:"523";i:3;s:3:"326";}}i:161;a:4:{s:1:"C";s:3:"161";s:2:"WX";s:3:"333";s:1:"N";s:10:"exclamdown";s:1:"B";a:4:{i:0;s:3:"118";i:1;s:4:"-195";i:2;s:3:"215";i:3;s:3:"523";}}s:10:"exclamdown";a:4:{s:1:"C";s:3:"161";s:2:"WX";s:3:"333";s:1:"N";s:10:"exclamdown";s:1:"B";a:4:{i:0;s:3:"118";i:1;s:4:"-195";i:2;s:3:"215";i:3;s:3:"523";}}i:162;a:4:{s:1:"C";s:3:"162";s:2:"WX";s:3:"556";s:1:"N";s:4:"cent";s:1:"B";a:4:{i:0;s:2:"51";i:1;s:4:"-115";i:2;s:3:"513";i:3;s:3:"623";}}s:4:"cent";a:4:{s:1:"C";s:3:"162";s:2:"WX";s:3:"556";s:1:"N";s:4:"cent";s:1:"B";a:4:{i:0;s:2:"51";i:1;s:4:"-115";i:2;s:3:"513";i:3;s:3:"623";}}i:163;a:4:{s:1:"C";s:3:"163";s:2:"WX";s:3:"556";s:1:"N";s:8:"sterling";s:1:"B";a:4:{i:0;s:2:"33";i:1;s:3:"-16";i:2;s:3:"539";i:3;s:3:"718";}}s:8:"sterling";a:4:{s:1:"C";s:3:"163";s:2:"WX";s:3:"556";s:1:"N";s:8:"sterling";s:1:"B";a:4:{i:0;s:2:"33";i:1;s:3:"-16";i:2;s:3:"539";i:3;s:3:"718";}}i:164;a:4:{s:1:"C";s:3:"164";s:2:"WX";s:3:"167";s:1:"N";s:8:"fraction";s:1:"B";a:4:{i:0;s:4:"-166";i:1;s:3:"-19";i:2;s:3:"333";i:3;s:3:"703";}}s:8:"fraction";a:4:{s:1:"C";s:3:"164";s:2:"WX";s:3:"167";s:1:"N";s:8:"fraction";s:1:"B";a:4:{i:0;s:4:"-166";i:1;s:3:"-19";i:2;s:3:"333";i:3;s:3:"703";}}i:165;a:4:{s:1:"C";s:3:"165";s:2:"WX";s:3:"556";s:1:"N";s:3:"yen";s:1:"B";a:4:{i:0;s:1:"3";i:1;s:1:"0";i:2;s:3:"553";i:3;s:3:"688";}}s:3:"yen";a:4:{s:1:"C";s:3:"165";s:2:"WX";s:3:"556";s:1:"N";s:3:"yen";s:1:"B";a:4:{i:0;s:1:"3";i:1;s:1:"0";i:2;s:3:"553";i:3;s:3:"688";}}i:166;a:4:{s:1:"C";s:3:"166";s:2:"WX";s:3:"556";s:1:"N";s:6:"florin";s:1:"B";a:4:{i:0;s:3:"-11";i:1;s:4:"-207";i:2;s:3:"501";i:3;s:3:"737";}}s:6:"florin";a:4:{s:1:"C";s:3:"166";s:2:"WX";s:3:"556";s:1:"N";s:6:"florin";s:1:"B";a:4:{i:0;s:3:"-11";i:1;s:4:"-207";i:2;s:3:"501";i:3;s:3:"737";}}i:167;a:4:{s:1:"C";s:3:"167";s:2:"WX";s:3:"556";s:1:"N";s:7:"section";s:1:"B";a:4:{i:0;s:2:"43";i:1;s:4:"-191";i:2;s:3:"512";i:3;s:3:"737";}}s:7:"section";a:4:{s:1:"C";s:3:"167";s:2:"WX";s:3:"556";s:1:"N";s:7:"section";s:1:"B";a:4:{i:0;s:2:"43";i:1;s:4:"-191";i:2;s:3:"512";i:3;s:3:"737";}}i:168;a:4:{s:1:"C";s:3:"168";s:2:"WX";s:3:"556";s:1:"N";s:8:"currency";s:1:"B";a:4:{i:0;s:2:"28";i:1;s:2:"99";i:2;s:3:"528";i:3;s:3:"603";}}s:8:"currency";a:4:{s:1:"C";s:3:"168";s:2:"WX";s:3:"556";s:1:"N";s:8:"currency";s:1:"B";a:4:{i:0;s:2:"28";i:1;s:2:"99";i:2;s:3:"528";i:3;s:3:"603";}}i:169;a:4:{s:1:"C";s:3:"169";s:2:"WX";s:3:"191";s:1:"N";s:11:"quotesingle";s:1:"B";a:4:{i:0;s:2:"59";i:1;s:3:"463";i:2;s:3:"132";i:3;s:3:"718";}}s:11:"quotesingle";a:4:{s:1:"C";s:3:"169";s:2:"WX";s:3:"191";s:1:"N";s:11:"quotesingle";s:1:"B";a:4:{i:0;s:2:"59";i:1;s:3:"463";i:2;s:3:"132";i:3;s:3:"718";}}i:170;a:4:{s:1:"C";s:3:"170";s:2:"WX";s:3:"333";s:1:"N";s:12:"quotedblleft";s:1:"B";a:4:{i:0;s:2:"38";i:1;s:3:"470";i:2;s:3:"307";i:3;s:3:"725";}}s:12:"quotedblleft";a:4:{s:1:"C";s:3:"170";s:2:"WX";s:3:"333";s:1:"N";s:12:"quotedblleft";s:1:"B";a:4:{i:0;s:2:"38";i:1;s:3:"470";i:2;s:3:"307";i:3;s:3:"725";}}i:171;a:4:{s:1:"C";s:3:"171";s:2:"WX";s:3:"556";s:1:"N";s:13:"guillemotleft";s:1:"B";a:4:{i:0;s:2:"97";i:1;s:3:"108";i:2;s:3:"459";i:3;s:3:"446";}}s:13:"guillemotleft";a:4:{s:1:"C";s:3:"171";s:2:"WX";s:3:"556";s:1:"N";s:13:"guillemotleft";s:1:"B";a:4:{i:0;s:2:"97";i:1;s:3:"108";i:2;s:3:"459";i:3;s:3:"446";}}i:172;a:4:{s:1:"C";s:3:"172";s:2:"WX";s:3:"333";s:1:"N";s:13:"guilsinglleft";s:1:"B";a:4:{i:0;s:2:"88";i:1;s:3:"108";i:2;s:3:"245";i:3;s:3:"446";}}s:13:"guilsinglleft";a:4:{s:1:"C";s:3:"172";s:2:"WX";s:3:"333";s:1:"N";s:13:"guilsinglleft";s:1:"B";a:4:{i:0;s:2:"88";i:1;s:3:"108";i:2;s:3:"245";i:3;s:3:"446";}}i:173;a:4:{s:1:"C";s:3:"173";s:2:"WX";s:3:"333";s:1:"N";s:14:"guilsinglright";s:1:"B";a:4:{i:0;s:2:"88";i:1;s:3:"108";i:2;s:3:"245";i:3;s:3:"446";}}s:14:"guilsinglright";a:4:{s:1:"C";s:3:"173";s:2:"WX";s:3:"333";s:1:"N";s:14:"guilsinglright";s:1:"B";a:4:{i:0;s:2:"88";i:1;s:3:"108";i:2;s:3:"245";i:3;s:3:"446";}}i:174;a:4:{s:1:"C";s:3:"174";s:2:"WX";s:3:"500";s:1:"N";s:2:"fi";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:1:"0";i:2;s:3:"434";i:3;s:3:"728";}}s:2:"fi";a:4:{s:1:"C";s:3:"174";s:2:"WX";s:3:"500";s:1:"N";s:2:"fi";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:1:"0";i:2;s:3:"434";i:3;s:3:"728";}}i:175;a:4:{s:1:"C";s:3:"175";s:2:"WX";s:3:"500";s:1:"N";s:2:"fl";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:1:"0";i:2;s:3:"432";i:3;s:3:"728";}}s:2:"fl";a:4:{s:1:"C";s:3:"175";s:2:"WX";s:3:"500";s:1:"N";s:2:"fl";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:1:"0";i:2;s:3:"432";i:3;s:3:"728";}}i:177;a:4:{s:1:"C";s:3:"177";s:2:"WX";s:3:"556";s:1:"N";s:6:"endash";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:3:"240";i:2;s:3:"556";i:3;s:3:"313";}}s:6:"endash";a:4:{s:1:"C";s:3:"177";s:2:"WX";s:3:"556";s:1:"N";s:6:"endash";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:3:"240";i:2;s:3:"556";i:3;s:3:"313";}}i:178;a:4:{s:1:"C";s:3:"178";s:2:"WX";s:3:"556";s:1:"N";s:6:"dagger";s:1:"B";a:4:{i:0;s:2:"43";i:1;s:4:"-159";i:2;s:3:"514";i:3;s:3:"718";}}s:6:"dagger";a:4:{s:1:"C";s:3:"178";s:2:"WX";s:3:"556";s:1:"N";s:6:"dagger";s:1:"B";a:4:{i:0;s:2:"43";i:1;s:4:"-159";i:2;s:3:"514";i:3;s:3:"718";}}i:179;a:4:{s:1:"C";s:3:"179";s:2:"WX";s:3:"556";s:1:"N";s:9:"daggerdbl";s:1:"B";a:4:{i:0;s:2:"43";i:1;s:4:"-159";i:2;s:3:"514";i:3;s:3:"718";}}s:9:"daggerdbl";a:4:{s:1:"C";s:3:"179";s:2:"WX";s:3:"556";s:1:"N";s:9:"daggerdbl";s:1:"B";a:4:{i:0;s:2:"43";i:1;s:4:"-159";i:2;s:3:"514";i:3;s:3:"718";}}i:180;a:4:{s:1:"C";s:3:"180";s:2:"WX";s:3:"278";s:1:"N";s:14:"periodcentered";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:3:"190";i:2;s:3:"202";i:3;s:3:"315";}}s:14:"periodcentered";a:4:{s:1:"C";s:3:"180";s:2:"WX";s:3:"278";s:1:"N";s:14:"periodcentered";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:3:"190";i:2;s:3:"202";i:3;s:3:"315";}}i:182;a:4:{s:1:"C";s:3:"182";s:2:"WX";s:3:"537";s:1:"N";s:9:"paragraph";s:1:"B";a:4:{i:0;s:2:"18";i:1;s:4:"-173";i:2;s:3:"497";i:3;s:3:"718";}}s:9:"paragraph";a:4:{s:1:"C";s:3:"182";s:2:"WX";s:3:"537";s:1:"N";s:9:"paragraph";s:1:"B";a:4:{i:0;s:2:"18";i:1;s:4:"-173";i:2;s:3:"497";i:3;s:3:"718";}}i:183;a:4:{s:1:"C";s:3:"183";s:2:"WX";s:3:"350";s:1:"N";s:6:"bullet";s:1:"B";a:4:{i:0;s:2:"18";i:1;s:3:"202";i:2;s:3:"333";i:3;s:3:"517";}}s:6:"bullet";a:4:{s:1:"C";s:3:"183";s:2:"WX";s:3:"350";s:1:"N";s:6:"bullet";s:1:"B";a:4:{i:0;s:2:"18";i:1;s:3:"202";i:2;s:3:"333";i:3;s:3:"517";}}i:184;a:4:{s:1:"C";s:3:"184";s:2:"WX";s:3:"222";s:1:"N";s:14:"quotesinglbase";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:4:"-149";i:2;s:3:"157";i:3;s:3:"106";}}s:14:"quotesinglbase";a:4:{s:1:"C";s:3:"184";s:2:"WX";s:3:"222";s:1:"N";s:14:"quotesinglbase";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:4:"-149";i:2;s:3:"157";i:3;s:3:"106";}}i:185;a:4:{s:1:"C";s:3:"185";s:2:"WX";s:3:"333";s:1:"N";s:12:"quotedblbase";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:4:"-149";i:2;s:3:"295";i:3;s:3:"106";}}s:12:"quotedblbase";a:4:{s:1:"C";s:3:"185";s:2:"WX";s:3:"333";s:1:"N";s:12:"quotedblbase";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:4:"-149";i:2;s:3:"295";i:3;s:3:"106";}}i:186;a:4:{s:1:"C";s:3:"186";s:2:"WX";s:3:"333";s:1:"N";s:13:"quotedblright";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:3:"463";i:2;s:3:"295";i:3;s:3:"718";}}s:13:"quotedblright";a:4:{s:1:"C";s:3:"186";s:2:"WX";s:3:"333";s:1:"N";s:13:"quotedblright";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:3:"463";i:2;s:3:"295";i:3;s:3:"718";}}i:187;a:4:{s:1:"C";s:3:"187";s:2:"WX";s:3:"556";s:1:"N";s:14:"guillemotright";s:1:"B";a:4:{i:0;s:2:"97";i:1;s:3:"108";i:2;s:3:"459";i:3;s:3:"446";}}s:14:"guillemotright";a:4:{s:1:"C";s:3:"187";s:2:"WX";s:3:"556";s:1:"N";s:14:"guillemotright";s:1:"B";a:4:{i:0;s:2:"97";i:1;s:3:"108";i:2;s:3:"459";i:3;s:3:"446";}}i:188;a:4:{s:1:"C";s:3:"188";s:2:"WX";s:4:"1000";s:1:"N";s:8:"ellipsis";s:1:"B";a:4:{i:0;s:3:"115";i:1;s:1:"0";i:2;s:3:"885";i:3;s:3:"106";}}s:8:"ellipsis";a:4:{s:1:"C";s:3:"188";s:2:"WX";s:4:"1000";s:1:"N";s:8:"ellipsis";s:1:"B";a:4:{i:0;s:3:"115";i:1;s:1:"0";i:2;s:3:"885";i:3;s:3:"106";}}i:189;a:4:{s:1:"C";s:3:"189";s:2:"WX";s:4:"1000";s:1:"N";s:11:"perthousand";s:1:"B";a:4:{i:0;s:1:"7";i:1;s:3:"-19";i:2;s:3:"994";i:3;s:3:"703";}}s:11:"perthousand";a:4:{s:1:"C";s:3:"189";s:2:"WX";s:4:"1000";s:1:"N";s:11:"perthousand";s:1:"B";a:4:{i:0;s:1:"7";i:1;s:3:"-19";i:2;s:3:"994";i:3;s:3:"703";}}i:191;a:4:{s:1:"C";s:3:"191";s:2:"WX";s:3:"611";s:1:"N";s:12:"questiondown";s:1:"B";a:4:{i:0;s:2:"91";i:1;s:4:"-201";i:2;s:3:"527";i:3;s:3:"525";}}s:12:"questiondown";a:4:{s:1:"C";s:3:"191";s:2:"WX";s:3:"611";s:1:"N";s:12:"questiondown";s:1:"B";a:4:{i:0;s:2:"91";i:1;s:4:"-201";i:2;s:3:"527";i:3;s:3:"525";}}i:193;a:4:{s:1:"C";s:3:"193";s:2:"WX";s:3:"333";s:1:"N";s:5:"grave";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:3:"593";i:2;s:3:"211";i:3;s:3:"734";}}s:5:"grave";a:4:{s:1:"C";s:3:"193";s:2:"WX";s:3:"333";s:1:"N";s:5:"grave";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:3:"593";i:2;s:3:"211";i:3;s:3:"734";}}i:194;a:4:{s:1:"C";s:3:"194";s:2:"WX";s:3:"333";s:1:"N";s:5:"acute";s:1:"B";a:4:{i:0;s:3:"122";i:1;s:3:"593";i:2;s:3:"319";i:3;s:3:"734";}}s:5:"acute";a:4:{s:1:"C";s:3:"194";s:2:"WX";s:3:"333";s:1:"N";s:5:"acute";s:1:"B";a:4:{i:0;s:3:"122";i:1;s:3:"593";i:2;s:3:"319";i:3;s:3:"734";}}i:195;a:4:{s:1:"C";s:3:"195";s:2:"WX";s:3:"333";s:1:"N";s:10:"circumflex";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:3:"593";i:2;s:3:"312";i:3;s:3:"734";}}s:10:"circumflex";a:4:{s:1:"C";s:3:"195";s:2:"WX";s:3:"333";s:1:"N";s:10:"circumflex";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:3:"593";i:2;s:3:"312";i:3;s:3:"734";}}i:196;a:4:{s:1:"C";s:3:"196";s:2:"WX";s:3:"333";s:1:"N";s:5:"tilde";s:1:"B";a:4:{i:0;s:2:"-4";i:1;s:3:"606";i:2;s:3:"337";i:3;s:3:"722";}}s:5:"tilde";a:4:{s:1:"C";s:3:"196";s:2:"WX";s:3:"333";s:1:"N";s:5:"tilde";s:1:"B";a:4:{i:0;s:2:"-4";i:1;s:3:"606";i:2;s:3:"337";i:3;s:3:"722";}}i:197;a:4:{s:1:"C";s:3:"197";s:2:"WX";s:3:"333";s:1:"N";s:6:"macron";s:1:"B";a:4:{i:0;s:2:"10";i:1;s:3:"627";i:2;s:3:"323";i:3;s:3:"684";}}s:6:"macron";a:4:{s:1:"C";s:3:"197";s:2:"WX";s:3:"333";s:1:"N";s:6:"macron";s:1:"B";a:4:{i:0;s:2:"10";i:1;s:3:"627";i:2;s:3:"323";i:3;s:3:"684";}}i:198;a:4:{s:1:"C";s:3:"198";s:2:"WX";s:3:"333";s:1:"N";s:5:"breve";s:1:"B";a:4:{i:0;s:2:"13";i:1;s:3:"595";i:2;s:3:"321";i:3;s:3:"731";}}s:5:"breve";a:4:{s:1:"C";s:3:"198";s:2:"WX";s:3:"333";s:1:"N";s:5:"breve";s:1:"B";a:4:{i:0;s:2:"13";i:1;s:3:"595";i:2;s:3:"321";i:3;s:3:"731";}}i:199;a:4:{s:1:"C";s:3:"199";s:2:"WX";s:3:"333";s:1:"N";s:9:"dotaccent";s:1:"B";a:4:{i:0;s:3:"121";i:1;s:3:"604";i:2;s:3:"212";i:3;s:3:"706";}}s:9:"dotaccent";a:4:{s:1:"C";s:3:"199";s:2:"WX";s:3:"333";s:1:"N";s:9:"dotaccent";s:1:"B";a:4:{i:0;s:3:"121";i:1;s:3:"604";i:2;s:3:"212";i:3;s:3:"706";}}i:200;a:4:{s:1:"C";s:3:"200";s:2:"WX";s:3:"333";s:1:"N";s:8:"dieresis";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:3:"604";i:2;s:3:"293";i:3;s:3:"706";}}s:8:"dieresis";a:4:{s:1:"C";s:3:"200";s:2:"WX";s:3:"333";s:1:"N";s:8:"dieresis";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:3:"604";i:2;s:3:"293";i:3;s:3:"706";}}i:202;a:4:{s:1:"C";s:3:"202";s:2:"WX";s:3:"333";s:1:"N";s:4:"ring";s:1:"B";a:4:{i:0;s:2:"75";i:1;s:3:"572";i:2;s:3:"259";i:3;s:3:"756";}}s:4:"ring";a:4:{s:1:"C";s:3:"202";s:2:"WX";s:3:"333";s:1:"N";s:4:"ring";s:1:"B";a:4:{i:0;s:2:"75";i:1;s:3:"572";i:2;s:3:"259";i:3;s:3:"756";}}i:203;a:4:{s:1:"C";s:3:"203";s:2:"WX";s:3:"333";s:1:"N";s:7:"cedilla";s:1:"B";a:4:{i:0;s:2:"45";i:1;s:4:"-225";i:2;s:3:"259";i:3;s:1:"0";}}s:7:"cedilla";a:4:{s:1:"C";s:3:"203";s:2:"WX";s:3:"333";s:1:"N";s:7:"cedilla";s:1:"B";a:4:{i:0;s:2:"45";i:1;s:4:"-225";i:2;s:3:"259";i:3;s:1:"0";}}i:205;a:4:{s:1:"C";s:3:"205";s:2:"WX";s:3:"333";s:1:"N";s:12:"hungarumlaut";s:1:"B";a:4:{i:0;s:2:"31";i:1;s:3:"593";i:2;s:3:"409";i:3;s:3:"734";}}s:12:"hungarumlaut";a:4:{s:1:"C";s:3:"205";s:2:"WX";s:3:"333";s:1:"N";s:12:"hungarumlaut";s:1:"B";a:4:{i:0;s:2:"31";i:1;s:3:"593";i:2;s:3:"409";i:3;s:3:"734";}}i:206;a:4:{s:1:"C";s:3:"206";s:2:"WX";s:3:"333";s:1:"N";s:6:"ogonek";s:1:"B";a:4:{i:0;s:2:"73";i:1;s:4:"-225";i:2;s:3:"287";i:3;s:1:"0";}}s:6:"ogonek";a:4:{s:1:"C";s:3:"206";s:2:"WX";s:3:"333";s:1:"N";s:6:"ogonek";s:1:"B";a:4:{i:0;s:2:"73";i:1;s:4:"-225";i:2;s:3:"287";i:3;s:1:"0";}}i:207;a:4:{s:1:"C";s:3:"207";s:2:"WX";s:3:"333";s:1:"N";s:5:"caron";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:3:"593";i:2;s:3:"312";i:3;s:3:"734";}}s:5:"caron";a:4:{s:1:"C";s:3:"207";s:2:"WX";s:3:"333";s:1:"N";s:5:"caron";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:3:"593";i:2;s:3:"312";i:3;s:3:"734";}}i:208;a:4:{s:1:"C";s:3:"208";s:2:"WX";s:4:"1000";s:1:"N";s:6:"emdash";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:3:"240";i:2;s:4:"1000";i:3;s:3:"313";}}s:6:"emdash";a:4:{s:1:"C";s:3:"208";s:2:"WX";s:4:"1000";s:1:"N";s:6:"emdash";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:3:"240";i:2;s:4:"1000";i:3;s:3:"313";}}i:225;a:4:{s:1:"C";s:3:"225";s:2:"WX";s:4:"1000";s:1:"N";s:2:"AE";s:1:"B";a:4:{i:0;s:1:"8";i:1;s:1:"0";i:2;s:3:"951";i:3;s:3:"718";}}s:2:"AE";a:4:{s:1:"C";s:3:"225";s:2:"WX";s:4:"1000";s:1:"N";s:2:"AE";s:1:"B";a:4:{i:0;s:1:"8";i:1;s:1:"0";i:2;s:3:"951";i:3;s:3:"718";}}i:227;a:4:{s:1:"C";s:3:"227";s:2:"WX";s:3:"370";s:1:"N";s:11:"ordfeminine";s:1:"B";a:4:{i:0;s:2:"24";i:1;s:3:"405";i:2;s:3:"346";i:3;s:3:"737";}}s:11:"ordfeminine";a:4:{s:1:"C";s:3:"227";s:2:"WX";s:3:"370";s:1:"N";s:11:"ordfeminine";s:1:"B";a:4:{i:0;s:2:"24";i:1;s:3:"405";i:2;s:3:"346";i:3;s:3:"737";}}i:232;a:4:{s:1:"C";s:3:"232";s:2:"WX";s:3:"556";s:1:"N";s:6:"Lslash";s:1:"B";a:4:{i:0;s:3:"-20";i:1;s:1:"0";i:2;s:3:"537";i:3;s:3:"718";}}s:6:"Lslash";a:4:{s:1:"C";s:3:"232";s:2:"WX";s:3:"556";s:1:"N";s:6:"Lslash";s:1:"B";a:4:{i:0;s:3:"-20";i:1;s:1:"0";i:2;s:3:"537";i:3;s:3:"718";}}i:233;a:4:{s:1:"C";s:3:"233";s:2:"WX";s:3:"778";s:1:"N";s:6:"Oslash";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:3:"-19";i:2;s:3:"740";i:3;s:3:"737";}}s:6:"Oslash";a:4:{s:1:"C";s:3:"233";s:2:"WX";s:3:"778";s:1:"N";s:6:"Oslash";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:3:"-19";i:2;s:3:"740";i:3;s:3:"737";}}i:234;a:4:{s:1:"C";s:3:"234";s:2:"WX";s:4:"1000";s:1:"N";s:2:"OE";s:1:"B";a:4:{i:0;s:2:"36";i:1;s:3:"-19";i:2;s:3:"965";i:3;s:3:"737";}}s:2:"OE";a:4:{s:1:"C";s:3:"234";s:2:"WX";s:4:"1000";s:1:"N";s:2:"OE";s:1:"B";a:4:{i:0;s:2:"36";i:1;s:3:"-19";i:2;s:3:"965";i:3;s:3:"737";}}i:235;a:4:{s:1:"C";s:3:"235";s:2:"WX";s:3:"365";s:1:"N";s:12:"ordmasculine";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"405";i:2;s:3:"341";i:3;s:3:"737";}}s:12:"ordmasculine";a:4:{s:1:"C";s:3:"235";s:2:"WX";s:3:"365";s:1:"N";s:12:"ordmasculine";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"405";i:2;s:3:"341";i:3;s:3:"737";}}i:241;a:4:{s:1:"C";s:3:"241";s:2:"WX";s:3:"889";s:1:"N";s:2:"ae";s:1:"B";a:4:{i:0;s:2:"36";i:1;s:3:"-15";i:2;s:3:"847";i:3;s:3:"538";}}s:2:"ae";a:4:{s:1:"C";s:3:"241";s:2:"WX";s:3:"889";s:1:"N";s:2:"ae";s:1:"B";a:4:{i:0;s:2:"36";i:1;s:3:"-15";i:2;s:3:"847";i:3;s:3:"538";}}i:245;a:4:{s:1:"C";s:3:"245";s:2:"WX";s:3:"278";s:1:"N";s:8:"dotlessi";s:1:"B";a:4:{i:0;s:2:"95";i:1;s:1:"0";i:2;s:3:"183";i:3;s:3:"523";}}s:8:"dotlessi";a:4:{s:1:"C";s:3:"245";s:2:"WX";s:3:"278";s:1:"N";s:8:"dotlessi";s:1:"B";a:4:{i:0;s:2:"95";i:1;s:1:"0";i:2;s:3:"183";i:3;s:3:"523";}}i:248;a:4:{s:1:"C";s:3:"248";s:2:"WX";s:3:"222";s:1:"N";s:6:"lslash";s:1:"B";a:4:{i:0;s:3:"-20";i:1;s:1:"0";i:2;s:3:"242";i:3;s:3:"718";}}s:6:"lslash";a:4:{s:1:"C";s:3:"248";s:2:"WX";s:3:"222";s:1:"N";s:6:"lslash";s:1:"B";a:4:{i:0;s:3:"-20";i:1;s:1:"0";i:2;s:3:"242";i:3;s:3:"718";}}i:249;a:4:{s:1:"C";s:3:"249";s:2:"WX";s:3:"611";s:1:"N";s:6:"oslash";s:1:"B";a:4:{i:0;s:2:"28";i:1;s:3:"-22";i:2;s:3:"537";i:3;s:3:"545";}}s:6:"oslash";a:4:{s:1:"C";s:3:"249";s:2:"WX";s:3:"611";s:1:"N";s:6:"oslash";s:1:"B";a:4:{i:0;s:2:"28";i:1;s:3:"-22";i:2;s:3:"537";i:3;s:3:"545";}}i:250;a:4:{s:1:"C";s:3:"250";s:2:"WX";s:3:"944";s:1:"N";s:2:"oe";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-15";i:2;s:3:"902";i:3;s:3:"538";}}s:2:"oe";a:4:{s:1:"C";s:3:"250";s:2:"WX";s:3:"944";s:1:"N";s:2:"oe";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-15";i:2;s:3:"902";i:3;s:3:"538";}}i:251;a:4:{s:1:"C";s:3:"251";s:2:"WX";s:3:"611";s:1:"N";s:10:"germandbls";s:1:"B";a:4:{i:0;s:2:"67";i:1;s:3:"-15";i:2;s:3:"571";i:3;s:3:"728";}}s:10:"germandbls";a:4:{s:1:"C";s:3:"251";s:2:"WX";s:3:"611";s:1:"N";s:10:"germandbls";s:1:"B";a:4:{i:0;s:2:"67";i:1;s:3:"-15";i:2;s:3:"571";i:3;s:3:"728";}}s:9:"Idieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:9:"Idieresis";s:1:"B";a:4:{i:0;s:2:"13";i:1;s:1:"0";i:2;s:3:"266";i:3;s:3:"901";}}s:6:"eacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"eacute";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:3:"-15";i:2;s:3:"516";i:3;s:3:"734";}}s:6:"abreve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"abreve";s:1:"B";a:4:{i:0;s:2:"36";i:1;s:3:"-15";i:2;s:3:"530";i:3;s:3:"731";}}s:13:"uhungarumlaut";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:13:"uhungarumlaut";s:1:"B";a:4:{i:0;s:2:"68";i:1;s:3:"-15";i:2;s:3:"521";i:3;s:3:"734";}}s:6:"ecaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"ecaron";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:3:"-15";i:2;s:3:"516";i:3;s:3:"734";}}s:9:"Ydieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:9:"Ydieresis";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:1:"0";i:2;s:3:"653";i:3;s:3:"901";}}s:6:"divide";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"584";s:1:"N";s:6:"divide";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:3:"-19";i:2;s:3:"545";i:3;s:3:"524";}}s:6:"Yacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Yacute";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:1:"0";i:2;s:3:"653";i:3;s:3:"929";}}s:11:"Acircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:11:"Acircumflex";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:1:"0";i:2;s:3:"654";i:3;s:3:"929";}}s:6:"aacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"aacute";s:1:"B";a:4:{i:0;s:2:"36";i:1;s:3:"-15";i:2;s:3:"530";i:3;s:3:"734";}}s:11:"Ucircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:11:"Ucircumflex";s:1:"B";a:4:{i:0;s:2:"79";i:1;s:3:"-19";i:2;s:3:"644";i:3;s:3:"929";}}s:6:"yacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"yacute";s:1:"B";a:4:{i:0;s:2:"11";i:1;s:4:"-214";i:2;s:3:"489";i:3;s:3:"734";}}s:12:"scommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:12:"scommaaccent";s:1:"B";a:4:{i:0;s:2:"32";i:1;s:4:"-225";i:2;s:3:"464";i:3;s:3:"538";}}s:11:"ecircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:11:"ecircumflex";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:3:"-15";i:2;s:3:"516";i:3;s:3:"734";}}s:5:"Uring";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:5:"Uring";s:1:"B";a:4:{i:0;s:2:"79";i:1;s:3:"-19";i:2;s:3:"644";i:3;s:3:"931";}}s:9:"Udieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:9:"Udieresis";s:1:"B";a:4:{i:0;s:2:"79";i:1;s:3:"-19";i:2;s:3:"644";i:3;s:3:"901";}}s:7:"aogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:7:"aogonek";s:1:"B";a:4:{i:0;s:2:"36";i:1;s:4:"-220";i:2;s:3:"547";i:3;s:3:"538";}}s:6:"Uacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Uacute";s:1:"B";a:4:{i:0;s:2:"79";i:1;s:3:"-19";i:2;s:3:"644";i:3;s:3:"929";}}s:7:"uogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:7:"uogonek";s:1:"B";a:4:{i:0;s:2:"68";i:1;s:4:"-225";i:2;s:3:"519";i:3;s:3:"523";}}s:9:"Edieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:9:"Edieresis";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:1:"0";i:2;s:3:"616";i:3;s:3:"901";}}s:6:"Dcroat";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Dcroat";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:1:"0";i:2;s:3:"674";i:3;s:3:"718";}}s:11:"commaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"250";s:1:"N";s:11:"commaaccent";s:1:"B";a:4:{i:0;s:2:"87";i:1;s:4:"-225";i:2;s:3:"181";i:3;s:3:"-40";}}s:9:"copyright";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"737";s:1:"N";s:9:"copyright";s:1:"B";a:4:{i:0;s:3:"-14";i:1;s:3:"-19";i:2;s:3:"752";i:3;s:3:"737";}}s:7:"Emacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:7:"Emacron";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:1:"0";i:2;s:3:"616";i:3;s:3:"879";}}s:6:"ccaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"ccaron";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:3:"-15";i:2;s:3:"477";i:3;s:3:"734";}}s:5:"aring";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:5:"aring";s:1:"B";a:4:{i:0;s:2:"36";i:1;s:3:"-15";i:2;s:3:"530";i:3;s:3:"756";}}s:12:"Ncommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:12:"Ncommaaccent";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:4:"-225";i:2;s:3:"646";i:3;s:3:"718";}}s:6:"lacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"222";s:1:"N";s:6:"lacute";s:1:"B";a:4:{i:0;s:2:"67";i:1;s:1:"0";i:2;s:3:"264";i:3;s:3:"929";}}s:6:"agrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"agrave";s:1:"B";a:4:{i:0;s:2:"36";i:1;s:3:"-15";i:2;s:3:"530";i:3;s:3:"734";}}s:12:"Tcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:12:"Tcommaaccent";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:4:"-225";i:2;s:3:"597";i:3;s:3:"718";}}s:6:"Cacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Cacute";s:1:"B";a:4:{i:0;s:2:"44";i:1;s:3:"-19";i:2;s:3:"681";i:3;s:3:"929";}}s:6:"atilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"atilde";s:1:"B";a:4:{i:0;s:2:"36";i:1;s:3:"-15";i:2;s:3:"530";i:3;s:3:"722";}}s:10:"Edotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:10:"Edotaccent";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:1:"0";i:2;s:3:"616";i:3;s:3:"901";}}s:6:"scaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"scaron";s:1:"B";a:4:{i:0;s:2:"32";i:1;s:3:"-15";i:2;s:3:"464";i:3;s:3:"734";}}s:8:"scedilla";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:8:"scedilla";s:1:"B";a:4:{i:0;s:2:"32";i:1;s:4:"-225";i:2;s:3:"464";i:3;s:3:"538";}}s:6:"iacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:6:"iacute";s:1:"B";a:4:{i:0;s:2:"95";i:1;s:1:"0";i:2;s:3:"292";i:3;s:3:"734";}}s:7:"lozenge";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"471";s:1:"N";s:7:"lozenge";s:1:"B";a:4:{i:0;s:2:"10";i:1;s:1:"0";i:2;s:3:"462";i:3;s:3:"728";}}s:6:"Rcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Rcaron";s:1:"B";a:4:{i:0;s:2:"88";i:1;s:1:"0";i:2;s:3:"684";i:3;s:3:"929";}}s:12:"Gcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"778";s:1:"N";s:12:"Gcommaaccent";s:1:"B";a:4:{i:0;s:2:"48";i:1;s:4:"-225";i:2;s:3:"704";i:3;s:3:"737";}}s:11:"ucircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:11:"ucircumflex";s:1:"B";a:4:{i:0;s:2:"68";i:1;s:3:"-15";i:2;s:3:"489";i:3;s:3:"734";}}s:11:"acircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:11:"acircumflex";s:1:"B";a:4:{i:0;s:2:"36";i:1;s:3:"-15";i:2;s:3:"530";i:3;s:3:"734";}}s:7:"Amacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:7:"Amacron";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:1:"0";i:2;s:3:"654";i:3;s:3:"879";}}s:6:"rcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"333";s:1:"N";s:6:"rcaron";s:1:"B";a:4:{i:0;s:2:"61";i:1;s:1:"0";i:2;s:3:"352";i:3;s:3:"734";}}s:8:"ccedilla";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:8:"ccedilla";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:4:"-225";i:2;s:3:"477";i:3;s:3:"538";}}s:10:"Zdotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:10:"Zdotaccent";s:1:"B";a:4:{i:0;s:2:"23";i:1;s:1:"0";i:2;s:3:"588";i:3;s:3:"901";}}s:5:"Thorn";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:5:"Thorn";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:1:"0";i:2;s:3:"622";i:3;s:3:"718";}}s:7:"Omacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"778";s:1:"N";s:7:"Omacron";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:3:"-19";i:2;s:3:"739";i:3;s:3:"879";}}s:6:"Racute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Racute";s:1:"B";a:4:{i:0;s:2:"88";i:1;s:1:"0";i:2;s:3:"684";i:3;s:3:"929";}}s:6:"Sacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Sacute";s:1:"B";a:4:{i:0;s:2:"49";i:1;s:3:"-19";i:2;s:3:"620";i:3;s:3:"929";}}s:6:"dcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"643";s:1:"N";s:6:"dcaron";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-15";i:2;s:3:"655";i:3;s:3:"718";}}s:7:"Umacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:7:"Umacron";s:1:"B";a:4:{i:0;s:2:"79";i:1;s:3:"-19";i:2;s:3:"644";i:3;s:3:"879";}}s:5:"uring";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:5:"uring";s:1:"B";a:4:{i:0;s:2:"68";i:1;s:3:"-15";i:2;s:3:"489";i:3;s:3:"756";}}s:13:"threesuperior";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"333";s:1:"N";s:13:"threesuperior";s:1:"B";a:4:{i:0;s:1:"5";i:1;s:3:"270";i:2;s:3:"325";i:3;s:3:"703";}}s:6:"Ograve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"778";s:1:"N";s:6:"Ograve";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:3:"-19";i:2;s:3:"739";i:3;s:3:"929";}}s:6:"Agrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Agrave";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:1:"0";i:2;s:3:"654";i:3;s:3:"929";}}s:6:"Abreve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Abreve";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:1:"0";i:2;s:3:"654";i:3;s:3:"926";}}s:8:"multiply";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"584";s:1:"N";s:8:"multiply";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:1:"0";i:2;s:3:"545";i:3;s:3:"506";}}s:6:"uacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"uacute";s:1:"B";a:4:{i:0;s:2:"68";i:1;s:3:"-15";i:2;s:3:"489";i:3;s:3:"734";}}s:6:"Tcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"Tcaron";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:1:"0";i:2;s:3:"597";i:3;s:3:"929";}}s:11:"partialdiff";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"476";s:1:"N";s:11:"partialdiff";s:1:"B";a:4:{i:0;s:2:"13";i:1;s:3:"-38";i:2;s:3:"463";i:3;s:3:"714";}}s:9:"ydieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:9:"ydieresis";s:1:"B";a:4:{i:0;s:2:"11";i:1;s:4:"-214";i:2;s:3:"489";i:3;s:3:"706";}}s:6:"Nacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Nacute";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"646";i:3;s:3:"929";}}s:11:"icircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:11:"icircumflex";s:1:"B";a:4:{i:0;s:2:"-6";i:1;s:1:"0";i:2;s:3:"285";i:3;s:3:"734";}}s:11:"Ecircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:11:"Ecircumflex";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:1:"0";i:2;s:3:"616";i:3;s:3:"929";}}s:9:"adieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:9:"adieresis";s:1:"B";a:4:{i:0;s:2:"36";i:1;s:3:"-15";i:2;s:3:"530";i:3;s:3:"706";}}s:9:"edieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:9:"edieresis";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:3:"-15";i:2;s:3:"516";i:3;s:3:"706";}}s:6:"cacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"cacute";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:3:"-15";i:2;s:3:"477";i:3;s:3:"734";}}s:6:"nacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"nacute";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:1:"0";i:2;s:3:"491";i:3;s:3:"734";}}s:7:"umacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:7:"umacron";s:1:"B";a:4:{i:0;s:2:"68";i:1;s:3:"-15";i:2;s:3:"489";i:3;s:3:"684";}}s:6:"Ncaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Ncaron";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"646";i:3;s:3:"929";}}s:6:"Iacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:6:"Iacute";s:1:"B";a:4:{i:0;s:2:"91";i:1;s:1:"0";i:2;s:3:"292";i:3;s:3:"929";}}s:9:"plusminus";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"584";s:1:"N";s:9:"plusminus";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:1:"0";i:2;s:3:"545";i:3;s:3:"506";}}s:9:"brokenbar";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"260";s:1:"N";s:9:"brokenbar";s:1:"B";a:4:{i:0;s:2:"94";i:1;s:4:"-150";i:2;s:3:"167";i:3;s:3:"700";}}s:10:"registered";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"737";s:1:"N";s:10:"registered";s:1:"B";a:4:{i:0;s:3:"-14";i:1;s:3:"-19";i:2;s:3:"752";i:3;s:3:"737";}}s:6:"Gbreve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"778";s:1:"N";s:6:"Gbreve";s:1:"B";a:4:{i:0;s:2:"48";i:1;s:3:"-19";i:2;s:3:"704";i:3;s:3:"926";}}s:10:"Idotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:10:"Idotaccent";s:1:"B";a:4:{i:0;s:2:"91";i:1;s:1:"0";i:2;s:3:"188";i:3;s:3:"901";}}s:9:"summation";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"summation";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:3:"-10";i:2;s:3:"586";i:3;s:3:"706";}}s:6:"Egrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Egrave";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:1:"0";i:2;s:3:"616";i:3;s:3:"929";}}s:6:"racute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"333";s:1:"N";s:6:"racute";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:1:"0";i:2;s:3:"332";i:3;s:3:"734";}}s:7:"omacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:7:"omacron";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"521";i:3;s:3:"684";}}s:6:"Zacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"Zacute";s:1:"B";a:4:{i:0;s:2:"23";i:1;s:1:"0";i:2;s:3:"588";i:3;s:3:"929";}}s:6:"Zcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"Zcaron";s:1:"B";a:4:{i:0;s:2:"23";i:1;s:1:"0";i:2;s:3:"588";i:3;s:3:"929";}}s:12:"greaterequal";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"549";s:1:"N";s:12:"greaterequal";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:1:"0";i:2;s:3:"523";i:3;s:3:"674";}}s:3:"Eth";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:3:"Eth";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:1:"0";i:2;s:3:"674";i:3;s:3:"718";}}s:8:"Ccedilla";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:8:"Ccedilla";s:1:"B";a:4:{i:0;s:2:"44";i:1;s:4:"-225";i:2;s:3:"681";i:3;s:3:"737";}}s:12:"lcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"222";s:1:"N";s:12:"lcommaaccent";s:1:"B";a:4:{i:0;s:2:"67";i:1;s:4:"-225";i:2;s:3:"167";i:3;s:3:"718";}}s:6:"tcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"317";s:1:"N";s:6:"tcaron";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:2:"-7";i:2;s:3:"329";i:3;s:3:"808";}}s:7:"eogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:7:"eogonek";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:4:"-225";i:2;s:3:"516";i:3;s:3:"538";}}s:7:"Uogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:7:"Uogonek";s:1:"B";a:4:{i:0;s:2:"79";i:1;s:4:"-225";i:2;s:3:"644";i:3;s:3:"718";}}s:6:"Aacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Aacute";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:1:"0";i:2;s:3:"654";i:3;s:3:"929";}}s:9:"Adieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:9:"Adieresis";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:1:"0";i:2;s:3:"654";i:3;s:3:"901";}}s:6:"egrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"egrave";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:3:"-15";i:2;s:3:"516";i:3;s:3:"734";}}s:6:"zacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"zacute";s:1:"B";a:4:{i:0;s:2:"31";i:1;s:1:"0";i:2;s:3:"469";i:3;s:3:"734";}}s:7:"iogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"222";s:1:"N";s:7:"iogonek";s:1:"B";a:4:{i:0;s:3:"-31";i:1;s:4:"-225";i:2;s:3:"183";i:3;s:3:"718";}}s:6:"Oacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"778";s:1:"N";s:6:"Oacute";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:3:"-19";i:2;s:3:"739";i:3;s:3:"929";}}s:6:"oacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"oacute";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"521";i:3;s:3:"734";}}s:7:"amacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:7:"amacron";s:1:"B";a:4:{i:0;s:2:"36";i:1;s:3:"-15";i:2;s:3:"530";i:3;s:3:"684";}}s:6:"sacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"sacute";s:1:"B";a:4:{i:0;s:2:"32";i:1;s:3:"-15";i:2;s:3:"464";i:3;s:3:"734";}}s:9:"idieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:9:"idieresis";s:1:"B";a:4:{i:0;s:2:"13";i:1;s:1:"0";i:2;s:3:"266";i:3;s:3:"706";}}s:11:"Ocircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"778";s:1:"N";s:11:"Ocircumflex";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:3:"-19";i:2;s:3:"739";i:3;s:3:"929";}}s:6:"Ugrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Ugrave";s:1:"B";a:4:{i:0;s:2:"79";i:1;s:3:"-19";i:2;s:3:"644";i:3;s:3:"929";}}s:5:"Delta";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"612";s:1:"N";s:5:"Delta";s:1:"B";a:4:{i:0;s:1:"6";i:1;s:1:"0";i:2;s:3:"608";i:3;s:3:"688";}}s:5:"thorn";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:5:"thorn";s:1:"B";a:4:{i:0;s:2:"58";i:1;s:4:"-207";i:2;s:3:"517";i:3;s:3:"718";}}s:11:"twosuperior";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"333";s:1:"N";s:11:"twosuperior";s:1:"B";a:4:{i:0;s:1:"4";i:1;s:3:"281";i:2;s:3:"323";i:3;s:3:"703";}}s:9:"Odieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"778";s:1:"N";s:9:"Odieresis";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:3:"-19";i:2;s:3:"739";i:3;s:3:"901";}}s:2:"mu";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:2:"mu";s:1:"B";a:4:{i:0;s:2:"68";i:1;s:4:"-207";i:2;s:3:"489";i:3;s:3:"523";}}s:6:"igrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:6:"igrave";s:1:"B";a:4:{i:0;s:3:"-13";i:1;s:1:"0";i:2;s:3:"184";i:3;s:3:"734";}}s:13:"ohungarumlaut";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:13:"ohungarumlaut";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"521";i:3;s:3:"734";}}s:7:"Eogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:7:"Eogonek";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:4:"-220";i:2;s:3:"633";i:3;s:3:"718";}}s:6:"dcroat";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"dcroat";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-15";i:2;s:3:"550";i:3;s:3:"718";}}s:13:"threequarters";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"834";s:1:"N";s:13:"threequarters";s:1:"B";a:4:{i:0;s:2:"45";i:1;s:3:"-19";i:2;s:3:"810";i:3;s:3:"703";}}s:8:"Scedilla";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:8:"Scedilla";s:1:"B";a:4:{i:0;s:2:"49";i:1;s:4:"-225";i:2;s:3:"620";i:3;s:3:"737";}}s:6:"lcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"299";s:1:"N";s:6:"lcaron";s:1:"B";a:4:{i:0;s:2:"67";i:1;s:1:"0";i:2;s:3:"311";i:3;s:3:"718";}}s:12:"Kcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:12:"Kcommaaccent";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:4:"-225";i:2;s:3:"663";i:3;s:3:"718";}}s:6:"Lacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"Lacute";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"537";i:3;s:3:"929";}}s:9:"trademark";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:4:"1000";s:1:"N";s:9:"trademark";s:1:"B";a:4:{i:0;s:2:"46";i:1;s:3:"306";i:2;s:3:"903";i:3;s:3:"718";}}s:10:"edotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:10:"edotaccent";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:3:"-15";i:2;s:3:"516";i:3;s:3:"706";}}s:6:"Igrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:6:"Igrave";s:1:"B";a:4:{i:0;s:3:"-13";i:1;s:1:"0";i:2;s:3:"188";i:3;s:3:"929";}}s:7:"Imacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:7:"Imacron";s:1:"B";a:4:{i:0;s:3:"-17";i:1;s:1:"0";i:2;s:3:"296";i:3;s:3:"879";}}s:6:"Lcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"Lcaron";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"537";i:3;s:3:"718";}}s:7:"onehalf";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"834";s:1:"N";s:7:"onehalf";s:1:"B";a:4:{i:0;s:2:"43";i:1;s:3:"-19";i:2;s:3:"773";i:3;s:3:"703";}}s:9:"lessequal";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"549";s:1:"N";s:9:"lessequal";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:1:"0";i:2;s:3:"523";i:3;s:3:"674";}}s:11:"ocircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:11:"ocircumflex";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"521";i:3;s:3:"734";}}s:6:"ntilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"ntilde";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:1:"0";i:2;s:3:"491";i:3;s:3:"722";}}s:13:"Uhungarumlaut";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:13:"Uhungarumlaut";s:1:"B";a:4:{i:0;s:2:"79";i:1;s:3:"-19";i:2;s:3:"644";i:3;s:3:"929";}}s:6:"Eacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Eacute";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:1:"0";i:2;s:3:"616";i:3;s:3:"929";}}s:7:"emacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:7:"emacron";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:3:"-15";i:2;s:3:"516";i:3;s:3:"684";}}s:6:"gbreve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"gbreve";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:4:"-220";i:2;s:3:"499";i:3;s:3:"731";}}s:10:"onequarter";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"834";s:1:"N";s:10:"onequarter";s:1:"B";a:4:{i:0;s:2:"73";i:1;s:3:"-19";i:2;s:3:"756";i:3;s:3:"703";}}s:6:"Scaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Scaron";s:1:"B";a:4:{i:0;s:2:"49";i:1;s:3:"-19";i:2;s:3:"620";i:3;s:3:"929";}}s:12:"Scommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:12:"Scommaaccent";s:1:"B";a:4:{i:0;s:2:"49";i:1;s:4:"-225";i:2;s:3:"620";i:3;s:3:"737";}}s:13:"Ohungarumlaut";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"778";s:1:"N";s:13:"Ohungarumlaut";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:3:"-19";i:2;s:3:"739";i:3;s:3:"929";}}s:6:"degree";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"400";s:1:"N";s:6:"degree";s:1:"B";a:4:{i:0;s:2:"54";i:1;s:3:"411";i:2;s:3:"346";i:3;s:3:"703";}}s:6:"ograve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"ograve";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"521";i:3;s:3:"734";}}s:6:"Ccaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Ccaron";s:1:"B";a:4:{i:0;s:2:"44";i:1;s:3:"-19";i:2;s:3:"681";i:3;s:3:"929";}}s:6:"ugrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"ugrave";s:1:"B";a:4:{i:0;s:2:"68";i:1;s:3:"-15";i:2;s:3:"489";i:3;s:3:"734";}}s:7:"radical";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"453";s:1:"N";s:7:"radical";s:1:"B";a:4:{i:0;s:2:"-4";i:1;s:3:"-80";i:2;s:3:"458";i:3;s:3:"762";}}s:6:"Dcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Dcaron";s:1:"B";a:4:{i:0;s:2:"81";i:1;s:1:"0";i:2;s:3:"674";i:3;s:3:"929";}}s:12:"rcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"333";s:1:"N";s:12:"rcommaaccent";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:4:"-225";i:2;s:3:"332";i:3;s:3:"538";}}s:6:"Ntilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Ntilde";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:1:"0";i:2;s:3:"646";i:3;s:3:"917";}}s:6:"otilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"otilde";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"521";i:3;s:3:"722";}}s:12:"Rcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:12:"Rcommaaccent";s:1:"B";a:4:{i:0;s:2:"88";i:1;s:4:"-225";i:2;s:3:"684";i:3;s:3:"718";}}s:12:"Lcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:12:"Lcommaaccent";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:4:"-225";i:2;s:3:"537";i:3;s:3:"718";}}s:6:"Atilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Atilde";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:1:"0";i:2;s:3:"654";i:3;s:3:"917";}}s:7:"Aogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:7:"Aogonek";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:4:"-225";i:2;s:3:"654";i:3;s:3:"718";}}s:5:"Aring";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:5:"Aring";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:1:"0";i:2;s:3:"654";i:3;s:3:"931";}}s:6:"Otilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"778";s:1:"N";s:6:"Otilde";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:3:"-19";i:2;s:3:"739";i:3;s:3:"917";}}s:10:"zdotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:10:"zdotaccent";s:1:"B";a:4:{i:0;s:2:"31";i:1;s:1:"0";i:2;s:3:"469";i:3;s:3:"706";}}s:6:"Ecaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Ecaron";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:1:"0";i:2;s:3:"616";i:3;s:3:"929";}}s:7:"Iogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:7:"Iogonek";s:1:"B";a:4:{i:0;s:2:"-3";i:1;s:4:"-225";i:2;s:3:"211";i:3;s:3:"718";}}s:12:"kcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:12:"kcommaaccent";s:1:"B";a:4:{i:0;s:2:"67";i:1;s:4:"-225";i:2;s:3:"501";i:3;s:3:"718";}}s:5:"minus";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"584";s:1:"N";s:5:"minus";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:3:"216";i:2;s:3:"545";i:3;s:3:"289";}}s:11:"Icircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:11:"Icircumflex";s:1:"B";a:4:{i:0;s:2:"-6";i:1;s:1:"0";i:2;s:3:"285";i:3;s:3:"929";}}s:6:"ncaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"ncaron";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:1:"0";i:2;s:3:"491";i:3;s:3:"734";}}s:12:"tcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:12:"tcommaaccent";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:4:"-225";i:2;s:3:"257";i:3;s:3:"669";}}s:10:"logicalnot";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"584";s:1:"N";s:10:"logicalnot";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:3:"108";i:2;s:3:"545";i:3;s:3:"390";}}s:9:"odieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:9:"odieresis";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"521";i:3;s:3:"706";}}s:9:"udieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:9:"udieresis";s:1:"B";a:4:{i:0;s:2:"68";i:1;s:3:"-15";i:2;s:3:"489";i:3;s:3:"706";}}s:8:"notequal";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"549";s:1:"N";s:8:"notequal";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:3:"-35";i:2;s:3:"537";i:3;s:3:"551";}}s:12:"gcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:12:"gcommaaccent";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:4:"-220";i:2;s:3:"499";i:3;s:3:"822";}}s:3:"eth";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:3:"eth";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-15";i:2;s:3:"522";i:3;s:3:"737";}}s:6:"zcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"zcaron";s:1:"B";a:4:{i:0;s:2:"31";i:1;s:1:"0";i:2;s:3:"469";i:3;s:3:"734";}}s:12:"ncommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:12:"ncommaaccent";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:4:"-225";i:2;s:3:"491";i:3;s:3:"538";}}s:11:"onesuperior";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"333";s:1:"N";s:11:"onesuperior";s:1:"B";a:4:{i:0;s:2:"43";i:1;s:3:"281";i:2;s:3:"222";i:3;s:3:"703";}}s:7:"imacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:7:"imacron";s:1:"B";a:4:{i:0;s:1:"5";i:1;s:1:"0";i:2;s:3:"272";i:3;s:3:"684";}}s:4:"Euro";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:4:"Euro";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:1:"0";i:2;s:1:"0";i:3;s:1:"0";}}}s:3:"KPX";a:138:{s:1:"A";a:48:{s:1:"C";s:3:"-30";s:6:"Cacute";s:3:"-30";s:6:"Ccaron";s:3:"-30";s:8:"Ccedilla";s:3:"-30";s:1:"G";s:3:"-30";s:6:"Gbreve";s:3:"-30";s:12:"Gcommaaccent";s:3:"-30";s:1:"O";s:3:"-30";s:6:"Oacute";s:3:"-30";s:11:"Ocircumflex";s:3:"-30";s:9:"Odieresis";s:3:"-30";s:6:"Ograve";s:3:"-30";s:13:"Ohungarumlaut";s:3:"-30";s:7:"Omacron";s:3:"-30";s:6:"Oslash";s:3:"-30";s:6:"Otilde";s:3:"-30";s:1:"Q";s:3:"-30";s:1:"T";s:4:"-120";s:6:"Tcaron";s:4:"-120";s:12:"Tcommaaccent";s:4:"-120";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:3:"-70";s:1:"W";s:3:"-50";s:1:"Y";s:4:"-100";s:6:"Yacute";s:4:"-100";s:9:"Ydieresis";s:4:"-100";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"v";s:3:"-40";s:1:"w";s:3:"-40";s:1:"y";s:3:"-40";s:6:"yacute";s:3:"-40";s:9:"ydieresis";s:3:"-40";}s:6:"Aacute";a:48:{s:1:"C";s:3:"-30";s:6:"Cacute";s:3:"-30";s:6:"Ccaron";s:3:"-30";s:8:"Ccedilla";s:3:"-30";s:1:"G";s:3:"-30";s:6:"Gbreve";s:3:"-30";s:12:"Gcommaaccent";s:3:"-30";s:1:"O";s:3:"-30";s:6:"Oacute";s:3:"-30";s:11:"Ocircumflex";s:3:"-30";s:9:"Odieresis";s:3:"-30";s:6:"Ograve";s:3:"-30";s:13:"Ohungarumlaut";s:3:"-30";s:7:"Omacron";s:3:"-30";s:6:"Oslash";s:3:"-30";s:6:"Otilde";s:3:"-30";s:1:"Q";s:3:"-30";s:1:"T";s:4:"-120";s:6:"Tcaron";s:4:"-120";s:12:"Tcommaaccent";s:4:"-120";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:3:"-70";s:1:"W";s:3:"-50";s:1:"Y";s:4:"-100";s:6:"Yacute";s:4:"-100";s:9:"Ydieresis";s:4:"-100";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"v";s:3:"-40";s:1:"w";s:3:"-40";s:1:"y";s:3:"-40";s:6:"yacute";s:3:"-40";s:9:"ydieresis";s:3:"-40";}s:6:"Abreve";a:48:{s:1:"C";s:3:"-30";s:6:"Cacute";s:3:"-30";s:6:"Ccaron";s:3:"-30";s:8:"Ccedilla";s:3:"-30";s:1:"G";s:3:"-30";s:6:"Gbreve";s:3:"-30";s:12:"Gcommaaccent";s:3:"-30";s:1:"O";s:3:"-30";s:6:"Oacute";s:3:"-30";s:11:"Ocircumflex";s:3:"-30";s:9:"Odieresis";s:3:"-30";s:6:"Ograve";s:3:"-30";s:13:"Ohungarumlaut";s:3:"-30";s:7:"Omacron";s:3:"-30";s:6:"Oslash";s:3:"-30";s:6:"Otilde";s:3:"-30";s:1:"Q";s:3:"-30";s:1:"T";s:4:"-120";s:6:"Tcaron";s:4:"-120";s:12:"Tcommaaccent";s:4:"-120";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:3:"-70";s:1:"W";s:3:"-50";s:1:"Y";s:4:"-100";s:6:"Yacute";s:4:"-100";s:9:"Ydieresis";s:4:"-100";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"v";s:3:"-40";s:1:"w";s:3:"-40";s:1:"y";s:3:"-40";s:6:"yacute";s:3:"-40";s:9:"ydieresis";s:3:"-40";}s:11:"Acircumflex";a:48:{s:1:"C";s:3:"-30";s:6:"Cacute";s:3:"-30";s:6:"Ccaron";s:3:"-30";s:8:"Ccedilla";s:3:"-30";s:1:"G";s:3:"-30";s:6:"Gbreve";s:3:"-30";s:12:"Gcommaaccent";s:3:"-30";s:1:"O";s:3:"-30";s:6:"Oacute";s:3:"-30";s:11:"Ocircumflex";s:3:"-30";s:9:"Odieresis";s:3:"-30";s:6:"Ograve";s:3:"-30";s:13:"Ohungarumlaut";s:3:"-30";s:7:"Omacron";s:3:"-30";s:6:"Oslash";s:3:"-30";s:6:"Otilde";s:3:"-30";s:1:"Q";s:3:"-30";s:1:"T";s:4:"-120";s:6:"Tcaron";s:4:"-120";s:12:"Tcommaaccent";s:4:"-120";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:3:"-70";s:1:"W";s:3:"-50";s:1:"Y";s:4:"-100";s:6:"Yacute";s:4:"-100";s:9:"Ydieresis";s:4:"-100";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"v";s:3:"-40";s:1:"w";s:3:"-40";s:1:"y";s:3:"-40";s:6:"yacute";s:3:"-40";s:9:"ydieresis";s:3:"-40";}s:9:"Adieresis";a:48:{s:1:"C";s:3:"-30";s:6:"Cacute";s:3:"-30";s:6:"Ccaron";s:3:"-30";s:8:"Ccedilla";s:3:"-30";s:1:"G";s:3:"-30";s:6:"Gbreve";s:3:"-30";s:12:"Gcommaaccent";s:3:"-30";s:1:"O";s:3:"-30";s:6:"Oacute";s:3:"-30";s:11:"Ocircumflex";s:3:"-30";s:9:"Odieresis";s:3:"-30";s:6:"Ograve";s:3:"-30";s:13:"Ohungarumlaut";s:3:"-30";s:7:"Omacron";s:3:"-30";s:6:"Oslash";s:3:"-30";s:6:"Otilde";s:3:"-30";s:1:"Q";s:3:"-30";s:1:"T";s:4:"-120";s:6:"Tcaron";s:4:"-120";s:12:"Tcommaaccent";s:4:"-120";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:3:"-70";s:1:"W";s:3:"-50";s:1:"Y";s:4:"-100";s:6:"Yacute";s:4:"-100";s:9:"Ydieresis";s:4:"-100";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"v";s:3:"-40";s:1:"w";s:3:"-40";s:1:"y";s:3:"-40";s:6:"yacute";s:3:"-40";s:9:"ydieresis";s:3:"-40";}s:6:"Agrave";a:48:{s:1:"C";s:3:"-30";s:6:"Cacute";s:3:"-30";s:6:"Ccaron";s:3:"-30";s:8:"Ccedilla";s:3:"-30";s:1:"G";s:3:"-30";s:6:"Gbreve";s:3:"-30";s:12:"Gcommaaccent";s:3:"-30";s:1:"O";s:3:"-30";s:6:"Oacute";s:3:"-30";s:11:"Ocircumflex";s:3:"-30";s:9:"Odieresis";s:3:"-30";s:6:"Ograve";s:3:"-30";s:13:"Ohungarumlaut";s:3:"-30";s:7:"Omacron";s:3:"-30";s:6:"Oslash";s:3:"-30";s:6:"Otilde";s:3:"-30";s:1:"Q";s:3:"-30";s:1:"T";s:4:"-120";s:6:"Tcaron";s:4:"-120";s:12:"Tcommaaccent";s:4:"-120";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:3:"-70";s:1:"W";s:3:"-50";s:1:"Y";s:4:"-100";s:6:"Yacute";s:4:"-100";s:9:"Ydieresis";s:4:"-100";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"v";s:3:"-40";s:1:"w";s:3:"-40";s:1:"y";s:3:"-40";s:6:"yacute";s:3:"-40";s:9:"ydieresis";s:3:"-40";}s:7:"Amacron";a:48:{s:1:"C";s:3:"-30";s:6:"Cacute";s:3:"-30";s:6:"Ccaron";s:3:"-30";s:8:"Ccedilla";s:3:"-30";s:1:"G";s:3:"-30";s:6:"Gbreve";s:3:"-30";s:12:"Gcommaaccent";s:3:"-30";s:1:"O";s:3:"-30";s:6:"Oacute";s:3:"-30";s:11:"Ocircumflex";s:3:"-30";s:9:"Odieresis";s:3:"-30";s:6:"Ograve";s:3:"-30";s:13:"Ohungarumlaut";s:3:"-30";s:7:"Omacron";s:3:"-30";s:6:"Oslash";s:3:"-30";s:6:"Otilde";s:3:"-30";s:1:"Q";s:3:"-30";s:1:"T";s:4:"-120";s:6:"Tcaron";s:4:"-120";s:12:"Tcommaaccent";s:4:"-120";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:3:"-70";s:1:"W";s:3:"-50";s:1:"Y";s:4:"-100";s:6:"Yacute";s:4:"-100";s:9:"Ydieresis";s:4:"-100";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"v";s:3:"-40";s:1:"w";s:3:"-40";s:1:"y";s:3:"-40";s:6:"yacute";s:3:"-40";s:9:"ydieresis";s:3:"-40";}s:7:"Aogonek";a:48:{s:1:"C";s:3:"-30";s:6:"Cacute";s:3:"-30";s:6:"Ccaron";s:3:"-30";s:8:"Ccedilla";s:3:"-30";s:1:"G";s:3:"-30";s:6:"Gbreve";s:3:"-30";s:12:"Gcommaaccent";s:3:"-30";s:1:"O";s:3:"-30";s:6:"Oacute";s:3:"-30";s:11:"Ocircumflex";s:3:"-30";s:9:"Odieresis";s:3:"-30";s:6:"Ograve";s:3:"-30";s:13:"Ohungarumlaut";s:3:"-30";s:7:"Omacron";s:3:"-30";s:6:"Oslash";s:3:"-30";s:6:"Otilde";s:3:"-30";s:1:"Q";s:3:"-30";s:1:"T";s:4:"-120";s:6:"Tcaron";s:4:"-120";s:12:"Tcommaaccent";s:4:"-120";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:3:"-70";s:1:"W";s:3:"-50";s:1:"Y";s:4:"-100";s:6:"Yacute";s:4:"-100";s:9:"Ydieresis";s:4:"-100";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"v";s:3:"-40";s:1:"w";s:3:"-40";s:1:"y";s:3:"-40";s:6:"yacute";s:3:"-40";s:9:"ydieresis";s:3:"-40";}s:5:"Aring";a:48:{s:1:"C";s:3:"-30";s:6:"Cacute";s:3:"-30";s:6:"Ccaron";s:3:"-30";s:8:"Ccedilla";s:3:"-30";s:1:"G";s:3:"-30";s:6:"Gbreve";s:3:"-30";s:12:"Gcommaaccent";s:3:"-30";s:1:"O";s:3:"-30";s:6:"Oacute";s:3:"-30";s:11:"Ocircumflex";s:3:"-30";s:9:"Odieresis";s:3:"-30";s:6:"Ograve";s:3:"-30";s:13:"Ohungarumlaut";s:3:"-30";s:7:"Omacron";s:3:"-30";s:6:"Oslash";s:3:"-30";s:6:"Otilde";s:3:"-30";s:1:"Q";s:3:"-30";s:1:"T";s:4:"-120";s:6:"Tcaron";s:4:"-120";s:12:"Tcommaaccent";s:4:"-120";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:3:"-70";s:1:"W";s:3:"-50";s:1:"Y";s:4:"-100";s:6:"Yacute";s:4:"-100";s:9:"Ydieresis";s:4:"-100";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"v";s:3:"-40";s:1:"w";s:3:"-40";s:1:"y";s:3:"-40";s:6:"yacute";s:3:"-40";s:9:"ydieresis";s:3:"-40";}s:6:"Atilde";a:48:{s:1:"C";s:3:"-30";s:6:"Cacute";s:3:"-30";s:6:"Ccaron";s:3:"-30";s:8:"Ccedilla";s:3:"-30";s:1:"G";s:3:"-30";s:6:"Gbreve";s:3:"-30";s:12:"Gcommaaccent";s:3:"-30";s:1:"O";s:3:"-30";s:6:"Oacute";s:3:"-30";s:11:"Ocircumflex";s:3:"-30";s:9:"Odieresis";s:3:"-30";s:6:"Ograve";s:3:"-30";s:13:"Ohungarumlaut";s:3:"-30";s:7:"Omacron";s:3:"-30";s:6:"Oslash";s:3:"-30";s:6:"Otilde";s:3:"-30";s:1:"Q";s:3:"-30";s:1:"T";s:4:"-120";s:6:"Tcaron";s:4:"-120";s:12:"Tcommaaccent";s:4:"-120";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:3:"-70";s:1:"W";s:3:"-50";s:1:"Y";s:4:"-100";s:6:"Yacute";s:4:"-100";s:9:"Ydieresis";s:4:"-100";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"v";s:3:"-40";s:1:"w";s:3:"-40";s:1:"y";s:3:"-40";s:6:"yacute";s:3:"-40";s:9:"ydieresis";s:3:"-40";}s:1:"B";a:11:{s:1:"U";s:3:"-10";s:6:"Uacute";s:3:"-10";s:11:"Ucircumflex";s:3:"-10";s:9:"Udieresis";s:3:"-10";s:6:"Ugrave";s:3:"-10";s:13:"Uhungarumlaut";s:3:"-10";s:7:"Umacron";s:3:"-10";s:7:"Uogonek";s:3:"-10";s:5:"Uring";s:3:"-10";s:5:"comma";s:3:"-20";s:6:"period";s:3:"-20";}s:1:"C";a:2:{s:5:"comma";s:3:"-30";s:6:"period";s:3:"-30";}s:6:"Cacute";a:2:{s:5:"comma";s:3:"-30";s:6:"period";s:3:"-30";}s:6:"Ccaron";a:2:{s:5:"comma";s:3:"-30";s:6:"period";s:3:"-30";}s:8:"Ccedilla";a:2:{s:5:"comma";s:3:"-30";s:6:"period";s:3:"-30";}s:1:"D";a:17:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:1:"V";s:3:"-70";s:1:"W";s:3:"-40";s:1:"Y";s:3:"-90";s:6:"Yacute";s:3:"-90";s:9:"Ydieresis";s:3:"-90";s:5:"comma";s:3:"-70";s:6:"period";s:3:"-70";}s:6:"Dcaron";a:17:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:1:"V";s:3:"-70";s:1:"W";s:3:"-40";s:1:"Y";s:3:"-90";s:6:"Yacute";s:3:"-90";s:9:"Ydieresis";s:3:"-90";s:5:"comma";s:3:"-70";s:6:"period";s:3:"-70";}s:6:"Dcroat";a:17:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:1:"V";s:3:"-70";s:1:"W";s:3:"-40";s:1:"Y";s:3:"-90";s:6:"Yacute";s:3:"-90";s:9:"Ydieresis";s:3:"-90";s:5:"comma";s:3:"-70";s:6:"period";s:3:"-70";}s:1:"F";a:44:{s:1:"A";s:3:"-80";s:6:"Aacute";s:3:"-80";s:6:"Abreve";s:3:"-80";s:11:"Acircumflex";s:3:"-80";s:9:"Adieresis";s:3:"-80";s:6:"Agrave";s:3:"-80";s:7:"Amacron";s:3:"-80";s:7:"Aogonek";s:3:"-80";s:5:"Aring";s:3:"-80";s:6:"Atilde";s:3:"-80";s:1:"a";s:3:"-50";s:6:"aacute";s:3:"-50";s:6:"abreve";s:3:"-50";s:11:"acircumflex";s:3:"-50";s:9:"adieresis";s:3:"-50";s:6:"agrave";s:3:"-50";s:7:"amacron";s:3:"-50";s:7:"aogonek";s:3:"-50";s:5:"aring";s:3:"-50";s:6:"atilde";s:3:"-50";s:5:"comma";s:4:"-150";s:1:"e";s:3:"-30";s:6:"eacute";s:3:"-30";s:6:"ecaron";s:3:"-30";s:11:"ecircumflex";s:3:"-30";s:9:"edieresis";s:3:"-30";s:10:"edotaccent";s:3:"-30";s:6:"egrave";s:3:"-30";s:7:"emacron";s:3:"-30";s:7:"eogonek";s:3:"-30";s:1:"o";s:3:"-30";s:6:"oacute";s:3:"-30";s:11:"ocircumflex";s:3:"-30";s:9:"odieresis";s:3:"-30";s:6:"ograve";s:3:"-30";s:13:"ohungarumlaut";s:3:"-30";s:7:"omacron";s:3:"-30";s:6:"oslash";s:3:"-30";s:6:"otilde";s:3:"-30";s:6:"period";s:4:"-150";s:1:"r";s:3:"-45";s:6:"racute";s:3:"-45";s:6:"rcaron";s:3:"-45";s:12:"rcommaaccent";s:3:"-45";}s:1:"J";a:31:{s:1:"A";s:3:"-20";s:6:"Aacute";s:3:"-20";s:6:"Abreve";s:3:"-20";s:11:"Acircumflex";s:3:"-20";s:9:"Adieresis";s:3:"-20";s:6:"Agrave";s:3:"-20";s:7:"Amacron";s:3:"-20";s:7:"Aogonek";s:3:"-20";s:5:"Aring";s:3:"-20";s:6:"Atilde";s:3:"-20";s:1:"a";s:3:"-20";s:6:"aacute";s:3:"-20";s:6:"abreve";s:3:"-20";s:11:"acircumflex";s:3:"-20";s:9:"adieresis";s:3:"-20";s:6:"agrave";s:3:"-20";s:7:"amacron";s:3:"-20";s:7:"aogonek";s:3:"-20";s:5:"aring";s:3:"-20";s:6:"atilde";s:3:"-20";s:5:"comma";s:3:"-30";s:6:"period";s:3:"-30";s:1:"u";s:3:"-20";s:6:"uacute";s:3:"-20";s:11:"ucircumflex";s:3:"-20";s:9:"udieresis";s:3:"-20";s:6:"ugrave";s:3:"-20";s:13:"uhungarumlaut";s:3:"-20";s:7:"umacron";s:3:"-20";s:7:"uogonek";s:3:"-20";s:5:"uring";s:3:"-20";}s:1:"K";a:39:{s:1:"O";s:3:"-50";s:6:"Oacute";s:3:"-50";s:11:"Ocircumflex";s:3:"-50";s:9:"Odieresis";s:3:"-50";s:6:"Ograve";s:3:"-50";s:13:"Ohungarumlaut";s:3:"-50";s:7:"Omacron";s:3:"-50";s:6:"Oslash";s:3:"-50";s:6:"Otilde";s:3:"-50";s:1:"e";s:3:"-40";s:6:"eacute";s:3:"-40";s:6:"ecaron";s:3:"-40";s:11:"ecircumflex";s:3:"-40";s:9:"edieresis";s:3:"-40";s:10:"edotaccent";s:3:"-40";s:6:"egrave";s:3:"-40";s:7:"emacron";s:3:"-40";s:7:"eogonek";s:3:"-40";s:1:"o";s:3:"-40";s:6:"oacute";s:3:"-40";s:11:"ocircumflex";s:3:"-40";s:9:"odieresis";s:3:"-40";s:6:"ograve";s:3:"-40";s:13:"ohungarumlaut";s:3:"-40";s:7:"omacron";s:3:"-40";s:6:"oslash";s:3:"-40";s:6:"otilde";s:3:"-40";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"y";s:3:"-50";s:6:"yacute";s:3:"-50";s:9:"ydieresis";s:3:"-50";}s:12:"Kcommaaccent";a:39:{s:1:"O";s:3:"-50";s:6:"Oacute";s:3:"-50";s:11:"Ocircumflex";s:3:"-50";s:9:"Odieresis";s:3:"-50";s:6:"Ograve";s:3:"-50";s:13:"Ohungarumlaut";s:3:"-50";s:7:"Omacron";s:3:"-50";s:6:"Oslash";s:3:"-50";s:6:"Otilde";s:3:"-50";s:1:"e";s:3:"-40";s:6:"eacute";s:3:"-40";s:6:"ecaron";s:3:"-40";s:11:"ecircumflex";s:3:"-40";s:9:"edieresis";s:3:"-40";s:10:"edotaccent";s:3:"-40";s:6:"egrave";s:3:"-40";s:7:"emacron";s:3:"-40";s:7:"eogonek";s:3:"-40";s:1:"o";s:3:"-40";s:6:"oacute";s:3:"-40";s:11:"ocircumflex";s:3:"-40";s:9:"odieresis";s:3:"-40";s:6:"ograve";s:3:"-40";s:13:"ohungarumlaut";s:3:"-40";s:7:"omacron";s:3:"-40";s:6:"oslash";s:3:"-40";s:6:"otilde";s:3:"-40";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"y";s:3:"-50";s:6:"yacute";s:3:"-50";s:9:"ydieresis";s:3:"-50";}s:1:"L";a:13:{s:1:"T";s:4:"-110";s:6:"Tcaron";s:4:"-110";s:12:"Tcommaaccent";s:4:"-110";s:1:"V";s:4:"-110";s:1:"W";s:3:"-70";s:1:"Y";s:4:"-140";s:6:"Yacute";s:4:"-140";s:9:"Ydieresis";s:4:"-140";s:13:"quotedblright";s:4:"-140";s:10:"quoteright";s:4:"-160";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:6:"Lacute";a:13:{s:1:"T";s:4:"-110";s:6:"Tcaron";s:4:"-110";s:12:"Tcommaaccent";s:4:"-110";s:1:"V";s:4:"-110";s:1:"W";s:3:"-70";s:1:"Y";s:4:"-140";s:6:"Yacute";s:4:"-140";s:9:"Ydieresis";s:4:"-140";s:13:"quotedblright";s:4:"-140";s:10:"quoteright";s:4:"-160";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:6:"Lcaron";a:13:{s:1:"T";s:4:"-110";s:6:"Tcaron";s:4:"-110";s:12:"Tcommaaccent";s:4:"-110";s:1:"V";s:4:"-110";s:1:"W";s:3:"-70";s:1:"Y";s:4:"-140";s:6:"Yacute";s:4:"-140";s:9:"Ydieresis";s:4:"-140";s:13:"quotedblright";s:4:"-140";s:10:"quoteright";s:4:"-160";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:12:"Lcommaaccent";a:13:{s:1:"T";s:4:"-110";s:6:"Tcaron";s:4:"-110";s:12:"Tcommaaccent";s:4:"-110";s:1:"V";s:4:"-110";s:1:"W";s:3:"-70";s:1:"Y";s:4:"-140";s:6:"Yacute";s:4:"-140";s:9:"Ydieresis";s:4:"-140";s:13:"quotedblright";s:4:"-140";s:10:"quoteright";s:4:"-160";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:6:"Lslash";a:13:{s:1:"T";s:4:"-110";s:6:"Tcaron";s:4:"-110";s:12:"Tcommaaccent";s:4:"-110";s:1:"V";s:4:"-110";s:1:"W";s:3:"-70";s:1:"Y";s:4:"-140";s:6:"Yacute";s:4:"-140";s:9:"Ydieresis";s:4:"-140";s:13:"quotedblright";s:4:"-140";s:10:"quoteright";s:4:"-160";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:1:"O";a:21:{s:1:"A";s:3:"-20";s:6:"Aacute";s:3:"-20";s:6:"Abreve";s:3:"-20";s:11:"Acircumflex";s:3:"-20";s:9:"Adieresis";s:3:"-20";s:6:"Agrave";s:3:"-20";s:7:"Amacron";s:3:"-20";s:7:"Aogonek";s:3:"-20";s:5:"Aring";s:3:"-20";s:6:"Atilde";s:3:"-20";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-30";s:1:"X";s:3:"-60";s:1:"Y";s:3:"-70";s:6:"Yacute";s:3:"-70";s:9:"Ydieresis";s:3:"-70";s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";}s:6:"Oacute";a:21:{s:1:"A";s:3:"-20";s:6:"Aacute";s:3:"-20";s:6:"Abreve";s:3:"-20";s:11:"Acircumflex";s:3:"-20";s:9:"Adieresis";s:3:"-20";s:6:"Agrave";s:3:"-20";s:7:"Amacron";s:3:"-20";s:7:"Aogonek";s:3:"-20";s:5:"Aring";s:3:"-20";s:6:"Atilde";s:3:"-20";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-30";s:1:"X";s:3:"-60";s:1:"Y";s:3:"-70";s:6:"Yacute";s:3:"-70";s:9:"Ydieresis";s:3:"-70";s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";}s:11:"Ocircumflex";a:21:{s:1:"A";s:3:"-20";s:6:"Aacute";s:3:"-20";s:6:"Abreve";s:3:"-20";s:11:"Acircumflex";s:3:"-20";s:9:"Adieresis";s:3:"-20";s:6:"Agrave";s:3:"-20";s:7:"Amacron";s:3:"-20";s:7:"Aogonek";s:3:"-20";s:5:"Aring";s:3:"-20";s:6:"Atilde";s:3:"-20";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-30";s:1:"X";s:3:"-60";s:1:"Y";s:3:"-70";s:6:"Yacute";s:3:"-70";s:9:"Ydieresis";s:3:"-70";s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";}s:9:"Odieresis";a:21:{s:1:"A";s:3:"-20";s:6:"Aacute";s:3:"-20";s:6:"Abreve";s:3:"-20";s:11:"Acircumflex";s:3:"-20";s:9:"Adieresis";s:3:"-20";s:6:"Agrave";s:3:"-20";s:7:"Amacron";s:3:"-20";s:7:"Aogonek";s:3:"-20";s:5:"Aring";s:3:"-20";s:6:"Atilde";s:3:"-20";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-30";s:1:"X";s:3:"-60";s:1:"Y";s:3:"-70";s:6:"Yacute";s:3:"-70";s:9:"Ydieresis";s:3:"-70";s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";}s:6:"Ograve";a:21:{s:1:"A";s:3:"-20";s:6:"Aacute";s:3:"-20";s:6:"Abreve";s:3:"-20";s:11:"Acircumflex";s:3:"-20";s:9:"Adieresis";s:3:"-20";s:6:"Agrave";s:3:"-20";s:7:"Amacron";s:3:"-20";s:7:"Aogonek";s:3:"-20";s:5:"Aring";s:3:"-20";s:6:"Atilde";s:3:"-20";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-30";s:1:"X";s:3:"-60";s:1:"Y";s:3:"-70";s:6:"Yacute";s:3:"-70";s:9:"Ydieresis";s:3:"-70";s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";}s:13:"Ohungarumlaut";a:21:{s:1:"A";s:3:"-20";s:6:"Aacute";s:3:"-20";s:6:"Abreve";s:3:"-20";s:11:"Acircumflex";s:3:"-20";s:9:"Adieresis";s:3:"-20";s:6:"Agrave";s:3:"-20";s:7:"Amacron";s:3:"-20";s:7:"Aogonek";s:3:"-20";s:5:"Aring";s:3:"-20";s:6:"Atilde";s:3:"-20";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-30";s:1:"X";s:3:"-60";s:1:"Y";s:3:"-70";s:6:"Yacute";s:3:"-70";s:9:"Ydieresis";s:3:"-70";s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";}s:7:"Omacron";a:21:{s:1:"A";s:3:"-20";s:6:"Aacute";s:3:"-20";s:6:"Abreve";s:3:"-20";s:11:"Acircumflex";s:3:"-20";s:9:"Adieresis";s:3:"-20";s:6:"Agrave";s:3:"-20";s:7:"Amacron";s:3:"-20";s:7:"Aogonek";s:3:"-20";s:5:"Aring";s:3:"-20";s:6:"Atilde";s:3:"-20";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-30";s:1:"X";s:3:"-60";s:1:"Y";s:3:"-70";s:6:"Yacute";s:3:"-70";s:9:"Ydieresis";s:3:"-70";s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";}s:6:"Oslash";a:21:{s:1:"A";s:3:"-20";s:6:"Aacute";s:3:"-20";s:6:"Abreve";s:3:"-20";s:11:"Acircumflex";s:3:"-20";s:9:"Adieresis";s:3:"-20";s:6:"Agrave";s:3:"-20";s:7:"Amacron";s:3:"-20";s:7:"Aogonek";s:3:"-20";s:5:"Aring";s:3:"-20";s:6:"Atilde";s:3:"-20";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-30";s:1:"X";s:3:"-60";s:1:"Y";s:3:"-70";s:6:"Yacute";s:3:"-70";s:9:"Ydieresis";s:3:"-70";s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";}s:6:"Otilde";a:21:{s:1:"A";s:3:"-20";s:6:"Aacute";s:3:"-20";s:6:"Abreve";s:3:"-20";s:11:"Acircumflex";s:3:"-20";s:9:"Adieresis";s:3:"-20";s:6:"Agrave";s:3:"-20";s:7:"Amacron";s:3:"-20";s:7:"Aogonek";s:3:"-20";s:5:"Aring";s:3:"-20";s:6:"Atilde";s:3:"-20";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-30";s:1:"X";s:3:"-60";s:1:"Y";s:3:"-70";s:6:"Yacute";s:3:"-70";s:9:"Ydieresis";s:3:"-70";s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";}s:1:"P";a:40:{s:1:"A";s:4:"-120";s:6:"Aacute";s:4:"-120";s:6:"Abreve";s:4:"-120";s:11:"Acircumflex";s:4:"-120";s:9:"Adieresis";s:4:"-120";s:6:"Agrave";s:4:"-120";s:7:"Amacron";s:4:"-120";s:7:"Aogonek";s:4:"-120";s:5:"Aring";s:4:"-120";s:6:"Atilde";s:4:"-120";s:1:"a";s:3:"-40";s:6:"aacute";s:3:"-40";s:6:"abreve";s:3:"-40";s:11:"acircumflex";s:3:"-40";s:9:"adieresis";s:3:"-40";s:6:"agrave";s:3:"-40";s:7:"amacron";s:3:"-40";s:7:"aogonek";s:3:"-40";s:5:"aring";s:3:"-40";s:6:"atilde";s:3:"-40";s:5:"comma";s:4:"-180";s:1:"e";s:3:"-50";s:6:"eacute";s:3:"-50";s:6:"ecaron";s:3:"-50";s:11:"ecircumflex";s:3:"-50";s:9:"edieresis";s:3:"-50";s:10:"edotaccent";s:3:"-50";s:6:"egrave";s:3:"-50";s:7:"emacron";s:3:"-50";s:7:"eogonek";s:3:"-50";s:1:"o";s:3:"-50";s:6:"oacute";s:3:"-50";s:11:"ocircumflex";s:3:"-50";s:9:"odieresis";s:3:"-50";s:6:"ograve";s:3:"-50";s:13:"ohungarumlaut";s:3:"-50";s:7:"omacron";s:3:"-50";s:6:"oslash";s:3:"-50";s:6:"otilde";s:3:"-50";s:6:"period";s:4:"-180";}s:1:"Q";a:9:{s:1:"U";s:3:"-10";s:6:"Uacute";s:3:"-10";s:11:"Ucircumflex";s:3:"-10";s:9:"Udieresis";s:3:"-10";s:6:"Ugrave";s:3:"-10";s:13:"Uhungarumlaut";s:3:"-10";s:7:"Umacron";s:3:"-10";s:7:"Uogonek";s:3:"-10";s:5:"Uring";s:3:"-10";}s:1:"R";a:26:{s:1:"O";s:3:"-20";s:6:"Oacute";s:3:"-20";s:11:"Ocircumflex";s:3:"-20";s:9:"Odieresis";s:3:"-20";s:6:"Ograve";s:3:"-20";s:13:"Ohungarumlaut";s:3:"-20";s:7:"Omacron";s:3:"-20";s:6:"Oslash";s:3:"-20";s:6:"Otilde";s:3:"-20";s:1:"T";s:3:"-30";s:6:"Tcaron";s:3:"-30";s:12:"Tcommaaccent";s:3:"-30";s:1:"U";s:3:"-40";s:6:"Uacute";s:3:"-40";s:11:"Ucircumflex";s:3:"-40";s:9:"Udieresis";s:3:"-40";s:6:"Ugrave";s:3:"-40";s:13:"Uhungarumlaut";s:3:"-40";s:7:"Umacron";s:3:"-40";s:7:"Uogonek";s:3:"-40";s:5:"Uring";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-30";s:1:"Y";s:3:"-50";s:6:"Yacute";s:3:"-50";s:9:"Ydieresis";s:3:"-50";}s:6:"Racute";a:26:{s:1:"O";s:3:"-20";s:6:"Oacute";s:3:"-20";s:11:"Ocircumflex";s:3:"-20";s:9:"Odieresis";s:3:"-20";s:6:"Ograve";s:3:"-20";s:13:"Ohungarumlaut";s:3:"-20";s:7:"Omacron";s:3:"-20";s:6:"Oslash";s:3:"-20";s:6:"Otilde";s:3:"-20";s:1:"T";s:3:"-30";s:6:"Tcaron";s:3:"-30";s:12:"Tcommaaccent";s:3:"-30";s:1:"U";s:3:"-40";s:6:"Uacute";s:3:"-40";s:11:"Ucircumflex";s:3:"-40";s:9:"Udieresis";s:3:"-40";s:6:"Ugrave";s:3:"-40";s:13:"Uhungarumlaut";s:3:"-40";s:7:"Umacron";s:3:"-40";s:7:"Uogonek";s:3:"-40";s:5:"Uring";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-30";s:1:"Y";s:3:"-50";s:6:"Yacute";s:3:"-50";s:9:"Ydieresis";s:3:"-50";}s:6:"Rcaron";a:26:{s:1:"O";s:3:"-20";s:6:"Oacute";s:3:"-20";s:11:"Ocircumflex";s:3:"-20";s:9:"Odieresis";s:3:"-20";s:6:"Ograve";s:3:"-20";s:13:"Ohungarumlaut";s:3:"-20";s:7:"Omacron";s:3:"-20";s:6:"Oslash";s:3:"-20";s:6:"Otilde";s:3:"-20";s:1:"T";s:3:"-30";s:6:"Tcaron";s:3:"-30";s:12:"Tcommaaccent";s:3:"-30";s:1:"U";s:3:"-40";s:6:"Uacute";s:3:"-40";s:11:"Ucircumflex";s:3:"-40";s:9:"Udieresis";s:3:"-40";s:6:"Ugrave";s:3:"-40";s:13:"Uhungarumlaut";s:3:"-40";s:7:"Umacron";s:3:"-40";s:7:"Uogonek";s:3:"-40";s:5:"Uring";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-30";s:1:"Y";s:3:"-50";s:6:"Yacute";s:3:"-50";s:9:"Ydieresis";s:3:"-50";}s:12:"Rcommaaccent";a:26:{s:1:"O";s:3:"-20";s:6:"Oacute";s:3:"-20";s:11:"Ocircumflex";s:3:"-20";s:9:"Odieresis";s:3:"-20";s:6:"Ograve";s:3:"-20";s:13:"Ohungarumlaut";s:3:"-20";s:7:"Omacron";s:3:"-20";s:6:"Oslash";s:3:"-20";s:6:"Otilde";s:3:"-20";s:1:"T";s:3:"-30";s:6:"Tcaron";s:3:"-30";s:12:"Tcommaaccent";s:3:"-30";s:1:"U";s:3:"-40";s:6:"Uacute";s:3:"-40";s:11:"Ucircumflex";s:3:"-40";s:9:"Udieresis";s:3:"-40";s:6:"Ugrave";s:3:"-40";s:13:"Uhungarumlaut";s:3:"-40";s:7:"Umacron";s:3:"-40";s:7:"Uogonek";s:3:"-40";s:5:"Uring";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-30";s:1:"Y";s:3:"-50";s:6:"Yacute";s:3:"-50";s:9:"Ydieresis";s:3:"-50";}s:1:"S";a:2:{s:5:"comma";s:3:"-20";s:6:"period";s:3:"-20";}s:6:"Sacute";a:2:{s:5:"comma";s:3:"-20";s:6:"period";s:3:"-20";}s:6:"Scaron";a:2:{s:5:"comma";s:3:"-20";s:6:"period";s:3:"-20";}s:8:"Scedilla";a:2:{s:5:"comma";s:3:"-20";s:6:"period";s:3:"-20";}s:12:"Scommaaccent";a:2:{s:5:"comma";s:3:"-20";s:6:"period";s:3:"-20";}s:1:"T";a:69:{s:1:"A";s:4:"-120";s:6:"Aacute";s:4:"-120";s:6:"Abreve";s:4:"-120";s:11:"Acircumflex";s:4:"-120";s:9:"Adieresis";s:4:"-120";s:6:"Agrave";s:4:"-120";s:7:"Amacron";s:4:"-120";s:7:"Aogonek";s:4:"-120";s:5:"Aring";s:4:"-120";s:6:"Atilde";s:4:"-120";s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"a";s:4:"-120";s:6:"aacute";s:4:"-120";s:6:"abreve";s:3:"-60";s:11:"acircumflex";s:4:"-120";s:9:"adieresis";s:4:"-120";s:6:"agrave";s:4:"-120";s:7:"amacron";s:3:"-60";s:7:"aogonek";s:4:"-120";s:5:"aring";s:4:"-120";s:6:"atilde";s:3:"-60";s:5:"colon";s:3:"-20";s:5:"comma";s:4:"-120";s:1:"e";s:4:"-120";s:6:"eacute";s:4:"-120";s:6:"ecaron";s:4:"-120";s:11:"ecircumflex";s:4:"-120";s:9:"edieresis";s:4:"-120";s:10:"edotaccent";s:4:"-120";s:6:"egrave";s:3:"-60";s:7:"emacron";s:3:"-60";s:7:"eogonek";s:4:"-120";s:6:"hyphen";s:4:"-140";s:1:"o";s:4:"-120";s:6:"oacute";s:4:"-120";s:11:"ocircumflex";s:4:"-120";s:9:"odieresis";s:4:"-120";s:6:"ograve";s:4:"-120";s:13:"ohungarumlaut";s:4:"-120";s:7:"omacron";s:3:"-60";s:6:"oslash";s:4:"-120";s:6:"otilde";s:3:"-60";s:6:"period";s:4:"-120";s:1:"r";s:4:"-120";s:6:"racute";s:4:"-120";s:6:"rcaron";s:4:"-120";s:12:"rcommaaccent";s:4:"-120";s:9:"semicolon";s:3:"-20";s:1:"u";s:4:"-120";s:6:"uacute";s:4:"-120";s:11:"ucircumflex";s:4:"-120";s:9:"udieresis";s:4:"-120";s:6:"ugrave";s:4:"-120";s:13:"uhungarumlaut";s:4:"-120";s:7:"umacron";s:3:"-60";s:7:"uogonek";s:4:"-120";s:5:"uring";s:4:"-120";s:1:"w";s:4:"-120";s:1:"y";s:4:"-120";s:6:"yacute";s:4:"-120";s:9:"ydieresis";s:3:"-60";}s:6:"Tcaron";a:69:{s:1:"A";s:4:"-120";s:6:"Aacute";s:4:"-120";s:6:"Abreve";s:4:"-120";s:11:"Acircumflex";s:4:"-120";s:9:"Adieresis";s:4:"-120";s:6:"Agrave";s:4:"-120";s:7:"Amacron";s:4:"-120";s:7:"Aogonek";s:4:"-120";s:5:"Aring";s:4:"-120";s:6:"Atilde";s:4:"-120";s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"a";s:4:"-120";s:6:"aacute";s:4:"-120";s:6:"abreve";s:3:"-60";s:11:"acircumflex";s:4:"-120";s:9:"adieresis";s:4:"-120";s:6:"agrave";s:4:"-120";s:7:"amacron";s:3:"-60";s:7:"aogonek";s:4:"-120";s:5:"aring";s:4:"-120";s:6:"atilde";s:3:"-60";s:5:"colon";s:3:"-20";s:5:"comma";s:4:"-120";s:1:"e";s:4:"-120";s:6:"eacute";s:4:"-120";s:6:"ecaron";s:4:"-120";s:11:"ecircumflex";s:4:"-120";s:9:"edieresis";s:4:"-120";s:10:"edotaccent";s:4:"-120";s:6:"egrave";s:3:"-60";s:7:"emacron";s:3:"-60";s:7:"eogonek";s:4:"-120";s:6:"hyphen";s:4:"-140";s:1:"o";s:4:"-120";s:6:"oacute";s:4:"-120";s:11:"ocircumflex";s:4:"-120";s:9:"odieresis";s:4:"-120";s:6:"ograve";s:4:"-120";s:13:"ohungarumlaut";s:4:"-120";s:7:"omacron";s:3:"-60";s:6:"oslash";s:4:"-120";s:6:"otilde";s:3:"-60";s:6:"period";s:4:"-120";s:1:"r";s:4:"-120";s:6:"racute";s:4:"-120";s:6:"rcaron";s:4:"-120";s:12:"rcommaaccent";s:4:"-120";s:9:"semicolon";s:3:"-20";s:1:"u";s:4:"-120";s:6:"uacute";s:4:"-120";s:11:"ucircumflex";s:4:"-120";s:9:"udieresis";s:4:"-120";s:6:"ugrave";s:4:"-120";s:13:"uhungarumlaut";s:4:"-120";s:7:"umacron";s:3:"-60";s:7:"uogonek";s:4:"-120";s:5:"uring";s:4:"-120";s:1:"w";s:4:"-120";s:1:"y";s:4:"-120";s:6:"yacute";s:4:"-120";s:9:"ydieresis";s:3:"-60";}s:12:"Tcommaaccent";a:69:{s:1:"A";s:4:"-120";s:6:"Aacute";s:4:"-120";s:6:"Abreve";s:4:"-120";s:11:"Acircumflex";s:4:"-120";s:9:"Adieresis";s:4:"-120";s:6:"Agrave";s:4:"-120";s:7:"Amacron";s:4:"-120";s:7:"Aogonek";s:4:"-120";s:5:"Aring";s:4:"-120";s:6:"Atilde";s:4:"-120";s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"a";s:4:"-120";s:6:"aacute";s:4:"-120";s:6:"abreve";s:3:"-60";s:11:"acircumflex";s:4:"-120";s:9:"adieresis";s:4:"-120";s:6:"agrave";s:4:"-120";s:7:"amacron";s:3:"-60";s:7:"aogonek";s:4:"-120";s:5:"aring";s:4:"-120";s:6:"atilde";s:3:"-60";s:5:"colon";s:3:"-20";s:5:"comma";s:4:"-120";s:1:"e";s:4:"-120";s:6:"eacute";s:4:"-120";s:6:"ecaron";s:4:"-120";s:11:"ecircumflex";s:4:"-120";s:9:"edieresis";s:4:"-120";s:10:"edotaccent";s:4:"-120";s:6:"egrave";s:3:"-60";s:7:"emacron";s:3:"-60";s:7:"eogonek";s:4:"-120";s:6:"hyphen";s:4:"-140";s:1:"o";s:4:"-120";s:6:"oacute";s:4:"-120";s:11:"ocircumflex";s:4:"-120";s:9:"odieresis";s:4:"-120";s:6:"ograve";s:4:"-120";s:13:"ohungarumlaut";s:4:"-120";s:7:"omacron";s:3:"-60";s:6:"oslash";s:4:"-120";s:6:"otilde";s:3:"-60";s:6:"period";s:4:"-120";s:1:"r";s:4:"-120";s:6:"racute";s:4:"-120";s:6:"rcaron";s:4:"-120";s:12:"rcommaaccent";s:4:"-120";s:9:"semicolon";s:3:"-20";s:1:"u";s:4:"-120";s:6:"uacute";s:4:"-120";s:11:"ucircumflex";s:4:"-120";s:9:"udieresis";s:4:"-120";s:6:"ugrave";s:4:"-120";s:13:"uhungarumlaut";s:4:"-120";s:7:"umacron";s:3:"-60";s:7:"uogonek";s:4:"-120";s:5:"uring";s:4:"-120";s:1:"w";s:4:"-120";s:1:"y";s:4:"-120";s:6:"yacute";s:4:"-120";s:9:"ydieresis";s:3:"-60";}s:1:"U";a:12:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";}s:6:"Uacute";a:12:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";}s:11:"Ucircumflex";a:12:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";}s:9:"Udieresis";a:12:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";}s:6:"Ugrave";a:12:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";}s:13:"Uhungarumlaut";a:12:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";}s:7:"Umacron";a:12:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";}s:7:"Uogonek";a:12:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";}s:5:"Uring";a:12:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";}s:1:"V";a:64:{s:1:"A";s:3:"-80";s:6:"Aacute";s:3:"-80";s:6:"Abreve";s:3:"-80";s:11:"Acircumflex";s:3:"-80";s:9:"Adieresis";s:3:"-80";s:6:"Agrave";s:3:"-80";s:7:"Amacron";s:3:"-80";s:7:"Aogonek";s:3:"-80";s:5:"Aring";s:3:"-80";s:6:"Atilde";s:3:"-80";s:1:"G";s:3:"-40";s:6:"Gbreve";s:3:"-40";s:12:"Gcommaaccent";s:3:"-40";s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"a";s:3:"-70";s:6:"aacute";s:3:"-70";s:6:"abreve";s:3:"-70";s:11:"acircumflex";s:3:"-70";s:9:"adieresis";s:3:"-70";s:6:"agrave";s:3:"-70";s:7:"amacron";s:3:"-70";s:7:"aogonek";s:3:"-70";s:5:"aring";s:3:"-70";s:6:"atilde";s:3:"-70";s:5:"colon";s:3:"-40";s:5:"comma";s:4:"-125";s:1:"e";s:3:"-80";s:6:"eacute";s:3:"-80";s:6:"ecaron";s:3:"-80";s:11:"ecircumflex";s:3:"-80";s:9:"edieresis";s:3:"-80";s:10:"edotaccent";s:3:"-80";s:6:"egrave";s:3:"-80";s:7:"emacron";s:3:"-80";s:7:"eogonek";s:3:"-80";s:6:"hyphen";s:3:"-80";s:1:"o";s:3:"-80";s:6:"oacute";s:3:"-80";s:11:"ocircumflex";s:3:"-80";s:9:"odieresis";s:3:"-80";s:6:"ograve";s:3:"-80";s:13:"ohungarumlaut";s:3:"-80";s:7:"omacron";s:3:"-80";s:6:"oslash";s:3:"-80";s:6:"otilde";s:3:"-80";s:6:"period";s:4:"-125";s:9:"semicolon";s:3:"-40";s:1:"u";s:3:"-70";s:6:"uacute";s:3:"-70";s:11:"ucircumflex";s:3:"-70";s:9:"udieresis";s:3:"-70";s:6:"ugrave";s:3:"-70";s:13:"uhungarumlaut";s:3:"-70";s:7:"umacron";s:3:"-70";s:7:"uogonek";s:3:"-70";s:5:"uring";s:3:"-70";}s:1:"W";a:62:{s:1:"A";s:3:"-50";s:6:"Aacute";s:3:"-50";s:6:"Abreve";s:3:"-50";s:11:"Acircumflex";s:3:"-50";s:9:"Adieresis";s:3:"-50";s:6:"Agrave";s:3:"-50";s:7:"Amacron";s:3:"-50";s:7:"Aogonek";s:3:"-50";s:5:"Aring";s:3:"-50";s:6:"Atilde";s:3:"-50";s:1:"O";s:3:"-20";s:6:"Oacute";s:3:"-20";s:11:"Ocircumflex";s:3:"-20";s:9:"Odieresis";s:3:"-20";s:6:"Ograve";s:3:"-20";s:13:"Ohungarumlaut";s:3:"-20";s:7:"Omacron";s:3:"-20";s:6:"Oslash";s:3:"-20";s:6:"Otilde";s:3:"-20";s:1:"a";s:3:"-40";s:6:"aacute";s:3:"-40";s:6:"abreve";s:3:"-40";s:11:"acircumflex";s:3:"-40";s:9:"adieresis";s:3:"-40";s:6:"agrave";s:3:"-40";s:7:"amacron";s:3:"-40";s:7:"aogonek";s:3:"-40";s:5:"aring";s:3:"-40";s:6:"atilde";s:3:"-40";s:5:"comma";s:3:"-80";s:1:"e";s:3:"-30";s:6:"eacute";s:3:"-30";s:6:"ecaron";s:3:"-30";s:11:"ecircumflex";s:3:"-30";s:9:"edieresis";s:3:"-30";s:10:"edotaccent";s:3:"-30";s:6:"egrave";s:3:"-30";s:7:"emacron";s:3:"-30";s:7:"eogonek";s:3:"-30";s:6:"hyphen";s:3:"-40";s:1:"o";s:3:"-30";s:6:"oacute";s:3:"-30";s:11:"ocircumflex";s:3:"-30";s:9:"odieresis";s:3:"-30";s:6:"ograve";s:3:"-30";s:13:"ohungarumlaut";s:3:"-30";s:7:"omacron";s:3:"-30";s:6:"oslash";s:3:"-30";s:6:"otilde";s:3:"-30";s:6:"period";s:3:"-80";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:1:"Y";a:64:{s:1:"A";s:4:"-110";s:6:"Aacute";s:4:"-110";s:6:"Abreve";s:4:"-110";s:11:"Acircumflex";s:4:"-110";s:9:"Adieresis";s:4:"-110";s:6:"Agrave";s:4:"-110";s:7:"Amacron";s:4:"-110";s:7:"Aogonek";s:4:"-110";s:5:"Aring";s:4:"-110";s:6:"Atilde";s:4:"-110";s:1:"O";s:3:"-85";s:6:"Oacute";s:3:"-85";s:11:"Ocircumflex";s:3:"-85";s:9:"Odieresis";s:3:"-85";s:6:"Ograve";s:3:"-85";s:13:"Ohungarumlaut";s:3:"-85";s:7:"Omacron";s:3:"-85";s:6:"Oslash";s:3:"-85";s:6:"Otilde";s:3:"-85";s:1:"a";s:4:"-140";s:6:"aacute";s:4:"-140";s:6:"abreve";s:3:"-70";s:11:"acircumflex";s:4:"-140";s:9:"adieresis";s:4:"-140";s:6:"agrave";s:4:"-140";s:7:"amacron";s:3:"-70";s:7:"aogonek";s:4:"-140";s:5:"aring";s:4:"-140";s:6:"atilde";s:4:"-140";s:5:"colon";s:3:"-60";s:5:"comma";s:4:"-140";s:1:"e";s:4:"-140";s:6:"eacute";s:4:"-140";s:6:"ecaron";s:4:"-140";s:11:"ecircumflex";s:4:"-140";s:9:"edieresis";s:4:"-140";s:10:"edotaccent";s:4:"-140";s:6:"egrave";s:4:"-140";s:7:"emacron";s:3:"-70";s:7:"eogonek";s:4:"-140";s:6:"hyphen";s:4:"-140";s:1:"i";s:3:"-20";s:6:"iacute";s:3:"-20";s:7:"iogonek";s:3:"-20";s:1:"o";s:4:"-140";s:6:"oacute";s:4:"-140";s:11:"ocircumflex";s:4:"-140";s:9:"odieresis";s:4:"-140";s:6:"ograve";s:4:"-140";s:13:"ohungarumlaut";s:4:"-140";s:7:"omacron";s:4:"-140";s:6:"oslash";s:4:"-140";s:6:"otilde";s:4:"-140";s:6:"period";s:4:"-140";s:9:"semicolon";s:3:"-60";s:1:"u";s:4:"-110";s:6:"uacute";s:4:"-110";s:11:"ucircumflex";s:4:"-110";s:9:"udieresis";s:4:"-110";s:6:"ugrave";s:4:"-110";s:13:"uhungarumlaut";s:4:"-110";s:7:"umacron";s:4:"-110";s:7:"uogonek";s:4:"-110";s:5:"uring";s:4:"-110";}s:6:"Yacute";a:64:{s:1:"A";s:4:"-110";s:6:"Aacute";s:4:"-110";s:6:"Abreve";s:4:"-110";s:11:"Acircumflex";s:4:"-110";s:9:"Adieresis";s:4:"-110";s:6:"Agrave";s:4:"-110";s:7:"Amacron";s:4:"-110";s:7:"Aogonek";s:4:"-110";s:5:"Aring";s:4:"-110";s:6:"Atilde";s:4:"-110";s:1:"O";s:3:"-85";s:6:"Oacute";s:3:"-85";s:11:"Ocircumflex";s:3:"-85";s:9:"Odieresis";s:3:"-85";s:6:"Ograve";s:3:"-85";s:13:"Ohungarumlaut";s:3:"-85";s:7:"Omacron";s:3:"-85";s:6:"Oslash";s:3:"-85";s:6:"Otilde";s:3:"-85";s:1:"a";s:4:"-140";s:6:"aacute";s:4:"-140";s:6:"abreve";s:3:"-70";s:11:"acircumflex";s:4:"-140";s:9:"adieresis";s:4:"-140";s:6:"agrave";s:4:"-140";s:7:"amacron";s:3:"-70";s:7:"aogonek";s:4:"-140";s:5:"aring";s:4:"-140";s:6:"atilde";s:3:"-70";s:5:"colon";s:3:"-60";s:5:"comma";s:4:"-140";s:1:"e";s:4:"-140";s:6:"eacute";s:4:"-140";s:6:"ecaron";s:4:"-140";s:11:"ecircumflex";s:4:"-140";s:9:"edieresis";s:4:"-140";s:10:"edotaccent";s:4:"-140";s:6:"egrave";s:4:"-140";s:7:"emacron";s:3:"-70";s:7:"eogonek";s:4:"-140";s:6:"hyphen";s:4:"-140";s:1:"i";s:3:"-20";s:6:"iacute";s:3:"-20";s:7:"iogonek";s:3:"-20";s:1:"o";s:4:"-140";s:6:"oacute";s:4:"-140";s:11:"ocircumflex";s:4:"-140";s:9:"odieresis";s:4:"-140";s:6:"ograve";s:4:"-140";s:13:"ohungarumlaut";s:4:"-140";s:7:"omacron";s:3:"-70";s:6:"oslash";s:4:"-140";s:6:"otilde";s:4:"-140";s:6:"period";s:4:"-140";s:9:"semicolon";s:3:"-60";s:1:"u";s:4:"-110";s:6:"uacute";s:4:"-110";s:11:"ucircumflex";s:4:"-110";s:9:"udieresis";s:4:"-110";s:6:"ugrave";s:4:"-110";s:13:"uhungarumlaut";s:4:"-110";s:7:"umacron";s:4:"-110";s:7:"uogonek";s:4:"-110";s:5:"uring";s:4:"-110";}s:9:"Ydieresis";a:64:{s:1:"A";s:4:"-110";s:6:"Aacute";s:4:"-110";s:6:"Abreve";s:4:"-110";s:11:"Acircumflex";s:4:"-110";s:9:"Adieresis";s:4:"-110";s:6:"Agrave";s:4:"-110";s:7:"Amacron";s:4:"-110";s:7:"Aogonek";s:4:"-110";s:5:"Aring";s:4:"-110";s:6:"Atilde";s:4:"-110";s:1:"O";s:3:"-85";s:6:"Oacute";s:3:"-85";s:11:"Ocircumflex";s:3:"-85";s:9:"Odieresis";s:3:"-85";s:6:"Ograve";s:3:"-85";s:13:"Ohungarumlaut";s:3:"-85";s:7:"Omacron";s:3:"-85";s:6:"Oslash";s:3:"-85";s:6:"Otilde";s:3:"-85";s:1:"a";s:4:"-140";s:6:"aacute";s:4:"-140";s:6:"abreve";s:3:"-70";s:11:"acircumflex";s:4:"-140";s:9:"adieresis";s:4:"-140";s:6:"agrave";s:4:"-140";s:7:"amacron";s:3:"-70";s:7:"aogonek";s:4:"-140";s:5:"aring";s:4:"-140";s:6:"atilde";s:3:"-70";s:5:"colon";s:3:"-60";s:5:"comma";s:4:"-140";s:1:"e";s:4:"-140";s:6:"eacute";s:4:"-140";s:6:"ecaron";s:4:"-140";s:11:"ecircumflex";s:4:"-140";s:9:"edieresis";s:4:"-140";s:10:"edotaccent";s:4:"-140";s:6:"egrave";s:4:"-140";s:7:"emacron";s:3:"-70";s:7:"eogonek";s:4:"-140";s:6:"hyphen";s:4:"-140";s:1:"i";s:3:"-20";s:6:"iacute";s:3:"-20";s:7:"iogonek";s:3:"-20";s:1:"o";s:4:"-140";s:6:"oacute";s:4:"-140";s:11:"ocircumflex";s:4:"-140";s:9:"odieresis";s:4:"-140";s:6:"ograve";s:4:"-140";s:13:"ohungarumlaut";s:4:"-140";s:7:"omacron";s:4:"-140";s:6:"oslash";s:4:"-140";s:6:"otilde";s:4:"-140";s:6:"period";s:4:"-140";s:9:"semicolon";s:3:"-60";s:1:"u";s:4:"-110";s:6:"uacute";s:4:"-110";s:11:"ucircumflex";s:4:"-110";s:9:"udieresis";s:4:"-110";s:6:"ugrave";s:4:"-110";s:13:"uhungarumlaut";s:4:"-110";s:7:"umacron";s:4:"-110";s:7:"uogonek";s:4:"-110";s:5:"uring";s:4:"-110";}s:1:"a";a:5:{s:1:"v";s:3:"-20";s:1:"w";s:3:"-20";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:6:"aacute";a:5:{s:1:"v";s:3:"-20";s:1:"w";s:3:"-20";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:6:"abreve";a:5:{s:1:"v";s:3:"-20";s:1:"w";s:3:"-20";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:11:"acircumflex";a:5:{s:1:"v";s:3:"-20";s:1:"w";s:3:"-20";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:9:"adieresis";a:5:{s:1:"v";s:3:"-20";s:1:"w";s:3:"-20";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:6:"agrave";a:5:{s:1:"v";s:3:"-20";s:1:"w";s:3:"-20";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:7:"amacron";a:5:{s:1:"v";s:3:"-20";s:1:"w";s:3:"-20";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:7:"aogonek";a:5:{s:1:"v";s:3:"-20";s:1:"w";s:3:"-20";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:5:"aring";a:5:{s:1:"v";s:3:"-20";s:1:"w";s:3:"-20";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:6:"atilde";a:5:{s:1:"v";s:3:"-20";s:1:"w";s:3:"-20";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:1:"b";a:20:{s:1:"b";s:3:"-10";s:5:"comma";s:3:"-40";s:1:"l";s:3:"-20";s:6:"lacute";s:3:"-20";s:12:"lcommaaccent";s:3:"-20";s:6:"lslash";s:3:"-20";s:6:"period";s:3:"-40";s:1:"u";s:3:"-20";s:6:"uacute";s:3:"-20";s:11:"ucircumflex";s:3:"-20";s:9:"udieresis";s:3:"-20";s:6:"ugrave";s:3:"-20";s:13:"uhungarumlaut";s:3:"-20";s:7:"umacron";s:3:"-20";s:7:"uogonek";s:3:"-20";s:5:"uring";s:3:"-20";s:1:"v";s:3:"-20";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:1:"c";a:3:{s:5:"comma";s:3:"-15";s:1:"k";s:3:"-20";s:12:"kcommaaccent";s:3:"-20";}s:6:"cacute";a:3:{s:5:"comma";s:3:"-15";s:1:"k";s:3:"-20";s:12:"kcommaaccent";s:3:"-20";}s:6:"ccaron";a:3:{s:5:"comma";s:3:"-15";s:1:"k";s:3:"-20";s:12:"kcommaaccent";s:3:"-20";}s:8:"ccedilla";a:3:{s:5:"comma";s:3:"-15";s:1:"k";s:3:"-20";s:12:"kcommaaccent";s:3:"-20";}s:5:"colon";a:1:{s:5:"space";s:3:"-50";}s:5:"comma";a:2:{s:13:"quotedblright";s:4:"-100";s:10:"quoteright";s:4:"-100";}s:1:"e";a:8:{s:5:"comma";s:3:"-15";s:6:"period";s:3:"-15";s:1:"v";s:3:"-30";s:1:"w";s:3:"-20";s:1:"x";s:3:"-30";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:6:"eacute";a:8:{s:5:"comma";s:3:"-15";s:6:"period";s:3:"-15";s:1:"v";s:3:"-30";s:1:"w";s:3:"-20";s:1:"x";s:3:"-30";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:6:"ecaron";a:8:{s:5:"comma";s:3:"-15";s:6:"period";s:3:"-15";s:1:"v";s:3:"-30";s:1:"w";s:3:"-20";s:1:"x";s:3:"-30";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:11:"ecircumflex";a:8:{s:5:"comma";s:3:"-15";s:6:"period";s:3:"-15";s:1:"v";s:3:"-30";s:1:"w";s:3:"-20";s:1:"x";s:3:"-30";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:9:"edieresis";a:8:{s:5:"comma";s:3:"-15";s:6:"period";s:3:"-15";s:1:"v";s:3:"-30";s:1:"w";s:3:"-20";s:1:"x";s:3:"-30";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:10:"edotaccent";a:8:{s:5:"comma";s:3:"-15";s:6:"period";s:3:"-15";s:1:"v";s:3:"-30";s:1:"w";s:3:"-20";s:1:"x";s:3:"-30";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:6:"egrave";a:8:{s:5:"comma";s:3:"-15";s:6:"period";s:3:"-15";s:1:"v";s:3:"-30";s:1:"w";s:3:"-20";s:1:"x";s:3:"-30";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:7:"emacron";a:8:{s:5:"comma";s:3:"-15";s:6:"period";s:3:"-15";s:1:"v";s:3:"-30";s:1:"w";s:3:"-20";s:1:"x";s:3:"-30";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:7:"eogonek";a:8:{s:5:"comma";s:3:"-15";s:6:"period";s:3:"-15";s:1:"v";s:3:"-30";s:1:"w";s:3:"-20";s:1:"x";s:3:"-30";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:1:"f";a:33:{s:1:"a";s:3:"-30";s:6:"aacute";s:3:"-30";s:6:"abreve";s:3:"-30";s:11:"acircumflex";s:3:"-30";s:9:"adieresis";s:3:"-30";s:6:"agrave";s:3:"-30";s:7:"amacron";s:3:"-30";s:7:"aogonek";s:3:"-30";s:5:"aring";s:3:"-30";s:6:"atilde";s:3:"-30";s:5:"comma";s:3:"-30";s:8:"dotlessi";s:3:"-28";s:1:"e";s:3:"-30";s:6:"eacute";s:3:"-30";s:6:"ecaron";s:3:"-30";s:11:"ecircumflex";s:3:"-30";s:9:"edieresis";s:3:"-30";s:10:"edotaccent";s:3:"-30";s:6:"egrave";s:3:"-30";s:7:"emacron";s:3:"-30";s:7:"eogonek";s:3:"-30";s:1:"o";s:3:"-30";s:6:"oacute";s:3:"-30";s:11:"ocircumflex";s:3:"-30";s:9:"odieresis";s:3:"-30";s:6:"ograve";s:3:"-30";s:13:"ohungarumlaut";s:3:"-30";s:7:"omacron";s:3:"-30";s:6:"oslash";s:3:"-30";s:6:"otilde";s:3:"-30";s:6:"period";s:3:"-30";s:13:"quotedblright";s:2:"60";s:10:"quoteright";s:2:"50";}s:1:"g";a:4:{s:1:"r";s:3:"-10";s:6:"racute";s:3:"-10";s:6:"rcaron";s:3:"-10";s:12:"rcommaaccent";s:3:"-10";}s:6:"gbreve";a:4:{s:1:"r";s:3:"-10";s:6:"racute";s:3:"-10";s:6:"rcaron";s:3:"-10";s:12:"rcommaaccent";s:3:"-10";}s:12:"gcommaaccent";a:4:{s:1:"r";s:3:"-10";s:6:"racute";s:3:"-10";s:6:"rcaron";s:3:"-10";s:12:"rcommaaccent";s:3:"-10";}s:1:"h";a:3:{s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:1:"k";a:18:{s:1:"e";s:3:"-20";s:6:"eacute";s:3:"-20";s:6:"ecaron";s:3:"-20";s:11:"ecircumflex";s:3:"-20";s:9:"edieresis";s:3:"-20";s:10:"edotaccent";s:3:"-20";s:6:"egrave";s:3:"-20";s:7:"emacron";s:3:"-20";s:7:"eogonek";s:3:"-20";s:1:"o";s:3:"-20";s:6:"oacute";s:3:"-20";s:11:"ocircumflex";s:3:"-20";s:9:"odieresis";s:3:"-20";s:6:"ograve";s:3:"-20";s:13:"ohungarumlaut";s:3:"-20";s:7:"omacron";s:3:"-20";s:6:"oslash";s:3:"-20";s:6:"otilde";s:3:"-20";}s:12:"kcommaaccent";a:18:{s:1:"e";s:3:"-20";s:6:"eacute";s:3:"-20";s:6:"ecaron";s:3:"-20";s:11:"ecircumflex";s:3:"-20";s:9:"edieresis";s:3:"-20";s:10:"edotaccent";s:3:"-20";s:6:"egrave";s:3:"-20";s:7:"emacron";s:3:"-20";s:7:"eogonek";s:3:"-20";s:1:"o";s:3:"-20";s:6:"oacute";s:3:"-20";s:11:"ocircumflex";s:3:"-20";s:9:"odieresis";s:3:"-20";s:6:"ograve";s:3:"-20";s:13:"ohungarumlaut";s:3:"-20";s:7:"omacron";s:3:"-20";s:6:"oslash";s:3:"-20";s:6:"otilde";s:3:"-20";}s:1:"m";a:12:{s:1:"u";s:3:"-10";s:6:"uacute";s:3:"-10";s:11:"ucircumflex";s:3:"-10";s:9:"udieresis";s:3:"-10";s:6:"ugrave";s:3:"-10";s:13:"uhungarumlaut";s:3:"-10";s:7:"umacron";s:3:"-10";s:7:"uogonek";s:3:"-10";s:5:"uring";s:3:"-10";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:1:"n";a:13:{s:1:"u";s:3:"-10";s:6:"uacute";s:3:"-10";s:11:"ucircumflex";s:3:"-10";s:9:"udieresis";s:3:"-10";s:6:"ugrave";s:3:"-10";s:13:"uhungarumlaut";s:3:"-10";s:7:"umacron";s:3:"-10";s:7:"uogonek";s:3:"-10";s:5:"uring";s:3:"-10";s:1:"v";s:3:"-20";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:6:"nacute";a:13:{s:1:"u";s:3:"-10";s:6:"uacute";s:3:"-10";s:11:"ucircumflex";s:3:"-10";s:9:"udieresis";s:3:"-10";s:6:"ugrave";s:3:"-10";s:13:"uhungarumlaut";s:3:"-10";s:7:"umacron";s:3:"-10";s:7:"uogonek";s:3:"-10";s:5:"uring";s:3:"-10";s:1:"v";s:3:"-20";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:6:"ncaron";a:13:{s:1:"u";s:3:"-10";s:6:"uacute";s:3:"-10";s:11:"ucircumflex";s:3:"-10";s:9:"udieresis";s:3:"-10";s:6:"ugrave";s:3:"-10";s:13:"uhungarumlaut";s:3:"-10";s:7:"umacron";s:3:"-10";s:7:"uogonek";s:3:"-10";s:5:"uring";s:3:"-10";s:1:"v";s:3:"-20";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:12:"ncommaaccent";a:13:{s:1:"u";s:3:"-10";s:6:"uacute";s:3:"-10";s:11:"ucircumflex";s:3:"-10";s:9:"udieresis";s:3:"-10";s:6:"ugrave";s:3:"-10";s:13:"uhungarumlaut";s:3:"-10";s:7:"umacron";s:3:"-10";s:7:"uogonek";s:3:"-10";s:5:"uring";s:3:"-10";s:1:"v";s:3:"-20";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:6:"ntilde";a:13:{s:1:"u";s:3:"-10";s:6:"uacute";s:3:"-10";s:11:"ucircumflex";s:3:"-10";s:9:"udieresis";s:3:"-10";s:6:"ugrave";s:3:"-10";s:13:"uhungarumlaut";s:3:"-10";s:7:"umacron";s:3:"-10";s:7:"uogonek";s:3:"-10";s:5:"uring";s:3:"-10";s:1:"v";s:3:"-20";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:1:"o";a:8:{s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"x";s:3:"-30";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:6:"oacute";a:8:{s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"x";s:3:"-30";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:11:"ocircumflex";a:8:{s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"x";s:3:"-30";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:9:"odieresis";a:8:{s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"x";s:3:"-30";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:6:"ograve";a:8:{s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"x";s:3:"-30";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:13:"ohungarumlaut";a:8:{s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"x";s:3:"-30";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:7:"omacron";a:8:{s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"x";s:3:"-30";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:6:"oslash";a:94:{s:1:"a";s:3:"-55";s:6:"aacute";s:3:"-55";s:6:"abreve";s:3:"-55";s:11:"acircumflex";s:3:"-55";s:9:"adieresis";s:3:"-55";s:6:"agrave";s:3:"-55";s:7:"amacron";s:3:"-55";s:7:"aogonek";s:3:"-55";s:5:"aring";s:3:"-55";s:6:"atilde";s:3:"-55";s:1:"b";s:3:"-55";s:1:"c";s:3:"-55";s:6:"cacute";s:3:"-55";s:6:"ccaron";s:3:"-55";s:8:"ccedilla";s:3:"-55";s:5:"comma";s:3:"-95";s:1:"d";s:3:"-55";s:6:"dcroat";s:3:"-55";s:1:"e";s:3:"-55";s:6:"eacute";s:3:"-55";s:6:"ecaron";s:3:"-55";s:11:"ecircumflex";s:3:"-55";s:9:"edieresis";s:3:"-55";s:10:"edotaccent";s:3:"-55";s:6:"egrave";s:3:"-55";s:7:"emacron";s:3:"-55";s:7:"eogonek";s:3:"-55";s:1:"f";s:3:"-55";s:1:"g";s:3:"-55";s:6:"gbreve";s:3:"-55";s:12:"gcommaaccent";s:3:"-55";s:1:"h";s:3:"-55";s:1:"i";s:3:"-55";s:6:"iacute";s:3:"-55";s:11:"icircumflex";s:3:"-55";s:9:"idieresis";s:3:"-55";s:6:"igrave";s:3:"-55";s:7:"imacron";s:3:"-55";s:7:"iogonek";s:3:"-55";s:1:"j";s:3:"-55";s:1:"k";s:3:"-55";s:12:"kcommaaccent";s:3:"-55";s:1:"l";s:3:"-55";s:6:"lacute";s:3:"-55";s:12:"lcommaaccent";s:3:"-55";s:6:"lslash";s:3:"-55";s:1:"m";s:3:"-55";s:1:"n";s:3:"-55";s:6:"nacute";s:3:"-55";s:6:"ncaron";s:3:"-55";s:12:"ncommaaccent";s:3:"-55";s:6:"ntilde";s:3:"-55";s:1:"o";s:3:"-55";s:6:"oacute";s:3:"-55";s:11:"ocircumflex";s:3:"-55";s:9:"odieresis";s:3:"-55";s:6:"ograve";s:3:"-55";s:13:"ohungarumlaut";s:3:"-55";s:7:"omacron";s:3:"-55";s:6:"oslash";s:3:"-55";s:6:"otilde";s:3:"-55";s:1:"p";s:3:"-55";s:6:"period";s:3:"-95";s:1:"q";s:3:"-55";s:1:"r";s:3:"-55";s:6:"racute";s:3:"-55";s:6:"rcaron";s:3:"-55";s:12:"rcommaaccent";s:3:"-55";s:1:"s";s:3:"-55";s:6:"sacute";s:3:"-55";s:6:"scaron";s:3:"-55";s:8:"scedilla";s:3:"-55";s:12:"scommaaccent";s:3:"-55";s:1:"t";s:3:"-55";s:12:"tcommaaccent";s:3:"-55";s:1:"u";s:3:"-55";s:6:"uacute";s:3:"-55";s:11:"ucircumflex";s:3:"-55";s:9:"udieresis";s:3:"-55";s:6:"ugrave";s:3:"-55";s:13:"uhungarumlaut";s:3:"-55";s:7:"umacron";s:3:"-55";s:7:"uogonek";s:3:"-55";s:5:"uring";s:3:"-55";s:1:"v";s:3:"-70";s:1:"w";s:3:"-70";s:1:"x";s:3:"-85";s:1:"y";s:3:"-70";s:6:"yacute";s:3:"-70";s:9:"ydieresis";s:3:"-70";s:1:"z";s:3:"-55";s:6:"zacute";s:3:"-55";s:6:"zcaron";s:3:"-55";s:10:"zdotaccent";s:3:"-55";}s:6:"otilde";a:8:{s:5:"comma";s:3:"-40";s:6:"period";s:3:"-40";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"x";s:3:"-30";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:1:"p";a:5:{s:5:"comma";s:3:"-35";s:6:"period";s:3:"-35";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:6:"period";a:3:{s:13:"quotedblright";s:4:"-100";s:10:"quoteright";s:4:"-100";s:5:"space";s:3:"-60";}s:13:"quotedblright";a:1:{s:5:"space";s:3:"-40";}s:9:"quoteleft";a:1:{s:9:"quoteleft";s:3:"-57";}s:10:"quoteright";a:13:{s:1:"d";s:3:"-50";s:6:"dcroat";s:3:"-50";s:10:"quoteright";s:3:"-57";s:1:"r";s:3:"-50";s:6:"racute";s:3:"-50";s:6:"rcaron";s:3:"-50";s:12:"rcommaaccent";s:3:"-50";s:1:"s";s:3:"-50";s:6:"sacute";s:3:"-50";s:6:"scaron";s:3:"-50";s:8:"scedilla";s:3:"-50";s:12:"scommaaccent";s:3:"-50";s:5:"space";s:3:"-70";}s:1:"r";a:49:{s:1:"a";s:3:"-10";s:6:"aacute";s:3:"-10";s:6:"abreve";s:3:"-10";s:11:"acircumflex";s:3:"-10";s:9:"adieresis";s:3:"-10";s:6:"agrave";s:3:"-10";s:7:"amacron";s:3:"-10";s:7:"aogonek";s:3:"-10";s:5:"aring";s:3:"-10";s:6:"atilde";s:3:"-10";s:5:"colon";s:2:"30";s:5:"comma";s:3:"-50";s:1:"i";s:2:"15";s:6:"iacute";s:2:"15";s:11:"icircumflex";s:2:"15";s:9:"idieresis";s:2:"15";s:6:"igrave";s:2:"15";s:7:"imacron";s:2:"15";s:7:"iogonek";s:2:"15";s:1:"k";s:2:"15";s:12:"kcommaaccent";s:2:"15";s:1:"l";s:2:"15";s:6:"lacute";s:2:"15";s:12:"lcommaaccent";s:2:"15";s:6:"lslash";s:2:"15";s:1:"m";s:2:"25";s:1:"n";s:2:"25";s:6:"nacute";s:2:"25";s:6:"ncaron";s:2:"25";s:12:"ncommaaccent";s:2:"25";s:6:"ntilde";s:2:"25";s:1:"p";s:2:"30";s:6:"period";s:3:"-50";s:9:"semicolon";s:2:"30";s:1:"t";s:2:"40";s:12:"tcommaaccent";s:2:"40";s:1:"u";s:2:"15";s:6:"uacute";s:2:"15";s:11:"ucircumflex";s:2:"15";s:9:"udieresis";s:2:"15";s:6:"ugrave";s:2:"15";s:13:"uhungarumlaut";s:2:"15";s:7:"umacron";s:2:"15";s:7:"uogonek";s:2:"15";s:5:"uring";s:2:"15";s:1:"v";s:2:"30";s:1:"y";s:2:"30";s:6:"yacute";s:2:"30";s:9:"ydieresis";s:2:"30";}s:6:"racute";a:49:{s:1:"a";s:3:"-10";s:6:"aacute";s:3:"-10";s:6:"abreve";s:3:"-10";s:11:"acircumflex";s:3:"-10";s:9:"adieresis";s:3:"-10";s:6:"agrave";s:3:"-10";s:7:"amacron";s:3:"-10";s:7:"aogonek";s:3:"-10";s:5:"aring";s:3:"-10";s:6:"atilde";s:3:"-10";s:5:"colon";s:2:"30";s:5:"comma";s:3:"-50";s:1:"i";s:2:"15";s:6:"iacute";s:2:"15";s:11:"icircumflex";s:2:"15";s:9:"idieresis";s:2:"15";s:6:"igrave";s:2:"15";s:7:"imacron";s:2:"15";s:7:"iogonek";s:2:"15";s:1:"k";s:2:"15";s:12:"kcommaaccent";s:2:"15";s:1:"l";s:2:"15";s:6:"lacute";s:2:"15";s:12:"lcommaaccent";s:2:"15";s:6:"lslash";s:2:"15";s:1:"m";s:2:"25";s:1:"n";s:2:"25";s:6:"nacute";s:2:"25";s:6:"ncaron";s:2:"25";s:12:"ncommaaccent";s:2:"25";s:6:"ntilde";s:2:"25";s:1:"p";s:2:"30";s:6:"period";s:3:"-50";s:9:"semicolon";s:2:"30";s:1:"t";s:2:"40";s:12:"tcommaaccent";s:2:"40";s:1:"u";s:2:"15";s:6:"uacute";s:2:"15";s:11:"ucircumflex";s:2:"15";s:9:"udieresis";s:2:"15";s:6:"ugrave";s:2:"15";s:13:"uhungarumlaut";s:2:"15";s:7:"umacron";s:2:"15";s:7:"uogonek";s:2:"15";s:5:"uring";s:2:"15";s:1:"v";s:2:"30";s:1:"y";s:2:"30";s:6:"yacute";s:2:"30";s:9:"ydieresis";s:2:"30";}s:6:"rcaron";a:49:{s:1:"a";s:3:"-10";s:6:"aacute";s:3:"-10";s:6:"abreve";s:3:"-10";s:11:"acircumflex";s:3:"-10";s:9:"adieresis";s:3:"-10";s:6:"agrave";s:3:"-10";s:7:"amacron";s:3:"-10";s:7:"aogonek";s:3:"-10";s:5:"aring";s:3:"-10";s:6:"atilde";s:3:"-10";s:5:"colon";s:2:"30";s:5:"comma";s:3:"-50";s:1:"i";s:2:"15";s:6:"iacute";s:2:"15";s:11:"icircumflex";s:2:"15";s:9:"idieresis";s:2:"15";s:6:"igrave";s:2:"15";s:7:"imacron";s:2:"15";s:7:"iogonek";s:2:"15";s:1:"k";s:2:"15";s:12:"kcommaaccent";s:2:"15";s:1:"l";s:2:"15";s:6:"lacute";s:2:"15";s:12:"lcommaaccent";s:2:"15";s:6:"lslash";s:2:"15";s:1:"m";s:2:"25";s:1:"n";s:2:"25";s:6:"nacute";s:2:"25";s:6:"ncaron";s:2:"25";s:12:"ncommaaccent";s:2:"25";s:6:"ntilde";s:2:"25";s:1:"p";s:2:"30";s:6:"period";s:3:"-50";s:9:"semicolon";s:2:"30";s:1:"t";s:2:"40";s:12:"tcommaaccent";s:2:"40";s:1:"u";s:2:"15";s:6:"uacute";s:2:"15";s:11:"ucircumflex";s:2:"15";s:9:"udieresis";s:2:"15";s:6:"ugrave";s:2:"15";s:13:"uhungarumlaut";s:2:"15";s:7:"umacron";s:2:"15";s:7:"uogonek";s:2:"15";s:5:"uring";s:2:"15";s:1:"v";s:2:"30";s:1:"y";s:2:"30";s:6:"yacute";s:2:"30";s:9:"ydieresis";s:2:"30";}s:12:"rcommaaccent";a:49:{s:1:"a";s:3:"-10";s:6:"aacute";s:3:"-10";s:6:"abreve";s:3:"-10";s:11:"acircumflex";s:3:"-10";s:9:"adieresis";s:3:"-10";s:6:"agrave";s:3:"-10";s:7:"amacron";s:3:"-10";s:7:"aogonek";s:3:"-10";s:5:"aring";s:3:"-10";s:6:"atilde";s:3:"-10";s:5:"colon";s:2:"30";s:5:"comma";s:3:"-50";s:1:"i";s:2:"15";s:6:"iacute";s:2:"15";s:11:"icircumflex";s:2:"15";s:9:"idieresis";s:2:"15";s:6:"igrave";s:2:"15";s:7:"imacron";s:2:"15";s:7:"iogonek";s:2:"15";s:1:"k";s:2:"15";s:12:"kcommaaccent";s:2:"15";s:1:"l";s:2:"15";s:6:"lacute";s:2:"15";s:12:"lcommaaccent";s:2:"15";s:6:"lslash";s:2:"15";s:1:"m";s:2:"25";s:1:"n";s:2:"25";s:6:"nacute";s:2:"25";s:6:"ncaron";s:2:"25";s:12:"ncommaaccent";s:2:"25";s:6:"ntilde";s:2:"25";s:1:"p";s:2:"30";s:6:"period";s:3:"-50";s:9:"semicolon";s:2:"30";s:1:"t";s:2:"40";s:12:"tcommaaccent";s:2:"40";s:1:"u";s:2:"15";s:6:"uacute";s:2:"15";s:11:"ucircumflex";s:2:"15";s:9:"udieresis";s:2:"15";s:6:"ugrave";s:2:"15";s:13:"uhungarumlaut";s:2:"15";s:7:"umacron";s:2:"15";s:7:"uogonek";s:2:"15";s:5:"uring";s:2:"15";s:1:"v";s:2:"30";s:1:"y";s:2:"30";s:6:"yacute";s:2:"30";s:9:"ydieresis";s:2:"30";}s:1:"s";a:3:{s:5:"comma";s:3:"-15";s:6:"period";s:3:"-15";s:1:"w";s:3:"-30";}s:6:"sacute";a:3:{s:5:"comma";s:3:"-15";s:6:"period";s:3:"-15";s:1:"w";s:3:"-30";}s:6:"scaron";a:3:{s:5:"comma";s:3:"-15";s:6:"period";s:3:"-15";s:1:"w";s:3:"-30";}s:8:"scedilla";a:3:{s:5:"comma";s:3:"-15";s:6:"period";s:3:"-15";s:1:"w";s:3:"-30";}s:12:"scommaaccent";a:3:{s:5:"comma";s:3:"-15";s:6:"period";s:3:"-15";s:1:"w";s:3:"-30";}s:9:"semicolon";a:1:{s:5:"space";s:3:"-50";}s:5:"space";a:10:{s:1:"T";s:3:"-50";s:6:"Tcaron";s:3:"-50";s:12:"Tcommaaccent";s:3:"-50";s:1:"V";s:3:"-50";s:1:"W";s:3:"-40";s:1:"Y";s:3:"-90";s:6:"Yacute";s:3:"-90";s:9:"Ydieresis";s:3:"-90";s:12:"quotedblleft";s:3:"-30";s:9:"quoteleft";s:3:"-60";}s:1:"v";a:30:{s:1:"a";s:3:"-25";s:6:"aacute";s:3:"-25";s:6:"abreve";s:3:"-25";s:11:"acircumflex";s:3:"-25";s:9:"adieresis";s:3:"-25";s:6:"agrave";s:3:"-25";s:7:"amacron";s:3:"-25";s:7:"aogonek";s:3:"-25";s:5:"aring";s:3:"-25";s:6:"atilde";s:3:"-25";s:5:"comma";s:3:"-80";s:1:"e";s:3:"-25";s:6:"eacute";s:3:"-25";s:6:"ecaron";s:3:"-25";s:11:"ecircumflex";s:3:"-25";s:9:"edieresis";s:3:"-25";s:10:"edotaccent";s:3:"-25";s:6:"egrave";s:3:"-25";s:7:"emacron";s:3:"-25";s:7:"eogonek";s:3:"-25";s:1:"o";s:3:"-25";s:6:"oacute";s:3:"-25";s:11:"ocircumflex";s:3:"-25";s:9:"odieresis";s:3:"-25";s:6:"ograve";s:3:"-25";s:13:"ohungarumlaut";s:3:"-25";s:7:"omacron";s:3:"-25";s:6:"oslash";s:3:"-25";s:6:"otilde";s:3:"-25";s:6:"period";s:3:"-80";}s:1:"w";a:30:{s:1:"a";s:3:"-15";s:6:"aacute";s:3:"-15";s:6:"abreve";s:3:"-15";s:11:"acircumflex";s:3:"-15";s:9:"adieresis";s:3:"-15";s:6:"agrave";s:3:"-15";s:7:"amacron";s:3:"-15";s:7:"aogonek";s:3:"-15";s:5:"aring";s:3:"-15";s:6:"atilde";s:3:"-15";s:5:"comma";s:3:"-60";s:1:"e";s:3:"-10";s:6:"eacute";s:3:"-10";s:6:"ecaron";s:3:"-10";s:11:"ecircumflex";s:3:"-10";s:9:"edieresis";s:3:"-10";s:10:"edotaccent";s:3:"-10";s:6:"egrave";s:3:"-10";s:7:"emacron";s:3:"-10";s:7:"eogonek";s:3:"-10";s:1:"o";s:3:"-10";s:6:"oacute";s:3:"-10";s:11:"ocircumflex";s:3:"-10";s:9:"odieresis";s:3:"-10";s:6:"ograve";s:3:"-10";s:13:"ohungarumlaut";s:3:"-10";s:7:"omacron";s:3:"-10";s:6:"oslash";s:3:"-10";s:6:"otilde";s:3:"-10";s:6:"period";s:3:"-60";}s:1:"x";a:9:{s:1:"e";s:3:"-30";s:6:"eacute";s:3:"-30";s:6:"ecaron";s:3:"-30";s:11:"ecircumflex";s:3:"-30";s:9:"edieresis";s:3:"-30";s:10:"edotaccent";s:3:"-30";s:6:"egrave";s:3:"-30";s:7:"emacron";s:3:"-30";s:7:"eogonek";s:3:"-30";}s:1:"y";a:30:{s:1:"a";s:3:"-20";s:6:"aacute";s:3:"-20";s:6:"abreve";s:3:"-20";s:11:"acircumflex";s:3:"-20";s:9:"adieresis";s:3:"-20";s:6:"agrave";s:3:"-20";s:7:"amacron";s:3:"-20";s:7:"aogonek";s:3:"-20";s:5:"aring";s:3:"-20";s:6:"atilde";s:3:"-20";s:5:"comma";s:4:"-100";s:1:"e";s:3:"-20";s:6:"eacute";s:3:"-20";s:6:"ecaron";s:3:"-20";s:11:"ecircumflex";s:3:"-20";s:9:"edieresis";s:3:"-20";s:10:"edotaccent";s:3:"-20";s:6:"egrave";s:3:"-20";s:7:"emacron";s:3:"-20";s:7:"eogonek";s:3:"-20";s:1:"o";s:3:"-20";s:6:"oacute";s:3:"-20";s:11:"ocircumflex";s:3:"-20";s:9:"odieresis";s:3:"-20";s:6:"ograve";s:3:"-20";s:13:"ohungarumlaut";s:3:"-20";s:7:"omacron";s:3:"-20";s:6:"oslash";s:3:"-20";s:6:"otilde";s:3:"-20";s:6:"period";s:4:"-100";}s:6:"yacute";a:30:{s:1:"a";s:3:"-20";s:6:"aacute";s:3:"-20";s:6:"abreve";s:3:"-20";s:11:"acircumflex";s:3:"-20";s:9:"adieresis";s:3:"-20";s:6:"agrave";s:3:"-20";s:7:"amacron";s:3:"-20";s:7:"aogonek";s:3:"-20";s:5:"aring";s:3:"-20";s:6:"atilde";s:3:"-20";s:5:"comma";s:4:"-100";s:1:"e";s:3:"-20";s:6:"eacute";s:3:"-20";s:6:"ecaron";s:3:"-20";s:11:"ecircumflex";s:3:"-20";s:9:"edieresis";s:3:"-20";s:10:"edotaccent";s:3:"-20";s:6:"egrave";s:3:"-20";s:7:"emacron";s:3:"-20";s:7:"eogonek";s:3:"-20";s:1:"o";s:3:"-20";s:6:"oacute";s:3:"-20";s:11:"ocircumflex";s:3:"-20";s:9:"odieresis";s:3:"-20";s:6:"ograve";s:3:"-20";s:13:"ohungarumlaut";s:3:"-20";s:7:"omacron";s:3:"-20";s:6:"oslash";s:3:"-20";s:6:"otilde";s:3:"-20";s:6:"period";s:4:"-100";}s:9:"ydieresis";a:30:{s:1:"a";s:3:"-20";s:6:"aacute";s:3:"-20";s:6:"abreve";s:3:"-20";s:11:"acircumflex";s:3:"-20";s:9:"adieresis";s:3:"-20";s:6:"agrave";s:3:"-20";s:7:"amacron";s:3:"-20";s:7:"aogonek";s:3:"-20";s:5:"aring";s:3:"-20";s:6:"atilde";s:3:"-20";s:5:"comma";s:4:"-100";s:1:"e";s:3:"-20";s:6:"eacute";s:3:"-20";s:6:"ecaron";s:3:"-20";s:11:"ecircumflex";s:3:"-20";s:9:"edieresis";s:3:"-20";s:10:"edotaccent";s:3:"-20";s:6:"egrave";s:3:"-20";s:7:"emacron";s:3:"-20";s:7:"eogonek";s:3:"-20";s:1:"o";s:3:"-20";s:6:"oacute";s:3:"-20";s:11:"ocircumflex";s:3:"-20";s:9:"odieresis";s:3:"-20";s:6:"ograve";s:3:"-20";s:13:"ohungarumlaut";s:3:"-20";s:7:"omacron";s:3:"-20";s:6:"oslash";s:3:"-20";s:6:"otilde";s:3:"-20";s:6:"period";s:4:"-100";}s:1:"z";a:18:{s:1:"e";s:3:"-15";s:6:"eacute";s:3:"-15";s:6:"ecaron";s:3:"-15";s:11:"ecircumflex";s:3:"-15";s:9:"edieresis";s:3:"-15";s:10:"edotaccent";s:3:"-15";s:6:"egrave";s:3:"-15";s:7:"emacron";s:3:"-15";s:7:"eogonek";s:3:"-15";s:1:"o";s:3:"-15";s:6:"oacute";s:3:"-15";s:11:"ocircumflex";s:3:"-15";s:9:"odieresis";s:3:"-15";s:6:"ograve";s:3:"-15";s:13:"ohungarumlaut";s:3:"-15";s:7:"omacron";s:3:"-15";s:6:"oslash";s:3:"-15";s:6:"otilde";s:3:"-15";}s:6:"zacute";a:18:{s:1:"e";s:3:"-15";s:6:"eacute";s:3:"-15";s:6:"ecaron";s:3:"-15";s:11:"ecircumflex";s:3:"-15";s:9:"edieresis";s:3:"-15";s:10:"edotaccent";s:3:"-15";s:6:"egrave";s:3:"-15";s:7:"emacron";s:3:"-15";s:7:"eogonek";s:3:"-15";s:1:"o";s:3:"-15";s:6:"oacute";s:3:"-15";s:11:"ocircumflex";s:3:"-15";s:9:"odieresis";s:3:"-15";s:6:"ograve";s:3:"-15";s:13:"ohungarumlaut";s:3:"-15";s:7:"omacron";s:3:"-15";s:6:"oslash";s:3:"-15";s:6:"otilde";s:3:"-15";}s:6:"zcaron";a:18:{s:1:"e";s:3:"-15";s:6:"eacute";s:3:"-15";s:6:"ecaron";s:3:"-15";s:11:"ecircumflex";s:3:"-15";s:9:"edieresis";s:3:"-15";s:10:"edotaccent";s:3:"-15";s:6:"egrave";s:3:"-15";s:7:"emacron";s:3:"-15";s:7:"eogonek";s:3:"-15";s:1:"o";s:3:"-15";s:6:"oacute";s:3:"-15";s:11:"ocircumflex";s:3:"-15";s:9:"odieresis";s:3:"-15";s:6:"ograve";s:3:"-15";s:13:"ohungarumlaut";s:3:"-15";s:7:"omacron";s:3:"-15";s:6:"oslash";s:3:"-15";s:6:"otilde";s:3:"-15";}s:10:"zdotaccent";a:18:{s:1:"e";s:3:"-15";s:6:"eacute";s:3:"-15";s:6:"ecaron";s:3:"-15";s:11:"ecircumflex";s:3:"-15";s:9:"edieresis";s:3:"-15";s:10:"edotaccent";s:3:"-15";s:6:"egrave";s:3:"-15";s:7:"emacron";s:3:"-15";s:7:"eogonek";s:3:"-15";s:1:"o";s:3:"-15";s:6:"oacute";s:3:"-15";s:11:"ocircumflex";s:3:"-15";s:9:"odieresis";s:3:"-15";s:6:"ograve";s:3:"-15";s:13:"ohungarumlaut";s:3:"-15";s:7:"omacron";s:3:"-15";s:6:"oslash";s:3:"-15";s:6:"otilde";s:3:"-15";}}s:9:"_version_";i:1;}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/php_Symbol.afm b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/php_Symbol.afm new file mode 100755 index 00000000..856b75e2 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/php_Symbol.afm @@ -0,0 +1 @@ +a:17:{s:8:"FontName";s:6:"Symbol";s:8:"FullName";s:6:"Symbol";s:10:"FamilyName";s:6:"Symbol";s:6:"Weight";s:6:"Medium";s:11:"ItalicAngle";s:1:"0";s:12:"IsFixedPitch";s:5:"false";s:12:"CharacterSet";s:7:"Special";s:8:"FontBBox";a:4:{i:0;s:4:"-180";i:1;s:4:"-293";i:2;s:4:"1090";i:3;s:4:"1010";}s:17:"UnderlinePosition";s:4:"-100";s:18:"UnderlineThickness";s:2:"50";s:7:"Version";s:7:"001.008";s:14:"EncodingScheme";s:12:"FontSpecific";s:5:"StdHW";s:2:"92";s:5:"StdVW";s:2:"85";s:16:"StartCharMetrics";s:3:"190";s:1:"C";a:379:{i:32;a:4:{s:1:"C";s:2:"32";s:2:"WX";s:3:"250";s:1:"N";s:5:"space";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:1:"0";i:2;s:1:"0";i:3;s:1:"0";}}s:5:"space";a:4:{s:1:"C";s:2:"32";s:2:"WX";s:3:"250";s:1:"N";s:5:"space";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:1:"0";i:2;s:1:"0";i:3;s:1:"0";}}i:33;a:4:{s:1:"C";s:2:"33";s:2:"WX";s:3:"333";s:1:"N";s:6:"exclam";s:1:"B";a:4:{i:0;s:3:"128";i:1;s:3:"-17";i:2;s:3:"240";i:3;s:3:"672";}}s:6:"exclam";a:4:{s:1:"C";s:2:"33";s:2:"WX";s:3:"333";s:1:"N";s:6:"exclam";s:1:"B";a:4:{i:0;s:3:"128";i:1;s:3:"-17";i:2;s:3:"240";i:3;s:3:"672";}}i:34;a:4:{s:1:"C";s:2:"34";s:2:"WX";s:3:"713";s:1:"N";s:9:"universal";s:1:"B";a:4:{i:0;s:2:"31";i:1;s:1:"0";i:2;s:3:"681";i:3;s:3:"705";}}s:9:"universal";a:4:{s:1:"C";s:2:"34";s:2:"WX";s:3:"713";s:1:"N";s:9:"universal";s:1:"B";a:4:{i:0;s:2:"31";i:1;s:1:"0";i:2;s:3:"681";i:3;s:3:"705";}}i:35;a:4:{s:1:"C";s:2:"35";s:2:"WX";s:3:"500";s:1:"N";s:10:"numbersign";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:3:"-16";i:2;s:3:"481";i:3;s:3:"673";}}s:10:"numbersign";a:4:{s:1:"C";s:2:"35";s:2:"WX";s:3:"500";s:1:"N";s:10:"numbersign";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:3:"-16";i:2;s:3:"481";i:3;s:3:"673";}}i:36;a:4:{s:1:"C";s:2:"36";s:2:"WX";s:3:"549";s:1:"N";s:11:"existential";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:1:"0";i:2;s:3:"478";i:3;s:3:"707";}}s:11:"existential";a:4:{s:1:"C";s:2:"36";s:2:"WX";s:3:"549";s:1:"N";s:11:"existential";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:1:"0";i:2;s:3:"478";i:3;s:3:"707";}}i:37;a:4:{s:1:"C";s:2:"37";s:2:"WX";s:3:"833";s:1:"N";s:7:"percent";s:1:"B";a:4:{i:0;s:2:"63";i:1;s:3:"-36";i:2;s:3:"771";i:3;s:3:"655";}}s:7:"percent";a:4:{s:1:"C";s:2:"37";s:2:"WX";s:3:"833";s:1:"N";s:7:"percent";s:1:"B";a:4:{i:0;s:2:"63";i:1;s:3:"-36";i:2;s:3:"771";i:3;s:3:"655";}}i:38;a:4:{s:1:"C";s:2:"38";s:2:"WX";s:3:"778";s:1:"N";s:9:"ampersand";s:1:"B";a:4:{i:0;s:2:"41";i:1;s:3:"-18";i:2;s:3:"750";i:3;s:3:"661";}}s:9:"ampersand";a:4:{s:1:"C";s:2:"38";s:2:"WX";s:3:"778";s:1:"N";s:9:"ampersand";s:1:"B";a:4:{i:0;s:2:"41";i:1;s:3:"-18";i:2;s:3:"750";i:3;s:3:"661";}}i:39;a:4:{s:1:"C";s:2:"39";s:2:"WX";s:3:"439";s:1:"N";s:8:"suchthat";s:1:"B";a:4:{i:0;s:2:"48";i:1;s:3:"-17";i:2;s:3:"414";i:3;s:3:"500";}}s:8:"suchthat";a:4:{s:1:"C";s:2:"39";s:2:"WX";s:3:"439";s:1:"N";s:8:"suchthat";s:1:"B";a:4:{i:0;s:2:"48";i:1;s:3:"-17";i:2;s:3:"414";i:3;s:3:"500";}}i:40;a:4:{s:1:"C";s:2:"40";s:2:"WX";s:3:"333";s:1:"N";s:9:"parenleft";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:4:"-191";i:2;s:3:"300";i:3;s:3:"673";}}s:9:"parenleft";a:4:{s:1:"C";s:2:"40";s:2:"WX";s:3:"333";s:1:"N";s:9:"parenleft";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:4:"-191";i:2;s:3:"300";i:3;s:3:"673";}}i:41;a:4:{s:1:"C";s:2:"41";s:2:"WX";s:3:"333";s:1:"N";s:10:"parenright";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:4:"-191";i:2;s:3:"277";i:3;s:3:"673";}}s:10:"parenright";a:4:{s:1:"C";s:2:"41";s:2:"WX";s:3:"333";s:1:"N";s:10:"parenright";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:4:"-191";i:2;s:3:"277";i:3;s:3:"673";}}i:42;a:4:{s:1:"C";s:2:"42";s:2:"WX";s:3:"500";s:1:"N";s:12:"asteriskmath";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:3:"134";i:2;s:3:"427";i:3;s:3:"551";}}s:12:"asteriskmath";a:4:{s:1:"C";s:2:"42";s:2:"WX";s:3:"500";s:1:"N";s:12:"asteriskmath";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:3:"134";i:2;s:3:"427";i:3;s:3:"551";}}i:43;a:4:{s:1:"C";s:2:"43";s:2:"WX";s:3:"549";s:1:"N";s:4:"plus";s:1:"B";a:4:{i:0;s:2:"10";i:1;s:1:"0";i:2;s:3:"539";i:3;s:3:"533";}}s:4:"plus";a:4:{s:1:"C";s:2:"43";s:2:"WX";s:3:"549";s:1:"N";s:4:"plus";s:1:"B";a:4:{i:0;s:2:"10";i:1;s:1:"0";i:2;s:3:"539";i:3;s:3:"533";}}i:44;a:4:{s:1:"C";s:2:"44";s:2:"WX";s:3:"250";s:1:"N";s:5:"comma";s:1:"B";a:4:{i:0;s:2:"56";i:1;s:4:"-152";i:2;s:3:"194";i:3;s:3:"104";}}s:5:"comma";a:4:{s:1:"C";s:2:"44";s:2:"WX";s:3:"250";s:1:"N";s:5:"comma";s:1:"B";a:4:{i:0;s:2:"56";i:1;s:4:"-152";i:2;s:3:"194";i:3;s:3:"104";}}i:45;a:4:{s:1:"C";s:2:"45";s:2:"WX";s:3:"549";s:1:"N";s:5:"minus";s:1:"B";a:4:{i:0;s:2:"11";i:1;s:3:"233";i:2;s:3:"535";i:3;s:3:"288";}}s:5:"minus";a:4:{s:1:"C";s:2:"45";s:2:"WX";s:3:"549";s:1:"N";s:5:"minus";s:1:"B";a:4:{i:0;s:2:"11";i:1;s:3:"233";i:2;s:3:"535";i:3;s:3:"288";}}i:46;a:4:{s:1:"C";s:2:"46";s:2:"WX";s:3:"250";s:1:"N";s:6:"period";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:3:"-17";i:2;s:3:"181";i:3;s:2:"95";}}s:6:"period";a:4:{s:1:"C";s:2:"46";s:2:"WX";s:3:"250";s:1:"N";s:6:"period";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:3:"-17";i:2;s:3:"181";i:3;s:2:"95";}}i:47;a:4:{s:1:"C";s:2:"47";s:2:"WX";s:3:"278";s:1:"N";s:5:"slash";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:3:"-18";i:2;s:3:"254";i:3;s:3:"646";}}s:5:"slash";a:4:{s:1:"C";s:2:"47";s:2:"WX";s:3:"278";s:1:"N";s:5:"slash";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:3:"-18";i:2;s:3:"254";i:3;s:3:"646";}}i:48;a:4:{s:1:"C";s:2:"48";s:2:"WX";s:3:"500";s:1:"N";s:4:"zero";s:1:"B";a:4:{i:0;s:2:"24";i:1;s:3:"-14";i:2;s:3:"476";i:3;s:3:"685";}}s:4:"zero";a:4:{s:1:"C";s:2:"48";s:2:"WX";s:3:"500";s:1:"N";s:4:"zero";s:1:"B";a:4:{i:0;s:2:"24";i:1;s:3:"-14";i:2;s:3:"476";i:3;s:3:"685";}}i:49;a:4:{s:1:"C";s:2:"49";s:2:"WX";s:3:"500";s:1:"N";s:3:"one";s:1:"B";a:4:{i:0;s:3:"117";i:1;s:1:"0";i:2;s:3:"390";i:3;s:3:"673";}}s:3:"one";a:4:{s:1:"C";s:2:"49";s:2:"WX";s:3:"500";s:1:"N";s:3:"one";s:1:"B";a:4:{i:0;s:3:"117";i:1;s:1:"0";i:2;s:3:"390";i:3;s:3:"673";}}i:50;a:4:{s:1:"C";s:2:"50";s:2:"WX";s:3:"500";s:1:"N";s:3:"two";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:1:"0";i:2;s:3:"475";i:3;s:3:"685";}}s:3:"two";a:4:{s:1:"C";s:2:"50";s:2:"WX";s:3:"500";s:1:"N";s:3:"two";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:1:"0";i:2;s:3:"475";i:3;s:3:"685";}}i:51;a:4:{s:1:"C";s:2:"51";s:2:"WX";s:3:"500";s:1:"N";s:5:"three";s:1:"B";a:4:{i:0;s:2:"43";i:1;s:3:"-14";i:2;s:3:"435";i:3;s:3:"685";}}s:5:"three";a:4:{s:1:"C";s:2:"51";s:2:"WX";s:3:"500";s:1:"N";s:5:"three";s:1:"B";a:4:{i:0;s:2:"43";i:1;s:3:"-14";i:2;s:3:"435";i:3;s:3:"685";}}i:52;a:4:{s:1:"C";s:2:"52";s:2:"WX";s:3:"500";s:1:"N";s:4:"four";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:1:"0";i:2;s:3:"469";i:3;s:3:"685";}}s:4:"four";a:4:{s:1:"C";s:2:"52";s:2:"WX";s:3:"500";s:1:"N";s:4:"four";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:1:"0";i:2;s:3:"469";i:3;s:3:"685";}}i:53;a:4:{s:1:"C";s:2:"53";s:2:"WX";s:3:"500";s:1:"N";s:4:"five";s:1:"B";a:4:{i:0;s:2:"32";i:1;s:3:"-14";i:2;s:3:"445";i:3;s:3:"690";}}s:4:"five";a:4:{s:1:"C";s:2:"53";s:2:"WX";s:3:"500";s:1:"N";s:4:"five";s:1:"B";a:4:{i:0;s:2:"32";i:1;s:3:"-14";i:2;s:3:"445";i:3;s:3:"690";}}i:54;a:4:{s:1:"C";s:2:"54";s:2:"WX";s:3:"500";s:1:"N";s:3:"six";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-14";i:2;s:3:"468";i:3;s:3:"685";}}s:3:"six";a:4:{s:1:"C";s:2:"54";s:2:"WX";s:3:"500";s:1:"N";s:3:"six";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-14";i:2;s:3:"468";i:3;s:3:"685";}}i:55;a:4:{s:1:"C";s:2:"55";s:2:"WX";s:3:"500";s:1:"N";s:5:"seven";s:1:"B";a:4:{i:0;s:2:"24";i:1;s:3:"-16";i:2;s:3:"448";i:3;s:3:"673";}}s:5:"seven";a:4:{s:1:"C";s:2:"55";s:2:"WX";s:3:"500";s:1:"N";s:5:"seven";s:1:"B";a:4:{i:0;s:2:"24";i:1;s:3:"-16";i:2;s:3:"448";i:3;s:3:"673";}}i:56;a:4:{s:1:"C";s:2:"56";s:2:"WX";s:3:"500";s:1:"N";s:5:"eight";s:1:"B";a:4:{i:0;s:2:"56";i:1;s:3:"-14";i:2;s:3:"445";i:3;s:3:"685";}}s:5:"eight";a:4:{s:1:"C";s:2:"56";s:2:"WX";s:3:"500";s:1:"N";s:5:"eight";s:1:"B";a:4:{i:0;s:2:"56";i:1;s:3:"-14";i:2;s:3:"445";i:3;s:3:"685";}}i:57;a:4:{s:1:"C";s:2:"57";s:2:"WX";s:3:"500";s:1:"N";s:4:"nine";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:3:"-18";i:2;s:3:"459";i:3;s:3:"685";}}s:4:"nine";a:4:{s:1:"C";s:2:"57";s:2:"WX";s:3:"500";s:1:"N";s:4:"nine";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:3:"-18";i:2;s:3:"459";i:3;s:3:"685";}}i:58;a:4:{s:1:"C";s:2:"58";s:2:"WX";s:3:"278";s:1:"N";s:5:"colon";s:1:"B";a:4:{i:0;s:2:"81";i:1;s:3:"-17";i:2;s:3:"193";i:3;s:3:"460";}}s:5:"colon";a:4:{s:1:"C";s:2:"58";s:2:"WX";s:3:"278";s:1:"N";s:5:"colon";s:1:"B";a:4:{i:0;s:2:"81";i:1;s:3:"-17";i:2;s:3:"193";i:3;s:3:"460";}}i:59;a:4:{s:1:"C";s:2:"59";s:2:"WX";s:3:"278";s:1:"N";s:9:"semicolon";s:1:"B";a:4:{i:0;s:2:"83";i:1;s:4:"-152";i:2;s:3:"221";i:3;s:3:"460";}}s:9:"semicolon";a:4:{s:1:"C";s:2:"59";s:2:"WX";s:3:"278";s:1:"N";s:9:"semicolon";s:1:"B";a:4:{i:0;s:2:"83";i:1;s:4:"-152";i:2;s:3:"221";i:3;s:3:"460";}}i:60;a:4:{s:1:"C";s:2:"60";s:2:"WX";s:3:"549";s:1:"N";s:4:"less";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:1:"0";i:2;s:3:"523";i:3;s:3:"522";}}s:4:"less";a:4:{s:1:"C";s:2:"60";s:2:"WX";s:3:"549";s:1:"N";s:4:"less";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:1:"0";i:2;s:3:"523";i:3;s:3:"522";}}i:61;a:4:{s:1:"C";s:2:"61";s:2:"WX";s:3:"549";s:1:"N";s:5:"equal";s:1:"B";a:4:{i:0;s:2:"11";i:1;s:3:"141";i:2;s:3:"537";i:3;s:3:"390";}}s:5:"equal";a:4:{s:1:"C";s:2:"61";s:2:"WX";s:3:"549";s:1:"N";s:5:"equal";s:1:"B";a:4:{i:0;s:2:"11";i:1;s:3:"141";i:2;s:3:"537";i:3;s:3:"390";}}i:62;a:4:{s:1:"C";s:2:"62";s:2:"WX";s:3:"549";s:1:"N";s:7:"greater";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:1:"0";i:2;s:3:"523";i:3;s:3:"522";}}s:7:"greater";a:4:{s:1:"C";s:2:"62";s:2:"WX";s:3:"549";s:1:"N";s:7:"greater";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:1:"0";i:2;s:3:"523";i:3;s:3:"522";}}i:63;a:4:{s:1:"C";s:2:"63";s:2:"WX";s:3:"444";s:1:"N";s:8:"question";s:1:"B";a:4:{i:0;s:2:"70";i:1;s:3:"-17";i:2;s:3:"412";i:3;s:3:"686";}}s:8:"question";a:4:{s:1:"C";s:2:"63";s:2:"WX";s:3:"444";s:1:"N";s:8:"question";s:1:"B";a:4:{i:0;s:2:"70";i:1;s:3:"-17";i:2;s:3:"412";i:3;s:3:"686";}}i:64;a:4:{s:1:"C";s:2:"64";s:2:"WX";s:3:"549";s:1:"N";s:9:"congruent";s:1:"B";a:4:{i:0;s:2:"11";i:1;s:1:"0";i:2;s:3:"537";i:3;s:3:"475";}}s:9:"congruent";a:4:{s:1:"C";s:2:"64";s:2:"WX";s:3:"549";s:1:"N";s:9:"congruent";s:1:"B";a:4:{i:0;s:2:"11";i:1;s:1:"0";i:2;s:3:"537";i:3;s:3:"475";}}i:65;a:4:{s:1:"C";s:2:"65";s:2:"WX";s:3:"722";s:1:"N";s:5:"Alpha";s:1:"B";a:4:{i:0;s:1:"4";i:1;s:1:"0";i:2;s:3:"684";i:3;s:3:"673";}}s:5:"Alpha";a:4:{s:1:"C";s:2:"65";s:2:"WX";s:3:"722";s:1:"N";s:5:"Alpha";s:1:"B";a:4:{i:0;s:1:"4";i:1;s:1:"0";i:2;s:3:"684";i:3;s:3:"673";}}i:66;a:4:{s:1:"C";s:2:"66";s:2:"WX";s:3:"667";s:1:"N";s:4:"Beta";s:1:"B";a:4:{i:0;s:2:"29";i:1;s:1:"0";i:2;s:3:"592";i:3;s:3:"673";}}s:4:"Beta";a:4:{s:1:"C";s:2:"66";s:2:"WX";s:3:"667";s:1:"N";s:4:"Beta";s:1:"B";a:4:{i:0;s:2:"29";i:1;s:1:"0";i:2;s:3:"592";i:3;s:3:"673";}}i:67;a:4:{s:1:"C";s:2:"67";s:2:"WX";s:3:"722";s:1:"N";s:3:"Chi";s:1:"B";a:4:{i:0;s:2:"-9";i:1;s:1:"0";i:2;s:3:"704";i:3;s:3:"673";}}s:3:"Chi";a:4:{s:1:"C";s:2:"67";s:2:"WX";s:3:"722";s:1:"N";s:3:"Chi";s:1:"B";a:4:{i:0;s:2:"-9";i:1;s:1:"0";i:2;s:3:"704";i:3;s:3:"673";}}i:68;a:4:{s:1:"C";s:2:"68";s:2:"WX";s:3:"612";s:1:"N";s:5:"Delta";s:1:"B";a:4:{i:0;s:1:"6";i:1;s:1:"0";i:2;s:3:"608";i:3;s:3:"688";}}s:5:"Delta";a:4:{s:1:"C";s:2:"68";s:2:"WX";s:3:"612";s:1:"N";s:5:"Delta";s:1:"B";a:4:{i:0;s:1:"6";i:1;s:1:"0";i:2;s:3:"608";i:3;s:3:"688";}}i:69;a:4:{s:1:"C";s:2:"69";s:2:"WX";s:3:"611";s:1:"N";s:7:"Epsilon";s:1:"B";a:4:{i:0;s:2:"32";i:1;s:1:"0";i:2;s:3:"617";i:3;s:3:"673";}}s:7:"Epsilon";a:4:{s:1:"C";s:2:"69";s:2:"WX";s:3:"611";s:1:"N";s:7:"Epsilon";s:1:"B";a:4:{i:0;s:2:"32";i:1;s:1:"0";i:2;s:3:"617";i:3;s:3:"673";}}i:70;a:4:{s:1:"C";s:2:"70";s:2:"WX";s:3:"763";s:1:"N";s:3:"Phi";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:1:"0";i:2;s:3:"741";i:3;s:3:"673";}}s:3:"Phi";a:4:{s:1:"C";s:2:"70";s:2:"WX";s:3:"763";s:1:"N";s:3:"Phi";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:1:"0";i:2;s:3:"741";i:3;s:3:"673";}}i:71;a:4:{s:1:"C";s:2:"71";s:2:"WX";s:3:"603";s:1:"N";s:5:"Gamma";s:1:"B";a:4:{i:0;s:2:"24";i:1;s:1:"0";i:2;s:3:"609";i:3;s:3:"673";}}s:5:"Gamma";a:4:{s:1:"C";s:2:"71";s:2:"WX";s:3:"603";s:1:"N";s:5:"Gamma";s:1:"B";a:4:{i:0;s:2:"24";i:1;s:1:"0";i:2;s:3:"609";i:3;s:3:"673";}}i:72;a:4:{s:1:"C";s:2:"72";s:2:"WX";s:3:"722";s:1:"N";s:3:"Eta";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:1:"0";i:2;s:3:"729";i:3;s:3:"673";}}s:3:"Eta";a:4:{s:1:"C";s:2:"72";s:2:"WX";s:3:"722";s:1:"N";s:3:"Eta";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:1:"0";i:2;s:3:"729";i:3;s:3:"673";}}i:73;a:4:{s:1:"C";s:2:"73";s:2:"WX";s:3:"333";s:1:"N";s:4:"Iota";s:1:"B";a:4:{i:0;s:2:"32";i:1;s:1:"0";i:2;s:3:"316";i:3;s:3:"673";}}s:4:"Iota";a:4:{s:1:"C";s:2:"73";s:2:"WX";s:3:"333";s:1:"N";s:4:"Iota";s:1:"B";a:4:{i:0;s:2:"32";i:1;s:1:"0";i:2;s:3:"316";i:3;s:3:"673";}}i:74;a:4:{s:1:"C";s:2:"74";s:2:"WX";s:3:"631";s:1:"N";s:6:"theta1";s:1:"B";a:4:{i:0;s:2:"18";i:1;s:3:"-18";i:2;s:3:"623";i:3;s:3:"689";}}s:6:"theta1";a:4:{s:1:"C";s:2:"74";s:2:"WX";s:3:"631";s:1:"N";s:6:"theta1";s:1:"B";a:4:{i:0;s:2:"18";i:1;s:3:"-18";i:2;s:3:"623";i:3;s:3:"689";}}i:75;a:4:{s:1:"C";s:2:"75";s:2:"WX";s:3:"722";s:1:"N";s:5:"Kappa";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"722";i:3;s:3:"673";}}s:5:"Kappa";a:4:{s:1:"C";s:2:"75";s:2:"WX";s:3:"722";s:1:"N";s:5:"Kappa";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"722";i:3;s:3:"673";}}i:76;a:4:{s:1:"C";s:2:"76";s:2:"WX";s:3:"686";s:1:"N";s:6:"Lambda";s:1:"B";a:4:{i:0;s:1:"6";i:1;s:1:"0";i:2;s:3:"680";i:3;s:3:"688";}}s:6:"Lambda";a:4:{s:1:"C";s:2:"76";s:2:"WX";s:3:"686";s:1:"N";s:6:"Lambda";s:1:"B";a:4:{i:0;s:1:"6";i:1;s:1:"0";i:2;s:3:"680";i:3;s:3:"688";}}i:77;a:4:{s:1:"C";s:2:"77";s:2:"WX";s:3:"889";s:1:"N";s:2:"Mu";s:1:"B";a:4:{i:0;s:2:"28";i:1;s:1:"0";i:2;s:3:"887";i:3;s:3:"673";}}s:2:"Mu";a:4:{s:1:"C";s:2:"77";s:2:"WX";s:3:"889";s:1:"N";s:2:"Mu";s:1:"B";a:4:{i:0;s:2:"28";i:1;s:1:"0";i:2;s:3:"887";i:3;s:3:"673";}}i:78;a:4:{s:1:"C";s:2:"78";s:2:"WX";s:3:"722";s:1:"N";s:2:"Nu";s:1:"B";a:4:{i:0;s:2:"29";i:1;s:2:"-8";i:2;s:3:"720";i:3;s:3:"673";}}s:2:"Nu";a:4:{s:1:"C";s:2:"78";s:2:"WX";s:3:"722";s:1:"N";s:2:"Nu";s:1:"B";a:4:{i:0;s:2:"29";i:1;s:2:"-8";i:2;s:3:"720";i:3;s:3:"673";}}i:79;a:4:{s:1:"C";s:2:"79";s:2:"WX";s:3:"722";s:1:"N";s:7:"Omicron";s:1:"B";a:4:{i:0;s:2:"41";i:1;s:3:"-17";i:2;s:3:"715";i:3;s:3:"685";}}s:7:"Omicron";a:4:{s:1:"C";s:2:"79";s:2:"WX";s:3:"722";s:1:"N";s:7:"Omicron";s:1:"B";a:4:{i:0;s:2:"41";i:1;s:3:"-17";i:2;s:3:"715";i:3;s:3:"685";}}i:80;a:4:{s:1:"C";s:2:"80";s:2:"WX";s:3:"768";s:1:"N";s:2:"Pi";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:1:"0";i:2;s:3:"745";i:3;s:3:"673";}}s:2:"Pi";a:4:{s:1:"C";s:2:"80";s:2:"WX";s:3:"768";s:1:"N";s:2:"Pi";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:1:"0";i:2;s:3:"745";i:3;s:3:"673";}}i:81;a:4:{s:1:"C";s:2:"81";s:2:"WX";s:3:"741";s:1:"N";s:5:"Theta";s:1:"B";a:4:{i:0;s:2:"41";i:1;s:3:"-17";i:2;s:3:"715";i:3;s:3:"685";}}s:5:"Theta";a:4:{s:1:"C";s:2:"81";s:2:"WX";s:3:"741";s:1:"N";s:5:"Theta";s:1:"B";a:4:{i:0;s:2:"41";i:1;s:3:"-17";i:2;s:3:"715";i:3;s:3:"685";}}i:82;a:4:{s:1:"C";s:2:"82";s:2:"WX";s:3:"556";s:1:"N";s:3:"Rho";s:1:"B";a:4:{i:0;s:2:"28";i:1;s:1:"0";i:2;s:3:"563";i:3;s:3:"673";}}s:3:"Rho";a:4:{s:1:"C";s:2:"82";s:2:"WX";s:3:"556";s:1:"N";s:3:"Rho";s:1:"B";a:4:{i:0;s:2:"28";i:1;s:1:"0";i:2;s:3:"563";i:3;s:3:"673";}}i:83;a:4:{s:1:"C";s:2:"83";s:2:"WX";s:3:"592";s:1:"N";s:5:"Sigma";s:1:"B";a:4:{i:0;s:1:"5";i:1;s:1:"0";i:2;s:3:"589";i:3;s:3:"673";}}s:5:"Sigma";a:4:{s:1:"C";s:2:"83";s:2:"WX";s:3:"592";s:1:"N";s:5:"Sigma";s:1:"B";a:4:{i:0;s:1:"5";i:1;s:1:"0";i:2;s:3:"589";i:3;s:3:"673";}}i:84;a:4:{s:1:"C";s:2:"84";s:2:"WX";s:3:"611";s:1:"N";s:3:"Tau";s:1:"B";a:4:{i:0;s:2:"33";i:1;s:1:"0";i:2;s:3:"607";i:3;s:3:"673";}}s:3:"Tau";a:4:{s:1:"C";s:2:"84";s:2:"WX";s:3:"611";s:1:"N";s:3:"Tau";s:1:"B";a:4:{i:0;s:2:"33";i:1;s:1:"0";i:2;s:3:"607";i:3;s:3:"673";}}i:85;a:4:{s:1:"C";s:2:"85";s:2:"WX";s:3:"690";s:1:"N";s:7:"Upsilon";s:1:"B";a:4:{i:0;s:2:"-8";i:1;s:1:"0";i:2;s:3:"694";i:3;s:3:"673";}}s:7:"Upsilon";a:4:{s:1:"C";s:2:"85";s:2:"WX";s:3:"690";s:1:"N";s:7:"Upsilon";s:1:"B";a:4:{i:0;s:2:"-8";i:1;s:1:"0";i:2;s:3:"694";i:3;s:3:"673";}}i:86;a:4:{s:1:"C";s:2:"86";s:2:"WX";s:3:"439";s:1:"N";s:6:"sigma1";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:4:"-233";i:2;s:3:"436";i:3;s:3:"500";}}s:6:"sigma1";a:4:{s:1:"C";s:2:"86";s:2:"WX";s:3:"439";s:1:"N";s:6:"sigma1";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:4:"-233";i:2;s:3:"436";i:3;s:3:"500";}}i:87;a:4:{s:1:"C";s:2:"87";s:2:"WX";s:3:"768";s:1:"N";s:5:"Omega";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:1:"0";i:2;s:3:"736";i:3;s:3:"688";}}s:5:"Omega";a:4:{s:1:"C";s:2:"87";s:2:"WX";s:3:"768";s:1:"N";s:5:"Omega";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:1:"0";i:2;s:3:"736";i:3;s:3:"688";}}i:88;a:4:{s:1:"C";s:2:"88";s:2:"WX";s:3:"645";s:1:"N";s:2:"Xi";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:1:"0";i:2;s:3:"599";i:3;s:3:"673";}}s:2:"Xi";a:4:{s:1:"C";s:2:"88";s:2:"WX";s:3:"645";s:1:"N";s:2:"Xi";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:1:"0";i:2;s:3:"599";i:3;s:3:"673";}}i:89;a:4:{s:1:"C";s:2:"89";s:2:"WX";s:3:"795";s:1:"N";s:3:"Psi";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:1:"0";i:2;s:3:"781";i:3;s:3:"684";}}s:3:"Psi";a:4:{s:1:"C";s:2:"89";s:2:"WX";s:3:"795";s:1:"N";s:3:"Psi";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:1:"0";i:2;s:3:"781";i:3;s:3:"684";}}i:90;a:4:{s:1:"C";s:2:"90";s:2:"WX";s:3:"611";s:1:"N";s:4:"Zeta";s:1:"B";a:4:{i:0;s:2:"44";i:1;s:1:"0";i:2;s:3:"636";i:3;s:3:"673";}}s:4:"Zeta";a:4:{s:1:"C";s:2:"90";s:2:"WX";s:3:"611";s:1:"N";s:4:"Zeta";s:1:"B";a:4:{i:0;s:2:"44";i:1;s:1:"0";i:2;s:3:"636";i:3;s:3:"673";}}i:91;a:4:{s:1:"C";s:2:"91";s:2:"WX";s:3:"333";s:1:"N";s:11:"bracketleft";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:4:"-155";i:2;s:3:"299";i:3;s:3:"674";}}s:11:"bracketleft";a:4:{s:1:"C";s:2:"91";s:2:"WX";s:3:"333";s:1:"N";s:11:"bracketleft";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:4:"-155";i:2;s:3:"299";i:3;s:3:"674";}}i:92;a:4:{s:1:"C";s:2:"92";s:2:"WX";s:3:"863";s:1:"N";s:9:"therefore";s:1:"B";a:4:{i:0;s:3:"163";i:1;s:1:"0";i:2;s:3:"701";i:3;s:3:"487";}}s:9:"therefore";a:4:{s:1:"C";s:2:"92";s:2:"WX";s:3:"863";s:1:"N";s:9:"therefore";s:1:"B";a:4:{i:0;s:3:"163";i:1;s:1:"0";i:2;s:3:"701";i:3;s:3:"487";}}i:93;a:4:{s:1:"C";s:2:"93";s:2:"WX";s:3:"333";s:1:"N";s:12:"bracketright";s:1:"B";a:4:{i:0;s:2:"33";i:1;s:4:"-155";i:2;s:3:"246";i:3;s:3:"674";}}s:12:"bracketright";a:4:{s:1:"C";s:2:"93";s:2:"WX";s:3:"333";s:1:"N";s:12:"bracketright";s:1:"B";a:4:{i:0;s:2:"33";i:1;s:4:"-155";i:2;s:3:"246";i:3;s:3:"674";}}i:94;a:4:{s:1:"C";s:2:"94";s:2:"WX";s:3:"658";s:1:"N";s:13:"perpendicular";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:1:"0";i:2;s:3:"652";i:3;s:3:"674";}}s:13:"perpendicular";a:4:{s:1:"C";s:2:"94";s:2:"WX";s:3:"658";s:1:"N";s:13:"perpendicular";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:1:"0";i:2;s:3:"652";i:3;s:3:"674";}}i:95;a:4:{s:1:"C";s:2:"95";s:2:"WX";s:3:"500";s:1:"N";s:10:"underscore";s:1:"B";a:4:{i:0;s:2:"-2";i:1;s:4:"-125";i:2;s:3:"502";i:3;s:3:"-75";}}s:10:"underscore";a:4:{s:1:"C";s:2:"95";s:2:"WX";s:3:"500";s:1:"N";s:10:"underscore";s:1:"B";a:4:{i:0;s:2:"-2";i:1;s:4:"-125";i:2;s:3:"502";i:3;s:3:"-75";}}i:96;a:4:{s:1:"C";s:2:"96";s:2:"WX";s:3:"500";s:1:"N";s:9:"radicalex";s:1:"B";a:4:{i:0;s:3:"480";i:1;s:3:"881";i:2;s:4:"1090";i:3;s:3:"917";}}s:9:"radicalex";a:4:{s:1:"C";s:2:"96";s:2:"WX";s:3:"500";s:1:"N";s:9:"radicalex";s:1:"B";a:4:{i:0;s:3:"480";i:1;s:3:"881";i:2;s:4:"1090";i:3;s:3:"917";}}i:97;a:4:{s:1:"C";s:2:"97";s:2:"WX";s:3:"631";s:1:"N";s:5:"alpha";s:1:"B";a:4:{i:0;s:2:"41";i:1;s:3:"-18";i:2;s:3:"622";i:3;s:3:"500";}}s:5:"alpha";a:4:{s:1:"C";s:2:"97";s:2:"WX";s:3:"631";s:1:"N";s:5:"alpha";s:1:"B";a:4:{i:0;s:2:"41";i:1;s:3:"-18";i:2;s:3:"622";i:3;s:3:"500";}}i:98;a:4:{s:1:"C";s:2:"98";s:2:"WX";s:3:"549";s:1:"N";s:4:"beta";s:1:"B";a:4:{i:0;s:2:"61";i:1;s:4:"-223";i:2;s:3:"515";i:3;s:3:"741";}}s:4:"beta";a:4:{s:1:"C";s:2:"98";s:2:"WX";s:3:"549";s:1:"N";s:4:"beta";s:1:"B";a:4:{i:0;s:2:"61";i:1;s:4:"-223";i:2;s:3:"515";i:3;s:3:"741";}}i:99;a:4:{s:1:"C";s:2:"99";s:2:"WX";s:3:"549";s:1:"N";s:3:"chi";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:4:"-231";i:2;s:3:"522";i:3;s:3:"499";}}s:3:"chi";a:4:{s:1:"C";s:2:"99";s:2:"WX";s:3:"549";s:1:"N";s:3:"chi";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:4:"-231";i:2;s:3:"522";i:3;s:3:"499";}}i:100;a:4:{s:1:"C";s:3:"100";s:2:"WX";s:3:"494";s:1:"N";s:5:"delta";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:3:"-19";i:2;s:3:"481";i:3;s:3:"740";}}s:5:"delta";a:4:{s:1:"C";s:3:"100";s:2:"WX";s:3:"494";s:1:"N";s:5:"delta";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:3:"-19";i:2;s:3:"481";i:3;s:3:"740";}}i:101;a:4:{s:1:"C";s:3:"101";s:2:"WX";s:3:"439";s:1:"N";s:7:"epsilon";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:3:"-19";i:2;s:3:"427";i:3;s:3:"502";}}s:7:"epsilon";a:4:{s:1:"C";s:3:"101";s:2:"WX";s:3:"439";s:1:"N";s:7:"epsilon";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:3:"-19";i:2;s:3:"427";i:3;s:3:"502";}}i:102;a:4:{s:1:"C";s:3:"102";s:2:"WX";s:3:"521";s:1:"N";s:3:"phi";s:1:"B";a:4:{i:0;s:2:"28";i:1;s:4:"-224";i:2;s:3:"492";i:3;s:3:"673";}}s:3:"phi";a:4:{s:1:"C";s:3:"102";s:2:"WX";s:3:"521";s:1:"N";s:3:"phi";s:1:"B";a:4:{i:0;s:2:"28";i:1;s:4:"-224";i:2;s:3:"492";i:3;s:3:"673";}}i:103;a:4:{s:1:"C";s:3:"103";s:2:"WX";s:3:"411";s:1:"N";s:5:"gamma";s:1:"B";a:4:{i:0;s:1:"5";i:1;s:4:"-225";i:2;s:3:"484";i:3;s:3:"499";}}s:5:"gamma";a:4:{s:1:"C";s:3:"103";s:2:"WX";s:3:"411";s:1:"N";s:5:"gamma";s:1:"B";a:4:{i:0;s:1:"5";i:1;s:4:"-225";i:2;s:3:"484";i:3;s:3:"499";}}i:104;a:4:{s:1:"C";s:3:"104";s:2:"WX";s:3:"603";s:1:"N";s:3:"eta";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:4:"-202";i:2;s:3:"527";i:3;s:3:"514";}}s:3:"eta";a:4:{s:1:"C";s:3:"104";s:2:"WX";s:3:"603";s:1:"N";s:3:"eta";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:4:"-202";i:2;s:3:"527";i:3;s:3:"514";}}i:105;a:4:{s:1:"C";s:3:"105";s:2:"WX";s:3:"329";s:1:"N";s:4:"iota";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:3:"-17";i:2;s:3:"301";i:3;s:3:"503";}}s:4:"iota";a:4:{s:1:"C";s:3:"105";s:2:"WX";s:3:"329";s:1:"N";s:4:"iota";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:3:"-17";i:2;s:3:"301";i:3;s:3:"503";}}i:106;a:4:{s:1:"C";s:3:"106";s:2:"WX";s:3:"603";s:1:"N";s:4:"phi1";s:1:"B";a:4:{i:0;s:2:"36";i:1;s:4:"-224";i:2;s:3:"587";i:3;s:3:"499";}}s:4:"phi1";a:4:{s:1:"C";s:3:"106";s:2:"WX";s:3:"603";s:1:"N";s:4:"phi1";s:1:"B";a:4:{i:0;s:2:"36";i:1;s:4:"-224";i:2;s:3:"587";i:3;s:3:"499";}}i:107;a:4:{s:1:"C";s:3:"107";s:2:"WX";s:3:"549";s:1:"N";s:5:"kappa";s:1:"B";a:4:{i:0;s:2:"33";i:1;s:1:"0";i:2;s:3:"558";i:3;s:3:"501";}}s:5:"kappa";a:4:{s:1:"C";s:3:"107";s:2:"WX";s:3:"549";s:1:"N";s:5:"kappa";s:1:"B";a:4:{i:0;s:2:"33";i:1;s:1:"0";i:2;s:3:"558";i:3;s:3:"501";}}i:108;a:4:{s:1:"C";s:3:"108";s:2:"WX";s:3:"549";s:1:"N";s:6:"lambda";s:1:"B";a:4:{i:0;s:2:"24";i:1;s:3:"-17";i:2;s:3:"548";i:3;s:3:"739";}}s:6:"lambda";a:4:{s:1:"C";s:3:"108";s:2:"WX";s:3:"549";s:1:"N";s:6:"lambda";s:1:"B";a:4:{i:0;s:2:"24";i:1;s:3:"-17";i:2;s:3:"548";i:3;s:3:"739";}}i:109;a:4:{s:1:"C";s:3:"109";s:2:"WX";s:3:"576";s:1:"N";s:2:"mu";s:1:"B";a:4:{i:0;s:2:"33";i:1;s:4:"-223";i:2;s:3:"567";i:3;s:3:"500";}}s:2:"mu";a:4:{s:1:"C";s:3:"109";s:2:"WX";s:3:"576";s:1:"N";s:2:"mu";s:1:"B";a:4:{i:0;s:2:"33";i:1;s:4:"-223";i:2;s:3:"567";i:3;s:3:"500";}}i:110;a:4:{s:1:"C";s:3:"110";s:2:"WX";s:3:"521";s:1:"N";s:2:"nu";s:1:"B";a:4:{i:0;s:2:"-9";i:1;s:3:"-16";i:2;s:3:"475";i:3;s:3:"507";}}s:2:"nu";a:4:{s:1:"C";s:3:"110";s:2:"WX";s:3:"521";s:1:"N";s:2:"nu";s:1:"B";a:4:{i:0;s:2:"-9";i:1;s:3:"-16";i:2;s:3:"475";i:3;s:3:"507";}}i:111;a:4:{s:1:"C";s:3:"111";s:2:"WX";s:3:"549";s:1:"N";s:7:"omicron";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-19";i:2;s:3:"501";i:3;s:3:"499";}}s:7:"omicron";a:4:{s:1:"C";s:3:"111";s:2:"WX";s:3:"549";s:1:"N";s:7:"omicron";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-19";i:2;s:3:"501";i:3;s:3:"499";}}i:112;a:4:{s:1:"C";s:3:"112";s:2:"WX";s:3:"549";s:1:"N";s:2:"pi";s:1:"B";a:4:{i:0;s:2:"10";i:1;s:3:"-19";i:2;s:3:"530";i:3;s:3:"487";}}s:2:"pi";a:4:{s:1:"C";s:3:"112";s:2:"WX";s:3:"549";s:1:"N";s:2:"pi";s:1:"B";a:4:{i:0;s:2:"10";i:1;s:3:"-19";i:2;s:3:"530";i:3;s:3:"487";}}i:113;a:4:{s:1:"C";s:3:"113";s:2:"WX";s:3:"521";s:1:"N";s:5:"theta";s:1:"B";a:4:{i:0;s:2:"43";i:1;s:3:"-17";i:2;s:3:"485";i:3;s:3:"690";}}s:5:"theta";a:4:{s:1:"C";s:3:"113";s:2:"WX";s:3:"521";s:1:"N";s:5:"theta";s:1:"B";a:4:{i:0;s:2:"43";i:1;s:3:"-17";i:2;s:3:"485";i:3;s:3:"690";}}i:114;a:4:{s:1:"C";s:3:"114";s:2:"WX";s:3:"549";s:1:"N";s:3:"rho";s:1:"B";a:4:{i:0;s:2:"50";i:1;s:4:"-230";i:2;s:3:"490";i:3;s:3:"499";}}s:3:"rho";a:4:{s:1:"C";s:3:"114";s:2:"WX";s:3:"549";s:1:"N";s:3:"rho";s:1:"B";a:4:{i:0;s:2:"50";i:1;s:4:"-230";i:2;s:3:"490";i:3;s:3:"499";}}i:115;a:4:{s:1:"C";s:3:"115";s:2:"WX";s:3:"603";s:1:"N";s:5:"sigma";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:3:"-21";i:2;s:3:"588";i:3;s:3:"500";}}s:5:"sigma";a:4:{s:1:"C";s:3:"115";s:2:"WX";s:3:"603";s:1:"N";s:5:"sigma";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:3:"-21";i:2;s:3:"588";i:3;s:3:"500";}}i:116;a:4:{s:1:"C";s:3:"116";s:2:"WX";s:3:"439";s:1:"N";s:3:"tau";s:1:"B";a:4:{i:0;s:2:"10";i:1;s:3:"-19";i:2;s:3:"418";i:3;s:3:"500";}}s:3:"tau";a:4:{s:1:"C";s:3:"116";s:2:"WX";s:3:"439";s:1:"N";s:3:"tau";s:1:"B";a:4:{i:0;s:2:"10";i:1;s:3:"-19";i:2;s:3:"418";i:3;s:3:"500";}}i:117;a:4:{s:1:"C";s:3:"117";s:2:"WX";s:3:"576";s:1:"N";s:7:"upsilon";s:1:"B";a:4:{i:0;s:1:"7";i:1;s:3:"-18";i:2;s:3:"535";i:3;s:3:"507";}}s:7:"upsilon";a:4:{s:1:"C";s:3:"117";s:2:"WX";s:3:"576";s:1:"N";s:7:"upsilon";s:1:"B";a:4:{i:0;s:1:"7";i:1;s:3:"-18";i:2;s:3:"535";i:3;s:3:"507";}}i:118;a:4:{s:1:"C";s:3:"118";s:2:"WX";s:3:"713";s:1:"N";s:6:"omega1";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:3:"-18";i:2;s:3:"671";i:3;s:3:"583";}}s:6:"omega1";a:4:{s:1:"C";s:3:"118";s:2:"WX";s:3:"713";s:1:"N";s:6:"omega1";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:3:"-18";i:2;s:3:"671";i:3;s:3:"583";}}i:119;a:4:{s:1:"C";s:3:"119";s:2:"WX";s:3:"686";s:1:"N";s:5:"omega";s:1:"B";a:4:{i:0;s:2:"42";i:1;s:3:"-17";i:2;s:3:"684";i:3;s:3:"500";}}s:5:"omega";a:4:{s:1:"C";s:3:"119";s:2:"WX";s:3:"686";s:1:"N";s:5:"omega";s:1:"B";a:4:{i:0;s:2:"42";i:1;s:3:"-17";i:2;s:3:"684";i:3;s:3:"500";}}i:120;a:4:{s:1:"C";s:3:"120";s:2:"WX";s:3:"493";s:1:"N";s:2:"xi";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:4:"-224";i:2;s:3:"469";i:3;s:3:"766";}}s:2:"xi";a:4:{s:1:"C";s:3:"120";s:2:"WX";s:3:"493";s:1:"N";s:2:"xi";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:4:"-224";i:2;s:3:"469";i:3;s:3:"766";}}i:121;a:4:{s:1:"C";s:3:"121";s:2:"WX";s:3:"686";s:1:"N";s:3:"psi";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:4:"-228";i:2;s:3:"701";i:3;s:3:"500";}}s:3:"psi";a:4:{s:1:"C";s:3:"121";s:2:"WX";s:3:"686";s:1:"N";s:3:"psi";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:4:"-228";i:2;s:3:"701";i:3;s:3:"500";}}i:122;a:4:{s:1:"C";s:3:"122";s:2:"WX";s:3:"494";s:1:"N";s:4:"zeta";s:1:"B";a:4:{i:0;s:2:"60";i:1;s:4:"-225";i:2;s:3:"467";i:3;s:3:"756";}}s:4:"zeta";a:4:{s:1:"C";s:3:"122";s:2:"WX";s:3:"494";s:1:"N";s:4:"zeta";s:1:"B";a:4:{i:0;s:2:"60";i:1;s:4:"-225";i:2;s:3:"467";i:3;s:3:"756";}}i:123;a:4:{s:1:"C";s:3:"123";s:2:"WX";s:3:"480";s:1:"N";s:9:"braceleft";s:1:"B";a:4:{i:0;s:2:"58";i:1;s:4:"-183";i:2;s:3:"397";i:3;s:3:"673";}}s:9:"braceleft";a:4:{s:1:"C";s:3:"123";s:2:"WX";s:3:"480";s:1:"N";s:9:"braceleft";s:1:"B";a:4:{i:0;s:2:"58";i:1;s:4:"-183";i:2;s:3:"397";i:3;s:3:"673";}}i:124;a:4:{s:1:"C";s:3:"124";s:2:"WX";s:3:"200";s:1:"N";s:3:"bar";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:4:"-293";i:2;s:3:"135";i:3;s:3:"707";}}s:3:"bar";a:4:{s:1:"C";s:3:"124";s:2:"WX";s:3:"200";s:1:"N";s:3:"bar";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:4:"-293";i:2;s:3:"135";i:3;s:3:"707";}}i:125;a:4:{s:1:"C";s:3:"125";s:2:"WX";s:3:"480";s:1:"N";s:10:"braceright";s:1:"B";a:4:{i:0;s:2:"79";i:1;s:4:"-183";i:2;s:3:"418";i:3;s:3:"673";}}s:10:"braceright";a:4:{s:1:"C";s:3:"125";s:2:"WX";s:3:"480";s:1:"N";s:10:"braceright";s:1:"B";a:4:{i:0;s:2:"79";i:1;s:4:"-183";i:2;s:3:"418";i:3;s:3:"673";}}i:126;a:4:{s:1:"C";s:3:"126";s:2:"WX";s:3:"549";s:1:"N";s:7:"similar";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:3:"203";i:2;s:3:"529";i:3;s:3:"307";}}s:7:"similar";a:4:{s:1:"C";s:3:"126";s:2:"WX";s:3:"549";s:1:"N";s:7:"similar";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:3:"203";i:2;s:3:"529";i:3;s:3:"307";}}i:160;a:4:{s:1:"C";s:3:"160";s:2:"WX";s:3:"750";s:1:"N";s:4:"Euro";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:3:"-12";i:2;s:3:"714";i:3;s:3:"685";}}s:4:"Euro";a:4:{s:1:"C";s:3:"160";s:2:"WX";s:3:"750";s:1:"N";s:4:"Euro";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:3:"-12";i:2;s:3:"714";i:3;s:3:"685";}}i:161;a:4:{s:1:"C";s:3:"161";s:2:"WX";s:3:"620";s:1:"N";s:8:"Upsilon1";s:1:"B";a:4:{i:0;s:2:"-2";i:1;s:1:"0";i:2;s:3:"610";i:3;s:3:"685";}}s:8:"Upsilon1";a:4:{s:1:"C";s:3:"161";s:2:"WX";s:3:"620";s:1:"N";s:8:"Upsilon1";s:1:"B";a:4:{i:0;s:2:"-2";i:1;s:1:"0";i:2;s:3:"610";i:3;s:3:"685";}}i:162;a:4:{s:1:"C";s:3:"162";s:2:"WX";s:3:"247";s:1:"N";s:6:"minute";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:3:"459";i:2;s:3:"228";i:3;s:3:"735";}}s:6:"minute";a:4:{s:1:"C";s:3:"162";s:2:"WX";s:3:"247";s:1:"N";s:6:"minute";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:3:"459";i:2;s:3:"228";i:3;s:3:"735";}}i:163;a:4:{s:1:"C";s:3:"163";s:2:"WX";s:3:"549";s:1:"N";s:9:"lessequal";s:1:"B";a:4:{i:0;s:2:"29";i:1;s:1:"0";i:2;s:3:"526";i:3;s:3:"639";}}s:9:"lessequal";a:4:{s:1:"C";s:3:"163";s:2:"WX";s:3:"549";s:1:"N";s:9:"lessequal";s:1:"B";a:4:{i:0;s:2:"29";i:1;s:1:"0";i:2;s:3:"526";i:3;s:3:"639";}}i:164;a:4:{s:1:"C";s:3:"164";s:2:"WX";s:3:"167";s:1:"N";s:8:"fraction";s:1:"B";a:4:{i:0;s:4:"-180";i:1;s:3:"-12";i:2;s:3:"340";i:3;s:3:"677";}}s:8:"fraction";a:4:{s:1:"C";s:3:"164";s:2:"WX";s:3:"167";s:1:"N";s:8:"fraction";s:1:"B";a:4:{i:0;s:4:"-180";i:1;s:3:"-12";i:2;s:3:"340";i:3;s:3:"677";}}i:165;a:4:{s:1:"C";s:3:"165";s:2:"WX";s:3:"713";s:1:"N";s:8:"infinity";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:3:"124";i:2;s:3:"688";i:3;s:3:"404";}}s:8:"infinity";a:4:{s:1:"C";s:3:"165";s:2:"WX";s:3:"713";s:1:"N";s:8:"infinity";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:3:"124";i:2;s:3:"688";i:3;s:3:"404";}}i:166;a:4:{s:1:"C";s:3:"166";s:2:"WX";s:3:"500";s:1:"N";s:6:"florin";s:1:"B";a:4:{i:0;s:1:"2";i:1;s:4:"-193";i:2;s:3:"494";i:3;s:3:"686";}}s:6:"florin";a:4:{s:1:"C";s:3:"166";s:2:"WX";s:3:"500";s:1:"N";s:6:"florin";s:1:"B";a:4:{i:0;s:1:"2";i:1;s:4:"-193";i:2;s:3:"494";i:3;s:3:"686";}}i:167;a:4:{s:1:"C";s:3:"167";s:2:"WX";s:3:"753";s:1:"N";s:4:"club";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:3:"-26";i:2;s:3:"660";i:3;s:3:"533";}}s:4:"club";a:4:{s:1:"C";s:3:"167";s:2:"WX";s:3:"753";s:1:"N";s:4:"club";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:3:"-26";i:2;s:3:"660";i:3;s:3:"533";}}i:168;a:4:{s:1:"C";s:3:"168";s:2:"WX";s:3:"753";s:1:"N";s:7:"diamond";s:1:"B";a:4:{i:0;s:3:"142";i:1;s:3:"-36";i:2;s:3:"600";i:3;s:3:"550";}}s:7:"diamond";a:4:{s:1:"C";s:3:"168";s:2:"WX";s:3:"753";s:1:"N";s:7:"diamond";s:1:"B";a:4:{i:0;s:3:"142";i:1;s:3:"-36";i:2;s:3:"600";i:3;s:3:"550";}}i:169;a:4:{s:1:"C";s:3:"169";s:2:"WX";s:3:"753";s:1:"N";s:5:"heart";s:1:"B";a:4:{i:0;s:3:"117";i:1;s:3:"-33";i:2;s:3:"631";i:3;s:3:"532";}}s:5:"heart";a:4:{s:1:"C";s:3:"169";s:2:"WX";s:3:"753";s:1:"N";s:5:"heart";s:1:"B";a:4:{i:0;s:3:"117";i:1;s:3:"-33";i:2;s:3:"631";i:3;s:3:"532";}}i:170;a:4:{s:1:"C";s:3:"170";s:2:"WX";s:3:"753";s:1:"N";s:5:"spade";s:1:"B";a:4:{i:0;s:3:"113";i:1;s:3:"-36";i:2;s:3:"629";i:3;s:3:"548";}}s:5:"spade";a:4:{s:1:"C";s:3:"170";s:2:"WX";s:3:"753";s:1:"N";s:5:"spade";s:1:"B";a:4:{i:0;s:3:"113";i:1;s:3:"-36";i:2;s:3:"629";i:3;s:3:"548";}}i:171;a:4:{s:1:"C";s:3:"171";s:2:"WX";s:4:"1042";s:1:"N";s:9:"arrowboth";s:1:"B";a:4:{i:0;s:2:"24";i:1;s:3:"-15";i:2;s:4:"1024";i:3;s:3:"511";}}s:9:"arrowboth";a:4:{s:1:"C";s:3:"171";s:2:"WX";s:4:"1042";s:1:"N";s:9:"arrowboth";s:1:"B";a:4:{i:0;s:2:"24";i:1;s:3:"-15";i:2;s:4:"1024";i:3;s:3:"511";}}i:172;a:4:{s:1:"C";s:3:"172";s:2:"WX";s:3:"987";s:1:"N";s:9:"arrowleft";s:1:"B";a:4:{i:0;s:2:"32";i:1;s:3:"-15";i:2;s:3:"942";i:3;s:3:"511";}}s:9:"arrowleft";a:4:{s:1:"C";s:3:"172";s:2:"WX";s:3:"987";s:1:"N";s:9:"arrowleft";s:1:"B";a:4:{i:0;s:2:"32";i:1;s:3:"-15";i:2;s:3:"942";i:3;s:3:"511";}}i:173;a:4:{s:1:"C";s:3:"173";s:2:"WX";s:3:"603";s:1:"N";s:7:"arrowup";s:1:"B";a:4:{i:0;s:2:"45";i:1;s:1:"0";i:2;s:3:"571";i:3;s:3:"910";}}s:7:"arrowup";a:4:{s:1:"C";s:3:"173";s:2:"WX";s:3:"603";s:1:"N";s:7:"arrowup";s:1:"B";a:4:{i:0;s:2:"45";i:1;s:1:"0";i:2;s:3:"571";i:3;s:3:"910";}}i:174;a:4:{s:1:"C";s:3:"174";s:2:"WX";s:3:"987";s:1:"N";s:10:"arrowright";s:1:"B";a:4:{i:0;s:2:"49";i:1;s:3:"-15";i:2;s:3:"959";i:3;s:3:"511";}}s:10:"arrowright";a:4:{s:1:"C";s:3:"174";s:2:"WX";s:3:"987";s:1:"N";s:10:"arrowright";s:1:"B";a:4:{i:0;s:2:"49";i:1;s:3:"-15";i:2;s:3:"959";i:3;s:3:"511";}}i:175;a:4:{s:1:"C";s:3:"175";s:2:"WX";s:3:"603";s:1:"N";s:9:"arrowdown";s:1:"B";a:4:{i:0;s:2:"45";i:1;s:3:"-22";i:2;s:3:"571";i:3;s:3:"888";}}s:9:"arrowdown";a:4:{s:1:"C";s:3:"175";s:2:"WX";s:3:"603";s:1:"N";s:9:"arrowdown";s:1:"B";a:4:{i:0;s:2:"45";i:1;s:3:"-22";i:2;s:3:"571";i:3;s:3:"888";}}i:176;a:4:{s:1:"C";s:3:"176";s:2:"WX";s:3:"400";s:1:"N";s:6:"degree";s:1:"B";a:4:{i:0;s:2:"50";i:1;s:3:"385";i:2;s:3:"350";i:3;s:3:"685";}}s:6:"degree";a:4:{s:1:"C";s:3:"176";s:2:"WX";s:3:"400";s:1:"N";s:6:"degree";s:1:"B";a:4:{i:0;s:2:"50";i:1;s:3:"385";i:2;s:3:"350";i:3;s:3:"685";}}i:177;a:4:{s:1:"C";s:3:"177";s:2:"WX";s:3:"549";s:1:"N";s:9:"plusminus";s:1:"B";a:4:{i:0;s:2:"10";i:1;s:1:"0";i:2;s:3:"539";i:3;s:3:"645";}}s:9:"plusminus";a:4:{s:1:"C";s:3:"177";s:2:"WX";s:3:"549";s:1:"N";s:9:"plusminus";s:1:"B";a:4:{i:0;s:2:"10";i:1;s:1:"0";i:2;s:3:"539";i:3;s:3:"645";}}i:178;a:4:{s:1:"C";s:3:"178";s:2:"WX";s:3:"411";s:1:"N";s:6:"second";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:3:"459";i:2;s:3:"413";i:3;s:3:"737";}}s:6:"second";a:4:{s:1:"C";s:3:"178";s:2:"WX";s:3:"411";s:1:"N";s:6:"second";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:3:"459";i:2;s:3:"413";i:3;s:3:"737";}}i:179;a:4:{s:1:"C";s:3:"179";s:2:"WX";s:3:"549";s:1:"N";s:12:"greaterequal";s:1:"B";a:4:{i:0;s:2:"29";i:1;s:1:"0";i:2;s:3:"526";i:3;s:3:"639";}}s:12:"greaterequal";a:4:{s:1:"C";s:3:"179";s:2:"WX";s:3:"549";s:1:"N";s:12:"greaterequal";s:1:"B";a:4:{i:0;s:2:"29";i:1;s:1:"0";i:2;s:3:"526";i:3;s:3:"639";}}i:180;a:4:{s:1:"C";s:3:"180";s:2:"WX";s:3:"549";s:1:"N";s:8:"multiply";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:1:"8";i:2;s:3:"533";i:3;s:3:"524";}}s:8:"multiply";a:4:{s:1:"C";s:3:"180";s:2:"WX";s:3:"549";s:1:"N";s:8:"multiply";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:1:"8";i:2;s:3:"533";i:3;s:3:"524";}}i:181;a:4:{s:1:"C";s:3:"181";s:2:"WX";s:3:"713";s:1:"N";s:12:"proportional";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:3:"123";i:2;s:3:"639";i:3;s:3:"404";}}s:12:"proportional";a:4:{s:1:"C";s:3:"181";s:2:"WX";s:3:"713";s:1:"N";s:12:"proportional";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:3:"123";i:2;s:3:"639";i:3;s:3:"404";}}i:182;a:4:{s:1:"C";s:3:"182";s:2:"WX";s:3:"494";s:1:"N";s:11:"partialdiff";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:3:"-20";i:2;s:3:"462";i:3;s:3:"746";}}s:11:"partialdiff";a:4:{s:1:"C";s:3:"182";s:2:"WX";s:3:"494";s:1:"N";s:11:"partialdiff";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:3:"-20";i:2;s:3:"462";i:3;s:3:"746";}}i:183;a:4:{s:1:"C";s:3:"183";s:2:"WX";s:3:"460";s:1:"N";s:6:"bullet";s:1:"B";a:4:{i:0;s:2:"50";i:1;s:3:"113";i:2;s:3:"410";i:3;s:3:"473";}}s:6:"bullet";a:4:{s:1:"C";s:3:"183";s:2:"WX";s:3:"460";s:1:"N";s:6:"bullet";s:1:"B";a:4:{i:0;s:2:"50";i:1;s:3:"113";i:2;s:3:"410";i:3;s:3:"473";}}i:184;a:4:{s:1:"C";s:3:"184";s:2:"WX";s:3:"549";s:1:"N";s:6:"divide";s:1:"B";a:4:{i:0;s:2:"10";i:1;s:2:"71";i:2;s:3:"536";i:3;s:3:"456";}}s:6:"divide";a:4:{s:1:"C";s:3:"184";s:2:"WX";s:3:"549";s:1:"N";s:6:"divide";s:1:"B";a:4:{i:0;s:2:"10";i:1;s:2:"71";i:2;s:3:"536";i:3;s:3:"456";}}i:185;a:4:{s:1:"C";s:3:"185";s:2:"WX";s:3:"549";s:1:"N";s:8:"notequal";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:3:"-25";i:2;s:3:"540";i:3;s:3:"549";}}s:8:"notequal";a:4:{s:1:"C";s:3:"185";s:2:"WX";s:3:"549";s:1:"N";s:8:"notequal";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:3:"-25";i:2;s:3:"540";i:3;s:3:"549";}}i:186;a:4:{s:1:"C";s:3:"186";s:2:"WX";s:3:"549";s:1:"N";s:11:"equivalence";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:2:"82";i:2;s:3:"538";i:3;s:3:"443";}}s:11:"equivalence";a:4:{s:1:"C";s:3:"186";s:2:"WX";s:3:"549";s:1:"N";s:11:"equivalence";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:2:"82";i:2;s:3:"538";i:3;s:3:"443";}}i:187;a:4:{s:1:"C";s:3:"187";s:2:"WX";s:3:"549";s:1:"N";s:11:"approxequal";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:3:"135";i:2;s:3:"527";i:3;s:3:"394";}}s:11:"approxequal";a:4:{s:1:"C";s:3:"187";s:2:"WX";s:3:"549";s:1:"N";s:11:"approxequal";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:3:"135";i:2;s:3:"527";i:3;s:3:"394";}}i:188;a:4:{s:1:"C";s:3:"188";s:2:"WX";s:4:"1000";s:1:"N";s:8:"ellipsis";s:1:"B";a:4:{i:0;s:3:"111";i:1;s:3:"-17";i:2;s:3:"889";i:3;s:2:"95";}}s:8:"ellipsis";a:4:{s:1:"C";s:3:"188";s:2:"WX";s:4:"1000";s:1:"N";s:8:"ellipsis";s:1:"B";a:4:{i:0;s:3:"111";i:1;s:3:"-17";i:2;s:3:"889";i:3;s:2:"95";}}i:189;a:4:{s:1:"C";s:3:"189";s:2:"WX";s:3:"603";s:1:"N";s:11:"arrowvertex";s:1:"B";a:4:{i:0;s:3:"280";i:1;s:4:"-120";i:2;s:3:"336";i:3;s:4:"1010";}}s:11:"arrowvertex";a:4:{s:1:"C";s:3:"189";s:2:"WX";s:3:"603";s:1:"N";s:11:"arrowvertex";s:1:"B";a:4:{i:0;s:3:"280";i:1;s:4:"-120";i:2;s:3:"336";i:3;s:4:"1010";}}i:190;a:4:{s:1:"C";s:3:"190";s:2:"WX";s:4:"1000";s:1:"N";s:12:"arrowhorizex";s:1:"B";a:4:{i:0;s:3:"-60";i:1;s:3:"220";i:2;s:4:"1050";i:3;s:3:"276";}}s:12:"arrowhorizex";a:4:{s:1:"C";s:3:"190";s:2:"WX";s:4:"1000";s:1:"N";s:12:"arrowhorizex";s:1:"B";a:4:{i:0;s:3:"-60";i:1;s:3:"220";i:2;s:4:"1050";i:3;s:3:"276";}}i:191;a:4:{s:1:"C";s:3:"191";s:2:"WX";s:3:"658";s:1:"N";s:14:"carriagereturn";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:3:"-16";i:2;s:3:"602";i:3;s:3:"629";}}s:14:"carriagereturn";a:4:{s:1:"C";s:3:"191";s:2:"WX";s:3:"658";s:1:"N";s:14:"carriagereturn";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:3:"-16";i:2;s:3:"602";i:3;s:3:"629";}}i:192;a:4:{s:1:"C";s:3:"192";s:2:"WX";s:3:"823";s:1:"N";s:5:"aleph";s:1:"B";a:4:{i:0;s:3:"175";i:1;s:3:"-18";i:2;s:3:"661";i:3;s:3:"658";}}s:5:"aleph";a:4:{s:1:"C";s:3:"192";s:2:"WX";s:3:"823";s:1:"N";s:5:"aleph";s:1:"B";a:4:{i:0;s:3:"175";i:1;s:3:"-18";i:2;s:3:"661";i:3;s:3:"658";}}i:193;a:4:{s:1:"C";s:3:"193";s:2:"WX";s:3:"686";s:1:"N";s:8:"Ifraktur";s:1:"B";a:4:{i:0;s:2:"10";i:1;s:3:"-53";i:2;s:3:"578";i:3;s:3:"740";}}s:8:"Ifraktur";a:4:{s:1:"C";s:3:"193";s:2:"WX";s:3:"686";s:1:"N";s:8:"Ifraktur";s:1:"B";a:4:{i:0;s:2:"10";i:1;s:3:"-53";i:2;s:3:"578";i:3;s:3:"740";}}i:194;a:4:{s:1:"C";s:3:"194";s:2:"WX";s:3:"795";s:1:"N";s:8:"Rfraktur";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:3:"-15";i:2;s:3:"759";i:3;s:3:"734";}}s:8:"Rfraktur";a:4:{s:1:"C";s:3:"194";s:2:"WX";s:3:"795";s:1:"N";s:8:"Rfraktur";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:3:"-15";i:2;s:3:"759";i:3;s:3:"734";}}i:195;a:4:{s:1:"C";s:3:"195";s:2:"WX";s:3:"987";s:1:"N";s:11:"weierstrass";s:1:"B";a:4:{i:0;s:3:"159";i:1;s:4:"-211";i:2;s:3:"870";i:3;s:3:"573";}}s:11:"weierstrass";a:4:{s:1:"C";s:3:"195";s:2:"WX";s:3:"987";s:1:"N";s:11:"weierstrass";s:1:"B";a:4:{i:0;s:3:"159";i:1;s:4:"-211";i:2;s:3:"870";i:3;s:3:"573";}}i:196;a:4:{s:1:"C";s:3:"196";s:2:"WX";s:3:"768";s:1:"N";s:14:"circlemultiply";s:1:"B";a:4:{i:0;s:2:"43";i:1;s:3:"-17";i:2;s:3:"733";i:3;s:3:"673";}}s:14:"circlemultiply";a:4:{s:1:"C";s:3:"196";s:2:"WX";s:3:"768";s:1:"N";s:14:"circlemultiply";s:1:"B";a:4:{i:0;s:2:"43";i:1;s:3:"-17";i:2;s:3:"733";i:3;s:3:"673";}}i:197;a:4:{s:1:"C";s:3:"197";s:2:"WX";s:3:"768";s:1:"N";s:10:"circleplus";s:1:"B";a:4:{i:0;s:2:"43";i:1;s:3:"-15";i:2;s:3:"733";i:3;s:3:"675";}}s:10:"circleplus";a:4:{s:1:"C";s:3:"197";s:2:"WX";s:3:"768";s:1:"N";s:10:"circleplus";s:1:"B";a:4:{i:0;s:2:"43";i:1;s:3:"-15";i:2;s:3:"733";i:3;s:3:"675";}}i:198;a:4:{s:1:"C";s:3:"198";s:2:"WX";s:3:"823";s:1:"N";s:8:"emptyset";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:3:"-24";i:2;s:3:"781";i:3;s:3:"719";}}s:8:"emptyset";a:4:{s:1:"C";s:3:"198";s:2:"WX";s:3:"823";s:1:"N";s:8:"emptyset";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:3:"-24";i:2;s:3:"781";i:3;s:3:"719";}}i:199;a:4:{s:1:"C";s:3:"199";s:2:"WX";s:3:"768";s:1:"N";s:12:"intersection";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:1:"0";i:2;s:3:"732";i:3;s:3:"509";}}s:12:"intersection";a:4:{s:1:"C";s:3:"199";s:2:"WX";s:3:"768";s:1:"N";s:12:"intersection";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:1:"0";i:2;s:3:"732";i:3;s:3:"509";}}i:200;a:4:{s:1:"C";s:3:"200";s:2:"WX";s:3:"768";s:1:"N";s:5:"union";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:3:"-17";i:2;s:3:"732";i:3;s:3:"492";}}s:5:"union";a:4:{s:1:"C";s:3:"200";s:2:"WX";s:3:"768";s:1:"N";s:5:"union";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:3:"-17";i:2;s:3:"732";i:3;s:3:"492";}}i:201;a:4:{s:1:"C";s:3:"201";s:2:"WX";s:3:"713";s:1:"N";s:14:"propersuperset";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:1:"0";i:2;s:3:"673";i:3;s:3:"470";}}s:14:"propersuperset";a:4:{s:1:"C";s:3:"201";s:2:"WX";s:3:"713";s:1:"N";s:14:"propersuperset";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:1:"0";i:2;s:3:"673";i:3;s:3:"470";}}i:202;a:4:{s:1:"C";s:3:"202";s:2:"WX";s:3:"713";s:1:"N";s:14:"reflexsuperset";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:4:"-125";i:2;s:3:"673";i:3;s:3:"470";}}s:14:"reflexsuperset";a:4:{s:1:"C";s:3:"202";s:2:"WX";s:3:"713";s:1:"N";s:14:"reflexsuperset";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:4:"-125";i:2;s:3:"673";i:3;s:3:"470";}}i:203;a:4:{s:1:"C";s:3:"203";s:2:"WX";s:3:"713";s:1:"N";s:9:"notsubset";s:1:"B";a:4:{i:0;s:2:"36";i:1;s:3:"-70";i:2;s:3:"690";i:3;s:3:"540";}}s:9:"notsubset";a:4:{s:1:"C";s:3:"203";s:2:"WX";s:3:"713";s:1:"N";s:9:"notsubset";s:1:"B";a:4:{i:0;s:2:"36";i:1;s:3:"-70";i:2;s:3:"690";i:3;s:3:"540";}}i:204;a:4:{s:1:"C";s:3:"204";s:2:"WX";s:3:"713";s:1:"N";s:12:"propersubset";s:1:"B";a:4:{i:0;s:2:"37";i:1;s:1:"0";i:2;s:3:"690";i:3;s:3:"470";}}s:12:"propersubset";a:4:{s:1:"C";s:3:"204";s:2:"WX";s:3:"713";s:1:"N";s:12:"propersubset";s:1:"B";a:4:{i:0;s:2:"37";i:1;s:1:"0";i:2;s:3:"690";i:3;s:3:"470";}}i:205;a:4:{s:1:"C";s:3:"205";s:2:"WX";s:3:"713";s:1:"N";s:12:"reflexsubset";s:1:"B";a:4:{i:0;s:2:"37";i:1;s:4:"-125";i:2;s:3:"690";i:3;s:3:"470";}}s:12:"reflexsubset";a:4:{s:1:"C";s:3:"205";s:2:"WX";s:3:"713";s:1:"N";s:12:"reflexsubset";s:1:"B";a:4:{i:0;s:2:"37";i:1;s:4:"-125";i:2;s:3:"690";i:3;s:3:"470";}}i:206;a:4:{s:1:"C";s:3:"206";s:2:"WX";s:3:"713";s:1:"N";s:7:"element";s:1:"B";a:4:{i:0;s:2:"45";i:1;s:1:"0";i:2;s:3:"505";i:3;s:3:"468";}}s:7:"element";a:4:{s:1:"C";s:3:"206";s:2:"WX";s:3:"713";s:1:"N";s:7:"element";s:1:"B";a:4:{i:0;s:2:"45";i:1;s:1:"0";i:2;s:3:"505";i:3;s:3:"468";}}i:207;a:4:{s:1:"C";s:3:"207";s:2:"WX";s:3:"713";s:1:"N";s:10:"notelement";s:1:"B";a:4:{i:0;s:2:"45";i:1;s:3:"-58";i:2;s:3:"505";i:3;s:3:"555";}}s:10:"notelement";a:4:{s:1:"C";s:3:"207";s:2:"WX";s:3:"713";s:1:"N";s:10:"notelement";s:1:"B";a:4:{i:0;s:2:"45";i:1;s:3:"-58";i:2;s:3:"505";i:3;s:3:"555";}}i:208;a:4:{s:1:"C";s:3:"208";s:2:"WX";s:3:"768";s:1:"N";s:5:"angle";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:1:"0";i:2;s:3:"738";i:3;s:3:"673";}}s:5:"angle";a:4:{s:1:"C";s:3:"208";s:2:"WX";s:3:"768";s:1:"N";s:5:"angle";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:1:"0";i:2;s:3:"738";i:3;s:3:"673";}}i:209;a:4:{s:1:"C";s:3:"209";s:2:"WX";s:3:"713";s:1:"N";s:8:"gradient";s:1:"B";a:4:{i:0;s:2:"36";i:1;s:3:"-19";i:2;s:3:"681";i:3;s:3:"718";}}s:8:"gradient";a:4:{s:1:"C";s:3:"209";s:2:"WX";s:3:"713";s:1:"N";s:8:"gradient";s:1:"B";a:4:{i:0;s:2:"36";i:1;s:3:"-19";i:2;s:3:"681";i:3;s:3:"718";}}i:210;a:4:{s:1:"C";s:3:"210";s:2:"WX";s:3:"790";s:1:"N";s:13:"registerserif";s:1:"B";a:4:{i:0;s:2:"50";i:1;s:3:"-17";i:2;s:3:"740";i:3;s:3:"673";}}s:13:"registerserif";a:4:{s:1:"C";s:3:"210";s:2:"WX";s:3:"790";s:1:"N";s:13:"registerserif";s:1:"B";a:4:{i:0;s:2:"50";i:1;s:3:"-17";i:2;s:3:"740";i:3;s:3:"673";}}i:211;a:4:{s:1:"C";s:3:"211";s:2:"WX";s:3:"790";s:1:"N";s:14:"copyrightserif";s:1:"B";a:4:{i:0;s:2:"51";i:1;s:3:"-15";i:2;s:3:"741";i:3;s:3:"675";}}s:14:"copyrightserif";a:4:{s:1:"C";s:3:"211";s:2:"WX";s:3:"790";s:1:"N";s:14:"copyrightserif";s:1:"B";a:4:{i:0;s:2:"51";i:1;s:3:"-15";i:2;s:3:"741";i:3;s:3:"675";}}i:212;a:4:{s:1:"C";s:3:"212";s:2:"WX";s:3:"890";s:1:"N";s:14:"trademarkserif";s:1:"B";a:4:{i:0;s:2:"18";i:1;s:3:"293";i:2;s:3:"855";i:3;s:3:"673";}}s:14:"trademarkserif";a:4:{s:1:"C";s:3:"212";s:2:"WX";s:3:"890";s:1:"N";s:14:"trademarkserif";s:1:"B";a:4:{i:0;s:2:"18";i:1;s:3:"293";i:2;s:3:"855";i:3;s:3:"673";}}i:213;a:4:{s:1:"C";s:3:"213";s:2:"WX";s:3:"823";s:1:"N";s:7:"product";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:4:"-101";i:2;s:3:"803";i:3;s:3:"751";}}s:7:"product";a:4:{s:1:"C";s:3:"213";s:2:"WX";s:3:"823";s:1:"N";s:7:"product";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:4:"-101";i:2;s:3:"803";i:3;s:3:"751";}}i:214;a:4:{s:1:"C";s:3:"214";s:2:"WX";s:3:"549";s:1:"N";s:7:"radical";s:1:"B";a:4:{i:0;s:2:"10";i:1;s:3:"-38";i:2;s:3:"515";i:3;s:3:"917";}}s:7:"radical";a:4:{s:1:"C";s:3:"214";s:2:"WX";s:3:"549";s:1:"N";s:7:"radical";s:1:"B";a:4:{i:0;s:2:"10";i:1;s:3:"-38";i:2;s:3:"515";i:3;s:3:"917";}}i:215;a:4:{s:1:"C";s:3:"215";s:2:"WX";s:3:"250";s:1:"N";s:7:"dotmath";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:3:"210";i:2;s:3:"169";i:3;s:3:"310";}}s:7:"dotmath";a:4:{s:1:"C";s:3:"215";s:2:"WX";s:3:"250";s:1:"N";s:7:"dotmath";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:3:"210";i:2;s:3:"169";i:3;s:3:"310";}}i:216;a:4:{s:1:"C";s:3:"216";s:2:"WX";s:3:"713";s:1:"N";s:10:"logicalnot";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:1:"0";i:2;s:3:"680";i:3;s:3:"288";}}s:10:"logicalnot";a:4:{s:1:"C";s:3:"216";s:2:"WX";s:3:"713";s:1:"N";s:10:"logicalnot";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:1:"0";i:2;s:3:"680";i:3;s:3:"288";}}i:217;a:4:{s:1:"C";s:3:"217";s:2:"WX";s:3:"603";s:1:"N";s:10:"logicaland";s:1:"B";a:4:{i:0;s:2:"23";i:1;s:1:"0";i:2;s:3:"583";i:3;s:3:"454";}}s:10:"logicaland";a:4:{s:1:"C";s:3:"217";s:2:"WX";s:3:"603";s:1:"N";s:10:"logicaland";s:1:"B";a:4:{i:0;s:2:"23";i:1;s:1:"0";i:2;s:3:"583";i:3;s:3:"454";}}i:218;a:4:{s:1:"C";s:3:"218";s:2:"WX";s:3:"603";s:1:"N";s:9:"logicalor";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:1:"0";i:2;s:3:"578";i:3;s:3:"477";}}s:9:"logicalor";a:4:{s:1:"C";s:3:"218";s:2:"WX";s:3:"603";s:1:"N";s:9:"logicalor";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:1:"0";i:2;s:3:"578";i:3;s:3:"477";}}i:219;a:4:{s:1:"C";s:3:"219";s:2:"WX";s:4:"1042";s:1:"N";s:12:"arrowdblboth";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:3:"-20";i:2;s:4:"1023";i:3;s:3:"510";}}s:12:"arrowdblboth";a:4:{s:1:"C";s:3:"219";s:2:"WX";s:4:"1042";s:1:"N";s:12:"arrowdblboth";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:3:"-20";i:2;s:4:"1023";i:3;s:3:"510";}}i:220;a:4:{s:1:"C";s:3:"220";s:2:"WX";s:3:"987";s:1:"N";s:12:"arrowdblleft";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:3:"-15";i:2;s:3:"939";i:3;s:3:"513";}}s:12:"arrowdblleft";a:4:{s:1:"C";s:3:"220";s:2:"WX";s:3:"987";s:1:"N";s:12:"arrowdblleft";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:3:"-15";i:2;s:3:"939";i:3;s:3:"513";}}i:221;a:4:{s:1:"C";s:3:"221";s:2:"WX";s:3:"603";s:1:"N";s:10:"arrowdblup";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:1:"2";i:2;s:3:"567";i:3;s:3:"911";}}s:10:"arrowdblup";a:4:{s:1:"C";s:3:"221";s:2:"WX";s:3:"603";s:1:"N";s:10:"arrowdblup";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:1:"2";i:2;s:3:"567";i:3;s:3:"911";}}i:222;a:4:{s:1:"C";s:3:"222";s:2:"WX";s:3:"987";s:1:"N";s:13:"arrowdblright";s:1:"B";a:4:{i:0;s:2:"45";i:1;s:3:"-20";i:2;s:3:"954";i:3;s:3:"508";}}s:13:"arrowdblright";a:4:{s:1:"C";s:3:"222";s:2:"WX";s:3:"987";s:1:"N";s:13:"arrowdblright";s:1:"B";a:4:{i:0;s:2:"45";i:1;s:3:"-20";i:2;s:3:"954";i:3;s:3:"508";}}i:223;a:4:{s:1:"C";s:3:"223";s:2:"WX";s:3:"603";s:1:"N";s:12:"arrowdbldown";s:1:"B";a:4:{i:0;s:2:"44";i:1;s:3:"-19";i:2;s:3:"572";i:3;s:3:"890";}}s:12:"arrowdbldown";a:4:{s:1:"C";s:3:"223";s:2:"WX";s:3:"603";s:1:"N";s:12:"arrowdbldown";s:1:"B";a:4:{i:0;s:2:"44";i:1;s:3:"-19";i:2;s:3:"572";i:3;s:3:"890";}}i:224;a:4:{s:1:"C";s:3:"224";s:2:"WX";s:3:"494";s:1:"N";s:7:"lozenge";s:1:"B";a:4:{i:0;s:2:"18";i:1;s:1:"0";i:2;s:3:"466";i:3;s:3:"745";}}s:7:"lozenge";a:4:{s:1:"C";s:3:"224";s:2:"WX";s:3:"494";s:1:"N";s:7:"lozenge";s:1:"B";a:4:{i:0;s:2:"18";i:1;s:1:"0";i:2;s:3:"466";i:3;s:3:"745";}}i:225;a:4:{s:1:"C";s:3:"225";s:2:"WX";s:3:"329";s:1:"N";s:9:"angleleft";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:4:"-198";i:2;s:3:"306";i:3;s:3:"746";}}s:9:"angleleft";a:4:{s:1:"C";s:3:"225";s:2:"WX";s:3:"329";s:1:"N";s:9:"angleleft";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:4:"-198";i:2;s:3:"306";i:3;s:3:"746";}}i:226;a:4:{s:1:"C";s:3:"226";s:2:"WX";s:3:"790";s:1:"N";s:12:"registersans";s:1:"B";a:4:{i:0;s:2:"50";i:1;s:3:"-20";i:2;s:3:"740";i:3;s:3:"670";}}s:12:"registersans";a:4:{s:1:"C";s:3:"226";s:2:"WX";s:3:"790";s:1:"N";s:12:"registersans";s:1:"B";a:4:{i:0;s:2:"50";i:1;s:3:"-20";i:2;s:3:"740";i:3;s:3:"670";}}i:227;a:4:{s:1:"C";s:3:"227";s:2:"WX";s:3:"790";s:1:"N";s:13:"copyrightsans";s:1:"B";a:4:{i:0;s:2:"49";i:1;s:3:"-15";i:2;s:3:"739";i:3;s:3:"675";}}s:13:"copyrightsans";a:4:{s:1:"C";s:3:"227";s:2:"WX";s:3:"790";s:1:"N";s:13:"copyrightsans";s:1:"B";a:4:{i:0;s:2:"49";i:1;s:3:"-15";i:2;s:3:"739";i:3;s:3:"675";}}i:228;a:4:{s:1:"C";s:3:"228";s:2:"WX";s:3:"786";s:1:"N";s:13:"trademarksans";s:1:"B";a:4:{i:0;s:1:"5";i:1;s:3:"293";i:2;s:3:"725";i:3;s:3:"673";}}s:13:"trademarksans";a:4:{s:1:"C";s:3:"228";s:2:"WX";s:3:"786";s:1:"N";s:13:"trademarksans";s:1:"B";a:4:{i:0;s:1:"5";i:1;s:3:"293";i:2;s:3:"725";i:3;s:3:"673";}}i:229;a:4:{s:1:"C";s:3:"229";s:2:"WX";s:3:"713";s:1:"N";s:9:"summation";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:4:"-108";i:2;s:3:"695";i:3;s:3:"752";}}s:9:"summation";a:4:{s:1:"C";s:3:"229";s:2:"WX";s:3:"713";s:1:"N";s:9:"summation";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:4:"-108";i:2;s:3:"695";i:3;s:3:"752";}}i:230;a:4:{s:1:"C";s:3:"230";s:2:"WX";s:3:"384";s:1:"N";s:11:"parenlefttp";s:1:"B";a:4:{i:0;s:2:"24";i:1;s:4:"-293";i:2;s:3:"436";i:3;s:3:"926";}}s:11:"parenlefttp";a:4:{s:1:"C";s:3:"230";s:2:"WX";s:3:"384";s:1:"N";s:11:"parenlefttp";s:1:"B";a:4:{i:0;s:2:"24";i:1;s:4:"-293";i:2;s:3:"436";i:3;s:3:"926";}}i:231;a:4:{s:1:"C";s:3:"231";s:2:"WX";s:3:"384";s:1:"N";s:11:"parenleftex";s:1:"B";a:4:{i:0;s:2:"24";i:1;s:3:"-85";i:2;s:3:"108";i:3;s:3:"925";}}s:11:"parenleftex";a:4:{s:1:"C";s:3:"231";s:2:"WX";s:3:"384";s:1:"N";s:11:"parenleftex";s:1:"B";a:4:{i:0;s:2:"24";i:1;s:3:"-85";i:2;s:3:"108";i:3;s:3:"925";}}i:232;a:4:{s:1:"C";s:3:"232";s:2:"WX";s:3:"384";s:1:"N";s:11:"parenleftbt";s:1:"B";a:4:{i:0;s:2:"24";i:1;s:4:"-293";i:2;s:3:"436";i:3;s:3:"926";}}s:11:"parenleftbt";a:4:{s:1:"C";s:3:"232";s:2:"WX";s:3:"384";s:1:"N";s:11:"parenleftbt";s:1:"B";a:4:{i:0;s:2:"24";i:1;s:4:"-293";i:2;s:3:"436";i:3;s:3:"926";}}i:233;a:4:{s:1:"C";s:3:"233";s:2:"WX";s:3:"384";s:1:"N";s:13:"bracketlefttp";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:3:"-80";i:2;s:3:"349";i:3;s:3:"926";}}s:13:"bracketlefttp";a:4:{s:1:"C";s:3:"233";s:2:"WX";s:3:"384";s:1:"N";s:13:"bracketlefttp";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:3:"-80";i:2;s:3:"349";i:3;s:3:"926";}}i:234;a:4:{s:1:"C";s:3:"234";s:2:"WX";s:3:"384";s:1:"N";s:13:"bracketleftex";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:3:"-79";i:2;s:2:"77";i:3;s:3:"925";}}s:13:"bracketleftex";a:4:{s:1:"C";s:3:"234";s:2:"WX";s:3:"384";s:1:"N";s:13:"bracketleftex";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:3:"-79";i:2;s:2:"77";i:3;s:3:"925";}}i:235;a:4:{s:1:"C";s:3:"235";s:2:"WX";s:3:"384";s:1:"N";s:13:"bracketleftbt";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:3:"-80";i:2;s:3:"349";i:3;s:3:"926";}}s:13:"bracketleftbt";a:4:{s:1:"C";s:3:"235";s:2:"WX";s:3:"384";s:1:"N";s:13:"bracketleftbt";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:3:"-80";i:2;s:3:"349";i:3;s:3:"926";}}i:236;a:4:{s:1:"C";s:3:"236";s:2:"WX";s:3:"494";s:1:"N";s:11:"bracelefttp";s:1:"B";a:4:{i:0;s:3:"209";i:1;s:3:"-85";i:2;s:3:"445";i:3;s:3:"925";}}s:11:"bracelefttp";a:4:{s:1:"C";s:3:"236";s:2:"WX";s:3:"494";s:1:"N";s:11:"bracelefttp";s:1:"B";a:4:{i:0;s:3:"209";i:1;s:3:"-85";i:2;s:3:"445";i:3;s:3:"925";}}i:237;a:4:{s:1:"C";s:3:"237";s:2:"WX";s:3:"494";s:1:"N";s:12:"braceleftmid";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:3:"-85";i:2;s:3:"284";i:3;s:3:"935";}}s:12:"braceleftmid";a:4:{s:1:"C";s:3:"237";s:2:"WX";s:3:"494";s:1:"N";s:12:"braceleftmid";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:3:"-85";i:2;s:3:"284";i:3;s:3:"935";}}i:238;a:4:{s:1:"C";s:3:"238";s:2:"WX";s:3:"494";s:1:"N";s:11:"braceleftbt";s:1:"B";a:4:{i:0;s:3:"209";i:1;s:3:"-75";i:2;s:3:"445";i:3;s:3:"935";}}s:11:"braceleftbt";a:4:{s:1:"C";s:3:"238";s:2:"WX";s:3:"494";s:1:"N";s:11:"braceleftbt";s:1:"B";a:4:{i:0;s:3:"209";i:1;s:3:"-75";i:2;s:3:"445";i:3;s:3:"935";}}i:239;a:4:{s:1:"C";s:3:"239";s:2:"WX";s:3:"494";s:1:"N";s:7:"braceex";s:1:"B";a:4:{i:0;s:3:"209";i:1;s:3:"-85";i:2;s:3:"284";i:3;s:3:"935";}}s:7:"braceex";a:4:{s:1:"C";s:3:"239";s:2:"WX";s:3:"494";s:1:"N";s:7:"braceex";s:1:"B";a:4:{i:0;s:3:"209";i:1;s:3:"-85";i:2;s:3:"284";i:3;s:3:"935";}}i:241;a:4:{s:1:"C";s:3:"241";s:2:"WX";s:3:"329";s:1:"N";s:10:"angleright";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:4:"-198";i:2;s:3:"302";i:3;s:3:"746";}}s:10:"angleright";a:4:{s:1:"C";s:3:"241";s:2:"WX";s:3:"329";s:1:"N";s:10:"angleright";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:4:"-198";i:2;s:3:"302";i:3;s:3:"746";}}i:242;a:4:{s:1:"C";s:3:"242";s:2:"WX";s:3:"274";s:1:"N";s:8:"integral";s:1:"B";a:4:{i:0;s:1:"2";i:1;s:4:"-107";i:2;s:3:"291";i:3;s:3:"916";}}s:8:"integral";a:4:{s:1:"C";s:3:"242";s:2:"WX";s:3:"274";s:1:"N";s:8:"integral";s:1:"B";a:4:{i:0;s:1:"2";i:1;s:4:"-107";i:2;s:3:"291";i:3;s:3:"916";}}i:243;a:4:{s:1:"C";s:3:"243";s:2:"WX";s:3:"686";s:1:"N";s:10:"integraltp";s:1:"B";a:4:{i:0;s:3:"308";i:1;s:3:"-88";i:2;s:3:"675";i:3;s:3:"920";}}s:10:"integraltp";a:4:{s:1:"C";s:3:"243";s:2:"WX";s:3:"686";s:1:"N";s:10:"integraltp";s:1:"B";a:4:{i:0;s:3:"308";i:1;s:3:"-88";i:2;s:3:"675";i:3;s:3:"920";}}i:244;a:4:{s:1:"C";s:3:"244";s:2:"WX";s:3:"686";s:1:"N";s:10:"integralex";s:1:"B";a:4:{i:0;s:3:"308";i:1;s:3:"-88";i:2;s:3:"378";i:3;s:3:"975";}}s:10:"integralex";a:4:{s:1:"C";s:3:"244";s:2:"WX";s:3:"686";s:1:"N";s:10:"integralex";s:1:"B";a:4:{i:0;s:3:"308";i:1;s:3:"-88";i:2;s:3:"378";i:3;s:3:"975";}}i:245;a:4:{s:1:"C";s:3:"245";s:2:"WX";s:3:"686";s:1:"N";s:10:"integralbt";s:1:"B";a:4:{i:0;s:2:"11";i:1;s:3:"-87";i:2;s:3:"378";i:3;s:3:"921";}}s:10:"integralbt";a:4:{s:1:"C";s:3:"245";s:2:"WX";s:3:"686";s:1:"N";s:10:"integralbt";s:1:"B";a:4:{i:0;s:2:"11";i:1;s:3:"-87";i:2;s:3:"378";i:3;s:3:"921";}}i:246;a:4:{s:1:"C";s:3:"246";s:2:"WX";s:3:"384";s:1:"N";s:12:"parenrighttp";s:1:"B";a:4:{i:0;s:2:"54";i:1;s:4:"-293";i:2;s:3:"466";i:3;s:3:"926";}}s:12:"parenrighttp";a:4:{s:1:"C";s:3:"246";s:2:"WX";s:3:"384";s:1:"N";s:12:"parenrighttp";s:1:"B";a:4:{i:0;s:2:"54";i:1;s:4:"-293";i:2;s:3:"466";i:3;s:3:"926";}}i:247;a:4:{s:1:"C";s:3:"247";s:2:"WX";s:3:"384";s:1:"N";s:12:"parenrightex";s:1:"B";a:4:{i:0;s:3:"382";i:1;s:3:"-85";i:2;s:3:"466";i:3;s:3:"925";}}s:12:"parenrightex";a:4:{s:1:"C";s:3:"247";s:2:"WX";s:3:"384";s:1:"N";s:12:"parenrightex";s:1:"B";a:4:{i:0;s:3:"382";i:1;s:3:"-85";i:2;s:3:"466";i:3;s:3:"925";}}i:248;a:4:{s:1:"C";s:3:"248";s:2:"WX";s:3:"384";s:1:"N";s:12:"parenrightbt";s:1:"B";a:4:{i:0;s:2:"54";i:1;s:4:"-293";i:2;s:3:"466";i:3;s:3:"926";}}s:12:"parenrightbt";a:4:{s:1:"C";s:3:"248";s:2:"WX";s:3:"384";s:1:"N";s:12:"parenrightbt";s:1:"B";a:4:{i:0;s:2:"54";i:1;s:4:"-293";i:2;s:3:"466";i:3;s:3:"926";}}i:249;a:4:{s:1:"C";s:3:"249";s:2:"WX";s:3:"384";s:1:"N";s:14:"bracketrighttp";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:3:"-80";i:2;s:3:"371";i:3;s:3:"926";}}s:14:"bracketrighttp";a:4:{s:1:"C";s:3:"249";s:2:"WX";s:3:"384";s:1:"N";s:14:"bracketrighttp";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:3:"-80";i:2;s:3:"371";i:3;s:3:"926";}}i:250;a:4:{s:1:"C";s:3:"250";s:2:"WX";s:3:"384";s:1:"N";s:14:"bracketrightex";s:1:"B";a:4:{i:0;s:3:"294";i:1;s:3:"-79";i:2;s:3:"371";i:3;s:3:"925";}}s:14:"bracketrightex";a:4:{s:1:"C";s:3:"250";s:2:"WX";s:3:"384";s:1:"N";s:14:"bracketrightex";s:1:"B";a:4:{i:0;s:3:"294";i:1;s:3:"-79";i:2;s:3:"371";i:3;s:3:"925";}}i:251;a:4:{s:1:"C";s:3:"251";s:2:"WX";s:3:"384";s:1:"N";s:14:"bracketrightbt";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:3:"-80";i:2;s:3:"371";i:3;s:3:"926";}}s:14:"bracketrightbt";a:4:{s:1:"C";s:3:"251";s:2:"WX";s:3:"384";s:1:"N";s:14:"bracketrightbt";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:3:"-80";i:2;s:3:"371";i:3;s:3:"926";}}i:252;a:4:{s:1:"C";s:3:"252";s:2:"WX";s:3:"494";s:1:"N";s:12:"bracerighttp";s:1:"B";a:4:{i:0;s:2:"48";i:1;s:3:"-85";i:2;s:3:"284";i:3;s:3:"925";}}s:12:"bracerighttp";a:4:{s:1:"C";s:3:"252";s:2:"WX";s:3:"494";s:1:"N";s:12:"bracerighttp";s:1:"B";a:4:{i:0;s:2:"48";i:1;s:3:"-85";i:2;s:3:"284";i:3;s:3:"925";}}i:253;a:4:{s:1:"C";s:3:"253";s:2:"WX";s:3:"494";s:1:"N";s:13:"bracerightmid";s:1:"B";a:4:{i:0;s:3:"209";i:1;s:3:"-85";i:2;s:3:"473";i:3;s:3:"935";}}s:13:"bracerightmid";a:4:{s:1:"C";s:3:"253";s:2:"WX";s:3:"494";s:1:"N";s:13:"bracerightmid";s:1:"B";a:4:{i:0;s:3:"209";i:1;s:3:"-85";i:2;s:3:"473";i:3;s:3:"935";}}i:254;a:4:{s:1:"C";s:3:"254";s:2:"WX";s:3:"494";s:1:"N";s:12:"bracerightbt";s:1:"B";a:4:{i:0;s:2:"48";i:1;s:3:"-75";i:2;s:3:"284";i:3;s:3:"935";}}s:12:"bracerightbt";a:4:{s:1:"C";s:3:"254";s:2:"WX";s:3:"494";s:1:"N";s:12:"bracerightbt";s:1:"B";a:4:{i:0;s:2:"48";i:1;s:3:"-75";i:2;s:3:"284";i:3;s:3:"935";}}s:5:"apple";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"790";s:1:"N";s:5:"apple";s:1:"B";a:4:{i:0;s:2:"56";i:1;s:2:"-3";i:2;s:3:"733";i:3;s:3:"808";}}}s:9:"_version_";i:1;}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/php_Times-Bold.afm b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/php_Times-Bold.afm new file mode 100755 index 00000000..3f4872b8 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/php_Times-Bold.afm @@ -0,0 +1 @@ +a:22:{s:8:"FontName";s:10:"Times-Bold";s:8:"FullName";s:10:"Times Bold";s:10:"FamilyName";s:5:"Times";s:6:"Weight";s:4:"Bold";s:11:"ItalicAngle";s:1:"0";s:12:"IsFixedPitch";s:5:"false";s:12:"CharacterSet";s:13:"ExtendedRoman";s:8:"FontBBox";a:4:{i:0;s:4:"-168";i:1;s:4:"-218";i:2;s:4:"1000";i:3;s:3:"935";}s:17:"UnderlinePosition";s:4:"-100";s:18:"UnderlineThickness";s:2:"50";s:7:"Version";s:7:"002.000";s:14:"EncodingScheme";s:21:"AdobeStandardEncoding";s:9:"CapHeight";s:3:"676";s:7:"XHeight";s:3:"461";s:8:"Ascender";s:3:"683";s:9:"Descender";s:4:"-217";s:5:"StdHW";s:2:"44";s:5:"StdVW";s:3:"139";s:16:"StartCharMetrics";s:3:"315";s:1:"C";a:464:{i:32;a:4:{s:1:"C";s:2:"32";s:2:"WX";s:3:"250";s:1:"N";s:5:"space";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:1:"0";i:2;s:1:"0";i:3;s:1:"0";}}s:5:"space";a:4:{s:1:"C";s:2:"32";s:2:"WX";s:3:"250";s:1:"N";s:5:"space";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:1:"0";i:2;s:1:"0";i:3;s:1:"0";}}i:33;a:4:{s:1:"C";s:2:"33";s:2:"WX";s:3:"333";s:1:"N";s:6:"exclam";s:1:"B";a:4:{i:0;s:2:"81";i:1;s:3:"-13";i:2;s:3:"251";i:3;s:3:"691";}}s:6:"exclam";a:4:{s:1:"C";s:2:"33";s:2:"WX";s:3:"333";s:1:"N";s:6:"exclam";s:1:"B";a:4:{i:0;s:2:"81";i:1;s:3:"-13";i:2;s:3:"251";i:3;s:3:"691";}}i:34;a:4:{s:1:"C";s:2:"34";s:2:"WX";s:3:"555";s:1:"N";s:8:"quotedbl";s:1:"B";a:4:{i:0;s:2:"83";i:1;s:3:"404";i:2;s:3:"472";i:3;s:3:"691";}}s:8:"quotedbl";a:4:{s:1:"C";s:2:"34";s:2:"WX";s:3:"555";s:1:"N";s:8:"quotedbl";s:1:"B";a:4:{i:0;s:2:"83";i:1;s:3:"404";i:2;s:3:"472";i:3;s:3:"691";}}i:35;a:4:{s:1:"C";s:2:"35";s:2:"WX";s:3:"500";s:1:"N";s:10:"numbersign";s:1:"B";a:4:{i:0;s:1:"4";i:1;s:1:"0";i:2;s:3:"496";i:3;s:3:"700";}}s:10:"numbersign";a:4:{s:1:"C";s:2:"35";s:2:"WX";s:3:"500";s:1:"N";s:10:"numbersign";s:1:"B";a:4:{i:0;s:1:"4";i:1;s:1:"0";i:2;s:3:"496";i:3;s:3:"700";}}i:36;a:4:{s:1:"C";s:2:"36";s:2:"WX";s:3:"500";s:1:"N";s:6:"dollar";s:1:"B";a:4:{i:0;s:2:"29";i:1;s:3:"-99";i:2;s:3:"472";i:3;s:3:"750";}}s:6:"dollar";a:4:{s:1:"C";s:2:"36";s:2:"WX";s:3:"500";s:1:"N";s:6:"dollar";s:1:"B";a:4:{i:0;s:2:"29";i:1;s:3:"-99";i:2;s:3:"472";i:3;s:3:"750";}}i:37;a:4:{s:1:"C";s:2:"37";s:2:"WX";s:4:"1000";s:1:"N";s:7:"percent";s:1:"B";a:4:{i:0;s:3:"124";i:1;s:3:"-14";i:2;s:3:"877";i:3;s:3:"692";}}s:7:"percent";a:4:{s:1:"C";s:2:"37";s:2:"WX";s:4:"1000";s:1:"N";s:7:"percent";s:1:"B";a:4:{i:0;s:3:"124";i:1;s:3:"-14";i:2;s:3:"877";i:3;s:3:"692";}}i:38;a:4:{s:1:"C";s:2:"38";s:2:"WX";s:3:"833";s:1:"N";s:9:"ampersand";s:1:"B";a:4:{i:0;s:2:"62";i:1;s:3:"-16";i:2;s:3:"787";i:3;s:3:"691";}}s:9:"ampersand";a:4:{s:1:"C";s:2:"38";s:2:"WX";s:3:"833";s:1:"N";s:9:"ampersand";s:1:"B";a:4:{i:0;s:2:"62";i:1;s:3:"-16";i:2;s:3:"787";i:3;s:3:"691";}}i:39;a:4:{s:1:"C";s:2:"39";s:2:"WX";s:3:"333";s:1:"N";s:10:"quoteright";s:1:"B";a:4:{i:0;s:2:"79";i:1;s:3:"356";i:2;s:3:"263";i:3;s:3:"691";}}s:10:"quoteright";a:4:{s:1:"C";s:2:"39";s:2:"WX";s:3:"333";s:1:"N";s:10:"quoteright";s:1:"B";a:4:{i:0;s:2:"79";i:1;s:3:"356";i:2;s:3:"263";i:3;s:3:"691";}}i:40;a:4:{s:1:"C";s:2:"40";s:2:"WX";s:3:"333";s:1:"N";s:9:"parenleft";s:1:"B";a:4:{i:0;s:2:"46";i:1;s:4:"-168";i:2;s:3:"306";i:3;s:3:"694";}}s:9:"parenleft";a:4:{s:1:"C";s:2:"40";s:2:"WX";s:3:"333";s:1:"N";s:9:"parenleft";s:1:"B";a:4:{i:0;s:2:"46";i:1;s:4:"-168";i:2;s:3:"306";i:3;s:3:"694";}}i:41;a:4:{s:1:"C";s:2:"41";s:2:"WX";s:3:"333";s:1:"N";s:10:"parenright";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:4:"-168";i:2;s:3:"287";i:3;s:3:"694";}}s:10:"parenright";a:4:{s:1:"C";s:2:"41";s:2:"WX";s:3:"333";s:1:"N";s:10:"parenright";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:4:"-168";i:2;s:3:"287";i:3;s:3:"694";}}i:42;a:4:{s:1:"C";s:2:"42";s:2:"WX";s:3:"500";s:1:"N";s:8:"asterisk";s:1:"B";a:4:{i:0;s:2:"56";i:1;s:3:"255";i:2;s:3:"447";i:3;s:3:"691";}}s:8:"asterisk";a:4:{s:1:"C";s:2:"42";s:2:"WX";s:3:"500";s:1:"N";s:8:"asterisk";s:1:"B";a:4:{i:0;s:2:"56";i:1;s:3:"255";i:2;s:3:"447";i:3;s:3:"691";}}i:43;a:4:{s:1:"C";s:2:"43";s:2:"WX";s:3:"570";s:1:"N";s:4:"plus";s:1:"B";a:4:{i:0;s:2:"33";i:1;s:1:"0";i:2;s:3:"537";i:3;s:3:"506";}}s:4:"plus";a:4:{s:1:"C";s:2:"43";s:2:"WX";s:3:"570";s:1:"N";s:4:"plus";s:1:"B";a:4:{i:0;s:2:"33";i:1;s:1:"0";i:2;s:3:"537";i:3;s:3:"506";}}i:44;a:4:{s:1:"C";s:2:"44";s:2:"WX";s:3:"250";s:1:"N";s:5:"comma";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:4:"-180";i:2;s:3:"223";i:3;s:3:"155";}}s:5:"comma";a:4:{s:1:"C";s:2:"44";s:2:"WX";s:3:"250";s:1:"N";s:5:"comma";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:4:"-180";i:2;s:3:"223";i:3;s:3:"155";}}i:45;a:4:{s:1:"C";s:2:"45";s:2:"WX";s:3:"333";s:1:"N";s:6:"hyphen";s:1:"B";a:4:{i:0;s:2:"44";i:1;s:3:"171";i:2;s:3:"287";i:3;s:3:"287";}}s:6:"hyphen";a:4:{s:1:"C";s:2:"45";s:2:"WX";s:3:"333";s:1:"N";s:6:"hyphen";s:1:"B";a:4:{i:0;s:2:"44";i:1;s:3:"171";i:2;s:3:"287";i:3;s:3:"287";}}i:46;a:4:{s:1:"C";s:2:"46";s:2:"WX";s:3:"250";s:1:"N";s:6:"period";s:1:"B";a:4:{i:0;s:2:"41";i:1;s:3:"-13";i:2;s:3:"210";i:3;s:3:"156";}}s:6:"period";a:4:{s:1:"C";s:2:"46";s:2:"WX";s:3:"250";s:1:"N";s:6:"period";s:1:"B";a:4:{i:0;s:2:"41";i:1;s:3:"-13";i:2;s:3:"210";i:3;s:3:"156";}}i:47;a:4:{s:1:"C";s:2:"47";s:2:"WX";s:3:"278";s:1:"N";s:5:"slash";s:1:"B";a:4:{i:0;s:3:"-24";i:1;s:3:"-19";i:2;s:3:"302";i:3;s:3:"691";}}s:5:"slash";a:4:{s:1:"C";s:2:"47";s:2:"WX";s:3:"278";s:1:"N";s:5:"slash";s:1:"B";a:4:{i:0;s:3:"-24";i:1;s:3:"-19";i:2;s:3:"302";i:3;s:3:"691";}}i:48;a:4:{s:1:"C";s:2:"48";s:2:"WX";s:3:"500";s:1:"N";s:4:"zero";s:1:"B";a:4:{i:0;s:2:"24";i:1;s:3:"-13";i:2;s:3:"476";i:3;s:3:"688";}}s:4:"zero";a:4:{s:1:"C";s:2:"48";s:2:"WX";s:3:"500";s:1:"N";s:4:"zero";s:1:"B";a:4:{i:0;s:2:"24";i:1;s:3:"-13";i:2;s:3:"476";i:3;s:3:"688";}}i:49;a:4:{s:1:"C";s:2:"49";s:2:"WX";s:3:"500";s:1:"N";s:3:"one";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:1:"0";i:2;s:3:"442";i:3;s:3:"688";}}s:3:"one";a:4:{s:1:"C";s:2:"49";s:2:"WX";s:3:"500";s:1:"N";s:3:"one";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:1:"0";i:2;s:3:"442";i:3;s:3:"688";}}i:50;a:4:{s:1:"C";s:2:"50";s:2:"WX";s:3:"500";s:1:"N";s:3:"two";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:1:"0";i:2;s:3:"478";i:3;s:3:"688";}}s:3:"two";a:4:{s:1:"C";s:2:"50";s:2:"WX";s:3:"500";s:1:"N";s:3:"two";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:1:"0";i:2;s:3:"478";i:3;s:3:"688";}}i:51;a:4:{s:1:"C";s:2:"51";s:2:"WX";s:3:"500";s:1:"N";s:5:"three";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:3:"-14";i:2;s:3:"468";i:3;s:3:"688";}}s:5:"three";a:4:{s:1:"C";s:2:"51";s:2:"WX";s:3:"500";s:1:"N";s:5:"three";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:3:"-14";i:2;s:3:"468";i:3;s:3:"688";}}i:52;a:4:{s:1:"C";s:2:"52";s:2:"WX";s:3:"500";s:1:"N";s:4:"four";s:1:"B";a:4:{i:0;s:2:"19";i:1;s:1:"0";i:2;s:3:"475";i:3;s:3:"688";}}s:4:"four";a:4:{s:1:"C";s:2:"52";s:2:"WX";s:3:"500";s:1:"N";s:4:"four";s:1:"B";a:4:{i:0;s:2:"19";i:1;s:1:"0";i:2;s:3:"475";i:3;s:3:"688";}}i:53;a:4:{s:1:"C";s:2:"53";s:2:"WX";s:3:"500";s:1:"N";s:4:"five";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:2:"-8";i:2;s:3:"470";i:3;s:3:"676";}}s:4:"five";a:4:{s:1:"C";s:2:"53";s:2:"WX";s:3:"500";s:1:"N";s:4:"five";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:2:"-8";i:2;s:3:"470";i:3;s:3:"676";}}i:54;a:4:{s:1:"C";s:2:"54";s:2:"WX";s:3:"500";s:1:"N";s:3:"six";s:1:"B";a:4:{i:0;s:2:"28";i:1;s:3:"-13";i:2;s:3:"475";i:3;s:3:"688";}}s:3:"six";a:4:{s:1:"C";s:2:"54";s:2:"WX";s:3:"500";s:1:"N";s:3:"six";s:1:"B";a:4:{i:0;s:2:"28";i:1;s:3:"-13";i:2;s:3:"475";i:3;s:3:"688";}}i:55;a:4:{s:1:"C";s:2:"55";s:2:"WX";s:3:"500";s:1:"N";s:5:"seven";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:1:"0";i:2;s:3:"477";i:3;s:3:"676";}}s:5:"seven";a:4:{s:1:"C";s:2:"55";s:2:"WX";s:3:"500";s:1:"N";s:5:"seven";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:1:"0";i:2;s:3:"477";i:3;s:3:"676";}}i:56;a:4:{s:1:"C";s:2:"56";s:2:"WX";s:3:"500";s:1:"N";s:5:"eight";s:1:"B";a:4:{i:0;s:2:"28";i:1;s:3:"-13";i:2;s:3:"472";i:3;s:3:"688";}}s:5:"eight";a:4:{s:1:"C";s:2:"56";s:2:"WX";s:3:"500";s:1:"N";s:5:"eight";s:1:"B";a:4:{i:0;s:2:"28";i:1;s:3:"-13";i:2;s:3:"472";i:3;s:3:"688";}}i:57;a:4:{s:1:"C";s:2:"57";s:2:"WX";s:3:"500";s:1:"N";s:4:"nine";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:3:"-13";i:2;s:3:"473";i:3;s:3:"688";}}s:4:"nine";a:4:{s:1:"C";s:2:"57";s:2:"WX";s:3:"500";s:1:"N";s:4:"nine";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:3:"-13";i:2;s:3:"473";i:3;s:3:"688";}}i:58;a:4:{s:1:"C";s:2:"58";s:2:"WX";s:3:"333";s:1:"N";s:5:"colon";s:1:"B";a:4:{i:0;s:2:"82";i:1;s:3:"-13";i:2;s:3:"251";i:3;s:3:"472";}}s:5:"colon";a:4:{s:1:"C";s:2:"58";s:2:"WX";s:3:"333";s:1:"N";s:5:"colon";s:1:"B";a:4:{i:0;s:2:"82";i:1;s:3:"-13";i:2;s:3:"251";i:3;s:3:"472";}}i:59;a:4:{s:1:"C";s:2:"59";s:2:"WX";s:3:"333";s:1:"N";s:9:"semicolon";s:1:"B";a:4:{i:0;s:2:"82";i:1;s:4:"-180";i:2;s:3:"266";i:3;s:3:"472";}}s:9:"semicolon";a:4:{s:1:"C";s:2:"59";s:2:"WX";s:3:"333";s:1:"N";s:9:"semicolon";s:1:"B";a:4:{i:0;s:2:"82";i:1;s:4:"-180";i:2;s:3:"266";i:3;s:3:"472";}}i:60;a:4:{s:1:"C";s:2:"60";s:2:"WX";s:3:"570";s:1:"N";s:4:"less";s:1:"B";a:4:{i:0;s:2:"31";i:1;s:2:"-8";i:2;s:3:"539";i:3;s:3:"514";}}s:4:"less";a:4:{s:1:"C";s:2:"60";s:2:"WX";s:3:"570";s:1:"N";s:4:"less";s:1:"B";a:4:{i:0;s:2:"31";i:1;s:2:"-8";i:2;s:3:"539";i:3;s:3:"514";}}i:61;a:4:{s:1:"C";s:2:"61";s:2:"WX";s:3:"570";s:1:"N";s:5:"equal";s:1:"B";a:4:{i:0;s:2:"33";i:1;s:3:"107";i:2;s:3:"537";i:3;s:3:"399";}}s:5:"equal";a:4:{s:1:"C";s:2:"61";s:2:"WX";s:3:"570";s:1:"N";s:5:"equal";s:1:"B";a:4:{i:0;s:2:"33";i:1;s:3:"107";i:2;s:3:"537";i:3;s:3:"399";}}i:62;a:4:{s:1:"C";s:2:"62";s:2:"WX";s:3:"570";s:1:"N";s:7:"greater";s:1:"B";a:4:{i:0;s:2:"31";i:1;s:2:"-8";i:2;s:3:"539";i:3;s:3:"514";}}s:7:"greater";a:4:{s:1:"C";s:2:"62";s:2:"WX";s:3:"570";s:1:"N";s:7:"greater";s:1:"B";a:4:{i:0;s:2:"31";i:1;s:2:"-8";i:2;s:3:"539";i:3;s:3:"514";}}i:63;a:4:{s:1:"C";s:2:"63";s:2:"WX";s:3:"500";s:1:"N";s:8:"question";s:1:"B";a:4:{i:0;s:2:"57";i:1;s:3:"-13";i:2;s:3:"445";i:3;s:3:"689";}}s:8:"question";a:4:{s:1:"C";s:2:"63";s:2:"WX";s:3:"500";s:1:"N";s:8:"question";s:1:"B";a:4:{i:0;s:2:"57";i:1;s:3:"-13";i:2;s:3:"445";i:3;s:3:"689";}}i:64;a:4:{s:1:"C";s:2:"64";s:2:"WX";s:3:"930";s:1:"N";s:2:"at";s:1:"B";a:4:{i:0;s:3:"108";i:1;s:3:"-19";i:2;s:3:"822";i:3;s:3:"691";}}s:2:"at";a:4:{s:1:"C";s:2:"64";s:2:"WX";s:3:"930";s:1:"N";s:2:"at";s:1:"B";a:4:{i:0;s:3:"108";i:1;s:3:"-19";i:2;s:3:"822";i:3;s:3:"691";}}i:65;a:4:{s:1:"C";s:2:"65";s:2:"WX";s:3:"722";s:1:"N";s:1:"A";s:1:"B";a:4:{i:0;s:1:"9";i:1;s:1:"0";i:2;s:3:"689";i:3;s:3:"690";}}s:1:"A";a:4:{s:1:"C";s:2:"65";s:2:"WX";s:3:"722";s:1:"N";s:1:"A";s:1:"B";a:4:{i:0;s:1:"9";i:1;s:1:"0";i:2;s:3:"689";i:3;s:3:"690";}}i:66;a:4:{s:1:"C";s:2:"66";s:2:"WX";s:3:"667";s:1:"N";s:1:"B";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:1:"0";i:2;s:3:"619";i:3;s:3:"676";}}s:1:"B";a:4:{s:1:"C";s:2:"66";s:2:"WX";s:3:"667";s:1:"N";s:1:"B";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:1:"0";i:2;s:3:"619";i:3;s:3:"676";}}i:67;a:4:{s:1:"C";s:2:"67";s:2:"WX";s:3:"722";s:1:"N";s:1:"C";s:1:"B";a:4:{i:0;s:2:"49";i:1;s:3:"-19";i:2;s:3:"687";i:3;s:3:"691";}}s:1:"C";a:4:{s:1:"C";s:2:"67";s:2:"WX";s:3:"722";s:1:"N";s:1:"C";s:1:"B";a:4:{i:0;s:2:"49";i:1;s:3:"-19";i:2;s:3:"687";i:3;s:3:"691";}}i:68;a:4:{s:1:"C";s:2:"68";s:2:"WX";s:3:"722";s:1:"N";s:1:"D";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:1:"0";i:2;s:3:"690";i:3;s:3:"676";}}s:1:"D";a:4:{s:1:"C";s:2:"68";s:2:"WX";s:3:"722";s:1:"N";s:1:"D";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:1:"0";i:2;s:3:"690";i:3;s:3:"676";}}i:69;a:4:{s:1:"C";s:2:"69";s:2:"WX";s:3:"667";s:1:"N";s:1:"E";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:1:"0";i:2;s:3:"641";i:3;s:3:"676";}}s:1:"E";a:4:{s:1:"C";s:2:"69";s:2:"WX";s:3:"667";s:1:"N";s:1:"E";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:1:"0";i:2;s:3:"641";i:3;s:3:"676";}}i:70;a:4:{s:1:"C";s:2:"70";s:2:"WX";s:3:"611";s:1:"N";s:1:"F";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:1:"0";i:2;s:3:"583";i:3;s:3:"676";}}s:1:"F";a:4:{s:1:"C";s:2:"70";s:2:"WX";s:3:"611";s:1:"N";s:1:"F";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:1:"0";i:2;s:3:"583";i:3;s:3:"676";}}i:71;a:4:{s:1:"C";s:2:"71";s:2:"WX";s:3:"778";s:1:"N";s:1:"G";s:1:"B";a:4:{i:0;s:2:"37";i:1;s:3:"-19";i:2;s:3:"755";i:3;s:3:"691";}}s:1:"G";a:4:{s:1:"C";s:2:"71";s:2:"WX";s:3:"778";s:1:"N";s:1:"G";s:1:"B";a:4:{i:0;s:2:"37";i:1;s:3:"-19";i:2;s:3:"755";i:3;s:3:"691";}}i:72;a:4:{s:1:"C";s:2:"72";s:2:"WX";s:3:"778";s:1:"N";s:1:"H";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:1:"0";i:2;s:3:"759";i:3;s:3:"676";}}s:1:"H";a:4:{s:1:"C";s:2:"72";s:2:"WX";s:3:"778";s:1:"N";s:1:"H";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:1:"0";i:2;s:3:"759";i:3;s:3:"676";}}i:73;a:4:{s:1:"C";s:2:"73";s:2:"WX";s:3:"389";s:1:"N";s:1:"I";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:1:"0";i:2;s:3:"370";i:3;s:3:"676";}}s:1:"I";a:4:{s:1:"C";s:2:"73";s:2:"WX";s:3:"389";s:1:"N";s:1:"I";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:1:"0";i:2;s:3:"370";i:3;s:3:"676";}}i:74;a:4:{s:1:"C";s:2:"74";s:2:"WX";s:3:"500";s:1:"N";s:1:"J";s:1:"B";a:4:{i:0;s:1:"3";i:1;s:3:"-96";i:2;s:3:"479";i:3;s:3:"676";}}s:1:"J";a:4:{s:1:"C";s:2:"74";s:2:"WX";s:3:"500";s:1:"N";s:1:"J";s:1:"B";a:4:{i:0;s:1:"3";i:1;s:3:"-96";i:2;s:3:"479";i:3;s:3:"676";}}i:75;a:4:{s:1:"C";s:2:"75";s:2:"WX";s:3:"778";s:1:"N";s:1:"K";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:1:"0";i:2;s:3:"769";i:3;s:3:"676";}}s:1:"K";a:4:{s:1:"C";s:2:"75";s:2:"WX";s:3:"778";s:1:"N";s:1:"K";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:1:"0";i:2;s:3:"769";i:3;s:3:"676";}}i:76;a:4:{s:1:"C";s:2:"76";s:2:"WX";s:3:"667";s:1:"N";s:1:"L";s:1:"B";a:4:{i:0;s:2:"19";i:1;s:1:"0";i:2;s:3:"638";i:3;s:3:"676";}}s:1:"L";a:4:{s:1:"C";s:2:"76";s:2:"WX";s:3:"667";s:1:"N";s:1:"L";s:1:"B";a:4:{i:0;s:2:"19";i:1;s:1:"0";i:2;s:3:"638";i:3;s:3:"676";}}i:77;a:4:{s:1:"C";s:2:"77";s:2:"WX";s:3:"944";s:1:"N";s:1:"M";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:1:"0";i:2;s:3:"921";i:3;s:3:"676";}}s:1:"M";a:4:{s:1:"C";s:2:"77";s:2:"WX";s:3:"944";s:1:"N";s:1:"M";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:1:"0";i:2;s:3:"921";i:3;s:3:"676";}}i:78;a:4:{s:1:"C";s:2:"78";s:2:"WX";s:3:"722";s:1:"N";s:1:"N";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:3:"-18";i:2;s:3:"701";i:3;s:3:"676";}}s:1:"N";a:4:{s:1:"C";s:2:"78";s:2:"WX";s:3:"722";s:1:"N";s:1:"N";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:3:"-18";i:2;s:3:"701";i:3;s:3:"676";}}i:79;a:4:{s:1:"C";s:2:"79";s:2:"WX";s:3:"778";s:1:"N";s:1:"O";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-19";i:2;s:3:"743";i:3;s:3:"691";}}s:1:"O";a:4:{s:1:"C";s:2:"79";s:2:"WX";s:3:"778";s:1:"N";s:1:"O";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-19";i:2;s:3:"743";i:3;s:3:"691";}}i:80;a:4:{s:1:"C";s:2:"80";s:2:"WX";s:3:"611";s:1:"N";s:1:"P";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:1:"0";i:2;s:3:"600";i:3;s:3:"676";}}s:1:"P";a:4:{s:1:"C";s:2:"80";s:2:"WX";s:3:"611";s:1:"N";s:1:"P";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:1:"0";i:2;s:3:"600";i:3;s:3:"676";}}i:81;a:4:{s:1:"C";s:2:"81";s:2:"WX";s:3:"778";s:1:"N";s:1:"Q";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:4:"-176";i:2;s:3:"743";i:3;s:3:"691";}}s:1:"Q";a:4:{s:1:"C";s:2:"81";s:2:"WX";s:3:"778";s:1:"N";s:1:"Q";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:4:"-176";i:2;s:3:"743";i:3;s:3:"691";}}i:82;a:4:{s:1:"C";s:2:"82";s:2:"WX";s:3:"722";s:1:"N";s:1:"R";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:1:"0";i:2;s:3:"715";i:3;s:3:"676";}}s:1:"R";a:4:{s:1:"C";s:2:"82";s:2:"WX";s:3:"722";s:1:"N";s:1:"R";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:1:"0";i:2;s:3:"715";i:3;s:3:"676";}}i:83;a:4:{s:1:"C";s:2:"83";s:2:"WX";s:3:"556";s:1:"N";s:1:"S";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-19";i:2;s:3:"513";i:3;s:3:"692";}}s:1:"S";a:4:{s:1:"C";s:2:"83";s:2:"WX";s:3:"556";s:1:"N";s:1:"S";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-19";i:2;s:3:"513";i:3;s:3:"692";}}i:84;a:4:{s:1:"C";s:2:"84";s:2:"WX";s:3:"667";s:1:"N";s:1:"T";s:1:"B";a:4:{i:0;s:2:"31";i:1;s:1:"0";i:2;s:3:"636";i:3;s:3:"676";}}s:1:"T";a:4:{s:1:"C";s:2:"84";s:2:"WX";s:3:"667";s:1:"N";s:1:"T";s:1:"B";a:4:{i:0;s:2:"31";i:1;s:1:"0";i:2;s:3:"636";i:3;s:3:"676";}}i:85;a:4:{s:1:"C";s:2:"85";s:2:"WX";s:3:"722";s:1:"N";s:1:"U";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:3:"-19";i:2;s:3:"701";i:3;s:3:"676";}}s:1:"U";a:4:{s:1:"C";s:2:"85";s:2:"WX";s:3:"722";s:1:"N";s:1:"U";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:3:"-19";i:2;s:3:"701";i:3;s:3:"676";}}i:86;a:4:{s:1:"C";s:2:"86";s:2:"WX";s:3:"722";s:1:"N";s:1:"V";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:3:"-18";i:2;s:3:"701";i:3;s:3:"676";}}s:1:"V";a:4:{s:1:"C";s:2:"86";s:2:"WX";s:3:"722";s:1:"N";s:1:"V";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:3:"-18";i:2;s:3:"701";i:3;s:3:"676";}}i:87;a:4:{s:1:"C";s:2:"87";s:2:"WX";s:4:"1000";s:1:"N";s:1:"W";s:1:"B";a:4:{i:0;s:2:"19";i:1;s:3:"-15";i:2;s:3:"981";i:3;s:3:"676";}}s:1:"W";a:4:{s:1:"C";s:2:"87";s:2:"WX";s:4:"1000";s:1:"N";s:1:"W";s:1:"B";a:4:{i:0;s:2:"19";i:1;s:3:"-15";i:2;s:3:"981";i:3;s:3:"676";}}i:88;a:4:{s:1:"C";s:2:"88";s:2:"WX";s:3:"722";s:1:"N";s:1:"X";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:1:"0";i:2;s:3:"699";i:3;s:3:"676";}}s:1:"X";a:4:{s:1:"C";s:2:"88";s:2:"WX";s:3:"722";s:1:"N";s:1:"X";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:1:"0";i:2;s:3:"699";i:3;s:3:"676";}}i:89;a:4:{s:1:"C";s:2:"89";s:2:"WX";s:3:"722";s:1:"N";s:1:"Y";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:1:"0";i:2;s:3:"699";i:3;s:3:"676";}}s:1:"Y";a:4:{s:1:"C";s:2:"89";s:2:"WX";s:3:"722";s:1:"N";s:1:"Y";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:1:"0";i:2;s:3:"699";i:3;s:3:"676";}}i:90;a:4:{s:1:"C";s:2:"90";s:2:"WX";s:3:"667";s:1:"N";s:1:"Z";s:1:"B";a:4:{i:0;s:2:"28";i:1;s:1:"0";i:2;s:3:"634";i:3;s:3:"676";}}s:1:"Z";a:4:{s:1:"C";s:2:"90";s:2:"WX";s:3:"667";s:1:"N";s:1:"Z";s:1:"B";a:4:{i:0;s:2:"28";i:1;s:1:"0";i:2;s:3:"634";i:3;s:3:"676";}}i:91;a:4:{s:1:"C";s:2:"91";s:2:"WX";s:3:"333";s:1:"N";s:11:"bracketleft";s:1:"B";a:4:{i:0;s:2:"67";i:1;s:4:"-149";i:2;s:3:"301";i:3;s:3:"678";}}s:11:"bracketleft";a:4:{s:1:"C";s:2:"91";s:2:"WX";s:3:"333";s:1:"N";s:11:"bracketleft";s:1:"B";a:4:{i:0;s:2:"67";i:1;s:4:"-149";i:2;s:3:"301";i:3;s:3:"678";}}i:92;a:4:{s:1:"C";s:2:"92";s:2:"WX";s:3:"278";s:1:"N";s:9:"backslash";s:1:"B";a:4:{i:0;s:3:"-25";i:1;s:3:"-19";i:2;s:3:"303";i:3;s:3:"691";}}s:9:"backslash";a:4:{s:1:"C";s:2:"92";s:2:"WX";s:3:"278";s:1:"N";s:9:"backslash";s:1:"B";a:4:{i:0;s:3:"-25";i:1;s:3:"-19";i:2;s:3:"303";i:3;s:3:"691";}}i:93;a:4:{s:1:"C";s:2:"93";s:2:"WX";s:3:"333";s:1:"N";s:12:"bracketright";s:1:"B";a:4:{i:0;s:2:"32";i:1;s:4:"-149";i:2;s:3:"266";i:3;s:3:"678";}}s:12:"bracketright";a:4:{s:1:"C";s:2:"93";s:2:"WX";s:3:"333";s:1:"N";s:12:"bracketright";s:1:"B";a:4:{i:0;s:2:"32";i:1;s:4:"-149";i:2;s:3:"266";i:3;s:3:"678";}}i:94;a:4:{s:1:"C";s:2:"94";s:2:"WX";s:3:"581";s:1:"N";s:11:"asciicircum";s:1:"B";a:4:{i:0;s:2:"73";i:1;s:3:"311";i:2;s:3:"509";i:3;s:3:"676";}}s:11:"asciicircum";a:4:{s:1:"C";s:2:"94";s:2:"WX";s:3:"581";s:1:"N";s:11:"asciicircum";s:1:"B";a:4:{i:0;s:2:"73";i:1;s:3:"311";i:2;s:3:"509";i:3;s:3:"676";}}i:95;a:4:{s:1:"C";s:2:"95";s:2:"WX";s:3:"500";s:1:"N";s:10:"underscore";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:4:"-125";i:2;s:3:"500";i:3;s:3:"-75";}}s:10:"underscore";a:4:{s:1:"C";s:2:"95";s:2:"WX";s:3:"500";s:1:"N";s:10:"underscore";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:4:"-125";i:2;s:3:"500";i:3;s:3:"-75";}}i:96;a:4:{s:1:"C";s:2:"96";s:2:"WX";s:3:"333";s:1:"N";s:9:"quoteleft";s:1:"B";a:4:{i:0;s:2:"70";i:1;s:3:"356";i:2;s:3:"254";i:3;s:3:"691";}}s:9:"quoteleft";a:4:{s:1:"C";s:2:"96";s:2:"WX";s:3:"333";s:1:"N";s:9:"quoteleft";s:1:"B";a:4:{i:0;s:2:"70";i:1;s:3:"356";i:2;s:3:"254";i:3;s:3:"691";}}i:97;a:4:{s:1:"C";s:2:"97";s:2:"WX";s:3:"500";s:1:"N";s:1:"a";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-14";i:2;s:3:"488";i:3;s:3:"473";}}s:1:"a";a:4:{s:1:"C";s:2:"97";s:2:"WX";s:3:"500";s:1:"N";s:1:"a";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-14";i:2;s:3:"488";i:3;s:3:"473";}}i:98;a:4:{s:1:"C";s:2:"98";s:2:"WX";s:3:"556";s:1:"N";s:1:"b";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:3:"-14";i:2;s:3:"521";i:3;s:3:"676";}}s:1:"b";a:4:{s:1:"C";s:2:"98";s:2:"WX";s:3:"556";s:1:"N";s:1:"b";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:3:"-14";i:2;s:3:"521";i:3;s:3:"676";}}i:99;a:4:{s:1:"C";s:2:"99";s:2:"WX";s:3:"444";s:1:"N";s:1:"c";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-14";i:2;s:3:"430";i:3;s:3:"473";}}s:1:"c";a:4:{s:1:"C";s:2:"99";s:2:"WX";s:3:"444";s:1:"N";s:1:"c";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-14";i:2;s:3:"430";i:3;s:3:"473";}}i:100;a:4:{s:1:"C";s:3:"100";s:2:"WX";s:3:"556";s:1:"N";s:1:"d";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-14";i:2;s:3:"534";i:3;s:3:"676";}}s:1:"d";a:4:{s:1:"C";s:3:"100";s:2:"WX";s:3:"556";s:1:"N";s:1:"d";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-14";i:2;s:3:"534";i:3;s:3:"676";}}i:101;a:4:{s:1:"C";s:3:"101";s:2:"WX";s:3:"444";s:1:"N";s:1:"e";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-14";i:2;s:3:"426";i:3;s:3:"473";}}s:1:"e";a:4:{s:1:"C";s:3:"101";s:2:"WX";s:3:"444";s:1:"N";s:1:"e";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-14";i:2;s:3:"426";i:3;s:3:"473";}}i:102;a:5:{s:1:"C";s:3:"102";s:2:"WX";s:3:"333";s:1:"N";s:1:"f";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:1:"0";i:2;s:3:"389";i:3;s:3:"691";}s:1:"L";a:2:{i:0;s:1:"l";i:1;s:2:"fl";}}s:1:"f";a:5:{s:1:"C";s:3:"102";s:2:"WX";s:3:"333";s:1:"N";s:1:"f";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:1:"0";i:2;s:3:"389";i:3;s:3:"691";}s:1:"L";a:2:{i:0;s:1:"l";i:1;s:2:"fl";}}i:103;a:4:{s:1:"C";s:3:"103";s:2:"WX";s:3:"500";s:1:"N";s:1:"g";s:1:"B";a:4:{i:0;s:2:"28";i:1;s:4:"-206";i:2;s:3:"483";i:3;s:3:"473";}}s:1:"g";a:4:{s:1:"C";s:3:"103";s:2:"WX";s:3:"500";s:1:"N";s:1:"g";s:1:"B";a:4:{i:0;s:2:"28";i:1;s:4:"-206";i:2;s:3:"483";i:3;s:3:"473";}}i:104;a:4:{s:1:"C";s:3:"104";s:2:"WX";s:3:"556";s:1:"N";s:1:"h";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:1:"0";i:2;s:3:"534";i:3;s:3:"676";}}s:1:"h";a:4:{s:1:"C";s:3:"104";s:2:"WX";s:3:"556";s:1:"N";s:1:"h";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:1:"0";i:2;s:3:"534";i:3;s:3:"676";}}i:105;a:4:{s:1:"C";s:3:"105";s:2:"WX";s:3:"278";s:1:"N";s:1:"i";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:1:"0";i:2;s:3:"255";i:3;s:3:"691";}}s:1:"i";a:4:{s:1:"C";s:3:"105";s:2:"WX";s:3:"278";s:1:"N";s:1:"i";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:1:"0";i:2;s:3:"255";i:3;s:3:"691";}}i:106;a:4:{s:1:"C";s:3:"106";s:2:"WX";s:3:"333";s:1:"N";s:1:"j";s:1:"B";a:4:{i:0;s:3:"-57";i:1;s:4:"-203";i:2;s:3:"263";i:3;s:3:"691";}}s:1:"j";a:4:{s:1:"C";s:3:"106";s:2:"WX";s:3:"333";s:1:"N";s:1:"j";s:1:"B";a:4:{i:0;s:3:"-57";i:1;s:4:"-203";i:2;s:3:"263";i:3;s:3:"691";}}i:107;a:4:{s:1:"C";s:3:"107";s:2:"WX";s:3:"556";s:1:"N";s:1:"k";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:1:"0";i:2;s:3:"543";i:3;s:3:"676";}}s:1:"k";a:4:{s:1:"C";s:3:"107";s:2:"WX";s:3:"556";s:1:"N";s:1:"k";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:1:"0";i:2;s:3:"543";i:3;s:3:"676";}}i:108;a:4:{s:1:"C";s:3:"108";s:2:"WX";s:3:"278";s:1:"N";s:1:"l";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:1:"0";i:2;s:3:"255";i:3;s:3:"676";}}s:1:"l";a:4:{s:1:"C";s:3:"108";s:2:"WX";s:3:"278";s:1:"N";s:1:"l";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:1:"0";i:2;s:3:"255";i:3;s:3:"676";}}i:109;a:4:{s:1:"C";s:3:"109";s:2:"WX";s:3:"833";s:1:"N";s:1:"m";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:1:"0";i:2;s:3:"814";i:3;s:3:"473";}}s:1:"m";a:4:{s:1:"C";s:3:"109";s:2:"WX";s:3:"833";s:1:"N";s:1:"m";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:1:"0";i:2;s:3:"814";i:3;s:3:"473";}}i:110;a:4:{s:1:"C";s:3:"110";s:2:"WX";s:3:"556";s:1:"N";s:1:"n";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:1:"0";i:2;s:3:"539";i:3;s:3:"473";}}s:1:"n";a:4:{s:1:"C";s:3:"110";s:2:"WX";s:3:"556";s:1:"N";s:1:"n";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:1:"0";i:2;s:3:"539";i:3;s:3:"473";}}i:111;a:4:{s:1:"C";s:3:"111";s:2:"WX";s:3:"500";s:1:"N";s:1:"o";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-14";i:2;s:3:"476";i:3;s:3:"473";}}s:1:"o";a:4:{s:1:"C";s:3:"111";s:2:"WX";s:3:"500";s:1:"N";s:1:"o";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-14";i:2;s:3:"476";i:3;s:3:"473";}}i:112;a:4:{s:1:"C";s:3:"112";s:2:"WX";s:3:"556";s:1:"N";s:1:"p";s:1:"B";a:4:{i:0;s:2:"19";i:1;s:4:"-205";i:2;s:3:"524";i:3;s:3:"473";}}s:1:"p";a:4:{s:1:"C";s:3:"112";s:2:"WX";s:3:"556";s:1:"N";s:1:"p";s:1:"B";a:4:{i:0;s:2:"19";i:1;s:4:"-205";i:2;s:3:"524";i:3;s:3:"473";}}i:113;a:4:{s:1:"C";s:3:"113";s:2:"WX";s:3:"556";s:1:"N";s:1:"q";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:4:"-205";i:2;s:3:"536";i:3;s:3:"473";}}s:1:"q";a:4:{s:1:"C";s:3:"113";s:2:"WX";s:3:"556";s:1:"N";s:1:"q";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:4:"-205";i:2;s:3:"536";i:3;s:3:"473";}}i:114;a:4:{s:1:"C";s:3:"114";s:2:"WX";s:3:"444";s:1:"N";s:1:"r";s:1:"B";a:4:{i:0;s:2:"29";i:1;s:1:"0";i:2;s:3:"434";i:3;s:3:"473";}}s:1:"r";a:4:{s:1:"C";s:3:"114";s:2:"WX";s:3:"444";s:1:"N";s:1:"r";s:1:"B";a:4:{i:0;s:2:"29";i:1;s:1:"0";i:2;s:3:"434";i:3;s:3:"473";}}i:115;a:4:{s:1:"C";s:3:"115";s:2:"WX";s:3:"389";s:1:"N";s:1:"s";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-14";i:2;s:3:"361";i:3;s:3:"473";}}s:1:"s";a:4:{s:1:"C";s:3:"115";s:2:"WX";s:3:"389";s:1:"N";s:1:"s";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-14";i:2;s:3:"361";i:3;s:3:"473";}}i:116;a:4:{s:1:"C";s:3:"116";s:2:"WX";s:3:"333";s:1:"N";s:1:"t";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:3:"-12";i:2;s:3:"332";i:3;s:3:"630";}}s:1:"t";a:4:{s:1:"C";s:3:"116";s:2:"WX";s:3:"333";s:1:"N";s:1:"t";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:3:"-12";i:2;s:3:"332";i:3;s:3:"630";}}i:117;a:4:{s:1:"C";s:3:"117";s:2:"WX";s:3:"556";s:1:"N";s:1:"u";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:3:"-14";i:2;s:3:"537";i:3;s:3:"461";}}s:1:"u";a:4:{s:1:"C";s:3:"117";s:2:"WX";s:3:"556";s:1:"N";s:1:"u";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:3:"-14";i:2;s:3:"537";i:3;s:3:"461";}}i:118;a:4:{s:1:"C";s:3:"118";s:2:"WX";s:3:"500";s:1:"N";s:1:"v";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:3:"-14";i:2;s:3:"485";i:3;s:3:"461";}}s:1:"v";a:4:{s:1:"C";s:3:"118";s:2:"WX";s:3:"500";s:1:"N";s:1:"v";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:3:"-14";i:2;s:3:"485";i:3;s:3:"461";}}i:119;a:4:{s:1:"C";s:3:"119";s:2:"WX";s:3:"722";s:1:"N";s:1:"w";s:1:"B";a:4:{i:0;s:2:"23";i:1;s:3:"-14";i:2;s:3:"707";i:3;s:3:"461";}}s:1:"w";a:4:{s:1:"C";s:3:"119";s:2:"WX";s:3:"722";s:1:"N";s:1:"w";s:1:"B";a:4:{i:0;s:2:"23";i:1;s:3:"-14";i:2;s:3:"707";i:3;s:3:"461";}}i:120;a:4:{s:1:"C";s:3:"120";s:2:"WX";s:3:"500";s:1:"N";s:1:"x";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:1:"0";i:2;s:3:"484";i:3;s:3:"461";}}s:1:"x";a:4:{s:1:"C";s:3:"120";s:2:"WX";s:3:"500";s:1:"N";s:1:"x";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:1:"0";i:2;s:3:"484";i:3;s:3:"461";}}i:121;a:4:{s:1:"C";s:3:"121";s:2:"WX";s:3:"500";s:1:"N";s:1:"y";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:4:"-205";i:2;s:3:"480";i:3;s:3:"461";}}s:1:"y";a:4:{s:1:"C";s:3:"121";s:2:"WX";s:3:"500";s:1:"N";s:1:"y";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:4:"-205";i:2;s:3:"480";i:3;s:3:"461";}}i:122;a:4:{s:1:"C";s:3:"122";s:2:"WX";s:3:"444";s:1:"N";s:1:"z";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:1:"0";i:2;s:3:"420";i:3;s:3:"461";}}s:1:"z";a:4:{s:1:"C";s:3:"122";s:2:"WX";s:3:"444";s:1:"N";s:1:"z";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:1:"0";i:2;s:3:"420";i:3;s:3:"461";}}i:123;a:4:{s:1:"C";s:3:"123";s:2:"WX";s:3:"394";s:1:"N";s:9:"braceleft";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:4:"-175";i:2;s:3:"340";i:3;s:3:"698";}}s:9:"braceleft";a:4:{s:1:"C";s:3:"123";s:2:"WX";s:3:"394";s:1:"N";s:9:"braceleft";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:4:"-175";i:2;s:3:"340";i:3;s:3:"698";}}i:124;a:4:{s:1:"C";s:3:"124";s:2:"WX";s:3:"220";s:1:"N";s:3:"bar";s:1:"B";a:4:{i:0;s:2:"66";i:1;s:4:"-218";i:2;s:3:"154";i:3;s:3:"782";}}s:3:"bar";a:4:{s:1:"C";s:3:"124";s:2:"WX";s:3:"220";s:1:"N";s:3:"bar";s:1:"B";a:4:{i:0;s:2:"66";i:1;s:4:"-218";i:2;s:3:"154";i:3;s:3:"782";}}i:125;a:4:{s:1:"C";s:3:"125";s:2:"WX";s:3:"394";s:1:"N";s:10:"braceright";s:1:"B";a:4:{i:0;s:2:"54";i:1;s:4:"-175";i:2;s:3:"372";i:3;s:3:"698";}}s:10:"braceright";a:4:{s:1:"C";s:3:"125";s:2:"WX";s:3:"394";s:1:"N";s:10:"braceright";s:1:"B";a:4:{i:0;s:2:"54";i:1;s:4:"-175";i:2;s:3:"372";i:3;s:3:"698";}}i:126;a:4:{s:1:"C";s:3:"126";s:2:"WX";s:3:"520";s:1:"N";s:10:"asciitilde";s:1:"B";a:4:{i:0;s:2:"29";i:1;s:3:"173";i:2;s:3:"491";i:3;s:3:"333";}}s:10:"asciitilde";a:4:{s:1:"C";s:3:"126";s:2:"WX";s:3:"520";s:1:"N";s:10:"asciitilde";s:1:"B";a:4:{i:0;s:2:"29";i:1;s:3:"173";i:2;s:3:"491";i:3;s:3:"333";}}i:161;a:4:{s:1:"C";s:3:"161";s:2:"WX";s:3:"333";s:1:"N";s:10:"exclamdown";s:1:"B";a:4:{i:0;s:2:"82";i:1;s:4:"-203";i:2;s:3:"252";i:3;s:3:"501";}}s:10:"exclamdown";a:4:{s:1:"C";s:3:"161";s:2:"WX";s:3:"333";s:1:"N";s:10:"exclamdown";s:1:"B";a:4:{i:0;s:2:"82";i:1;s:4:"-203";i:2;s:3:"252";i:3;s:3:"501";}}i:162;a:4:{s:1:"C";s:3:"162";s:2:"WX";s:3:"500";s:1:"N";s:4:"cent";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:4:"-140";i:2;s:3:"458";i:3;s:3:"588";}}s:4:"cent";a:4:{s:1:"C";s:3:"162";s:2:"WX";s:3:"500";s:1:"N";s:4:"cent";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:4:"-140";i:2;s:3:"458";i:3;s:3:"588";}}i:163;a:4:{s:1:"C";s:3:"163";s:2:"WX";s:3:"500";s:1:"N";s:8:"sterling";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:3:"-14";i:2;s:3:"477";i:3;s:3:"684";}}s:8:"sterling";a:4:{s:1:"C";s:3:"163";s:2:"WX";s:3:"500";s:1:"N";s:8:"sterling";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:3:"-14";i:2;s:3:"477";i:3;s:3:"684";}}i:164;a:4:{s:1:"C";s:3:"164";s:2:"WX";s:3:"167";s:1:"N";s:8:"fraction";s:1:"B";a:4:{i:0;s:4:"-168";i:1;s:3:"-12";i:2;s:3:"329";i:3;s:3:"688";}}s:8:"fraction";a:4:{s:1:"C";s:3:"164";s:2:"WX";s:3:"167";s:1:"N";s:8:"fraction";s:1:"B";a:4:{i:0;s:4:"-168";i:1;s:3:"-12";i:2;s:3:"329";i:3;s:3:"688";}}i:165;a:4:{s:1:"C";s:3:"165";s:2:"WX";s:3:"500";s:1:"N";s:3:"yen";s:1:"B";a:4:{i:0;s:3:"-64";i:1;s:1:"0";i:2;s:3:"547";i:3;s:3:"676";}}s:3:"yen";a:4:{s:1:"C";s:3:"165";s:2:"WX";s:3:"500";s:1:"N";s:3:"yen";s:1:"B";a:4:{i:0;s:3:"-64";i:1;s:1:"0";i:2;s:3:"547";i:3;s:3:"676";}}i:166;a:4:{s:1:"C";s:3:"166";s:2:"WX";s:3:"500";s:1:"N";s:6:"florin";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:4:"-155";i:2;s:3:"498";i:3;s:3:"706";}}s:6:"florin";a:4:{s:1:"C";s:3:"166";s:2:"WX";s:3:"500";s:1:"N";s:6:"florin";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:4:"-155";i:2;s:3:"498";i:3;s:3:"706";}}i:167;a:4:{s:1:"C";s:3:"167";s:2:"WX";s:3:"500";s:1:"N";s:7:"section";s:1:"B";a:4:{i:0;s:2:"57";i:1;s:4:"-132";i:2;s:3:"443";i:3;s:3:"691";}}s:7:"section";a:4:{s:1:"C";s:3:"167";s:2:"WX";s:3:"500";s:1:"N";s:7:"section";s:1:"B";a:4:{i:0;s:2:"57";i:1;s:4:"-132";i:2;s:3:"443";i:3;s:3:"691";}}i:168;a:4:{s:1:"C";s:3:"168";s:2:"WX";s:3:"500";s:1:"N";s:8:"currency";s:1:"B";a:4:{i:0;s:3:"-26";i:1;s:2:"61";i:2;s:3:"526";i:3;s:3:"613";}}s:8:"currency";a:4:{s:1:"C";s:3:"168";s:2:"WX";s:3:"500";s:1:"N";s:8:"currency";s:1:"B";a:4:{i:0;s:3:"-26";i:1;s:2:"61";i:2;s:3:"526";i:3;s:3:"613";}}i:169;a:4:{s:1:"C";s:3:"169";s:2:"WX";s:3:"278";s:1:"N";s:11:"quotesingle";s:1:"B";a:4:{i:0;s:2:"75";i:1;s:3:"404";i:2;s:3:"204";i:3;s:3:"691";}}s:11:"quotesingle";a:4:{s:1:"C";s:3:"169";s:2:"WX";s:3:"278";s:1:"N";s:11:"quotesingle";s:1:"B";a:4:{i:0;s:2:"75";i:1;s:3:"404";i:2;s:3:"204";i:3;s:3:"691";}}i:170;a:4:{s:1:"C";s:3:"170";s:2:"WX";s:3:"500";s:1:"N";s:12:"quotedblleft";s:1:"B";a:4:{i:0;s:2:"32";i:1;s:3:"356";i:2;s:3:"486";i:3;s:3:"691";}}s:12:"quotedblleft";a:4:{s:1:"C";s:3:"170";s:2:"WX";s:3:"500";s:1:"N";s:12:"quotedblleft";s:1:"B";a:4:{i:0;s:2:"32";i:1;s:3:"356";i:2;s:3:"486";i:3;s:3:"691";}}i:171;a:4:{s:1:"C";s:3:"171";s:2:"WX";s:3:"500";s:1:"N";s:13:"guillemotleft";s:1:"B";a:4:{i:0;s:2:"23";i:1;s:2:"36";i:2;s:3:"473";i:3;s:3:"415";}}s:13:"guillemotleft";a:4:{s:1:"C";s:3:"171";s:2:"WX";s:3:"500";s:1:"N";s:13:"guillemotleft";s:1:"B";a:4:{i:0;s:2:"23";i:1;s:2:"36";i:2;s:3:"473";i:3;s:3:"415";}}i:172;a:4:{s:1:"C";s:3:"172";s:2:"WX";s:3:"333";s:1:"N";s:13:"guilsinglleft";s:1:"B";a:4:{i:0;s:2:"51";i:1;s:2:"36";i:2;s:3:"305";i:3;s:3:"415";}}s:13:"guilsinglleft";a:4:{s:1:"C";s:3:"172";s:2:"WX";s:3:"333";s:1:"N";s:13:"guilsinglleft";s:1:"B";a:4:{i:0;s:2:"51";i:1;s:2:"36";i:2;s:3:"305";i:3;s:3:"415";}}i:173;a:4:{s:1:"C";s:3:"173";s:2:"WX";s:3:"333";s:1:"N";s:14:"guilsinglright";s:1:"B";a:4:{i:0;s:2:"28";i:1;s:2:"36";i:2;s:3:"282";i:3;s:3:"415";}}s:14:"guilsinglright";a:4:{s:1:"C";s:3:"173";s:2:"WX";s:3:"333";s:1:"N";s:14:"guilsinglright";s:1:"B";a:4:{i:0;s:2:"28";i:1;s:2:"36";i:2;s:3:"282";i:3;s:3:"415";}}i:174;a:4:{s:1:"C";s:3:"174";s:2:"WX";s:3:"556";s:1:"N";s:2:"fi";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:1:"0";i:2;s:3:"536";i:3;s:3:"691";}}s:2:"fi";a:4:{s:1:"C";s:3:"174";s:2:"WX";s:3:"556";s:1:"N";s:2:"fi";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:1:"0";i:2;s:3:"536";i:3;s:3:"691";}}i:175;a:4:{s:1:"C";s:3:"175";s:2:"WX";s:3:"556";s:1:"N";s:2:"fl";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:1:"0";i:2;s:3:"536";i:3;s:3:"691";}}s:2:"fl";a:4:{s:1:"C";s:3:"175";s:2:"WX";s:3:"556";s:1:"N";s:2:"fl";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:1:"0";i:2;s:3:"536";i:3;s:3:"691";}}i:177;a:4:{s:1:"C";s:3:"177";s:2:"WX";s:3:"500";s:1:"N";s:6:"endash";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:3:"181";i:2;s:3:"500";i:3;s:3:"271";}}s:6:"endash";a:4:{s:1:"C";s:3:"177";s:2:"WX";s:3:"500";s:1:"N";s:6:"endash";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:3:"181";i:2;s:3:"500";i:3;s:3:"271";}}i:178;a:4:{s:1:"C";s:3:"178";s:2:"WX";s:3:"500";s:1:"N";s:6:"dagger";s:1:"B";a:4:{i:0;s:2:"47";i:1;s:4:"-134";i:2;s:3:"453";i:3;s:3:"691";}}s:6:"dagger";a:4:{s:1:"C";s:3:"178";s:2:"WX";s:3:"500";s:1:"N";s:6:"dagger";s:1:"B";a:4:{i:0;s:2:"47";i:1;s:4:"-134";i:2;s:3:"453";i:3;s:3:"691";}}i:179;a:4:{s:1:"C";s:3:"179";s:2:"WX";s:3:"500";s:1:"N";s:9:"daggerdbl";s:1:"B";a:4:{i:0;s:2:"45";i:1;s:4:"-132";i:2;s:3:"456";i:3;s:3:"691";}}s:9:"daggerdbl";a:4:{s:1:"C";s:3:"179";s:2:"WX";s:3:"500";s:1:"N";s:9:"daggerdbl";s:1:"B";a:4:{i:0;s:2:"45";i:1;s:4:"-132";i:2;s:3:"456";i:3;s:3:"691";}}i:180;a:4:{s:1:"C";s:3:"180";s:2:"WX";s:3:"250";s:1:"N";s:14:"periodcentered";s:1:"B";a:4:{i:0;s:2:"41";i:1;s:3:"248";i:2;s:3:"210";i:3;s:3:"417";}}s:14:"periodcentered";a:4:{s:1:"C";s:3:"180";s:2:"WX";s:3:"250";s:1:"N";s:14:"periodcentered";s:1:"B";a:4:{i:0;s:2:"41";i:1;s:3:"248";i:2;s:3:"210";i:3;s:3:"417";}}i:182;a:4:{s:1:"C";s:3:"182";s:2:"WX";s:3:"540";s:1:"N";s:9:"paragraph";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:4:"-186";i:2;s:3:"519";i:3;s:3:"676";}}s:9:"paragraph";a:4:{s:1:"C";s:3:"182";s:2:"WX";s:3:"540";s:1:"N";s:9:"paragraph";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:4:"-186";i:2;s:3:"519";i:3;s:3:"676";}}i:183;a:4:{s:1:"C";s:3:"183";s:2:"WX";s:3:"350";s:1:"N";s:6:"bullet";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"198";i:2;s:3:"315";i:3;s:3:"478";}}s:6:"bullet";a:4:{s:1:"C";s:3:"183";s:2:"WX";s:3:"350";s:1:"N";s:6:"bullet";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"198";i:2;s:3:"315";i:3;s:3:"478";}}i:184;a:4:{s:1:"C";s:3:"184";s:2:"WX";s:3:"333";s:1:"N";s:14:"quotesinglbase";s:1:"B";a:4:{i:0;s:2:"79";i:1;s:4:"-180";i:2;s:3:"263";i:3;s:3:"155";}}s:14:"quotesinglbase";a:4:{s:1:"C";s:3:"184";s:2:"WX";s:3:"333";s:1:"N";s:14:"quotesinglbase";s:1:"B";a:4:{i:0;s:2:"79";i:1;s:4:"-180";i:2;s:3:"263";i:3;s:3:"155";}}i:185;a:4:{s:1:"C";s:3:"185";s:2:"WX";s:3:"500";s:1:"N";s:12:"quotedblbase";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:4:"-180";i:2;s:3:"468";i:3;s:3:"155";}}s:12:"quotedblbase";a:4:{s:1:"C";s:3:"185";s:2:"WX";s:3:"500";s:1:"N";s:12:"quotedblbase";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:4:"-180";i:2;s:3:"468";i:3;s:3:"155";}}i:186;a:4:{s:1:"C";s:3:"186";s:2:"WX";s:3:"500";s:1:"N";s:13:"quotedblright";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:3:"356";i:2;s:3:"468";i:3;s:3:"691";}}s:13:"quotedblright";a:4:{s:1:"C";s:3:"186";s:2:"WX";s:3:"500";s:1:"N";s:13:"quotedblright";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:3:"356";i:2;s:3:"468";i:3;s:3:"691";}}i:187;a:4:{s:1:"C";s:3:"187";s:2:"WX";s:3:"500";s:1:"N";s:14:"guillemotright";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:2:"36";i:2;s:3:"477";i:3;s:3:"415";}}s:14:"guillemotright";a:4:{s:1:"C";s:3:"187";s:2:"WX";s:3:"500";s:1:"N";s:14:"guillemotright";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:2:"36";i:2;s:3:"477";i:3;s:3:"415";}}i:188;a:4:{s:1:"C";s:3:"188";s:2:"WX";s:4:"1000";s:1:"N";s:8:"ellipsis";s:1:"B";a:4:{i:0;s:2:"82";i:1;s:3:"-13";i:2;s:3:"917";i:3;s:3:"156";}}s:8:"ellipsis";a:4:{s:1:"C";s:3:"188";s:2:"WX";s:4:"1000";s:1:"N";s:8:"ellipsis";s:1:"B";a:4:{i:0;s:2:"82";i:1;s:3:"-13";i:2;s:3:"917";i:3;s:3:"156";}}i:189;a:4:{s:1:"C";s:3:"189";s:2:"WX";s:4:"1000";s:1:"N";s:11:"perthousand";s:1:"B";a:4:{i:0;s:1:"7";i:1;s:3:"-29";i:2;s:3:"995";i:3;s:3:"706";}}s:11:"perthousand";a:4:{s:1:"C";s:3:"189";s:2:"WX";s:4:"1000";s:1:"N";s:11:"perthousand";s:1:"B";a:4:{i:0;s:1:"7";i:1;s:3:"-29";i:2;s:3:"995";i:3;s:3:"706";}}i:191;a:4:{s:1:"C";s:3:"191";s:2:"WX";s:3:"500";s:1:"N";s:12:"questiondown";s:1:"B";a:4:{i:0;s:2:"55";i:1;s:4:"-201";i:2;s:3:"443";i:3;s:3:"501";}}s:12:"questiondown";a:4:{s:1:"C";s:3:"191";s:2:"WX";s:3:"500";s:1:"N";s:12:"questiondown";s:1:"B";a:4:{i:0;s:2:"55";i:1;s:4:"-201";i:2;s:3:"443";i:3;s:3:"501";}}i:193;a:4:{s:1:"C";s:3:"193";s:2:"WX";s:3:"333";s:1:"N";s:5:"grave";s:1:"B";a:4:{i:0;s:1:"8";i:1;s:3:"528";i:2;s:3:"246";i:3;s:3:"713";}}s:5:"grave";a:4:{s:1:"C";s:3:"193";s:2:"WX";s:3:"333";s:1:"N";s:5:"grave";s:1:"B";a:4:{i:0;s:1:"8";i:1;s:3:"528";i:2;s:3:"246";i:3;s:3:"713";}}i:194;a:4:{s:1:"C";s:3:"194";s:2:"WX";s:3:"333";s:1:"N";s:5:"acute";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:3:"528";i:2;s:3:"324";i:3;s:3:"713";}}s:5:"acute";a:4:{s:1:"C";s:3:"194";s:2:"WX";s:3:"333";s:1:"N";s:5:"acute";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:3:"528";i:2;s:3:"324";i:3;s:3:"713";}}i:195;a:4:{s:1:"C";s:3:"195";s:2:"WX";s:3:"333";s:1:"N";s:10:"circumflex";s:1:"B";a:4:{i:0;s:2:"-2";i:1;s:3:"528";i:2;s:3:"335";i:3;s:3:"704";}}s:10:"circumflex";a:4:{s:1:"C";s:3:"195";s:2:"WX";s:3:"333";s:1:"N";s:10:"circumflex";s:1:"B";a:4:{i:0;s:2:"-2";i:1;s:3:"528";i:2;s:3:"335";i:3;s:3:"704";}}i:196;a:4:{s:1:"C";s:3:"196";s:2:"WX";s:3:"333";s:1:"N";s:5:"tilde";s:1:"B";a:4:{i:0;s:3:"-16";i:1;s:3:"547";i:2;s:3:"349";i:3;s:3:"674";}}s:5:"tilde";a:4:{s:1:"C";s:3:"196";s:2:"WX";s:3:"333";s:1:"N";s:5:"tilde";s:1:"B";a:4:{i:0;s:3:"-16";i:1;s:3:"547";i:2;s:3:"349";i:3;s:3:"674";}}i:197;a:4:{s:1:"C";s:3:"197";s:2:"WX";s:3:"333";s:1:"N";s:6:"macron";s:1:"B";a:4:{i:0;s:1:"1";i:1;s:3:"565";i:2;s:3:"331";i:3;s:3:"637";}}s:6:"macron";a:4:{s:1:"C";s:3:"197";s:2:"WX";s:3:"333";s:1:"N";s:6:"macron";s:1:"B";a:4:{i:0;s:1:"1";i:1;s:3:"565";i:2;s:3:"331";i:3;s:3:"637";}}i:198;a:4:{s:1:"C";s:3:"198";s:2:"WX";s:3:"333";s:1:"N";s:5:"breve";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:3:"528";i:2;s:3:"318";i:3;s:3:"691";}}s:5:"breve";a:4:{s:1:"C";s:3:"198";s:2:"WX";s:3:"333";s:1:"N";s:5:"breve";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:3:"528";i:2;s:3:"318";i:3;s:3:"691";}}i:199;a:4:{s:1:"C";s:3:"199";s:2:"WX";s:3:"333";s:1:"N";s:9:"dotaccent";s:1:"B";a:4:{i:0;s:3:"103";i:1;s:3:"536";i:2;s:3:"258";i:3;s:3:"691";}}s:9:"dotaccent";a:4:{s:1:"C";s:3:"199";s:2:"WX";s:3:"333";s:1:"N";s:9:"dotaccent";s:1:"B";a:4:{i:0;s:3:"103";i:1;s:3:"536";i:2;s:3:"258";i:3;s:3:"691";}}i:200;a:4:{s:1:"C";s:3:"200";s:2:"WX";s:3:"333";s:1:"N";s:8:"dieresis";s:1:"B";a:4:{i:0;s:2:"-2";i:1;s:3:"537";i:2;s:3:"335";i:3;s:3:"667";}}s:8:"dieresis";a:4:{s:1:"C";s:3:"200";s:2:"WX";s:3:"333";s:1:"N";s:8:"dieresis";s:1:"B";a:4:{i:0;s:2:"-2";i:1;s:3:"537";i:2;s:3:"335";i:3;s:3:"667";}}i:202;a:4:{s:1:"C";s:3:"202";s:2:"WX";s:3:"333";s:1:"N";s:4:"ring";s:1:"B";a:4:{i:0;s:2:"60";i:1;s:3:"527";i:2;s:3:"273";i:3;s:3:"740";}}s:4:"ring";a:4:{s:1:"C";s:3:"202";s:2:"WX";s:3:"333";s:1:"N";s:4:"ring";s:1:"B";a:4:{i:0;s:2:"60";i:1;s:3:"527";i:2;s:3:"273";i:3;s:3:"740";}}i:203;a:4:{s:1:"C";s:3:"203";s:2:"WX";s:3:"333";s:1:"N";s:7:"cedilla";s:1:"B";a:4:{i:0;s:2:"68";i:1;s:4:"-218";i:2;s:3:"294";i:3;s:1:"0";}}s:7:"cedilla";a:4:{s:1:"C";s:3:"203";s:2:"WX";s:3:"333";s:1:"N";s:7:"cedilla";s:1:"B";a:4:{i:0;s:2:"68";i:1;s:4:"-218";i:2;s:3:"294";i:3;s:1:"0";}}i:205;a:4:{s:1:"C";s:3:"205";s:2:"WX";s:3:"333";s:1:"N";s:12:"hungarumlaut";s:1:"B";a:4:{i:0;s:3:"-13";i:1;s:3:"528";i:2;s:3:"425";i:3;s:3:"713";}}s:12:"hungarumlaut";a:4:{s:1:"C";s:3:"205";s:2:"WX";s:3:"333";s:1:"N";s:12:"hungarumlaut";s:1:"B";a:4:{i:0;s:3:"-13";i:1;s:3:"528";i:2;s:3:"425";i:3;s:3:"713";}}i:206;a:4:{s:1:"C";s:3:"206";s:2:"WX";s:3:"333";s:1:"N";s:6:"ogonek";s:1:"B";a:4:{i:0;s:2:"90";i:1;s:4:"-193";i:2;s:3:"319";i:3;s:2:"24";}}s:6:"ogonek";a:4:{s:1:"C";s:3:"206";s:2:"WX";s:3:"333";s:1:"N";s:6:"ogonek";s:1:"B";a:4:{i:0;s:2:"90";i:1;s:4:"-193";i:2;s:3:"319";i:3;s:2:"24";}}i:207;a:4:{s:1:"C";s:3:"207";s:2:"WX";s:3:"333";s:1:"N";s:5:"caron";s:1:"B";a:4:{i:0;s:2:"-2";i:1;s:3:"528";i:2;s:3:"335";i:3;s:3:"704";}}s:5:"caron";a:4:{s:1:"C";s:3:"207";s:2:"WX";s:3:"333";s:1:"N";s:5:"caron";s:1:"B";a:4:{i:0;s:2:"-2";i:1;s:3:"528";i:2;s:3:"335";i:3;s:3:"704";}}i:208;a:4:{s:1:"C";s:3:"208";s:2:"WX";s:4:"1000";s:1:"N";s:6:"emdash";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:3:"181";i:2;s:4:"1000";i:3;s:3:"271";}}s:6:"emdash";a:4:{s:1:"C";s:3:"208";s:2:"WX";s:4:"1000";s:1:"N";s:6:"emdash";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:3:"181";i:2;s:4:"1000";i:3;s:3:"271";}}i:225;a:4:{s:1:"C";s:3:"225";s:2:"WX";s:4:"1000";s:1:"N";s:2:"AE";s:1:"B";a:4:{i:0;s:1:"4";i:1;s:1:"0";i:2;s:3:"951";i:3;s:3:"676";}}s:2:"AE";a:4:{s:1:"C";s:3:"225";s:2:"WX";s:4:"1000";s:1:"N";s:2:"AE";s:1:"B";a:4:{i:0;s:1:"4";i:1;s:1:"0";i:2;s:3:"951";i:3;s:3:"676";}}i:227;a:4:{s:1:"C";s:3:"227";s:2:"WX";s:3:"300";s:1:"N";s:11:"ordfeminine";s:1:"B";a:4:{i:0;s:2:"-1";i:1;s:3:"397";i:2;s:3:"301";i:3;s:3:"688";}}s:11:"ordfeminine";a:4:{s:1:"C";s:3:"227";s:2:"WX";s:3:"300";s:1:"N";s:11:"ordfeminine";s:1:"B";a:4:{i:0;s:2:"-1";i:1;s:3:"397";i:2;s:3:"301";i:3;s:3:"688";}}i:232;a:4:{s:1:"C";s:3:"232";s:2:"WX";s:3:"667";s:1:"N";s:6:"Lslash";s:1:"B";a:4:{i:0;s:2:"19";i:1;s:1:"0";i:2;s:3:"638";i:3;s:3:"676";}}s:6:"Lslash";a:4:{s:1:"C";s:3:"232";s:2:"WX";s:3:"667";s:1:"N";s:6:"Lslash";s:1:"B";a:4:{i:0;s:2:"19";i:1;s:1:"0";i:2;s:3:"638";i:3;s:3:"676";}}i:233;a:4:{s:1:"C";s:3:"233";s:2:"WX";s:3:"778";s:1:"N";s:6:"Oslash";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-74";i:2;s:3:"743";i:3;s:3:"737";}}s:6:"Oslash";a:4:{s:1:"C";s:3:"233";s:2:"WX";s:3:"778";s:1:"N";s:6:"Oslash";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-74";i:2;s:3:"743";i:3;s:3:"737";}}i:234;a:4:{s:1:"C";s:3:"234";s:2:"WX";s:4:"1000";s:1:"N";s:2:"OE";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:2:"-5";i:2;s:3:"981";i:3;s:3:"684";}}s:2:"OE";a:4:{s:1:"C";s:3:"234";s:2:"WX";s:4:"1000";s:1:"N";s:2:"OE";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:2:"-5";i:2;s:3:"981";i:3;s:3:"684";}}i:235;a:4:{s:1:"C";s:3:"235";s:2:"WX";s:3:"330";s:1:"N";s:12:"ordmasculine";s:1:"B";a:4:{i:0;s:2:"18";i:1;s:3:"397";i:2;s:3:"312";i:3;s:3:"688";}}s:12:"ordmasculine";a:4:{s:1:"C";s:3:"235";s:2:"WX";s:3:"330";s:1:"N";s:12:"ordmasculine";s:1:"B";a:4:{i:0;s:2:"18";i:1;s:3:"397";i:2;s:3:"312";i:3;s:3:"688";}}i:241;a:4:{s:1:"C";s:3:"241";s:2:"WX";s:3:"722";s:1:"N";s:2:"ae";s:1:"B";a:4:{i:0;s:2:"33";i:1;s:3:"-14";i:2;s:3:"693";i:3;s:3:"473";}}s:2:"ae";a:4:{s:1:"C";s:3:"241";s:2:"WX";s:3:"722";s:1:"N";s:2:"ae";s:1:"B";a:4:{i:0;s:2:"33";i:1;s:3:"-14";i:2;s:3:"693";i:3;s:3:"473";}}i:245;a:4:{s:1:"C";s:3:"245";s:2:"WX";s:3:"278";s:1:"N";s:8:"dotlessi";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:1:"0";i:2;s:3:"255";i:3;s:3:"461";}}s:8:"dotlessi";a:4:{s:1:"C";s:3:"245";s:2:"WX";s:3:"278";s:1:"N";s:8:"dotlessi";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:1:"0";i:2;s:3:"255";i:3;s:3:"461";}}i:248;a:4:{s:1:"C";s:3:"248";s:2:"WX";s:3:"278";s:1:"N";s:6:"lslash";s:1:"B";a:4:{i:0;s:3:"-22";i:1;s:1:"0";i:2;s:3:"303";i:3;s:3:"676";}}s:6:"lslash";a:4:{s:1:"C";s:3:"248";s:2:"WX";s:3:"278";s:1:"N";s:6:"lslash";s:1:"B";a:4:{i:0;s:3:"-22";i:1;s:1:"0";i:2;s:3:"303";i:3;s:3:"676";}}i:249;a:4:{s:1:"C";s:3:"249";s:2:"WX";s:3:"500";s:1:"N";s:6:"oslash";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-92";i:2;s:3:"476";i:3;s:3:"549";}}s:6:"oslash";a:4:{s:1:"C";s:3:"249";s:2:"WX";s:3:"500";s:1:"N";s:6:"oslash";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-92";i:2;s:3:"476";i:3;s:3:"549";}}i:250;a:4:{s:1:"C";s:3:"250";s:2:"WX";s:3:"722";s:1:"N";s:2:"oe";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:3:"-14";i:2;s:3:"696";i:3;s:3:"473";}}s:2:"oe";a:4:{s:1:"C";s:3:"250";s:2:"WX";s:3:"722";s:1:"N";s:2:"oe";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:3:"-14";i:2;s:3:"696";i:3;s:3:"473";}}i:251;a:4:{s:1:"C";s:3:"251";s:2:"WX";s:3:"556";s:1:"N";s:10:"germandbls";s:1:"B";a:4:{i:0;s:2:"19";i:1;s:3:"-12";i:2;s:3:"517";i:3;s:3:"691";}}s:10:"germandbls";a:4:{s:1:"C";s:3:"251";s:2:"WX";s:3:"556";s:1:"N";s:10:"germandbls";s:1:"B";a:4:{i:0;s:2:"19";i:1;s:3:"-12";i:2;s:3:"517";i:3;s:3:"691";}}s:9:"Idieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"389";s:1:"N";s:9:"Idieresis";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:1:"0";i:2;s:3:"370";i:3;s:3:"877";}}s:6:"eacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:6:"eacute";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-14";i:2;s:3:"426";i:3;s:3:"713";}}s:6:"abreve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"abreve";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-14";i:2;s:3:"488";i:3;s:3:"691";}}s:13:"uhungarumlaut";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:13:"uhungarumlaut";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:3:"-14";i:2;s:3:"557";i:3;s:3:"713";}}s:6:"ecaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:6:"ecaron";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-14";i:2;s:3:"426";i:3;s:3:"704";}}s:9:"Ydieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:9:"Ydieresis";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:1:"0";i:2;s:3:"699";i:3;s:3:"877";}}s:6:"divide";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"570";s:1:"N";s:6:"divide";s:1:"B";a:4:{i:0;s:2:"33";i:1;s:3:"-31";i:2;s:3:"537";i:3;s:3:"537";}}s:6:"Yacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Yacute";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:1:"0";i:2;s:3:"699";i:3;s:3:"923";}}s:11:"Acircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:11:"Acircumflex";s:1:"B";a:4:{i:0;s:1:"9";i:1;s:1:"0";i:2;s:3:"689";i:3;s:3:"914";}}s:6:"aacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"aacute";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-14";i:2;s:3:"488";i:3;s:3:"713";}}s:11:"Ucircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:11:"Ucircumflex";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:3:"-19";i:2;s:3:"701";i:3;s:3:"914";}}s:6:"yacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"yacute";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:4:"-205";i:2;s:3:"480";i:3;s:3:"713";}}s:12:"scommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"389";s:1:"N";s:12:"scommaaccent";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:4:"-218";i:2;s:3:"361";i:3;s:3:"473";}}s:11:"ecircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:11:"ecircumflex";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-14";i:2;s:3:"426";i:3;s:3:"704";}}s:5:"Uring";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:5:"Uring";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:3:"-19";i:2;s:3:"701";i:3;s:3:"935";}}s:9:"Udieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:9:"Udieresis";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:3:"-19";i:2;s:3:"701";i:3;s:3:"877";}}s:7:"aogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:7:"aogonek";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:4:"-193";i:2;s:3:"504";i:3;s:3:"473";}}s:6:"Uacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Uacute";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:3:"-19";i:2;s:3:"701";i:3;s:3:"923";}}s:7:"uogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:7:"uogonek";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:4:"-193";i:2;s:3:"539";i:3;s:3:"461";}}s:9:"Edieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:9:"Edieresis";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:1:"0";i:2;s:3:"641";i:3;s:3:"877";}}s:6:"Dcroat";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Dcroat";s:1:"B";a:4:{i:0;s:1:"6";i:1;s:1:"0";i:2;s:3:"690";i:3;s:3:"676";}}s:11:"commaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"250";s:1:"N";s:11:"commaaccent";s:1:"B";a:4:{i:0;s:2:"47";i:1;s:4:"-218";i:2;s:3:"203";i:3;s:3:"-50";}}s:9:"copyright";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"747";s:1:"N";s:9:"copyright";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:3:"-19";i:2;s:3:"721";i:3;s:3:"691";}}s:7:"Emacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:7:"Emacron";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:1:"0";i:2;s:3:"641";i:3;s:3:"847";}}s:6:"ccaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:6:"ccaron";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-14";i:2;s:3:"430";i:3;s:3:"704";}}s:5:"aring";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:5:"aring";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-14";i:2;s:3:"488";i:3;s:3:"740";}}s:12:"Ncommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:12:"Ncommaaccent";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:4:"-188";i:2;s:3:"701";i:3;s:3:"676";}}s:6:"lacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:6:"lacute";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:1:"0";i:2;s:3:"297";i:3;s:3:"923";}}s:6:"agrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"agrave";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-14";i:2;s:3:"488";i:3;s:3:"713";}}s:12:"Tcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:12:"Tcommaaccent";s:1:"B";a:4:{i:0;s:2:"31";i:1;s:4:"-218";i:2;s:3:"636";i:3;s:3:"676";}}s:6:"Cacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Cacute";s:1:"B";a:4:{i:0;s:2:"49";i:1;s:3:"-19";i:2;s:3:"687";i:3;s:3:"923";}}s:6:"atilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"atilde";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-14";i:2;s:3:"488";i:3;s:3:"674";}}s:10:"Edotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:10:"Edotaccent";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:1:"0";i:2;s:3:"641";i:3;s:3:"901";}}s:6:"scaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"389";s:1:"N";s:6:"scaron";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-14";i:2;s:3:"363";i:3;s:3:"704";}}s:8:"scedilla";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"389";s:1:"N";s:8:"scedilla";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:4:"-218";i:2;s:3:"361";i:3;s:3:"473";}}s:6:"iacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:6:"iacute";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:1:"0";i:2;s:3:"289";i:3;s:3:"713";}}s:7:"lozenge";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"494";s:1:"N";s:7:"lozenge";s:1:"B";a:4:{i:0;s:2:"10";i:1;s:1:"0";i:2;s:3:"484";i:3;s:3:"745";}}s:6:"Rcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Rcaron";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:1:"0";i:2;s:3:"715";i:3;s:3:"914";}}s:12:"Gcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"778";s:1:"N";s:12:"Gcommaaccent";s:1:"B";a:4:{i:0;s:2:"37";i:1;s:4:"-218";i:2;s:3:"755";i:3;s:3:"691";}}s:11:"ucircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:11:"ucircumflex";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:3:"-14";i:2;s:3:"537";i:3;s:3:"704";}}s:11:"acircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:11:"acircumflex";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-14";i:2;s:3:"488";i:3;s:3:"704";}}s:7:"Amacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:7:"Amacron";s:1:"B";a:4:{i:0;s:1:"9";i:1;s:1:"0";i:2;s:3:"689";i:3;s:3:"847";}}s:6:"rcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:6:"rcaron";s:1:"B";a:4:{i:0;s:2:"29";i:1;s:1:"0";i:2;s:3:"434";i:3;s:3:"704";}}s:8:"ccedilla";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:8:"ccedilla";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:4:"-218";i:2;s:3:"430";i:3;s:3:"473";}}s:10:"Zdotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:10:"Zdotaccent";s:1:"B";a:4:{i:0;s:2:"28";i:1;s:1:"0";i:2;s:3:"634";i:3;s:3:"901";}}s:5:"Thorn";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:5:"Thorn";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:1:"0";i:2;s:3:"600";i:3;s:3:"676";}}s:7:"Omacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"778";s:1:"N";s:7:"Omacron";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-19";i:2;s:3:"743";i:3;s:3:"847";}}s:6:"Racute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Racute";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:1:"0";i:2;s:3:"715";i:3;s:3:"923";}}s:6:"Sacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"Sacute";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-19";i:2;s:3:"513";i:3;s:3:"923";}}s:6:"dcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"672";s:1:"N";s:6:"dcaron";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-14";i:2;s:3:"681";i:3;s:3:"682";}}s:7:"Umacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:7:"Umacron";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:3:"-19";i:2;s:3:"701";i:3;s:3:"847";}}s:5:"uring";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:5:"uring";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:3:"-14";i:2;s:3:"537";i:3;s:3:"740";}}s:13:"threesuperior";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"300";s:1:"N";s:13:"threesuperior";s:1:"B";a:4:{i:0;s:1:"3";i:1;s:3:"268";i:2;s:3:"297";i:3;s:3:"688";}}s:6:"Ograve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"778";s:1:"N";s:6:"Ograve";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-19";i:2;s:3:"743";i:3;s:3:"923";}}s:6:"Agrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Agrave";s:1:"B";a:4:{i:0;s:1:"9";i:1;s:1:"0";i:2;s:3:"689";i:3;s:3:"923";}}s:6:"Abreve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Abreve";s:1:"B";a:4:{i:0;s:1:"9";i:1;s:1:"0";i:2;s:3:"689";i:3;s:3:"901";}}s:8:"multiply";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"570";s:1:"N";s:8:"multiply";s:1:"B";a:4:{i:0;s:2:"48";i:1;s:2:"16";i:2;s:3:"522";i:3;s:3:"490";}}s:6:"uacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"uacute";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:3:"-14";i:2;s:3:"537";i:3;s:3:"713";}}s:6:"Tcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Tcaron";s:1:"B";a:4:{i:0;s:2:"31";i:1;s:1:"0";i:2;s:3:"636";i:3;s:3:"914";}}s:11:"partialdiff";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"494";s:1:"N";s:11:"partialdiff";s:1:"B";a:4:{i:0;s:2:"11";i:1;s:3:"-21";i:2;s:3:"494";i:3;s:3:"750";}}s:9:"ydieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:9:"ydieresis";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:4:"-205";i:2;s:3:"480";i:3;s:3:"667";}}s:6:"Nacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Nacute";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:3:"-18";i:2;s:3:"701";i:3;s:3:"923";}}s:11:"icircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:11:"icircumflex";s:1:"B";a:4:{i:0;s:3:"-37";i:1;s:1:"0";i:2;s:3:"300";i:3;s:3:"704";}}s:11:"Ecircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:11:"Ecircumflex";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:1:"0";i:2;s:3:"641";i:3;s:3:"914";}}s:9:"adieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:9:"adieresis";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-14";i:2;s:3:"488";i:3;s:3:"667";}}s:9:"edieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:9:"edieresis";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-14";i:2;s:3:"426";i:3;s:3:"667";}}s:6:"cacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:6:"cacute";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-14";i:2;s:3:"430";i:3;s:3:"713";}}s:6:"nacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"nacute";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:1:"0";i:2;s:3:"539";i:3;s:3:"713";}}s:7:"umacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:7:"umacron";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:3:"-14";i:2;s:3:"537";i:3;s:3:"637";}}s:6:"Ncaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Ncaron";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:3:"-18";i:2;s:3:"701";i:3;s:3:"914";}}s:6:"Iacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"389";s:1:"N";s:6:"Iacute";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:1:"0";i:2;s:3:"370";i:3;s:3:"923";}}s:9:"plusminus";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"570";s:1:"N";s:9:"plusminus";s:1:"B";a:4:{i:0;s:2:"33";i:1;s:1:"0";i:2;s:3:"537";i:3;s:3:"506";}}s:9:"brokenbar";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"220";s:1:"N";s:9:"brokenbar";s:1:"B";a:4:{i:0;s:2:"66";i:1;s:4:"-143";i:2;s:3:"154";i:3;s:3:"707";}}s:10:"registered";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"747";s:1:"N";s:10:"registered";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:3:"-19";i:2;s:3:"721";i:3;s:3:"691";}}s:6:"Gbreve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"778";s:1:"N";s:6:"Gbreve";s:1:"B";a:4:{i:0;s:2:"37";i:1;s:3:"-19";i:2;s:3:"755";i:3;s:3:"901";}}s:10:"Idotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"389";s:1:"N";s:10:"Idotaccent";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:1:"0";i:2;s:3:"370";i:3;s:3:"901";}}s:9:"summation";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"summation";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:3:"-10";i:2;s:3:"585";i:3;s:3:"706";}}s:6:"Egrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Egrave";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:1:"0";i:2;s:3:"641";i:3;s:3:"923";}}s:6:"racute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:6:"racute";s:1:"B";a:4:{i:0;s:2:"29";i:1;s:1:"0";i:2;s:3:"434";i:3;s:3:"713";}}s:7:"omacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:7:"omacron";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-14";i:2;s:3:"476";i:3;s:3:"637";}}s:6:"Zacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Zacute";s:1:"B";a:4:{i:0;s:2:"28";i:1;s:1:"0";i:2;s:3:"634";i:3;s:3:"923";}}s:6:"Zcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Zcaron";s:1:"B";a:4:{i:0;s:2:"28";i:1;s:1:"0";i:2;s:3:"634";i:3;s:3:"914";}}s:12:"greaterequal";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"549";s:1:"N";s:12:"greaterequal";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:1:"0";i:2;s:3:"523";i:3;s:3:"704";}}s:3:"Eth";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:3:"Eth";s:1:"B";a:4:{i:0;s:1:"6";i:1;s:1:"0";i:2;s:3:"690";i:3;s:3:"676";}}s:8:"Ccedilla";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:8:"Ccedilla";s:1:"B";a:4:{i:0;s:2:"49";i:1;s:4:"-218";i:2;s:3:"687";i:3;s:3:"691";}}s:12:"lcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:12:"lcommaaccent";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:4:"-218";i:2;s:3:"255";i:3;s:3:"676";}}s:6:"tcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"416";s:1:"N";s:6:"tcaron";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:3:"-12";i:2;s:3:"425";i:3;s:3:"815";}}s:7:"eogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:7:"eogonek";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:4:"-193";i:2;s:3:"426";i:3;s:3:"473";}}s:7:"Uogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:7:"Uogonek";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:4:"-193";i:2;s:3:"701";i:3;s:3:"676";}}s:6:"Aacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Aacute";s:1:"B";a:4:{i:0;s:1:"9";i:1;s:1:"0";i:2;s:3:"689";i:3;s:3:"923";}}s:9:"Adieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:9:"Adieresis";s:1:"B";a:4:{i:0;s:1:"9";i:1;s:1:"0";i:2;s:3:"689";i:3;s:3:"877";}}s:6:"egrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:6:"egrave";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-14";i:2;s:3:"426";i:3;s:3:"713";}}s:6:"zacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:6:"zacute";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:1:"0";i:2;s:3:"420";i:3;s:3:"713";}}s:7:"iogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:7:"iogonek";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:4:"-193";i:2;s:3:"274";i:3;s:3:"691";}}s:6:"Oacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"778";s:1:"N";s:6:"Oacute";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-19";i:2;s:3:"743";i:3;s:3:"923";}}s:6:"oacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"oacute";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-14";i:2;s:3:"476";i:3;s:3:"713";}}s:7:"amacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:7:"amacron";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-14";i:2;s:3:"488";i:3;s:3:"637";}}s:6:"sacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"389";s:1:"N";s:6:"sacute";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-14";i:2;s:3:"361";i:3;s:3:"713";}}s:9:"idieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:9:"idieresis";s:1:"B";a:4:{i:0;s:3:"-37";i:1;s:1:"0";i:2;s:3:"300";i:3;s:3:"667";}}s:11:"Ocircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"778";s:1:"N";s:11:"Ocircumflex";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-19";i:2;s:3:"743";i:3;s:3:"914";}}s:6:"Ugrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Ugrave";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:3:"-19";i:2;s:3:"701";i:3;s:3:"923";}}s:5:"Delta";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"612";s:1:"N";s:5:"Delta";s:1:"B";a:4:{i:0;s:1:"6";i:1;s:1:"0";i:2;s:3:"608";i:3;s:3:"688";}}s:5:"thorn";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:5:"thorn";s:1:"B";a:4:{i:0;s:2:"19";i:1;s:4:"-205";i:2;s:3:"524";i:3;s:3:"676";}}s:11:"twosuperior";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"300";s:1:"N";s:11:"twosuperior";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:3:"275";i:2;s:3:"300";i:3;s:3:"688";}}s:9:"Odieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"778";s:1:"N";s:9:"Odieresis";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-19";i:2;s:3:"743";i:3;s:3:"877";}}s:2:"mu";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:2:"mu";s:1:"B";a:4:{i:0;s:2:"33";i:1;s:4:"-206";i:2;s:3:"536";i:3;s:3:"461";}}s:6:"igrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:6:"igrave";s:1:"B";a:4:{i:0;s:3:"-27";i:1;s:1:"0";i:2;s:3:"255";i:3;s:3:"713";}}s:13:"ohungarumlaut";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:13:"ohungarumlaut";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-14";i:2;s:3:"529";i:3;s:3:"713";}}s:7:"Eogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:7:"Eogonek";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:4:"-193";i:2;s:3:"644";i:3;s:3:"676";}}s:6:"dcroat";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"dcroat";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-14";i:2;s:3:"534";i:3;s:3:"676";}}s:13:"threequarters";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"750";s:1:"N";s:13:"threequarters";s:1:"B";a:4:{i:0;s:2:"23";i:1;s:3:"-12";i:2;s:3:"733";i:3;s:3:"688";}}s:8:"Scedilla";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:8:"Scedilla";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:4:"-218";i:2;s:3:"513";i:3;s:3:"692";}}s:6:"lcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"394";s:1:"N";s:6:"lcaron";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:1:"0";i:2;s:3:"412";i:3;s:3:"682";}}s:12:"Kcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"778";s:1:"N";s:12:"Kcommaaccent";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:4:"-218";i:2;s:3:"769";i:3;s:3:"676";}}s:6:"Lacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Lacute";s:1:"B";a:4:{i:0;s:2:"19";i:1;s:1:"0";i:2;s:3:"638";i:3;s:3:"923";}}s:9:"trademark";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:4:"1000";s:1:"N";s:9:"trademark";s:1:"B";a:4:{i:0;s:2:"24";i:1;s:3:"271";i:2;s:3:"977";i:3;s:3:"676";}}s:10:"edotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:10:"edotaccent";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-14";i:2;s:3:"426";i:3;s:3:"691";}}s:6:"Igrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"389";s:1:"N";s:6:"Igrave";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:1:"0";i:2;s:3:"370";i:3;s:3:"923";}}s:7:"Imacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"389";s:1:"N";s:7:"Imacron";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:1:"0";i:2;s:3:"370";i:3;s:3:"847";}}s:6:"Lcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Lcaron";s:1:"B";a:4:{i:0;s:2:"19";i:1;s:1:"0";i:2;s:3:"652";i:3;s:3:"682";}}s:7:"onehalf";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"750";s:1:"N";s:7:"onehalf";s:1:"B";a:4:{i:0;s:2:"-7";i:1;s:3:"-12";i:2;s:3:"775";i:3;s:3:"688";}}s:9:"lessequal";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"549";s:1:"N";s:9:"lessequal";s:1:"B";a:4:{i:0;s:2:"29";i:1;s:1:"0";i:2;s:3:"526";i:3;s:3:"704";}}s:11:"ocircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:11:"ocircumflex";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-14";i:2;s:3:"476";i:3;s:3:"704";}}s:6:"ntilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"ntilde";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:1:"0";i:2;s:3:"539";i:3;s:3:"674";}}s:13:"Uhungarumlaut";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:13:"Uhungarumlaut";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:3:"-19";i:2;s:3:"701";i:3;s:3:"923";}}s:6:"Eacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Eacute";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:1:"0";i:2;s:3:"641";i:3;s:3:"923";}}s:7:"emacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:7:"emacron";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-14";i:2;s:3:"426";i:3;s:3:"637";}}s:6:"gbreve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"gbreve";s:1:"B";a:4:{i:0;s:2:"28";i:1;s:4:"-206";i:2;s:3:"483";i:3;s:3:"691";}}s:10:"onequarter";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"750";s:1:"N";s:10:"onequarter";s:1:"B";a:4:{i:0;s:2:"28";i:1;s:3:"-12";i:2;s:3:"743";i:3;s:3:"688";}}s:6:"Scaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"Scaron";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-19";i:2;s:3:"513";i:3;s:3:"914";}}s:12:"Scommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:12:"Scommaaccent";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:4:"-218";i:2;s:3:"513";i:3;s:3:"692";}}s:13:"Ohungarumlaut";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"778";s:1:"N";s:13:"Ohungarumlaut";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-19";i:2;s:3:"743";i:3;s:3:"923";}}s:6:"degree";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"400";s:1:"N";s:6:"degree";s:1:"B";a:4:{i:0;s:2:"57";i:1;s:3:"402";i:2;s:3:"343";i:3;s:3:"688";}}s:6:"ograve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"ograve";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-14";i:2;s:3:"476";i:3;s:3:"713";}}s:6:"Ccaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Ccaron";s:1:"B";a:4:{i:0;s:2:"49";i:1;s:3:"-19";i:2;s:3:"687";i:3;s:3:"914";}}s:6:"ugrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"ugrave";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:3:"-14";i:2;s:3:"537";i:3;s:3:"713";}}s:7:"radical";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"549";s:1:"N";s:7:"radical";s:1:"B";a:4:{i:0;s:2:"10";i:1;s:3:"-46";i:2;s:3:"512";i:3;s:3:"850";}}s:6:"Dcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Dcaron";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:1:"0";i:2;s:3:"690";i:3;s:3:"914";}}s:12:"rcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:12:"rcommaaccent";s:1:"B";a:4:{i:0;s:2:"29";i:1;s:4:"-218";i:2;s:3:"434";i:3;s:3:"473";}}s:6:"Ntilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Ntilde";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:3:"-18";i:2;s:3:"701";i:3;s:3:"884";}}s:6:"otilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"otilde";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-14";i:2;s:3:"476";i:3;s:3:"674";}}s:12:"Rcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:12:"Rcommaaccent";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:4:"-218";i:2;s:3:"715";i:3;s:3:"676";}}s:12:"Lcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:12:"Lcommaaccent";s:1:"B";a:4:{i:0;s:2:"19";i:1;s:4:"-218";i:2;s:3:"638";i:3;s:3:"676";}}s:6:"Atilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Atilde";s:1:"B";a:4:{i:0;s:1:"9";i:1;s:1:"0";i:2;s:3:"689";i:3;s:3:"884";}}s:7:"Aogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:7:"Aogonek";s:1:"B";a:4:{i:0;s:1:"9";i:1;s:4:"-193";i:2;s:3:"699";i:3;s:3:"690";}}s:5:"Aring";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:5:"Aring";s:1:"B";a:4:{i:0;s:1:"9";i:1;s:1:"0";i:2;s:3:"689";i:3;s:3:"935";}}s:6:"Otilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"778";s:1:"N";s:6:"Otilde";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-19";i:2;s:3:"743";i:3;s:3:"884";}}s:10:"zdotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:10:"zdotaccent";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:1:"0";i:2;s:3:"420";i:3;s:3:"691";}}s:6:"Ecaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Ecaron";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:1:"0";i:2;s:3:"641";i:3;s:3:"914";}}s:7:"Iogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"389";s:1:"N";s:7:"Iogonek";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:4:"-193";i:2;s:3:"370";i:3;s:3:"676";}}s:12:"kcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:12:"kcommaaccent";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:4:"-218";i:2;s:3:"543";i:3;s:3:"676";}}s:5:"minus";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"570";s:1:"N";s:5:"minus";s:1:"B";a:4:{i:0;s:2:"33";i:1;s:3:"209";i:2;s:3:"537";i:3;s:3:"297";}}s:11:"Icircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"389";s:1:"N";s:11:"Icircumflex";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:1:"0";i:2;s:3:"370";i:3;s:3:"914";}}s:6:"ncaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"ncaron";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:1:"0";i:2;s:3:"539";i:3;s:3:"704";}}s:12:"tcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"333";s:1:"N";s:12:"tcommaaccent";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:4:"-218";i:2;s:3:"332";i:3;s:3:"630";}}s:10:"logicalnot";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"570";s:1:"N";s:10:"logicalnot";s:1:"B";a:4:{i:0;s:2:"33";i:1;s:3:"108";i:2;s:3:"537";i:3;s:3:"399";}}s:9:"odieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:9:"odieresis";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-14";i:2;s:3:"476";i:3;s:3:"667";}}s:9:"udieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:9:"udieresis";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:3:"-14";i:2;s:3:"537";i:3;s:3:"667";}}s:8:"notequal";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"549";s:1:"N";s:8:"notequal";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:3:"-49";i:2;s:3:"540";i:3;s:3:"570";}}s:12:"gcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:12:"gcommaaccent";s:1:"B";a:4:{i:0;s:2:"28";i:1;s:4:"-206";i:2;s:3:"483";i:3;s:3:"829";}}s:3:"eth";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:3:"eth";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-14";i:2;s:3:"476";i:3;s:3:"691";}}s:6:"zcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:6:"zcaron";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:1:"0";i:2;s:3:"420";i:3;s:3:"704";}}s:12:"ncommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:12:"ncommaaccent";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:4:"-218";i:2;s:3:"539";i:3;s:3:"473";}}s:11:"onesuperior";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"300";s:1:"N";s:11:"onesuperior";s:1:"B";a:4:{i:0;s:2:"28";i:1;s:3:"275";i:2;s:3:"273";i:3;s:3:"688";}}s:7:"imacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:7:"imacron";s:1:"B";a:4:{i:0;s:2:"-8";i:1;s:1:"0";i:2;s:3:"272";i:3;s:3:"637";}}s:4:"Euro";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:4:"Euro";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:1:"0";i:2;s:1:"0";i:3;s:1:"0";}}}s:3:"KPX";a:124:{s:1:"A";a:50:{s:1:"C";s:3:"-55";s:6:"Cacute";s:3:"-55";s:6:"Ccaron";s:3:"-55";s:8:"Ccedilla";s:3:"-55";s:1:"G";s:3:"-55";s:6:"Gbreve";s:3:"-55";s:12:"Gcommaaccent";s:3:"-55";s:1:"O";s:3:"-45";s:6:"Oacute";s:3:"-45";s:11:"Ocircumflex";s:3:"-45";s:9:"Odieresis";s:3:"-45";s:6:"Ograve";s:3:"-45";s:13:"Ohungarumlaut";s:3:"-45";s:7:"Omacron";s:3:"-45";s:6:"Oslash";s:3:"-45";s:6:"Otilde";s:3:"-45";s:1:"Q";s:3:"-45";s:1:"T";s:3:"-95";s:6:"Tcaron";s:3:"-95";s:12:"Tcommaaccent";s:3:"-95";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:4:"-145";s:1:"W";s:4:"-130";s:1:"Y";s:4:"-100";s:6:"Yacute";s:4:"-100";s:9:"Ydieresis";s:4:"-100";s:1:"p";s:3:"-25";s:10:"quoteright";s:3:"-74";s:1:"u";s:3:"-50";s:6:"uacute";s:3:"-50";s:11:"ucircumflex";s:3:"-50";s:9:"udieresis";s:3:"-50";s:6:"ugrave";s:3:"-50";s:13:"uhungarumlaut";s:3:"-50";s:7:"umacron";s:3:"-50";s:7:"uogonek";s:3:"-50";s:5:"uring";s:3:"-50";s:1:"v";s:4:"-100";s:1:"w";s:3:"-90";s:1:"y";s:3:"-74";s:6:"yacute";s:3:"-74";s:9:"ydieresis";s:3:"-74";}s:6:"Aacute";a:50:{s:1:"C";s:3:"-55";s:6:"Cacute";s:3:"-55";s:6:"Ccaron";s:3:"-55";s:8:"Ccedilla";s:3:"-55";s:1:"G";s:3:"-55";s:6:"Gbreve";s:3:"-55";s:12:"Gcommaaccent";s:3:"-55";s:1:"O";s:3:"-45";s:6:"Oacute";s:3:"-45";s:11:"Ocircumflex";s:3:"-45";s:9:"Odieresis";s:3:"-45";s:6:"Ograve";s:3:"-45";s:13:"Ohungarumlaut";s:3:"-45";s:7:"Omacron";s:3:"-45";s:6:"Oslash";s:3:"-45";s:6:"Otilde";s:3:"-45";s:1:"Q";s:3:"-45";s:1:"T";s:3:"-95";s:6:"Tcaron";s:3:"-95";s:12:"Tcommaaccent";s:3:"-95";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:4:"-145";s:1:"W";s:4:"-130";s:1:"Y";s:4:"-100";s:6:"Yacute";s:4:"-100";s:9:"Ydieresis";s:4:"-100";s:1:"p";s:3:"-25";s:10:"quoteright";s:3:"-74";s:1:"u";s:3:"-50";s:6:"uacute";s:3:"-50";s:11:"ucircumflex";s:3:"-50";s:9:"udieresis";s:3:"-50";s:6:"ugrave";s:3:"-50";s:13:"uhungarumlaut";s:3:"-50";s:7:"umacron";s:3:"-50";s:7:"uogonek";s:3:"-50";s:5:"uring";s:3:"-50";s:1:"v";s:4:"-100";s:1:"w";s:3:"-90";s:1:"y";s:3:"-74";s:6:"yacute";s:3:"-74";s:9:"ydieresis";s:3:"-74";}s:6:"Abreve";a:50:{s:1:"C";s:3:"-55";s:6:"Cacute";s:3:"-55";s:6:"Ccaron";s:3:"-55";s:8:"Ccedilla";s:3:"-55";s:1:"G";s:3:"-55";s:6:"Gbreve";s:3:"-55";s:12:"Gcommaaccent";s:3:"-55";s:1:"O";s:3:"-45";s:6:"Oacute";s:3:"-45";s:11:"Ocircumflex";s:3:"-45";s:9:"Odieresis";s:3:"-45";s:6:"Ograve";s:3:"-45";s:13:"Ohungarumlaut";s:3:"-45";s:7:"Omacron";s:3:"-45";s:6:"Oslash";s:3:"-45";s:6:"Otilde";s:3:"-45";s:1:"Q";s:3:"-45";s:1:"T";s:3:"-95";s:6:"Tcaron";s:3:"-95";s:12:"Tcommaaccent";s:3:"-95";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:4:"-145";s:1:"W";s:4:"-130";s:1:"Y";s:4:"-100";s:6:"Yacute";s:4:"-100";s:9:"Ydieresis";s:4:"-100";s:1:"p";s:3:"-25";s:10:"quoteright";s:3:"-74";s:1:"u";s:3:"-50";s:6:"uacute";s:3:"-50";s:11:"ucircumflex";s:3:"-50";s:9:"udieresis";s:3:"-50";s:6:"ugrave";s:3:"-50";s:13:"uhungarumlaut";s:3:"-50";s:7:"umacron";s:3:"-50";s:7:"uogonek";s:3:"-50";s:5:"uring";s:3:"-50";s:1:"v";s:4:"-100";s:1:"w";s:3:"-90";s:1:"y";s:3:"-74";s:6:"yacute";s:3:"-74";s:9:"ydieresis";s:3:"-74";}s:11:"Acircumflex";a:50:{s:1:"C";s:3:"-55";s:6:"Cacute";s:3:"-55";s:6:"Ccaron";s:3:"-55";s:8:"Ccedilla";s:3:"-55";s:1:"G";s:3:"-55";s:6:"Gbreve";s:3:"-55";s:12:"Gcommaaccent";s:3:"-55";s:1:"O";s:3:"-45";s:6:"Oacute";s:3:"-45";s:11:"Ocircumflex";s:3:"-45";s:9:"Odieresis";s:3:"-45";s:6:"Ograve";s:3:"-45";s:13:"Ohungarumlaut";s:3:"-45";s:7:"Omacron";s:3:"-45";s:6:"Oslash";s:3:"-45";s:6:"Otilde";s:3:"-45";s:1:"Q";s:3:"-45";s:1:"T";s:3:"-95";s:6:"Tcaron";s:3:"-95";s:12:"Tcommaaccent";s:3:"-95";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:4:"-145";s:1:"W";s:4:"-130";s:1:"Y";s:4:"-100";s:6:"Yacute";s:4:"-100";s:9:"Ydieresis";s:4:"-100";s:1:"p";s:3:"-25";s:10:"quoteright";s:3:"-74";s:1:"u";s:3:"-50";s:6:"uacute";s:3:"-50";s:11:"ucircumflex";s:3:"-50";s:9:"udieresis";s:3:"-50";s:6:"ugrave";s:3:"-50";s:13:"uhungarumlaut";s:3:"-50";s:7:"umacron";s:3:"-50";s:7:"uogonek";s:3:"-50";s:5:"uring";s:3:"-50";s:1:"v";s:4:"-100";s:1:"w";s:3:"-90";s:1:"y";s:3:"-74";s:6:"yacute";s:3:"-74";s:9:"ydieresis";s:3:"-74";}s:9:"Adieresis";a:50:{s:1:"C";s:3:"-55";s:6:"Cacute";s:3:"-55";s:6:"Ccaron";s:3:"-55";s:8:"Ccedilla";s:3:"-55";s:1:"G";s:3:"-55";s:6:"Gbreve";s:3:"-55";s:12:"Gcommaaccent";s:3:"-55";s:1:"O";s:3:"-45";s:6:"Oacute";s:3:"-45";s:11:"Ocircumflex";s:3:"-45";s:9:"Odieresis";s:3:"-45";s:6:"Ograve";s:3:"-45";s:13:"Ohungarumlaut";s:3:"-45";s:7:"Omacron";s:3:"-45";s:6:"Oslash";s:3:"-45";s:6:"Otilde";s:3:"-45";s:1:"Q";s:3:"-45";s:1:"T";s:3:"-95";s:6:"Tcaron";s:3:"-95";s:12:"Tcommaaccent";s:3:"-95";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:4:"-145";s:1:"W";s:4:"-130";s:1:"Y";s:4:"-100";s:6:"Yacute";s:4:"-100";s:9:"Ydieresis";s:4:"-100";s:1:"p";s:3:"-25";s:10:"quoteright";s:3:"-74";s:1:"u";s:3:"-50";s:6:"uacute";s:3:"-50";s:11:"ucircumflex";s:3:"-50";s:9:"udieresis";s:3:"-50";s:6:"ugrave";s:3:"-50";s:13:"uhungarumlaut";s:3:"-50";s:7:"umacron";s:3:"-50";s:7:"uogonek";s:3:"-50";s:5:"uring";s:3:"-50";s:1:"v";s:4:"-100";s:1:"w";s:3:"-90";s:1:"y";s:3:"-74";s:6:"yacute";s:3:"-74";s:9:"ydieresis";s:3:"-74";}s:6:"Agrave";a:50:{s:1:"C";s:3:"-55";s:6:"Cacute";s:3:"-55";s:6:"Ccaron";s:3:"-55";s:8:"Ccedilla";s:3:"-55";s:1:"G";s:3:"-55";s:6:"Gbreve";s:3:"-55";s:12:"Gcommaaccent";s:3:"-55";s:1:"O";s:3:"-45";s:6:"Oacute";s:3:"-45";s:11:"Ocircumflex";s:3:"-45";s:9:"Odieresis";s:3:"-45";s:6:"Ograve";s:3:"-45";s:13:"Ohungarumlaut";s:3:"-45";s:7:"Omacron";s:3:"-45";s:6:"Oslash";s:3:"-45";s:6:"Otilde";s:3:"-45";s:1:"Q";s:3:"-45";s:1:"T";s:3:"-95";s:6:"Tcaron";s:3:"-95";s:12:"Tcommaaccent";s:3:"-95";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:4:"-145";s:1:"W";s:4:"-130";s:1:"Y";s:4:"-100";s:6:"Yacute";s:4:"-100";s:9:"Ydieresis";s:4:"-100";s:1:"p";s:3:"-25";s:10:"quoteright";s:3:"-74";s:1:"u";s:3:"-50";s:6:"uacute";s:3:"-50";s:11:"ucircumflex";s:3:"-50";s:9:"udieresis";s:3:"-50";s:6:"ugrave";s:3:"-50";s:13:"uhungarumlaut";s:3:"-50";s:7:"umacron";s:3:"-50";s:7:"uogonek";s:3:"-50";s:5:"uring";s:3:"-50";s:1:"v";s:4:"-100";s:1:"w";s:3:"-90";s:1:"y";s:3:"-74";s:6:"yacute";s:3:"-74";s:9:"ydieresis";s:3:"-74";}s:7:"Amacron";a:50:{s:1:"C";s:3:"-55";s:6:"Cacute";s:3:"-55";s:6:"Ccaron";s:3:"-55";s:8:"Ccedilla";s:3:"-55";s:1:"G";s:3:"-55";s:6:"Gbreve";s:3:"-55";s:12:"Gcommaaccent";s:3:"-55";s:1:"O";s:3:"-45";s:6:"Oacute";s:3:"-45";s:11:"Ocircumflex";s:3:"-45";s:9:"Odieresis";s:3:"-45";s:6:"Ograve";s:3:"-45";s:13:"Ohungarumlaut";s:3:"-45";s:7:"Omacron";s:3:"-45";s:6:"Oslash";s:3:"-45";s:6:"Otilde";s:3:"-45";s:1:"Q";s:3:"-45";s:1:"T";s:3:"-95";s:6:"Tcaron";s:3:"-95";s:12:"Tcommaaccent";s:3:"-95";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:4:"-145";s:1:"W";s:4:"-130";s:1:"Y";s:4:"-100";s:6:"Yacute";s:4:"-100";s:9:"Ydieresis";s:4:"-100";s:1:"p";s:3:"-25";s:10:"quoteright";s:3:"-74";s:1:"u";s:3:"-50";s:6:"uacute";s:3:"-50";s:11:"ucircumflex";s:3:"-50";s:9:"udieresis";s:3:"-50";s:6:"ugrave";s:3:"-50";s:13:"uhungarumlaut";s:3:"-50";s:7:"umacron";s:3:"-50";s:7:"uogonek";s:3:"-50";s:5:"uring";s:3:"-50";s:1:"v";s:4:"-100";s:1:"w";s:3:"-90";s:1:"y";s:3:"-74";s:6:"yacute";s:3:"-74";s:9:"ydieresis";s:3:"-74";}s:7:"Aogonek";a:50:{s:1:"C";s:3:"-55";s:6:"Cacute";s:3:"-55";s:6:"Ccaron";s:3:"-55";s:8:"Ccedilla";s:3:"-55";s:1:"G";s:3:"-55";s:6:"Gbreve";s:3:"-55";s:12:"Gcommaaccent";s:3:"-55";s:1:"O";s:3:"-45";s:6:"Oacute";s:3:"-45";s:11:"Ocircumflex";s:3:"-45";s:9:"Odieresis";s:3:"-45";s:6:"Ograve";s:3:"-45";s:13:"Ohungarumlaut";s:3:"-45";s:7:"Omacron";s:3:"-45";s:6:"Oslash";s:3:"-45";s:6:"Otilde";s:3:"-45";s:1:"Q";s:3:"-45";s:1:"T";s:3:"-95";s:6:"Tcaron";s:3:"-95";s:12:"Tcommaaccent";s:3:"-95";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:4:"-145";s:1:"W";s:4:"-130";s:1:"Y";s:4:"-100";s:6:"Yacute";s:4:"-100";s:9:"Ydieresis";s:4:"-100";s:1:"p";s:3:"-25";s:10:"quoteright";s:3:"-74";s:1:"u";s:3:"-50";s:6:"uacute";s:3:"-50";s:11:"ucircumflex";s:3:"-50";s:9:"udieresis";s:3:"-50";s:6:"ugrave";s:3:"-50";s:13:"uhungarumlaut";s:3:"-50";s:7:"umacron";s:3:"-50";s:7:"uogonek";s:3:"-50";s:5:"uring";s:3:"-50";s:1:"v";s:4:"-100";s:1:"w";s:3:"-90";s:1:"y";s:3:"-34";s:6:"yacute";s:3:"-34";s:9:"ydieresis";s:3:"-34";}s:5:"Aring";a:50:{s:1:"C";s:3:"-55";s:6:"Cacute";s:3:"-55";s:6:"Ccaron";s:3:"-55";s:8:"Ccedilla";s:3:"-55";s:1:"G";s:3:"-55";s:6:"Gbreve";s:3:"-55";s:12:"Gcommaaccent";s:3:"-55";s:1:"O";s:3:"-45";s:6:"Oacute";s:3:"-45";s:11:"Ocircumflex";s:3:"-45";s:9:"Odieresis";s:3:"-45";s:6:"Ograve";s:3:"-45";s:13:"Ohungarumlaut";s:3:"-45";s:7:"Omacron";s:3:"-45";s:6:"Oslash";s:3:"-45";s:6:"Otilde";s:3:"-45";s:1:"Q";s:3:"-45";s:1:"T";s:3:"-95";s:6:"Tcaron";s:3:"-95";s:12:"Tcommaaccent";s:3:"-95";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:4:"-145";s:1:"W";s:4:"-130";s:1:"Y";s:4:"-100";s:6:"Yacute";s:4:"-100";s:9:"Ydieresis";s:4:"-100";s:1:"p";s:3:"-25";s:10:"quoteright";s:3:"-74";s:1:"u";s:3:"-50";s:6:"uacute";s:3:"-50";s:11:"ucircumflex";s:3:"-50";s:9:"udieresis";s:3:"-50";s:6:"ugrave";s:3:"-50";s:13:"uhungarumlaut";s:3:"-50";s:7:"umacron";s:3:"-50";s:7:"uogonek";s:3:"-50";s:5:"uring";s:3:"-50";s:1:"v";s:4:"-100";s:1:"w";s:3:"-90";s:1:"y";s:3:"-74";s:6:"yacute";s:3:"-74";s:9:"ydieresis";s:3:"-74";}s:6:"Atilde";a:50:{s:1:"C";s:3:"-55";s:6:"Cacute";s:3:"-55";s:6:"Ccaron";s:3:"-55";s:8:"Ccedilla";s:3:"-55";s:1:"G";s:3:"-55";s:6:"Gbreve";s:3:"-55";s:12:"Gcommaaccent";s:3:"-55";s:1:"O";s:3:"-45";s:6:"Oacute";s:3:"-45";s:11:"Ocircumflex";s:3:"-45";s:9:"Odieresis";s:3:"-45";s:6:"Ograve";s:3:"-45";s:13:"Ohungarumlaut";s:3:"-45";s:7:"Omacron";s:3:"-45";s:6:"Oslash";s:3:"-45";s:6:"Otilde";s:3:"-45";s:1:"Q";s:3:"-45";s:1:"T";s:3:"-95";s:6:"Tcaron";s:3:"-95";s:12:"Tcommaaccent";s:3:"-95";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:4:"-145";s:1:"W";s:4:"-130";s:1:"Y";s:4:"-100";s:6:"Yacute";s:4:"-100";s:9:"Ydieresis";s:4:"-100";s:1:"p";s:3:"-25";s:10:"quoteright";s:3:"-74";s:1:"u";s:3:"-50";s:6:"uacute";s:3:"-50";s:11:"ucircumflex";s:3:"-50";s:9:"udieresis";s:3:"-50";s:6:"ugrave";s:3:"-50";s:13:"uhungarumlaut";s:3:"-50";s:7:"umacron";s:3:"-50";s:7:"uogonek";s:3:"-50";s:5:"uring";s:3:"-50";s:1:"v";s:4:"-100";s:1:"w";s:3:"-90";s:1:"y";s:3:"-74";s:6:"yacute";s:3:"-74";s:9:"ydieresis";s:3:"-74";}s:1:"B";a:19:{s:1:"A";s:3:"-30";s:6:"Aacute";s:3:"-30";s:6:"Abreve";s:3:"-30";s:11:"Acircumflex";s:3:"-30";s:9:"Adieresis";s:3:"-30";s:6:"Agrave";s:3:"-30";s:7:"Amacron";s:3:"-30";s:7:"Aogonek";s:3:"-30";s:5:"Aring";s:3:"-30";s:6:"Atilde";s:3:"-30";s:1:"U";s:3:"-10";s:6:"Uacute";s:3:"-10";s:11:"Ucircumflex";s:3:"-10";s:9:"Udieresis";s:3:"-10";s:6:"Ugrave";s:3:"-10";s:13:"Uhungarumlaut";s:3:"-10";s:7:"Umacron";s:3:"-10";s:7:"Uogonek";s:3:"-10";s:5:"Uring";s:3:"-10";}s:1:"D";a:16:{s:1:"A";s:3:"-35";s:6:"Aacute";s:3:"-35";s:6:"Abreve";s:3:"-35";s:11:"Acircumflex";s:3:"-35";s:9:"Adieresis";s:3:"-35";s:6:"Agrave";s:3:"-35";s:7:"Amacron";s:3:"-35";s:7:"Aogonek";s:3:"-35";s:5:"Aring";s:3:"-35";s:6:"Atilde";s:3:"-35";s:1:"V";s:3:"-40";s:1:"W";s:3:"-40";s:1:"Y";s:3:"-40";s:6:"Yacute";s:3:"-40";s:9:"Ydieresis";s:3:"-40";s:6:"period";s:3:"-20";}s:6:"Dcaron";a:16:{s:1:"A";s:3:"-35";s:6:"Aacute";s:3:"-35";s:6:"Abreve";s:3:"-35";s:11:"Acircumflex";s:3:"-35";s:9:"Adieresis";s:3:"-35";s:6:"Agrave";s:3:"-35";s:7:"Amacron";s:3:"-35";s:7:"Aogonek";s:3:"-35";s:5:"Aring";s:3:"-35";s:6:"Atilde";s:3:"-35";s:1:"V";s:3:"-40";s:1:"W";s:3:"-40";s:1:"Y";s:3:"-40";s:6:"Yacute";s:3:"-40";s:9:"Ydieresis";s:3:"-40";s:6:"period";s:3:"-20";}s:6:"Dcroat";a:16:{s:1:"A";s:3:"-35";s:6:"Aacute";s:3:"-35";s:6:"Abreve";s:3:"-35";s:11:"Acircumflex";s:3:"-35";s:9:"Adieresis";s:3:"-35";s:6:"Agrave";s:3:"-35";s:7:"Amacron";s:3:"-35";s:7:"Aogonek";s:3:"-35";s:5:"Aring";s:3:"-35";s:6:"Atilde";s:3:"-35";s:1:"V";s:3:"-40";s:1:"W";s:3:"-40";s:1:"Y";s:3:"-40";s:6:"Yacute";s:3:"-40";s:9:"Ydieresis";s:3:"-40";s:6:"period";s:3:"-20";}s:1:"F";a:40:{s:1:"A";s:3:"-90";s:6:"Aacute";s:3:"-90";s:6:"Abreve";s:3:"-90";s:11:"Acircumflex";s:3:"-90";s:9:"Adieresis";s:3:"-90";s:6:"Agrave";s:3:"-90";s:7:"Amacron";s:3:"-90";s:7:"Aogonek";s:3:"-90";s:5:"Aring";s:3:"-90";s:6:"Atilde";s:3:"-90";s:1:"a";s:3:"-25";s:6:"aacute";s:3:"-25";s:6:"abreve";s:3:"-25";s:11:"acircumflex";s:3:"-25";s:9:"adieresis";s:3:"-25";s:6:"agrave";s:3:"-25";s:7:"amacron";s:3:"-25";s:7:"aogonek";s:3:"-25";s:5:"aring";s:3:"-25";s:6:"atilde";s:3:"-25";s:5:"comma";s:3:"-92";s:1:"e";s:3:"-25";s:6:"eacute";s:3:"-25";s:6:"ecaron";s:3:"-25";s:11:"ecircumflex";s:3:"-25";s:9:"edieresis";s:3:"-25";s:10:"edotaccent";s:3:"-25";s:6:"egrave";s:3:"-25";s:7:"emacron";s:3:"-25";s:7:"eogonek";s:3:"-25";s:1:"o";s:3:"-25";s:6:"oacute";s:3:"-25";s:11:"ocircumflex";s:3:"-25";s:9:"odieresis";s:3:"-25";s:6:"ograve";s:3:"-25";s:13:"ohungarumlaut";s:3:"-25";s:7:"omacron";s:3:"-25";s:6:"oslash";s:3:"-25";s:6:"otilde";s:3:"-25";s:6:"period";s:4:"-110";}s:1:"J";a:48:{s:1:"A";s:3:"-30";s:6:"Aacute";s:3:"-30";s:6:"Abreve";s:3:"-30";s:11:"Acircumflex";s:3:"-30";s:9:"Adieresis";s:3:"-30";s:6:"Agrave";s:3:"-30";s:7:"Amacron";s:3:"-30";s:7:"Aogonek";s:3:"-30";s:5:"Aring";s:3:"-30";s:6:"Atilde";s:3:"-30";s:1:"a";s:3:"-15";s:6:"aacute";s:3:"-15";s:6:"abreve";s:3:"-15";s:11:"acircumflex";s:3:"-15";s:9:"adieresis";s:3:"-15";s:6:"agrave";s:3:"-15";s:7:"amacron";s:3:"-15";s:7:"aogonek";s:3:"-15";s:5:"aring";s:3:"-15";s:6:"atilde";s:3:"-15";s:1:"e";s:3:"-15";s:6:"eacute";s:3:"-15";s:6:"ecaron";s:3:"-15";s:11:"ecircumflex";s:3:"-15";s:9:"edieresis";s:3:"-15";s:10:"edotaccent";s:3:"-15";s:6:"egrave";s:3:"-15";s:7:"emacron";s:3:"-15";s:7:"eogonek";s:3:"-15";s:1:"o";s:3:"-15";s:6:"oacute";s:3:"-15";s:11:"ocircumflex";s:3:"-15";s:9:"odieresis";s:3:"-15";s:6:"ograve";s:3:"-15";s:13:"ohungarumlaut";s:3:"-15";s:7:"omacron";s:3:"-15";s:6:"oslash";s:3:"-15";s:6:"otilde";s:3:"-15";s:6:"period";s:3:"-20";s:1:"u";s:3:"-15";s:6:"uacute";s:3:"-15";s:11:"ucircumflex";s:3:"-15";s:9:"udieresis";s:3:"-15";s:6:"ugrave";s:3:"-15";s:13:"uhungarumlaut";s:3:"-15";s:7:"umacron";s:3:"-15";s:7:"uogonek";s:3:"-15";s:5:"uring";s:3:"-15";}s:1:"K";a:39:{s:1:"O";s:3:"-30";s:6:"Oacute";s:3:"-30";s:11:"Ocircumflex";s:3:"-30";s:9:"Odieresis";s:3:"-30";s:6:"Ograve";s:3:"-30";s:13:"Ohungarumlaut";s:3:"-30";s:7:"Omacron";s:3:"-30";s:6:"Oslash";s:3:"-30";s:6:"Otilde";s:3:"-30";s:1:"e";s:3:"-25";s:6:"eacute";s:3:"-25";s:6:"ecaron";s:3:"-25";s:11:"ecircumflex";s:3:"-25";s:9:"edieresis";s:3:"-25";s:10:"edotaccent";s:3:"-25";s:6:"egrave";s:3:"-25";s:7:"emacron";s:3:"-25";s:7:"eogonek";s:3:"-25";s:1:"o";s:3:"-25";s:6:"oacute";s:3:"-25";s:11:"ocircumflex";s:3:"-25";s:9:"odieresis";s:3:"-25";s:6:"ograve";s:3:"-25";s:13:"ohungarumlaut";s:3:"-25";s:7:"omacron";s:3:"-25";s:6:"oslash";s:3:"-25";s:6:"otilde";s:3:"-25";s:1:"u";s:3:"-15";s:6:"uacute";s:3:"-15";s:11:"ucircumflex";s:3:"-15";s:9:"udieresis";s:3:"-15";s:6:"ugrave";s:3:"-15";s:13:"uhungarumlaut";s:3:"-15";s:7:"umacron";s:3:"-15";s:7:"uogonek";s:3:"-15";s:5:"uring";s:3:"-15";s:1:"y";s:3:"-45";s:6:"yacute";s:3:"-45";s:9:"ydieresis";s:3:"-45";}s:12:"Kcommaaccent";a:39:{s:1:"O";s:3:"-30";s:6:"Oacute";s:3:"-30";s:11:"Ocircumflex";s:3:"-30";s:9:"Odieresis";s:3:"-30";s:6:"Ograve";s:3:"-30";s:13:"Ohungarumlaut";s:3:"-30";s:7:"Omacron";s:3:"-30";s:6:"Oslash";s:3:"-30";s:6:"Otilde";s:3:"-30";s:1:"e";s:3:"-25";s:6:"eacute";s:3:"-25";s:6:"ecaron";s:3:"-25";s:11:"ecircumflex";s:3:"-25";s:9:"edieresis";s:3:"-25";s:10:"edotaccent";s:3:"-25";s:6:"egrave";s:3:"-25";s:7:"emacron";s:3:"-25";s:7:"eogonek";s:3:"-25";s:1:"o";s:3:"-25";s:6:"oacute";s:3:"-25";s:11:"ocircumflex";s:3:"-25";s:9:"odieresis";s:3:"-25";s:6:"ograve";s:3:"-25";s:13:"ohungarumlaut";s:3:"-25";s:7:"omacron";s:3:"-25";s:6:"oslash";s:3:"-25";s:6:"otilde";s:3:"-25";s:1:"u";s:3:"-15";s:6:"uacute";s:3:"-15";s:11:"ucircumflex";s:3:"-15";s:9:"udieresis";s:3:"-15";s:6:"ugrave";s:3:"-15";s:13:"uhungarumlaut";s:3:"-15";s:7:"umacron";s:3:"-15";s:7:"uogonek";s:3:"-15";s:5:"uring";s:3:"-15";s:1:"y";s:3:"-45";s:6:"yacute";s:3:"-45";s:9:"ydieresis";s:3:"-45";}s:1:"L";a:13:{s:1:"T";s:3:"-92";s:6:"Tcaron";s:3:"-92";s:12:"Tcommaaccent";s:3:"-92";s:1:"V";s:3:"-92";s:1:"W";s:3:"-92";s:1:"Y";s:3:"-92";s:6:"Yacute";s:3:"-92";s:9:"Ydieresis";s:3:"-92";s:13:"quotedblright";s:3:"-20";s:10:"quoteright";s:4:"-110";s:1:"y";s:3:"-55";s:6:"yacute";s:3:"-55";s:9:"ydieresis";s:3:"-55";}s:6:"Lacute";a:13:{s:1:"T";s:3:"-92";s:6:"Tcaron";s:3:"-92";s:12:"Tcommaaccent";s:3:"-92";s:1:"V";s:3:"-92";s:1:"W";s:3:"-92";s:1:"Y";s:3:"-92";s:6:"Yacute";s:3:"-92";s:9:"Ydieresis";s:3:"-92";s:13:"quotedblright";s:3:"-20";s:10:"quoteright";s:4:"-110";s:1:"y";s:3:"-55";s:6:"yacute";s:3:"-55";s:9:"ydieresis";s:3:"-55";}s:12:"Lcommaaccent";a:13:{s:1:"T";s:3:"-92";s:6:"Tcaron";s:3:"-92";s:12:"Tcommaaccent";s:3:"-92";s:1:"V";s:3:"-92";s:1:"W";s:3:"-92";s:1:"Y";s:3:"-92";s:6:"Yacute";s:3:"-92";s:9:"Ydieresis";s:3:"-92";s:13:"quotedblright";s:3:"-20";s:10:"quoteright";s:4:"-110";s:1:"y";s:3:"-55";s:6:"yacute";s:3:"-55";s:9:"ydieresis";s:3:"-55";}s:6:"Lslash";a:13:{s:1:"T";s:3:"-92";s:6:"Tcaron";s:3:"-92";s:12:"Tcommaaccent";s:3:"-92";s:1:"V";s:3:"-92";s:1:"W";s:3:"-92";s:1:"Y";s:3:"-92";s:6:"Yacute";s:3:"-92";s:9:"Ydieresis";s:3:"-92";s:13:"quotedblright";s:3:"-20";s:10:"quoteright";s:4:"-110";s:1:"y";s:3:"-55";s:6:"yacute";s:3:"-55";s:9:"ydieresis";s:3:"-55";}s:1:"N";a:10:{s:1:"A";s:3:"-20";s:6:"Aacute";s:3:"-20";s:6:"Abreve";s:3:"-20";s:11:"Acircumflex";s:3:"-20";s:9:"Adieresis";s:3:"-20";s:6:"Agrave";s:3:"-20";s:7:"Amacron";s:3:"-20";s:7:"Aogonek";s:3:"-20";s:5:"Aring";s:3:"-20";s:6:"Atilde";s:3:"-20";}s:6:"Nacute";a:10:{s:1:"A";s:3:"-20";s:6:"Aacute";s:3:"-20";s:6:"Abreve";s:3:"-20";s:11:"Acircumflex";s:3:"-20";s:9:"Adieresis";s:3:"-20";s:6:"Agrave";s:3:"-20";s:7:"Amacron";s:3:"-20";s:7:"Aogonek";s:3:"-20";s:5:"Aring";s:3:"-20";s:6:"Atilde";s:3:"-20";}s:6:"Ncaron";a:10:{s:1:"A";s:3:"-20";s:6:"Aacute";s:3:"-20";s:6:"Abreve";s:3:"-20";s:11:"Acircumflex";s:3:"-20";s:9:"Adieresis";s:3:"-20";s:6:"Agrave";s:3:"-20";s:7:"Amacron";s:3:"-20";s:7:"Aogonek";s:3:"-20";s:5:"Aring";s:3:"-20";s:6:"Atilde";s:3:"-20";}s:12:"Ncommaaccent";a:10:{s:1:"A";s:3:"-20";s:6:"Aacute";s:3:"-20";s:6:"Abreve";s:3:"-20";s:11:"Acircumflex";s:3:"-20";s:9:"Adieresis";s:3:"-20";s:6:"Agrave";s:3:"-20";s:7:"Amacron";s:3:"-20";s:7:"Aogonek";s:3:"-20";s:5:"Aring";s:3:"-20";s:6:"Atilde";s:3:"-20";}s:6:"Ntilde";a:10:{s:1:"A";s:3:"-20";s:6:"Aacute";s:3:"-20";s:6:"Abreve";s:3:"-20";s:11:"Acircumflex";s:3:"-20";s:9:"Adieresis";s:3:"-20";s:6:"Agrave";s:3:"-20";s:7:"Amacron";s:3:"-20";s:7:"Aogonek";s:3:"-20";s:5:"Aring";s:3:"-20";s:6:"Atilde";s:3:"-20";}s:1:"O";a:19:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-50";s:1:"X";s:3:"-40";s:1:"Y";s:3:"-50";s:6:"Yacute";s:3:"-50";s:9:"Ydieresis";s:3:"-50";}s:6:"Oacute";a:19:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-50";s:1:"X";s:3:"-40";s:1:"Y";s:3:"-50";s:6:"Yacute";s:3:"-50";s:9:"Ydieresis";s:3:"-50";}s:11:"Ocircumflex";a:19:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-50";s:1:"X";s:3:"-40";s:1:"Y";s:3:"-50";s:6:"Yacute";s:3:"-50";s:9:"Ydieresis";s:3:"-50";}s:9:"Odieresis";a:19:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-50";s:1:"X";s:3:"-40";s:1:"Y";s:3:"-50";s:6:"Yacute";s:3:"-50";s:9:"Ydieresis";s:3:"-50";}s:6:"Ograve";a:19:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-50";s:1:"X";s:3:"-40";s:1:"Y";s:3:"-50";s:6:"Yacute";s:3:"-50";s:9:"Ydieresis";s:3:"-50";}s:13:"Ohungarumlaut";a:19:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-50";s:1:"X";s:3:"-40";s:1:"Y";s:3:"-50";s:6:"Yacute";s:3:"-50";s:9:"Ydieresis";s:3:"-50";}s:7:"Omacron";a:19:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-50";s:1:"X";s:3:"-40";s:1:"Y";s:3:"-50";s:6:"Yacute";s:3:"-50";s:9:"Ydieresis";s:3:"-50";}s:6:"Oslash";a:19:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-50";s:1:"X";s:3:"-40";s:1:"Y";s:3:"-50";s:6:"Yacute";s:3:"-50";s:9:"Ydieresis";s:3:"-50";}s:6:"Otilde";a:19:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-50";s:1:"X";s:3:"-40";s:1:"Y";s:3:"-50";s:6:"Yacute";s:3:"-50";s:9:"Ydieresis";s:3:"-50";}s:1:"P";a:40:{s:1:"A";s:3:"-74";s:6:"Aacute";s:3:"-74";s:6:"Abreve";s:3:"-74";s:11:"Acircumflex";s:3:"-74";s:9:"Adieresis";s:3:"-74";s:6:"Agrave";s:3:"-74";s:7:"Amacron";s:3:"-74";s:7:"Aogonek";s:3:"-74";s:5:"Aring";s:3:"-74";s:6:"Atilde";s:3:"-74";s:1:"a";s:3:"-10";s:6:"aacute";s:3:"-10";s:6:"abreve";s:3:"-10";s:11:"acircumflex";s:3:"-10";s:9:"adieresis";s:3:"-10";s:6:"agrave";s:3:"-10";s:7:"amacron";s:3:"-10";s:7:"aogonek";s:3:"-10";s:5:"aring";s:3:"-10";s:6:"atilde";s:3:"-10";s:5:"comma";s:3:"-92";s:1:"e";s:3:"-20";s:6:"eacute";s:3:"-20";s:6:"ecaron";s:3:"-20";s:11:"ecircumflex";s:3:"-20";s:9:"edieresis";s:3:"-20";s:10:"edotaccent";s:3:"-20";s:6:"egrave";s:3:"-20";s:7:"emacron";s:3:"-20";s:7:"eogonek";s:3:"-20";s:1:"o";s:3:"-20";s:6:"oacute";s:3:"-20";s:11:"ocircumflex";s:3:"-20";s:9:"odieresis";s:3:"-20";s:6:"ograve";s:3:"-20";s:13:"ohungarumlaut";s:3:"-20";s:7:"omacron";s:3:"-20";s:6:"oslash";s:3:"-20";s:6:"otilde";s:3:"-20";s:6:"period";s:4:"-110";}s:1:"Q";a:10:{s:1:"U";s:3:"-10";s:6:"Uacute";s:3:"-10";s:11:"Ucircumflex";s:3:"-10";s:9:"Udieresis";s:3:"-10";s:6:"Ugrave";s:3:"-10";s:13:"Uhungarumlaut";s:3:"-10";s:7:"Umacron";s:3:"-10";s:7:"Uogonek";s:3:"-10";s:5:"Uring";s:3:"-10";s:6:"period";s:3:"-20";}s:1:"R";a:26:{s:1:"O";s:3:"-30";s:6:"Oacute";s:3:"-30";s:11:"Ocircumflex";s:3:"-30";s:9:"Odieresis";s:3:"-30";s:6:"Ograve";s:3:"-30";s:13:"Ohungarumlaut";s:3:"-30";s:7:"Omacron";s:3:"-30";s:6:"Oslash";s:3:"-30";s:6:"Otilde";s:3:"-30";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"U";s:3:"-30";s:6:"Uacute";s:3:"-30";s:11:"Ucircumflex";s:3:"-30";s:9:"Udieresis";s:3:"-30";s:6:"Ugrave";s:3:"-30";s:13:"Uhungarumlaut";s:3:"-30";s:7:"Umacron";s:3:"-30";s:7:"Uogonek";s:3:"-30";s:5:"Uring";s:3:"-30";s:1:"V";s:3:"-55";s:1:"W";s:3:"-35";s:1:"Y";s:3:"-35";s:6:"Yacute";s:3:"-35";s:9:"Ydieresis";s:3:"-35";}s:6:"Racute";a:26:{s:1:"O";s:3:"-30";s:6:"Oacute";s:3:"-30";s:11:"Ocircumflex";s:3:"-30";s:9:"Odieresis";s:3:"-30";s:6:"Ograve";s:3:"-30";s:13:"Ohungarumlaut";s:3:"-30";s:7:"Omacron";s:3:"-30";s:6:"Oslash";s:3:"-30";s:6:"Otilde";s:3:"-30";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"U";s:3:"-30";s:6:"Uacute";s:3:"-30";s:11:"Ucircumflex";s:3:"-30";s:9:"Udieresis";s:3:"-30";s:6:"Ugrave";s:3:"-30";s:13:"Uhungarumlaut";s:3:"-30";s:7:"Umacron";s:3:"-30";s:7:"Uogonek";s:3:"-30";s:5:"Uring";s:3:"-30";s:1:"V";s:3:"-55";s:1:"W";s:3:"-35";s:1:"Y";s:3:"-35";s:6:"Yacute";s:3:"-35";s:9:"Ydieresis";s:3:"-35";}s:6:"Rcaron";a:26:{s:1:"O";s:3:"-30";s:6:"Oacute";s:3:"-30";s:11:"Ocircumflex";s:3:"-30";s:9:"Odieresis";s:3:"-30";s:6:"Ograve";s:3:"-30";s:13:"Ohungarumlaut";s:3:"-30";s:7:"Omacron";s:3:"-30";s:6:"Oslash";s:3:"-30";s:6:"Otilde";s:3:"-30";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"U";s:3:"-30";s:6:"Uacute";s:3:"-30";s:11:"Ucircumflex";s:3:"-30";s:9:"Udieresis";s:3:"-30";s:6:"Ugrave";s:3:"-30";s:13:"Uhungarumlaut";s:3:"-30";s:7:"Umacron";s:3:"-30";s:7:"Uogonek";s:3:"-30";s:5:"Uring";s:3:"-30";s:1:"V";s:3:"-55";s:1:"W";s:3:"-35";s:1:"Y";s:3:"-35";s:6:"Yacute";s:3:"-35";s:9:"Ydieresis";s:3:"-35";}s:12:"Rcommaaccent";a:26:{s:1:"O";s:3:"-30";s:6:"Oacute";s:3:"-30";s:11:"Ocircumflex";s:3:"-30";s:9:"Odieresis";s:3:"-30";s:6:"Ograve";s:3:"-30";s:13:"Ohungarumlaut";s:3:"-30";s:7:"Omacron";s:3:"-30";s:6:"Oslash";s:3:"-30";s:6:"Otilde";s:3:"-30";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"U";s:3:"-30";s:6:"Uacute";s:3:"-30";s:11:"Ucircumflex";s:3:"-30";s:9:"Udieresis";s:3:"-30";s:6:"Ugrave";s:3:"-30";s:13:"Uhungarumlaut";s:3:"-30";s:7:"Umacron";s:3:"-30";s:7:"Uogonek";s:3:"-30";s:5:"Uring";s:3:"-30";s:1:"V";s:3:"-55";s:1:"W";s:3:"-35";s:1:"Y";s:3:"-35";s:6:"Yacute";s:3:"-35";s:9:"Ydieresis";s:3:"-35";}s:1:"T";a:72:{s:1:"A";s:3:"-90";s:6:"Aacute";s:3:"-90";s:6:"Abreve";s:3:"-90";s:11:"Acircumflex";s:3:"-90";s:9:"Adieresis";s:3:"-90";s:6:"Agrave";s:3:"-90";s:7:"Amacron";s:3:"-90";s:7:"Aogonek";s:3:"-90";s:5:"Aring";s:3:"-90";s:6:"Atilde";s:3:"-90";s:1:"O";s:3:"-18";s:6:"Oacute";s:3:"-18";s:11:"Ocircumflex";s:3:"-18";s:9:"Odieresis";s:3:"-18";s:6:"Ograve";s:3:"-18";s:13:"Ohungarumlaut";s:3:"-18";s:7:"Omacron";s:3:"-18";s:6:"Oslash";s:3:"-18";s:6:"Otilde";s:3:"-18";s:1:"a";s:3:"-92";s:6:"aacute";s:3:"-92";s:6:"abreve";s:3:"-52";s:11:"acircumflex";s:3:"-52";s:9:"adieresis";s:3:"-52";s:6:"agrave";s:3:"-52";s:7:"amacron";s:3:"-52";s:7:"aogonek";s:3:"-92";s:5:"aring";s:3:"-92";s:6:"atilde";s:3:"-52";s:5:"colon";s:3:"-74";s:5:"comma";s:3:"-74";s:1:"e";s:3:"-92";s:6:"eacute";s:3:"-92";s:6:"ecaron";s:3:"-92";s:11:"ecircumflex";s:3:"-92";s:9:"edieresis";s:3:"-52";s:10:"edotaccent";s:3:"-92";s:6:"egrave";s:3:"-52";s:7:"emacron";s:3:"-52";s:7:"eogonek";s:3:"-92";s:6:"hyphen";s:3:"-92";s:1:"i";s:3:"-18";s:6:"iacute";s:3:"-18";s:7:"iogonek";s:3:"-18";s:1:"o";s:3:"-92";s:6:"oacute";s:3:"-92";s:11:"ocircumflex";s:3:"-92";s:9:"odieresis";s:3:"-92";s:6:"ograve";s:3:"-92";s:13:"ohungarumlaut";s:3:"-92";s:7:"omacron";s:3:"-92";s:6:"oslash";s:3:"-92";s:6:"otilde";s:3:"-92";s:6:"period";s:3:"-90";s:1:"r";s:3:"-74";s:6:"racute";s:3:"-74";s:6:"rcaron";s:3:"-74";s:12:"rcommaaccent";s:3:"-74";s:9:"semicolon";s:3:"-74";s:1:"u";s:3:"-92";s:6:"uacute";s:3:"-92";s:11:"ucircumflex";s:3:"-92";s:9:"udieresis";s:3:"-92";s:6:"ugrave";s:3:"-92";s:13:"uhungarumlaut";s:3:"-92";s:7:"umacron";s:3:"-92";s:7:"uogonek";s:3:"-92";s:5:"uring";s:3:"-92";s:1:"w";s:3:"-74";s:1:"y";s:3:"-34";s:6:"yacute";s:3:"-34";s:9:"ydieresis";s:3:"-34";}s:6:"Tcaron";a:72:{s:1:"A";s:3:"-90";s:6:"Aacute";s:3:"-90";s:6:"Abreve";s:3:"-90";s:11:"Acircumflex";s:3:"-90";s:9:"Adieresis";s:3:"-90";s:6:"Agrave";s:3:"-90";s:7:"Amacron";s:3:"-90";s:7:"Aogonek";s:3:"-90";s:5:"Aring";s:3:"-90";s:6:"Atilde";s:3:"-90";s:1:"O";s:3:"-18";s:6:"Oacute";s:3:"-18";s:11:"Ocircumflex";s:3:"-18";s:9:"Odieresis";s:3:"-18";s:6:"Ograve";s:3:"-18";s:13:"Ohungarumlaut";s:3:"-18";s:7:"Omacron";s:3:"-18";s:6:"Oslash";s:3:"-18";s:6:"Otilde";s:3:"-18";s:1:"a";s:3:"-92";s:6:"aacute";s:3:"-92";s:6:"abreve";s:3:"-52";s:11:"acircumflex";s:3:"-52";s:9:"adieresis";s:3:"-52";s:6:"agrave";s:3:"-52";s:7:"amacron";s:3:"-52";s:7:"aogonek";s:3:"-92";s:5:"aring";s:3:"-92";s:6:"atilde";s:3:"-52";s:5:"colon";s:3:"-74";s:5:"comma";s:3:"-74";s:1:"e";s:3:"-92";s:6:"eacute";s:3:"-92";s:6:"ecaron";s:3:"-92";s:11:"ecircumflex";s:3:"-92";s:9:"edieresis";s:3:"-52";s:10:"edotaccent";s:3:"-92";s:6:"egrave";s:3:"-52";s:7:"emacron";s:3:"-52";s:7:"eogonek";s:3:"-92";s:6:"hyphen";s:3:"-92";s:1:"i";s:3:"-18";s:6:"iacute";s:3:"-18";s:7:"iogonek";s:3:"-18";s:1:"o";s:3:"-92";s:6:"oacute";s:3:"-92";s:11:"ocircumflex";s:3:"-92";s:9:"odieresis";s:3:"-92";s:6:"ograve";s:3:"-92";s:13:"ohungarumlaut";s:3:"-92";s:7:"omacron";s:3:"-92";s:6:"oslash";s:3:"-92";s:6:"otilde";s:3:"-92";s:6:"period";s:3:"-90";s:1:"r";s:3:"-74";s:6:"racute";s:3:"-74";s:6:"rcaron";s:3:"-74";s:12:"rcommaaccent";s:3:"-74";s:9:"semicolon";s:3:"-74";s:1:"u";s:3:"-92";s:6:"uacute";s:3:"-92";s:11:"ucircumflex";s:3:"-92";s:9:"udieresis";s:3:"-92";s:6:"ugrave";s:3:"-92";s:13:"uhungarumlaut";s:3:"-92";s:7:"umacron";s:3:"-92";s:7:"uogonek";s:3:"-92";s:5:"uring";s:3:"-92";s:1:"w";s:3:"-74";s:1:"y";s:3:"-34";s:6:"yacute";s:3:"-34";s:9:"ydieresis";s:3:"-34";}s:12:"Tcommaaccent";a:72:{s:1:"A";s:3:"-90";s:6:"Aacute";s:3:"-90";s:6:"Abreve";s:3:"-90";s:11:"Acircumflex";s:3:"-90";s:9:"Adieresis";s:3:"-90";s:6:"Agrave";s:3:"-90";s:7:"Amacron";s:3:"-90";s:7:"Aogonek";s:3:"-90";s:5:"Aring";s:3:"-90";s:6:"Atilde";s:3:"-90";s:1:"O";s:3:"-18";s:6:"Oacute";s:3:"-18";s:11:"Ocircumflex";s:3:"-18";s:9:"Odieresis";s:3:"-18";s:6:"Ograve";s:3:"-18";s:13:"Ohungarumlaut";s:3:"-18";s:7:"Omacron";s:3:"-18";s:6:"Oslash";s:3:"-18";s:6:"Otilde";s:3:"-18";s:1:"a";s:3:"-92";s:6:"aacute";s:3:"-92";s:6:"abreve";s:3:"-52";s:11:"acircumflex";s:3:"-52";s:9:"adieresis";s:3:"-52";s:6:"agrave";s:3:"-52";s:7:"amacron";s:3:"-52";s:7:"aogonek";s:3:"-92";s:5:"aring";s:3:"-92";s:6:"atilde";s:3:"-52";s:5:"colon";s:3:"-74";s:5:"comma";s:3:"-74";s:1:"e";s:3:"-92";s:6:"eacute";s:3:"-92";s:6:"ecaron";s:3:"-92";s:11:"ecircumflex";s:3:"-92";s:9:"edieresis";s:3:"-52";s:10:"edotaccent";s:3:"-92";s:6:"egrave";s:3:"-52";s:7:"emacron";s:3:"-52";s:7:"eogonek";s:3:"-92";s:6:"hyphen";s:3:"-92";s:1:"i";s:3:"-18";s:6:"iacute";s:3:"-18";s:7:"iogonek";s:3:"-18";s:1:"o";s:3:"-92";s:6:"oacute";s:3:"-92";s:11:"ocircumflex";s:3:"-92";s:9:"odieresis";s:3:"-92";s:6:"ograve";s:3:"-92";s:13:"ohungarumlaut";s:3:"-92";s:7:"omacron";s:3:"-92";s:6:"oslash";s:3:"-92";s:6:"otilde";s:3:"-92";s:6:"period";s:3:"-90";s:1:"r";s:3:"-74";s:6:"racute";s:3:"-74";s:6:"rcaron";s:3:"-74";s:12:"rcommaaccent";s:3:"-74";s:9:"semicolon";s:3:"-74";s:1:"u";s:3:"-92";s:6:"uacute";s:3:"-92";s:11:"ucircumflex";s:3:"-92";s:9:"udieresis";s:3:"-92";s:6:"ugrave";s:3:"-92";s:13:"uhungarumlaut";s:3:"-92";s:7:"umacron";s:3:"-92";s:7:"uogonek";s:3:"-92";s:5:"uring";s:3:"-92";s:1:"w";s:3:"-74";s:1:"y";s:3:"-34";s:6:"yacute";s:3:"-34";s:9:"ydieresis";s:3:"-34";}s:1:"U";a:12:{s:1:"A";s:3:"-60";s:6:"Aacute";s:3:"-60";s:6:"Abreve";s:3:"-60";s:11:"Acircumflex";s:3:"-60";s:9:"Adieresis";s:3:"-60";s:6:"Agrave";s:3:"-60";s:7:"Amacron";s:3:"-60";s:7:"Aogonek";s:3:"-60";s:5:"Aring";s:3:"-60";s:6:"Atilde";s:3:"-60";s:5:"comma";s:3:"-50";s:6:"period";s:3:"-50";}s:6:"Uacute";a:12:{s:1:"A";s:3:"-60";s:6:"Aacute";s:3:"-60";s:6:"Abreve";s:3:"-60";s:11:"Acircumflex";s:3:"-60";s:9:"Adieresis";s:3:"-60";s:6:"Agrave";s:3:"-60";s:7:"Amacron";s:3:"-60";s:7:"Aogonek";s:3:"-60";s:5:"Aring";s:3:"-60";s:6:"Atilde";s:3:"-60";s:5:"comma";s:3:"-50";s:6:"period";s:3:"-50";}s:11:"Ucircumflex";a:12:{s:1:"A";s:3:"-60";s:6:"Aacute";s:3:"-60";s:6:"Abreve";s:3:"-60";s:11:"Acircumflex";s:3:"-60";s:9:"Adieresis";s:3:"-60";s:6:"Agrave";s:3:"-60";s:7:"Amacron";s:3:"-60";s:7:"Aogonek";s:3:"-60";s:5:"Aring";s:3:"-60";s:6:"Atilde";s:3:"-60";s:5:"comma";s:3:"-50";s:6:"period";s:3:"-50";}s:9:"Udieresis";a:12:{s:1:"A";s:3:"-60";s:6:"Aacute";s:3:"-60";s:6:"Abreve";s:3:"-60";s:11:"Acircumflex";s:3:"-60";s:9:"Adieresis";s:3:"-60";s:6:"Agrave";s:3:"-60";s:7:"Amacron";s:3:"-60";s:7:"Aogonek";s:3:"-60";s:5:"Aring";s:3:"-60";s:6:"Atilde";s:3:"-60";s:5:"comma";s:3:"-50";s:6:"period";s:3:"-50";}s:6:"Ugrave";a:12:{s:1:"A";s:3:"-60";s:6:"Aacute";s:3:"-60";s:6:"Abreve";s:3:"-60";s:11:"Acircumflex";s:3:"-60";s:9:"Adieresis";s:3:"-60";s:6:"Agrave";s:3:"-60";s:7:"Amacron";s:3:"-60";s:7:"Aogonek";s:3:"-60";s:5:"Aring";s:3:"-60";s:6:"Atilde";s:3:"-60";s:5:"comma";s:3:"-50";s:6:"period";s:3:"-50";}s:13:"Uhungarumlaut";a:12:{s:1:"A";s:3:"-60";s:6:"Aacute";s:3:"-60";s:6:"Abreve";s:3:"-60";s:11:"Acircumflex";s:3:"-60";s:9:"Adieresis";s:3:"-60";s:6:"Agrave";s:3:"-60";s:7:"Amacron";s:3:"-60";s:7:"Aogonek";s:3:"-60";s:5:"Aring";s:3:"-60";s:6:"Atilde";s:3:"-60";s:5:"comma";s:3:"-50";s:6:"period";s:3:"-50";}s:7:"Umacron";a:12:{s:1:"A";s:3:"-60";s:6:"Aacute";s:3:"-60";s:6:"Abreve";s:3:"-60";s:11:"Acircumflex";s:3:"-60";s:9:"Adieresis";s:3:"-60";s:6:"Agrave";s:3:"-60";s:7:"Amacron";s:3:"-60";s:7:"Aogonek";s:3:"-60";s:5:"Aring";s:3:"-60";s:6:"Atilde";s:3:"-60";s:5:"comma";s:3:"-50";s:6:"period";s:3:"-50";}s:7:"Uogonek";a:12:{s:1:"A";s:3:"-60";s:6:"Aacute";s:3:"-60";s:6:"Abreve";s:3:"-60";s:11:"Acircumflex";s:3:"-60";s:9:"Adieresis";s:3:"-60";s:6:"Agrave";s:3:"-60";s:7:"Amacron";s:3:"-60";s:7:"Aogonek";s:3:"-60";s:5:"Aring";s:3:"-60";s:6:"Atilde";s:3:"-60";s:5:"comma";s:3:"-50";s:6:"period";s:3:"-50";}s:5:"Uring";a:12:{s:1:"A";s:3:"-60";s:6:"Aacute";s:3:"-60";s:6:"Abreve";s:3:"-60";s:11:"Acircumflex";s:3:"-60";s:9:"Adieresis";s:3:"-60";s:6:"Agrave";s:3:"-60";s:7:"Amacron";s:3:"-60";s:7:"Aogonek";s:3:"-60";s:5:"Aring";s:3:"-60";s:6:"Atilde";s:3:"-60";s:5:"comma";s:3:"-50";s:6:"period";s:3:"-50";}s:1:"V";a:71:{s:1:"A";s:4:"-135";s:6:"Aacute";s:4:"-135";s:6:"Abreve";s:4:"-135";s:11:"Acircumflex";s:4:"-135";s:9:"Adieresis";s:4:"-135";s:6:"Agrave";s:4:"-135";s:7:"Amacron";s:4:"-135";s:7:"Aogonek";s:4:"-135";s:5:"Aring";s:4:"-135";s:6:"Atilde";s:4:"-135";s:1:"G";s:3:"-30";s:6:"Gbreve";s:3:"-30";s:12:"Gcommaaccent";s:3:"-30";s:1:"O";s:3:"-45";s:6:"Oacute";s:3:"-45";s:11:"Ocircumflex";s:3:"-45";s:9:"Odieresis";s:3:"-45";s:6:"Ograve";s:3:"-45";s:13:"Ohungarumlaut";s:3:"-45";s:7:"Omacron";s:3:"-45";s:6:"Oslash";s:3:"-45";s:6:"Otilde";s:3:"-45";s:1:"a";s:3:"-92";s:6:"aacute";s:3:"-92";s:6:"abreve";s:3:"-92";s:11:"acircumflex";s:3:"-92";s:9:"adieresis";s:3:"-92";s:6:"agrave";s:3:"-92";s:7:"amacron";s:3:"-92";s:7:"aogonek";s:3:"-92";s:5:"aring";s:3:"-92";s:6:"atilde";s:3:"-92";s:5:"colon";s:3:"-92";s:5:"comma";s:4:"-129";s:1:"e";s:4:"-100";s:6:"eacute";s:4:"-100";s:6:"ecaron";s:4:"-100";s:11:"ecircumflex";s:4:"-100";s:9:"edieresis";s:4:"-100";s:10:"edotaccent";s:4:"-100";s:6:"egrave";s:4:"-100";s:7:"emacron";s:4:"-100";s:7:"eogonek";s:4:"-100";s:6:"hyphen";s:3:"-74";s:1:"i";s:3:"-37";s:6:"iacute";s:3:"-37";s:11:"icircumflex";s:3:"-37";s:9:"idieresis";s:3:"-37";s:6:"igrave";s:3:"-37";s:7:"imacron";s:3:"-37";s:7:"iogonek";s:3:"-37";s:1:"o";s:4:"-100";s:6:"oacute";s:4:"-100";s:11:"ocircumflex";s:4:"-100";s:9:"odieresis";s:4:"-100";s:6:"ograve";s:4:"-100";s:13:"ohungarumlaut";s:4:"-100";s:7:"omacron";s:4:"-100";s:6:"oslash";s:4:"-100";s:6:"otilde";s:4:"-100";s:6:"period";s:4:"-145";s:9:"semicolon";s:3:"-92";s:1:"u";s:3:"-92";s:6:"uacute";s:3:"-92";s:11:"ucircumflex";s:3:"-92";s:9:"udieresis";s:3:"-92";s:6:"ugrave";s:3:"-92";s:13:"uhungarumlaut";s:3:"-92";s:7:"umacron";s:3:"-92";s:7:"uogonek";s:3:"-92";s:5:"uring";s:3:"-92";}s:1:"W";a:67:{s:1:"A";s:4:"-120";s:6:"Aacute";s:4:"-120";s:6:"Abreve";s:4:"-120";s:11:"Acircumflex";s:4:"-120";s:9:"Adieresis";s:4:"-120";s:6:"Agrave";s:4:"-120";s:7:"Amacron";s:4:"-120";s:7:"Aogonek";s:4:"-120";s:5:"Aring";s:4:"-120";s:6:"Atilde";s:4:"-120";s:1:"O";s:3:"-10";s:6:"Oacute";s:3:"-10";s:11:"Ocircumflex";s:3:"-10";s:9:"Odieresis";s:3:"-10";s:6:"Ograve";s:3:"-10";s:13:"Ohungarumlaut";s:3:"-10";s:7:"Omacron";s:3:"-10";s:6:"Oslash";s:3:"-10";s:6:"Otilde";s:3:"-10";s:1:"a";s:3:"-65";s:6:"aacute";s:3:"-65";s:6:"abreve";s:3:"-65";s:11:"acircumflex";s:3:"-65";s:9:"adieresis";s:3:"-65";s:6:"agrave";s:3:"-65";s:7:"amacron";s:3:"-65";s:7:"aogonek";s:3:"-65";s:5:"aring";s:3:"-65";s:6:"atilde";s:3:"-65";s:5:"colon";s:3:"-55";s:5:"comma";s:3:"-92";s:1:"e";s:3:"-65";s:6:"eacute";s:3:"-65";s:6:"ecaron";s:3:"-65";s:11:"ecircumflex";s:3:"-65";s:9:"edieresis";s:3:"-65";s:10:"edotaccent";s:3:"-65";s:6:"egrave";s:3:"-65";s:7:"emacron";s:3:"-65";s:7:"eogonek";s:3:"-65";s:6:"hyphen";s:3:"-37";s:1:"i";s:3:"-18";s:6:"iacute";s:3:"-18";s:7:"iogonek";s:3:"-18";s:1:"o";s:3:"-75";s:6:"oacute";s:3:"-75";s:11:"ocircumflex";s:3:"-75";s:9:"odieresis";s:3:"-75";s:6:"ograve";s:3:"-75";s:13:"ohungarumlaut";s:3:"-75";s:7:"omacron";s:3:"-75";s:6:"oslash";s:3:"-75";s:6:"otilde";s:3:"-75";s:6:"period";s:3:"-92";s:9:"semicolon";s:3:"-55";s:1:"u";s:3:"-50";s:6:"uacute";s:3:"-50";s:11:"ucircumflex";s:3:"-50";s:9:"udieresis";s:3:"-50";s:6:"ugrave";s:3:"-50";s:13:"uhungarumlaut";s:3:"-50";s:7:"umacron";s:3:"-50";s:7:"uogonek";s:3:"-50";s:5:"uring";s:3:"-50";s:1:"y";s:3:"-60";s:6:"yacute";s:3:"-60";s:9:"ydieresis";s:3:"-60";}s:1:"Y";a:64:{s:1:"A";s:4:"-110";s:6:"Aacute";s:4:"-110";s:6:"Abreve";s:4:"-110";s:11:"Acircumflex";s:4:"-110";s:9:"Adieresis";s:4:"-110";s:6:"Agrave";s:4:"-110";s:7:"Amacron";s:4:"-110";s:7:"Aogonek";s:4:"-110";s:5:"Aring";s:4:"-110";s:6:"Atilde";s:4:"-110";s:1:"O";s:3:"-35";s:6:"Oacute";s:3:"-35";s:11:"Ocircumflex";s:3:"-35";s:9:"Odieresis";s:3:"-35";s:6:"Ograve";s:3:"-35";s:13:"Ohungarumlaut";s:3:"-35";s:7:"Omacron";s:3:"-35";s:6:"Oslash";s:3:"-35";s:6:"Otilde";s:3:"-35";s:1:"a";s:3:"-85";s:6:"aacute";s:3:"-85";s:6:"abreve";s:3:"-85";s:11:"acircumflex";s:3:"-85";s:9:"adieresis";s:3:"-85";s:6:"agrave";s:3:"-85";s:7:"amacron";s:3:"-85";s:7:"aogonek";s:3:"-85";s:5:"aring";s:3:"-85";s:6:"atilde";s:3:"-85";s:5:"colon";s:3:"-92";s:5:"comma";s:3:"-92";s:1:"e";s:4:"-111";s:6:"eacute";s:4:"-111";s:6:"ecaron";s:4:"-111";s:11:"ecircumflex";s:4:"-111";s:9:"edieresis";s:3:"-71";s:10:"edotaccent";s:4:"-111";s:6:"egrave";s:3:"-71";s:7:"emacron";s:3:"-71";s:7:"eogonek";s:4:"-111";s:6:"hyphen";s:3:"-92";s:1:"i";s:3:"-37";s:6:"iacute";s:3:"-37";s:7:"iogonek";s:3:"-37";s:1:"o";s:4:"-111";s:6:"oacute";s:4:"-111";s:11:"ocircumflex";s:4:"-111";s:9:"odieresis";s:4:"-111";s:6:"ograve";s:4:"-111";s:13:"ohungarumlaut";s:4:"-111";s:7:"omacron";s:4:"-111";s:6:"oslash";s:4:"-111";s:6:"otilde";s:4:"-111";s:6:"period";s:3:"-92";s:9:"semicolon";s:3:"-92";s:1:"u";s:3:"-92";s:6:"uacute";s:3:"-92";s:11:"ucircumflex";s:3:"-92";s:9:"udieresis";s:3:"-92";s:6:"ugrave";s:3:"-92";s:13:"uhungarumlaut";s:3:"-92";s:7:"umacron";s:3:"-92";s:7:"uogonek";s:3:"-92";s:5:"uring";s:3:"-92";}s:6:"Yacute";a:64:{s:1:"A";s:4:"-110";s:6:"Aacute";s:4:"-110";s:6:"Abreve";s:4:"-110";s:11:"Acircumflex";s:4:"-110";s:9:"Adieresis";s:4:"-110";s:6:"Agrave";s:4:"-110";s:7:"Amacron";s:4:"-110";s:7:"Aogonek";s:4:"-110";s:5:"Aring";s:4:"-110";s:6:"Atilde";s:4:"-110";s:1:"O";s:3:"-35";s:6:"Oacute";s:3:"-35";s:11:"Ocircumflex";s:3:"-35";s:9:"Odieresis";s:3:"-35";s:6:"Ograve";s:3:"-35";s:13:"Ohungarumlaut";s:3:"-35";s:7:"Omacron";s:3:"-35";s:6:"Oslash";s:3:"-35";s:6:"Otilde";s:3:"-35";s:1:"a";s:3:"-85";s:6:"aacute";s:3:"-85";s:6:"abreve";s:3:"-85";s:11:"acircumflex";s:3:"-85";s:9:"adieresis";s:3:"-85";s:6:"agrave";s:3:"-85";s:7:"amacron";s:3:"-85";s:7:"aogonek";s:3:"-85";s:5:"aring";s:3:"-85";s:6:"atilde";s:3:"-85";s:5:"colon";s:3:"-92";s:5:"comma";s:3:"-92";s:1:"e";s:4:"-111";s:6:"eacute";s:4:"-111";s:6:"ecaron";s:4:"-111";s:11:"ecircumflex";s:4:"-111";s:9:"edieresis";s:3:"-71";s:10:"edotaccent";s:4:"-111";s:6:"egrave";s:3:"-71";s:7:"emacron";s:3:"-71";s:7:"eogonek";s:4:"-111";s:6:"hyphen";s:3:"-92";s:1:"i";s:3:"-37";s:6:"iacute";s:3:"-37";s:7:"iogonek";s:3:"-37";s:1:"o";s:4:"-111";s:6:"oacute";s:4:"-111";s:11:"ocircumflex";s:4:"-111";s:9:"odieresis";s:4:"-111";s:6:"ograve";s:4:"-111";s:13:"ohungarumlaut";s:4:"-111";s:7:"omacron";s:4:"-111";s:6:"oslash";s:4:"-111";s:6:"otilde";s:4:"-111";s:6:"period";s:3:"-92";s:9:"semicolon";s:3:"-92";s:1:"u";s:3:"-92";s:6:"uacute";s:3:"-92";s:11:"ucircumflex";s:3:"-92";s:9:"udieresis";s:3:"-92";s:6:"ugrave";s:3:"-92";s:13:"uhungarumlaut";s:3:"-92";s:7:"umacron";s:3:"-92";s:7:"uogonek";s:3:"-92";s:5:"uring";s:3:"-92";}s:9:"Ydieresis";a:64:{s:1:"A";s:4:"-110";s:6:"Aacute";s:4:"-110";s:6:"Abreve";s:4:"-110";s:11:"Acircumflex";s:4:"-110";s:9:"Adieresis";s:4:"-110";s:6:"Agrave";s:4:"-110";s:7:"Amacron";s:4:"-110";s:7:"Aogonek";s:4:"-110";s:5:"Aring";s:4:"-110";s:6:"Atilde";s:4:"-110";s:1:"O";s:3:"-35";s:6:"Oacute";s:3:"-35";s:11:"Ocircumflex";s:3:"-35";s:9:"Odieresis";s:3:"-35";s:6:"Ograve";s:3:"-35";s:13:"Ohungarumlaut";s:3:"-35";s:7:"Omacron";s:3:"-35";s:6:"Oslash";s:3:"-35";s:6:"Otilde";s:3:"-35";s:1:"a";s:3:"-85";s:6:"aacute";s:3:"-85";s:6:"abreve";s:3:"-85";s:11:"acircumflex";s:3:"-85";s:9:"adieresis";s:3:"-85";s:6:"agrave";s:3:"-85";s:7:"amacron";s:3:"-85";s:7:"aogonek";s:3:"-85";s:5:"aring";s:3:"-85";s:6:"atilde";s:3:"-85";s:5:"colon";s:3:"-92";s:5:"comma";s:3:"-92";s:1:"e";s:4:"-111";s:6:"eacute";s:4:"-111";s:6:"ecaron";s:4:"-111";s:11:"ecircumflex";s:4:"-111";s:9:"edieresis";s:3:"-71";s:10:"edotaccent";s:4:"-111";s:6:"egrave";s:3:"-71";s:7:"emacron";s:3:"-71";s:7:"eogonek";s:4:"-111";s:6:"hyphen";s:3:"-92";s:1:"i";s:3:"-37";s:6:"iacute";s:3:"-37";s:7:"iogonek";s:3:"-37";s:1:"o";s:4:"-111";s:6:"oacute";s:4:"-111";s:11:"ocircumflex";s:4:"-111";s:9:"odieresis";s:4:"-111";s:6:"ograve";s:4:"-111";s:13:"ohungarumlaut";s:4:"-111";s:7:"omacron";s:4:"-111";s:6:"oslash";s:4:"-111";s:6:"otilde";s:4:"-111";s:6:"period";s:3:"-92";s:9:"semicolon";s:3:"-92";s:1:"u";s:3:"-92";s:6:"uacute";s:3:"-92";s:11:"ucircumflex";s:3:"-92";s:9:"udieresis";s:3:"-92";s:6:"ugrave";s:3:"-92";s:13:"uhungarumlaut";s:3:"-92";s:7:"umacron";s:3:"-92";s:7:"uogonek";s:3:"-92";s:5:"uring";s:3:"-92";}s:1:"a";a:1:{s:1:"v";s:3:"-25";}s:6:"aacute";a:1:{s:1:"v";s:3:"-25";}s:6:"abreve";a:1:{s:1:"v";s:3:"-25";}s:11:"acircumflex";a:1:{s:1:"v";s:3:"-25";}s:9:"adieresis";a:1:{s:1:"v";s:3:"-25";}s:6:"agrave";a:1:{s:1:"v";s:3:"-25";}s:7:"amacron";a:1:{s:1:"v";s:3:"-25";}s:7:"aogonek";a:1:{s:1:"v";s:3:"-25";}s:5:"aring";a:1:{s:1:"v";s:3:"-25";}s:6:"atilde";a:1:{s:1:"v";s:3:"-25";}s:1:"b";a:12:{s:1:"b";s:3:"-10";s:6:"period";s:3:"-40";s:1:"u";s:3:"-20";s:6:"uacute";s:3:"-20";s:11:"ucircumflex";s:3:"-20";s:9:"udieresis";s:3:"-20";s:6:"ugrave";s:3:"-20";s:13:"uhungarumlaut";s:3:"-20";s:7:"umacron";s:3:"-20";s:7:"uogonek";s:3:"-20";s:5:"uring";s:3:"-20";s:1:"v";s:3:"-15";}s:5:"comma";a:2:{s:13:"quotedblright";s:3:"-45";s:10:"quoteright";s:3:"-55";}s:1:"d";a:1:{s:1:"w";s:3:"-15";}s:6:"dcroat";a:1:{s:1:"w";s:3:"-15";}s:1:"e";a:1:{s:1:"v";s:3:"-15";}s:6:"eacute";a:1:{s:1:"v";s:3:"-15";}s:6:"ecaron";a:1:{s:1:"v";s:3:"-15";}s:11:"ecircumflex";a:1:{s:1:"v";s:3:"-15";}s:9:"edieresis";a:1:{s:1:"v";s:3:"-15";}s:10:"edotaccent";a:1:{s:1:"v";s:3:"-15";}s:6:"egrave";a:1:{s:1:"v";s:3:"-15";}s:7:"emacron";a:1:{s:1:"v";s:3:"-15";}s:7:"eogonek";a:1:{s:1:"v";s:3:"-15";}s:1:"f";a:15:{s:5:"comma";s:3:"-15";s:8:"dotlessi";s:3:"-35";s:1:"i";s:3:"-25";s:1:"o";s:3:"-25";s:6:"oacute";s:3:"-25";s:11:"ocircumflex";s:3:"-25";s:9:"odieresis";s:3:"-25";s:6:"ograve";s:3:"-25";s:13:"ohungarumlaut";s:3:"-25";s:7:"omacron";s:3:"-25";s:6:"oslash";s:3:"-25";s:6:"otilde";s:3:"-25";s:6:"period";s:3:"-15";s:13:"quotedblright";s:2:"50";s:10:"quoteright";s:2:"55";}s:1:"g";a:1:{s:6:"period";s:3:"-15";}s:6:"gbreve";a:1:{s:6:"period";s:3:"-15";}s:12:"gcommaaccent";a:1:{s:6:"period";s:3:"-15";}s:1:"h";a:3:{s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:1:"i";a:1:{s:1:"v";s:3:"-10";}s:6:"iacute";a:1:{s:1:"v";s:3:"-10";}s:11:"icircumflex";a:1:{s:1:"v";s:3:"-10";}s:9:"idieresis";a:1:{s:1:"v";s:3:"-10";}s:6:"igrave";a:1:{s:1:"v";s:3:"-10";}s:7:"imacron";a:1:{s:1:"v";s:3:"-10";}s:7:"iogonek";a:1:{s:1:"v";s:3:"-10";}s:1:"k";a:21:{s:1:"e";s:3:"-10";s:6:"eacute";s:3:"-10";s:6:"ecaron";s:3:"-10";s:11:"ecircumflex";s:3:"-10";s:9:"edieresis";s:3:"-10";s:10:"edotaccent";s:3:"-10";s:6:"egrave";s:3:"-10";s:7:"emacron";s:3:"-10";s:7:"eogonek";s:3:"-10";s:1:"o";s:3:"-15";s:6:"oacute";s:3:"-15";s:11:"ocircumflex";s:3:"-15";s:9:"odieresis";s:3:"-15";s:6:"ograve";s:3:"-15";s:13:"ohungarumlaut";s:3:"-15";s:7:"omacron";s:3:"-15";s:6:"oslash";s:3:"-15";s:6:"otilde";s:3:"-15";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:12:"kcommaaccent";a:21:{s:1:"e";s:3:"-10";s:6:"eacute";s:3:"-10";s:6:"ecaron";s:3:"-10";s:11:"ecircumflex";s:3:"-10";s:9:"edieresis";s:3:"-10";s:10:"edotaccent";s:3:"-10";s:6:"egrave";s:3:"-10";s:7:"emacron";s:3:"-10";s:7:"eogonek";s:3:"-10";s:1:"o";s:3:"-15";s:6:"oacute";s:3:"-15";s:11:"ocircumflex";s:3:"-15";s:9:"odieresis";s:3:"-15";s:6:"ograve";s:3:"-15";s:13:"ohungarumlaut";s:3:"-15";s:7:"omacron";s:3:"-15";s:6:"oslash";s:3:"-15";s:6:"otilde";s:3:"-15";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:1:"n";a:1:{s:1:"v";s:3:"-40";}s:6:"nacute";a:1:{s:1:"v";s:3:"-40";}s:6:"ncaron";a:1:{s:1:"v";s:3:"-40";}s:12:"ncommaaccent";a:1:{s:1:"v";s:3:"-40";}s:6:"ntilde";a:1:{s:1:"v";s:3:"-40";}s:1:"o";a:2:{s:1:"v";s:3:"-10";s:1:"w";s:3:"-10";}s:6:"oacute";a:2:{s:1:"v";s:3:"-10";s:1:"w";s:3:"-10";}s:11:"ocircumflex";a:2:{s:1:"v";s:3:"-10";s:1:"w";s:3:"-10";}s:9:"odieresis";a:2:{s:1:"v";s:3:"-10";s:1:"w";s:3:"-10";}s:6:"ograve";a:2:{s:1:"v";s:3:"-10";s:1:"w";s:3:"-10";}s:13:"ohungarumlaut";a:2:{s:1:"v";s:3:"-10";s:1:"w";s:3:"-10";}s:7:"omacron";a:2:{s:1:"v";s:3:"-10";s:1:"w";s:3:"-10";}s:6:"oslash";a:2:{s:1:"v";s:3:"-10";s:1:"w";s:3:"-10";}s:6:"otilde";a:2:{s:1:"v";s:3:"-10";s:1:"w";s:3:"-10";}s:6:"period";a:2:{s:13:"quotedblright";s:3:"-55";s:10:"quoteright";s:3:"-55";}s:12:"quotedblleft";a:10:{s:1:"A";s:3:"-10";s:6:"Aacute";s:3:"-10";s:6:"Abreve";s:3:"-10";s:11:"Acircumflex";s:3:"-10";s:9:"Adieresis";s:3:"-10";s:6:"Agrave";s:3:"-10";s:7:"Amacron";s:3:"-10";s:7:"Aogonek";s:3:"-10";s:5:"Aring";s:3:"-10";s:6:"Atilde";s:3:"-10";}s:9:"quoteleft";a:11:{s:1:"A";s:3:"-10";s:6:"Aacute";s:3:"-10";s:6:"Abreve";s:3:"-10";s:11:"Acircumflex";s:3:"-10";s:9:"Adieresis";s:3:"-10";s:6:"Agrave";s:3:"-10";s:7:"Amacron";s:3:"-10";s:7:"Aogonek";s:3:"-10";s:5:"Aring";s:3:"-10";s:6:"Atilde";s:3:"-10";s:9:"quoteleft";s:3:"-63";}s:10:"quoteright";a:14:{s:1:"d";s:3:"-20";s:6:"dcroat";s:3:"-20";s:10:"quoteright";s:3:"-63";s:1:"r";s:3:"-20";s:6:"racute";s:3:"-20";s:6:"rcaron";s:3:"-20";s:12:"rcommaaccent";s:3:"-20";s:1:"s";s:3:"-37";s:6:"sacute";s:3:"-37";s:6:"scaron";s:3:"-37";s:8:"scedilla";s:3:"-37";s:12:"scommaaccent";s:3:"-37";s:5:"space";s:3:"-74";s:1:"v";s:3:"-20";}s:1:"r";a:36:{s:1:"c";s:3:"-18";s:6:"cacute";s:3:"-18";s:6:"ccaron";s:3:"-18";s:8:"ccedilla";s:3:"-18";s:5:"comma";s:3:"-92";s:1:"e";s:3:"-18";s:6:"eacute";s:3:"-18";s:6:"ecaron";s:3:"-18";s:11:"ecircumflex";s:3:"-18";s:9:"edieresis";s:3:"-18";s:10:"edotaccent";s:3:"-18";s:6:"egrave";s:3:"-18";s:7:"emacron";s:3:"-18";s:7:"eogonek";s:3:"-18";s:1:"g";s:3:"-10";s:6:"gbreve";s:3:"-10";s:12:"gcommaaccent";s:3:"-10";s:6:"hyphen";s:3:"-37";s:1:"n";s:3:"-15";s:6:"nacute";s:3:"-15";s:6:"ncaron";s:3:"-15";s:12:"ncommaaccent";s:3:"-15";s:6:"ntilde";s:3:"-15";s:1:"o";s:3:"-18";s:6:"oacute";s:3:"-18";s:11:"ocircumflex";s:3:"-18";s:9:"odieresis";s:3:"-18";s:6:"ograve";s:3:"-18";s:13:"ohungarumlaut";s:3:"-18";s:7:"omacron";s:3:"-18";s:6:"oslash";s:3:"-18";s:6:"otilde";s:3:"-18";s:1:"p";s:3:"-10";s:6:"period";s:4:"-100";s:1:"q";s:3:"-18";s:1:"v";s:3:"-10";}s:6:"racute";a:36:{s:1:"c";s:3:"-18";s:6:"cacute";s:3:"-18";s:6:"ccaron";s:3:"-18";s:8:"ccedilla";s:3:"-18";s:5:"comma";s:3:"-92";s:1:"e";s:3:"-18";s:6:"eacute";s:3:"-18";s:6:"ecaron";s:3:"-18";s:11:"ecircumflex";s:3:"-18";s:9:"edieresis";s:3:"-18";s:10:"edotaccent";s:3:"-18";s:6:"egrave";s:3:"-18";s:7:"emacron";s:3:"-18";s:7:"eogonek";s:3:"-18";s:1:"g";s:3:"-10";s:6:"gbreve";s:3:"-10";s:12:"gcommaaccent";s:3:"-10";s:6:"hyphen";s:3:"-37";s:1:"n";s:3:"-15";s:6:"nacute";s:3:"-15";s:6:"ncaron";s:3:"-15";s:12:"ncommaaccent";s:3:"-15";s:6:"ntilde";s:3:"-15";s:1:"o";s:3:"-18";s:6:"oacute";s:3:"-18";s:11:"ocircumflex";s:3:"-18";s:9:"odieresis";s:3:"-18";s:6:"ograve";s:3:"-18";s:13:"ohungarumlaut";s:3:"-18";s:7:"omacron";s:3:"-18";s:6:"oslash";s:3:"-18";s:6:"otilde";s:3:"-18";s:1:"p";s:3:"-10";s:6:"period";s:4:"-100";s:1:"q";s:3:"-18";s:1:"v";s:3:"-10";}s:6:"rcaron";a:36:{s:1:"c";s:3:"-18";s:6:"cacute";s:3:"-18";s:6:"ccaron";s:3:"-18";s:8:"ccedilla";s:3:"-18";s:5:"comma";s:3:"-92";s:1:"e";s:3:"-18";s:6:"eacute";s:3:"-18";s:6:"ecaron";s:3:"-18";s:11:"ecircumflex";s:3:"-18";s:9:"edieresis";s:3:"-18";s:10:"edotaccent";s:3:"-18";s:6:"egrave";s:3:"-18";s:7:"emacron";s:3:"-18";s:7:"eogonek";s:3:"-18";s:1:"g";s:3:"-10";s:6:"gbreve";s:3:"-10";s:12:"gcommaaccent";s:3:"-10";s:6:"hyphen";s:3:"-37";s:1:"n";s:3:"-15";s:6:"nacute";s:3:"-15";s:6:"ncaron";s:3:"-15";s:12:"ncommaaccent";s:3:"-15";s:6:"ntilde";s:3:"-15";s:1:"o";s:3:"-18";s:6:"oacute";s:3:"-18";s:11:"ocircumflex";s:3:"-18";s:9:"odieresis";s:3:"-18";s:6:"ograve";s:3:"-18";s:13:"ohungarumlaut";s:3:"-18";s:7:"omacron";s:3:"-18";s:6:"oslash";s:3:"-18";s:6:"otilde";s:3:"-18";s:1:"p";s:3:"-10";s:6:"period";s:4:"-100";s:1:"q";s:3:"-18";s:1:"v";s:3:"-10";}s:12:"rcommaaccent";a:36:{s:1:"c";s:3:"-18";s:6:"cacute";s:3:"-18";s:6:"ccaron";s:3:"-18";s:8:"ccedilla";s:3:"-18";s:5:"comma";s:3:"-92";s:1:"e";s:3:"-18";s:6:"eacute";s:3:"-18";s:6:"ecaron";s:3:"-18";s:11:"ecircumflex";s:3:"-18";s:9:"edieresis";s:3:"-18";s:10:"edotaccent";s:3:"-18";s:6:"egrave";s:3:"-18";s:7:"emacron";s:3:"-18";s:7:"eogonek";s:3:"-18";s:1:"g";s:3:"-10";s:6:"gbreve";s:3:"-10";s:12:"gcommaaccent";s:3:"-10";s:6:"hyphen";s:3:"-37";s:1:"n";s:3:"-15";s:6:"nacute";s:3:"-15";s:6:"ncaron";s:3:"-15";s:12:"ncommaaccent";s:3:"-15";s:6:"ntilde";s:3:"-15";s:1:"o";s:3:"-18";s:6:"oacute";s:3:"-18";s:11:"ocircumflex";s:3:"-18";s:9:"odieresis";s:3:"-18";s:6:"ograve";s:3:"-18";s:13:"ohungarumlaut";s:3:"-18";s:7:"omacron";s:3:"-18";s:6:"oslash";s:3:"-18";s:6:"otilde";s:3:"-18";s:1:"p";s:3:"-10";s:6:"period";s:4:"-100";s:1:"q";s:3:"-18";s:1:"v";s:3:"-10";}s:5:"space";a:18:{s:1:"A";s:3:"-55";s:6:"Aacute";s:3:"-55";s:6:"Abreve";s:3:"-55";s:11:"Acircumflex";s:3:"-55";s:9:"Adieresis";s:3:"-55";s:6:"Agrave";s:3:"-55";s:7:"Amacron";s:3:"-55";s:7:"Aogonek";s:3:"-55";s:5:"Aring";s:3:"-55";s:6:"Atilde";s:3:"-55";s:1:"T";s:3:"-30";s:6:"Tcaron";s:3:"-30";s:12:"Tcommaaccent";s:3:"-30";s:1:"V";s:3:"-45";s:1:"W";s:3:"-30";s:1:"Y";s:3:"-55";s:6:"Yacute";s:3:"-55";s:9:"Ydieresis";s:3:"-55";}s:1:"v";a:30:{s:1:"a";s:3:"-10";s:6:"aacute";s:3:"-10";s:6:"abreve";s:3:"-10";s:11:"acircumflex";s:3:"-10";s:9:"adieresis";s:3:"-10";s:6:"agrave";s:3:"-10";s:7:"amacron";s:3:"-10";s:7:"aogonek";s:3:"-10";s:5:"aring";s:3:"-10";s:6:"atilde";s:3:"-10";s:5:"comma";s:3:"-55";s:1:"e";s:3:"-10";s:6:"eacute";s:3:"-10";s:6:"ecaron";s:3:"-10";s:11:"ecircumflex";s:3:"-10";s:9:"edieresis";s:3:"-10";s:10:"edotaccent";s:3:"-10";s:6:"egrave";s:3:"-10";s:7:"emacron";s:3:"-10";s:7:"eogonek";s:3:"-10";s:1:"o";s:3:"-10";s:6:"oacute";s:3:"-10";s:11:"ocircumflex";s:3:"-10";s:9:"odieresis";s:3:"-10";s:6:"ograve";s:3:"-10";s:13:"ohungarumlaut";s:3:"-10";s:7:"omacron";s:3:"-10";s:6:"oslash";s:3:"-10";s:6:"otilde";s:3:"-10";s:6:"period";s:3:"-70";}s:1:"w";a:11:{s:5:"comma";s:3:"-55";s:1:"o";s:3:"-10";s:6:"oacute";s:3:"-10";s:11:"ocircumflex";s:3:"-10";s:9:"odieresis";s:3:"-10";s:6:"ograve";s:3:"-10";s:13:"ohungarumlaut";s:3:"-10";s:7:"omacron";s:3:"-10";s:6:"oslash";s:3:"-10";s:6:"otilde";s:3:"-10";s:6:"period";s:3:"-70";}s:1:"y";a:20:{s:5:"comma";s:3:"-55";s:1:"e";s:3:"-10";s:6:"eacute";s:3:"-10";s:6:"ecaron";s:3:"-10";s:11:"ecircumflex";s:3:"-10";s:9:"edieresis";s:3:"-10";s:10:"edotaccent";s:3:"-10";s:6:"egrave";s:3:"-10";s:7:"emacron";s:3:"-10";s:7:"eogonek";s:3:"-10";s:1:"o";s:3:"-25";s:6:"oacute";s:3:"-25";s:11:"ocircumflex";s:3:"-25";s:9:"odieresis";s:3:"-25";s:6:"ograve";s:3:"-25";s:13:"ohungarumlaut";s:3:"-25";s:7:"omacron";s:3:"-25";s:6:"oslash";s:3:"-25";s:6:"otilde";s:3:"-25";s:6:"period";s:3:"-70";}s:6:"yacute";a:20:{s:5:"comma";s:3:"-55";s:1:"e";s:3:"-10";s:6:"eacute";s:3:"-10";s:6:"ecaron";s:3:"-10";s:11:"ecircumflex";s:3:"-10";s:9:"edieresis";s:3:"-10";s:10:"edotaccent";s:3:"-10";s:6:"egrave";s:3:"-10";s:7:"emacron";s:3:"-10";s:7:"eogonek";s:3:"-10";s:1:"o";s:3:"-25";s:6:"oacute";s:3:"-25";s:11:"ocircumflex";s:3:"-25";s:9:"odieresis";s:3:"-25";s:6:"ograve";s:3:"-25";s:13:"ohungarumlaut";s:3:"-25";s:7:"omacron";s:3:"-25";s:6:"oslash";s:3:"-25";s:6:"otilde";s:3:"-25";s:6:"period";s:3:"-70";}s:9:"ydieresis";a:20:{s:5:"comma";s:3:"-55";s:1:"e";s:3:"-10";s:6:"eacute";s:3:"-10";s:6:"ecaron";s:3:"-10";s:11:"ecircumflex";s:3:"-10";s:9:"edieresis";s:3:"-10";s:10:"edotaccent";s:3:"-10";s:6:"egrave";s:3:"-10";s:7:"emacron";s:3:"-10";s:7:"eogonek";s:3:"-10";s:1:"o";s:3:"-25";s:6:"oacute";s:3:"-25";s:11:"ocircumflex";s:3:"-25";s:9:"odieresis";s:3:"-25";s:6:"ograve";s:3:"-25";s:13:"ohungarumlaut";s:3:"-25";s:7:"omacron";s:3:"-25";s:6:"oslash";s:3:"-25";s:6:"otilde";s:3:"-25";s:6:"period";s:3:"-70";}}s:9:"_version_";i:1;}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/php_Times-BoldItalic.afm b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/php_Times-BoldItalic.afm new file mode 100755 index 00000000..6a8c171a --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/php_Times-BoldItalic.afm @@ -0,0 +1 @@ +a:22:{s:8:"FontName";s:16:"Times-BoldItalic";s:8:"FullName";s:17:"Times Bold Italic";s:10:"FamilyName";s:5:"Times";s:6:"Weight";s:4:"Bold";s:11:"ItalicAngle";s:3:"-15";s:12:"IsFixedPitch";s:5:"false";s:12:"CharacterSet";s:13:"ExtendedRoman";s:8:"FontBBox";a:4:{i:0;s:4:"-200";i:1;s:4:"-218";i:2;s:3:"996";i:3;s:3:"921";}s:17:"UnderlinePosition";s:4:"-100";s:18:"UnderlineThickness";s:2:"50";s:7:"Version";s:7:"002.000";s:14:"EncodingScheme";s:21:"AdobeStandardEncoding";s:9:"CapHeight";s:3:"669";s:7:"XHeight";s:3:"462";s:8:"Ascender";s:3:"683";s:9:"Descender";s:4:"-217";s:5:"StdHW";s:2:"42";s:5:"StdVW";s:3:"121";s:16:"StartCharMetrics";s:3:"315";s:1:"C";a:464:{i:32;a:4:{s:1:"C";s:2:"32";s:2:"WX";s:3:"250";s:1:"N";s:5:"space";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:1:"0";i:2;s:1:"0";i:3;s:1:"0";}}s:5:"space";a:4:{s:1:"C";s:2:"32";s:2:"WX";s:3:"250";s:1:"N";s:5:"space";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:1:"0";i:2;s:1:"0";i:3;s:1:"0";}}i:33;a:4:{s:1:"C";s:2:"33";s:2:"WX";s:3:"389";s:1:"N";s:6:"exclam";s:1:"B";a:4:{i:0;s:2:"67";i:1;s:3:"-13";i:2;s:3:"370";i:3;s:3:"684";}}s:6:"exclam";a:4:{s:1:"C";s:2:"33";s:2:"WX";s:3:"389";s:1:"N";s:6:"exclam";s:1:"B";a:4:{i:0;s:2:"67";i:1;s:3:"-13";i:2;s:3:"370";i:3;s:3:"684";}}i:34;a:4:{s:1:"C";s:2:"34";s:2:"WX";s:3:"555";s:1:"N";s:8:"quotedbl";s:1:"B";a:4:{i:0;s:3:"136";i:1;s:3:"398";i:2;s:3:"536";i:3;s:3:"685";}}s:8:"quotedbl";a:4:{s:1:"C";s:2:"34";s:2:"WX";s:3:"555";s:1:"N";s:8:"quotedbl";s:1:"B";a:4:{i:0;s:3:"136";i:1;s:3:"398";i:2;s:3:"536";i:3;s:3:"685";}}i:35;a:4:{s:1:"C";s:2:"35";s:2:"WX";s:3:"500";s:1:"N";s:10:"numbersign";s:1:"B";a:4:{i:0;s:3:"-33";i:1;s:1:"0";i:2;s:3:"533";i:3;s:3:"700";}}s:10:"numbersign";a:4:{s:1:"C";s:2:"35";s:2:"WX";s:3:"500";s:1:"N";s:10:"numbersign";s:1:"B";a:4:{i:0;s:3:"-33";i:1;s:1:"0";i:2;s:3:"533";i:3;s:3:"700";}}i:36;a:4:{s:1:"C";s:2:"36";s:2:"WX";s:3:"500";s:1:"N";s:6:"dollar";s:1:"B";a:4:{i:0;s:3:"-20";i:1;s:4:"-100";i:2;s:3:"497";i:3;s:3:"733";}}s:6:"dollar";a:4:{s:1:"C";s:2:"36";s:2:"WX";s:3:"500";s:1:"N";s:6:"dollar";s:1:"B";a:4:{i:0;s:3:"-20";i:1;s:4:"-100";i:2;s:3:"497";i:3;s:3:"733";}}i:37;a:4:{s:1:"C";s:2:"37";s:2:"WX";s:3:"833";s:1:"N";s:7:"percent";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:3:"-10";i:2;s:3:"793";i:3;s:3:"692";}}s:7:"percent";a:4:{s:1:"C";s:2:"37";s:2:"WX";s:3:"833";s:1:"N";s:7:"percent";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:3:"-10";i:2;s:3:"793";i:3;s:3:"692";}}i:38;a:4:{s:1:"C";s:2:"38";s:2:"WX";s:3:"778";s:1:"N";s:9:"ampersand";s:1:"B";a:4:{i:0;s:1:"5";i:1;s:3:"-19";i:2;s:3:"699";i:3;s:3:"682";}}s:9:"ampersand";a:4:{s:1:"C";s:2:"38";s:2:"WX";s:3:"778";s:1:"N";s:9:"ampersand";s:1:"B";a:4:{i:0;s:1:"5";i:1;s:3:"-19";i:2;s:3:"699";i:3;s:3:"682";}}i:39;a:4:{s:1:"C";s:2:"39";s:2:"WX";s:3:"333";s:1:"N";s:10:"quoteright";s:1:"B";a:4:{i:0;s:2:"98";i:1;s:3:"369";i:2;s:3:"302";i:3;s:3:"685";}}s:10:"quoteright";a:4:{s:1:"C";s:2:"39";s:2:"WX";s:3:"333";s:1:"N";s:10:"quoteright";s:1:"B";a:4:{i:0;s:2:"98";i:1;s:3:"369";i:2;s:3:"302";i:3;s:3:"685";}}i:40;a:4:{s:1:"C";s:2:"40";s:2:"WX";s:3:"333";s:1:"N";s:9:"parenleft";s:1:"B";a:4:{i:0;s:2:"28";i:1;s:4:"-179";i:2;s:3:"344";i:3;s:3:"685";}}s:9:"parenleft";a:4:{s:1:"C";s:2:"40";s:2:"WX";s:3:"333";s:1:"N";s:9:"parenleft";s:1:"B";a:4:{i:0;s:2:"28";i:1;s:4:"-179";i:2;s:3:"344";i:3;s:3:"685";}}i:41;a:4:{s:1:"C";s:2:"41";s:2:"WX";s:3:"333";s:1:"N";s:10:"parenright";s:1:"B";a:4:{i:0;s:3:"-44";i:1;s:4:"-179";i:2;s:3:"271";i:3;s:3:"685";}}s:10:"parenright";a:4:{s:1:"C";s:2:"41";s:2:"WX";s:3:"333";s:1:"N";s:10:"parenright";s:1:"B";a:4:{i:0;s:3:"-44";i:1;s:4:"-179";i:2;s:3:"271";i:3;s:3:"685";}}i:42;a:4:{s:1:"C";s:2:"42";s:2:"WX";s:3:"500";s:1:"N";s:8:"asterisk";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:3:"249";i:2;s:3:"456";i:3;s:3:"685";}}s:8:"asterisk";a:4:{s:1:"C";s:2:"42";s:2:"WX";s:3:"500";s:1:"N";s:8:"asterisk";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:3:"249";i:2;s:3:"456";i:3;s:3:"685";}}i:43;a:4:{s:1:"C";s:2:"43";s:2:"WX";s:3:"570";s:1:"N";s:4:"plus";s:1:"B";a:4:{i:0;s:2:"33";i:1;s:1:"0";i:2;s:3:"537";i:3;s:3:"506";}}s:4:"plus";a:4:{s:1:"C";s:2:"43";s:2:"WX";s:3:"570";s:1:"N";s:4:"plus";s:1:"B";a:4:{i:0;s:2:"33";i:1;s:1:"0";i:2;s:3:"537";i:3;s:3:"506";}}i:44;a:4:{s:1:"C";s:2:"44";s:2:"WX";s:3:"250";s:1:"N";s:5:"comma";s:1:"B";a:4:{i:0;s:3:"-60";i:1;s:4:"-182";i:2;s:3:"144";i:3;s:3:"134";}}s:5:"comma";a:4:{s:1:"C";s:2:"44";s:2:"WX";s:3:"250";s:1:"N";s:5:"comma";s:1:"B";a:4:{i:0;s:3:"-60";i:1;s:4:"-182";i:2;s:3:"144";i:3;s:3:"134";}}i:45;a:4:{s:1:"C";s:2:"45";s:2:"WX";s:3:"333";s:1:"N";s:6:"hyphen";s:1:"B";a:4:{i:0;s:1:"2";i:1;s:3:"166";i:2;s:3:"271";i:3;s:3:"282";}}s:6:"hyphen";a:4:{s:1:"C";s:2:"45";s:2:"WX";s:3:"333";s:1:"N";s:6:"hyphen";s:1:"B";a:4:{i:0;s:1:"2";i:1;s:3:"166";i:2;s:3:"271";i:3;s:3:"282";}}i:46;a:4:{s:1:"C";s:2:"46";s:2:"WX";s:3:"250";s:1:"N";s:6:"period";s:1:"B";a:4:{i:0;s:2:"-9";i:1;s:3:"-13";i:2;s:3:"139";i:3;s:3:"135";}}s:6:"period";a:4:{s:1:"C";s:2:"46";s:2:"WX";s:3:"250";s:1:"N";s:6:"period";s:1:"B";a:4:{i:0;s:2:"-9";i:1;s:3:"-13";i:2;s:3:"139";i:3;s:3:"135";}}i:47;a:4:{s:1:"C";s:2:"47";s:2:"WX";s:3:"278";s:1:"N";s:5:"slash";s:1:"B";a:4:{i:0;s:3:"-64";i:1;s:3:"-18";i:2;s:3:"342";i:3;s:3:"685";}}s:5:"slash";a:4:{s:1:"C";s:2:"47";s:2:"WX";s:3:"278";s:1:"N";s:5:"slash";s:1:"B";a:4:{i:0;s:3:"-64";i:1;s:3:"-18";i:2;s:3:"342";i:3;s:3:"685";}}i:48;a:4:{s:1:"C";s:2:"48";s:2:"WX";s:3:"500";s:1:"N";s:4:"zero";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:3:"-14";i:2;s:3:"477";i:3;s:3:"683";}}s:4:"zero";a:4:{s:1:"C";s:2:"48";s:2:"WX";s:3:"500";s:1:"N";s:4:"zero";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:3:"-14";i:2;s:3:"477";i:3;s:3:"683";}}i:49;a:4:{s:1:"C";s:2:"49";s:2:"WX";s:3:"500";s:1:"N";s:3:"one";s:1:"B";a:4:{i:0;s:1:"5";i:1;s:1:"0";i:2;s:3:"419";i:3;s:3:"683";}}s:3:"one";a:4:{s:1:"C";s:2:"49";s:2:"WX";s:3:"500";s:1:"N";s:3:"one";s:1:"B";a:4:{i:0;s:1:"5";i:1;s:1:"0";i:2;s:3:"419";i:3;s:3:"683";}}i:50;a:4:{s:1:"C";s:2:"50";s:2:"WX";s:3:"500";s:1:"N";s:3:"two";s:1:"B";a:4:{i:0;s:3:"-27";i:1;s:1:"0";i:2;s:3:"446";i:3;s:3:"683";}}s:3:"two";a:4:{s:1:"C";s:2:"50";s:2:"WX";s:3:"500";s:1:"N";s:3:"two";s:1:"B";a:4:{i:0;s:3:"-27";i:1;s:1:"0";i:2;s:3:"446";i:3;s:3:"683";}}i:51;a:4:{s:1:"C";s:2:"51";s:2:"WX";s:3:"500";s:1:"N";s:5:"three";s:1:"B";a:4:{i:0;s:3:"-15";i:1;s:3:"-13";i:2;s:3:"450";i:3;s:3:"683";}}s:5:"three";a:4:{s:1:"C";s:2:"51";s:2:"WX";s:3:"500";s:1:"N";s:5:"three";s:1:"B";a:4:{i:0;s:3:"-15";i:1;s:3:"-13";i:2;s:3:"450";i:3;s:3:"683";}}i:52;a:4:{s:1:"C";s:2:"52";s:2:"WX";s:3:"500";s:1:"N";s:4:"four";s:1:"B";a:4:{i:0;s:3:"-15";i:1;s:1:"0";i:2;s:3:"503";i:3;s:3:"683";}}s:4:"four";a:4:{s:1:"C";s:2:"52";s:2:"WX";s:3:"500";s:1:"N";s:4:"four";s:1:"B";a:4:{i:0;s:3:"-15";i:1;s:1:"0";i:2;s:3:"503";i:3;s:3:"683";}}i:53;a:4:{s:1:"C";s:2:"53";s:2:"WX";s:3:"500";s:1:"N";s:4:"five";s:1:"B";a:4:{i:0;s:3:"-11";i:1;s:3:"-13";i:2;s:3:"487";i:3;s:3:"669";}}s:4:"five";a:4:{s:1:"C";s:2:"53";s:2:"WX";s:3:"500";s:1:"N";s:4:"five";s:1:"B";a:4:{i:0;s:3:"-11";i:1;s:3:"-13";i:2;s:3:"487";i:3;s:3:"669";}}i:54;a:4:{s:1:"C";s:2:"54";s:2:"WX";s:3:"500";s:1:"N";s:3:"six";s:1:"B";a:4:{i:0;s:2:"23";i:1;s:3:"-15";i:2;s:3:"509";i:3;s:3:"679";}}s:3:"six";a:4:{s:1:"C";s:2:"54";s:2:"WX";s:3:"500";s:1:"N";s:3:"six";s:1:"B";a:4:{i:0;s:2:"23";i:1;s:3:"-15";i:2;s:3:"509";i:3;s:3:"679";}}i:55;a:4:{s:1:"C";s:2:"55";s:2:"WX";s:3:"500";s:1:"N";s:5:"seven";s:1:"B";a:4:{i:0;s:2:"52";i:1;s:1:"0";i:2;s:3:"525";i:3;s:3:"669";}}s:5:"seven";a:4:{s:1:"C";s:2:"55";s:2:"WX";s:3:"500";s:1:"N";s:5:"seven";s:1:"B";a:4:{i:0;s:2:"52";i:1;s:1:"0";i:2;s:3:"525";i:3;s:3:"669";}}i:56;a:4:{s:1:"C";s:2:"56";s:2:"WX";s:3:"500";s:1:"N";s:5:"eight";s:1:"B";a:4:{i:0;s:1:"3";i:1;s:3:"-13";i:2;s:3:"476";i:3;s:3:"683";}}s:5:"eight";a:4:{s:1:"C";s:2:"56";s:2:"WX";s:3:"500";s:1:"N";s:5:"eight";s:1:"B";a:4:{i:0;s:1:"3";i:1;s:3:"-13";i:2;s:3:"476";i:3;s:3:"683";}}i:57;a:4:{s:1:"C";s:2:"57";s:2:"WX";s:3:"500";s:1:"N";s:4:"nine";s:1:"B";a:4:{i:0;s:3:"-12";i:1;s:3:"-10";i:2;s:3:"475";i:3;s:3:"683";}}s:4:"nine";a:4:{s:1:"C";s:2:"57";s:2:"WX";s:3:"500";s:1:"N";s:4:"nine";s:1:"B";a:4:{i:0;s:3:"-12";i:1;s:3:"-10";i:2;s:3:"475";i:3;s:3:"683";}}i:58;a:4:{s:1:"C";s:2:"58";s:2:"WX";s:3:"333";s:1:"N";s:5:"colon";s:1:"B";a:4:{i:0;s:2:"23";i:1;s:3:"-13";i:2;s:3:"264";i:3;s:3:"459";}}s:5:"colon";a:4:{s:1:"C";s:2:"58";s:2:"WX";s:3:"333";s:1:"N";s:5:"colon";s:1:"B";a:4:{i:0;s:2:"23";i:1;s:3:"-13";i:2;s:3:"264";i:3;s:3:"459";}}i:59;a:4:{s:1:"C";s:2:"59";s:2:"WX";s:3:"333";s:1:"N";s:9:"semicolon";s:1:"B";a:4:{i:0;s:3:"-25";i:1;s:4:"-183";i:2;s:3:"264";i:3;s:3:"459";}}s:9:"semicolon";a:4:{s:1:"C";s:2:"59";s:2:"WX";s:3:"333";s:1:"N";s:9:"semicolon";s:1:"B";a:4:{i:0;s:3:"-25";i:1;s:4:"-183";i:2;s:3:"264";i:3;s:3:"459";}}i:60;a:4:{s:1:"C";s:2:"60";s:2:"WX";s:3:"570";s:1:"N";s:4:"less";s:1:"B";a:4:{i:0;s:2:"31";i:1;s:2:"-8";i:2;s:3:"539";i:3;s:3:"514";}}s:4:"less";a:4:{s:1:"C";s:2:"60";s:2:"WX";s:3:"570";s:1:"N";s:4:"less";s:1:"B";a:4:{i:0;s:2:"31";i:1;s:2:"-8";i:2;s:3:"539";i:3;s:3:"514";}}i:61;a:4:{s:1:"C";s:2:"61";s:2:"WX";s:3:"570";s:1:"N";s:5:"equal";s:1:"B";a:4:{i:0;s:2:"33";i:1;s:3:"107";i:2;s:3:"537";i:3;s:3:"399";}}s:5:"equal";a:4:{s:1:"C";s:2:"61";s:2:"WX";s:3:"570";s:1:"N";s:5:"equal";s:1:"B";a:4:{i:0;s:2:"33";i:1;s:3:"107";i:2;s:3:"537";i:3;s:3:"399";}}i:62;a:4:{s:1:"C";s:2:"62";s:2:"WX";s:3:"570";s:1:"N";s:7:"greater";s:1:"B";a:4:{i:0;s:2:"31";i:1;s:2:"-8";i:2;s:3:"539";i:3;s:3:"514";}}s:7:"greater";a:4:{s:1:"C";s:2:"62";s:2:"WX";s:3:"570";s:1:"N";s:7:"greater";s:1:"B";a:4:{i:0;s:2:"31";i:1;s:2:"-8";i:2;s:3:"539";i:3;s:3:"514";}}i:63;a:4:{s:1:"C";s:2:"63";s:2:"WX";s:3:"500";s:1:"N";s:8:"question";s:1:"B";a:4:{i:0;s:2:"79";i:1;s:3:"-13";i:2;s:3:"470";i:3;s:3:"684";}}s:8:"question";a:4:{s:1:"C";s:2:"63";s:2:"WX";s:3:"500";s:1:"N";s:8:"question";s:1:"B";a:4:{i:0;s:2:"79";i:1;s:3:"-13";i:2;s:3:"470";i:3;s:3:"684";}}i:64;a:4:{s:1:"C";s:2:"64";s:2:"WX";s:3:"832";s:1:"N";s:2:"at";s:1:"B";a:4:{i:0;s:2:"63";i:1;s:3:"-18";i:2;s:3:"770";i:3;s:3:"685";}}s:2:"at";a:4:{s:1:"C";s:2:"64";s:2:"WX";s:3:"832";s:1:"N";s:2:"at";s:1:"B";a:4:{i:0;s:2:"63";i:1;s:3:"-18";i:2;s:3:"770";i:3;s:3:"685";}}i:65;a:4:{s:1:"C";s:2:"65";s:2:"WX";s:3:"667";s:1:"N";s:1:"A";s:1:"B";a:4:{i:0;s:3:"-67";i:1;s:1:"0";i:2;s:3:"593";i:3;s:3:"683";}}s:1:"A";a:4:{s:1:"C";s:2:"65";s:2:"WX";s:3:"667";s:1:"N";s:1:"A";s:1:"B";a:4:{i:0;s:3:"-67";i:1;s:1:"0";i:2;s:3:"593";i:3;s:3:"683";}}i:66;a:4:{s:1:"C";s:2:"66";s:2:"WX";s:3:"667";s:1:"N";s:1:"B";s:1:"B";a:4:{i:0;s:3:"-24";i:1;s:1:"0";i:2;s:3:"624";i:3;s:3:"669";}}s:1:"B";a:4:{s:1:"C";s:2:"66";s:2:"WX";s:3:"667";s:1:"N";s:1:"B";s:1:"B";a:4:{i:0;s:3:"-24";i:1;s:1:"0";i:2;s:3:"624";i:3;s:3:"669";}}i:67;a:4:{s:1:"C";s:2:"67";s:2:"WX";s:3:"667";s:1:"N";s:1:"C";s:1:"B";a:4:{i:0;s:2:"32";i:1;s:3:"-18";i:2;s:3:"677";i:3;s:3:"685";}}s:1:"C";a:4:{s:1:"C";s:2:"67";s:2:"WX";s:3:"667";s:1:"N";s:1:"C";s:1:"B";a:4:{i:0;s:2:"32";i:1;s:3:"-18";i:2;s:3:"677";i:3;s:3:"685";}}i:68;a:4:{s:1:"C";s:2:"68";s:2:"WX";s:3:"722";s:1:"N";s:1:"D";s:1:"B";a:4:{i:0;s:3:"-46";i:1;s:1:"0";i:2;s:3:"685";i:3;s:3:"669";}}s:1:"D";a:4:{s:1:"C";s:2:"68";s:2:"WX";s:3:"722";s:1:"N";s:1:"D";s:1:"B";a:4:{i:0;s:3:"-46";i:1;s:1:"0";i:2;s:3:"685";i:3;s:3:"669";}}i:69;a:4:{s:1:"C";s:2:"69";s:2:"WX";s:3:"667";s:1:"N";s:1:"E";s:1:"B";a:4:{i:0;s:3:"-27";i:1;s:1:"0";i:2;s:3:"653";i:3;s:3:"669";}}s:1:"E";a:4:{s:1:"C";s:2:"69";s:2:"WX";s:3:"667";s:1:"N";s:1:"E";s:1:"B";a:4:{i:0;s:3:"-27";i:1;s:1:"0";i:2;s:3:"653";i:3;s:3:"669";}}i:70;a:4:{s:1:"C";s:2:"70";s:2:"WX";s:3:"667";s:1:"N";s:1:"F";s:1:"B";a:4:{i:0;s:3:"-13";i:1;s:1:"0";i:2;s:3:"660";i:3;s:3:"669";}}s:1:"F";a:4:{s:1:"C";s:2:"70";s:2:"WX";s:3:"667";s:1:"N";s:1:"F";s:1:"B";a:4:{i:0;s:3:"-13";i:1;s:1:"0";i:2;s:3:"660";i:3;s:3:"669";}}i:71;a:4:{s:1:"C";s:2:"71";s:2:"WX";s:3:"722";s:1:"N";s:1:"G";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:3:"-18";i:2;s:3:"706";i:3;s:3:"685";}}s:1:"G";a:4:{s:1:"C";s:2:"71";s:2:"WX";s:3:"722";s:1:"N";s:1:"G";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:3:"-18";i:2;s:3:"706";i:3;s:3:"685";}}i:72;a:4:{s:1:"C";s:2:"72";s:2:"WX";s:3:"778";s:1:"N";s:1:"H";s:1:"B";a:4:{i:0;s:3:"-24";i:1;s:1:"0";i:2;s:3:"799";i:3;s:3:"669";}}s:1:"H";a:4:{s:1:"C";s:2:"72";s:2:"WX";s:3:"778";s:1:"N";s:1:"H";s:1:"B";a:4:{i:0;s:3:"-24";i:1;s:1:"0";i:2;s:3:"799";i:3;s:3:"669";}}i:73;a:4:{s:1:"C";s:2:"73";s:2:"WX";s:3:"389";s:1:"N";s:1:"I";s:1:"B";a:4:{i:0;s:3:"-32";i:1;s:1:"0";i:2;s:3:"406";i:3;s:3:"669";}}s:1:"I";a:4:{s:1:"C";s:2:"73";s:2:"WX";s:3:"389";s:1:"N";s:1:"I";s:1:"B";a:4:{i:0;s:3:"-32";i:1;s:1:"0";i:2;s:3:"406";i:3;s:3:"669";}}i:74;a:4:{s:1:"C";s:2:"74";s:2:"WX";s:3:"500";s:1:"N";s:1:"J";s:1:"B";a:4:{i:0;s:3:"-46";i:1;s:3:"-99";i:2;s:3:"524";i:3;s:3:"669";}}s:1:"J";a:4:{s:1:"C";s:2:"74";s:2:"WX";s:3:"500";s:1:"N";s:1:"J";s:1:"B";a:4:{i:0;s:3:"-46";i:1;s:3:"-99";i:2;s:3:"524";i:3;s:3:"669";}}i:75;a:4:{s:1:"C";s:2:"75";s:2:"WX";s:3:"667";s:1:"N";s:1:"K";s:1:"B";a:4:{i:0;s:3:"-21";i:1;s:1:"0";i:2;s:3:"702";i:3;s:3:"669";}}s:1:"K";a:4:{s:1:"C";s:2:"75";s:2:"WX";s:3:"667";s:1:"N";s:1:"K";s:1:"B";a:4:{i:0;s:3:"-21";i:1;s:1:"0";i:2;s:3:"702";i:3;s:3:"669";}}i:76;a:4:{s:1:"C";s:2:"76";s:2:"WX";s:3:"611";s:1:"N";s:1:"L";s:1:"B";a:4:{i:0;s:3:"-22";i:1;s:1:"0";i:2;s:3:"590";i:3;s:3:"669";}}s:1:"L";a:4:{s:1:"C";s:2:"76";s:2:"WX";s:3:"611";s:1:"N";s:1:"L";s:1:"B";a:4:{i:0;s:3:"-22";i:1;s:1:"0";i:2;s:3:"590";i:3;s:3:"669";}}i:77;a:4:{s:1:"C";s:2:"77";s:2:"WX";s:3:"889";s:1:"N";s:1:"M";s:1:"B";a:4:{i:0;s:3:"-29";i:1;s:3:"-12";i:2;s:3:"917";i:3;s:3:"669";}}s:1:"M";a:4:{s:1:"C";s:2:"77";s:2:"WX";s:3:"889";s:1:"N";s:1:"M";s:1:"B";a:4:{i:0;s:3:"-29";i:1;s:3:"-12";i:2;s:3:"917";i:3;s:3:"669";}}i:78;a:4:{s:1:"C";s:2:"78";s:2:"WX";s:3:"722";s:1:"N";s:1:"N";s:1:"B";a:4:{i:0;s:3:"-27";i:1;s:3:"-15";i:2;s:3:"748";i:3;s:3:"669";}}s:1:"N";a:4:{s:1:"C";s:2:"78";s:2:"WX";s:3:"722";s:1:"N";s:1:"N";s:1:"B";a:4:{i:0;s:3:"-27";i:1;s:3:"-15";i:2;s:3:"748";i:3;s:3:"669";}}i:79;a:4:{s:1:"C";s:2:"79";s:2:"WX";s:3:"722";s:1:"N";s:1:"O";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:3:"-18";i:2;s:3:"691";i:3;s:3:"685";}}s:1:"O";a:4:{s:1:"C";s:2:"79";s:2:"WX";s:3:"722";s:1:"N";s:1:"O";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:3:"-18";i:2;s:3:"691";i:3;s:3:"685";}}i:80;a:4:{s:1:"C";s:2:"80";s:2:"WX";s:3:"611";s:1:"N";s:1:"P";s:1:"B";a:4:{i:0;s:3:"-27";i:1;s:1:"0";i:2;s:3:"613";i:3;s:3:"669";}}s:1:"P";a:4:{s:1:"C";s:2:"80";s:2:"WX";s:3:"611";s:1:"N";s:1:"P";s:1:"B";a:4:{i:0;s:3:"-27";i:1;s:1:"0";i:2;s:3:"613";i:3;s:3:"669";}}i:81;a:4:{s:1:"C";s:2:"81";s:2:"WX";s:3:"722";s:1:"N";s:1:"Q";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:4:"-208";i:2;s:3:"691";i:3;s:3:"685";}}s:1:"Q";a:4:{s:1:"C";s:2:"81";s:2:"WX";s:3:"722";s:1:"N";s:1:"Q";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:4:"-208";i:2;s:3:"691";i:3;s:3:"685";}}i:82;a:4:{s:1:"C";s:2:"82";s:2:"WX";s:3:"667";s:1:"N";s:1:"R";s:1:"B";a:4:{i:0;s:3:"-29";i:1;s:1:"0";i:2;s:3:"623";i:3;s:3:"669";}}s:1:"R";a:4:{s:1:"C";s:2:"82";s:2:"WX";s:3:"667";s:1:"N";s:1:"R";s:1:"B";a:4:{i:0;s:3:"-29";i:1;s:1:"0";i:2;s:3:"623";i:3;s:3:"669";}}i:83;a:4:{s:1:"C";s:2:"83";s:2:"WX";s:3:"556";s:1:"N";s:1:"S";s:1:"B";a:4:{i:0;s:1:"2";i:1;s:3:"-18";i:2;s:3:"526";i:3;s:3:"685";}}s:1:"S";a:4:{s:1:"C";s:2:"83";s:2:"WX";s:3:"556";s:1:"N";s:1:"S";s:1:"B";a:4:{i:0;s:1:"2";i:1;s:3:"-18";i:2;s:3:"526";i:3;s:3:"685";}}i:84;a:4:{s:1:"C";s:2:"84";s:2:"WX";s:3:"611";s:1:"N";s:1:"T";s:1:"B";a:4:{i:0;s:2:"50";i:1;s:1:"0";i:2;s:3:"650";i:3;s:3:"669";}}s:1:"T";a:4:{s:1:"C";s:2:"84";s:2:"WX";s:3:"611";s:1:"N";s:1:"T";s:1:"B";a:4:{i:0;s:2:"50";i:1;s:1:"0";i:2;s:3:"650";i:3;s:3:"669";}}i:85;a:4:{s:1:"C";s:2:"85";s:2:"WX";s:3:"722";s:1:"N";s:1:"U";s:1:"B";a:4:{i:0;s:2:"67";i:1;s:3:"-18";i:2;s:3:"744";i:3;s:3:"669";}}s:1:"U";a:4:{s:1:"C";s:2:"85";s:2:"WX";s:3:"722";s:1:"N";s:1:"U";s:1:"B";a:4:{i:0;s:2:"67";i:1;s:3:"-18";i:2;s:3:"744";i:3;s:3:"669";}}i:86;a:4:{s:1:"C";s:2:"86";s:2:"WX";s:3:"667";s:1:"N";s:1:"V";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:3:"-18";i:2;s:3:"715";i:3;s:3:"669";}}s:1:"V";a:4:{s:1:"C";s:2:"86";s:2:"WX";s:3:"667";s:1:"N";s:1:"V";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:3:"-18";i:2;s:3:"715";i:3;s:3:"669";}}i:87;a:4:{s:1:"C";s:2:"87";s:2:"WX";s:3:"889";s:1:"N";s:1:"W";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:3:"-18";i:2;s:3:"940";i:3;s:3:"669";}}s:1:"W";a:4:{s:1:"C";s:2:"87";s:2:"WX";s:3:"889";s:1:"N";s:1:"W";s:1:"B";a:4:{i:0;s:2:"65";i:1;s:3:"-18";i:2;s:3:"940";i:3;s:3:"669";}}i:88;a:4:{s:1:"C";s:2:"88";s:2:"WX";s:3:"667";s:1:"N";s:1:"X";s:1:"B";a:4:{i:0;s:3:"-24";i:1;s:1:"0";i:2;s:3:"694";i:3;s:3:"669";}}s:1:"X";a:4:{s:1:"C";s:2:"88";s:2:"WX";s:3:"667";s:1:"N";s:1:"X";s:1:"B";a:4:{i:0;s:3:"-24";i:1;s:1:"0";i:2;s:3:"694";i:3;s:3:"669";}}i:89;a:4:{s:1:"C";s:2:"89";s:2:"WX";s:3:"611";s:1:"N";s:1:"Y";s:1:"B";a:4:{i:0;s:2:"73";i:1;s:1:"0";i:2;s:3:"659";i:3;s:3:"669";}}s:1:"Y";a:4:{s:1:"C";s:2:"89";s:2:"WX";s:3:"611";s:1:"N";s:1:"Y";s:1:"B";a:4:{i:0;s:2:"73";i:1;s:1:"0";i:2;s:3:"659";i:3;s:3:"669";}}i:90;a:4:{s:1:"C";s:2:"90";s:2:"WX";s:3:"611";s:1:"N";s:1:"Z";s:1:"B";a:4:{i:0;s:3:"-11";i:1;s:1:"0";i:2;s:3:"590";i:3;s:3:"669";}}s:1:"Z";a:4:{s:1:"C";s:2:"90";s:2:"WX";s:3:"611";s:1:"N";s:1:"Z";s:1:"B";a:4:{i:0;s:3:"-11";i:1;s:1:"0";i:2;s:3:"590";i:3;s:3:"669";}}i:91;a:4:{s:1:"C";s:2:"91";s:2:"WX";s:3:"333";s:1:"N";s:11:"bracketleft";s:1:"B";a:4:{i:0;s:3:"-37";i:1;s:4:"-159";i:2;s:3:"362";i:3;s:3:"674";}}s:11:"bracketleft";a:4:{s:1:"C";s:2:"91";s:2:"WX";s:3:"333";s:1:"N";s:11:"bracketleft";s:1:"B";a:4:{i:0;s:3:"-37";i:1;s:4:"-159";i:2;s:3:"362";i:3;s:3:"674";}}i:92;a:4:{s:1:"C";s:2:"92";s:2:"WX";s:3:"278";s:1:"N";s:9:"backslash";s:1:"B";a:4:{i:0;s:2:"-1";i:1;s:3:"-18";i:2;s:3:"279";i:3;s:3:"685";}}s:9:"backslash";a:4:{s:1:"C";s:2:"92";s:2:"WX";s:3:"278";s:1:"N";s:9:"backslash";s:1:"B";a:4:{i:0;s:2:"-1";i:1;s:3:"-18";i:2;s:3:"279";i:3;s:3:"685";}}i:93;a:4:{s:1:"C";s:2:"93";s:2:"WX";s:3:"333";s:1:"N";s:12:"bracketright";s:1:"B";a:4:{i:0;s:3:"-56";i:1;s:4:"-157";i:2;s:3:"343";i:3;s:3:"674";}}s:12:"bracketright";a:4:{s:1:"C";s:2:"93";s:2:"WX";s:3:"333";s:1:"N";s:12:"bracketright";s:1:"B";a:4:{i:0;s:3:"-56";i:1;s:4:"-157";i:2;s:3:"343";i:3;s:3:"674";}}i:94;a:4:{s:1:"C";s:2:"94";s:2:"WX";s:3:"570";s:1:"N";s:11:"asciicircum";s:1:"B";a:4:{i:0;s:2:"67";i:1;s:3:"304";i:2;s:3:"503";i:3;s:3:"669";}}s:11:"asciicircum";a:4:{s:1:"C";s:2:"94";s:2:"WX";s:3:"570";s:1:"N";s:11:"asciicircum";s:1:"B";a:4:{i:0;s:2:"67";i:1;s:3:"304";i:2;s:3:"503";i:3;s:3:"669";}}i:95;a:4:{s:1:"C";s:2:"95";s:2:"WX";s:3:"500";s:1:"N";s:10:"underscore";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:4:"-125";i:2;s:3:"500";i:3;s:3:"-75";}}s:10:"underscore";a:4:{s:1:"C";s:2:"95";s:2:"WX";s:3:"500";s:1:"N";s:10:"underscore";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:4:"-125";i:2;s:3:"500";i:3;s:3:"-75";}}i:96;a:4:{s:1:"C";s:2:"96";s:2:"WX";s:3:"333";s:1:"N";s:9:"quoteleft";s:1:"B";a:4:{i:0;s:3:"128";i:1;s:3:"369";i:2;s:3:"332";i:3;s:3:"685";}}s:9:"quoteleft";a:4:{s:1:"C";s:2:"96";s:2:"WX";s:3:"333";s:1:"N";s:9:"quoteleft";s:1:"B";a:4:{i:0;s:3:"128";i:1;s:3:"369";i:2;s:3:"332";i:3;s:3:"685";}}i:97;a:4:{s:1:"C";s:2:"97";s:2:"WX";s:3:"500";s:1:"N";s:1:"a";s:1:"B";a:4:{i:0;s:3:"-21";i:1;s:3:"-14";i:2;s:3:"455";i:3;s:3:"462";}}s:1:"a";a:4:{s:1:"C";s:2:"97";s:2:"WX";s:3:"500";s:1:"N";s:1:"a";s:1:"B";a:4:{i:0;s:3:"-21";i:1;s:3:"-14";i:2;s:3:"455";i:3;s:3:"462";}}i:98;a:4:{s:1:"C";s:2:"98";s:2:"WX";s:3:"500";s:1:"N";s:1:"b";s:1:"B";a:4:{i:0;s:3:"-14";i:1;s:3:"-13";i:2;s:3:"444";i:3;s:3:"699";}}s:1:"b";a:4:{s:1:"C";s:2:"98";s:2:"WX";s:3:"500";s:1:"N";s:1:"b";s:1:"B";a:4:{i:0;s:3:"-14";i:1;s:3:"-13";i:2;s:3:"444";i:3;s:3:"699";}}i:99;a:4:{s:1:"C";s:2:"99";s:2:"WX";s:3:"444";s:1:"N";s:1:"c";s:1:"B";a:4:{i:0;s:2:"-5";i:1;s:3:"-13";i:2;s:3:"392";i:3;s:3:"462";}}s:1:"c";a:4:{s:1:"C";s:2:"99";s:2:"WX";s:3:"444";s:1:"N";s:1:"c";s:1:"B";a:4:{i:0;s:2:"-5";i:1;s:3:"-13";i:2;s:3:"392";i:3;s:3:"462";}}i:100;a:4:{s:1:"C";s:3:"100";s:2:"WX";s:3:"500";s:1:"N";s:1:"d";s:1:"B";a:4:{i:0;s:3:"-21";i:1;s:3:"-13";i:2;s:3:"517";i:3;s:3:"699";}}s:1:"d";a:4:{s:1:"C";s:3:"100";s:2:"WX";s:3:"500";s:1:"N";s:1:"d";s:1:"B";a:4:{i:0;s:3:"-21";i:1;s:3:"-13";i:2;s:3:"517";i:3;s:3:"699";}}i:101;a:4:{s:1:"C";s:3:"101";s:2:"WX";s:3:"444";s:1:"N";s:1:"e";s:1:"B";a:4:{i:0;s:1:"5";i:1;s:3:"-13";i:2;s:3:"398";i:3;s:3:"462";}}s:1:"e";a:4:{s:1:"C";s:3:"101";s:2:"WX";s:3:"444";s:1:"N";s:1:"e";s:1:"B";a:4:{i:0;s:1:"5";i:1;s:3:"-13";i:2;s:3:"398";i:3;s:3:"462";}}i:102;a:5:{s:1:"C";s:3:"102";s:2:"WX";s:3:"333";s:1:"N";s:1:"f";s:1:"B";a:4:{i:0;s:4:"-169";i:1;s:4:"-205";i:2;s:3:"446";i:3;s:3:"698";}s:1:"L";a:2:{i:0;s:1:"l";i:1;s:2:"fl";}}s:1:"f";a:5:{s:1:"C";s:3:"102";s:2:"WX";s:3:"333";s:1:"N";s:1:"f";s:1:"B";a:4:{i:0;s:4:"-169";i:1;s:4:"-205";i:2;s:3:"446";i:3;s:3:"698";}s:1:"L";a:2:{i:0;s:1:"l";i:1;s:2:"fl";}}i:103;a:4:{s:1:"C";s:3:"103";s:2:"WX";s:3:"500";s:1:"N";s:1:"g";s:1:"B";a:4:{i:0;s:3:"-52";i:1;s:4:"-203";i:2;s:3:"478";i:3;s:3:"462";}}s:1:"g";a:4:{s:1:"C";s:3:"103";s:2:"WX";s:3:"500";s:1:"N";s:1:"g";s:1:"B";a:4:{i:0;s:3:"-52";i:1;s:4:"-203";i:2;s:3:"478";i:3;s:3:"462";}}i:104;a:4:{s:1:"C";s:3:"104";s:2:"WX";s:3:"556";s:1:"N";s:1:"h";s:1:"B";a:4:{i:0;s:3:"-13";i:1;s:2:"-9";i:2;s:3:"498";i:3;s:3:"699";}}s:1:"h";a:4:{s:1:"C";s:3:"104";s:2:"WX";s:3:"556";s:1:"N";s:1:"h";s:1:"B";a:4:{i:0;s:3:"-13";i:1;s:2:"-9";i:2;s:3:"498";i:3;s:3:"699";}}i:105;a:4:{s:1:"C";s:3:"105";s:2:"WX";s:3:"278";s:1:"N";s:1:"i";s:1:"B";a:4:{i:0;s:1:"2";i:1;s:2:"-9";i:2;s:3:"263";i:3;s:3:"684";}}s:1:"i";a:4:{s:1:"C";s:3:"105";s:2:"WX";s:3:"278";s:1:"N";s:1:"i";s:1:"B";a:4:{i:0;s:1:"2";i:1;s:2:"-9";i:2;s:3:"263";i:3;s:3:"684";}}i:106;a:4:{s:1:"C";s:3:"106";s:2:"WX";s:3:"278";s:1:"N";s:1:"j";s:1:"B";a:4:{i:0;s:4:"-189";i:1;s:4:"-207";i:2;s:3:"279";i:3;s:3:"684";}}s:1:"j";a:4:{s:1:"C";s:3:"106";s:2:"WX";s:3:"278";s:1:"N";s:1:"j";s:1:"B";a:4:{i:0;s:4:"-189";i:1;s:4:"-207";i:2;s:3:"279";i:3;s:3:"684";}}i:107;a:4:{s:1:"C";s:3:"107";s:2:"WX";s:3:"500";s:1:"N";s:1:"k";s:1:"B";a:4:{i:0;s:3:"-23";i:1;s:2:"-8";i:2;s:3:"483";i:3;s:3:"699";}}s:1:"k";a:4:{s:1:"C";s:3:"107";s:2:"WX";s:3:"500";s:1:"N";s:1:"k";s:1:"B";a:4:{i:0;s:3:"-23";i:1;s:2:"-8";i:2;s:3:"483";i:3;s:3:"699";}}i:108;a:4:{s:1:"C";s:3:"108";s:2:"WX";s:3:"278";s:1:"N";s:1:"l";s:1:"B";a:4:{i:0;s:1:"2";i:1;s:2:"-9";i:2;s:3:"290";i:3;s:3:"699";}}s:1:"l";a:4:{s:1:"C";s:3:"108";s:2:"WX";s:3:"278";s:1:"N";s:1:"l";s:1:"B";a:4:{i:0;s:1:"2";i:1;s:2:"-9";i:2;s:3:"290";i:3;s:3:"699";}}i:109;a:4:{s:1:"C";s:3:"109";s:2:"WX";s:3:"778";s:1:"N";s:1:"m";s:1:"B";a:4:{i:0;s:3:"-14";i:1;s:2:"-9";i:2;s:3:"722";i:3;s:3:"462";}}s:1:"m";a:4:{s:1:"C";s:3:"109";s:2:"WX";s:3:"778";s:1:"N";s:1:"m";s:1:"B";a:4:{i:0;s:3:"-14";i:1;s:2:"-9";i:2;s:3:"722";i:3;s:3:"462";}}i:110;a:4:{s:1:"C";s:3:"110";s:2:"WX";s:3:"556";s:1:"N";s:1:"n";s:1:"B";a:4:{i:0;s:2:"-6";i:1;s:2:"-9";i:2;s:3:"493";i:3;s:3:"462";}}s:1:"n";a:4:{s:1:"C";s:3:"110";s:2:"WX";s:3:"556";s:1:"N";s:1:"n";s:1:"B";a:4:{i:0;s:2:"-6";i:1;s:2:"-9";i:2;s:3:"493";i:3;s:3:"462";}}i:111;a:4:{s:1:"C";s:3:"111";s:2:"WX";s:3:"500";s:1:"N";s:1:"o";s:1:"B";a:4:{i:0;s:2:"-3";i:1;s:3:"-13";i:2;s:3:"441";i:3;s:3:"462";}}s:1:"o";a:4:{s:1:"C";s:3:"111";s:2:"WX";s:3:"500";s:1:"N";s:1:"o";s:1:"B";a:4:{i:0;s:2:"-3";i:1;s:3:"-13";i:2;s:3:"441";i:3;s:3:"462";}}i:112;a:4:{s:1:"C";s:3:"112";s:2:"WX";s:3:"500";s:1:"N";s:1:"p";s:1:"B";a:4:{i:0;s:4:"-120";i:1;s:4:"-205";i:2;s:3:"446";i:3;s:3:"462";}}s:1:"p";a:4:{s:1:"C";s:3:"112";s:2:"WX";s:3:"500";s:1:"N";s:1:"p";s:1:"B";a:4:{i:0;s:4:"-120";i:1;s:4:"-205";i:2;s:3:"446";i:3;s:3:"462";}}i:113;a:4:{s:1:"C";s:3:"113";s:2:"WX";s:3:"500";s:1:"N";s:1:"q";s:1:"B";a:4:{i:0;s:1:"1";i:1;s:4:"-205";i:2;s:3:"471";i:3;s:3:"462";}}s:1:"q";a:4:{s:1:"C";s:3:"113";s:2:"WX";s:3:"500";s:1:"N";s:1:"q";s:1:"B";a:4:{i:0;s:1:"1";i:1;s:4:"-205";i:2;s:3:"471";i:3;s:3:"462";}}i:114;a:4:{s:1:"C";s:3:"114";s:2:"WX";s:3:"389";s:1:"N";s:1:"r";s:1:"B";a:4:{i:0;s:3:"-21";i:1;s:1:"0";i:2;s:3:"389";i:3;s:3:"462";}}s:1:"r";a:4:{s:1:"C";s:3:"114";s:2:"WX";s:3:"389";s:1:"N";s:1:"r";s:1:"B";a:4:{i:0;s:3:"-21";i:1;s:1:"0";i:2;s:3:"389";i:3;s:3:"462";}}i:115;a:4:{s:1:"C";s:3:"115";s:2:"WX";s:3:"389";s:1:"N";s:1:"s";s:1:"B";a:4:{i:0;s:3:"-19";i:1;s:3:"-13";i:2;s:3:"333";i:3;s:3:"462";}}s:1:"s";a:4:{s:1:"C";s:3:"115";s:2:"WX";s:3:"389";s:1:"N";s:1:"s";s:1:"B";a:4:{i:0;s:3:"-19";i:1;s:3:"-13";i:2;s:3:"333";i:3;s:3:"462";}}i:116;a:4:{s:1:"C";s:3:"116";s:2:"WX";s:3:"278";s:1:"N";s:1:"t";s:1:"B";a:4:{i:0;s:3:"-11";i:1;s:2:"-9";i:2;s:3:"281";i:3;s:3:"594";}}s:1:"t";a:4:{s:1:"C";s:3:"116";s:2:"WX";s:3:"278";s:1:"N";s:1:"t";s:1:"B";a:4:{i:0;s:3:"-11";i:1;s:2:"-9";i:2;s:3:"281";i:3;s:3:"594";}}i:117;a:4:{s:1:"C";s:3:"117";s:2:"WX";s:3:"556";s:1:"N";s:1:"u";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:2:"-9";i:2;s:3:"492";i:3;s:3:"462";}}s:1:"u";a:4:{s:1:"C";s:3:"117";s:2:"WX";s:3:"556";s:1:"N";s:1:"u";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:2:"-9";i:2;s:3:"492";i:3;s:3:"462";}}i:118;a:4:{s:1:"C";s:3:"118";s:2:"WX";s:3:"444";s:1:"N";s:1:"v";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:3:"-13";i:2;s:3:"401";i:3;s:3:"462";}}s:1:"v";a:4:{s:1:"C";s:3:"118";s:2:"WX";s:3:"444";s:1:"N";s:1:"v";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:3:"-13";i:2;s:3:"401";i:3;s:3:"462";}}i:119;a:4:{s:1:"C";s:3:"119";s:2:"WX";s:3:"667";s:1:"N";s:1:"w";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:3:"-13";i:2;s:3:"614";i:3;s:3:"462";}}s:1:"w";a:4:{s:1:"C";s:3:"119";s:2:"WX";s:3:"667";s:1:"N";s:1:"w";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:3:"-13";i:2;s:3:"614";i:3;s:3:"462";}}i:120;a:4:{s:1:"C";s:3:"120";s:2:"WX";s:3:"500";s:1:"N";s:1:"x";s:1:"B";a:4:{i:0;s:3:"-46";i:1;s:3:"-13";i:2;s:3:"469";i:3;s:3:"462";}}s:1:"x";a:4:{s:1:"C";s:3:"120";s:2:"WX";s:3:"500";s:1:"N";s:1:"x";s:1:"B";a:4:{i:0;s:3:"-46";i:1;s:3:"-13";i:2;s:3:"469";i:3;s:3:"462";}}i:121;a:4:{s:1:"C";s:3:"121";s:2:"WX";s:3:"444";s:1:"N";s:1:"y";s:1:"B";a:4:{i:0;s:3:"-94";i:1;s:4:"-205";i:2;s:3:"392";i:3;s:3:"462";}}s:1:"y";a:4:{s:1:"C";s:3:"121";s:2:"WX";s:3:"444";s:1:"N";s:1:"y";s:1:"B";a:4:{i:0;s:3:"-94";i:1;s:4:"-205";i:2;s:3:"392";i:3;s:3:"462";}}i:122;a:4:{s:1:"C";s:3:"122";s:2:"WX";s:3:"389";s:1:"N";s:1:"z";s:1:"B";a:4:{i:0;s:3:"-43";i:1;s:3:"-78";i:2;s:3:"368";i:3;s:3:"449";}}s:1:"z";a:4:{s:1:"C";s:3:"122";s:2:"WX";s:3:"389";s:1:"N";s:1:"z";s:1:"B";a:4:{i:0;s:3:"-43";i:1;s:3:"-78";i:2;s:3:"368";i:3;s:3:"449";}}i:123;a:4:{s:1:"C";s:3:"123";s:2:"WX";s:3:"348";s:1:"N";s:9:"braceleft";s:1:"B";a:4:{i:0;s:1:"5";i:1;s:4:"-187";i:2;s:3:"436";i:3;s:3:"686";}}s:9:"braceleft";a:4:{s:1:"C";s:3:"123";s:2:"WX";s:3:"348";s:1:"N";s:9:"braceleft";s:1:"B";a:4:{i:0;s:1:"5";i:1;s:4:"-187";i:2;s:3:"436";i:3;s:3:"686";}}i:124;a:4:{s:1:"C";s:3:"124";s:2:"WX";s:3:"220";s:1:"N";s:3:"bar";s:1:"B";a:4:{i:0;s:2:"66";i:1;s:4:"-218";i:2;s:3:"154";i:3;s:3:"782";}}s:3:"bar";a:4:{s:1:"C";s:3:"124";s:2:"WX";s:3:"220";s:1:"N";s:3:"bar";s:1:"B";a:4:{i:0;s:2:"66";i:1;s:4:"-218";i:2;s:3:"154";i:3;s:3:"782";}}i:125;a:4:{s:1:"C";s:3:"125";s:2:"WX";s:3:"348";s:1:"N";s:10:"braceright";s:1:"B";a:4:{i:0;s:4:"-129";i:1;s:4:"-187";i:2;s:3:"302";i:3;s:3:"686";}}s:10:"braceright";a:4:{s:1:"C";s:3:"125";s:2:"WX";s:3:"348";s:1:"N";s:10:"braceright";s:1:"B";a:4:{i:0;s:4:"-129";i:1;s:4:"-187";i:2;s:3:"302";i:3;s:3:"686";}}i:126;a:4:{s:1:"C";s:3:"126";s:2:"WX";s:3:"570";s:1:"N";s:10:"asciitilde";s:1:"B";a:4:{i:0;s:2:"54";i:1;s:3:"173";i:2;s:3:"516";i:3;s:3:"333";}}s:10:"asciitilde";a:4:{s:1:"C";s:3:"126";s:2:"WX";s:3:"570";s:1:"N";s:10:"asciitilde";s:1:"B";a:4:{i:0;s:2:"54";i:1;s:3:"173";i:2;s:3:"516";i:3;s:3:"333";}}i:161;a:4:{s:1:"C";s:3:"161";s:2:"WX";s:3:"389";s:1:"N";s:10:"exclamdown";s:1:"B";a:4:{i:0;s:2:"19";i:1;s:4:"-205";i:2;s:3:"322";i:3;s:3:"492";}}s:10:"exclamdown";a:4:{s:1:"C";s:3:"161";s:2:"WX";s:3:"389";s:1:"N";s:10:"exclamdown";s:1:"B";a:4:{i:0;s:2:"19";i:1;s:4:"-205";i:2;s:3:"322";i:3;s:3:"492";}}i:162;a:4:{s:1:"C";s:3:"162";s:2:"WX";s:3:"500";s:1:"N";s:4:"cent";s:1:"B";a:4:{i:0;s:2:"42";i:1;s:4:"-143";i:2;s:3:"439";i:3;s:3:"576";}}s:4:"cent";a:4:{s:1:"C";s:3:"162";s:2:"WX";s:3:"500";s:1:"N";s:4:"cent";s:1:"B";a:4:{i:0;s:2:"42";i:1;s:4:"-143";i:2;s:3:"439";i:3;s:3:"576";}}i:163;a:4:{s:1:"C";s:3:"163";s:2:"WX";s:3:"500";s:1:"N";s:8:"sterling";s:1:"B";a:4:{i:0;s:3:"-32";i:1;s:3:"-12";i:2;s:3:"510";i:3;s:3:"683";}}s:8:"sterling";a:4:{s:1:"C";s:3:"163";s:2:"WX";s:3:"500";s:1:"N";s:8:"sterling";s:1:"B";a:4:{i:0;s:3:"-32";i:1;s:3:"-12";i:2;s:3:"510";i:3;s:3:"683";}}i:164;a:4:{s:1:"C";s:3:"164";s:2:"WX";s:3:"167";s:1:"N";s:8:"fraction";s:1:"B";a:4:{i:0;s:4:"-169";i:1;s:3:"-14";i:2;s:3:"324";i:3;s:3:"683";}}s:8:"fraction";a:4:{s:1:"C";s:3:"164";s:2:"WX";s:3:"167";s:1:"N";s:8:"fraction";s:1:"B";a:4:{i:0;s:4:"-169";i:1;s:3:"-14";i:2;s:3:"324";i:3;s:3:"683";}}i:165;a:4:{s:1:"C";s:3:"165";s:2:"WX";s:3:"500";s:1:"N";s:3:"yen";s:1:"B";a:4:{i:0;s:2:"33";i:1;s:1:"0";i:2;s:3:"628";i:3;s:3:"669";}}s:3:"yen";a:4:{s:1:"C";s:3:"165";s:2:"WX";s:3:"500";s:1:"N";s:3:"yen";s:1:"B";a:4:{i:0;s:2:"33";i:1;s:1:"0";i:2;s:3:"628";i:3;s:3:"669";}}i:166;a:4:{s:1:"C";s:3:"166";s:2:"WX";s:3:"500";s:1:"N";s:6:"florin";s:1:"B";a:4:{i:0;s:3:"-87";i:1;s:4:"-156";i:2;s:3:"537";i:3;s:3:"707";}}s:6:"florin";a:4:{s:1:"C";s:3:"166";s:2:"WX";s:3:"500";s:1:"N";s:6:"florin";s:1:"B";a:4:{i:0;s:3:"-87";i:1;s:4:"-156";i:2;s:3:"537";i:3;s:3:"707";}}i:167;a:4:{s:1:"C";s:3:"167";s:2:"WX";s:3:"500";s:1:"N";s:7:"section";s:1:"B";a:4:{i:0;s:2:"36";i:1;s:4:"-143";i:2;s:3:"459";i:3;s:3:"685";}}s:7:"section";a:4:{s:1:"C";s:3:"167";s:2:"WX";s:3:"500";s:1:"N";s:7:"section";s:1:"B";a:4:{i:0;s:2:"36";i:1;s:4:"-143";i:2;s:3:"459";i:3;s:3:"685";}}i:168;a:4:{s:1:"C";s:3:"168";s:2:"WX";s:3:"500";s:1:"N";s:8:"currency";s:1:"B";a:4:{i:0;s:3:"-26";i:1;s:2:"34";i:2;s:3:"526";i:3;s:3:"586";}}s:8:"currency";a:4:{s:1:"C";s:3:"168";s:2:"WX";s:3:"500";s:1:"N";s:8:"currency";s:1:"B";a:4:{i:0;s:3:"-26";i:1;s:2:"34";i:2;s:3:"526";i:3;s:3:"586";}}i:169;a:4:{s:1:"C";s:3:"169";s:2:"WX";s:3:"278";s:1:"N";s:11:"quotesingle";s:1:"B";a:4:{i:0;s:3:"128";i:1;s:3:"398";i:2;s:3:"268";i:3;s:3:"685";}}s:11:"quotesingle";a:4:{s:1:"C";s:3:"169";s:2:"WX";s:3:"278";s:1:"N";s:11:"quotesingle";s:1:"B";a:4:{i:0;s:3:"128";i:1;s:3:"398";i:2;s:3:"268";i:3;s:3:"685";}}i:170;a:4:{s:1:"C";s:3:"170";s:2:"WX";s:3:"500";s:1:"N";s:12:"quotedblleft";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:3:"369";i:2;s:3:"513";i:3;s:3:"685";}}s:12:"quotedblleft";a:4:{s:1:"C";s:3:"170";s:2:"WX";s:3:"500";s:1:"N";s:12:"quotedblleft";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:3:"369";i:2;s:3:"513";i:3;s:3:"685";}}i:171;a:4:{s:1:"C";s:3:"171";s:2:"WX";s:3:"500";s:1:"N";s:13:"guillemotleft";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:2:"32";i:2;s:3:"468";i:3;s:3:"415";}}s:13:"guillemotleft";a:4:{s:1:"C";s:3:"171";s:2:"WX";s:3:"500";s:1:"N";s:13:"guillemotleft";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:2:"32";i:2;s:3:"468";i:3;s:3:"415";}}i:172;a:4:{s:1:"C";s:3:"172";s:2:"WX";s:3:"333";s:1:"N";s:13:"guilsinglleft";s:1:"B";a:4:{i:0;s:2:"32";i:1;s:2:"32";i:2;s:3:"303";i:3;s:3:"415";}}s:13:"guilsinglleft";a:4:{s:1:"C";s:3:"172";s:2:"WX";s:3:"333";s:1:"N";s:13:"guilsinglleft";s:1:"B";a:4:{i:0;s:2:"32";i:1;s:2:"32";i:2;s:3:"303";i:3;s:3:"415";}}i:173;a:4:{s:1:"C";s:3:"173";s:2:"WX";s:3:"333";s:1:"N";s:14:"guilsinglright";s:1:"B";a:4:{i:0;s:2:"10";i:1;s:2:"32";i:2;s:3:"281";i:3;s:3:"415";}}s:14:"guilsinglright";a:4:{s:1:"C";s:3:"173";s:2:"WX";s:3:"333";s:1:"N";s:14:"guilsinglright";s:1:"B";a:4:{i:0;s:2:"10";i:1;s:2:"32";i:2;s:3:"281";i:3;s:3:"415";}}i:174;a:4:{s:1:"C";s:3:"174";s:2:"WX";s:3:"556";s:1:"N";s:2:"fi";s:1:"B";a:4:{i:0;s:4:"-188";i:1;s:4:"-205";i:2;s:3:"514";i:3;s:3:"703";}}s:2:"fi";a:4:{s:1:"C";s:3:"174";s:2:"WX";s:3:"556";s:1:"N";s:2:"fi";s:1:"B";a:4:{i:0;s:4:"-188";i:1;s:4:"-205";i:2;s:3:"514";i:3;s:3:"703";}}i:175;a:4:{s:1:"C";s:3:"175";s:2:"WX";s:3:"556";s:1:"N";s:2:"fl";s:1:"B";a:4:{i:0;s:4:"-186";i:1;s:4:"-205";i:2;s:3:"553";i:3;s:3:"704";}}s:2:"fl";a:4:{s:1:"C";s:3:"175";s:2:"WX";s:3:"556";s:1:"N";s:2:"fl";s:1:"B";a:4:{i:0;s:4:"-186";i:1;s:4:"-205";i:2;s:3:"553";i:3;s:3:"704";}}i:177;a:4:{s:1:"C";s:3:"177";s:2:"WX";s:3:"500";s:1:"N";s:6:"endash";s:1:"B";a:4:{i:0;s:3:"-40";i:1;s:3:"178";i:2;s:3:"477";i:3;s:3:"269";}}s:6:"endash";a:4:{s:1:"C";s:3:"177";s:2:"WX";s:3:"500";s:1:"N";s:6:"endash";s:1:"B";a:4:{i:0;s:3:"-40";i:1;s:3:"178";i:2;s:3:"477";i:3;s:3:"269";}}i:178;a:4:{s:1:"C";s:3:"178";s:2:"WX";s:3:"500";s:1:"N";s:6:"dagger";s:1:"B";a:4:{i:0;s:2:"91";i:1;s:4:"-145";i:2;s:3:"494";i:3;s:3:"685";}}s:6:"dagger";a:4:{s:1:"C";s:3:"178";s:2:"WX";s:3:"500";s:1:"N";s:6:"dagger";s:1:"B";a:4:{i:0;s:2:"91";i:1;s:4:"-145";i:2;s:3:"494";i:3;s:3:"685";}}i:179;a:4:{s:1:"C";s:3:"179";s:2:"WX";s:3:"500";s:1:"N";s:9:"daggerdbl";s:1:"B";a:4:{i:0;s:2:"10";i:1;s:4:"-139";i:2;s:3:"493";i:3;s:3:"685";}}s:9:"daggerdbl";a:4:{s:1:"C";s:3:"179";s:2:"WX";s:3:"500";s:1:"N";s:9:"daggerdbl";s:1:"B";a:4:{i:0;s:2:"10";i:1;s:4:"-139";i:2;s:3:"493";i:3;s:3:"685";}}i:180;a:4:{s:1:"C";s:3:"180";s:2:"WX";s:3:"250";s:1:"N";s:14:"periodcentered";s:1:"B";a:4:{i:0;s:2:"51";i:1;s:3:"257";i:2;s:3:"199";i:3;s:3:"405";}}s:14:"periodcentered";a:4:{s:1:"C";s:3:"180";s:2:"WX";s:3:"250";s:1:"N";s:14:"periodcentered";s:1:"B";a:4:{i:0;s:2:"51";i:1;s:3:"257";i:2;s:3:"199";i:3;s:3:"405";}}i:182;a:4:{s:1:"C";s:3:"182";s:2:"WX";s:3:"500";s:1:"N";s:9:"paragraph";s:1:"B";a:4:{i:0;s:3:"-57";i:1;s:4:"-193";i:2;s:3:"562";i:3;s:3:"669";}}s:9:"paragraph";a:4:{s:1:"C";s:3:"182";s:2:"WX";s:3:"500";s:1:"N";s:9:"paragraph";s:1:"B";a:4:{i:0;s:3:"-57";i:1;s:4:"-193";i:2;s:3:"562";i:3;s:3:"669";}}i:183;a:4:{s:1:"C";s:3:"183";s:2:"WX";s:3:"350";s:1:"N";s:6:"bullet";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:3:"175";i:2;s:3:"350";i:3;s:3:"525";}}s:6:"bullet";a:4:{s:1:"C";s:3:"183";s:2:"WX";s:3:"350";s:1:"N";s:6:"bullet";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:3:"175";i:2;s:3:"350";i:3;s:3:"525";}}i:184;a:4:{s:1:"C";s:3:"184";s:2:"WX";s:3:"333";s:1:"N";s:14:"quotesinglbase";s:1:"B";a:4:{i:0;s:2:"-5";i:1;s:4:"-182";i:2;s:3:"199";i:3;s:3:"134";}}s:14:"quotesinglbase";a:4:{s:1:"C";s:3:"184";s:2:"WX";s:3:"333";s:1:"N";s:14:"quotesinglbase";s:1:"B";a:4:{i:0;s:2:"-5";i:1;s:4:"-182";i:2;s:3:"199";i:3;s:3:"134";}}i:185;a:4:{s:1:"C";s:3:"185";s:2:"WX";s:3:"500";s:1:"N";s:12:"quotedblbase";s:1:"B";a:4:{i:0;s:3:"-57";i:1;s:4:"-182";i:2;s:3:"403";i:3;s:3:"134";}}s:12:"quotedblbase";a:4:{s:1:"C";s:3:"185";s:2:"WX";s:3:"500";s:1:"N";s:12:"quotedblbase";s:1:"B";a:4:{i:0;s:3:"-57";i:1;s:4:"-182";i:2;s:3:"403";i:3;s:3:"134";}}i:186;a:4:{s:1:"C";s:3:"186";s:2:"WX";s:3:"500";s:1:"N";s:13:"quotedblright";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:3:"369";i:2;s:3:"513";i:3;s:3:"685";}}s:13:"quotedblright";a:4:{s:1:"C";s:3:"186";s:2:"WX";s:3:"500";s:1:"N";s:13:"quotedblright";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:3:"369";i:2;s:3:"513";i:3;s:3:"685";}}i:187;a:4:{s:1:"C";s:3:"187";s:2:"WX";s:3:"500";s:1:"N";s:14:"guillemotright";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:2:"32";i:2;s:3:"468";i:3;s:3:"415";}}s:14:"guillemotright";a:4:{s:1:"C";s:3:"187";s:2:"WX";s:3:"500";s:1:"N";s:14:"guillemotright";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:2:"32";i:2;s:3:"468";i:3;s:3:"415";}}i:188;a:4:{s:1:"C";s:3:"188";s:2:"WX";s:4:"1000";s:1:"N";s:8:"ellipsis";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:3:"-13";i:2;s:3:"852";i:3;s:3:"135";}}s:8:"ellipsis";a:4:{s:1:"C";s:3:"188";s:2:"WX";s:4:"1000";s:1:"N";s:8:"ellipsis";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:3:"-13";i:2;s:3:"852";i:3;s:3:"135";}}i:189;a:4:{s:1:"C";s:3:"189";s:2:"WX";s:4:"1000";s:1:"N";s:11:"perthousand";s:1:"B";a:4:{i:0;s:1:"7";i:1;s:3:"-29";i:2;s:3:"996";i:3;s:3:"706";}}s:11:"perthousand";a:4:{s:1:"C";s:3:"189";s:2:"WX";s:4:"1000";s:1:"N";s:11:"perthousand";s:1:"B";a:4:{i:0;s:1:"7";i:1;s:3:"-29";i:2;s:3:"996";i:3;s:3:"706";}}i:191;a:4:{s:1:"C";s:3:"191";s:2:"WX";s:3:"500";s:1:"N";s:12:"questiondown";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:4:"-205";i:2;s:3:"421";i:3;s:3:"492";}}s:12:"questiondown";a:4:{s:1:"C";s:3:"191";s:2:"WX";s:3:"500";s:1:"N";s:12:"questiondown";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:4:"-205";i:2;s:3:"421";i:3;s:3:"492";}}i:193;a:4:{s:1:"C";s:3:"193";s:2:"WX";s:3:"333";s:1:"N";s:5:"grave";s:1:"B";a:4:{i:0;s:2:"85";i:1;s:3:"516";i:2;s:3:"297";i:3;s:3:"697";}}s:5:"grave";a:4:{s:1:"C";s:3:"193";s:2:"WX";s:3:"333";s:1:"N";s:5:"grave";s:1:"B";a:4:{i:0;s:2:"85";i:1;s:3:"516";i:2;s:3:"297";i:3;s:3:"697";}}i:194;a:4:{s:1:"C";s:3:"194";s:2:"WX";s:3:"333";s:1:"N";s:5:"acute";s:1:"B";a:4:{i:0;s:3:"139";i:1;s:3:"516";i:2;s:3:"379";i:3;s:3:"697";}}s:5:"acute";a:4:{s:1:"C";s:3:"194";s:2:"WX";s:3:"333";s:1:"N";s:5:"acute";s:1:"B";a:4:{i:0;s:3:"139";i:1;s:3:"516";i:2;s:3:"379";i:3;s:3:"697";}}i:195;a:4:{s:1:"C";s:3:"195";s:2:"WX";s:3:"333";s:1:"N";s:10:"circumflex";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:3:"516";i:2;s:3:"367";i:3;s:3:"690";}}s:10:"circumflex";a:4:{s:1:"C";s:3:"195";s:2:"WX";s:3:"333";s:1:"N";s:10:"circumflex";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:3:"516";i:2;s:3:"367";i:3;s:3:"690";}}i:196;a:4:{s:1:"C";s:3:"196";s:2:"WX";s:3:"333";s:1:"N";s:5:"tilde";s:1:"B";a:4:{i:0;s:2:"48";i:1;s:3:"536";i:2;s:3:"407";i:3;s:3:"655";}}s:5:"tilde";a:4:{s:1:"C";s:3:"196";s:2:"WX";s:3:"333";s:1:"N";s:5:"tilde";s:1:"B";a:4:{i:0;s:2:"48";i:1;s:3:"536";i:2;s:3:"407";i:3;s:3:"655";}}i:197;a:4:{s:1:"C";s:3:"197";s:2:"WX";s:3:"333";s:1:"N";s:6:"macron";s:1:"B";a:4:{i:0;s:2:"51";i:1;s:3:"553";i:2;s:3:"393";i:3;s:3:"623";}}s:6:"macron";a:4:{s:1:"C";s:3:"197";s:2:"WX";s:3:"333";s:1:"N";s:6:"macron";s:1:"B";a:4:{i:0;s:2:"51";i:1;s:3:"553";i:2;s:3:"393";i:3;s:3:"623";}}i:198;a:4:{s:1:"C";s:3:"198";s:2:"WX";s:3:"333";s:1:"N";s:5:"breve";s:1:"B";a:4:{i:0;s:2:"71";i:1;s:3:"516";i:2;s:3:"387";i:3;s:3:"678";}}s:5:"breve";a:4:{s:1:"C";s:3:"198";s:2:"WX";s:3:"333";s:1:"N";s:5:"breve";s:1:"B";a:4:{i:0;s:2:"71";i:1;s:3:"516";i:2;s:3:"387";i:3;s:3:"678";}}i:199;a:4:{s:1:"C";s:3:"199";s:2:"WX";s:3:"333";s:1:"N";s:9:"dotaccent";s:1:"B";a:4:{i:0;s:3:"163";i:1;s:3:"550";i:2;s:3:"298";i:3;s:3:"684";}}s:9:"dotaccent";a:4:{s:1:"C";s:3:"199";s:2:"WX";s:3:"333";s:1:"N";s:9:"dotaccent";s:1:"B";a:4:{i:0;s:3:"163";i:1;s:3:"550";i:2;s:3:"298";i:3;s:3:"684";}}i:200;a:4:{s:1:"C";s:3:"200";s:2:"WX";s:3:"333";s:1:"N";s:8:"dieresis";s:1:"B";a:4:{i:0;s:2:"55";i:1;s:3:"550";i:2;s:3:"402";i:3;s:3:"684";}}s:8:"dieresis";a:4:{s:1:"C";s:3:"200";s:2:"WX";s:3:"333";s:1:"N";s:8:"dieresis";s:1:"B";a:4:{i:0;s:2:"55";i:1;s:3:"550";i:2;s:3:"402";i:3;s:3:"684";}}i:202;a:4:{s:1:"C";s:3:"202";s:2:"WX";s:3:"333";s:1:"N";s:4:"ring";s:1:"B";a:4:{i:0;s:3:"127";i:1;s:3:"516";i:2;s:3:"340";i:3;s:3:"729";}}s:4:"ring";a:4:{s:1:"C";s:3:"202";s:2:"WX";s:3:"333";s:1:"N";s:4:"ring";s:1:"B";a:4:{i:0;s:3:"127";i:1;s:3:"516";i:2;s:3:"340";i:3;s:3:"729";}}i:203;a:4:{s:1:"C";s:3:"203";s:2:"WX";s:3:"333";s:1:"N";s:7:"cedilla";s:1:"B";a:4:{i:0;s:3:"-80";i:1;s:4:"-218";i:2;s:3:"156";i:3;s:1:"5";}}s:7:"cedilla";a:4:{s:1:"C";s:3:"203";s:2:"WX";s:3:"333";s:1:"N";s:7:"cedilla";s:1:"B";a:4:{i:0;s:3:"-80";i:1;s:4:"-218";i:2;s:3:"156";i:3;s:1:"5";}}i:205;a:4:{s:1:"C";s:3:"205";s:2:"WX";s:3:"333";s:1:"N";s:12:"hungarumlaut";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:3:"516";i:2;s:3:"498";i:3;s:3:"697";}}s:12:"hungarumlaut";a:4:{s:1:"C";s:3:"205";s:2:"WX";s:3:"333";s:1:"N";s:12:"hungarumlaut";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:3:"516";i:2;s:3:"498";i:3;s:3:"697";}}i:206;a:4:{s:1:"C";s:3:"206";s:2:"WX";s:3:"333";s:1:"N";s:6:"ogonek";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:4:"-183";i:2;s:3:"244";i:3;s:2:"34";}}s:6:"ogonek";a:4:{s:1:"C";s:3:"206";s:2:"WX";s:3:"333";s:1:"N";s:6:"ogonek";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:4:"-183";i:2;s:3:"244";i:3;s:2:"34";}}i:207;a:4:{s:1:"C";s:3:"207";s:2:"WX";s:3:"333";s:1:"N";s:5:"caron";s:1:"B";a:4:{i:0;s:2:"79";i:1;s:3:"516";i:2;s:3:"411";i:3;s:3:"690";}}s:5:"caron";a:4:{s:1:"C";s:3:"207";s:2:"WX";s:3:"333";s:1:"N";s:5:"caron";s:1:"B";a:4:{i:0;s:2:"79";i:1;s:3:"516";i:2;s:3:"411";i:3;s:3:"690";}}i:208;a:4:{s:1:"C";s:3:"208";s:2:"WX";s:4:"1000";s:1:"N";s:6:"emdash";s:1:"B";a:4:{i:0;s:3:"-40";i:1;s:3:"178";i:2;s:3:"977";i:3;s:3:"269";}}s:6:"emdash";a:4:{s:1:"C";s:3:"208";s:2:"WX";s:4:"1000";s:1:"N";s:6:"emdash";s:1:"B";a:4:{i:0;s:3:"-40";i:1;s:3:"178";i:2;s:3:"977";i:3;s:3:"269";}}i:225;a:4:{s:1:"C";s:3:"225";s:2:"WX";s:3:"944";s:1:"N";s:2:"AE";s:1:"B";a:4:{i:0;s:3:"-64";i:1;s:1:"0";i:2;s:3:"918";i:3;s:3:"669";}}s:2:"AE";a:4:{s:1:"C";s:3:"225";s:2:"WX";s:3:"944";s:1:"N";s:2:"AE";s:1:"B";a:4:{i:0;s:3:"-64";i:1;s:1:"0";i:2;s:3:"918";i:3;s:3:"669";}}i:227;a:4:{s:1:"C";s:3:"227";s:2:"WX";s:3:"266";s:1:"N";s:11:"ordfeminine";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:3:"399";i:2;s:3:"330";i:3;s:3:"685";}}s:11:"ordfeminine";a:4:{s:1:"C";s:3:"227";s:2:"WX";s:3:"266";s:1:"N";s:11:"ordfeminine";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:3:"399";i:2;s:3:"330";i:3;s:3:"685";}}i:232;a:4:{s:1:"C";s:3:"232";s:2:"WX";s:3:"611";s:1:"N";s:6:"Lslash";s:1:"B";a:4:{i:0;s:3:"-22";i:1;s:1:"0";i:2;s:3:"590";i:3;s:3:"669";}}s:6:"Lslash";a:4:{s:1:"C";s:3:"232";s:2:"WX";s:3:"611";s:1:"N";s:6:"Lslash";s:1:"B";a:4:{i:0;s:3:"-22";i:1;s:1:"0";i:2;s:3:"590";i:3;s:3:"669";}}i:233;a:4:{s:1:"C";s:3:"233";s:2:"WX";s:3:"722";s:1:"N";s:6:"Oslash";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:4:"-125";i:2;s:3:"691";i:3;s:3:"764";}}s:6:"Oslash";a:4:{s:1:"C";s:3:"233";s:2:"WX";s:3:"722";s:1:"N";s:6:"Oslash";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:4:"-125";i:2;s:3:"691";i:3;s:3:"764";}}i:234;a:4:{s:1:"C";s:3:"234";s:2:"WX";s:3:"944";s:1:"N";s:2:"OE";s:1:"B";a:4:{i:0;s:2:"23";i:1;s:2:"-8";i:2;s:3:"946";i:3;s:3:"677";}}s:2:"OE";a:4:{s:1:"C";s:3:"234";s:2:"WX";s:3:"944";s:1:"N";s:2:"OE";s:1:"B";a:4:{i:0;s:2:"23";i:1;s:2:"-8";i:2;s:3:"946";i:3;s:3:"677";}}i:235;a:4:{s:1:"C";s:3:"235";s:2:"WX";s:3:"300";s:1:"N";s:12:"ordmasculine";s:1:"B";a:4:{i:0;s:2:"56";i:1;s:3:"400";i:2;s:3:"347";i:3;s:3:"685";}}s:12:"ordmasculine";a:4:{s:1:"C";s:3:"235";s:2:"WX";s:3:"300";s:1:"N";s:12:"ordmasculine";s:1:"B";a:4:{i:0;s:2:"56";i:1;s:3:"400";i:2;s:3:"347";i:3;s:3:"685";}}i:241;a:4:{s:1:"C";s:3:"241";s:2:"WX";s:3:"722";s:1:"N";s:2:"ae";s:1:"B";a:4:{i:0;s:2:"-5";i:1;s:3:"-13";i:2;s:3:"673";i:3;s:3:"462";}}s:2:"ae";a:4:{s:1:"C";s:3:"241";s:2:"WX";s:3:"722";s:1:"N";s:2:"ae";s:1:"B";a:4:{i:0;s:2:"-5";i:1;s:3:"-13";i:2;s:3:"673";i:3;s:3:"462";}}i:245;a:4:{s:1:"C";s:3:"245";s:2:"WX";s:3:"278";s:1:"N";s:8:"dotlessi";s:1:"B";a:4:{i:0;s:1:"2";i:1;s:2:"-9";i:2;s:3:"238";i:3;s:3:"462";}}s:8:"dotlessi";a:4:{s:1:"C";s:3:"245";s:2:"WX";s:3:"278";s:1:"N";s:8:"dotlessi";s:1:"B";a:4:{i:0;s:1:"2";i:1;s:2:"-9";i:2;s:3:"238";i:3;s:3:"462";}}i:248;a:4:{s:1:"C";s:3:"248";s:2:"WX";s:3:"278";s:1:"N";s:6:"lslash";s:1:"B";a:4:{i:0;s:2:"-7";i:1;s:2:"-9";i:2;s:3:"307";i:3;s:3:"699";}}s:6:"lslash";a:4:{s:1:"C";s:3:"248";s:2:"WX";s:3:"278";s:1:"N";s:6:"lslash";s:1:"B";a:4:{i:0;s:2:"-7";i:1;s:2:"-9";i:2;s:3:"307";i:3;s:3:"699";}}i:249;a:4:{s:1:"C";s:3:"249";s:2:"WX";s:3:"500";s:1:"N";s:6:"oslash";s:1:"B";a:4:{i:0;s:2:"-3";i:1;s:4:"-119";i:2;s:3:"441";i:3;s:3:"560";}}s:6:"oslash";a:4:{s:1:"C";s:3:"249";s:2:"WX";s:3:"500";s:1:"N";s:6:"oslash";s:1:"B";a:4:{i:0;s:2:"-3";i:1;s:4:"-119";i:2;s:3:"441";i:3;s:3:"560";}}i:250;a:4:{s:1:"C";s:3:"250";s:2:"WX";s:3:"722";s:1:"N";s:2:"oe";s:1:"B";a:4:{i:0;s:1:"6";i:1;s:3:"-13";i:2;s:3:"674";i:3;s:3:"462";}}s:2:"oe";a:4:{s:1:"C";s:3:"250";s:2:"WX";s:3:"722";s:1:"N";s:2:"oe";s:1:"B";a:4:{i:0;s:1:"6";i:1;s:3:"-13";i:2;s:3:"674";i:3;s:3:"462";}}i:251;a:4:{s:1:"C";s:3:"251";s:2:"WX";s:3:"500";s:1:"N";s:10:"germandbls";s:1:"B";a:4:{i:0;s:4:"-200";i:1;s:4:"-200";i:2;s:3:"473";i:3;s:3:"705";}}s:10:"germandbls";a:4:{s:1:"C";s:3:"251";s:2:"WX";s:3:"500";s:1:"N";s:10:"germandbls";s:1:"B";a:4:{i:0;s:4:"-200";i:1;s:4:"-200";i:2;s:3:"473";i:3;s:3:"705";}}s:9:"Idieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"389";s:1:"N";s:9:"Idieresis";s:1:"B";a:4:{i:0;s:3:"-32";i:1;s:1:"0";i:2;s:3:"450";i:3;s:3:"862";}}s:6:"eacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:6:"eacute";s:1:"B";a:4:{i:0;s:1:"5";i:1;s:3:"-13";i:2;s:3:"435";i:3;s:3:"697";}}s:6:"abreve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"abreve";s:1:"B";a:4:{i:0;s:3:"-21";i:1;s:3:"-14";i:2;s:3:"471";i:3;s:3:"678";}}s:13:"uhungarumlaut";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:13:"uhungarumlaut";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:2:"-9";i:2;s:3:"610";i:3;s:3:"697";}}s:6:"ecaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:6:"ecaron";s:1:"B";a:4:{i:0;s:1:"5";i:1;s:3:"-13";i:2;s:3:"467";i:3;s:3:"690";}}s:9:"Ydieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:9:"Ydieresis";s:1:"B";a:4:{i:0;s:2:"73";i:1;s:1:"0";i:2;s:3:"659";i:3;s:3:"862";}}s:6:"divide";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"570";s:1:"N";s:6:"divide";s:1:"B";a:4:{i:0;s:2:"33";i:1;s:3:"-29";i:2;s:3:"537";i:3;s:3:"535";}}s:6:"Yacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"Yacute";s:1:"B";a:4:{i:0;s:2:"73";i:1;s:1:"0";i:2;s:3:"659";i:3;s:3:"904";}}s:11:"Acircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:11:"Acircumflex";s:1:"B";a:4:{i:0;s:3:"-67";i:1;s:1:"0";i:2;s:3:"593";i:3;s:3:"897";}}s:6:"aacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"aacute";s:1:"B";a:4:{i:0;s:3:"-21";i:1;s:3:"-14";i:2;s:3:"463";i:3;s:3:"697";}}s:11:"Ucircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:11:"Ucircumflex";s:1:"B";a:4:{i:0;s:2:"67";i:1;s:3:"-18";i:2;s:3:"744";i:3;s:3:"897";}}s:6:"yacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:6:"yacute";s:1:"B";a:4:{i:0;s:3:"-94";i:1;s:4:"-205";i:2;s:3:"435";i:3;s:3:"697";}}s:12:"scommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"389";s:1:"N";s:12:"scommaaccent";s:1:"B";a:4:{i:0;s:3:"-19";i:1;s:4:"-218";i:2;s:3:"333";i:3;s:3:"462";}}s:11:"ecircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:11:"ecircumflex";s:1:"B";a:4:{i:0;s:1:"5";i:1;s:3:"-13";i:2;s:3:"423";i:3;s:3:"690";}}s:5:"Uring";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:5:"Uring";s:1:"B";a:4:{i:0;s:2:"67";i:1;s:3:"-18";i:2;s:3:"744";i:3;s:3:"921";}}s:9:"Udieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:9:"Udieresis";s:1:"B";a:4:{i:0;s:2:"67";i:1;s:3:"-18";i:2;s:3:"744";i:3;s:3:"862";}}s:7:"aogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:7:"aogonek";s:1:"B";a:4:{i:0;s:3:"-21";i:1;s:4:"-183";i:2;s:3:"455";i:3;s:3:"462";}}s:6:"Uacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Uacute";s:1:"B";a:4:{i:0;s:2:"67";i:1;s:3:"-18";i:2;s:3:"744";i:3;s:3:"904";}}s:7:"uogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:7:"uogonek";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:4:"-183";i:2;s:3:"492";i:3;s:3:"462";}}s:9:"Edieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:9:"Edieresis";s:1:"B";a:4:{i:0;s:3:"-27";i:1;s:1:"0";i:2;s:3:"653";i:3;s:3:"862";}}s:6:"Dcroat";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Dcroat";s:1:"B";a:4:{i:0;s:3:"-31";i:1;s:1:"0";i:2;s:3:"700";i:3;s:3:"669";}}s:11:"commaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"250";s:1:"N";s:11:"commaaccent";s:1:"B";a:4:{i:0;s:3:"-36";i:1;s:4:"-218";i:2;s:3:"131";i:3;s:3:"-50";}}s:9:"copyright";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"747";s:1:"N";s:9:"copyright";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:3:"-18";i:2;s:3:"718";i:3;s:3:"685";}}s:7:"Emacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:7:"Emacron";s:1:"B";a:4:{i:0;s:3:"-27";i:1;s:1:"0";i:2;s:3:"653";i:3;s:3:"830";}}s:6:"ccaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:6:"ccaron";s:1:"B";a:4:{i:0;s:2:"-5";i:1;s:3:"-13";i:2;s:3:"467";i:3;s:3:"690";}}s:5:"aring";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:5:"aring";s:1:"B";a:4:{i:0;s:3:"-21";i:1;s:3:"-14";i:2;s:3:"455";i:3;s:3:"729";}}s:12:"Ncommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:12:"Ncommaaccent";s:1:"B";a:4:{i:0;s:3:"-27";i:1;s:4:"-218";i:2;s:3:"748";i:3;s:3:"669";}}s:6:"lacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:6:"lacute";s:1:"B";a:4:{i:0;s:1:"2";i:1;s:2:"-9";i:2;s:3:"392";i:3;s:3:"904";}}s:6:"agrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"agrave";s:1:"B";a:4:{i:0;s:3:"-21";i:1;s:3:"-14";i:2;s:3:"455";i:3;s:3:"697";}}s:12:"Tcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:12:"Tcommaaccent";s:1:"B";a:4:{i:0;s:2:"50";i:1;s:4:"-218";i:2;s:3:"650";i:3;s:3:"669";}}s:6:"Cacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Cacute";s:1:"B";a:4:{i:0;s:2:"32";i:1;s:3:"-18";i:2;s:3:"677";i:3;s:3:"904";}}s:6:"atilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"atilde";s:1:"B";a:4:{i:0;s:3:"-21";i:1;s:3:"-14";i:2;s:3:"491";i:3;s:3:"655";}}s:10:"Edotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:10:"Edotaccent";s:1:"B";a:4:{i:0;s:3:"-27";i:1;s:1:"0";i:2;s:3:"653";i:3;s:3:"862";}}s:6:"scaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"389";s:1:"N";s:6:"scaron";s:1:"B";a:4:{i:0;s:3:"-19";i:1;s:3:"-13";i:2;s:3:"424";i:3;s:3:"690";}}s:8:"scedilla";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"389";s:1:"N";s:8:"scedilla";s:1:"B";a:4:{i:0;s:3:"-19";i:1;s:4:"-218";i:2;s:3:"333";i:3;s:3:"462";}}s:6:"iacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:6:"iacute";s:1:"B";a:4:{i:0;s:1:"2";i:1;s:2:"-9";i:2;s:3:"352";i:3;s:3:"697";}}s:7:"lozenge";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"494";s:1:"N";s:7:"lozenge";s:1:"B";a:4:{i:0;s:2:"10";i:1;s:1:"0";i:2;s:3:"484";i:3;s:3:"745";}}s:6:"Rcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Rcaron";s:1:"B";a:4:{i:0;s:3:"-29";i:1;s:1:"0";i:2;s:3:"623";i:3;s:3:"897";}}s:12:"Gcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:12:"Gcommaaccent";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:4:"-218";i:2;s:3:"706";i:3;s:3:"685";}}s:11:"ucircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:11:"ucircumflex";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:2:"-9";i:2;s:3:"492";i:3;s:3:"690";}}s:11:"acircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:11:"acircumflex";s:1:"B";a:4:{i:0;s:3:"-21";i:1;s:3:"-14";i:2;s:3:"455";i:3;s:3:"690";}}s:7:"Amacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:7:"Amacron";s:1:"B";a:4:{i:0;s:3:"-67";i:1;s:1:"0";i:2;s:3:"593";i:3;s:3:"830";}}s:6:"rcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"389";s:1:"N";s:6:"rcaron";s:1:"B";a:4:{i:0;s:3:"-21";i:1;s:1:"0";i:2;s:3:"424";i:3;s:3:"690";}}s:8:"ccedilla";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:8:"ccedilla";s:1:"B";a:4:{i:0;s:2:"-5";i:1;s:4:"-218";i:2;s:3:"392";i:3;s:3:"462";}}s:10:"Zdotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:10:"Zdotaccent";s:1:"B";a:4:{i:0;s:3:"-11";i:1;s:1:"0";i:2;s:3:"590";i:3;s:3:"862";}}s:5:"Thorn";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:5:"Thorn";s:1:"B";a:4:{i:0;s:3:"-27";i:1;s:1:"0";i:2;s:3:"573";i:3;s:3:"669";}}s:7:"Omacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:7:"Omacron";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:3:"-18";i:2;s:3:"691";i:3;s:3:"830";}}s:6:"Racute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Racute";s:1:"B";a:4:{i:0;s:3:"-29";i:1;s:1:"0";i:2;s:3:"623";i:3;s:3:"904";}}s:6:"Sacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"Sacute";s:1:"B";a:4:{i:0;s:1:"2";i:1;s:3:"-18";i:2;s:3:"531";i:3;s:3:"904";}}s:6:"dcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"608";s:1:"N";s:6:"dcaron";s:1:"B";a:4:{i:0;s:3:"-21";i:1;s:3:"-13";i:2;s:3:"675";i:3;s:3:"708";}}s:7:"Umacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:7:"Umacron";s:1:"B";a:4:{i:0;s:2:"67";i:1;s:3:"-18";i:2;s:3:"744";i:3;s:3:"830";}}s:5:"uring";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:5:"uring";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:2:"-9";i:2;s:3:"492";i:3;s:3:"729";}}s:13:"threesuperior";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"300";s:1:"N";s:13:"threesuperior";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:3:"265";i:2;s:3:"321";i:3;s:3:"683";}}s:6:"Ograve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Ograve";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:3:"-18";i:2;s:3:"691";i:3;s:3:"904";}}s:6:"Agrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Agrave";s:1:"B";a:4:{i:0;s:3:"-67";i:1;s:1:"0";i:2;s:3:"593";i:3;s:3:"904";}}s:6:"Abreve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Abreve";s:1:"B";a:4:{i:0;s:3:"-67";i:1;s:1:"0";i:2;s:3:"593";i:3;s:3:"885";}}s:8:"multiply";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"570";s:1:"N";s:8:"multiply";s:1:"B";a:4:{i:0;s:2:"48";i:1;s:2:"16";i:2;s:3:"522";i:3;s:3:"490";}}s:6:"uacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"uacute";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:2:"-9";i:2;s:3:"492";i:3;s:3:"697";}}s:6:"Tcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"Tcaron";s:1:"B";a:4:{i:0;s:2:"50";i:1;s:1:"0";i:2;s:3:"650";i:3;s:3:"897";}}s:11:"partialdiff";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"494";s:1:"N";s:11:"partialdiff";s:1:"B";a:4:{i:0;s:2:"11";i:1;s:3:"-21";i:2;s:3:"494";i:3;s:3:"750";}}s:9:"ydieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:9:"ydieresis";s:1:"B";a:4:{i:0;s:3:"-94";i:1;s:4:"-205";i:2;s:3:"443";i:3;s:3:"655";}}s:6:"Nacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Nacute";s:1:"B";a:4:{i:0;s:3:"-27";i:1;s:3:"-15";i:2;s:3:"748";i:3;s:3:"904";}}s:11:"icircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:11:"icircumflex";s:1:"B";a:4:{i:0;s:2:"-3";i:1;s:2:"-9";i:2;s:3:"324";i:3;s:3:"690";}}s:11:"Ecircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:11:"Ecircumflex";s:1:"B";a:4:{i:0;s:3:"-27";i:1;s:1:"0";i:2;s:3:"653";i:3;s:3:"897";}}s:9:"adieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:9:"adieresis";s:1:"B";a:4:{i:0;s:3:"-21";i:1;s:3:"-14";i:2;s:3:"476";i:3;s:3:"655";}}s:9:"edieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:9:"edieresis";s:1:"B";a:4:{i:0;s:1:"5";i:1;s:3:"-13";i:2;s:3:"448";i:3;s:3:"655";}}s:6:"cacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:6:"cacute";s:1:"B";a:4:{i:0;s:2:"-5";i:1;s:3:"-13";i:2;s:3:"435";i:3;s:3:"697";}}s:6:"nacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"nacute";s:1:"B";a:4:{i:0;s:2:"-6";i:1;s:2:"-9";i:2;s:3:"493";i:3;s:3:"697";}}s:7:"umacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:7:"umacron";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:2:"-9";i:2;s:3:"492";i:3;s:3:"623";}}s:6:"Ncaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Ncaron";s:1:"B";a:4:{i:0;s:3:"-27";i:1;s:3:"-15";i:2;s:3:"748";i:3;s:3:"897";}}s:6:"Iacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"389";s:1:"N";s:6:"Iacute";s:1:"B";a:4:{i:0;s:3:"-32";i:1;s:1:"0";i:2;s:3:"432";i:3;s:3:"904";}}s:9:"plusminus";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"570";s:1:"N";s:9:"plusminus";s:1:"B";a:4:{i:0;s:2:"33";i:1;s:1:"0";i:2;s:3:"537";i:3;s:3:"506";}}s:9:"brokenbar";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"220";s:1:"N";s:9:"brokenbar";s:1:"B";a:4:{i:0;s:2:"66";i:1;s:4:"-143";i:2;s:3:"154";i:3;s:3:"707";}}s:10:"registered";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"747";s:1:"N";s:10:"registered";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:3:"-18";i:2;s:3:"718";i:3;s:3:"685";}}s:6:"Gbreve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Gbreve";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:3:"-18";i:2;s:3:"706";i:3;s:3:"885";}}s:10:"Idotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"389";s:1:"N";s:10:"Idotaccent";s:1:"B";a:4:{i:0;s:3:"-32";i:1;s:1:"0";i:2;s:3:"406";i:3;s:3:"862";}}s:9:"summation";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"summation";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:3:"-10";i:2;s:3:"585";i:3;s:3:"706";}}s:6:"Egrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Egrave";s:1:"B";a:4:{i:0;s:3:"-27";i:1;s:1:"0";i:2;s:3:"653";i:3;s:3:"904";}}s:6:"racute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"389";s:1:"N";s:6:"racute";s:1:"B";a:4:{i:0;s:3:"-21";i:1;s:1:"0";i:2;s:3:"407";i:3;s:3:"697";}}s:7:"omacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:7:"omacron";s:1:"B";a:4:{i:0;s:2:"-3";i:1;s:3:"-13";i:2;s:3:"462";i:3;s:3:"623";}}s:6:"Zacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"Zacute";s:1:"B";a:4:{i:0;s:3:"-11";i:1;s:1:"0";i:2;s:3:"590";i:3;s:3:"904";}}s:6:"Zcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"Zcaron";s:1:"B";a:4:{i:0;s:3:"-11";i:1;s:1:"0";i:2;s:3:"590";i:3;s:3:"897";}}s:12:"greaterequal";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"549";s:1:"N";s:12:"greaterequal";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:1:"0";i:2;s:3:"523";i:3;s:3:"704";}}s:3:"Eth";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:3:"Eth";s:1:"B";a:4:{i:0;s:3:"-31";i:1;s:1:"0";i:2;s:3:"700";i:3;s:3:"669";}}s:8:"Ccedilla";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:8:"Ccedilla";s:1:"B";a:4:{i:0;s:2:"32";i:1;s:4:"-218";i:2;s:3:"677";i:3;s:3:"685";}}s:12:"lcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:12:"lcommaaccent";s:1:"B";a:4:{i:0;s:3:"-42";i:1;s:4:"-218";i:2;s:3:"290";i:3;s:3:"699";}}s:6:"tcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"366";s:1:"N";s:6:"tcaron";s:1:"B";a:4:{i:0;s:3:"-11";i:1;s:2:"-9";i:2;s:3:"434";i:3;s:3:"754";}}s:7:"eogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:7:"eogonek";s:1:"B";a:4:{i:0;s:1:"5";i:1;s:4:"-183";i:2;s:3:"398";i:3;s:3:"462";}}s:7:"Uogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:7:"Uogonek";s:1:"B";a:4:{i:0;s:2:"67";i:1;s:4:"-183";i:2;s:3:"744";i:3;s:3:"669";}}s:6:"Aacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Aacute";s:1:"B";a:4:{i:0;s:3:"-67";i:1;s:1:"0";i:2;s:3:"593";i:3;s:3:"904";}}s:9:"Adieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:9:"Adieresis";s:1:"B";a:4:{i:0;s:3:"-67";i:1;s:1:"0";i:2;s:3:"593";i:3;s:3:"862";}}s:6:"egrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:6:"egrave";s:1:"B";a:4:{i:0;s:1:"5";i:1;s:3:"-13";i:2;s:3:"398";i:3;s:3:"697";}}s:6:"zacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"389";s:1:"N";s:6:"zacute";s:1:"B";a:4:{i:0;s:3:"-43";i:1;s:3:"-78";i:2;s:3:"407";i:3;s:3:"697";}}s:7:"iogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:7:"iogonek";s:1:"B";a:4:{i:0;s:3:"-20";i:1;s:4:"-183";i:2;s:3:"263";i:3;s:3:"684";}}s:6:"Oacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Oacute";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:3:"-18";i:2;s:3:"691";i:3;s:3:"904";}}s:6:"oacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"oacute";s:1:"B";a:4:{i:0;s:2:"-3";i:1;s:3:"-13";i:2;s:3:"463";i:3;s:3:"697";}}s:7:"amacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:7:"amacron";s:1:"B";a:4:{i:0;s:3:"-21";i:1;s:3:"-14";i:2;s:3:"467";i:3;s:3:"623";}}s:6:"sacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"389";s:1:"N";s:6:"sacute";s:1:"B";a:4:{i:0;s:3:"-19";i:1;s:3:"-13";i:2;s:3:"407";i:3;s:3:"697";}}s:9:"idieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:9:"idieresis";s:1:"B";a:4:{i:0;s:1:"2";i:1;s:2:"-9";i:2;s:3:"364";i:3;s:3:"655";}}s:11:"Ocircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:11:"Ocircumflex";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:3:"-18";i:2;s:3:"691";i:3;s:3:"897";}}s:6:"Ugrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Ugrave";s:1:"B";a:4:{i:0;s:2:"67";i:1;s:3:"-18";i:2;s:3:"744";i:3;s:3:"904";}}s:5:"Delta";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"612";s:1:"N";s:5:"Delta";s:1:"B";a:4:{i:0;s:1:"6";i:1;s:1:"0";i:2;s:3:"608";i:3;s:3:"688";}}s:5:"thorn";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:5:"thorn";s:1:"B";a:4:{i:0;s:4:"-120";i:1;s:4:"-205";i:2;s:3:"446";i:3;s:3:"699";}}s:11:"twosuperior";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"300";s:1:"N";s:11:"twosuperior";s:1:"B";a:4:{i:0;s:1:"2";i:1;s:3:"274";i:2;s:3:"313";i:3;s:3:"683";}}s:9:"Odieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:9:"Odieresis";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:3:"-18";i:2;s:3:"691";i:3;s:3:"862";}}s:2:"mu";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"576";s:1:"N";s:2:"mu";s:1:"B";a:4:{i:0;s:3:"-60";i:1;s:4:"-207";i:2;s:3:"516";i:3;s:3:"449";}}s:6:"igrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:6:"igrave";s:1:"B";a:4:{i:0;s:1:"2";i:1;s:2:"-9";i:2;s:3:"259";i:3;s:3:"697";}}s:13:"ohungarumlaut";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:13:"ohungarumlaut";s:1:"B";a:4:{i:0;s:2:"-3";i:1;s:3:"-13";i:2;s:3:"582";i:3;s:3:"697";}}s:7:"Eogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:7:"Eogonek";s:1:"B";a:4:{i:0;s:3:"-27";i:1;s:4:"-183";i:2;s:3:"653";i:3;s:3:"669";}}s:6:"dcroat";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"dcroat";s:1:"B";a:4:{i:0;s:3:"-21";i:1;s:3:"-13";i:2;s:3:"552";i:3;s:3:"699";}}s:13:"threequarters";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"750";s:1:"N";s:13:"threequarters";s:1:"B";a:4:{i:0;s:1:"7";i:1;s:3:"-14";i:2;s:3:"726";i:3;s:3:"683";}}s:8:"Scedilla";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:8:"Scedilla";s:1:"B";a:4:{i:0;s:1:"2";i:1;s:4:"-218";i:2;s:3:"526";i:3;s:3:"685";}}s:6:"lcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"382";s:1:"N";s:6:"lcaron";s:1:"B";a:4:{i:0;s:1:"2";i:1;s:2:"-9";i:2;s:3:"448";i:3;s:3:"708";}}s:12:"Kcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:12:"Kcommaaccent";s:1:"B";a:4:{i:0;s:3:"-21";i:1;s:4:"-218";i:2;s:3:"702";i:3;s:3:"669";}}s:6:"Lacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"Lacute";s:1:"B";a:4:{i:0;s:3:"-22";i:1;s:1:"0";i:2;s:3:"590";i:3;s:3:"904";}}s:9:"trademark";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:4:"1000";s:1:"N";s:9:"trademark";s:1:"B";a:4:{i:0;s:2:"32";i:1;s:3:"263";i:2;s:3:"968";i:3;s:3:"669";}}s:10:"edotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:10:"edotaccent";s:1:"B";a:4:{i:0;s:1:"5";i:1;s:3:"-13";i:2;s:3:"398";i:3;s:3:"655";}}s:6:"Igrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"389";s:1:"N";s:6:"Igrave";s:1:"B";a:4:{i:0;s:3:"-32";i:1;s:1:"0";i:2;s:3:"406";i:3;s:3:"904";}}s:7:"Imacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"389";s:1:"N";s:7:"Imacron";s:1:"B";a:4:{i:0;s:3:"-32";i:1;s:1:"0";i:2;s:3:"461";i:3;s:3:"830";}}s:6:"Lcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"Lcaron";s:1:"B";a:4:{i:0;s:3:"-22";i:1;s:1:"0";i:2;s:3:"671";i:3;s:3:"718";}}s:7:"onehalf";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"750";s:1:"N";s:7:"onehalf";s:1:"B";a:4:{i:0;s:2:"-9";i:1;s:3:"-14";i:2;s:3:"723";i:3;s:3:"683";}}s:9:"lessequal";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"549";s:1:"N";s:9:"lessequal";s:1:"B";a:4:{i:0;s:2:"29";i:1;s:1:"0";i:2;s:3:"526";i:3;s:3:"704";}}s:11:"ocircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:11:"ocircumflex";s:1:"B";a:4:{i:0;s:2:"-3";i:1;s:3:"-13";i:2;s:3:"451";i:3;s:3:"690";}}s:6:"ntilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"ntilde";s:1:"B";a:4:{i:0;s:2:"-6";i:1;s:2:"-9";i:2;s:3:"504";i:3;s:3:"655";}}s:13:"Uhungarumlaut";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:13:"Uhungarumlaut";s:1:"B";a:4:{i:0;s:2:"67";i:1;s:3:"-18";i:2;s:3:"744";i:3;s:3:"904";}}s:6:"Eacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Eacute";s:1:"B";a:4:{i:0;s:3:"-27";i:1;s:1:"0";i:2;s:3:"653";i:3;s:3:"904";}}s:7:"emacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:7:"emacron";s:1:"B";a:4:{i:0;s:1:"5";i:1;s:3:"-13";i:2;s:3:"439";i:3;s:3:"623";}}s:6:"gbreve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"gbreve";s:1:"B";a:4:{i:0;s:3:"-52";i:1;s:4:"-203";i:2;s:3:"478";i:3;s:3:"678";}}s:10:"onequarter";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"750";s:1:"N";s:10:"onequarter";s:1:"B";a:4:{i:0;s:1:"7";i:1;s:3:"-14";i:2;s:3:"721";i:3;s:3:"683";}}s:6:"Scaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"Scaron";s:1:"B";a:4:{i:0;s:1:"2";i:1;s:3:"-18";i:2;s:3:"553";i:3;s:3:"897";}}s:12:"Scommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:12:"Scommaaccent";s:1:"B";a:4:{i:0;s:1:"2";i:1;s:4:"-218";i:2;s:3:"526";i:3;s:3:"685";}}s:13:"Ohungarumlaut";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:13:"Ohungarumlaut";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:3:"-18";i:2;s:3:"723";i:3;s:3:"904";}}s:6:"degree";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"400";s:1:"N";s:6:"degree";s:1:"B";a:4:{i:0;s:2:"83";i:1;s:3:"397";i:2;s:3:"369";i:3;s:3:"683";}}s:6:"ograve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"ograve";s:1:"B";a:4:{i:0;s:2:"-3";i:1;s:3:"-13";i:2;s:3:"441";i:3;s:3:"697";}}s:6:"Ccaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Ccaron";s:1:"B";a:4:{i:0;s:2:"32";i:1;s:3:"-18";i:2;s:3:"677";i:3;s:3:"897";}}s:6:"ugrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"ugrave";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:2:"-9";i:2;s:3:"492";i:3;s:3:"697";}}s:7:"radical";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"549";s:1:"N";s:7:"radical";s:1:"B";a:4:{i:0;s:2:"10";i:1;s:3:"-46";i:2;s:3:"512";i:3;s:3:"850";}}s:6:"Dcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Dcaron";s:1:"B";a:4:{i:0;s:3:"-46";i:1;s:1:"0";i:2;s:3:"685";i:3;s:3:"897";}}s:12:"rcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"389";s:1:"N";s:12:"rcommaaccent";s:1:"B";a:4:{i:0;s:3:"-67";i:1;s:4:"-218";i:2;s:3:"389";i:3;s:3:"462";}}s:6:"Ntilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Ntilde";s:1:"B";a:4:{i:0;s:3:"-27";i:1;s:3:"-15";i:2;s:3:"748";i:3;s:3:"862";}}s:6:"otilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"otilde";s:1:"B";a:4:{i:0;s:2:"-3";i:1;s:3:"-13";i:2;s:3:"491";i:3;s:3:"655";}}s:12:"Rcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:12:"Rcommaaccent";s:1:"B";a:4:{i:0;s:3:"-29";i:1;s:4:"-218";i:2;s:3:"623";i:3;s:3:"669";}}s:12:"Lcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:12:"Lcommaaccent";s:1:"B";a:4:{i:0;s:3:"-22";i:1;s:4:"-218";i:2;s:3:"590";i:3;s:3:"669";}}s:6:"Atilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Atilde";s:1:"B";a:4:{i:0;s:3:"-67";i:1;s:1:"0";i:2;s:3:"593";i:3;s:3:"862";}}s:7:"Aogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:7:"Aogonek";s:1:"B";a:4:{i:0;s:3:"-67";i:1;s:4:"-183";i:2;s:3:"604";i:3;s:3:"683";}}s:5:"Aring";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:5:"Aring";s:1:"B";a:4:{i:0;s:3:"-67";i:1;s:1:"0";i:2;s:3:"593";i:3;s:3:"921";}}s:6:"Otilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Otilde";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:3:"-18";i:2;s:3:"691";i:3;s:3:"862";}}s:10:"zdotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"389";s:1:"N";s:10:"zdotaccent";s:1:"B";a:4:{i:0;s:3:"-43";i:1;s:3:"-78";i:2;s:3:"368";i:3;s:3:"655";}}s:6:"Ecaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Ecaron";s:1:"B";a:4:{i:0;s:3:"-27";i:1;s:1:"0";i:2;s:3:"653";i:3;s:3:"897";}}s:7:"Iogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"389";s:1:"N";s:7:"Iogonek";s:1:"B";a:4:{i:0;s:3:"-32";i:1;s:4:"-183";i:2;s:3:"406";i:3;s:3:"669";}}s:12:"kcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:12:"kcommaaccent";s:1:"B";a:4:{i:0;s:3:"-23";i:1;s:4:"-218";i:2;s:3:"483";i:3;s:3:"699";}}s:5:"minus";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"606";s:1:"N";s:5:"minus";s:1:"B";a:4:{i:0;s:2:"51";i:1;s:3:"209";i:2;s:3:"555";i:3;s:3:"297";}}s:11:"Icircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"389";s:1:"N";s:11:"Icircumflex";s:1:"B";a:4:{i:0;s:3:"-32";i:1;s:1:"0";i:2;s:3:"450";i:3;s:3:"897";}}s:6:"ncaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"ncaron";s:1:"B";a:4:{i:0;s:2:"-6";i:1;s:2:"-9";i:2;s:3:"523";i:3;s:3:"690";}}s:12:"tcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:12:"tcommaaccent";s:1:"B";a:4:{i:0;s:3:"-62";i:1;s:4:"-218";i:2;s:3:"281";i:3;s:3:"594";}}s:10:"logicalnot";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"606";s:1:"N";s:10:"logicalnot";s:1:"B";a:4:{i:0;s:2:"51";i:1;s:3:"108";i:2;s:3:"555";i:3;s:3:"399";}}s:9:"odieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:9:"odieresis";s:1:"B";a:4:{i:0;s:2:"-3";i:1;s:3:"-13";i:2;s:3:"471";i:3;s:3:"655";}}s:9:"udieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:9:"udieresis";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:2:"-9";i:2;s:3:"499";i:3;s:3:"655";}}s:8:"notequal";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"549";s:1:"N";s:8:"notequal";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:3:"-49";i:2;s:3:"540";i:3;s:3:"570";}}s:12:"gcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:12:"gcommaaccent";s:1:"B";a:4:{i:0;s:3:"-52";i:1;s:4:"-203";i:2;s:3:"478";i:3;s:3:"767";}}s:3:"eth";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:3:"eth";s:1:"B";a:4:{i:0;s:2:"-3";i:1;s:3:"-13";i:2;s:3:"454";i:3;s:3:"699";}}s:6:"zcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"389";s:1:"N";s:6:"zcaron";s:1:"B";a:4:{i:0;s:3:"-43";i:1;s:3:"-78";i:2;s:3:"424";i:3;s:3:"690";}}s:12:"ncommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:12:"ncommaaccent";s:1:"B";a:4:{i:0;s:2:"-6";i:1;s:4:"-218";i:2;s:3:"493";i:3;s:3:"462";}}s:11:"onesuperior";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"300";s:1:"N";s:11:"onesuperior";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:3:"274";i:2;s:3:"301";i:3;s:3:"683";}}s:7:"imacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:7:"imacron";s:1:"B";a:4:{i:0;s:1:"2";i:1;s:2:"-9";i:2;s:3:"294";i:3;s:3:"623";}}s:4:"Euro";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:4:"Euro";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:1:"0";i:2;s:1:"0";i:3;s:1:"0";}}}s:3:"KPX";a:105:{s:1:"A";a:49:{s:1:"C";s:3:"-65";s:6:"Cacute";s:3:"-65";s:6:"Ccaron";s:3:"-65";s:8:"Ccedilla";s:3:"-65";s:1:"G";s:3:"-60";s:6:"Gbreve";s:3:"-60";s:12:"Gcommaaccent";s:3:"-60";s:1:"O";s:3:"-50";s:6:"Oacute";s:3:"-50";s:11:"Ocircumflex";s:3:"-50";s:9:"Odieresis";s:3:"-50";s:6:"Ograve";s:3:"-50";s:13:"Ohungarumlaut";s:3:"-50";s:7:"Omacron";s:3:"-50";s:6:"Oslash";s:3:"-50";s:6:"Otilde";s:3:"-50";s:1:"Q";s:3:"-55";s:1:"T";s:3:"-55";s:6:"Tcaron";s:3:"-55";s:12:"Tcommaaccent";s:3:"-55";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:3:"-95";s:1:"W";s:4:"-100";s:1:"Y";s:3:"-70";s:6:"Yacute";s:3:"-70";s:9:"Ydieresis";s:3:"-70";s:10:"quoteright";s:3:"-74";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"v";s:3:"-74";s:1:"w";s:3:"-74";s:1:"y";s:3:"-74";s:6:"yacute";s:3:"-74";s:9:"ydieresis";s:3:"-74";}s:6:"Aacute";a:49:{s:1:"C";s:3:"-65";s:6:"Cacute";s:3:"-65";s:6:"Ccaron";s:3:"-65";s:8:"Ccedilla";s:3:"-65";s:1:"G";s:3:"-60";s:6:"Gbreve";s:3:"-60";s:12:"Gcommaaccent";s:3:"-60";s:1:"O";s:3:"-50";s:6:"Oacute";s:3:"-50";s:11:"Ocircumflex";s:3:"-50";s:9:"Odieresis";s:3:"-50";s:6:"Ograve";s:3:"-50";s:13:"Ohungarumlaut";s:3:"-50";s:7:"Omacron";s:3:"-50";s:6:"Oslash";s:3:"-50";s:6:"Otilde";s:3:"-50";s:1:"Q";s:3:"-55";s:1:"T";s:3:"-55";s:6:"Tcaron";s:3:"-55";s:12:"Tcommaaccent";s:3:"-55";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:3:"-95";s:1:"W";s:4:"-100";s:1:"Y";s:3:"-70";s:6:"Yacute";s:3:"-70";s:9:"Ydieresis";s:3:"-70";s:10:"quoteright";s:3:"-74";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"v";s:3:"-74";s:1:"w";s:3:"-74";s:1:"y";s:3:"-74";s:6:"yacute";s:3:"-74";s:9:"ydieresis";s:3:"-74";}s:6:"Abreve";a:49:{s:1:"C";s:3:"-65";s:6:"Cacute";s:3:"-65";s:6:"Ccaron";s:3:"-65";s:8:"Ccedilla";s:3:"-65";s:1:"G";s:3:"-60";s:6:"Gbreve";s:3:"-60";s:12:"Gcommaaccent";s:3:"-60";s:1:"O";s:3:"-50";s:6:"Oacute";s:3:"-50";s:11:"Ocircumflex";s:3:"-50";s:9:"Odieresis";s:3:"-50";s:6:"Ograve";s:3:"-50";s:13:"Ohungarumlaut";s:3:"-50";s:7:"Omacron";s:3:"-50";s:6:"Oslash";s:3:"-50";s:6:"Otilde";s:3:"-50";s:1:"Q";s:3:"-55";s:1:"T";s:3:"-55";s:6:"Tcaron";s:3:"-55";s:12:"Tcommaaccent";s:3:"-55";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:3:"-95";s:1:"W";s:4:"-100";s:1:"Y";s:3:"-70";s:6:"Yacute";s:3:"-70";s:9:"Ydieresis";s:3:"-70";s:10:"quoteright";s:3:"-74";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"v";s:3:"-74";s:1:"w";s:3:"-74";s:1:"y";s:3:"-74";s:6:"yacute";s:3:"-74";s:9:"ydieresis";s:3:"-74";}s:11:"Acircumflex";a:49:{s:1:"C";s:3:"-65";s:6:"Cacute";s:3:"-65";s:6:"Ccaron";s:3:"-65";s:8:"Ccedilla";s:3:"-65";s:1:"G";s:3:"-60";s:6:"Gbreve";s:3:"-60";s:12:"Gcommaaccent";s:3:"-60";s:1:"O";s:3:"-50";s:6:"Oacute";s:3:"-50";s:11:"Ocircumflex";s:3:"-50";s:9:"Odieresis";s:3:"-50";s:6:"Ograve";s:3:"-50";s:13:"Ohungarumlaut";s:3:"-50";s:7:"Omacron";s:3:"-50";s:6:"Oslash";s:3:"-50";s:6:"Otilde";s:3:"-50";s:1:"Q";s:3:"-55";s:1:"T";s:3:"-55";s:6:"Tcaron";s:3:"-55";s:12:"Tcommaaccent";s:3:"-55";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:3:"-95";s:1:"W";s:4:"-100";s:1:"Y";s:3:"-70";s:6:"Yacute";s:3:"-70";s:9:"Ydieresis";s:3:"-70";s:10:"quoteright";s:3:"-74";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"v";s:3:"-74";s:1:"w";s:3:"-74";s:1:"y";s:3:"-74";s:6:"yacute";s:3:"-74";s:9:"ydieresis";s:3:"-74";}s:9:"Adieresis";a:49:{s:1:"C";s:3:"-65";s:6:"Cacute";s:3:"-65";s:6:"Ccaron";s:3:"-65";s:8:"Ccedilla";s:3:"-65";s:1:"G";s:3:"-60";s:6:"Gbreve";s:3:"-60";s:12:"Gcommaaccent";s:3:"-60";s:1:"O";s:3:"-50";s:6:"Oacute";s:3:"-50";s:11:"Ocircumflex";s:3:"-50";s:9:"Odieresis";s:3:"-50";s:6:"Ograve";s:3:"-50";s:13:"Ohungarumlaut";s:3:"-50";s:7:"Omacron";s:3:"-50";s:6:"Oslash";s:3:"-50";s:6:"Otilde";s:3:"-50";s:1:"Q";s:3:"-55";s:1:"T";s:3:"-55";s:6:"Tcaron";s:3:"-55";s:12:"Tcommaaccent";s:3:"-55";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:3:"-95";s:1:"W";s:4:"-100";s:1:"Y";s:3:"-70";s:6:"Yacute";s:3:"-70";s:9:"Ydieresis";s:3:"-70";s:10:"quoteright";s:3:"-74";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"v";s:3:"-74";s:1:"w";s:3:"-74";s:1:"y";s:3:"-74";s:6:"yacute";s:3:"-74";s:9:"ydieresis";s:3:"-74";}s:6:"Agrave";a:49:{s:1:"C";s:3:"-65";s:6:"Cacute";s:3:"-65";s:6:"Ccaron";s:3:"-65";s:8:"Ccedilla";s:3:"-65";s:1:"G";s:3:"-60";s:6:"Gbreve";s:3:"-60";s:12:"Gcommaaccent";s:3:"-60";s:1:"O";s:3:"-50";s:6:"Oacute";s:3:"-50";s:11:"Ocircumflex";s:3:"-50";s:9:"Odieresis";s:3:"-50";s:6:"Ograve";s:3:"-50";s:13:"Ohungarumlaut";s:3:"-50";s:7:"Omacron";s:3:"-50";s:6:"Oslash";s:3:"-50";s:6:"Otilde";s:3:"-50";s:1:"Q";s:3:"-55";s:1:"T";s:3:"-55";s:6:"Tcaron";s:3:"-55";s:12:"Tcommaaccent";s:3:"-55";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:3:"-95";s:1:"W";s:4:"-100";s:1:"Y";s:3:"-70";s:6:"Yacute";s:3:"-70";s:9:"Ydieresis";s:3:"-70";s:10:"quoteright";s:3:"-74";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"v";s:3:"-74";s:1:"w";s:3:"-74";s:1:"y";s:3:"-74";s:6:"yacute";s:3:"-74";s:9:"ydieresis";s:3:"-74";}s:7:"Amacron";a:49:{s:1:"C";s:3:"-65";s:6:"Cacute";s:3:"-65";s:6:"Ccaron";s:3:"-65";s:8:"Ccedilla";s:3:"-65";s:1:"G";s:3:"-60";s:6:"Gbreve";s:3:"-60";s:12:"Gcommaaccent";s:3:"-60";s:1:"O";s:3:"-50";s:6:"Oacute";s:3:"-50";s:11:"Ocircumflex";s:3:"-50";s:9:"Odieresis";s:3:"-50";s:6:"Ograve";s:3:"-50";s:13:"Ohungarumlaut";s:3:"-50";s:7:"Omacron";s:3:"-50";s:6:"Oslash";s:3:"-50";s:6:"Otilde";s:3:"-50";s:1:"Q";s:3:"-55";s:1:"T";s:3:"-55";s:6:"Tcaron";s:3:"-55";s:12:"Tcommaaccent";s:3:"-55";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:3:"-95";s:1:"W";s:4:"-100";s:1:"Y";s:3:"-70";s:6:"Yacute";s:3:"-70";s:9:"Ydieresis";s:3:"-70";s:10:"quoteright";s:3:"-74";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"v";s:3:"-74";s:1:"w";s:3:"-74";s:1:"y";s:3:"-74";s:6:"yacute";s:3:"-74";s:9:"ydieresis";s:3:"-74";}s:7:"Aogonek";a:49:{s:1:"C";s:3:"-65";s:6:"Cacute";s:3:"-65";s:6:"Ccaron";s:3:"-65";s:8:"Ccedilla";s:3:"-65";s:1:"G";s:3:"-60";s:6:"Gbreve";s:3:"-60";s:12:"Gcommaaccent";s:3:"-60";s:1:"O";s:3:"-50";s:6:"Oacute";s:3:"-50";s:11:"Ocircumflex";s:3:"-50";s:9:"Odieresis";s:3:"-50";s:6:"Ograve";s:3:"-50";s:13:"Ohungarumlaut";s:3:"-50";s:7:"Omacron";s:3:"-50";s:6:"Oslash";s:3:"-50";s:6:"Otilde";s:3:"-50";s:1:"Q";s:3:"-55";s:1:"T";s:3:"-55";s:6:"Tcaron";s:3:"-55";s:12:"Tcommaaccent";s:3:"-55";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:3:"-95";s:1:"W";s:4:"-100";s:1:"Y";s:3:"-70";s:6:"Yacute";s:3:"-70";s:9:"Ydieresis";s:3:"-70";s:10:"quoteright";s:3:"-74";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"v";s:3:"-74";s:1:"w";s:3:"-74";s:1:"y";s:3:"-34";s:6:"yacute";s:3:"-34";s:9:"ydieresis";s:3:"-34";}s:5:"Aring";a:49:{s:1:"C";s:3:"-65";s:6:"Cacute";s:3:"-65";s:6:"Ccaron";s:3:"-65";s:8:"Ccedilla";s:3:"-65";s:1:"G";s:3:"-60";s:6:"Gbreve";s:3:"-60";s:12:"Gcommaaccent";s:3:"-60";s:1:"O";s:3:"-50";s:6:"Oacute";s:3:"-50";s:11:"Ocircumflex";s:3:"-50";s:9:"Odieresis";s:3:"-50";s:6:"Ograve";s:3:"-50";s:13:"Ohungarumlaut";s:3:"-50";s:7:"Omacron";s:3:"-50";s:6:"Oslash";s:3:"-50";s:6:"Otilde";s:3:"-50";s:1:"Q";s:3:"-55";s:1:"T";s:3:"-55";s:6:"Tcaron";s:3:"-55";s:12:"Tcommaaccent";s:3:"-55";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:3:"-95";s:1:"W";s:4:"-100";s:1:"Y";s:3:"-70";s:6:"Yacute";s:3:"-70";s:9:"Ydieresis";s:3:"-70";s:10:"quoteright";s:3:"-74";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"v";s:3:"-74";s:1:"w";s:3:"-74";s:1:"y";s:3:"-74";s:6:"yacute";s:3:"-74";s:9:"ydieresis";s:3:"-74";}s:6:"Atilde";a:49:{s:1:"C";s:3:"-65";s:6:"Cacute";s:3:"-65";s:6:"Ccaron";s:3:"-65";s:8:"Ccedilla";s:3:"-65";s:1:"G";s:3:"-60";s:6:"Gbreve";s:3:"-60";s:12:"Gcommaaccent";s:3:"-60";s:1:"O";s:3:"-50";s:6:"Oacute";s:3:"-50";s:11:"Ocircumflex";s:3:"-50";s:9:"Odieresis";s:3:"-50";s:6:"Ograve";s:3:"-50";s:13:"Ohungarumlaut";s:3:"-50";s:7:"Omacron";s:3:"-50";s:6:"Oslash";s:3:"-50";s:6:"Otilde";s:3:"-50";s:1:"Q";s:3:"-55";s:1:"T";s:3:"-55";s:6:"Tcaron";s:3:"-55";s:12:"Tcommaaccent";s:3:"-55";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:3:"-95";s:1:"W";s:4:"-100";s:1:"Y";s:3:"-70";s:6:"Yacute";s:3:"-70";s:9:"Ydieresis";s:3:"-70";s:10:"quoteright";s:3:"-74";s:1:"u";s:3:"-30";s:6:"uacute";s:3:"-30";s:11:"ucircumflex";s:3:"-30";s:9:"udieresis";s:3:"-30";s:6:"ugrave";s:3:"-30";s:13:"uhungarumlaut";s:3:"-30";s:7:"umacron";s:3:"-30";s:7:"uogonek";s:3:"-30";s:5:"uring";s:3:"-30";s:1:"v";s:3:"-74";s:1:"w";s:3:"-74";s:1:"y";s:3:"-74";s:6:"yacute";s:3:"-74";s:9:"ydieresis";s:3:"-74";}s:1:"B";a:19:{s:1:"A";s:3:"-25";s:6:"Aacute";s:3:"-25";s:6:"Abreve";s:3:"-25";s:11:"Acircumflex";s:3:"-25";s:9:"Adieresis";s:3:"-25";s:6:"Agrave";s:3:"-25";s:7:"Amacron";s:3:"-25";s:7:"Aogonek";s:3:"-25";s:5:"Aring";s:3:"-25";s:6:"Atilde";s:3:"-25";s:1:"U";s:3:"-10";s:6:"Uacute";s:3:"-10";s:11:"Ucircumflex";s:3:"-10";s:9:"Udieresis";s:3:"-10";s:6:"Ugrave";s:3:"-10";s:13:"Uhungarumlaut";s:3:"-10";s:7:"Umacron";s:3:"-10";s:7:"Uogonek";s:3:"-10";s:5:"Uring";s:3:"-10";}s:1:"D";a:15:{s:1:"A";s:3:"-25";s:6:"Aacute";s:3:"-25";s:6:"Abreve";s:3:"-25";s:11:"Acircumflex";s:3:"-25";s:9:"Adieresis";s:3:"-25";s:6:"Agrave";s:3:"-25";s:7:"Amacron";s:3:"-25";s:7:"Aogonek";s:3:"-25";s:5:"Aring";s:3:"-25";s:6:"Atilde";s:3:"-25";s:1:"V";s:3:"-50";s:1:"W";s:3:"-40";s:1:"Y";s:3:"-50";s:6:"Yacute";s:3:"-50";s:9:"Ydieresis";s:3:"-50";}s:6:"Dcaron";a:15:{s:1:"A";s:3:"-25";s:6:"Aacute";s:3:"-25";s:6:"Abreve";s:3:"-25";s:11:"Acircumflex";s:3:"-25";s:9:"Adieresis";s:3:"-25";s:6:"Agrave";s:3:"-25";s:7:"Amacron";s:3:"-25";s:7:"Aogonek";s:3:"-25";s:5:"Aring";s:3:"-25";s:6:"Atilde";s:3:"-25";s:1:"V";s:3:"-50";s:1:"W";s:3:"-40";s:1:"Y";s:3:"-50";s:6:"Yacute";s:3:"-50";s:9:"Ydieresis";s:3:"-50";}s:6:"Dcroat";a:15:{s:1:"A";s:3:"-25";s:6:"Aacute";s:3:"-25";s:6:"Abreve";s:3:"-25";s:11:"Acircumflex";s:3:"-25";s:9:"Adieresis";s:3:"-25";s:6:"Agrave";s:3:"-25";s:7:"Amacron";s:3:"-25";s:7:"Aogonek";s:3:"-25";s:5:"Aring";s:3:"-25";s:6:"Atilde";s:3:"-25";s:1:"V";s:3:"-50";s:1:"W";s:3:"-40";s:1:"Y";s:3:"-50";s:6:"Yacute";s:3:"-50";s:9:"Ydieresis";s:3:"-50";}s:1:"F";a:51:{s:1:"A";s:4:"-100";s:6:"Aacute";s:4:"-100";s:6:"Abreve";s:4:"-100";s:11:"Acircumflex";s:4:"-100";s:9:"Adieresis";s:4:"-100";s:6:"Agrave";s:4:"-100";s:7:"Amacron";s:4:"-100";s:7:"Aogonek";s:4:"-100";s:5:"Aring";s:4:"-100";s:6:"Atilde";s:4:"-100";s:1:"a";s:3:"-95";s:6:"aacute";s:3:"-95";s:6:"abreve";s:3:"-95";s:11:"acircumflex";s:3:"-95";s:9:"adieresis";s:3:"-95";s:6:"agrave";s:3:"-95";s:7:"amacron";s:3:"-95";s:7:"aogonek";s:3:"-95";s:5:"aring";s:3:"-95";s:6:"atilde";s:3:"-95";s:5:"comma";s:4:"-129";s:1:"e";s:4:"-100";s:6:"eacute";s:4:"-100";s:6:"ecaron";s:4:"-100";s:11:"ecircumflex";s:4:"-100";s:9:"edieresis";s:4:"-100";s:10:"edotaccent";s:4:"-100";s:6:"egrave";s:4:"-100";s:7:"emacron";s:4:"-100";s:7:"eogonek";s:4:"-100";s:1:"i";s:3:"-40";s:6:"iacute";s:3:"-40";s:11:"icircumflex";s:3:"-40";s:9:"idieresis";s:3:"-40";s:6:"igrave";s:3:"-40";s:7:"imacron";s:3:"-40";s:7:"iogonek";s:3:"-40";s:1:"o";s:3:"-70";s:6:"oacute";s:3:"-70";s:11:"ocircumflex";s:3:"-70";s:9:"odieresis";s:3:"-70";s:6:"ograve";s:3:"-70";s:13:"ohungarumlaut";s:3:"-70";s:7:"omacron";s:3:"-70";s:6:"oslash";s:3:"-70";s:6:"otilde";s:3:"-70";s:6:"period";s:4:"-129";s:1:"r";s:3:"-50";s:6:"racute";s:3:"-50";s:6:"rcaron";s:3:"-50";s:12:"rcommaaccent";s:3:"-50";}s:1:"J";a:49:{s:1:"A";s:3:"-25";s:6:"Aacute";s:3:"-25";s:6:"Abreve";s:3:"-25";s:11:"Acircumflex";s:3:"-25";s:9:"Adieresis";s:3:"-25";s:6:"Agrave";s:3:"-25";s:7:"Amacron";s:3:"-25";s:7:"Aogonek";s:3:"-25";s:5:"Aring";s:3:"-25";s:6:"Atilde";s:3:"-25";s:1:"a";s:3:"-40";s:6:"aacute";s:3:"-40";s:6:"abreve";s:3:"-40";s:11:"acircumflex";s:3:"-40";s:9:"adieresis";s:3:"-40";s:6:"agrave";s:3:"-40";s:7:"amacron";s:3:"-40";s:7:"aogonek";s:3:"-40";s:5:"aring";s:3:"-40";s:6:"atilde";s:3:"-40";s:5:"comma";s:3:"-10";s:1:"e";s:3:"-40";s:6:"eacute";s:3:"-40";s:6:"ecaron";s:3:"-40";s:11:"ecircumflex";s:3:"-40";s:9:"edieresis";s:3:"-40";s:10:"edotaccent";s:3:"-40";s:6:"egrave";s:3:"-40";s:7:"emacron";s:3:"-40";s:7:"eogonek";s:3:"-40";s:1:"o";s:3:"-40";s:6:"oacute";s:3:"-40";s:11:"ocircumflex";s:3:"-40";s:9:"odieresis";s:3:"-40";s:6:"ograve";s:3:"-40";s:13:"ohungarumlaut";s:3:"-40";s:7:"omacron";s:3:"-40";s:6:"oslash";s:3:"-40";s:6:"otilde";s:3:"-40";s:6:"period";s:3:"-10";s:1:"u";s:3:"-40";s:6:"uacute";s:3:"-40";s:11:"ucircumflex";s:3:"-40";s:9:"udieresis";s:3:"-40";s:6:"ugrave";s:3:"-40";s:13:"uhungarumlaut";s:3:"-40";s:7:"umacron";s:3:"-40";s:7:"uogonek";s:3:"-40";s:5:"uring";s:3:"-40";}s:1:"K";a:39:{s:1:"O";s:3:"-30";s:6:"Oacute";s:3:"-30";s:11:"Ocircumflex";s:3:"-30";s:9:"Odieresis";s:3:"-30";s:6:"Ograve";s:3:"-30";s:13:"Ohungarumlaut";s:3:"-30";s:7:"Omacron";s:3:"-30";s:6:"Oslash";s:3:"-30";s:6:"Otilde";s:3:"-30";s:1:"e";s:3:"-25";s:6:"eacute";s:3:"-25";s:6:"ecaron";s:3:"-25";s:11:"ecircumflex";s:3:"-25";s:9:"edieresis";s:3:"-25";s:10:"edotaccent";s:3:"-25";s:6:"egrave";s:3:"-25";s:7:"emacron";s:3:"-25";s:7:"eogonek";s:3:"-25";s:1:"o";s:3:"-25";s:6:"oacute";s:3:"-25";s:11:"ocircumflex";s:3:"-25";s:9:"odieresis";s:3:"-25";s:6:"ograve";s:3:"-25";s:13:"ohungarumlaut";s:3:"-25";s:7:"omacron";s:3:"-25";s:6:"oslash";s:3:"-25";s:6:"otilde";s:3:"-25";s:1:"u";s:3:"-20";s:6:"uacute";s:3:"-20";s:11:"ucircumflex";s:3:"-20";s:9:"udieresis";s:3:"-20";s:6:"ugrave";s:3:"-20";s:13:"uhungarumlaut";s:3:"-20";s:7:"umacron";s:3:"-20";s:7:"uogonek";s:3:"-20";s:5:"uring";s:3:"-20";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:12:"Kcommaaccent";a:39:{s:1:"O";s:3:"-30";s:6:"Oacute";s:3:"-30";s:11:"Ocircumflex";s:3:"-30";s:9:"Odieresis";s:3:"-30";s:6:"Ograve";s:3:"-30";s:13:"Ohungarumlaut";s:3:"-30";s:7:"Omacron";s:3:"-30";s:6:"Oslash";s:3:"-30";s:6:"Otilde";s:3:"-30";s:1:"e";s:3:"-25";s:6:"eacute";s:3:"-25";s:6:"ecaron";s:3:"-25";s:11:"ecircumflex";s:3:"-25";s:9:"edieresis";s:3:"-25";s:10:"edotaccent";s:3:"-25";s:6:"egrave";s:3:"-25";s:7:"emacron";s:3:"-25";s:7:"eogonek";s:3:"-25";s:1:"o";s:3:"-25";s:6:"oacute";s:3:"-25";s:11:"ocircumflex";s:3:"-25";s:9:"odieresis";s:3:"-25";s:6:"ograve";s:3:"-25";s:13:"ohungarumlaut";s:3:"-25";s:7:"omacron";s:3:"-25";s:6:"oslash";s:3:"-25";s:6:"otilde";s:3:"-25";s:1:"u";s:3:"-20";s:6:"uacute";s:3:"-20";s:11:"ucircumflex";s:3:"-20";s:9:"udieresis";s:3:"-20";s:6:"ugrave";s:3:"-20";s:13:"uhungarumlaut";s:3:"-20";s:7:"umacron";s:3:"-20";s:7:"uogonek";s:3:"-20";s:5:"uring";s:3:"-20";s:1:"y";s:3:"-20";s:6:"yacute";s:3:"-20";s:9:"ydieresis";s:3:"-20";}s:1:"L";a:12:{s:1:"T";s:3:"-18";s:6:"Tcaron";s:3:"-18";s:12:"Tcommaaccent";s:3:"-18";s:1:"V";s:3:"-37";s:1:"W";s:3:"-37";s:1:"Y";s:3:"-37";s:6:"Yacute";s:3:"-37";s:9:"Ydieresis";s:3:"-37";s:10:"quoteright";s:3:"-55";s:1:"y";s:3:"-37";s:6:"yacute";s:3:"-37";s:9:"ydieresis";s:3:"-37";}s:6:"Lacute";a:12:{s:1:"T";s:3:"-18";s:6:"Tcaron";s:3:"-18";s:12:"Tcommaaccent";s:3:"-18";s:1:"V";s:3:"-37";s:1:"W";s:3:"-37";s:1:"Y";s:3:"-37";s:6:"Yacute";s:3:"-37";s:9:"Ydieresis";s:3:"-37";s:10:"quoteright";s:3:"-55";s:1:"y";s:3:"-37";s:6:"yacute";s:3:"-37";s:9:"ydieresis";s:3:"-37";}s:12:"Lcommaaccent";a:12:{s:1:"T";s:3:"-18";s:6:"Tcaron";s:3:"-18";s:12:"Tcommaaccent";s:3:"-18";s:1:"V";s:3:"-37";s:1:"W";s:3:"-37";s:1:"Y";s:3:"-37";s:6:"Yacute";s:3:"-37";s:9:"Ydieresis";s:3:"-37";s:10:"quoteright";s:3:"-55";s:1:"y";s:3:"-37";s:6:"yacute";s:3:"-37";s:9:"ydieresis";s:3:"-37";}s:6:"Lslash";a:12:{s:1:"T";s:3:"-18";s:6:"Tcaron";s:3:"-18";s:12:"Tcommaaccent";s:3:"-18";s:1:"V";s:3:"-37";s:1:"W";s:3:"-37";s:1:"Y";s:3:"-37";s:6:"Yacute";s:3:"-37";s:9:"Ydieresis";s:3:"-37";s:10:"quoteright";s:3:"-55";s:1:"y";s:3:"-37";s:6:"yacute";s:3:"-37";s:9:"ydieresis";s:3:"-37";}s:1:"N";a:10:{s:1:"A";s:3:"-30";s:6:"Aacute";s:3:"-30";s:6:"Abreve";s:3:"-30";s:11:"Acircumflex";s:3:"-30";s:9:"Adieresis";s:3:"-30";s:6:"Agrave";s:3:"-30";s:7:"Amacron";s:3:"-30";s:7:"Aogonek";s:3:"-30";s:5:"Aring";s:3:"-30";s:6:"Atilde";s:3:"-30";}s:6:"Nacute";a:10:{s:1:"A";s:3:"-30";s:6:"Aacute";s:3:"-30";s:6:"Abreve";s:3:"-30";s:11:"Acircumflex";s:3:"-30";s:9:"Adieresis";s:3:"-30";s:6:"Agrave";s:3:"-30";s:7:"Amacron";s:3:"-30";s:7:"Aogonek";s:3:"-30";s:5:"Aring";s:3:"-30";s:6:"Atilde";s:3:"-30";}s:6:"Ncaron";a:10:{s:1:"A";s:3:"-30";s:6:"Aacute";s:3:"-30";s:6:"Abreve";s:3:"-30";s:11:"Acircumflex";s:3:"-30";s:9:"Adieresis";s:3:"-30";s:6:"Agrave";s:3:"-30";s:7:"Amacron";s:3:"-30";s:7:"Aogonek";s:3:"-30";s:5:"Aring";s:3:"-30";s:6:"Atilde";s:3:"-30";}s:12:"Ncommaaccent";a:10:{s:1:"A";s:3:"-30";s:6:"Aacute";s:3:"-30";s:6:"Abreve";s:3:"-30";s:11:"Acircumflex";s:3:"-30";s:9:"Adieresis";s:3:"-30";s:6:"Agrave";s:3:"-30";s:7:"Amacron";s:3:"-30";s:7:"Aogonek";s:3:"-30";s:5:"Aring";s:3:"-30";s:6:"Atilde";s:3:"-30";}s:6:"Ntilde";a:10:{s:1:"A";s:3:"-30";s:6:"Aacute";s:3:"-30";s:6:"Abreve";s:3:"-30";s:11:"Acircumflex";s:3:"-30";s:9:"Adieresis";s:3:"-30";s:6:"Agrave";s:3:"-30";s:7:"Amacron";s:3:"-30";s:7:"Aogonek";s:3:"-30";s:5:"Aring";s:3:"-30";s:6:"Atilde";s:3:"-30";}s:1:"O";a:19:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-50";s:1:"X";s:3:"-40";s:1:"Y";s:3:"-50";s:6:"Yacute";s:3:"-50";s:9:"Ydieresis";s:3:"-50";}s:6:"Oacute";a:19:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-50";s:1:"X";s:3:"-40";s:1:"Y";s:3:"-50";s:6:"Yacute";s:3:"-50";s:9:"Ydieresis";s:3:"-50";}s:11:"Ocircumflex";a:19:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-50";s:1:"X";s:3:"-40";s:1:"Y";s:3:"-50";s:6:"Yacute";s:3:"-50";s:9:"Ydieresis";s:3:"-50";}s:9:"Odieresis";a:19:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-50";s:1:"X";s:3:"-40";s:1:"Y";s:3:"-50";s:6:"Yacute";s:3:"-50";s:9:"Ydieresis";s:3:"-50";}s:6:"Ograve";a:19:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-50";s:1:"X";s:3:"-40";s:1:"Y";s:3:"-50";s:6:"Yacute";s:3:"-50";s:9:"Ydieresis";s:3:"-50";}s:13:"Ohungarumlaut";a:19:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-50";s:1:"X";s:3:"-40";s:1:"Y";s:3:"-50";s:6:"Yacute";s:3:"-50";s:9:"Ydieresis";s:3:"-50";}s:7:"Omacron";a:19:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-50";s:1:"X";s:3:"-40";s:1:"Y";s:3:"-50";s:6:"Yacute";s:3:"-50";s:9:"Ydieresis";s:3:"-50";}s:6:"Oslash";a:19:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-50";s:1:"X";s:3:"-40";s:1:"Y";s:3:"-50";s:6:"Yacute";s:3:"-50";s:9:"Ydieresis";s:3:"-50";}s:6:"Otilde";a:19:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-50";s:1:"X";s:3:"-40";s:1:"Y";s:3:"-50";s:6:"Yacute";s:3:"-50";s:9:"Ydieresis";s:3:"-50";}s:1:"P";a:40:{s:1:"A";s:3:"-85";s:6:"Aacute";s:3:"-85";s:6:"Abreve";s:3:"-85";s:11:"Acircumflex";s:3:"-85";s:9:"Adieresis";s:3:"-85";s:6:"Agrave";s:3:"-85";s:7:"Amacron";s:3:"-85";s:7:"Aogonek";s:3:"-85";s:5:"Aring";s:3:"-85";s:6:"Atilde";s:3:"-85";s:1:"a";s:3:"-40";s:6:"aacute";s:3:"-40";s:6:"abreve";s:3:"-40";s:11:"acircumflex";s:3:"-40";s:9:"adieresis";s:3:"-40";s:6:"agrave";s:3:"-40";s:7:"amacron";s:3:"-40";s:7:"aogonek";s:3:"-40";s:5:"aring";s:3:"-40";s:6:"atilde";s:3:"-40";s:5:"comma";s:4:"-129";s:1:"e";s:3:"-50";s:6:"eacute";s:3:"-50";s:6:"ecaron";s:3:"-50";s:11:"ecircumflex";s:3:"-50";s:9:"edieresis";s:3:"-50";s:10:"edotaccent";s:3:"-50";s:6:"egrave";s:3:"-50";s:7:"emacron";s:3:"-50";s:7:"eogonek";s:3:"-50";s:1:"o";s:3:"-55";s:6:"oacute";s:3:"-55";s:11:"ocircumflex";s:3:"-55";s:9:"odieresis";s:3:"-55";s:6:"ograve";s:3:"-55";s:13:"ohungarumlaut";s:3:"-55";s:7:"omacron";s:3:"-55";s:6:"oslash";s:3:"-55";s:6:"otilde";s:3:"-55";s:6:"period";s:4:"-129";}s:1:"Q";a:9:{s:1:"U";s:3:"-10";s:6:"Uacute";s:3:"-10";s:11:"Ucircumflex";s:3:"-10";s:9:"Udieresis";s:3:"-10";s:6:"Ugrave";s:3:"-10";s:13:"Uhungarumlaut";s:3:"-10";s:7:"Umacron";s:3:"-10";s:7:"Uogonek";s:3:"-10";s:5:"Uring";s:3:"-10";}s:1:"R";a:26:{s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"T";s:3:"-30";s:6:"Tcaron";s:3:"-30";s:12:"Tcommaaccent";s:3:"-30";s:1:"U";s:3:"-40";s:6:"Uacute";s:3:"-40";s:11:"Ucircumflex";s:3:"-40";s:9:"Udieresis";s:3:"-40";s:6:"Ugrave";s:3:"-40";s:13:"Uhungarumlaut";s:3:"-40";s:7:"Umacron";s:3:"-40";s:7:"Uogonek";s:3:"-40";s:5:"Uring";s:3:"-40";s:1:"V";s:3:"-18";s:1:"W";s:3:"-18";s:1:"Y";s:3:"-18";s:6:"Yacute";s:3:"-18";s:9:"Ydieresis";s:3:"-18";}s:6:"Racute";a:26:{s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"T";s:3:"-30";s:6:"Tcaron";s:3:"-30";s:12:"Tcommaaccent";s:3:"-30";s:1:"U";s:3:"-40";s:6:"Uacute";s:3:"-40";s:11:"Ucircumflex";s:3:"-40";s:9:"Udieresis";s:3:"-40";s:6:"Ugrave";s:3:"-40";s:13:"Uhungarumlaut";s:3:"-40";s:7:"Umacron";s:3:"-40";s:7:"Uogonek";s:3:"-40";s:5:"Uring";s:3:"-40";s:1:"V";s:3:"-18";s:1:"W";s:3:"-18";s:1:"Y";s:3:"-18";s:6:"Yacute";s:3:"-18";s:9:"Ydieresis";s:3:"-18";}s:6:"Rcaron";a:26:{s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"T";s:3:"-30";s:6:"Tcaron";s:3:"-30";s:12:"Tcommaaccent";s:3:"-30";s:1:"U";s:3:"-40";s:6:"Uacute";s:3:"-40";s:11:"Ucircumflex";s:3:"-40";s:9:"Udieresis";s:3:"-40";s:6:"Ugrave";s:3:"-40";s:13:"Uhungarumlaut";s:3:"-40";s:7:"Umacron";s:3:"-40";s:7:"Uogonek";s:3:"-40";s:5:"Uring";s:3:"-40";s:1:"V";s:3:"-18";s:1:"W";s:3:"-18";s:1:"Y";s:3:"-18";s:6:"Yacute";s:3:"-18";s:9:"Ydieresis";s:3:"-18";}s:12:"Rcommaaccent";a:26:{s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"T";s:3:"-30";s:6:"Tcaron";s:3:"-30";s:12:"Tcommaaccent";s:3:"-30";s:1:"U";s:3:"-40";s:6:"Uacute";s:3:"-40";s:11:"Ucircumflex";s:3:"-40";s:9:"Udieresis";s:3:"-40";s:6:"Ugrave";s:3:"-40";s:13:"Uhungarumlaut";s:3:"-40";s:7:"Umacron";s:3:"-40";s:7:"Uogonek";s:3:"-40";s:5:"Uring";s:3:"-40";s:1:"V";s:3:"-18";s:1:"W";s:3:"-18";s:1:"Y";s:3:"-18";s:6:"Yacute";s:3:"-18";s:9:"Ydieresis";s:3:"-18";}s:1:"T";a:72:{s:1:"A";s:3:"-55";s:6:"Aacute";s:3:"-55";s:6:"Abreve";s:3:"-55";s:11:"Acircumflex";s:3:"-55";s:9:"Adieresis";s:3:"-55";s:6:"Agrave";s:3:"-55";s:7:"Amacron";s:3:"-55";s:7:"Aogonek";s:3:"-55";s:5:"Aring";s:3:"-55";s:6:"Atilde";s:3:"-55";s:1:"O";s:3:"-18";s:6:"Oacute";s:3:"-18";s:11:"Ocircumflex";s:3:"-18";s:9:"Odieresis";s:3:"-18";s:6:"Ograve";s:3:"-18";s:13:"Ohungarumlaut";s:3:"-18";s:7:"Omacron";s:3:"-18";s:6:"Oslash";s:3:"-18";s:6:"Otilde";s:3:"-18";s:1:"a";s:3:"-92";s:6:"aacute";s:3:"-92";s:6:"abreve";s:3:"-92";s:11:"acircumflex";s:3:"-92";s:9:"adieresis";s:3:"-92";s:6:"agrave";s:3:"-92";s:7:"amacron";s:3:"-92";s:7:"aogonek";s:3:"-92";s:5:"aring";s:3:"-92";s:6:"atilde";s:3:"-92";s:5:"colon";s:3:"-74";s:5:"comma";s:3:"-92";s:1:"e";s:3:"-92";s:6:"eacute";s:3:"-92";s:6:"ecaron";s:3:"-92";s:11:"ecircumflex";s:3:"-92";s:9:"edieresis";s:3:"-52";s:10:"edotaccent";s:3:"-92";s:6:"egrave";s:3:"-52";s:7:"emacron";s:3:"-52";s:7:"eogonek";s:3:"-92";s:6:"hyphen";s:3:"-92";s:1:"i";s:3:"-37";s:6:"iacute";s:3:"-37";s:7:"iogonek";s:3:"-37";s:1:"o";s:3:"-95";s:6:"oacute";s:3:"-95";s:11:"ocircumflex";s:3:"-95";s:9:"odieresis";s:3:"-95";s:6:"ograve";s:3:"-95";s:13:"ohungarumlaut";s:3:"-95";s:7:"omacron";s:3:"-95";s:6:"oslash";s:3:"-95";s:6:"otilde";s:3:"-95";s:6:"period";s:3:"-92";s:1:"r";s:3:"-37";s:6:"racute";s:3:"-37";s:6:"rcaron";s:3:"-37";s:12:"rcommaaccent";s:3:"-37";s:9:"semicolon";s:3:"-74";s:1:"u";s:3:"-37";s:6:"uacute";s:3:"-37";s:11:"ucircumflex";s:3:"-37";s:9:"udieresis";s:3:"-37";s:6:"ugrave";s:3:"-37";s:13:"uhungarumlaut";s:3:"-37";s:7:"umacron";s:3:"-37";s:7:"uogonek";s:3:"-37";s:5:"uring";s:3:"-37";s:1:"w";s:3:"-37";s:1:"y";s:3:"-37";s:6:"yacute";s:3:"-37";s:9:"ydieresis";s:3:"-37";}s:6:"Tcaron";a:72:{s:1:"A";s:3:"-55";s:6:"Aacute";s:3:"-55";s:6:"Abreve";s:3:"-55";s:11:"Acircumflex";s:3:"-55";s:9:"Adieresis";s:3:"-55";s:6:"Agrave";s:3:"-55";s:7:"Amacron";s:3:"-55";s:7:"Aogonek";s:3:"-55";s:5:"Aring";s:3:"-55";s:6:"Atilde";s:3:"-55";s:1:"O";s:3:"-18";s:6:"Oacute";s:3:"-18";s:11:"Ocircumflex";s:3:"-18";s:9:"Odieresis";s:3:"-18";s:6:"Ograve";s:3:"-18";s:13:"Ohungarumlaut";s:3:"-18";s:7:"Omacron";s:3:"-18";s:6:"Oslash";s:3:"-18";s:6:"Otilde";s:3:"-18";s:1:"a";s:3:"-92";s:6:"aacute";s:3:"-92";s:6:"abreve";s:3:"-92";s:11:"acircumflex";s:3:"-92";s:9:"adieresis";s:3:"-92";s:6:"agrave";s:3:"-92";s:7:"amacron";s:3:"-92";s:7:"aogonek";s:3:"-92";s:5:"aring";s:3:"-92";s:6:"atilde";s:3:"-92";s:5:"colon";s:3:"-74";s:5:"comma";s:3:"-92";s:1:"e";s:3:"-92";s:6:"eacute";s:3:"-92";s:6:"ecaron";s:3:"-92";s:11:"ecircumflex";s:3:"-92";s:9:"edieresis";s:3:"-52";s:10:"edotaccent";s:3:"-92";s:6:"egrave";s:3:"-52";s:7:"emacron";s:3:"-52";s:7:"eogonek";s:3:"-92";s:6:"hyphen";s:3:"-92";s:1:"i";s:3:"-37";s:6:"iacute";s:3:"-37";s:7:"iogonek";s:3:"-37";s:1:"o";s:3:"-95";s:6:"oacute";s:3:"-95";s:11:"ocircumflex";s:3:"-95";s:9:"odieresis";s:3:"-95";s:6:"ograve";s:3:"-95";s:13:"ohungarumlaut";s:3:"-95";s:7:"omacron";s:3:"-95";s:6:"oslash";s:3:"-95";s:6:"otilde";s:3:"-95";s:6:"period";s:3:"-92";s:1:"r";s:3:"-37";s:6:"racute";s:3:"-37";s:6:"rcaron";s:3:"-37";s:12:"rcommaaccent";s:3:"-37";s:9:"semicolon";s:3:"-74";s:1:"u";s:3:"-37";s:6:"uacute";s:3:"-37";s:11:"ucircumflex";s:3:"-37";s:9:"udieresis";s:3:"-37";s:6:"ugrave";s:3:"-37";s:13:"uhungarumlaut";s:3:"-37";s:7:"umacron";s:3:"-37";s:7:"uogonek";s:3:"-37";s:5:"uring";s:3:"-37";s:1:"w";s:3:"-37";s:1:"y";s:3:"-37";s:6:"yacute";s:3:"-37";s:9:"ydieresis";s:3:"-37";}s:12:"Tcommaaccent";a:72:{s:1:"A";s:3:"-55";s:6:"Aacute";s:3:"-55";s:6:"Abreve";s:3:"-55";s:11:"Acircumflex";s:3:"-55";s:9:"Adieresis";s:3:"-55";s:6:"Agrave";s:3:"-55";s:7:"Amacron";s:3:"-55";s:7:"Aogonek";s:3:"-55";s:5:"Aring";s:3:"-55";s:6:"Atilde";s:3:"-55";s:1:"O";s:3:"-18";s:6:"Oacute";s:3:"-18";s:11:"Ocircumflex";s:3:"-18";s:9:"Odieresis";s:3:"-18";s:6:"Ograve";s:3:"-18";s:13:"Ohungarumlaut";s:3:"-18";s:7:"Omacron";s:3:"-18";s:6:"Oslash";s:3:"-18";s:6:"Otilde";s:3:"-18";s:1:"a";s:3:"-92";s:6:"aacute";s:3:"-92";s:6:"abreve";s:3:"-92";s:11:"acircumflex";s:3:"-92";s:9:"adieresis";s:3:"-92";s:6:"agrave";s:3:"-92";s:7:"amacron";s:3:"-92";s:7:"aogonek";s:3:"-92";s:5:"aring";s:3:"-92";s:6:"atilde";s:3:"-92";s:5:"colon";s:3:"-74";s:5:"comma";s:3:"-92";s:1:"e";s:3:"-92";s:6:"eacute";s:3:"-92";s:6:"ecaron";s:3:"-92";s:11:"ecircumflex";s:3:"-92";s:9:"edieresis";s:3:"-52";s:10:"edotaccent";s:3:"-92";s:6:"egrave";s:3:"-52";s:7:"emacron";s:3:"-52";s:7:"eogonek";s:3:"-92";s:6:"hyphen";s:3:"-92";s:1:"i";s:3:"-37";s:6:"iacute";s:3:"-37";s:7:"iogonek";s:3:"-37";s:1:"o";s:3:"-95";s:6:"oacute";s:3:"-95";s:11:"ocircumflex";s:3:"-95";s:9:"odieresis";s:3:"-95";s:6:"ograve";s:3:"-95";s:13:"ohungarumlaut";s:3:"-95";s:7:"omacron";s:3:"-95";s:6:"oslash";s:3:"-95";s:6:"otilde";s:3:"-95";s:6:"period";s:3:"-92";s:1:"r";s:3:"-37";s:6:"racute";s:3:"-37";s:6:"rcaron";s:3:"-37";s:12:"rcommaaccent";s:3:"-37";s:9:"semicolon";s:3:"-74";s:1:"u";s:3:"-37";s:6:"uacute";s:3:"-37";s:11:"ucircumflex";s:3:"-37";s:9:"udieresis";s:3:"-37";s:6:"ugrave";s:3:"-37";s:13:"uhungarumlaut";s:3:"-37";s:7:"umacron";s:3:"-37";s:7:"uogonek";s:3:"-37";s:5:"uring";s:3:"-37";s:1:"w";s:3:"-37";s:1:"y";s:3:"-37";s:6:"yacute";s:3:"-37";s:9:"ydieresis";s:3:"-37";}s:1:"U";a:10:{s:1:"A";s:3:"-45";s:6:"Aacute";s:3:"-45";s:6:"Abreve";s:3:"-45";s:11:"Acircumflex";s:3:"-45";s:9:"Adieresis";s:3:"-45";s:6:"Agrave";s:3:"-45";s:7:"Amacron";s:3:"-45";s:7:"Aogonek";s:3:"-45";s:5:"Aring";s:3:"-45";s:6:"Atilde";s:3:"-45";}s:6:"Uacute";a:10:{s:1:"A";s:3:"-45";s:6:"Aacute";s:3:"-45";s:6:"Abreve";s:3:"-45";s:11:"Acircumflex";s:3:"-45";s:9:"Adieresis";s:3:"-45";s:6:"Agrave";s:3:"-45";s:7:"Amacron";s:3:"-45";s:7:"Aogonek";s:3:"-45";s:5:"Aring";s:3:"-45";s:6:"Atilde";s:3:"-45";}s:11:"Ucircumflex";a:10:{s:1:"A";s:3:"-45";s:6:"Aacute";s:3:"-45";s:6:"Abreve";s:3:"-45";s:11:"Acircumflex";s:3:"-45";s:9:"Adieresis";s:3:"-45";s:6:"Agrave";s:3:"-45";s:7:"Amacron";s:3:"-45";s:7:"Aogonek";s:3:"-45";s:5:"Aring";s:3:"-45";s:6:"Atilde";s:3:"-45";}s:9:"Udieresis";a:10:{s:1:"A";s:3:"-45";s:6:"Aacute";s:3:"-45";s:6:"Abreve";s:3:"-45";s:11:"Acircumflex";s:3:"-45";s:9:"Adieresis";s:3:"-45";s:6:"Agrave";s:3:"-45";s:7:"Amacron";s:3:"-45";s:7:"Aogonek";s:3:"-45";s:5:"Aring";s:3:"-45";s:6:"Atilde";s:3:"-45";}s:6:"Ugrave";a:10:{s:1:"A";s:3:"-45";s:6:"Aacute";s:3:"-45";s:6:"Abreve";s:3:"-45";s:11:"Acircumflex";s:3:"-45";s:9:"Adieresis";s:3:"-45";s:6:"Agrave";s:3:"-45";s:7:"Amacron";s:3:"-45";s:7:"Aogonek";s:3:"-45";s:5:"Aring";s:3:"-45";s:6:"Atilde";s:3:"-45";}s:13:"Uhungarumlaut";a:10:{s:1:"A";s:3:"-45";s:6:"Aacute";s:3:"-45";s:6:"Abreve";s:3:"-45";s:11:"Acircumflex";s:3:"-45";s:9:"Adieresis";s:3:"-45";s:6:"Agrave";s:3:"-45";s:7:"Amacron";s:3:"-45";s:7:"Aogonek";s:3:"-45";s:5:"Aring";s:3:"-45";s:6:"Atilde";s:3:"-45";}s:7:"Umacron";a:10:{s:1:"A";s:3:"-45";s:6:"Aacute";s:3:"-45";s:6:"Abreve";s:3:"-45";s:11:"Acircumflex";s:3:"-45";s:9:"Adieresis";s:3:"-45";s:6:"Agrave";s:3:"-45";s:7:"Amacron";s:3:"-45";s:7:"Aogonek";s:3:"-45";s:5:"Aring";s:3:"-45";s:6:"Atilde";s:3:"-45";}s:7:"Uogonek";a:10:{s:1:"A";s:3:"-45";s:6:"Aacute";s:3:"-45";s:6:"Abreve";s:3:"-45";s:11:"Acircumflex";s:3:"-45";s:9:"Adieresis";s:3:"-45";s:6:"Agrave";s:3:"-45";s:7:"Amacron";s:3:"-45";s:7:"Aogonek";s:3:"-45";s:5:"Aring";s:3:"-45";s:6:"Atilde";s:3:"-45";}s:5:"Uring";a:10:{s:1:"A";s:3:"-45";s:6:"Aacute";s:3:"-45";s:6:"Abreve";s:3:"-45";s:11:"Acircumflex";s:3:"-45";s:9:"Adieresis";s:3:"-45";s:6:"Agrave";s:3:"-45";s:7:"Amacron";s:3:"-45";s:7:"Aogonek";s:3:"-45";s:5:"Aring";s:3:"-45";s:6:"Atilde";s:3:"-45";}s:1:"V";a:67:{s:1:"A";s:3:"-85";s:6:"Aacute";s:3:"-85";s:6:"Abreve";s:3:"-85";s:11:"Acircumflex";s:3:"-85";s:9:"Adieresis";s:3:"-85";s:6:"Agrave";s:3:"-85";s:7:"Amacron";s:3:"-85";s:7:"Aogonek";s:3:"-85";s:5:"Aring";s:3:"-85";s:6:"Atilde";s:3:"-85";s:1:"G";s:3:"-10";s:6:"Gbreve";s:3:"-10";s:12:"Gcommaaccent";s:3:"-10";s:1:"O";s:3:"-30";s:6:"Oacute";s:3:"-30";s:11:"Ocircumflex";s:3:"-30";s:9:"Odieresis";s:3:"-30";s:6:"Ograve";s:3:"-30";s:13:"Ohungarumlaut";s:3:"-30";s:7:"Omacron";s:3:"-30";s:6:"Oslash";s:3:"-30";s:6:"Otilde";s:3:"-30";s:1:"a";s:4:"-111";s:6:"aacute";s:4:"-111";s:6:"abreve";s:4:"-111";s:11:"acircumflex";s:4:"-111";s:9:"adieresis";s:4:"-111";s:6:"agrave";s:4:"-111";s:7:"amacron";s:4:"-111";s:7:"aogonek";s:4:"-111";s:5:"aring";s:4:"-111";s:6:"atilde";s:4:"-111";s:5:"colon";s:3:"-74";s:5:"comma";s:4:"-129";s:1:"e";s:4:"-111";s:6:"eacute";s:4:"-111";s:6:"ecaron";s:4:"-111";s:11:"ecircumflex";s:4:"-111";s:9:"edieresis";s:3:"-71";s:10:"edotaccent";s:4:"-111";s:6:"egrave";s:3:"-71";s:7:"emacron";s:3:"-71";s:7:"eogonek";s:4:"-111";s:6:"hyphen";s:3:"-70";s:1:"i";s:3:"-55";s:6:"iacute";s:3:"-55";s:7:"iogonek";s:3:"-55";s:1:"o";s:4:"-111";s:6:"oacute";s:4:"-111";s:11:"ocircumflex";s:4:"-111";s:9:"odieresis";s:4:"-111";s:6:"ograve";s:4:"-111";s:13:"ohungarumlaut";s:4:"-111";s:7:"omacron";s:4:"-111";s:6:"oslash";s:4:"-111";s:6:"otilde";s:4:"-111";s:6:"period";s:4:"-129";s:9:"semicolon";s:3:"-74";s:1:"u";s:3:"-55";s:6:"uacute";s:3:"-55";s:11:"ucircumflex";s:3:"-55";s:9:"udieresis";s:3:"-55";s:6:"ugrave";s:3:"-55";s:13:"uhungarumlaut";s:3:"-55";s:7:"umacron";s:3:"-55";s:7:"uogonek";s:3:"-55";s:5:"uring";s:3:"-55";}s:1:"W";a:67:{s:1:"A";s:3:"-74";s:6:"Aacute";s:3:"-74";s:6:"Abreve";s:3:"-74";s:11:"Acircumflex";s:3:"-74";s:9:"Adieresis";s:3:"-74";s:6:"Agrave";s:3:"-74";s:7:"Amacron";s:3:"-74";s:7:"Aogonek";s:3:"-74";s:5:"Aring";s:3:"-74";s:6:"Atilde";s:3:"-74";s:1:"O";s:3:"-15";s:6:"Oacute";s:3:"-15";s:11:"Ocircumflex";s:3:"-15";s:9:"Odieresis";s:3:"-15";s:6:"Ograve";s:3:"-15";s:13:"Ohungarumlaut";s:3:"-15";s:7:"Omacron";s:3:"-15";s:6:"Oslash";s:3:"-15";s:6:"Otilde";s:3:"-15";s:1:"a";s:3:"-85";s:6:"aacute";s:3:"-85";s:6:"abreve";s:3:"-85";s:11:"acircumflex";s:3:"-85";s:9:"adieresis";s:3:"-85";s:6:"agrave";s:3:"-85";s:7:"amacron";s:3:"-85";s:7:"aogonek";s:3:"-85";s:5:"aring";s:3:"-85";s:6:"atilde";s:3:"-85";s:5:"colon";s:3:"-55";s:5:"comma";s:3:"-74";s:1:"e";s:3:"-90";s:6:"eacute";s:3:"-90";s:6:"ecaron";s:3:"-90";s:11:"ecircumflex";s:3:"-90";s:9:"edieresis";s:3:"-50";s:10:"edotaccent";s:3:"-90";s:6:"egrave";s:3:"-50";s:7:"emacron";s:3:"-50";s:7:"eogonek";s:3:"-90";s:6:"hyphen";s:3:"-50";s:1:"i";s:3:"-37";s:6:"iacute";s:3:"-37";s:7:"iogonek";s:3:"-37";s:1:"o";s:3:"-80";s:6:"oacute";s:3:"-80";s:11:"ocircumflex";s:3:"-80";s:9:"odieresis";s:3:"-80";s:6:"ograve";s:3:"-80";s:13:"ohungarumlaut";s:3:"-80";s:7:"omacron";s:3:"-80";s:6:"oslash";s:3:"-80";s:6:"otilde";s:3:"-80";s:6:"period";s:3:"-74";s:9:"semicolon";s:3:"-55";s:1:"u";s:3:"-55";s:6:"uacute";s:3:"-55";s:11:"ucircumflex";s:3:"-55";s:9:"udieresis";s:3:"-55";s:6:"ugrave";s:3:"-55";s:13:"uhungarumlaut";s:3:"-55";s:7:"umacron";s:3:"-55";s:7:"uogonek";s:3:"-55";s:5:"uring";s:3:"-55";s:1:"y";s:3:"-55";s:6:"yacute";s:3:"-55";s:9:"ydieresis";s:3:"-55";}s:1:"Y";a:64:{s:1:"A";s:3:"-74";s:6:"Aacute";s:3:"-74";s:6:"Abreve";s:3:"-74";s:11:"Acircumflex";s:3:"-74";s:9:"Adieresis";s:3:"-74";s:6:"Agrave";s:3:"-74";s:7:"Amacron";s:3:"-74";s:7:"Aogonek";s:3:"-74";s:5:"Aring";s:3:"-74";s:6:"Atilde";s:3:"-74";s:1:"O";s:3:"-25";s:6:"Oacute";s:3:"-25";s:11:"Ocircumflex";s:3:"-25";s:9:"Odieresis";s:3:"-25";s:6:"Ograve";s:3:"-25";s:13:"Ohungarumlaut";s:3:"-25";s:7:"Omacron";s:3:"-25";s:6:"Oslash";s:3:"-25";s:6:"Otilde";s:3:"-25";s:1:"a";s:3:"-92";s:6:"aacute";s:3:"-92";s:6:"abreve";s:3:"-92";s:11:"acircumflex";s:3:"-92";s:9:"adieresis";s:3:"-92";s:6:"agrave";s:3:"-92";s:7:"amacron";s:3:"-92";s:7:"aogonek";s:3:"-92";s:5:"aring";s:3:"-92";s:6:"atilde";s:3:"-92";s:5:"colon";s:3:"-92";s:5:"comma";s:3:"-92";s:1:"e";s:4:"-111";s:6:"eacute";s:4:"-111";s:6:"ecaron";s:4:"-111";s:11:"ecircumflex";s:3:"-71";s:9:"edieresis";s:3:"-71";s:10:"edotaccent";s:4:"-111";s:6:"egrave";s:3:"-71";s:7:"emacron";s:3:"-71";s:7:"eogonek";s:4:"-111";s:6:"hyphen";s:3:"-92";s:1:"i";s:3:"-55";s:6:"iacute";s:3:"-55";s:7:"iogonek";s:3:"-55";s:1:"o";s:4:"-111";s:6:"oacute";s:4:"-111";s:11:"ocircumflex";s:4:"-111";s:9:"odieresis";s:4:"-111";s:6:"ograve";s:4:"-111";s:13:"ohungarumlaut";s:4:"-111";s:7:"omacron";s:4:"-111";s:6:"oslash";s:4:"-111";s:6:"otilde";s:4:"-111";s:6:"period";s:3:"-74";s:9:"semicolon";s:3:"-92";s:1:"u";s:3:"-92";s:6:"uacute";s:3:"-92";s:11:"ucircumflex";s:3:"-92";s:9:"udieresis";s:3:"-92";s:6:"ugrave";s:3:"-92";s:13:"uhungarumlaut";s:3:"-92";s:7:"umacron";s:3:"-92";s:7:"uogonek";s:3:"-92";s:5:"uring";s:3:"-92";}s:6:"Yacute";a:64:{s:1:"A";s:3:"-74";s:6:"Aacute";s:3:"-74";s:6:"Abreve";s:3:"-74";s:11:"Acircumflex";s:3:"-74";s:9:"Adieresis";s:3:"-74";s:6:"Agrave";s:3:"-74";s:7:"Amacron";s:3:"-74";s:7:"Aogonek";s:3:"-74";s:5:"Aring";s:3:"-74";s:6:"Atilde";s:3:"-74";s:1:"O";s:3:"-25";s:6:"Oacute";s:3:"-25";s:11:"Ocircumflex";s:3:"-25";s:9:"Odieresis";s:3:"-25";s:6:"Ograve";s:3:"-25";s:13:"Ohungarumlaut";s:3:"-25";s:7:"Omacron";s:3:"-25";s:6:"Oslash";s:3:"-25";s:6:"Otilde";s:3:"-25";s:1:"a";s:3:"-92";s:6:"aacute";s:3:"-92";s:6:"abreve";s:3:"-92";s:11:"acircumflex";s:3:"-92";s:9:"adieresis";s:3:"-92";s:6:"agrave";s:3:"-92";s:7:"amacron";s:3:"-92";s:7:"aogonek";s:3:"-92";s:5:"aring";s:3:"-92";s:6:"atilde";s:3:"-92";s:5:"colon";s:3:"-92";s:5:"comma";s:3:"-92";s:1:"e";s:4:"-111";s:6:"eacute";s:4:"-111";s:6:"ecaron";s:4:"-111";s:11:"ecircumflex";s:3:"-71";s:9:"edieresis";s:3:"-71";s:10:"edotaccent";s:4:"-111";s:6:"egrave";s:3:"-71";s:7:"emacron";s:3:"-71";s:7:"eogonek";s:4:"-111";s:6:"hyphen";s:3:"-92";s:1:"i";s:3:"-55";s:6:"iacute";s:3:"-55";s:7:"iogonek";s:3:"-55";s:1:"o";s:4:"-111";s:6:"oacute";s:4:"-111";s:11:"ocircumflex";s:4:"-111";s:9:"odieresis";s:4:"-111";s:6:"ograve";s:4:"-111";s:13:"ohungarumlaut";s:4:"-111";s:7:"omacron";s:4:"-111";s:6:"oslash";s:4:"-111";s:6:"otilde";s:4:"-111";s:6:"period";s:3:"-74";s:9:"semicolon";s:3:"-92";s:1:"u";s:3:"-92";s:6:"uacute";s:3:"-92";s:11:"ucircumflex";s:3:"-92";s:9:"udieresis";s:3:"-92";s:6:"ugrave";s:3:"-92";s:13:"uhungarumlaut";s:3:"-92";s:7:"umacron";s:3:"-92";s:7:"uogonek";s:3:"-92";s:5:"uring";s:3:"-92";}s:9:"Ydieresis";a:64:{s:1:"A";s:3:"-74";s:6:"Aacute";s:3:"-74";s:6:"Abreve";s:3:"-74";s:11:"Acircumflex";s:3:"-74";s:9:"Adieresis";s:3:"-74";s:6:"Agrave";s:3:"-74";s:7:"Amacron";s:3:"-74";s:7:"Aogonek";s:3:"-74";s:5:"Aring";s:3:"-74";s:6:"Atilde";s:3:"-74";s:1:"O";s:3:"-25";s:6:"Oacute";s:3:"-25";s:11:"Ocircumflex";s:3:"-25";s:9:"Odieresis";s:3:"-25";s:6:"Ograve";s:3:"-25";s:13:"Ohungarumlaut";s:3:"-25";s:7:"Omacron";s:3:"-25";s:6:"Oslash";s:3:"-25";s:6:"Otilde";s:3:"-25";s:1:"a";s:3:"-92";s:6:"aacute";s:3:"-92";s:6:"abreve";s:3:"-92";s:11:"acircumflex";s:3:"-92";s:9:"adieresis";s:3:"-92";s:6:"agrave";s:3:"-92";s:7:"amacron";s:3:"-92";s:7:"aogonek";s:3:"-92";s:5:"aring";s:3:"-92";s:6:"atilde";s:3:"-92";s:5:"colon";s:3:"-92";s:5:"comma";s:3:"-92";s:1:"e";s:4:"-111";s:6:"eacute";s:4:"-111";s:6:"ecaron";s:4:"-111";s:11:"ecircumflex";s:3:"-71";s:9:"edieresis";s:3:"-71";s:10:"edotaccent";s:4:"-111";s:6:"egrave";s:3:"-71";s:7:"emacron";s:3:"-71";s:7:"eogonek";s:4:"-111";s:6:"hyphen";s:3:"-92";s:1:"i";s:3:"-55";s:6:"iacute";s:3:"-55";s:7:"iogonek";s:3:"-55";s:1:"o";s:4:"-111";s:6:"oacute";s:4:"-111";s:11:"ocircumflex";s:4:"-111";s:9:"odieresis";s:4:"-111";s:6:"ograve";s:4:"-111";s:13:"ohungarumlaut";s:4:"-111";s:7:"omacron";s:4:"-111";s:6:"oslash";s:4:"-111";s:6:"otilde";s:4:"-111";s:6:"period";s:3:"-74";s:9:"semicolon";s:3:"-92";s:1:"u";s:3:"-92";s:6:"uacute";s:3:"-92";s:11:"ucircumflex";s:3:"-92";s:9:"udieresis";s:3:"-92";s:6:"ugrave";s:3:"-92";s:13:"uhungarumlaut";s:3:"-92";s:7:"umacron";s:3:"-92";s:7:"uogonek";s:3:"-92";s:5:"uring";s:3:"-92";}s:1:"b";a:11:{s:1:"b";s:3:"-10";s:6:"period";s:3:"-40";s:1:"u";s:3:"-20";s:6:"uacute";s:3:"-20";s:11:"ucircumflex";s:3:"-20";s:9:"udieresis";s:3:"-20";s:6:"ugrave";s:3:"-20";s:13:"uhungarumlaut";s:3:"-20";s:7:"umacron";s:3:"-20";s:7:"uogonek";s:3:"-20";s:5:"uring";s:3:"-20";}s:1:"c";a:3:{s:1:"h";s:3:"-10";s:1:"k";s:3:"-10";s:12:"kcommaaccent";s:3:"-10";}s:6:"cacute";a:3:{s:1:"h";s:3:"-10";s:1:"k";s:3:"-10";s:12:"kcommaaccent";s:3:"-10";}s:6:"ccaron";a:3:{s:1:"h";s:3:"-10";s:1:"k";s:3:"-10";s:12:"kcommaaccent";s:3:"-10";}s:8:"ccedilla";a:3:{s:1:"h";s:3:"-10";s:1:"k";s:3:"-10";s:12:"kcommaaccent";s:3:"-10";}s:5:"comma";a:2:{s:13:"quotedblright";s:3:"-95";s:10:"quoteright";s:3:"-95";}s:1:"e";a:1:{s:1:"b";s:3:"-10";}s:6:"eacute";a:1:{s:1:"b";s:3:"-10";}s:6:"ecaron";a:1:{s:1:"b";s:3:"-10";}s:11:"ecircumflex";a:1:{s:1:"b";s:3:"-10";}s:9:"edieresis";a:1:{s:1:"b";s:3:"-10";}s:10:"edotaccent";a:1:{s:1:"b";s:3:"-10";}s:6:"egrave";a:1:{s:1:"b";s:3:"-10";}s:7:"emacron";a:1:{s:1:"b";s:3:"-10";}s:7:"eogonek";a:1:{s:1:"b";s:3:"-10";}s:1:"f";a:16:{s:5:"comma";s:3:"-10";s:8:"dotlessi";s:3:"-30";s:1:"e";s:3:"-10";s:6:"eacute";s:3:"-10";s:10:"edotaccent";s:3:"-10";s:7:"eogonek";s:3:"-10";s:1:"f";s:3:"-18";s:1:"o";s:3:"-10";s:6:"oacute";s:3:"-10";s:11:"ocircumflex";s:3:"-10";s:6:"ograve";s:3:"-10";s:13:"ohungarumlaut";s:3:"-10";s:6:"oslash";s:3:"-10";s:6:"otilde";s:3:"-10";s:6:"period";s:3:"-10";s:10:"quoteright";s:2:"55";}s:1:"k";a:18:{s:1:"e";s:3:"-30";s:6:"eacute";s:3:"-30";s:6:"ecaron";s:3:"-30";s:11:"ecircumflex";s:3:"-30";s:9:"edieresis";s:3:"-30";s:10:"edotaccent";s:3:"-30";s:6:"egrave";s:3:"-30";s:7:"emacron";s:3:"-30";s:7:"eogonek";s:3:"-30";s:1:"o";s:3:"-10";s:6:"oacute";s:3:"-10";s:11:"ocircumflex";s:3:"-10";s:9:"odieresis";s:3:"-10";s:6:"ograve";s:3:"-10";s:13:"ohungarumlaut";s:3:"-10";s:7:"omacron";s:3:"-10";s:6:"oslash";s:3:"-10";s:6:"otilde";s:3:"-10";}s:12:"kcommaaccent";a:18:{s:1:"e";s:3:"-30";s:6:"eacute";s:3:"-30";s:6:"ecaron";s:3:"-30";s:11:"ecircumflex";s:3:"-30";s:9:"edieresis";s:3:"-30";s:10:"edotaccent";s:3:"-30";s:6:"egrave";s:3:"-30";s:7:"emacron";s:3:"-30";s:7:"eogonek";s:3:"-30";s:1:"o";s:3:"-10";s:6:"oacute";s:3:"-10";s:11:"ocircumflex";s:3:"-10";s:9:"odieresis";s:3:"-10";s:6:"ograve";s:3:"-10";s:13:"ohungarumlaut";s:3:"-10";s:7:"omacron";s:3:"-10";s:6:"oslash";s:3:"-10";s:6:"otilde";s:3:"-10";}s:1:"n";a:1:{s:1:"v";s:3:"-40";}s:6:"nacute";a:1:{s:1:"v";s:3:"-40";}s:6:"ncaron";a:1:{s:1:"v";s:3:"-40";}s:12:"ncommaaccent";a:1:{s:1:"v";s:3:"-40";}s:6:"ntilde";a:1:{s:1:"v";s:3:"-40";}s:1:"o";a:6:{s:1:"v";s:3:"-15";s:1:"w";s:3:"-25";s:1:"x";s:3:"-10";s:1:"y";s:3:"-10";s:6:"yacute";s:3:"-10";s:9:"ydieresis";s:3:"-10";}s:6:"oacute";a:6:{s:1:"v";s:3:"-15";s:1:"w";s:3:"-25";s:1:"x";s:3:"-10";s:1:"y";s:3:"-10";s:6:"yacute";s:3:"-10";s:9:"ydieresis";s:3:"-10";}s:11:"ocircumflex";a:6:{s:1:"v";s:3:"-15";s:1:"w";s:3:"-25";s:1:"x";s:3:"-10";s:1:"y";s:3:"-10";s:6:"yacute";s:3:"-10";s:9:"ydieresis";s:3:"-10";}s:9:"odieresis";a:6:{s:1:"v";s:3:"-15";s:1:"w";s:3:"-25";s:1:"x";s:3:"-10";s:1:"y";s:3:"-10";s:6:"yacute";s:3:"-10";s:9:"ydieresis";s:3:"-10";}s:6:"ograve";a:6:{s:1:"v";s:3:"-15";s:1:"w";s:3:"-25";s:1:"x";s:3:"-10";s:1:"y";s:3:"-10";s:6:"yacute";s:3:"-10";s:9:"ydieresis";s:3:"-10";}s:13:"ohungarumlaut";a:6:{s:1:"v";s:3:"-15";s:1:"w";s:3:"-25";s:1:"x";s:3:"-10";s:1:"y";s:3:"-10";s:6:"yacute";s:3:"-10";s:9:"ydieresis";s:3:"-10";}s:7:"omacron";a:6:{s:1:"v";s:3:"-15";s:1:"w";s:3:"-25";s:1:"x";s:3:"-10";s:1:"y";s:3:"-10";s:6:"yacute";s:3:"-10";s:9:"ydieresis";s:3:"-10";}s:6:"oslash";a:6:{s:1:"v";s:3:"-15";s:1:"w";s:3:"-25";s:1:"x";s:3:"-10";s:1:"y";s:3:"-10";s:6:"yacute";s:3:"-10";s:9:"ydieresis";s:3:"-10";}s:6:"otilde";a:6:{s:1:"v";s:3:"-15";s:1:"w";s:3:"-25";s:1:"x";s:3:"-10";s:1:"y";s:3:"-10";s:6:"yacute";s:3:"-10";s:9:"ydieresis";s:3:"-10";}s:6:"period";a:2:{s:13:"quotedblright";s:3:"-95";s:10:"quoteright";s:3:"-95";}s:9:"quoteleft";a:1:{s:9:"quoteleft";s:3:"-74";}s:10:"quoteright";a:16:{s:1:"d";s:3:"-15";s:6:"dcroat";s:3:"-15";s:10:"quoteright";s:3:"-74";s:1:"r";s:3:"-15";s:6:"racute";s:3:"-15";s:6:"rcaron";s:3:"-15";s:12:"rcommaaccent";s:3:"-15";s:1:"s";s:3:"-74";s:6:"sacute";s:3:"-74";s:6:"scaron";s:3:"-74";s:8:"scedilla";s:3:"-74";s:12:"scommaaccent";s:3:"-74";s:5:"space";s:3:"-74";s:1:"t";s:3:"-37";s:12:"tcommaaccent";s:3:"-37";s:1:"v";s:3:"-15";}s:1:"r";a:2:{s:5:"comma";s:3:"-65";s:6:"period";s:3:"-65";}s:6:"racute";a:2:{s:5:"comma";s:3:"-65";s:6:"period";s:3:"-65";}s:6:"rcaron";a:2:{s:5:"comma";s:3:"-65";s:6:"period";s:3:"-65";}s:12:"rcommaaccent";a:2:{s:5:"comma";s:3:"-65";s:6:"period";s:3:"-65";}s:5:"space";a:15:{s:1:"A";s:3:"-37";s:6:"Aacute";s:3:"-37";s:6:"Abreve";s:3:"-37";s:11:"Acircumflex";s:3:"-37";s:9:"Adieresis";s:3:"-37";s:6:"Agrave";s:3:"-37";s:7:"Amacron";s:3:"-37";s:7:"Aogonek";s:3:"-37";s:5:"Aring";s:3:"-37";s:6:"Atilde";s:3:"-37";s:1:"V";s:3:"-70";s:1:"W";s:3:"-70";s:1:"Y";s:3:"-70";s:6:"Yacute";s:3:"-70";s:9:"Ydieresis";s:3:"-70";}s:1:"v";a:20:{s:5:"comma";s:3:"-37";s:1:"e";s:3:"-15";s:6:"eacute";s:3:"-15";s:6:"ecaron";s:3:"-15";s:11:"ecircumflex";s:3:"-15";s:9:"edieresis";s:3:"-15";s:10:"edotaccent";s:3:"-15";s:6:"egrave";s:3:"-15";s:7:"emacron";s:3:"-15";s:7:"eogonek";s:3:"-15";s:1:"o";s:3:"-15";s:6:"oacute";s:3:"-15";s:11:"ocircumflex";s:3:"-15";s:9:"odieresis";s:3:"-15";s:6:"ograve";s:3:"-15";s:13:"ohungarumlaut";s:3:"-15";s:7:"omacron";s:3:"-15";s:6:"oslash";s:3:"-15";s:6:"otilde";s:3:"-15";s:6:"period";s:3:"-37";}s:1:"w";a:30:{s:1:"a";s:3:"-10";s:6:"aacute";s:3:"-10";s:6:"abreve";s:3:"-10";s:11:"acircumflex";s:3:"-10";s:9:"adieresis";s:3:"-10";s:6:"agrave";s:3:"-10";s:7:"amacron";s:3:"-10";s:7:"aogonek";s:3:"-10";s:5:"aring";s:3:"-10";s:6:"atilde";s:3:"-10";s:5:"comma";s:3:"-37";s:1:"e";s:3:"-10";s:6:"eacute";s:3:"-10";s:6:"ecaron";s:3:"-10";s:11:"ecircumflex";s:3:"-10";s:9:"edieresis";s:3:"-10";s:10:"edotaccent";s:3:"-10";s:6:"egrave";s:3:"-10";s:7:"emacron";s:3:"-10";s:7:"eogonek";s:3:"-10";s:1:"o";s:3:"-15";s:6:"oacute";s:3:"-15";s:11:"ocircumflex";s:3:"-15";s:9:"odieresis";s:3:"-15";s:6:"ograve";s:3:"-15";s:13:"ohungarumlaut";s:3:"-15";s:7:"omacron";s:3:"-15";s:6:"oslash";s:3:"-15";s:6:"otilde";s:3:"-15";s:6:"period";s:3:"-37";}s:1:"x";a:9:{s:1:"e";s:3:"-10";s:6:"eacute";s:3:"-10";s:6:"ecaron";s:3:"-10";s:11:"ecircumflex";s:3:"-10";s:9:"edieresis";s:3:"-10";s:10:"edotaccent";s:3:"-10";s:6:"egrave";s:3:"-10";s:7:"emacron";s:3:"-10";s:7:"eogonek";s:3:"-10";}s:1:"y";a:2:{s:5:"comma";s:3:"-37";s:6:"period";s:3:"-37";}s:6:"yacute";a:2:{s:5:"comma";s:3:"-37";s:6:"period";s:3:"-37";}s:9:"ydieresis";a:2:{s:5:"comma";s:3:"-37";s:6:"period";s:3:"-37";}}s:9:"_version_";i:1;}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/php_Times-Italic.afm b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/php_Times-Italic.afm new file mode 100755 index 00000000..19afb671 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/php_Times-Italic.afm @@ -0,0 +1 @@ +a:22:{s:8:"FontName";s:12:"Times-Italic";s:8:"FullName";s:12:"Times Italic";s:10:"FamilyName";s:5:"Times";s:6:"Weight";s:6:"Medium";s:11:"ItalicAngle";s:5:"-15.5";s:12:"IsFixedPitch";s:5:"false";s:12:"CharacterSet";s:13:"ExtendedRoman";s:8:"FontBBox";a:4:{i:0;s:4:"-169";i:1;s:4:"-217";i:2;s:4:"1010";i:3;s:3:"883";}s:17:"UnderlinePosition";s:4:"-100";s:18:"UnderlineThickness";s:2:"50";s:7:"Version";s:7:"002.000";s:14:"EncodingScheme";s:21:"AdobeStandardEncoding";s:9:"CapHeight";s:3:"653";s:7:"XHeight";s:3:"441";s:8:"Ascender";s:3:"683";s:9:"Descender";s:4:"-217";s:5:"StdHW";s:2:"32";s:5:"StdVW";s:2:"76";s:16:"StartCharMetrics";s:3:"315";s:1:"C";a:464:{i:32;a:4:{s:1:"C";s:2:"32";s:2:"WX";s:3:"250";s:1:"N";s:5:"space";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:1:"0";i:2;s:1:"0";i:3;s:1:"0";}}s:5:"space";a:4:{s:1:"C";s:2:"32";s:2:"WX";s:3:"250";s:1:"N";s:5:"space";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:1:"0";i:2;s:1:"0";i:3;s:1:"0";}}i:33;a:4:{s:1:"C";s:2:"33";s:2:"WX";s:3:"333";s:1:"N";s:6:"exclam";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:3:"-11";i:2;s:3:"302";i:3;s:3:"667";}}s:6:"exclam";a:4:{s:1:"C";s:2:"33";s:2:"WX";s:3:"333";s:1:"N";s:6:"exclam";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:3:"-11";i:2;s:3:"302";i:3;s:3:"667";}}i:34;a:4:{s:1:"C";s:2:"34";s:2:"WX";s:3:"420";s:1:"N";s:8:"quotedbl";s:1:"B";a:4:{i:0;s:3:"144";i:1;s:3:"421";i:2;s:3:"432";i:3;s:3:"666";}}s:8:"quotedbl";a:4:{s:1:"C";s:2:"34";s:2:"WX";s:3:"420";s:1:"N";s:8:"quotedbl";s:1:"B";a:4:{i:0;s:3:"144";i:1;s:3:"421";i:2;s:3:"432";i:3;s:3:"666";}}i:35;a:4:{s:1:"C";s:2:"35";s:2:"WX";s:3:"500";s:1:"N";s:10:"numbersign";s:1:"B";a:4:{i:0;s:1:"2";i:1;s:1:"0";i:2;s:3:"540";i:3;s:3:"676";}}s:10:"numbersign";a:4:{s:1:"C";s:2:"35";s:2:"WX";s:3:"500";s:1:"N";s:10:"numbersign";s:1:"B";a:4:{i:0;s:1:"2";i:1;s:1:"0";i:2;s:3:"540";i:3;s:3:"676";}}i:36;a:4:{s:1:"C";s:2:"36";s:2:"WX";s:3:"500";s:1:"N";s:6:"dollar";s:1:"B";a:4:{i:0;s:2:"31";i:1;s:3:"-89";i:2;s:3:"497";i:3;s:3:"731";}}s:6:"dollar";a:4:{s:1:"C";s:2:"36";s:2:"WX";s:3:"500";s:1:"N";s:6:"dollar";s:1:"B";a:4:{i:0;s:2:"31";i:1;s:3:"-89";i:2;s:3:"497";i:3;s:3:"731";}}i:37;a:4:{s:1:"C";s:2:"37";s:2:"WX";s:3:"833";s:1:"N";s:7:"percent";s:1:"B";a:4:{i:0;s:2:"79";i:1;s:3:"-13";i:2;s:3:"790";i:3;s:3:"676";}}s:7:"percent";a:4:{s:1:"C";s:2:"37";s:2:"WX";s:3:"833";s:1:"N";s:7:"percent";s:1:"B";a:4:{i:0;s:2:"79";i:1;s:3:"-13";i:2;s:3:"790";i:3;s:3:"676";}}i:38;a:4:{s:1:"C";s:2:"38";s:2:"WX";s:3:"778";s:1:"N";s:9:"ampersand";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:3:"-18";i:2;s:3:"723";i:3;s:3:"666";}}s:9:"ampersand";a:4:{s:1:"C";s:2:"38";s:2:"WX";s:3:"778";s:1:"N";s:9:"ampersand";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:3:"-18";i:2;s:3:"723";i:3;s:3:"666";}}i:39;a:4:{s:1:"C";s:2:"39";s:2:"WX";s:3:"333";s:1:"N";s:10:"quoteright";s:1:"B";a:4:{i:0;s:3:"151";i:1;s:3:"436";i:2;s:3:"290";i:3;s:3:"666";}}s:10:"quoteright";a:4:{s:1:"C";s:2:"39";s:2:"WX";s:3:"333";s:1:"N";s:10:"quoteright";s:1:"B";a:4:{i:0;s:3:"151";i:1;s:3:"436";i:2;s:3:"290";i:3;s:3:"666";}}i:40;a:4:{s:1:"C";s:2:"40";s:2:"WX";s:3:"333";s:1:"N";s:9:"parenleft";s:1:"B";a:4:{i:0;s:2:"42";i:1;s:4:"-181";i:2;s:3:"315";i:3;s:3:"669";}}s:9:"parenleft";a:4:{s:1:"C";s:2:"40";s:2:"WX";s:3:"333";s:1:"N";s:9:"parenleft";s:1:"B";a:4:{i:0;s:2:"42";i:1;s:4:"-181";i:2;s:3:"315";i:3;s:3:"669";}}i:41;a:4:{s:1:"C";s:2:"41";s:2:"WX";s:3:"333";s:1:"N";s:10:"parenright";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:4:"-180";i:2;s:3:"289";i:3;s:3:"669";}}s:10:"parenright";a:4:{s:1:"C";s:2:"41";s:2:"WX";s:3:"333";s:1:"N";s:10:"parenright";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:4:"-180";i:2;s:3:"289";i:3;s:3:"669";}}i:42;a:4:{s:1:"C";s:2:"42";s:2:"WX";s:3:"500";s:1:"N";s:8:"asterisk";s:1:"B";a:4:{i:0;s:3:"128";i:1;s:3:"255";i:2;s:3:"492";i:3;s:3:"666";}}s:8:"asterisk";a:4:{s:1:"C";s:2:"42";s:2:"WX";s:3:"500";s:1:"N";s:8:"asterisk";s:1:"B";a:4:{i:0;s:3:"128";i:1;s:3:"255";i:2;s:3:"492";i:3;s:3:"666";}}i:43;a:4:{s:1:"C";s:2:"43";s:2:"WX";s:3:"675";s:1:"N";s:4:"plus";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:1:"0";i:2;s:3:"590";i:3;s:3:"506";}}s:4:"plus";a:4:{s:1:"C";s:2:"43";s:2:"WX";s:3:"675";s:1:"N";s:4:"plus";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:1:"0";i:2;s:3:"590";i:3;s:3:"506";}}i:44;a:4:{s:1:"C";s:2:"44";s:2:"WX";s:3:"250";s:1:"N";s:5:"comma";s:1:"B";a:4:{i:0;s:2:"-4";i:1;s:4:"-129";i:2;s:3:"135";i:3;s:3:"101";}}s:5:"comma";a:4:{s:1:"C";s:2:"44";s:2:"WX";s:3:"250";s:1:"N";s:5:"comma";s:1:"B";a:4:{i:0;s:2:"-4";i:1;s:4:"-129";i:2;s:3:"135";i:3;s:3:"101";}}i:45;a:4:{s:1:"C";s:2:"45";s:2:"WX";s:3:"333";s:1:"N";s:6:"hyphen";s:1:"B";a:4:{i:0;s:2:"49";i:1;s:3:"192";i:2;s:3:"282";i:3;s:3:"255";}}s:6:"hyphen";a:4:{s:1:"C";s:2:"45";s:2:"WX";s:3:"333";s:1:"N";s:6:"hyphen";s:1:"B";a:4:{i:0;s:2:"49";i:1;s:3:"192";i:2;s:3:"282";i:3;s:3:"255";}}i:46;a:4:{s:1:"C";s:2:"46";s:2:"WX";s:3:"250";s:1:"N";s:6:"period";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:3:"-11";i:2;s:3:"138";i:3;s:3:"100";}}s:6:"period";a:4:{s:1:"C";s:2:"46";s:2:"WX";s:3:"250";s:1:"N";s:6:"period";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:3:"-11";i:2;s:3:"138";i:3;s:3:"100";}}i:47;a:4:{s:1:"C";s:2:"47";s:2:"WX";s:3:"278";s:1:"N";s:5:"slash";s:1:"B";a:4:{i:0;s:3:"-65";i:1;s:3:"-18";i:2;s:3:"386";i:3;s:3:"666";}}s:5:"slash";a:4:{s:1:"C";s:2:"47";s:2:"WX";s:3:"278";s:1:"N";s:5:"slash";s:1:"B";a:4:{i:0;s:3:"-65";i:1;s:3:"-18";i:2;s:3:"386";i:3;s:3:"666";}}i:48;a:4:{s:1:"C";s:2:"48";s:2:"WX";s:3:"500";s:1:"N";s:4:"zero";s:1:"B";a:4:{i:0;s:2:"32";i:1;s:2:"-7";i:2;s:3:"497";i:3;s:3:"676";}}s:4:"zero";a:4:{s:1:"C";s:2:"48";s:2:"WX";s:3:"500";s:1:"N";s:4:"zero";s:1:"B";a:4:{i:0;s:2:"32";i:1;s:2:"-7";i:2;s:3:"497";i:3;s:3:"676";}}i:49;a:4:{s:1:"C";s:2:"49";s:2:"WX";s:3:"500";s:1:"N";s:3:"one";s:1:"B";a:4:{i:0;s:2:"49";i:1;s:1:"0";i:2;s:3:"409";i:3;s:3:"676";}}s:3:"one";a:4:{s:1:"C";s:2:"49";s:2:"WX";s:3:"500";s:1:"N";s:3:"one";s:1:"B";a:4:{i:0;s:2:"49";i:1;s:1:"0";i:2;s:3:"409";i:3;s:3:"676";}}i:50;a:4:{s:1:"C";s:2:"50";s:2:"WX";s:3:"500";s:1:"N";s:3:"two";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:1:"0";i:2;s:3:"452";i:3;s:3:"676";}}s:3:"two";a:4:{s:1:"C";s:2:"50";s:2:"WX";s:3:"500";s:1:"N";s:3:"two";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:1:"0";i:2;s:3:"452";i:3;s:3:"676";}}i:51;a:4:{s:1:"C";s:2:"51";s:2:"WX";s:3:"500";s:1:"N";s:5:"three";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:2:"-7";i:2;s:3:"465";i:3;s:3:"676";}}s:5:"three";a:4:{s:1:"C";s:2:"51";s:2:"WX";s:3:"500";s:1:"N";s:5:"three";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:2:"-7";i:2;s:3:"465";i:3;s:3:"676";}}i:52;a:4:{s:1:"C";s:2:"52";s:2:"WX";s:3:"500";s:1:"N";s:4:"four";s:1:"B";a:4:{i:0;s:1:"1";i:1;s:1:"0";i:2;s:3:"479";i:3;s:3:"676";}}s:4:"four";a:4:{s:1:"C";s:2:"52";s:2:"WX";s:3:"500";s:1:"N";s:4:"four";s:1:"B";a:4:{i:0;s:1:"1";i:1;s:1:"0";i:2;s:3:"479";i:3;s:3:"676";}}i:53;a:4:{s:1:"C";s:2:"53";s:2:"WX";s:3:"500";s:1:"N";s:4:"five";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:2:"-7";i:2;s:3:"491";i:3;s:3:"666";}}s:4:"five";a:4:{s:1:"C";s:2:"53";s:2:"WX";s:3:"500";s:1:"N";s:4:"five";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:2:"-7";i:2;s:3:"491";i:3;s:3:"666";}}i:54;a:4:{s:1:"C";s:2:"54";s:2:"WX";s:3:"500";s:1:"N";s:3:"six";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:2:"-7";i:2;s:3:"521";i:3;s:3:"686";}}s:3:"six";a:4:{s:1:"C";s:2:"54";s:2:"WX";s:3:"500";s:1:"N";s:3:"six";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:2:"-7";i:2;s:3:"521";i:3;s:3:"686";}}i:55;a:4:{s:1:"C";s:2:"55";s:2:"WX";s:3:"500";s:1:"N";s:5:"seven";s:1:"B";a:4:{i:0;s:2:"75";i:1;s:2:"-8";i:2;s:3:"537";i:3;s:3:"666";}}s:5:"seven";a:4:{s:1:"C";s:2:"55";s:2:"WX";s:3:"500";s:1:"N";s:5:"seven";s:1:"B";a:4:{i:0;s:2:"75";i:1;s:2:"-8";i:2;s:3:"537";i:3;s:3:"666";}}i:56;a:4:{s:1:"C";s:2:"56";s:2:"WX";s:3:"500";s:1:"N";s:5:"eight";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:2:"-7";i:2;s:3:"493";i:3;s:3:"676";}}s:5:"eight";a:4:{s:1:"C";s:2:"56";s:2:"WX";s:3:"500";s:1:"N";s:5:"eight";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:2:"-7";i:2;s:3:"493";i:3;s:3:"676";}}i:57;a:4:{s:1:"C";s:2:"57";s:2:"WX";s:3:"500";s:1:"N";s:4:"nine";s:1:"B";a:4:{i:0;s:2:"23";i:1;s:3:"-17";i:2;s:3:"492";i:3;s:3:"676";}}s:4:"nine";a:4:{s:1:"C";s:2:"57";s:2:"WX";s:3:"500";s:1:"N";s:4:"nine";s:1:"B";a:4:{i:0;s:2:"23";i:1;s:3:"-17";i:2;s:3:"492";i:3;s:3:"676";}}i:58;a:4:{s:1:"C";s:2:"58";s:2:"WX";s:3:"333";s:1:"N";s:5:"colon";s:1:"B";a:4:{i:0;s:2:"50";i:1;s:3:"-11";i:2;s:3:"261";i:3;s:3:"441";}}s:5:"colon";a:4:{s:1:"C";s:2:"58";s:2:"WX";s:3:"333";s:1:"N";s:5:"colon";s:1:"B";a:4:{i:0;s:2:"50";i:1;s:3:"-11";i:2;s:3:"261";i:3;s:3:"441";}}i:59;a:4:{s:1:"C";s:2:"59";s:2:"WX";s:3:"333";s:1:"N";s:9:"semicolon";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:4:"-129";i:2;s:3:"261";i:3;s:3:"441";}}s:9:"semicolon";a:4:{s:1:"C";s:2:"59";s:2:"WX";s:3:"333";s:1:"N";s:9:"semicolon";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:4:"-129";i:2;s:3:"261";i:3;s:3:"441";}}i:60;a:4:{s:1:"C";s:2:"60";s:2:"WX";s:3:"675";s:1:"N";s:4:"less";s:1:"B";a:4:{i:0;s:2:"84";i:1;s:2:"-8";i:2;s:3:"592";i:3;s:3:"514";}}s:4:"less";a:4:{s:1:"C";s:2:"60";s:2:"WX";s:3:"675";s:1:"N";s:4:"less";s:1:"B";a:4:{i:0;s:2:"84";i:1;s:2:"-8";i:2;s:3:"592";i:3;s:3:"514";}}i:61;a:4:{s:1:"C";s:2:"61";s:2:"WX";s:3:"675";s:1:"N";s:5:"equal";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:3:"120";i:2;s:3:"590";i:3;s:3:"386";}}s:5:"equal";a:4:{s:1:"C";s:2:"61";s:2:"WX";s:3:"675";s:1:"N";s:5:"equal";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:3:"120";i:2;s:3:"590";i:3;s:3:"386";}}i:62;a:4:{s:1:"C";s:2:"62";s:2:"WX";s:3:"675";s:1:"N";s:7:"greater";s:1:"B";a:4:{i:0;s:2:"84";i:1;s:2:"-8";i:2;s:3:"592";i:3;s:3:"514";}}s:7:"greater";a:4:{s:1:"C";s:2:"62";s:2:"WX";s:3:"675";s:1:"N";s:7:"greater";s:1:"B";a:4:{i:0;s:2:"84";i:1;s:2:"-8";i:2;s:3:"592";i:3;s:3:"514";}}i:63;a:4:{s:1:"C";s:2:"63";s:2:"WX";s:3:"500";s:1:"N";s:8:"question";s:1:"B";a:4:{i:0;s:3:"132";i:1;s:3:"-12";i:2;s:3:"472";i:3;s:3:"664";}}s:8:"question";a:4:{s:1:"C";s:2:"63";s:2:"WX";s:3:"500";s:1:"N";s:8:"question";s:1:"B";a:4:{i:0;s:3:"132";i:1;s:3:"-12";i:2;s:3:"472";i:3;s:3:"664";}}i:64;a:4:{s:1:"C";s:2:"64";s:2:"WX";s:3:"920";s:1:"N";s:2:"at";s:1:"B";a:4:{i:0;s:3:"118";i:1;s:3:"-18";i:2;s:3:"806";i:3;s:3:"666";}}s:2:"at";a:4:{s:1:"C";s:2:"64";s:2:"WX";s:3:"920";s:1:"N";s:2:"at";s:1:"B";a:4:{i:0;s:3:"118";i:1;s:3:"-18";i:2;s:3:"806";i:3;s:3:"666";}}i:65;a:4:{s:1:"C";s:2:"65";s:2:"WX";s:3:"611";s:1:"N";s:1:"A";s:1:"B";a:4:{i:0;s:3:"-51";i:1;s:1:"0";i:2;s:3:"564";i:3;s:3:"668";}}s:1:"A";a:4:{s:1:"C";s:2:"65";s:2:"WX";s:3:"611";s:1:"N";s:1:"A";s:1:"B";a:4:{i:0;s:3:"-51";i:1;s:1:"0";i:2;s:3:"564";i:3;s:3:"668";}}i:66;a:4:{s:1:"C";s:2:"66";s:2:"WX";s:3:"611";s:1:"N";s:1:"B";s:1:"B";a:4:{i:0;s:2:"-8";i:1;s:1:"0";i:2;s:3:"588";i:3;s:3:"653";}}s:1:"B";a:4:{s:1:"C";s:2:"66";s:2:"WX";s:3:"611";s:1:"N";s:1:"B";s:1:"B";a:4:{i:0;s:2:"-8";i:1;s:1:"0";i:2;s:3:"588";i:3;s:3:"653";}}i:67;a:4:{s:1:"C";s:2:"67";s:2:"WX";s:3:"667";s:1:"N";s:1:"C";s:1:"B";a:4:{i:0;s:2:"66";i:1;s:3:"-18";i:2;s:3:"689";i:3;s:3:"666";}}s:1:"C";a:4:{s:1:"C";s:2:"67";s:2:"WX";s:3:"667";s:1:"N";s:1:"C";s:1:"B";a:4:{i:0;s:2:"66";i:1;s:3:"-18";i:2;s:3:"689";i:3;s:3:"666";}}i:68;a:4:{s:1:"C";s:2:"68";s:2:"WX";s:3:"722";s:1:"N";s:1:"D";s:1:"B";a:4:{i:0;s:2:"-8";i:1;s:1:"0";i:2;s:3:"700";i:3;s:3:"653";}}s:1:"D";a:4:{s:1:"C";s:2:"68";s:2:"WX";s:3:"722";s:1:"N";s:1:"D";s:1:"B";a:4:{i:0;s:2:"-8";i:1;s:1:"0";i:2;s:3:"700";i:3;s:3:"653";}}i:69;a:4:{s:1:"C";s:2:"69";s:2:"WX";s:3:"611";s:1:"N";s:1:"E";s:1:"B";a:4:{i:0;s:2:"-1";i:1;s:1:"0";i:2;s:3:"634";i:3;s:3:"653";}}s:1:"E";a:4:{s:1:"C";s:2:"69";s:2:"WX";s:3:"611";s:1:"N";s:1:"E";s:1:"B";a:4:{i:0;s:2:"-1";i:1;s:1:"0";i:2;s:3:"634";i:3;s:3:"653";}}i:70;a:4:{s:1:"C";s:2:"70";s:2:"WX";s:3:"611";s:1:"N";s:1:"F";s:1:"B";a:4:{i:0;s:1:"8";i:1;s:1:"0";i:2;s:3:"645";i:3;s:3:"653";}}s:1:"F";a:4:{s:1:"C";s:2:"70";s:2:"WX";s:3:"611";s:1:"N";s:1:"F";s:1:"B";a:4:{i:0;s:1:"8";i:1;s:1:"0";i:2;s:3:"645";i:3;s:3:"653";}}i:71;a:4:{s:1:"C";s:2:"71";s:2:"WX";s:3:"722";s:1:"N";s:1:"G";s:1:"B";a:4:{i:0;s:2:"52";i:1;s:3:"-18";i:2;s:3:"722";i:3;s:3:"666";}}s:1:"G";a:4:{s:1:"C";s:2:"71";s:2:"WX";s:3:"722";s:1:"N";s:1:"G";s:1:"B";a:4:{i:0;s:2:"52";i:1;s:3:"-18";i:2;s:3:"722";i:3;s:3:"666";}}i:72;a:4:{s:1:"C";s:2:"72";s:2:"WX";s:3:"722";s:1:"N";s:1:"H";s:1:"B";a:4:{i:0;s:2:"-8";i:1;s:1:"0";i:2;s:3:"767";i:3;s:3:"653";}}s:1:"H";a:4:{s:1:"C";s:2:"72";s:2:"WX";s:3:"722";s:1:"N";s:1:"H";s:1:"B";a:4:{i:0;s:2:"-8";i:1;s:1:"0";i:2;s:3:"767";i:3;s:3:"653";}}i:73;a:4:{s:1:"C";s:2:"73";s:2:"WX";s:3:"333";s:1:"N";s:1:"I";s:1:"B";a:4:{i:0;s:2:"-8";i:1;s:1:"0";i:2;s:3:"384";i:3;s:3:"653";}}s:1:"I";a:4:{s:1:"C";s:2:"73";s:2:"WX";s:3:"333";s:1:"N";s:1:"I";s:1:"B";a:4:{i:0;s:2:"-8";i:1;s:1:"0";i:2;s:3:"384";i:3;s:3:"653";}}i:74;a:4:{s:1:"C";s:2:"74";s:2:"WX";s:3:"444";s:1:"N";s:1:"J";s:1:"B";a:4:{i:0;s:2:"-6";i:1;s:3:"-18";i:2;s:3:"491";i:3;s:3:"653";}}s:1:"J";a:4:{s:1:"C";s:2:"74";s:2:"WX";s:3:"444";s:1:"N";s:1:"J";s:1:"B";a:4:{i:0;s:2:"-6";i:1;s:3:"-18";i:2;s:3:"491";i:3;s:3:"653";}}i:75;a:4:{s:1:"C";s:2:"75";s:2:"WX";s:3:"667";s:1:"N";s:1:"K";s:1:"B";a:4:{i:0;s:1:"7";i:1;s:1:"0";i:2;s:3:"722";i:3;s:3:"653";}}s:1:"K";a:4:{s:1:"C";s:2:"75";s:2:"WX";s:3:"667";s:1:"N";s:1:"K";s:1:"B";a:4:{i:0;s:1:"7";i:1;s:1:"0";i:2;s:3:"722";i:3;s:3:"653";}}i:76;a:4:{s:1:"C";s:2:"76";s:2:"WX";s:3:"556";s:1:"N";s:1:"L";s:1:"B";a:4:{i:0;s:2:"-8";i:1;s:1:"0";i:2;s:3:"559";i:3;s:3:"653";}}s:1:"L";a:4:{s:1:"C";s:2:"76";s:2:"WX";s:3:"556";s:1:"N";s:1:"L";s:1:"B";a:4:{i:0;s:2:"-8";i:1;s:1:"0";i:2;s:3:"559";i:3;s:3:"653";}}i:77;a:4:{s:1:"C";s:2:"77";s:2:"WX";s:3:"833";s:1:"N";s:1:"M";s:1:"B";a:4:{i:0;s:3:"-18";i:1;s:1:"0";i:2;s:3:"873";i:3;s:3:"653";}}s:1:"M";a:4:{s:1:"C";s:2:"77";s:2:"WX";s:3:"833";s:1:"N";s:1:"M";s:1:"B";a:4:{i:0;s:3:"-18";i:1;s:1:"0";i:2;s:3:"873";i:3;s:3:"653";}}i:78;a:4:{s:1:"C";s:2:"78";s:2:"WX";s:3:"667";s:1:"N";s:1:"N";s:1:"B";a:4:{i:0;s:3:"-20";i:1;s:3:"-15";i:2;s:3:"727";i:3;s:3:"653";}}s:1:"N";a:4:{s:1:"C";s:2:"78";s:2:"WX";s:3:"667";s:1:"N";s:1:"N";s:1:"B";a:4:{i:0;s:3:"-20";i:1;s:3:"-15";i:2;s:3:"727";i:3;s:3:"653";}}i:79;a:4:{s:1:"C";s:2:"79";s:2:"WX";s:3:"722";s:1:"N";s:1:"O";s:1:"B";a:4:{i:0;s:2:"60";i:1;s:3:"-18";i:2;s:3:"699";i:3;s:3:"666";}}s:1:"O";a:4:{s:1:"C";s:2:"79";s:2:"WX";s:3:"722";s:1:"N";s:1:"O";s:1:"B";a:4:{i:0;s:2:"60";i:1;s:3:"-18";i:2;s:3:"699";i:3;s:3:"666";}}i:80;a:4:{s:1:"C";s:2:"80";s:2:"WX";s:3:"611";s:1:"N";s:1:"P";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:1:"0";i:2;s:3:"605";i:3;s:3:"653";}}s:1:"P";a:4:{s:1:"C";s:2:"80";s:2:"WX";s:3:"611";s:1:"N";s:1:"P";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:1:"0";i:2;s:3:"605";i:3;s:3:"653";}}i:81;a:4:{s:1:"C";s:2:"81";s:2:"WX";s:3:"722";s:1:"N";s:1:"Q";s:1:"B";a:4:{i:0;s:2:"59";i:1;s:4:"-182";i:2;s:3:"699";i:3;s:3:"666";}}s:1:"Q";a:4:{s:1:"C";s:2:"81";s:2:"WX";s:3:"722";s:1:"N";s:1:"Q";s:1:"B";a:4:{i:0;s:2:"59";i:1;s:4:"-182";i:2;s:3:"699";i:3;s:3:"666";}}i:82;a:4:{s:1:"C";s:2:"82";s:2:"WX";s:3:"611";s:1:"N";s:1:"R";s:1:"B";a:4:{i:0;s:3:"-13";i:1;s:1:"0";i:2;s:3:"588";i:3;s:3:"653";}}s:1:"R";a:4:{s:1:"C";s:2:"82";s:2:"WX";s:3:"611";s:1:"N";s:1:"R";s:1:"B";a:4:{i:0;s:3:"-13";i:1;s:1:"0";i:2;s:3:"588";i:3;s:3:"653";}}i:83;a:4:{s:1:"C";s:2:"83";s:2:"WX";s:3:"500";s:1:"N";s:1:"S";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:3:"-18";i:2;s:3:"508";i:3;s:3:"667";}}s:1:"S";a:4:{s:1:"C";s:2:"83";s:2:"WX";s:3:"500";s:1:"N";s:1:"S";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:3:"-18";i:2;s:3:"508";i:3;s:3:"667";}}i:84;a:4:{s:1:"C";s:2:"84";s:2:"WX";s:3:"556";s:1:"N";s:1:"T";s:1:"B";a:4:{i:0;s:2:"59";i:1;s:1:"0";i:2;s:3:"633";i:3;s:3:"653";}}s:1:"T";a:4:{s:1:"C";s:2:"84";s:2:"WX";s:3:"556";s:1:"N";s:1:"T";s:1:"B";a:4:{i:0;s:2:"59";i:1;s:1:"0";i:2;s:3:"633";i:3;s:3:"653";}}i:85;a:4:{s:1:"C";s:2:"85";s:2:"WX";s:3:"722";s:1:"N";s:1:"U";s:1:"B";a:4:{i:0;s:3:"102";i:1;s:3:"-18";i:2;s:3:"765";i:3;s:3:"653";}}s:1:"U";a:4:{s:1:"C";s:2:"85";s:2:"WX";s:3:"722";s:1:"N";s:1:"U";s:1:"B";a:4:{i:0;s:3:"102";i:1;s:3:"-18";i:2;s:3:"765";i:3;s:3:"653";}}i:86;a:4:{s:1:"C";s:2:"86";s:2:"WX";s:3:"611";s:1:"N";s:1:"V";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:3:"-18";i:2;s:3:"688";i:3;s:3:"653";}}s:1:"V";a:4:{s:1:"C";s:2:"86";s:2:"WX";s:3:"611";s:1:"N";s:1:"V";s:1:"B";a:4:{i:0;s:2:"76";i:1;s:3:"-18";i:2;s:3:"688";i:3;s:3:"653";}}i:87;a:4:{s:1:"C";s:2:"87";s:2:"WX";s:3:"833";s:1:"N";s:1:"W";s:1:"B";a:4:{i:0;s:2:"71";i:1;s:3:"-18";i:2;s:3:"906";i:3;s:3:"653";}}s:1:"W";a:4:{s:1:"C";s:2:"87";s:2:"WX";s:3:"833";s:1:"N";s:1:"W";s:1:"B";a:4:{i:0;s:2:"71";i:1;s:3:"-18";i:2;s:3:"906";i:3;s:3:"653";}}i:88;a:4:{s:1:"C";s:2:"88";s:2:"WX";s:3:"611";s:1:"N";s:1:"X";s:1:"B";a:4:{i:0;s:3:"-29";i:1;s:1:"0";i:2;s:3:"655";i:3;s:3:"653";}}s:1:"X";a:4:{s:1:"C";s:2:"88";s:2:"WX";s:3:"611";s:1:"N";s:1:"X";s:1:"B";a:4:{i:0;s:3:"-29";i:1;s:1:"0";i:2;s:3:"655";i:3;s:3:"653";}}i:89;a:4:{s:1:"C";s:2:"89";s:2:"WX";s:3:"556";s:1:"N";s:1:"Y";s:1:"B";a:4:{i:0;s:2:"78";i:1;s:1:"0";i:2;s:3:"633";i:3;s:3:"653";}}s:1:"Y";a:4:{s:1:"C";s:2:"89";s:2:"WX";s:3:"556";s:1:"N";s:1:"Y";s:1:"B";a:4:{i:0;s:2:"78";i:1;s:1:"0";i:2;s:3:"633";i:3;s:3:"653";}}i:90;a:4:{s:1:"C";s:2:"90";s:2:"WX";s:3:"556";s:1:"N";s:1:"Z";s:1:"B";a:4:{i:0;s:2:"-6";i:1;s:1:"0";i:2;s:3:"606";i:3;s:3:"653";}}s:1:"Z";a:4:{s:1:"C";s:2:"90";s:2:"WX";s:3:"556";s:1:"N";s:1:"Z";s:1:"B";a:4:{i:0;s:2:"-6";i:1;s:1:"0";i:2;s:3:"606";i:3;s:3:"653";}}i:91;a:4:{s:1:"C";s:2:"91";s:2:"WX";s:3:"389";s:1:"N";s:11:"bracketleft";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:4:"-153";i:2;s:3:"391";i:3;s:3:"663";}}s:11:"bracketleft";a:4:{s:1:"C";s:2:"91";s:2:"WX";s:3:"389";s:1:"N";s:11:"bracketleft";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:4:"-153";i:2;s:3:"391";i:3;s:3:"663";}}i:92;a:4:{s:1:"C";s:2:"92";s:2:"WX";s:3:"278";s:1:"N";s:9:"backslash";s:1:"B";a:4:{i:0;s:3:"-41";i:1;s:3:"-18";i:2;s:3:"319";i:3;s:3:"666";}}s:9:"backslash";a:4:{s:1:"C";s:2:"92";s:2:"WX";s:3:"278";s:1:"N";s:9:"backslash";s:1:"B";a:4:{i:0;s:3:"-41";i:1;s:3:"-18";i:2;s:3:"319";i:3;s:3:"666";}}i:93;a:4:{s:1:"C";s:2:"93";s:2:"WX";s:3:"389";s:1:"N";s:12:"bracketright";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:4:"-153";i:2;s:3:"382";i:3;s:3:"663";}}s:12:"bracketright";a:4:{s:1:"C";s:2:"93";s:2:"WX";s:3:"389";s:1:"N";s:12:"bracketright";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:4:"-153";i:2;s:3:"382";i:3;s:3:"663";}}i:94;a:4:{s:1:"C";s:2:"94";s:2:"WX";s:3:"422";s:1:"N";s:11:"asciicircum";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:3:"301";i:2;s:3:"422";i:3;s:3:"666";}}s:11:"asciicircum";a:4:{s:1:"C";s:2:"94";s:2:"WX";s:3:"422";s:1:"N";s:11:"asciicircum";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:3:"301";i:2;s:3:"422";i:3;s:3:"666";}}i:95;a:4:{s:1:"C";s:2:"95";s:2:"WX";s:3:"500";s:1:"N";s:10:"underscore";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:4:"-125";i:2;s:3:"500";i:3;s:3:"-75";}}s:10:"underscore";a:4:{s:1:"C";s:2:"95";s:2:"WX";s:3:"500";s:1:"N";s:10:"underscore";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:4:"-125";i:2;s:3:"500";i:3;s:3:"-75";}}i:96;a:4:{s:1:"C";s:2:"96";s:2:"WX";s:3:"333";s:1:"N";s:9:"quoteleft";s:1:"B";a:4:{i:0;s:3:"171";i:1;s:3:"436";i:2;s:3:"310";i:3;s:3:"666";}}s:9:"quoteleft";a:4:{s:1:"C";s:2:"96";s:2:"WX";s:3:"333";s:1:"N";s:9:"quoteleft";s:1:"B";a:4:{i:0;s:3:"171";i:1;s:3:"436";i:2;s:3:"310";i:3;s:3:"666";}}i:97;a:4:{s:1:"C";s:2:"97";s:2:"WX";s:3:"500";s:1:"N";s:1:"a";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:3:"-11";i:2;s:3:"476";i:3;s:3:"441";}}s:1:"a";a:4:{s:1:"C";s:2:"97";s:2:"WX";s:3:"500";s:1:"N";s:1:"a";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:3:"-11";i:2;s:3:"476";i:3;s:3:"441";}}i:98;a:4:{s:1:"C";s:2:"98";s:2:"WX";s:3:"500";s:1:"N";s:1:"b";s:1:"B";a:4:{i:0;s:2:"23";i:1;s:3:"-11";i:2;s:3:"473";i:3;s:3:"683";}}s:1:"b";a:4:{s:1:"C";s:2:"98";s:2:"WX";s:3:"500";s:1:"N";s:1:"b";s:1:"B";a:4:{i:0;s:2:"23";i:1;s:3:"-11";i:2;s:3:"473";i:3;s:3:"683";}}i:99;a:4:{s:1:"C";s:2:"99";s:2:"WX";s:3:"444";s:1:"N";s:1:"c";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:3:"-11";i:2;s:3:"425";i:3;s:3:"441";}}s:1:"c";a:4:{s:1:"C";s:2:"99";s:2:"WX";s:3:"444";s:1:"N";s:1:"c";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:3:"-11";i:2;s:3:"425";i:3;s:3:"441";}}i:100;a:4:{s:1:"C";s:3:"100";s:2:"WX";s:3:"500";s:1:"N";s:1:"d";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:3:"-13";i:2;s:3:"527";i:3;s:3:"683";}}s:1:"d";a:4:{s:1:"C";s:3:"100";s:2:"WX";s:3:"500";s:1:"N";s:1:"d";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:3:"-13";i:2;s:3:"527";i:3;s:3:"683";}}i:101;a:4:{s:1:"C";s:3:"101";s:2:"WX";s:3:"444";s:1:"N";s:1:"e";s:1:"B";a:4:{i:0;s:2:"31";i:1;s:3:"-11";i:2;s:3:"412";i:3;s:3:"441";}}s:1:"e";a:4:{s:1:"C";s:3:"101";s:2:"WX";s:3:"444";s:1:"N";s:1:"e";s:1:"B";a:4:{i:0;s:2:"31";i:1;s:3:"-11";i:2;s:3:"412";i:3;s:3:"441";}}i:102;a:5:{s:1:"C";s:3:"102";s:2:"WX";s:3:"278";s:1:"N";s:1:"f";s:1:"B";a:4:{i:0;s:4:"-147";i:1;s:4:"-207";i:2;s:3:"424";i:3;s:3:"678";}s:1:"L";a:2:{i:0;s:1:"l";i:1;s:2:"fl";}}s:1:"f";a:5:{s:1:"C";s:3:"102";s:2:"WX";s:3:"278";s:1:"N";s:1:"f";s:1:"B";a:4:{i:0;s:4:"-147";i:1;s:4:"-207";i:2;s:3:"424";i:3;s:3:"678";}s:1:"L";a:2:{i:0;s:1:"l";i:1;s:2:"fl";}}i:103;a:4:{s:1:"C";s:3:"103";s:2:"WX";s:3:"500";s:1:"N";s:1:"g";s:1:"B";a:4:{i:0;s:1:"8";i:1;s:4:"-206";i:2;s:3:"472";i:3;s:3:"441";}}s:1:"g";a:4:{s:1:"C";s:3:"103";s:2:"WX";s:3:"500";s:1:"N";s:1:"g";s:1:"B";a:4:{i:0;s:1:"8";i:1;s:4:"-206";i:2;s:3:"472";i:3;s:3:"441";}}i:104;a:4:{s:1:"C";s:3:"104";s:2:"WX";s:3:"500";s:1:"N";s:1:"h";s:1:"B";a:4:{i:0;s:2:"19";i:1;s:2:"-9";i:2;s:3:"478";i:3;s:3:"683";}}s:1:"h";a:4:{s:1:"C";s:3:"104";s:2:"WX";s:3:"500";s:1:"N";s:1:"h";s:1:"B";a:4:{i:0;s:2:"19";i:1;s:2:"-9";i:2;s:3:"478";i:3;s:3:"683";}}i:105;a:4:{s:1:"C";s:3:"105";s:2:"WX";s:3:"278";s:1:"N";s:1:"i";s:1:"B";a:4:{i:0;s:2:"49";i:1;s:3:"-11";i:2;s:3:"264";i:3;s:3:"654";}}s:1:"i";a:4:{s:1:"C";s:3:"105";s:2:"WX";s:3:"278";s:1:"N";s:1:"i";s:1:"B";a:4:{i:0;s:2:"49";i:1;s:3:"-11";i:2;s:3:"264";i:3;s:3:"654";}}i:106;a:4:{s:1:"C";s:3:"106";s:2:"WX";s:3:"278";s:1:"N";s:1:"j";s:1:"B";a:4:{i:0;s:4:"-124";i:1;s:4:"-207";i:2;s:3:"276";i:3;s:3:"654";}}s:1:"j";a:4:{s:1:"C";s:3:"106";s:2:"WX";s:3:"278";s:1:"N";s:1:"j";s:1:"B";a:4:{i:0;s:4:"-124";i:1;s:4:"-207";i:2;s:3:"276";i:3;s:3:"654";}}i:107;a:4:{s:1:"C";s:3:"107";s:2:"WX";s:3:"444";s:1:"N";s:1:"k";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:3:"-11";i:2;s:3:"461";i:3;s:3:"683";}}s:1:"k";a:4:{s:1:"C";s:3:"107";s:2:"WX";s:3:"444";s:1:"N";s:1:"k";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:3:"-11";i:2;s:3:"461";i:3;s:3:"683";}}i:108;a:4:{s:1:"C";s:3:"108";s:2:"WX";s:3:"278";s:1:"N";s:1:"l";s:1:"B";a:4:{i:0;s:2:"41";i:1;s:3:"-11";i:2;s:3:"279";i:3;s:3:"683";}}s:1:"l";a:4:{s:1:"C";s:3:"108";s:2:"WX";s:3:"278";s:1:"N";s:1:"l";s:1:"B";a:4:{i:0;s:2:"41";i:1;s:3:"-11";i:2;s:3:"279";i:3;s:3:"683";}}i:109;a:4:{s:1:"C";s:3:"109";s:2:"WX";s:3:"722";s:1:"N";s:1:"m";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:2:"-9";i:2;s:3:"704";i:3;s:3:"441";}}s:1:"m";a:4:{s:1:"C";s:3:"109";s:2:"WX";s:3:"722";s:1:"N";s:1:"m";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:2:"-9";i:2;s:3:"704";i:3;s:3:"441";}}i:110;a:4:{s:1:"C";s:3:"110";s:2:"WX";s:3:"500";s:1:"N";s:1:"n";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:2:"-9";i:2;s:3:"474";i:3;s:3:"441";}}s:1:"n";a:4:{s:1:"C";s:3:"110";s:2:"WX";s:3:"500";s:1:"N";s:1:"n";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:2:"-9";i:2;s:3:"474";i:3;s:3:"441";}}i:111;a:4:{s:1:"C";s:3:"111";s:2:"WX";s:3:"500";s:1:"N";s:1:"o";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:3:"-11";i:2;s:3:"468";i:3;s:3:"441";}}s:1:"o";a:4:{s:1:"C";s:3:"111";s:2:"WX";s:3:"500";s:1:"N";s:1:"o";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:3:"-11";i:2;s:3:"468";i:3;s:3:"441";}}i:112;a:4:{s:1:"C";s:3:"112";s:2:"WX";s:3:"500";s:1:"N";s:1:"p";s:1:"B";a:4:{i:0;s:3:"-75";i:1;s:4:"-205";i:2;s:3:"469";i:3;s:3:"441";}}s:1:"p";a:4:{s:1:"C";s:3:"112";s:2:"WX";s:3:"500";s:1:"N";s:1:"p";s:1:"B";a:4:{i:0;s:3:"-75";i:1;s:4:"-205";i:2;s:3:"469";i:3;s:3:"441";}}i:113;a:4:{s:1:"C";s:3:"113";s:2:"WX";s:3:"500";s:1:"N";s:1:"q";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:4:"-209";i:2;s:3:"483";i:3;s:3:"441";}}s:1:"q";a:4:{s:1:"C";s:3:"113";s:2:"WX";s:3:"500";s:1:"N";s:1:"q";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:4:"-209";i:2;s:3:"483";i:3;s:3:"441";}}i:114;a:4:{s:1:"C";s:3:"114";s:2:"WX";s:3:"389";s:1:"N";s:1:"r";s:1:"B";a:4:{i:0;s:2:"45";i:1;s:1:"0";i:2;s:3:"412";i:3;s:3:"441";}}s:1:"r";a:4:{s:1:"C";s:3:"114";s:2:"WX";s:3:"389";s:1:"N";s:1:"r";s:1:"B";a:4:{i:0;s:2:"45";i:1;s:1:"0";i:2;s:3:"412";i:3;s:3:"441";}}i:115;a:4:{s:1:"C";s:3:"115";s:2:"WX";s:3:"389";s:1:"N";s:1:"s";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:3:"-13";i:2;s:3:"366";i:3;s:3:"442";}}s:1:"s";a:4:{s:1:"C";s:3:"115";s:2:"WX";s:3:"389";s:1:"N";s:1:"s";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:3:"-13";i:2;s:3:"366";i:3;s:3:"442";}}i:116;a:4:{s:1:"C";s:3:"116";s:2:"WX";s:3:"278";s:1:"N";s:1:"t";s:1:"B";a:4:{i:0;s:2:"37";i:1;s:3:"-11";i:2;s:3:"296";i:3;s:3:"546";}}s:1:"t";a:4:{s:1:"C";s:3:"116";s:2:"WX";s:3:"278";s:1:"N";s:1:"t";s:1:"B";a:4:{i:0;s:2:"37";i:1;s:3:"-11";i:2;s:3:"296";i:3;s:3:"546";}}i:117;a:4:{s:1:"C";s:3:"117";s:2:"WX";s:3:"500";s:1:"N";s:1:"u";s:1:"B";a:4:{i:0;s:2:"42";i:1;s:3:"-11";i:2;s:3:"475";i:3;s:3:"441";}}s:1:"u";a:4:{s:1:"C";s:3:"117";s:2:"WX";s:3:"500";s:1:"N";s:1:"u";s:1:"B";a:4:{i:0;s:2:"42";i:1;s:3:"-11";i:2;s:3:"475";i:3;s:3:"441";}}i:118;a:4:{s:1:"C";s:3:"118";s:2:"WX";s:3:"444";s:1:"N";s:1:"v";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:3:"-18";i:2;s:3:"426";i:3;s:3:"441";}}s:1:"v";a:4:{s:1:"C";s:3:"118";s:2:"WX";s:3:"444";s:1:"N";s:1:"v";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:3:"-18";i:2;s:3:"426";i:3;s:3:"441";}}i:119;a:4:{s:1:"C";s:3:"119";s:2:"WX";s:3:"667";s:1:"N";s:1:"w";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:3:"-18";i:2;s:3:"648";i:3;s:3:"441";}}s:1:"w";a:4:{s:1:"C";s:3:"119";s:2:"WX";s:3:"667";s:1:"N";s:1:"w";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:3:"-18";i:2;s:3:"648";i:3;s:3:"441";}}i:120;a:4:{s:1:"C";s:3:"120";s:2:"WX";s:3:"444";s:1:"N";s:1:"x";s:1:"B";a:4:{i:0;s:3:"-27";i:1;s:3:"-11";i:2;s:3:"447";i:3;s:3:"441";}}s:1:"x";a:4:{s:1:"C";s:3:"120";s:2:"WX";s:3:"444";s:1:"N";s:1:"x";s:1:"B";a:4:{i:0;s:3:"-27";i:1;s:3:"-11";i:2;s:3:"447";i:3;s:3:"441";}}i:121;a:4:{s:1:"C";s:3:"121";s:2:"WX";s:3:"444";s:1:"N";s:1:"y";s:1:"B";a:4:{i:0;s:3:"-24";i:1;s:4:"-206";i:2;s:3:"426";i:3;s:3:"441";}}s:1:"y";a:4:{s:1:"C";s:3:"121";s:2:"WX";s:3:"444";s:1:"N";s:1:"y";s:1:"B";a:4:{i:0;s:3:"-24";i:1;s:4:"-206";i:2;s:3:"426";i:3;s:3:"441";}}i:122;a:4:{s:1:"C";s:3:"122";s:2:"WX";s:3:"389";s:1:"N";s:1:"z";s:1:"B";a:4:{i:0;s:2:"-2";i:1;s:3:"-81";i:2;s:3:"380";i:3;s:3:"428";}}s:1:"z";a:4:{s:1:"C";s:3:"122";s:2:"WX";s:3:"389";s:1:"N";s:1:"z";s:1:"B";a:4:{i:0;s:2:"-2";i:1;s:3:"-81";i:2;s:3:"380";i:3;s:3:"428";}}i:123;a:4:{s:1:"C";s:3:"123";s:2:"WX";s:3:"400";s:1:"N";s:9:"braceleft";s:1:"B";a:4:{i:0;s:2:"51";i:1;s:4:"-177";i:2;s:3:"407";i:3;s:3:"687";}}s:9:"braceleft";a:4:{s:1:"C";s:3:"123";s:2:"WX";s:3:"400";s:1:"N";s:9:"braceleft";s:1:"B";a:4:{i:0;s:2:"51";i:1;s:4:"-177";i:2;s:3:"407";i:3;s:3:"687";}}i:124;a:4:{s:1:"C";s:3:"124";s:2:"WX";s:3:"275";s:1:"N";s:3:"bar";s:1:"B";a:4:{i:0;s:3:"105";i:1;s:4:"-217";i:2;s:3:"171";i:3;s:3:"783";}}s:3:"bar";a:4:{s:1:"C";s:3:"124";s:2:"WX";s:3:"275";s:1:"N";s:3:"bar";s:1:"B";a:4:{i:0;s:3:"105";i:1;s:4:"-217";i:2;s:3:"171";i:3;s:3:"783";}}i:125;a:4:{s:1:"C";s:3:"125";s:2:"WX";s:3:"400";s:1:"N";s:10:"braceright";s:1:"B";a:4:{i:0;s:2:"-7";i:1;s:4:"-177";i:2;s:3:"349";i:3;s:3:"687";}}s:10:"braceright";a:4:{s:1:"C";s:3:"125";s:2:"WX";s:3:"400";s:1:"N";s:10:"braceright";s:1:"B";a:4:{i:0;s:2:"-7";i:1;s:4:"-177";i:2;s:3:"349";i:3;s:3:"687";}}i:126;a:4:{s:1:"C";s:3:"126";s:2:"WX";s:3:"541";s:1:"N";s:10:"asciitilde";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:3:"183";i:2;s:3:"502";i:3;s:3:"323";}}s:10:"asciitilde";a:4:{s:1:"C";s:3:"126";s:2:"WX";s:3:"541";s:1:"N";s:10:"asciitilde";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:3:"183";i:2;s:3:"502";i:3;s:3:"323";}}i:161;a:4:{s:1:"C";s:3:"161";s:2:"WX";s:3:"389";s:1:"N";s:10:"exclamdown";s:1:"B";a:4:{i:0;s:2:"59";i:1;s:4:"-205";i:2;s:3:"322";i:3;s:3:"473";}}s:10:"exclamdown";a:4:{s:1:"C";s:3:"161";s:2:"WX";s:3:"389";s:1:"N";s:10:"exclamdown";s:1:"B";a:4:{i:0;s:2:"59";i:1;s:4:"-205";i:2;s:3:"322";i:3;s:3:"473";}}i:162;a:4:{s:1:"C";s:3:"162";s:2:"WX";s:3:"500";s:1:"N";s:4:"cent";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:4:"-143";i:2;s:3:"472";i:3;s:3:"560";}}s:4:"cent";a:4:{s:1:"C";s:3:"162";s:2:"WX";s:3:"500";s:1:"N";s:4:"cent";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:4:"-143";i:2;s:3:"472";i:3;s:3:"560";}}i:163;a:4:{s:1:"C";s:3:"163";s:2:"WX";s:3:"500";s:1:"N";s:8:"sterling";s:1:"B";a:4:{i:0;s:2:"10";i:1;s:2:"-6";i:2;s:3:"517";i:3;s:3:"670";}}s:8:"sterling";a:4:{s:1:"C";s:3:"163";s:2:"WX";s:3:"500";s:1:"N";s:8:"sterling";s:1:"B";a:4:{i:0;s:2:"10";i:1;s:2:"-6";i:2;s:3:"517";i:3;s:3:"670";}}i:164;a:4:{s:1:"C";s:3:"164";s:2:"WX";s:3:"167";s:1:"N";s:8:"fraction";s:1:"B";a:4:{i:0;s:4:"-169";i:1;s:3:"-10";i:2;s:3:"337";i:3;s:3:"676";}}s:8:"fraction";a:4:{s:1:"C";s:3:"164";s:2:"WX";s:3:"167";s:1:"N";s:8:"fraction";s:1:"B";a:4:{i:0;s:4:"-169";i:1;s:3:"-10";i:2;s:3:"337";i:3;s:3:"676";}}i:165;a:4:{s:1:"C";s:3:"165";s:2:"WX";s:3:"500";s:1:"N";s:3:"yen";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:1:"0";i:2;s:3:"603";i:3;s:3:"653";}}s:3:"yen";a:4:{s:1:"C";s:3:"165";s:2:"WX";s:3:"500";s:1:"N";s:3:"yen";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:1:"0";i:2;s:3:"603";i:3;s:3:"653";}}i:166;a:4:{s:1:"C";s:3:"166";s:2:"WX";s:3:"500";s:1:"N";s:6:"florin";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:4:"-182";i:2;s:3:"507";i:3;s:3:"682";}}s:6:"florin";a:4:{s:1:"C";s:3:"166";s:2:"WX";s:3:"500";s:1:"N";s:6:"florin";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:4:"-182";i:2;s:3:"507";i:3;s:3:"682";}}i:167;a:4:{s:1:"C";s:3:"167";s:2:"WX";s:3:"500";s:1:"N";s:7:"section";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:4:"-162";i:2;s:3:"461";i:3;s:3:"666";}}s:7:"section";a:4:{s:1:"C";s:3:"167";s:2:"WX";s:3:"500";s:1:"N";s:7:"section";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:4:"-162";i:2;s:3:"461";i:3;s:3:"666";}}i:168;a:4:{s:1:"C";s:3:"168";s:2:"WX";s:3:"500";s:1:"N";s:8:"currency";s:1:"B";a:4:{i:0;s:3:"-22";i:1;s:2:"53";i:2;s:3:"522";i:3;s:3:"597";}}s:8:"currency";a:4:{s:1:"C";s:3:"168";s:2:"WX";s:3:"500";s:1:"N";s:8:"currency";s:1:"B";a:4:{i:0;s:3:"-22";i:1;s:2:"53";i:2;s:3:"522";i:3;s:3:"597";}}i:169;a:4:{s:1:"C";s:3:"169";s:2:"WX";s:3:"214";s:1:"N";s:11:"quotesingle";s:1:"B";a:4:{i:0;s:3:"132";i:1;s:3:"421";i:2;s:3:"241";i:3;s:3:"666";}}s:11:"quotesingle";a:4:{s:1:"C";s:3:"169";s:2:"WX";s:3:"214";s:1:"N";s:11:"quotesingle";s:1:"B";a:4:{i:0;s:3:"132";i:1;s:3:"421";i:2;s:3:"241";i:3;s:3:"666";}}i:170;a:4:{s:1:"C";s:3:"170";s:2:"WX";s:3:"556";s:1:"N";s:12:"quotedblleft";s:1:"B";a:4:{i:0;s:3:"166";i:1;s:3:"436";i:2;s:3:"514";i:3;s:3:"666";}}s:12:"quotedblleft";a:4:{s:1:"C";s:3:"170";s:2:"WX";s:3:"556";s:1:"N";s:12:"quotedblleft";s:1:"B";a:4:{i:0;s:3:"166";i:1;s:3:"436";i:2;s:3:"514";i:3;s:3:"666";}}i:171;a:4:{s:1:"C";s:3:"171";s:2:"WX";s:3:"500";s:1:"N";s:13:"guillemotleft";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:2:"37";i:2;s:3:"445";i:3;s:3:"403";}}s:13:"guillemotleft";a:4:{s:1:"C";s:3:"171";s:2:"WX";s:3:"500";s:1:"N";s:13:"guillemotleft";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:2:"37";i:2;s:3:"445";i:3;s:3:"403";}}i:172;a:4:{s:1:"C";s:3:"172";s:2:"WX";s:3:"333";s:1:"N";s:13:"guilsinglleft";s:1:"B";a:4:{i:0;s:2:"51";i:1;s:2:"37";i:2;s:3:"281";i:3;s:3:"403";}}s:13:"guilsinglleft";a:4:{s:1:"C";s:3:"172";s:2:"WX";s:3:"333";s:1:"N";s:13:"guilsinglleft";s:1:"B";a:4:{i:0;s:2:"51";i:1;s:2:"37";i:2;s:3:"281";i:3;s:3:"403";}}i:173;a:4:{s:1:"C";s:3:"173";s:2:"WX";s:3:"333";s:1:"N";s:14:"guilsinglright";s:1:"B";a:4:{i:0;s:2:"52";i:1;s:2:"37";i:2;s:3:"282";i:3;s:3:"403";}}s:14:"guilsinglright";a:4:{s:1:"C";s:3:"173";s:2:"WX";s:3:"333";s:1:"N";s:14:"guilsinglright";s:1:"B";a:4:{i:0;s:2:"52";i:1;s:2:"37";i:2;s:3:"282";i:3;s:3:"403";}}i:174;a:4:{s:1:"C";s:3:"174";s:2:"WX";s:3:"500";s:1:"N";s:2:"fi";s:1:"B";a:4:{i:0;s:4:"-141";i:1;s:4:"-207";i:2;s:3:"481";i:3;s:3:"681";}}s:2:"fi";a:4:{s:1:"C";s:3:"174";s:2:"WX";s:3:"500";s:1:"N";s:2:"fi";s:1:"B";a:4:{i:0;s:4:"-141";i:1;s:4:"-207";i:2;s:3:"481";i:3;s:3:"681";}}i:175;a:4:{s:1:"C";s:3:"175";s:2:"WX";s:3:"500";s:1:"N";s:2:"fl";s:1:"B";a:4:{i:0;s:4:"-141";i:1;s:4:"-204";i:2;s:3:"518";i:3;s:3:"682";}}s:2:"fl";a:4:{s:1:"C";s:3:"175";s:2:"WX";s:3:"500";s:1:"N";s:2:"fl";s:1:"B";a:4:{i:0;s:4:"-141";i:1;s:4:"-204";i:2;s:3:"518";i:3;s:3:"682";}}i:177;a:4:{s:1:"C";s:3:"177";s:2:"WX";s:3:"500";s:1:"N";s:6:"endash";s:1:"B";a:4:{i:0;s:2:"-6";i:1;s:3:"197";i:2;s:3:"505";i:3;s:3:"243";}}s:6:"endash";a:4:{s:1:"C";s:3:"177";s:2:"WX";s:3:"500";s:1:"N";s:6:"endash";s:1:"B";a:4:{i:0;s:2:"-6";i:1;s:3:"197";i:2;s:3:"505";i:3;s:3:"243";}}i:178;a:4:{s:1:"C";s:3:"178";s:2:"WX";s:3:"500";s:1:"N";s:6:"dagger";s:1:"B";a:4:{i:0;s:3:"101";i:1;s:4:"-159";i:2;s:3:"488";i:3;s:3:"666";}}s:6:"dagger";a:4:{s:1:"C";s:3:"178";s:2:"WX";s:3:"500";s:1:"N";s:6:"dagger";s:1:"B";a:4:{i:0;s:3:"101";i:1;s:4:"-159";i:2;s:3:"488";i:3;s:3:"666";}}i:179;a:4:{s:1:"C";s:3:"179";s:2:"WX";s:3:"500";s:1:"N";s:9:"daggerdbl";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:4:"-143";i:2;s:3:"491";i:3;s:3:"666";}}s:9:"daggerdbl";a:4:{s:1:"C";s:3:"179";s:2:"WX";s:3:"500";s:1:"N";s:9:"daggerdbl";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:4:"-143";i:2;s:3:"491";i:3;s:3:"666";}}i:180;a:4:{s:1:"C";s:3:"180";s:2:"WX";s:3:"250";s:1:"N";s:14:"periodcentered";s:1:"B";a:4:{i:0;s:2:"70";i:1;s:3:"199";i:2;s:3:"181";i:3;s:3:"310";}}s:14:"periodcentered";a:4:{s:1:"C";s:3:"180";s:2:"WX";s:3:"250";s:1:"N";s:14:"periodcentered";s:1:"B";a:4:{i:0;s:2:"70";i:1;s:3:"199";i:2;s:3:"181";i:3;s:3:"310";}}i:182;a:4:{s:1:"C";s:3:"182";s:2:"WX";s:3:"523";s:1:"N";s:9:"paragraph";s:1:"B";a:4:{i:0;s:2:"55";i:1;s:4:"-123";i:2;s:3:"616";i:3;s:3:"653";}}s:9:"paragraph";a:4:{s:1:"C";s:3:"182";s:2:"WX";s:3:"523";s:1:"N";s:9:"paragraph";s:1:"B";a:4:{i:0;s:2:"55";i:1;s:4:"-123";i:2;s:3:"616";i:3;s:3:"653";}}i:183;a:4:{s:1:"C";s:3:"183";s:2:"WX";s:3:"350";s:1:"N";s:6:"bullet";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:3:"191";i:2;s:3:"310";i:3;s:3:"461";}}s:6:"bullet";a:4:{s:1:"C";s:3:"183";s:2:"WX";s:3:"350";s:1:"N";s:6:"bullet";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:3:"191";i:2;s:3:"310";i:3;s:3:"461";}}i:184;a:4:{s:1:"C";s:3:"184";s:2:"WX";s:3:"333";s:1:"N";s:14:"quotesinglbase";s:1:"B";a:4:{i:0;s:2:"44";i:1;s:4:"-129";i:2;s:3:"183";i:3;s:3:"101";}}s:14:"quotesinglbase";a:4:{s:1:"C";s:3:"184";s:2:"WX";s:3:"333";s:1:"N";s:14:"quotesinglbase";s:1:"B";a:4:{i:0;s:2:"44";i:1;s:4:"-129";i:2;s:3:"183";i:3;s:3:"101";}}i:185;a:4:{s:1:"C";s:3:"185";s:2:"WX";s:3:"556";s:1:"N";s:12:"quotedblbase";s:1:"B";a:4:{i:0;s:2:"57";i:1;s:4:"-129";i:2;s:3:"405";i:3;s:3:"101";}}s:12:"quotedblbase";a:4:{s:1:"C";s:3:"185";s:2:"WX";s:3:"556";s:1:"N";s:12:"quotedblbase";s:1:"B";a:4:{i:0;s:2:"57";i:1;s:4:"-129";i:2;s:3:"405";i:3;s:3:"101";}}i:186;a:4:{s:1:"C";s:3:"186";s:2:"WX";s:3:"556";s:1:"N";s:13:"quotedblright";s:1:"B";a:4:{i:0;s:3:"151";i:1;s:3:"436";i:2;s:3:"499";i:3;s:3:"666";}}s:13:"quotedblright";a:4:{s:1:"C";s:3:"186";s:2:"WX";s:3:"556";s:1:"N";s:13:"quotedblright";s:1:"B";a:4:{i:0;s:3:"151";i:1;s:3:"436";i:2;s:3:"499";i:3;s:3:"666";}}i:187;a:4:{s:1:"C";s:3:"187";s:2:"WX";s:3:"500";s:1:"N";s:14:"guillemotright";s:1:"B";a:4:{i:0;s:2:"55";i:1;s:2:"37";i:2;s:3:"447";i:3;s:3:"403";}}s:14:"guillemotright";a:4:{s:1:"C";s:3:"187";s:2:"WX";s:3:"500";s:1:"N";s:14:"guillemotright";s:1:"B";a:4:{i:0;s:2:"55";i:1;s:2:"37";i:2;s:3:"447";i:3;s:3:"403";}}i:188;a:4:{s:1:"C";s:3:"188";s:2:"WX";s:3:"889";s:1:"N";s:8:"ellipsis";s:1:"B";a:4:{i:0;s:2:"57";i:1;s:3:"-11";i:2;s:3:"762";i:3;s:3:"100";}}s:8:"ellipsis";a:4:{s:1:"C";s:3:"188";s:2:"WX";s:3:"889";s:1:"N";s:8:"ellipsis";s:1:"B";a:4:{i:0;s:2:"57";i:1;s:3:"-11";i:2;s:3:"762";i:3;s:3:"100";}}i:189;a:4:{s:1:"C";s:3:"189";s:2:"WX";s:4:"1000";s:1:"N";s:11:"perthousand";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-19";i:2;s:4:"1010";i:3;s:3:"706";}}s:11:"perthousand";a:4:{s:1:"C";s:3:"189";s:2:"WX";s:4:"1000";s:1:"N";s:11:"perthousand";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-19";i:2;s:4:"1010";i:3;s:3:"706";}}i:191;a:4:{s:1:"C";s:3:"191";s:2:"WX";s:3:"500";s:1:"N";s:12:"questiondown";s:1:"B";a:4:{i:0;s:2:"28";i:1;s:4:"-205";i:2;s:3:"368";i:3;s:3:"471";}}s:12:"questiondown";a:4:{s:1:"C";s:3:"191";s:2:"WX";s:3:"500";s:1:"N";s:12:"questiondown";s:1:"B";a:4:{i:0;s:2:"28";i:1;s:4:"-205";i:2;s:3:"368";i:3;s:3:"471";}}i:193;a:4:{s:1:"C";s:3:"193";s:2:"WX";s:3:"333";s:1:"N";s:5:"grave";s:1:"B";a:4:{i:0;s:3:"121";i:1;s:3:"492";i:2;s:3:"311";i:3;s:3:"664";}}s:5:"grave";a:4:{s:1:"C";s:3:"193";s:2:"WX";s:3:"333";s:1:"N";s:5:"grave";s:1:"B";a:4:{i:0;s:3:"121";i:1;s:3:"492";i:2;s:3:"311";i:3;s:3:"664";}}i:194;a:4:{s:1:"C";s:3:"194";s:2:"WX";s:3:"333";s:1:"N";s:5:"acute";s:1:"B";a:4:{i:0;s:3:"180";i:1;s:3:"494";i:2;s:3:"403";i:3;s:3:"664";}}s:5:"acute";a:4:{s:1:"C";s:3:"194";s:2:"WX";s:3:"333";s:1:"N";s:5:"acute";s:1:"B";a:4:{i:0;s:3:"180";i:1;s:3:"494";i:2;s:3:"403";i:3;s:3:"664";}}i:195;a:4:{s:1:"C";s:3:"195";s:2:"WX";s:3:"333";s:1:"N";s:10:"circumflex";s:1:"B";a:4:{i:0;s:2:"91";i:1;s:3:"492";i:2;s:3:"385";i:3;s:3:"661";}}s:10:"circumflex";a:4:{s:1:"C";s:3:"195";s:2:"WX";s:3:"333";s:1:"N";s:10:"circumflex";s:1:"B";a:4:{i:0;s:2:"91";i:1;s:3:"492";i:2;s:3:"385";i:3;s:3:"661";}}i:196;a:4:{s:1:"C";s:3:"196";s:2:"WX";s:3:"333";s:1:"N";s:5:"tilde";s:1:"B";a:4:{i:0;s:3:"100";i:1;s:3:"517";i:2;s:3:"427";i:3;s:3:"624";}}s:5:"tilde";a:4:{s:1:"C";s:3:"196";s:2:"WX";s:3:"333";s:1:"N";s:5:"tilde";s:1:"B";a:4:{i:0;s:3:"100";i:1;s:3:"517";i:2;s:3:"427";i:3;s:3:"624";}}i:197;a:4:{s:1:"C";s:3:"197";s:2:"WX";s:3:"333";s:1:"N";s:6:"macron";s:1:"B";a:4:{i:0;s:2:"99";i:1;s:3:"532";i:2;s:3:"411";i:3;s:3:"583";}}s:6:"macron";a:4:{s:1:"C";s:3:"197";s:2:"WX";s:3:"333";s:1:"N";s:6:"macron";s:1:"B";a:4:{i:0;s:2:"99";i:1;s:3:"532";i:2;s:3:"411";i:3;s:3:"583";}}i:198;a:4:{s:1:"C";s:3:"198";s:2:"WX";s:3:"333";s:1:"N";s:5:"breve";s:1:"B";a:4:{i:0;s:3:"117";i:1;s:3:"492";i:2;s:3:"418";i:3;s:3:"650";}}s:5:"breve";a:4:{s:1:"C";s:3:"198";s:2:"WX";s:3:"333";s:1:"N";s:5:"breve";s:1:"B";a:4:{i:0;s:3:"117";i:1;s:3:"492";i:2;s:3:"418";i:3;s:3:"650";}}i:199;a:4:{s:1:"C";s:3:"199";s:2:"WX";s:3:"333";s:1:"N";s:9:"dotaccent";s:1:"B";a:4:{i:0;s:3:"207";i:1;s:3:"548";i:2;s:3:"305";i:3;s:3:"646";}}s:9:"dotaccent";a:4:{s:1:"C";s:3:"199";s:2:"WX";s:3:"333";s:1:"N";s:9:"dotaccent";s:1:"B";a:4:{i:0;s:3:"207";i:1;s:3:"548";i:2;s:3:"305";i:3;s:3:"646";}}i:200;a:4:{s:1:"C";s:3:"200";s:2:"WX";s:3:"333";s:1:"N";s:8:"dieresis";s:1:"B";a:4:{i:0;s:3:"107";i:1;s:3:"548";i:2;s:3:"405";i:3;s:3:"646";}}s:8:"dieresis";a:4:{s:1:"C";s:3:"200";s:2:"WX";s:3:"333";s:1:"N";s:8:"dieresis";s:1:"B";a:4:{i:0;s:3:"107";i:1;s:3:"548";i:2;s:3:"405";i:3;s:3:"646";}}i:202;a:4:{s:1:"C";s:3:"202";s:2:"WX";s:3:"333";s:1:"N";s:4:"ring";s:1:"B";a:4:{i:0;s:3:"155";i:1;s:3:"492";i:2;s:3:"355";i:3;s:3:"691";}}s:4:"ring";a:4:{s:1:"C";s:3:"202";s:2:"WX";s:3:"333";s:1:"N";s:4:"ring";s:1:"B";a:4:{i:0;s:3:"155";i:1;s:3:"492";i:2;s:3:"355";i:3;s:3:"691";}}i:203;a:4:{s:1:"C";s:3:"203";s:2:"WX";s:3:"333";s:1:"N";s:7:"cedilla";s:1:"B";a:4:{i:0;s:3:"-30";i:1;s:4:"-217";i:2;s:3:"182";i:3;s:1:"0";}}s:7:"cedilla";a:4:{s:1:"C";s:3:"203";s:2:"WX";s:3:"333";s:1:"N";s:7:"cedilla";s:1:"B";a:4:{i:0;s:3:"-30";i:1;s:4:"-217";i:2;s:3:"182";i:3;s:1:"0";}}i:205;a:4:{s:1:"C";s:3:"205";s:2:"WX";s:3:"333";s:1:"N";s:12:"hungarumlaut";s:1:"B";a:4:{i:0;s:2:"93";i:1;s:3:"494";i:2;s:3:"486";i:3;s:3:"664";}}s:12:"hungarumlaut";a:4:{s:1:"C";s:3:"205";s:2:"WX";s:3:"333";s:1:"N";s:12:"hungarumlaut";s:1:"B";a:4:{i:0;s:2:"93";i:1;s:3:"494";i:2;s:3:"486";i:3;s:3:"664";}}i:206;a:4:{s:1:"C";s:3:"206";s:2:"WX";s:3:"333";s:1:"N";s:6:"ogonek";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:4:"-169";i:2;s:3:"203";i:3;s:2:"40";}}s:6:"ogonek";a:4:{s:1:"C";s:3:"206";s:2:"WX";s:3:"333";s:1:"N";s:6:"ogonek";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:4:"-169";i:2;s:3:"203";i:3;s:2:"40";}}i:207;a:4:{s:1:"C";s:3:"207";s:2:"WX";s:3:"333";s:1:"N";s:5:"caron";s:1:"B";a:4:{i:0;s:3:"121";i:1;s:3:"492";i:2;s:3:"426";i:3;s:3:"661";}}s:5:"caron";a:4:{s:1:"C";s:3:"207";s:2:"WX";s:3:"333";s:1:"N";s:5:"caron";s:1:"B";a:4:{i:0;s:3:"121";i:1;s:3:"492";i:2;s:3:"426";i:3;s:3:"661";}}i:208;a:4:{s:1:"C";s:3:"208";s:2:"WX";s:3:"889";s:1:"N";s:6:"emdash";s:1:"B";a:4:{i:0;s:2:"-6";i:1;s:3:"197";i:2;s:3:"894";i:3;s:3:"243";}}s:6:"emdash";a:4:{s:1:"C";s:3:"208";s:2:"WX";s:3:"889";s:1:"N";s:6:"emdash";s:1:"B";a:4:{i:0;s:2:"-6";i:1;s:3:"197";i:2;s:3:"894";i:3;s:3:"243";}}i:225;a:4:{s:1:"C";s:3:"225";s:2:"WX";s:3:"889";s:1:"N";s:2:"AE";s:1:"B";a:4:{i:0;s:3:"-27";i:1;s:1:"0";i:2;s:3:"911";i:3;s:3:"653";}}s:2:"AE";a:4:{s:1:"C";s:3:"225";s:2:"WX";s:3:"889";s:1:"N";s:2:"AE";s:1:"B";a:4:{i:0;s:3:"-27";i:1;s:1:"0";i:2;s:3:"911";i:3;s:3:"653";}}i:227;a:4:{s:1:"C";s:3:"227";s:2:"WX";s:3:"276";s:1:"N";s:11:"ordfeminine";s:1:"B";a:4:{i:0;s:2:"42";i:1;s:3:"406";i:2;s:3:"352";i:3;s:3:"676";}}s:11:"ordfeminine";a:4:{s:1:"C";s:3:"227";s:2:"WX";s:3:"276";s:1:"N";s:11:"ordfeminine";s:1:"B";a:4:{i:0;s:2:"42";i:1;s:3:"406";i:2;s:3:"352";i:3;s:3:"676";}}i:232;a:4:{s:1:"C";s:3:"232";s:2:"WX";s:3:"556";s:1:"N";s:6:"Lslash";s:1:"B";a:4:{i:0;s:2:"-8";i:1;s:1:"0";i:2;s:3:"559";i:3;s:3:"653";}}s:6:"Lslash";a:4:{s:1:"C";s:3:"232";s:2:"WX";s:3:"556";s:1:"N";s:6:"Lslash";s:1:"B";a:4:{i:0;s:2:"-8";i:1;s:1:"0";i:2;s:3:"559";i:3;s:3:"653";}}i:233;a:4:{s:1:"C";s:3:"233";s:2:"WX";s:3:"722";s:1:"N";s:6:"Oslash";s:1:"B";a:4:{i:0;s:2:"60";i:1;s:4:"-105";i:2;s:3:"699";i:3;s:3:"722";}}s:6:"Oslash";a:4:{s:1:"C";s:3:"233";s:2:"WX";s:3:"722";s:1:"N";s:6:"Oslash";s:1:"B";a:4:{i:0;s:2:"60";i:1;s:4:"-105";i:2;s:3:"699";i:3;s:3:"722";}}i:234;a:4:{s:1:"C";s:3:"234";s:2:"WX";s:3:"944";s:1:"N";s:2:"OE";s:1:"B";a:4:{i:0;s:2:"49";i:1;s:2:"-8";i:2;s:3:"964";i:3;s:3:"666";}}s:2:"OE";a:4:{s:1:"C";s:3:"234";s:2:"WX";s:3:"944";s:1:"N";s:2:"OE";s:1:"B";a:4:{i:0;s:2:"49";i:1;s:2:"-8";i:2;s:3:"964";i:3;s:3:"666";}}i:235;a:4:{s:1:"C";s:3:"235";s:2:"WX";s:3:"310";s:1:"N";s:12:"ordmasculine";s:1:"B";a:4:{i:0;s:2:"67";i:1;s:3:"406";i:2;s:3:"362";i:3;s:3:"676";}}s:12:"ordmasculine";a:4:{s:1:"C";s:3:"235";s:2:"WX";s:3:"310";s:1:"N";s:12:"ordmasculine";s:1:"B";a:4:{i:0;s:2:"67";i:1;s:3:"406";i:2;s:3:"362";i:3;s:3:"676";}}i:241;a:4:{s:1:"C";s:3:"241";s:2:"WX";s:3:"667";s:1:"N";s:2:"ae";s:1:"B";a:4:{i:0;s:2:"23";i:1;s:3:"-11";i:2;s:3:"640";i:3;s:3:"441";}}s:2:"ae";a:4:{s:1:"C";s:3:"241";s:2:"WX";s:3:"667";s:1:"N";s:2:"ae";s:1:"B";a:4:{i:0;s:2:"23";i:1;s:3:"-11";i:2;s:3:"640";i:3;s:3:"441";}}i:245;a:4:{s:1:"C";s:3:"245";s:2:"WX";s:3:"278";s:1:"N";s:8:"dotlessi";s:1:"B";a:4:{i:0;s:2:"49";i:1;s:3:"-11";i:2;s:3:"235";i:3;s:3:"441";}}s:8:"dotlessi";a:4:{s:1:"C";s:3:"245";s:2:"WX";s:3:"278";s:1:"N";s:8:"dotlessi";s:1:"B";a:4:{i:0;s:2:"49";i:1;s:3:"-11";i:2;s:3:"235";i:3;s:3:"441";}}i:248;a:4:{s:1:"C";s:3:"248";s:2:"WX";s:3:"278";s:1:"N";s:6:"lslash";s:1:"B";a:4:{i:0;s:2:"41";i:1;s:3:"-11";i:2;s:3:"312";i:3;s:3:"683";}}s:6:"lslash";a:4:{s:1:"C";s:3:"248";s:2:"WX";s:3:"278";s:1:"N";s:6:"lslash";s:1:"B";a:4:{i:0;s:2:"41";i:1;s:3:"-11";i:2;s:3:"312";i:3;s:3:"683";}}i:249;a:4:{s:1:"C";s:3:"249";s:2:"WX";s:3:"500";s:1:"N";s:6:"oslash";s:1:"B";a:4:{i:0;s:2:"28";i:1;s:4:"-135";i:2;s:3:"469";i:3;s:3:"554";}}s:6:"oslash";a:4:{s:1:"C";s:3:"249";s:2:"WX";s:3:"500";s:1:"N";s:6:"oslash";s:1:"B";a:4:{i:0;s:2:"28";i:1;s:4:"-135";i:2;s:3:"469";i:3;s:3:"554";}}i:250;a:4:{s:1:"C";s:3:"250";s:2:"WX";s:3:"667";s:1:"N";s:2:"oe";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:3:"-12";i:2;s:3:"646";i:3;s:3:"441";}}s:2:"oe";a:4:{s:1:"C";s:3:"250";s:2:"WX";s:3:"667";s:1:"N";s:2:"oe";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:3:"-12";i:2;s:3:"646";i:3;s:3:"441";}}i:251;a:4:{s:1:"C";s:3:"251";s:2:"WX";s:3:"500";s:1:"N";s:10:"germandbls";s:1:"B";a:4:{i:0;s:4:"-168";i:1;s:4:"-207";i:2;s:3:"493";i:3;s:3:"679";}}s:10:"germandbls";a:4:{s:1:"C";s:3:"251";s:2:"WX";s:3:"500";s:1:"N";s:10:"germandbls";s:1:"B";a:4:{i:0;s:4:"-168";i:1;s:4:"-207";i:2;s:3:"493";i:3;s:3:"679";}}s:9:"Idieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"333";s:1:"N";s:9:"Idieresis";s:1:"B";a:4:{i:0;s:2:"-8";i:1;s:1:"0";i:2;s:3:"435";i:3;s:3:"818";}}s:6:"eacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:6:"eacute";s:1:"B";a:4:{i:0;s:2:"31";i:1;s:3:"-11";i:2;s:3:"459";i:3;s:3:"664";}}s:6:"abreve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"abreve";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:3:"-11";i:2;s:3:"502";i:3;s:3:"650";}}s:13:"uhungarumlaut";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:13:"uhungarumlaut";s:1:"B";a:4:{i:0;s:2:"42";i:1;s:3:"-11";i:2;s:3:"580";i:3;s:3:"664";}}s:6:"ecaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:6:"ecaron";s:1:"B";a:4:{i:0;s:2:"31";i:1;s:3:"-11";i:2;s:3:"482";i:3;s:3:"661";}}s:9:"Ydieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:9:"Ydieresis";s:1:"B";a:4:{i:0;s:2:"78";i:1;s:1:"0";i:2;s:3:"633";i:3;s:3:"818";}}s:6:"divide";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"675";s:1:"N";s:6:"divide";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:3:"-11";i:2;s:3:"590";i:3;s:3:"517";}}s:6:"Yacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"Yacute";s:1:"B";a:4:{i:0;s:2:"78";i:1;s:1:"0";i:2;s:3:"633";i:3;s:3:"876";}}s:11:"Acircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:11:"Acircumflex";s:1:"B";a:4:{i:0;s:3:"-51";i:1;s:1:"0";i:2;s:3:"564";i:3;s:3:"873";}}s:6:"aacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"aacute";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:3:"-11";i:2;s:3:"487";i:3;s:3:"664";}}s:11:"Ucircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:11:"Ucircumflex";s:1:"B";a:4:{i:0;s:3:"102";i:1;s:3:"-18";i:2;s:3:"765";i:3;s:3:"873";}}s:6:"yacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:6:"yacute";s:1:"B";a:4:{i:0;s:3:"-24";i:1;s:4:"-206";i:2;s:3:"459";i:3;s:3:"664";}}s:12:"scommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"389";s:1:"N";s:12:"scommaaccent";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:4:"-217";i:2;s:3:"366";i:3;s:3:"442";}}s:11:"ecircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:11:"ecircumflex";s:1:"B";a:4:{i:0;s:2:"31";i:1;s:3:"-11";i:2;s:3:"441";i:3;s:3:"661";}}s:5:"Uring";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:5:"Uring";s:1:"B";a:4:{i:0;s:3:"102";i:1;s:3:"-18";i:2;s:3:"765";i:3;s:3:"883";}}s:9:"Udieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:9:"Udieresis";s:1:"B";a:4:{i:0;s:3:"102";i:1;s:3:"-18";i:2;s:3:"765";i:3;s:3:"818";}}s:7:"aogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:7:"aogonek";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:4:"-169";i:2;s:3:"476";i:3;s:3:"441";}}s:6:"Uacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Uacute";s:1:"B";a:4:{i:0;s:3:"102";i:1;s:3:"-18";i:2;s:3:"765";i:3;s:3:"876";}}s:7:"uogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:7:"uogonek";s:1:"B";a:4:{i:0;s:2:"42";i:1;s:4:"-169";i:2;s:3:"477";i:3;s:3:"441";}}s:9:"Edieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:9:"Edieresis";s:1:"B";a:4:{i:0;s:2:"-1";i:1;s:1:"0";i:2;s:3:"634";i:3;s:3:"818";}}s:6:"Dcroat";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Dcroat";s:1:"B";a:4:{i:0;s:2:"-8";i:1;s:1:"0";i:2;s:3:"700";i:3;s:3:"653";}}s:11:"commaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"250";s:1:"N";s:11:"commaaccent";s:1:"B";a:4:{i:0;s:1:"8";i:1;s:4:"-217";i:2;s:3:"133";i:3;s:3:"-50";}}s:9:"copyright";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"760";s:1:"N";s:9:"copyright";s:1:"B";a:4:{i:0;s:2:"41";i:1;s:3:"-18";i:2;s:3:"719";i:3;s:3:"666";}}s:7:"Emacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:7:"Emacron";s:1:"B";a:4:{i:0;s:2:"-1";i:1;s:1:"0";i:2;s:3:"634";i:3;s:3:"795";}}s:6:"ccaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:6:"ccaron";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:3:"-11";i:2;s:3:"482";i:3;s:3:"661";}}s:5:"aring";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:5:"aring";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:3:"-11";i:2;s:3:"476";i:3;s:3:"691";}}s:12:"Ncommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:12:"Ncommaaccent";s:1:"B";a:4:{i:0;s:3:"-20";i:1;s:4:"-187";i:2;s:3:"727";i:3;s:3:"653";}}s:6:"lacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:6:"lacute";s:1:"B";a:4:{i:0;s:2:"41";i:1;s:3:"-11";i:2;s:3:"395";i:3;s:3:"876";}}s:6:"agrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"agrave";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:3:"-11";i:2;s:3:"476";i:3;s:3:"664";}}s:12:"Tcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:12:"Tcommaaccent";s:1:"B";a:4:{i:0;s:2:"59";i:1;s:4:"-217";i:2;s:3:"633";i:3;s:3:"653";}}s:6:"Cacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Cacute";s:1:"B";a:4:{i:0;s:2:"66";i:1;s:3:"-18";i:2;s:3:"690";i:3;s:3:"876";}}s:6:"atilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"atilde";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:3:"-11";i:2;s:3:"511";i:3;s:3:"624";}}s:10:"Edotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:10:"Edotaccent";s:1:"B";a:4:{i:0;s:2:"-1";i:1;s:1:"0";i:2;s:3:"634";i:3;s:3:"818";}}s:6:"scaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"389";s:1:"N";s:6:"scaron";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:3:"-13";i:2;s:3:"454";i:3;s:3:"661";}}s:8:"scedilla";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"389";s:1:"N";s:8:"scedilla";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:4:"-217";i:2;s:3:"366";i:3;s:3:"442";}}s:6:"iacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:6:"iacute";s:1:"B";a:4:{i:0;s:2:"49";i:1;s:3:"-11";i:2;s:3:"355";i:3;s:3:"664";}}s:7:"lozenge";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"471";s:1:"N";s:7:"lozenge";s:1:"B";a:4:{i:0;s:2:"13";i:1;s:1:"0";i:2;s:3:"459";i:3;s:3:"724";}}s:6:"Rcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"Rcaron";s:1:"B";a:4:{i:0;s:3:"-13";i:1;s:1:"0";i:2;s:3:"588";i:3;s:3:"873";}}s:12:"Gcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:12:"Gcommaaccent";s:1:"B";a:4:{i:0;s:2:"52";i:1;s:4:"-217";i:2;s:3:"722";i:3;s:3:"666";}}s:11:"ucircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:11:"ucircumflex";s:1:"B";a:4:{i:0;s:2:"42";i:1;s:3:"-11";i:2;s:3:"475";i:3;s:3:"661";}}s:11:"acircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:11:"acircumflex";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:3:"-11";i:2;s:3:"476";i:3;s:3:"661";}}s:7:"Amacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:7:"Amacron";s:1:"B";a:4:{i:0;s:3:"-51";i:1;s:1:"0";i:2;s:3:"564";i:3;s:3:"795";}}s:6:"rcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"389";s:1:"N";s:6:"rcaron";s:1:"B";a:4:{i:0;s:2:"45";i:1;s:1:"0";i:2;s:3:"434";i:3;s:3:"661";}}s:8:"ccedilla";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:8:"ccedilla";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:4:"-217";i:2;s:3:"425";i:3;s:3:"441";}}s:10:"Zdotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:10:"Zdotaccent";s:1:"B";a:4:{i:0;s:2:"-6";i:1;s:1:"0";i:2;s:3:"606";i:3;s:3:"818";}}s:5:"Thorn";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:5:"Thorn";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:1:"0";i:2;s:3:"569";i:3;s:3:"653";}}s:7:"Omacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:7:"Omacron";s:1:"B";a:4:{i:0;s:2:"60";i:1;s:3:"-18";i:2;s:3:"699";i:3;s:3:"795";}}s:6:"Racute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"Racute";s:1:"B";a:4:{i:0;s:3:"-13";i:1;s:1:"0";i:2;s:3:"588";i:3;s:3:"876";}}s:6:"Sacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"Sacute";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:3:"-18";i:2;s:3:"508";i:3;s:3:"876";}}s:6:"dcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"544";s:1:"N";s:6:"dcaron";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:3:"-13";i:2;s:3:"658";i:3;s:3:"683";}}s:7:"Umacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:7:"Umacron";s:1:"B";a:4:{i:0;s:3:"102";i:1;s:3:"-18";i:2;s:3:"765";i:3;s:3:"795";}}s:5:"uring";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:5:"uring";s:1:"B";a:4:{i:0;s:2:"42";i:1;s:3:"-11";i:2;s:3:"475";i:3;s:3:"691";}}s:13:"threesuperior";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"300";s:1:"N";s:13:"threesuperior";s:1:"B";a:4:{i:0;s:2:"43";i:1;s:3:"268";i:2;s:3:"339";i:3;s:3:"676";}}s:6:"Ograve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Ograve";s:1:"B";a:4:{i:0;s:2:"60";i:1;s:3:"-18";i:2;s:3:"699";i:3;s:3:"876";}}s:6:"Agrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"Agrave";s:1:"B";a:4:{i:0;s:3:"-51";i:1;s:1:"0";i:2;s:3:"564";i:3;s:3:"876";}}s:6:"Abreve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"Abreve";s:1:"B";a:4:{i:0;s:3:"-51";i:1;s:1:"0";i:2;s:3:"564";i:3;s:3:"862";}}s:8:"multiply";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"675";s:1:"N";s:8:"multiply";s:1:"B";a:4:{i:0;s:2:"93";i:1;s:1:"8";i:2;s:3:"582";i:3;s:3:"497";}}s:6:"uacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"uacute";s:1:"B";a:4:{i:0;s:2:"42";i:1;s:3:"-11";i:2;s:3:"477";i:3;s:3:"664";}}s:6:"Tcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"Tcaron";s:1:"B";a:4:{i:0;s:2:"59";i:1;s:1:"0";i:2;s:3:"633";i:3;s:3:"873";}}s:11:"partialdiff";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"476";s:1:"N";s:11:"partialdiff";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:3:"-38";i:2;s:3:"459";i:3;s:3:"710";}}s:9:"ydieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:9:"ydieresis";s:1:"B";a:4:{i:0;s:3:"-24";i:1;s:4:"-206";i:2;s:3:"441";i:3;s:3:"606";}}s:6:"Nacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Nacute";s:1:"B";a:4:{i:0;s:3:"-20";i:1;s:3:"-15";i:2;s:3:"727";i:3;s:3:"876";}}s:11:"icircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:11:"icircumflex";s:1:"B";a:4:{i:0;s:2:"33";i:1;s:3:"-11";i:2;s:3:"327";i:3;s:3:"661";}}s:11:"Ecircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:11:"Ecircumflex";s:1:"B";a:4:{i:0;s:2:"-1";i:1;s:1:"0";i:2;s:3:"634";i:3;s:3:"873";}}s:9:"adieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:9:"adieresis";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:3:"-11";i:2;s:3:"489";i:3;s:3:"606";}}s:9:"edieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:9:"edieresis";s:1:"B";a:4:{i:0;s:2:"31";i:1;s:3:"-11";i:2;s:3:"451";i:3;s:3:"606";}}s:6:"cacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:6:"cacute";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:3:"-11";i:2;s:3:"459";i:3;s:3:"664";}}s:6:"nacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"nacute";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:2:"-9";i:2;s:3:"477";i:3;s:3:"664";}}s:7:"umacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:7:"umacron";s:1:"B";a:4:{i:0;s:2:"42";i:1;s:3:"-11";i:2;s:3:"485";i:3;s:3:"583";}}s:6:"Ncaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Ncaron";s:1:"B";a:4:{i:0;s:3:"-20";i:1;s:3:"-15";i:2;s:3:"727";i:3;s:3:"873";}}s:6:"Iacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"333";s:1:"N";s:6:"Iacute";s:1:"B";a:4:{i:0;s:2:"-8";i:1;s:1:"0";i:2;s:3:"433";i:3;s:3:"876";}}s:9:"plusminus";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"675";s:1:"N";s:9:"plusminus";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:1:"0";i:2;s:3:"590";i:3;s:3:"506";}}s:9:"brokenbar";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"275";s:1:"N";s:9:"brokenbar";s:1:"B";a:4:{i:0;s:3:"105";i:1;s:4:"-142";i:2;s:3:"171";i:3;s:3:"708";}}s:10:"registered";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"760";s:1:"N";s:10:"registered";s:1:"B";a:4:{i:0;s:2:"41";i:1;s:3:"-18";i:2;s:3:"719";i:3;s:3:"666";}}s:6:"Gbreve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Gbreve";s:1:"B";a:4:{i:0;s:2:"52";i:1;s:3:"-18";i:2;s:3:"722";i:3;s:3:"862";}}s:10:"Idotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"333";s:1:"N";s:10:"Idotaccent";s:1:"B";a:4:{i:0;s:2:"-8";i:1;s:1:"0";i:2;s:3:"384";i:3;s:3:"818";}}s:9:"summation";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"summation";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:3:"-10";i:2;s:3:"585";i:3;s:3:"706";}}s:6:"Egrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"Egrave";s:1:"B";a:4:{i:0;s:2:"-1";i:1;s:1:"0";i:2;s:3:"634";i:3;s:3:"876";}}s:6:"racute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"389";s:1:"N";s:6:"racute";s:1:"B";a:4:{i:0;s:2:"45";i:1;s:1:"0";i:2;s:3:"431";i:3;s:3:"664";}}s:7:"omacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:7:"omacron";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:3:"-11";i:2;s:3:"495";i:3;s:3:"583";}}s:6:"Zacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"Zacute";s:1:"B";a:4:{i:0;s:2:"-6";i:1;s:1:"0";i:2;s:3:"606";i:3;s:3:"876";}}s:6:"Zcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"Zcaron";s:1:"B";a:4:{i:0;s:2:"-6";i:1;s:1:"0";i:2;s:3:"606";i:3;s:3:"873";}}s:12:"greaterequal";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"549";s:1:"N";s:12:"greaterequal";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:1:"0";i:2;s:3:"523";i:3;s:3:"658";}}s:3:"Eth";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:3:"Eth";s:1:"B";a:4:{i:0;s:2:"-8";i:1;s:1:"0";i:2;s:3:"700";i:3;s:3:"653";}}s:8:"Ccedilla";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:8:"Ccedilla";s:1:"B";a:4:{i:0;s:2:"66";i:1;s:4:"-217";i:2;s:3:"689";i:3;s:3:"666";}}s:12:"lcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:12:"lcommaaccent";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:4:"-217";i:2;s:3:"279";i:3;s:3:"683";}}s:6:"tcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"300";s:1:"N";s:6:"tcaron";s:1:"B";a:4:{i:0;s:2:"37";i:1;s:3:"-11";i:2;s:3:"407";i:3;s:3:"681";}}s:7:"eogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:7:"eogonek";s:1:"B";a:4:{i:0;s:2:"31";i:1;s:4:"-169";i:2;s:3:"412";i:3;s:3:"441";}}s:7:"Uogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:7:"Uogonek";s:1:"B";a:4:{i:0;s:3:"102";i:1;s:4:"-184";i:2;s:3:"765";i:3;s:3:"653";}}s:6:"Aacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"Aacute";s:1:"B";a:4:{i:0;s:3:"-51";i:1;s:1:"0";i:2;s:3:"564";i:3;s:3:"876";}}s:9:"Adieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:9:"Adieresis";s:1:"B";a:4:{i:0;s:3:"-51";i:1;s:1:"0";i:2;s:3:"564";i:3;s:3:"818";}}s:6:"egrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:6:"egrave";s:1:"B";a:4:{i:0;s:2:"31";i:1;s:3:"-11";i:2;s:3:"412";i:3;s:3:"664";}}s:6:"zacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"389";s:1:"N";s:6:"zacute";s:1:"B";a:4:{i:0;s:2:"-2";i:1;s:3:"-81";i:2;s:3:"431";i:3;s:3:"664";}}s:7:"iogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:7:"iogonek";s:1:"B";a:4:{i:0;s:2:"49";i:1;s:4:"-169";i:2;s:3:"264";i:3;s:3:"654";}}s:6:"Oacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Oacute";s:1:"B";a:4:{i:0;s:2:"60";i:1;s:3:"-18";i:2;s:3:"699";i:3;s:3:"876";}}s:6:"oacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"oacute";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:3:"-11";i:2;s:3:"487";i:3;s:3:"664";}}s:7:"amacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:7:"amacron";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:3:"-11";i:2;s:3:"495";i:3;s:3:"583";}}s:6:"sacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"389";s:1:"N";s:6:"sacute";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:3:"-13";i:2;s:3:"431";i:3;s:3:"664";}}s:9:"idieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:9:"idieresis";s:1:"B";a:4:{i:0;s:2:"49";i:1;s:3:"-11";i:2;s:3:"352";i:3;s:3:"606";}}s:11:"Ocircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:11:"Ocircumflex";s:1:"B";a:4:{i:0;s:2:"60";i:1;s:3:"-18";i:2;s:3:"699";i:3;s:3:"873";}}s:6:"Ugrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Ugrave";s:1:"B";a:4:{i:0;s:3:"102";i:1;s:3:"-18";i:2;s:3:"765";i:3;s:3:"876";}}s:5:"Delta";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"612";s:1:"N";s:5:"Delta";s:1:"B";a:4:{i:0;s:1:"6";i:1;s:1:"0";i:2;s:3:"608";i:3;s:3:"688";}}s:5:"thorn";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:5:"thorn";s:1:"B";a:4:{i:0;s:3:"-75";i:1;s:4:"-205";i:2;s:3:"469";i:3;s:3:"683";}}s:11:"twosuperior";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"300";s:1:"N";s:11:"twosuperior";s:1:"B";a:4:{i:0;s:2:"33";i:1;s:3:"271";i:2;s:3:"324";i:3;s:3:"676";}}s:9:"Odieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:9:"Odieresis";s:1:"B";a:4:{i:0;s:2:"60";i:1;s:3:"-18";i:2;s:3:"699";i:3;s:3:"818";}}s:2:"mu";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:2:"mu";s:1:"B";a:4:{i:0;s:3:"-30";i:1;s:4:"-209";i:2;s:3:"497";i:3;s:3:"428";}}s:6:"igrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:6:"igrave";s:1:"B";a:4:{i:0;s:2:"49";i:1;s:3:"-11";i:2;s:3:"284";i:3;s:3:"664";}}s:13:"ohungarumlaut";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:13:"ohungarumlaut";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:3:"-11";i:2;s:3:"590";i:3;s:3:"664";}}s:7:"Eogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:7:"Eogonek";s:1:"B";a:4:{i:0;s:2:"-1";i:1;s:4:"-169";i:2;s:3:"634";i:3;s:3:"653";}}s:6:"dcroat";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"dcroat";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:3:"-13";i:2;s:3:"572";i:3;s:3:"683";}}s:13:"threequarters";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"750";s:1:"N";s:13:"threequarters";s:1:"B";a:4:{i:0;s:2:"23";i:1;s:3:"-10";i:2;s:3:"736";i:3;s:3:"676";}}s:8:"Scedilla";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:8:"Scedilla";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:4:"-217";i:2;s:3:"508";i:3;s:3:"667";}}s:6:"lcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"300";s:1:"N";s:6:"lcaron";s:1:"B";a:4:{i:0;s:2:"41";i:1;s:3:"-11";i:2;s:3:"407";i:3;s:3:"683";}}s:12:"Kcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:12:"Kcommaaccent";s:1:"B";a:4:{i:0;s:1:"7";i:1;s:4:"-217";i:2;s:3:"722";i:3;s:3:"653";}}s:6:"Lacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"Lacute";s:1:"B";a:4:{i:0;s:2:"-8";i:1;s:1:"0";i:2;s:3:"559";i:3;s:3:"876";}}s:9:"trademark";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"980";s:1:"N";s:9:"trademark";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:3:"247";i:2;s:3:"957";i:3;s:3:"653";}}s:10:"edotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:10:"edotaccent";s:1:"B";a:4:{i:0;s:2:"31";i:1;s:3:"-11";i:2;s:3:"412";i:3;s:3:"606";}}s:6:"Igrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"333";s:1:"N";s:6:"Igrave";s:1:"B";a:4:{i:0;s:2:"-8";i:1;s:1:"0";i:2;s:3:"384";i:3;s:3:"876";}}s:7:"Imacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"333";s:1:"N";s:7:"Imacron";s:1:"B";a:4:{i:0;s:2:"-8";i:1;s:1:"0";i:2;s:3:"441";i:3;s:3:"795";}}s:6:"Lcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"Lcaron";s:1:"B";a:4:{i:0;s:2:"-8";i:1;s:1:"0";i:2;s:3:"586";i:3;s:3:"653";}}s:7:"onehalf";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"750";s:1:"N";s:7:"onehalf";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-10";i:2;s:3:"749";i:3;s:3:"676";}}s:9:"lessequal";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"549";s:1:"N";s:9:"lessequal";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:1:"0";i:2;s:3:"523";i:3;s:3:"658";}}s:11:"ocircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:11:"ocircumflex";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:3:"-11";i:2;s:3:"468";i:3;s:3:"661";}}s:6:"ntilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"ntilde";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:2:"-9";i:2;s:3:"476";i:3;s:3:"624";}}s:13:"Uhungarumlaut";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:13:"Uhungarumlaut";s:1:"B";a:4:{i:0;s:3:"102";i:1;s:3:"-18";i:2;s:3:"765";i:3;s:3:"876";}}s:6:"Eacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"Eacute";s:1:"B";a:4:{i:0;s:2:"-1";i:1;s:1:"0";i:2;s:3:"634";i:3;s:3:"876";}}s:7:"emacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:7:"emacron";s:1:"B";a:4:{i:0;s:2:"31";i:1;s:3:"-11";i:2;s:3:"457";i:3;s:3:"583";}}s:6:"gbreve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"gbreve";s:1:"B";a:4:{i:0;s:1:"8";i:1;s:4:"-206";i:2;s:3:"487";i:3;s:3:"650";}}s:10:"onequarter";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"750";s:1:"N";s:10:"onequarter";s:1:"B";a:4:{i:0;s:2:"33";i:1;s:3:"-10";i:2;s:3:"736";i:3;s:3:"676";}}s:6:"Scaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"Scaron";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:3:"-18";i:2;s:3:"520";i:3;s:3:"873";}}s:12:"Scommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:12:"Scommaaccent";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:4:"-217";i:2;s:3:"508";i:3;s:3:"667";}}s:13:"Ohungarumlaut";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:13:"Ohungarumlaut";s:1:"B";a:4:{i:0;s:2:"60";i:1;s:3:"-18";i:2;s:3:"699";i:3;s:3:"876";}}s:6:"degree";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"400";s:1:"N";s:6:"degree";s:1:"B";a:4:{i:0;s:3:"101";i:1;s:3:"390";i:2;s:3:"387";i:3;s:3:"676";}}s:6:"ograve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"ograve";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:3:"-11";i:2;s:3:"468";i:3;s:3:"664";}}s:6:"Ccaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Ccaron";s:1:"B";a:4:{i:0;s:2:"66";i:1;s:3:"-18";i:2;s:3:"689";i:3;s:3:"873";}}s:6:"ugrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"ugrave";s:1:"B";a:4:{i:0;s:2:"42";i:1;s:3:"-11";i:2;s:3:"475";i:3;s:3:"664";}}s:7:"radical";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"453";s:1:"N";s:7:"radical";s:1:"B";a:4:{i:0;s:1:"2";i:1;s:3:"-60";i:2;s:3:"452";i:3;s:3:"768";}}s:6:"Dcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Dcaron";s:1:"B";a:4:{i:0;s:2:"-8";i:1;s:1:"0";i:2;s:3:"700";i:3;s:3:"873";}}s:12:"rcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"389";s:1:"N";s:12:"rcommaaccent";s:1:"B";a:4:{i:0;s:2:"-3";i:1;s:4:"-217";i:2;s:3:"412";i:3;s:3:"441";}}s:6:"Ntilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Ntilde";s:1:"B";a:4:{i:0;s:3:"-20";i:1;s:3:"-15";i:2;s:3:"727";i:3;s:3:"836";}}s:6:"otilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"otilde";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:3:"-11";i:2;s:3:"496";i:3;s:3:"624";}}s:12:"Rcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:12:"Rcommaaccent";s:1:"B";a:4:{i:0;s:3:"-13";i:1;s:4:"-187";i:2;s:3:"588";i:3;s:3:"653";}}s:12:"Lcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:12:"Lcommaaccent";s:1:"B";a:4:{i:0;s:2:"-8";i:1;s:4:"-217";i:2;s:3:"559";i:3;s:3:"653";}}s:6:"Atilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"Atilde";s:1:"B";a:4:{i:0;s:3:"-51";i:1;s:1:"0";i:2;s:3:"566";i:3;s:3:"836";}}s:7:"Aogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:7:"Aogonek";s:1:"B";a:4:{i:0;s:3:"-51";i:1;s:4:"-169";i:2;s:3:"566";i:3;s:3:"668";}}s:5:"Aring";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:5:"Aring";s:1:"B";a:4:{i:0;s:3:"-51";i:1;s:1:"0";i:2;s:3:"564";i:3;s:3:"883";}}s:6:"Otilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Otilde";s:1:"B";a:4:{i:0;s:2:"60";i:1;s:3:"-18";i:2;s:3:"699";i:3;s:3:"836";}}s:10:"zdotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"389";s:1:"N";s:10:"zdotaccent";s:1:"B";a:4:{i:0;s:2:"-2";i:1;s:3:"-81";i:2;s:3:"380";i:3;s:3:"606";}}s:6:"Ecaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"Ecaron";s:1:"B";a:4:{i:0;s:2:"-1";i:1;s:1:"0";i:2;s:3:"634";i:3;s:3:"873";}}s:7:"Iogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"333";s:1:"N";s:7:"Iogonek";s:1:"B";a:4:{i:0;s:2:"-8";i:1;s:4:"-169";i:2;s:3:"384";i:3;s:3:"653";}}s:12:"kcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:12:"kcommaaccent";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:4:"-187";i:2;s:3:"461";i:3;s:3:"683";}}s:5:"minus";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"675";s:1:"N";s:5:"minus";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:3:"220";i:2;s:3:"590";i:3;s:3:"286";}}s:11:"Icircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"333";s:1:"N";s:11:"Icircumflex";s:1:"B";a:4:{i:0;s:2:"-8";i:1;s:1:"0";i:2;s:3:"425";i:3;s:3:"873";}}s:6:"ncaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"ncaron";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:2:"-9";i:2;s:3:"510";i:3;s:3:"661";}}s:12:"tcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:12:"tcommaaccent";s:1:"B";a:4:{i:0;s:1:"2";i:1;s:4:"-217";i:2;s:3:"296";i:3;s:3:"546";}}s:10:"logicalnot";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"675";s:1:"N";s:10:"logicalnot";s:1:"B";a:4:{i:0;s:2:"86";i:1;s:3:"108";i:2;s:3:"590";i:3;s:3:"386";}}s:9:"odieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:9:"odieresis";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:3:"-11";i:2;s:3:"489";i:3;s:3:"606";}}s:9:"udieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:9:"udieresis";s:1:"B";a:4:{i:0;s:2:"42";i:1;s:3:"-11";i:2;s:3:"479";i:3;s:3:"606";}}s:8:"notequal";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"549";s:1:"N";s:8:"notequal";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:3:"-29";i:2;s:3:"537";i:3;s:3:"541";}}s:12:"gcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:12:"gcommaaccent";s:1:"B";a:4:{i:0;s:1:"8";i:1;s:4:"-206";i:2;s:3:"472";i:3;s:3:"706";}}s:3:"eth";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:3:"eth";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:3:"-11";i:2;s:3:"482";i:3;s:3:"683";}}s:6:"zcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"389";s:1:"N";s:6:"zcaron";s:1:"B";a:4:{i:0;s:2:"-2";i:1;s:3:"-81";i:2;s:3:"434";i:3;s:3:"661";}}s:12:"ncommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:12:"ncommaaccent";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:4:"-187";i:2;s:3:"474";i:3;s:3:"441";}}s:11:"onesuperior";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"300";s:1:"N";s:11:"onesuperior";s:1:"B";a:4:{i:0;s:2:"43";i:1;s:3:"271";i:2;s:3:"284";i:3;s:3:"676";}}s:7:"imacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:7:"imacron";s:1:"B";a:4:{i:0;s:2:"46";i:1;s:3:"-11";i:2;s:3:"311";i:3;s:3:"583";}}s:4:"Euro";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:4:"Euro";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:1:"0";i:2;s:1:"0";i:3;s:1:"0";}}}s:3:"KPX";a:117:{s:1:"A";a:49:{s:1:"C";s:3:"-30";s:6:"Cacute";s:3:"-30";s:6:"Ccaron";s:3:"-30";s:8:"Ccedilla";s:3:"-30";s:1:"G";s:3:"-35";s:6:"Gbreve";s:3:"-35";s:12:"Gcommaaccent";s:3:"-35";s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"Q";s:3:"-40";s:1:"T";s:3:"-37";s:6:"Tcaron";s:3:"-37";s:12:"Tcommaaccent";s:3:"-37";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:4:"-105";s:1:"W";s:3:"-95";s:1:"Y";s:3:"-55";s:6:"Yacute";s:3:"-55";s:9:"Ydieresis";s:3:"-55";s:10:"quoteright";s:3:"-37";s:1:"u";s:3:"-20";s:6:"uacute";s:3:"-20";s:11:"ucircumflex";s:3:"-20";s:9:"udieresis";s:3:"-20";s:6:"ugrave";s:3:"-20";s:13:"uhungarumlaut";s:3:"-20";s:7:"umacron";s:3:"-20";s:7:"uogonek";s:3:"-20";s:5:"uring";s:3:"-20";s:1:"v";s:3:"-55";s:1:"w";s:3:"-55";s:1:"y";s:3:"-55";s:6:"yacute";s:3:"-55";s:9:"ydieresis";s:3:"-55";}s:6:"Aacute";a:49:{s:1:"C";s:3:"-30";s:6:"Cacute";s:3:"-30";s:6:"Ccaron";s:3:"-30";s:8:"Ccedilla";s:3:"-30";s:1:"G";s:3:"-35";s:6:"Gbreve";s:3:"-35";s:12:"Gcommaaccent";s:3:"-35";s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"Q";s:3:"-40";s:1:"T";s:3:"-37";s:6:"Tcaron";s:3:"-37";s:12:"Tcommaaccent";s:3:"-37";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:4:"-105";s:1:"W";s:3:"-95";s:1:"Y";s:3:"-55";s:6:"Yacute";s:3:"-55";s:9:"Ydieresis";s:3:"-55";s:10:"quoteright";s:3:"-37";s:1:"u";s:3:"-20";s:6:"uacute";s:3:"-20";s:11:"ucircumflex";s:3:"-20";s:9:"udieresis";s:3:"-20";s:6:"ugrave";s:3:"-20";s:13:"uhungarumlaut";s:3:"-20";s:7:"umacron";s:3:"-20";s:7:"uogonek";s:3:"-20";s:5:"uring";s:3:"-20";s:1:"v";s:3:"-55";s:1:"w";s:3:"-55";s:1:"y";s:3:"-55";s:6:"yacute";s:3:"-55";s:9:"ydieresis";s:3:"-55";}s:6:"Abreve";a:49:{s:1:"C";s:3:"-30";s:6:"Cacute";s:3:"-30";s:6:"Ccaron";s:3:"-30";s:8:"Ccedilla";s:3:"-30";s:1:"G";s:3:"-35";s:6:"Gbreve";s:3:"-35";s:12:"Gcommaaccent";s:3:"-35";s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"Q";s:3:"-40";s:1:"T";s:3:"-37";s:6:"Tcaron";s:3:"-37";s:12:"Tcommaaccent";s:3:"-37";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:4:"-105";s:1:"W";s:3:"-95";s:1:"Y";s:3:"-55";s:6:"Yacute";s:3:"-55";s:9:"Ydieresis";s:3:"-55";s:10:"quoteright";s:3:"-37";s:1:"u";s:3:"-20";s:6:"uacute";s:3:"-20";s:11:"ucircumflex";s:3:"-20";s:9:"udieresis";s:3:"-20";s:6:"ugrave";s:3:"-20";s:13:"uhungarumlaut";s:3:"-20";s:7:"umacron";s:3:"-20";s:7:"uogonek";s:3:"-20";s:5:"uring";s:3:"-20";s:1:"v";s:3:"-55";s:1:"w";s:3:"-55";s:1:"y";s:3:"-55";s:6:"yacute";s:3:"-55";s:9:"ydieresis";s:3:"-55";}s:11:"Acircumflex";a:49:{s:1:"C";s:3:"-30";s:6:"Cacute";s:3:"-30";s:6:"Ccaron";s:3:"-30";s:8:"Ccedilla";s:3:"-30";s:1:"G";s:3:"-35";s:6:"Gbreve";s:3:"-35";s:12:"Gcommaaccent";s:3:"-35";s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"Q";s:3:"-40";s:1:"T";s:3:"-37";s:6:"Tcaron";s:3:"-37";s:12:"Tcommaaccent";s:3:"-37";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:4:"-105";s:1:"W";s:3:"-95";s:1:"Y";s:3:"-55";s:6:"Yacute";s:3:"-55";s:9:"Ydieresis";s:3:"-55";s:10:"quoteright";s:3:"-37";s:1:"u";s:3:"-20";s:6:"uacute";s:3:"-20";s:11:"ucircumflex";s:3:"-20";s:9:"udieresis";s:3:"-20";s:6:"ugrave";s:3:"-20";s:13:"uhungarumlaut";s:3:"-20";s:7:"umacron";s:3:"-20";s:7:"uogonek";s:3:"-20";s:5:"uring";s:3:"-20";s:1:"v";s:3:"-55";s:1:"w";s:3:"-55";s:1:"y";s:3:"-55";s:6:"yacute";s:3:"-55";s:9:"ydieresis";s:3:"-55";}s:9:"Adieresis";a:49:{s:1:"C";s:3:"-30";s:6:"Cacute";s:3:"-30";s:6:"Ccaron";s:3:"-30";s:8:"Ccedilla";s:3:"-30";s:1:"G";s:3:"-35";s:6:"Gbreve";s:3:"-35";s:12:"Gcommaaccent";s:3:"-35";s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"Q";s:3:"-40";s:1:"T";s:3:"-37";s:6:"Tcaron";s:3:"-37";s:12:"Tcommaaccent";s:3:"-37";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:4:"-105";s:1:"W";s:3:"-95";s:1:"Y";s:3:"-55";s:6:"Yacute";s:3:"-55";s:9:"Ydieresis";s:3:"-55";s:10:"quoteright";s:3:"-37";s:1:"u";s:3:"-20";s:6:"uacute";s:3:"-20";s:11:"ucircumflex";s:3:"-20";s:9:"udieresis";s:3:"-20";s:6:"ugrave";s:3:"-20";s:13:"uhungarumlaut";s:3:"-20";s:7:"umacron";s:3:"-20";s:7:"uogonek";s:3:"-20";s:5:"uring";s:3:"-20";s:1:"v";s:3:"-55";s:1:"w";s:3:"-55";s:1:"y";s:3:"-55";s:6:"yacute";s:3:"-55";s:9:"ydieresis";s:3:"-55";}s:6:"Agrave";a:49:{s:1:"C";s:3:"-30";s:6:"Cacute";s:3:"-30";s:6:"Ccaron";s:3:"-30";s:8:"Ccedilla";s:3:"-30";s:1:"G";s:3:"-35";s:6:"Gbreve";s:3:"-35";s:12:"Gcommaaccent";s:3:"-35";s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"Q";s:3:"-40";s:1:"T";s:3:"-37";s:6:"Tcaron";s:3:"-37";s:12:"Tcommaaccent";s:3:"-37";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:4:"-105";s:1:"W";s:3:"-95";s:1:"Y";s:3:"-55";s:6:"Yacute";s:3:"-55";s:9:"Ydieresis";s:3:"-55";s:10:"quoteright";s:3:"-37";s:1:"u";s:3:"-20";s:6:"uacute";s:3:"-20";s:11:"ucircumflex";s:3:"-20";s:9:"udieresis";s:3:"-20";s:6:"ugrave";s:3:"-20";s:13:"uhungarumlaut";s:3:"-20";s:7:"umacron";s:3:"-20";s:7:"uogonek";s:3:"-20";s:5:"uring";s:3:"-20";s:1:"v";s:3:"-55";s:1:"w";s:3:"-55";s:1:"y";s:3:"-55";s:6:"yacute";s:3:"-55";s:9:"ydieresis";s:3:"-55";}s:7:"Amacron";a:49:{s:1:"C";s:3:"-30";s:6:"Cacute";s:3:"-30";s:6:"Ccaron";s:3:"-30";s:8:"Ccedilla";s:3:"-30";s:1:"G";s:3:"-35";s:6:"Gbreve";s:3:"-35";s:12:"Gcommaaccent";s:3:"-35";s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"Q";s:3:"-40";s:1:"T";s:3:"-37";s:6:"Tcaron";s:3:"-37";s:12:"Tcommaaccent";s:3:"-37";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:4:"-105";s:1:"W";s:3:"-95";s:1:"Y";s:3:"-55";s:6:"Yacute";s:3:"-55";s:9:"Ydieresis";s:3:"-55";s:10:"quoteright";s:3:"-37";s:1:"u";s:3:"-20";s:6:"uacute";s:3:"-20";s:11:"ucircumflex";s:3:"-20";s:9:"udieresis";s:3:"-20";s:6:"ugrave";s:3:"-20";s:13:"uhungarumlaut";s:3:"-20";s:7:"umacron";s:3:"-20";s:7:"uogonek";s:3:"-20";s:5:"uring";s:3:"-20";s:1:"v";s:3:"-55";s:1:"w";s:3:"-55";s:1:"y";s:3:"-55";s:6:"yacute";s:3:"-55";s:9:"ydieresis";s:3:"-55";}s:7:"Aogonek";a:49:{s:1:"C";s:3:"-30";s:6:"Cacute";s:3:"-30";s:6:"Ccaron";s:3:"-30";s:8:"Ccedilla";s:3:"-30";s:1:"G";s:3:"-35";s:6:"Gbreve";s:3:"-35";s:12:"Gcommaaccent";s:3:"-35";s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"Q";s:3:"-40";s:1:"T";s:3:"-37";s:6:"Tcaron";s:3:"-37";s:12:"Tcommaaccent";s:3:"-37";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:4:"-105";s:1:"W";s:3:"-95";s:1:"Y";s:3:"-55";s:6:"Yacute";s:3:"-55";s:9:"Ydieresis";s:3:"-55";s:10:"quoteright";s:3:"-37";s:1:"u";s:3:"-20";s:6:"uacute";s:3:"-20";s:11:"ucircumflex";s:3:"-20";s:9:"udieresis";s:3:"-20";s:6:"ugrave";s:3:"-20";s:13:"uhungarumlaut";s:3:"-20";s:7:"umacron";s:3:"-20";s:7:"uogonek";s:3:"-20";s:5:"uring";s:3:"-20";s:1:"v";s:3:"-55";s:1:"w";s:3:"-55";s:1:"y";s:3:"-55";s:6:"yacute";s:3:"-55";s:9:"ydieresis";s:3:"-55";}s:5:"Aring";a:49:{s:1:"C";s:3:"-30";s:6:"Cacute";s:3:"-30";s:6:"Ccaron";s:3:"-30";s:8:"Ccedilla";s:3:"-30";s:1:"G";s:3:"-35";s:6:"Gbreve";s:3:"-35";s:12:"Gcommaaccent";s:3:"-35";s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"Q";s:3:"-40";s:1:"T";s:3:"-37";s:6:"Tcaron";s:3:"-37";s:12:"Tcommaaccent";s:3:"-37";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:4:"-105";s:1:"W";s:3:"-95";s:1:"Y";s:3:"-55";s:6:"Yacute";s:3:"-55";s:9:"Ydieresis";s:3:"-55";s:10:"quoteright";s:3:"-37";s:1:"u";s:3:"-20";s:6:"uacute";s:3:"-20";s:11:"ucircumflex";s:3:"-20";s:9:"udieresis";s:3:"-20";s:6:"ugrave";s:3:"-20";s:13:"uhungarumlaut";s:3:"-20";s:7:"umacron";s:3:"-20";s:7:"uogonek";s:3:"-20";s:5:"uring";s:3:"-20";s:1:"v";s:3:"-55";s:1:"w";s:3:"-55";s:1:"y";s:3:"-55";s:6:"yacute";s:3:"-55";s:9:"ydieresis";s:3:"-55";}s:6:"Atilde";a:49:{s:1:"C";s:3:"-30";s:6:"Cacute";s:3:"-30";s:6:"Ccaron";s:3:"-30";s:8:"Ccedilla";s:3:"-30";s:1:"G";s:3:"-35";s:6:"Gbreve";s:3:"-35";s:12:"Gcommaaccent";s:3:"-35";s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"Q";s:3:"-40";s:1:"T";s:3:"-37";s:6:"Tcaron";s:3:"-37";s:12:"Tcommaaccent";s:3:"-37";s:1:"U";s:3:"-50";s:6:"Uacute";s:3:"-50";s:11:"Ucircumflex";s:3:"-50";s:9:"Udieresis";s:3:"-50";s:6:"Ugrave";s:3:"-50";s:13:"Uhungarumlaut";s:3:"-50";s:7:"Umacron";s:3:"-50";s:7:"Uogonek";s:3:"-50";s:5:"Uring";s:3:"-50";s:1:"V";s:4:"-105";s:1:"W";s:3:"-95";s:1:"Y";s:3:"-55";s:6:"Yacute";s:3:"-55";s:9:"Ydieresis";s:3:"-55";s:10:"quoteright";s:3:"-37";s:1:"u";s:3:"-20";s:6:"uacute";s:3:"-20";s:11:"ucircumflex";s:3:"-20";s:9:"udieresis";s:3:"-20";s:6:"ugrave";s:3:"-20";s:13:"uhungarumlaut";s:3:"-20";s:7:"umacron";s:3:"-20";s:7:"uogonek";s:3:"-20";s:5:"uring";s:3:"-20";s:1:"v";s:3:"-55";s:1:"w";s:3:"-55";s:1:"y";s:3:"-55";s:6:"yacute";s:3:"-55";s:9:"ydieresis";s:3:"-55";}s:1:"B";a:19:{s:1:"A";s:3:"-25";s:6:"Aacute";s:3:"-25";s:6:"Abreve";s:3:"-25";s:11:"Acircumflex";s:3:"-25";s:9:"Adieresis";s:3:"-25";s:6:"Agrave";s:3:"-25";s:7:"Amacron";s:3:"-25";s:7:"Aogonek";s:3:"-25";s:5:"Aring";s:3:"-25";s:6:"Atilde";s:3:"-25";s:1:"U";s:3:"-10";s:6:"Uacute";s:3:"-10";s:11:"Ucircumflex";s:3:"-10";s:9:"Udieresis";s:3:"-10";s:6:"Ugrave";s:3:"-10";s:13:"Uhungarumlaut";s:3:"-10";s:7:"Umacron";s:3:"-10";s:7:"Uogonek";s:3:"-10";s:5:"Uring";s:3:"-10";}s:1:"D";a:15:{s:1:"A";s:3:"-35";s:6:"Aacute";s:3:"-35";s:6:"Abreve";s:3:"-35";s:11:"Acircumflex";s:3:"-35";s:9:"Adieresis";s:3:"-35";s:6:"Agrave";s:3:"-35";s:7:"Amacron";s:3:"-35";s:7:"Aogonek";s:3:"-35";s:5:"Aring";s:3:"-35";s:6:"Atilde";s:3:"-35";s:1:"V";s:3:"-40";s:1:"W";s:3:"-40";s:1:"Y";s:3:"-40";s:6:"Yacute";s:3:"-40";s:9:"Ydieresis";s:3:"-40";}s:6:"Dcaron";a:15:{s:1:"A";s:3:"-35";s:6:"Aacute";s:3:"-35";s:6:"Abreve";s:3:"-35";s:11:"Acircumflex";s:3:"-35";s:9:"Adieresis";s:3:"-35";s:6:"Agrave";s:3:"-35";s:7:"Amacron";s:3:"-35";s:7:"Aogonek";s:3:"-35";s:5:"Aring";s:3:"-35";s:6:"Atilde";s:3:"-35";s:1:"V";s:3:"-40";s:1:"W";s:3:"-40";s:1:"Y";s:3:"-40";s:6:"Yacute";s:3:"-40";s:9:"Ydieresis";s:3:"-40";}s:6:"Dcroat";a:15:{s:1:"A";s:3:"-35";s:6:"Aacute";s:3:"-35";s:6:"Abreve";s:3:"-35";s:11:"Acircumflex";s:3:"-35";s:9:"Adieresis";s:3:"-35";s:6:"Agrave";s:3:"-35";s:7:"Amacron";s:3:"-35";s:7:"Aogonek";s:3:"-35";s:5:"Aring";s:3:"-35";s:6:"Atilde";s:3:"-35";s:1:"V";s:3:"-40";s:1:"W";s:3:"-40";s:1:"Y";s:3:"-40";s:6:"Yacute";s:3:"-40";s:9:"Ydieresis";s:3:"-40";}s:1:"F";a:51:{s:1:"A";s:4:"-115";s:6:"Aacute";s:4:"-115";s:6:"Abreve";s:4:"-115";s:11:"Acircumflex";s:4:"-115";s:9:"Adieresis";s:4:"-115";s:6:"Agrave";s:4:"-115";s:7:"Amacron";s:4:"-115";s:7:"Aogonek";s:4:"-115";s:5:"Aring";s:4:"-115";s:6:"Atilde";s:4:"-115";s:1:"a";s:3:"-75";s:6:"aacute";s:3:"-75";s:6:"abreve";s:3:"-75";s:11:"acircumflex";s:3:"-75";s:9:"adieresis";s:3:"-75";s:6:"agrave";s:3:"-75";s:7:"amacron";s:3:"-75";s:7:"aogonek";s:3:"-75";s:5:"aring";s:3:"-75";s:6:"atilde";s:3:"-75";s:5:"comma";s:4:"-135";s:1:"e";s:3:"-75";s:6:"eacute";s:3:"-75";s:6:"ecaron";s:3:"-75";s:11:"ecircumflex";s:3:"-75";s:9:"edieresis";s:3:"-75";s:10:"edotaccent";s:3:"-75";s:6:"egrave";s:3:"-75";s:7:"emacron";s:3:"-75";s:7:"eogonek";s:3:"-75";s:1:"i";s:3:"-45";s:6:"iacute";s:3:"-45";s:11:"icircumflex";s:3:"-45";s:9:"idieresis";s:3:"-45";s:6:"igrave";s:3:"-45";s:7:"imacron";s:3:"-45";s:7:"iogonek";s:3:"-45";s:1:"o";s:4:"-105";s:6:"oacute";s:4:"-105";s:11:"ocircumflex";s:4:"-105";s:9:"odieresis";s:4:"-105";s:6:"ograve";s:4:"-105";s:13:"ohungarumlaut";s:4:"-105";s:7:"omacron";s:4:"-105";s:6:"oslash";s:4:"-105";s:6:"otilde";s:4:"-105";s:6:"period";s:4:"-135";s:1:"r";s:3:"-55";s:6:"racute";s:3:"-55";s:6:"rcaron";s:3:"-55";s:12:"rcommaaccent";s:3:"-55";}s:1:"J";a:49:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:1:"a";s:3:"-35";s:6:"aacute";s:3:"-35";s:6:"abreve";s:3:"-35";s:11:"acircumflex";s:3:"-35";s:9:"adieresis";s:3:"-35";s:6:"agrave";s:3:"-35";s:7:"amacron";s:3:"-35";s:7:"aogonek";s:3:"-35";s:5:"aring";s:3:"-35";s:6:"atilde";s:3:"-35";s:5:"comma";s:3:"-25";s:1:"e";s:3:"-25";s:6:"eacute";s:3:"-25";s:6:"ecaron";s:3:"-25";s:11:"ecircumflex";s:3:"-25";s:9:"edieresis";s:3:"-25";s:10:"edotaccent";s:3:"-25";s:6:"egrave";s:3:"-25";s:7:"emacron";s:3:"-25";s:7:"eogonek";s:3:"-25";s:1:"o";s:3:"-25";s:6:"oacute";s:3:"-25";s:11:"ocircumflex";s:3:"-25";s:9:"odieresis";s:3:"-25";s:6:"ograve";s:3:"-25";s:13:"ohungarumlaut";s:3:"-25";s:7:"omacron";s:3:"-25";s:6:"oslash";s:3:"-25";s:6:"otilde";s:3:"-25";s:6:"period";s:3:"-25";s:1:"u";s:3:"-35";s:6:"uacute";s:3:"-35";s:11:"ucircumflex";s:3:"-35";s:9:"udieresis";s:3:"-35";s:6:"ugrave";s:3:"-35";s:13:"uhungarumlaut";s:3:"-35";s:7:"umacron";s:3:"-35";s:7:"uogonek";s:3:"-35";s:5:"uring";s:3:"-35";}s:1:"K";a:39:{s:1:"O";s:3:"-50";s:6:"Oacute";s:3:"-50";s:11:"Ocircumflex";s:3:"-50";s:9:"Odieresis";s:3:"-50";s:6:"Ograve";s:3:"-50";s:13:"Ohungarumlaut";s:3:"-50";s:7:"Omacron";s:3:"-50";s:6:"Oslash";s:3:"-50";s:6:"Otilde";s:3:"-50";s:1:"e";s:3:"-35";s:6:"eacute";s:3:"-35";s:6:"ecaron";s:3:"-35";s:11:"ecircumflex";s:3:"-35";s:9:"edieresis";s:3:"-35";s:10:"edotaccent";s:3:"-35";s:6:"egrave";s:3:"-35";s:7:"emacron";s:3:"-35";s:7:"eogonek";s:3:"-35";s:1:"o";s:3:"-40";s:6:"oacute";s:3:"-40";s:11:"ocircumflex";s:3:"-40";s:9:"odieresis";s:3:"-40";s:6:"ograve";s:3:"-40";s:13:"ohungarumlaut";s:3:"-40";s:7:"omacron";s:3:"-40";s:6:"oslash";s:3:"-40";s:6:"otilde";s:3:"-40";s:1:"u";s:3:"-40";s:6:"uacute";s:3:"-40";s:11:"ucircumflex";s:3:"-40";s:9:"udieresis";s:3:"-40";s:6:"ugrave";s:3:"-40";s:13:"uhungarumlaut";s:3:"-40";s:7:"umacron";s:3:"-40";s:7:"uogonek";s:3:"-40";s:5:"uring";s:3:"-40";s:1:"y";s:3:"-40";s:6:"yacute";s:3:"-40";s:9:"ydieresis";s:3:"-40";}s:12:"Kcommaaccent";a:39:{s:1:"O";s:3:"-50";s:6:"Oacute";s:3:"-50";s:11:"Ocircumflex";s:3:"-50";s:9:"Odieresis";s:3:"-50";s:6:"Ograve";s:3:"-50";s:13:"Ohungarumlaut";s:3:"-50";s:7:"Omacron";s:3:"-50";s:6:"Oslash";s:3:"-50";s:6:"Otilde";s:3:"-50";s:1:"e";s:3:"-35";s:6:"eacute";s:3:"-35";s:6:"ecaron";s:3:"-35";s:11:"ecircumflex";s:3:"-35";s:9:"edieresis";s:3:"-35";s:10:"edotaccent";s:3:"-35";s:6:"egrave";s:3:"-35";s:7:"emacron";s:3:"-35";s:7:"eogonek";s:3:"-35";s:1:"o";s:3:"-40";s:6:"oacute";s:3:"-40";s:11:"ocircumflex";s:3:"-40";s:9:"odieresis";s:3:"-40";s:6:"ograve";s:3:"-40";s:13:"ohungarumlaut";s:3:"-40";s:7:"omacron";s:3:"-40";s:6:"oslash";s:3:"-40";s:6:"otilde";s:3:"-40";s:1:"u";s:3:"-40";s:6:"uacute";s:3:"-40";s:11:"ucircumflex";s:3:"-40";s:9:"udieresis";s:3:"-40";s:6:"ugrave";s:3:"-40";s:13:"uhungarumlaut";s:3:"-40";s:7:"umacron";s:3:"-40";s:7:"uogonek";s:3:"-40";s:5:"uring";s:3:"-40";s:1:"y";s:3:"-40";s:6:"yacute";s:3:"-40";s:9:"ydieresis";s:3:"-40";}s:1:"L";a:12:{s:1:"T";s:3:"-20";s:6:"Tcaron";s:3:"-20";s:12:"Tcommaaccent";s:3:"-20";s:1:"V";s:3:"-55";s:1:"W";s:3:"-55";s:1:"Y";s:3:"-20";s:6:"Yacute";s:3:"-20";s:9:"Ydieresis";s:3:"-20";s:10:"quoteright";s:3:"-37";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:6:"Lacute";a:12:{s:1:"T";s:3:"-20";s:6:"Tcaron";s:3:"-20";s:12:"Tcommaaccent";s:3:"-20";s:1:"V";s:3:"-55";s:1:"W";s:3:"-55";s:1:"Y";s:3:"-20";s:6:"Yacute";s:3:"-20";s:9:"Ydieresis";s:3:"-20";s:10:"quoteright";s:3:"-37";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:12:"Lcommaaccent";a:12:{s:1:"T";s:3:"-20";s:6:"Tcaron";s:3:"-20";s:12:"Tcommaaccent";s:3:"-20";s:1:"V";s:3:"-55";s:1:"W";s:3:"-55";s:1:"Y";s:3:"-20";s:6:"Yacute";s:3:"-20";s:9:"Ydieresis";s:3:"-20";s:10:"quoteright";s:3:"-37";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:6:"Lslash";a:12:{s:1:"T";s:3:"-20";s:6:"Tcaron";s:3:"-20";s:12:"Tcommaaccent";s:3:"-20";s:1:"V";s:3:"-55";s:1:"W";s:3:"-55";s:1:"Y";s:3:"-20";s:6:"Yacute";s:3:"-20";s:9:"Ydieresis";s:3:"-20";s:10:"quoteright";s:3:"-37";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:1:"N";a:10:{s:1:"A";s:3:"-27";s:6:"Aacute";s:3:"-27";s:6:"Abreve";s:3:"-27";s:11:"Acircumflex";s:3:"-27";s:9:"Adieresis";s:3:"-27";s:6:"Agrave";s:3:"-27";s:7:"Amacron";s:3:"-27";s:7:"Aogonek";s:3:"-27";s:5:"Aring";s:3:"-27";s:6:"Atilde";s:3:"-27";}s:6:"Nacute";a:10:{s:1:"A";s:3:"-27";s:6:"Aacute";s:3:"-27";s:6:"Abreve";s:3:"-27";s:11:"Acircumflex";s:3:"-27";s:9:"Adieresis";s:3:"-27";s:6:"Agrave";s:3:"-27";s:7:"Amacron";s:3:"-27";s:7:"Aogonek";s:3:"-27";s:5:"Aring";s:3:"-27";s:6:"Atilde";s:3:"-27";}s:6:"Ncaron";a:10:{s:1:"A";s:3:"-27";s:6:"Aacute";s:3:"-27";s:6:"Abreve";s:3:"-27";s:11:"Acircumflex";s:3:"-27";s:9:"Adieresis";s:3:"-27";s:6:"Agrave";s:3:"-27";s:7:"Amacron";s:3:"-27";s:7:"Aogonek";s:3:"-27";s:5:"Aring";s:3:"-27";s:6:"Atilde";s:3:"-27";}s:12:"Ncommaaccent";a:10:{s:1:"A";s:3:"-27";s:6:"Aacute";s:3:"-27";s:6:"Abreve";s:3:"-27";s:11:"Acircumflex";s:3:"-27";s:9:"Adieresis";s:3:"-27";s:6:"Agrave";s:3:"-27";s:7:"Amacron";s:3:"-27";s:7:"Aogonek";s:3:"-27";s:5:"Aring";s:3:"-27";s:6:"Atilde";s:3:"-27";}s:6:"Ntilde";a:10:{s:1:"A";s:3:"-27";s:6:"Aacute";s:3:"-27";s:6:"Abreve";s:3:"-27";s:11:"Acircumflex";s:3:"-27";s:9:"Adieresis";s:3:"-27";s:6:"Agrave";s:3:"-27";s:7:"Amacron";s:3:"-27";s:7:"Aogonek";s:3:"-27";s:5:"Aring";s:3:"-27";s:6:"Atilde";s:3:"-27";}s:1:"O";a:19:{s:1:"A";s:3:"-55";s:6:"Aacute";s:3:"-55";s:6:"Abreve";s:3:"-55";s:11:"Acircumflex";s:3:"-55";s:9:"Adieresis";s:3:"-55";s:6:"Agrave";s:3:"-55";s:7:"Amacron";s:3:"-55";s:7:"Aogonek";s:3:"-55";s:5:"Aring";s:3:"-55";s:6:"Atilde";s:3:"-55";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-50";s:1:"X";s:3:"-40";s:1:"Y";s:3:"-50";s:6:"Yacute";s:3:"-50";s:9:"Ydieresis";s:3:"-50";}s:6:"Oacute";a:19:{s:1:"A";s:3:"-55";s:6:"Aacute";s:3:"-55";s:6:"Abreve";s:3:"-55";s:11:"Acircumflex";s:3:"-55";s:9:"Adieresis";s:3:"-55";s:6:"Agrave";s:3:"-55";s:7:"Amacron";s:3:"-55";s:7:"Aogonek";s:3:"-55";s:5:"Aring";s:3:"-55";s:6:"Atilde";s:3:"-55";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-50";s:1:"X";s:3:"-40";s:1:"Y";s:3:"-50";s:6:"Yacute";s:3:"-50";s:9:"Ydieresis";s:3:"-50";}s:11:"Ocircumflex";a:19:{s:1:"A";s:3:"-55";s:6:"Aacute";s:3:"-55";s:6:"Abreve";s:3:"-55";s:11:"Acircumflex";s:3:"-55";s:9:"Adieresis";s:3:"-55";s:6:"Agrave";s:3:"-55";s:7:"Amacron";s:3:"-55";s:7:"Aogonek";s:3:"-55";s:5:"Aring";s:3:"-55";s:6:"Atilde";s:3:"-55";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-50";s:1:"X";s:3:"-40";s:1:"Y";s:3:"-50";s:6:"Yacute";s:3:"-50";s:9:"Ydieresis";s:3:"-50";}s:9:"Odieresis";a:19:{s:1:"A";s:3:"-55";s:6:"Aacute";s:3:"-55";s:6:"Abreve";s:3:"-55";s:11:"Acircumflex";s:3:"-55";s:9:"Adieresis";s:3:"-55";s:6:"Agrave";s:3:"-55";s:7:"Amacron";s:3:"-55";s:7:"Aogonek";s:3:"-55";s:5:"Aring";s:3:"-55";s:6:"Atilde";s:3:"-55";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-50";s:1:"X";s:3:"-40";s:1:"Y";s:3:"-50";s:6:"Yacute";s:3:"-50";s:9:"Ydieresis";s:3:"-50";}s:6:"Ograve";a:19:{s:1:"A";s:3:"-55";s:6:"Aacute";s:3:"-55";s:6:"Abreve";s:3:"-55";s:11:"Acircumflex";s:3:"-55";s:9:"Adieresis";s:3:"-55";s:6:"Agrave";s:3:"-55";s:7:"Amacron";s:3:"-55";s:7:"Aogonek";s:3:"-55";s:5:"Aring";s:3:"-55";s:6:"Atilde";s:3:"-55";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-50";s:1:"X";s:3:"-40";s:1:"Y";s:3:"-50";s:6:"Yacute";s:3:"-50";s:9:"Ydieresis";s:3:"-50";}s:13:"Ohungarumlaut";a:19:{s:1:"A";s:3:"-55";s:6:"Aacute";s:3:"-55";s:6:"Abreve";s:3:"-55";s:11:"Acircumflex";s:3:"-55";s:9:"Adieresis";s:3:"-55";s:6:"Agrave";s:3:"-55";s:7:"Amacron";s:3:"-55";s:7:"Aogonek";s:3:"-55";s:5:"Aring";s:3:"-55";s:6:"Atilde";s:3:"-55";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-50";s:1:"X";s:3:"-40";s:1:"Y";s:3:"-50";s:6:"Yacute";s:3:"-50";s:9:"Ydieresis";s:3:"-50";}s:7:"Omacron";a:19:{s:1:"A";s:3:"-55";s:6:"Aacute";s:3:"-55";s:6:"Abreve";s:3:"-55";s:11:"Acircumflex";s:3:"-55";s:9:"Adieresis";s:3:"-55";s:6:"Agrave";s:3:"-55";s:7:"Amacron";s:3:"-55";s:7:"Aogonek";s:3:"-55";s:5:"Aring";s:3:"-55";s:6:"Atilde";s:3:"-55";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-50";s:1:"X";s:3:"-40";s:1:"Y";s:3:"-50";s:6:"Yacute";s:3:"-50";s:9:"Ydieresis";s:3:"-50";}s:6:"Oslash";a:19:{s:1:"A";s:3:"-55";s:6:"Aacute";s:3:"-55";s:6:"Abreve";s:3:"-55";s:11:"Acircumflex";s:3:"-55";s:9:"Adieresis";s:3:"-55";s:6:"Agrave";s:3:"-55";s:7:"Amacron";s:3:"-55";s:7:"Aogonek";s:3:"-55";s:5:"Aring";s:3:"-55";s:6:"Atilde";s:3:"-55";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-50";s:1:"X";s:3:"-40";s:1:"Y";s:3:"-50";s:6:"Yacute";s:3:"-50";s:9:"Ydieresis";s:3:"-50";}s:6:"Otilde";a:19:{s:1:"A";s:3:"-55";s:6:"Aacute";s:3:"-55";s:6:"Abreve";s:3:"-55";s:11:"Acircumflex";s:3:"-55";s:9:"Adieresis";s:3:"-55";s:6:"Agrave";s:3:"-55";s:7:"Amacron";s:3:"-55";s:7:"Aogonek";s:3:"-55";s:5:"Aring";s:3:"-55";s:6:"Atilde";s:3:"-55";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-50";s:1:"X";s:3:"-40";s:1:"Y";s:3:"-50";s:6:"Yacute";s:3:"-50";s:9:"Ydieresis";s:3:"-50";}s:1:"P";a:40:{s:1:"A";s:3:"-90";s:6:"Aacute";s:3:"-90";s:6:"Abreve";s:3:"-90";s:11:"Acircumflex";s:3:"-90";s:9:"Adieresis";s:3:"-90";s:6:"Agrave";s:3:"-90";s:7:"Amacron";s:3:"-90";s:7:"Aogonek";s:3:"-90";s:5:"Aring";s:3:"-90";s:6:"Atilde";s:3:"-90";s:1:"a";s:3:"-80";s:6:"aacute";s:3:"-80";s:6:"abreve";s:3:"-80";s:11:"acircumflex";s:3:"-80";s:9:"adieresis";s:3:"-80";s:6:"agrave";s:3:"-80";s:7:"amacron";s:3:"-80";s:7:"aogonek";s:3:"-80";s:5:"aring";s:3:"-80";s:6:"atilde";s:3:"-80";s:5:"comma";s:4:"-135";s:1:"e";s:3:"-80";s:6:"eacute";s:3:"-80";s:6:"ecaron";s:3:"-80";s:11:"ecircumflex";s:3:"-80";s:9:"edieresis";s:3:"-80";s:10:"edotaccent";s:3:"-80";s:6:"egrave";s:3:"-80";s:7:"emacron";s:3:"-80";s:7:"eogonek";s:3:"-80";s:1:"o";s:3:"-80";s:6:"oacute";s:3:"-80";s:11:"ocircumflex";s:3:"-80";s:9:"odieresis";s:3:"-80";s:6:"ograve";s:3:"-80";s:13:"ohungarumlaut";s:3:"-80";s:7:"omacron";s:3:"-80";s:6:"oslash";s:3:"-80";s:6:"otilde";s:3:"-80";s:6:"period";s:4:"-135";}s:1:"Q";a:9:{s:1:"U";s:3:"-10";s:6:"Uacute";s:3:"-10";s:11:"Ucircumflex";s:3:"-10";s:9:"Udieresis";s:3:"-10";s:6:"Ugrave";s:3:"-10";s:13:"Uhungarumlaut";s:3:"-10";s:7:"Umacron";s:3:"-10";s:7:"Uogonek";s:3:"-10";s:5:"Uring";s:3:"-10";}s:1:"R";a:23:{s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"U";s:3:"-40";s:6:"Uacute";s:3:"-40";s:11:"Ucircumflex";s:3:"-40";s:9:"Udieresis";s:3:"-40";s:6:"Ugrave";s:3:"-40";s:13:"Uhungarumlaut";s:3:"-40";s:7:"Umacron";s:3:"-40";s:7:"Uogonek";s:3:"-40";s:5:"Uring";s:3:"-40";s:1:"V";s:3:"-18";s:1:"W";s:3:"-18";s:1:"Y";s:3:"-18";s:6:"Yacute";s:3:"-18";s:9:"Ydieresis";s:3:"-18";}s:6:"Racute";a:23:{s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"U";s:3:"-40";s:6:"Uacute";s:3:"-40";s:11:"Ucircumflex";s:3:"-40";s:9:"Udieresis";s:3:"-40";s:6:"Ugrave";s:3:"-40";s:13:"Uhungarumlaut";s:3:"-40";s:7:"Umacron";s:3:"-40";s:7:"Uogonek";s:3:"-40";s:5:"Uring";s:3:"-40";s:1:"V";s:3:"-18";s:1:"W";s:3:"-18";s:1:"Y";s:3:"-18";s:6:"Yacute";s:3:"-18";s:9:"Ydieresis";s:3:"-18";}s:6:"Rcaron";a:23:{s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"U";s:3:"-40";s:6:"Uacute";s:3:"-40";s:11:"Ucircumflex";s:3:"-40";s:9:"Udieresis";s:3:"-40";s:6:"Ugrave";s:3:"-40";s:13:"Uhungarumlaut";s:3:"-40";s:7:"Umacron";s:3:"-40";s:7:"Uogonek";s:3:"-40";s:5:"Uring";s:3:"-40";s:1:"V";s:3:"-18";s:1:"W";s:3:"-18";s:1:"Y";s:3:"-18";s:6:"Yacute";s:3:"-18";s:9:"Ydieresis";s:3:"-18";}s:12:"Rcommaaccent";a:23:{s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"U";s:3:"-40";s:6:"Uacute";s:3:"-40";s:11:"Ucircumflex";s:3:"-40";s:9:"Udieresis";s:3:"-40";s:6:"Ugrave";s:3:"-40";s:13:"Uhungarumlaut";s:3:"-40";s:7:"Umacron";s:3:"-40";s:7:"Uogonek";s:3:"-40";s:5:"Uring";s:3:"-40";s:1:"V";s:3:"-18";s:1:"W";s:3:"-18";s:1:"Y";s:3:"-18";s:6:"Yacute";s:3:"-18";s:9:"Ydieresis";s:3:"-18";}s:1:"T";a:72:{s:1:"A";s:3:"-50";s:6:"Aacute";s:3:"-50";s:6:"Abreve";s:3:"-50";s:11:"Acircumflex";s:3:"-50";s:9:"Adieresis";s:3:"-50";s:6:"Agrave";s:3:"-50";s:7:"Amacron";s:3:"-50";s:7:"Aogonek";s:3:"-50";s:5:"Aring";s:3:"-50";s:6:"Atilde";s:3:"-50";s:1:"O";s:3:"-18";s:6:"Oacute";s:3:"-18";s:11:"Ocircumflex";s:3:"-18";s:9:"Odieresis";s:3:"-18";s:6:"Ograve";s:3:"-18";s:13:"Ohungarumlaut";s:3:"-18";s:7:"Omacron";s:3:"-18";s:6:"Oslash";s:3:"-18";s:6:"Otilde";s:3:"-18";s:1:"a";s:3:"-92";s:6:"aacute";s:3:"-92";s:6:"abreve";s:3:"-92";s:11:"acircumflex";s:3:"-92";s:9:"adieresis";s:3:"-92";s:6:"agrave";s:3:"-92";s:7:"amacron";s:3:"-92";s:7:"aogonek";s:3:"-92";s:5:"aring";s:3:"-92";s:6:"atilde";s:3:"-92";s:5:"colon";s:3:"-55";s:5:"comma";s:3:"-74";s:1:"e";s:3:"-92";s:6:"eacute";s:3:"-92";s:6:"ecaron";s:3:"-92";s:11:"ecircumflex";s:3:"-52";s:9:"edieresis";s:3:"-52";s:10:"edotaccent";s:3:"-92";s:6:"egrave";s:3:"-52";s:7:"emacron";s:3:"-52";s:7:"eogonek";s:3:"-92";s:6:"hyphen";s:3:"-74";s:1:"i";s:3:"-55";s:6:"iacute";s:3:"-55";s:7:"iogonek";s:3:"-55";s:1:"o";s:3:"-92";s:6:"oacute";s:3:"-92";s:11:"ocircumflex";s:3:"-92";s:9:"odieresis";s:3:"-92";s:6:"ograve";s:3:"-92";s:13:"ohungarumlaut";s:3:"-92";s:7:"omacron";s:3:"-92";s:6:"oslash";s:3:"-92";s:6:"otilde";s:3:"-92";s:6:"period";s:3:"-74";s:1:"r";s:3:"-55";s:6:"racute";s:3:"-55";s:6:"rcaron";s:3:"-55";s:12:"rcommaaccent";s:3:"-55";s:9:"semicolon";s:3:"-65";s:1:"u";s:3:"-55";s:6:"uacute";s:3:"-55";s:11:"ucircumflex";s:3:"-55";s:9:"udieresis";s:3:"-55";s:6:"ugrave";s:3:"-55";s:13:"uhungarumlaut";s:3:"-55";s:7:"umacron";s:3:"-55";s:7:"uogonek";s:3:"-55";s:5:"uring";s:3:"-55";s:1:"w";s:3:"-74";s:1:"y";s:3:"-74";s:6:"yacute";s:3:"-74";s:9:"ydieresis";s:3:"-34";}s:6:"Tcaron";a:72:{s:1:"A";s:3:"-50";s:6:"Aacute";s:3:"-50";s:6:"Abreve";s:3:"-50";s:11:"Acircumflex";s:3:"-50";s:9:"Adieresis";s:3:"-50";s:6:"Agrave";s:3:"-50";s:7:"Amacron";s:3:"-50";s:7:"Aogonek";s:3:"-50";s:5:"Aring";s:3:"-50";s:6:"Atilde";s:3:"-50";s:1:"O";s:3:"-18";s:6:"Oacute";s:3:"-18";s:11:"Ocircumflex";s:3:"-18";s:9:"Odieresis";s:3:"-18";s:6:"Ograve";s:3:"-18";s:13:"Ohungarumlaut";s:3:"-18";s:7:"Omacron";s:3:"-18";s:6:"Oslash";s:3:"-18";s:6:"Otilde";s:3:"-18";s:1:"a";s:3:"-92";s:6:"aacute";s:3:"-92";s:6:"abreve";s:3:"-92";s:11:"acircumflex";s:3:"-92";s:9:"adieresis";s:3:"-92";s:6:"agrave";s:3:"-92";s:7:"amacron";s:3:"-92";s:7:"aogonek";s:3:"-92";s:5:"aring";s:3:"-92";s:6:"atilde";s:3:"-92";s:5:"colon";s:3:"-55";s:5:"comma";s:3:"-74";s:1:"e";s:3:"-92";s:6:"eacute";s:3:"-92";s:6:"ecaron";s:3:"-92";s:11:"ecircumflex";s:3:"-52";s:9:"edieresis";s:3:"-52";s:10:"edotaccent";s:3:"-92";s:6:"egrave";s:3:"-52";s:7:"emacron";s:3:"-52";s:7:"eogonek";s:3:"-92";s:6:"hyphen";s:3:"-74";s:1:"i";s:3:"-55";s:6:"iacute";s:3:"-55";s:7:"iogonek";s:3:"-55";s:1:"o";s:3:"-92";s:6:"oacute";s:3:"-92";s:11:"ocircumflex";s:3:"-92";s:9:"odieresis";s:3:"-92";s:6:"ograve";s:3:"-92";s:13:"ohungarumlaut";s:3:"-92";s:7:"omacron";s:3:"-92";s:6:"oslash";s:3:"-92";s:6:"otilde";s:3:"-92";s:6:"period";s:3:"-74";s:1:"r";s:3:"-55";s:6:"racute";s:3:"-55";s:6:"rcaron";s:3:"-55";s:12:"rcommaaccent";s:3:"-55";s:9:"semicolon";s:3:"-65";s:1:"u";s:3:"-55";s:6:"uacute";s:3:"-55";s:11:"ucircumflex";s:3:"-55";s:9:"udieresis";s:3:"-55";s:6:"ugrave";s:3:"-55";s:13:"uhungarumlaut";s:3:"-55";s:7:"umacron";s:3:"-55";s:7:"uogonek";s:3:"-55";s:5:"uring";s:3:"-55";s:1:"w";s:3:"-74";s:1:"y";s:3:"-74";s:6:"yacute";s:3:"-74";s:9:"ydieresis";s:3:"-34";}s:12:"Tcommaaccent";a:72:{s:1:"A";s:3:"-50";s:6:"Aacute";s:3:"-50";s:6:"Abreve";s:3:"-50";s:11:"Acircumflex";s:3:"-50";s:9:"Adieresis";s:3:"-50";s:6:"Agrave";s:3:"-50";s:7:"Amacron";s:3:"-50";s:7:"Aogonek";s:3:"-50";s:5:"Aring";s:3:"-50";s:6:"Atilde";s:3:"-50";s:1:"O";s:3:"-18";s:6:"Oacute";s:3:"-18";s:11:"Ocircumflex";s:3:"-18";s:9:"Odieresis";s:3:"-18";s:6:"Ograve";s:3:"-18";s:13:"Ohungarumlaut";s:3:"-18";s:7:"Omacron";s:3:"-18";s:6:"Oslash";s:3:"-18";s:6:"Otilde";s:3:"-18";s:1:"a";s:3:"-92";s:6:"aacute";s:3:"-92";s:6:"abreve";s:3:"-92";s:11:"acircumflex";s:3:"-92";s:9:"adieresis";s:3:"-92";s:6:"agrave";s:3:"-92";s:7:"amacron";s:3:"-92";s:7:"aogonek";s:3:"-92";s:5:"aring";s:3:"-92";s:6:"atilde";s:3:"-92";s:5:"colon";s:3:"-55";s:5:"comma";s:3:"-74";s:1:"e";s:3:"-92";s:6:"eacute";s:3:"-92";s:6:"ecaron";s:3:"-92";s:11:"ecircumflex";s:3:"-52";s:9:"edieresis";s:3:"-52";s:10:"edotaccent";s:3:"-92";s:6:"egrave";s:3:"-52";s:7:"emacron";s:3:"-52";s:7:"eogonek";s:3:"-92";s:6:"hyphen";s:3:"-74";s:1:"i";s:3:"-55";s:6:"iacute";s:3:"-55";s:7:"iogonek";s:3:"-55";s:1:"o";s:3:"-92";s:6:"oacute";s:3:"-92";s:11:"ocircumflex";s:3:"-92";s:9:"odieresis";s:3:"-92";s:6:"ograve";s:3:"-92";s:13:"ohungarumlaut";s:3:"-92";s:7:"omacron";s:3:"-92";s:6:"oslash";s:3:"-92";s:6:"otilde";s:3:"-92";s:6:"period";s:3:"-74";s:1:"r";s:3:"-55";s:6:"racute";s:3:"-55";s:6:"rcaron";s:3:"-55";s:12:"rcommaaccent";s:3:"-55";s:9:"semicolon";s:3:"-65";s:1:"u";s:3:"-55";s:6:"uacute";s:3:"-55";s:11:"ucircumflex";s:3:"-55";s:9:"udieresis";s:3:"-55";s:6:"ugrave";s:3:"-55";s:13:"uhungarumlaut";s:3:"-55";s:7:"umacron";s:3:"-55";s:7:"uogonek";s:3:"-55";s:5:"uring";s:3:"-55";s:1:"w";s:3:"-74";s:1:"y";s:3:"-74";s:6:"yacute";s:3:"-74";s:9:"ydieresis";s:3:"-34";}s:1:"U";a:12:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:5:"comma";s:3:"-25";s:6:"period";s:3:"-25";}s:6:"Uacute";a:12:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:5:"comma";s:3:"-25";s:6:"period";s:3:"-25";}s:11:"Ucircumflex";a:12:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:5:"comma";s:3:"-25";s:6:"period";s:3:"-25";}s:9:"Udieresis";a:12:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:5:"comma";s:3:"-25";s:6:"period";s:3:"-25";}s:6:"Ugrave";a:12:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:5:"comma";s:3:"-25";s:6:"period";s:3:"-25";}s:13:"Uhungarumlaut";a:12:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:5:"comma";s:3:"-25";s:6:"period";s:3:"-25";}s:7:"Umacron";a:12:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:5:"comma";s:3:"-25";s:6:"period";s:3:"-25";}s:7:"Uogonek";a:12:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:5:"comma";s:3:"-25";s:6:"period";s:3:"-25";}s:5:"Uring";a:12:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:5:"comma";s:3:"-25";s:6:"period";s:3:"-25";}s:1:"V";a:68:{s:1:"A";s:3:"-60";s:6:"Aacute";s:3:"-60";s:6:"Abreve";s:3:"-60";s:11:"Acircumflex";s:3:"-60";s:9:"Adieresis";s:3:"-60";s:6:"Agrave";s:3:"-60";s:7:"Amacron";s:3:"-60";s:7:"Aogonek";s:3:"-60";s:5:"Aring";s:3:"-60";s:6:"Atilde";s:3:"-60";s:1:"O";s:3:"-30";s:6:"Oacute";s:3:"-30";s:11:"Ocircumflex";s:3:"-30";s:9:"Odieresis";s:3:"-30";s:6:"Ograve";s:3:"-30";s:13:"Ohungarumlaut";s:3:"-30";s:7:"Omacron";s:3:"-30";s:6:"Oslash";s:3:"-30";s:6:"Otilde";s:3:"-30";s:1:"a";s:4:"-111";s:6:"aacute";s:4:"-111";s:6:"abreve";s:4:"-111";s:11:"acircumflex";s:4:"-111";s:9:"adieresis";s:4:"-111";s:6:"agrave";s:4:"-111";s:7:"amacron";s:4:"-111";s:7:"aogonek";s:4:"-111";s:5:"aring";s:4:"-111";s:6:"atilde";s:4:"-111";s:5:"colon";s:3:"-65";s:5:"comma";s:4:"-129";s:1:"e";s:4:"-111";s:6:"eacute";s:4:"-111";s:6:"ecaron";s:4:"-111";s:11:"ecircumflex";s:4:"-111";s:9:"edieresis";s:3:"-71";s:10:"edotaccent";s:4:"-111";s:6:"egrave";s:3:"-71";s:7:"emacron";s:3:"-71";s:7:"eogonek";s:4:"-111";s:6:"hyphen";s:3:"-55";s:1:"i";s:3:"-74";s:6:"iacute";s:3:"-74";s:11:"icircumflex";s:3:"-34";s:9:"idieresis";s:3:"-34";s:6:"igrave";s:3:"-34";s:7:"imacron";s:3:"-34";s:7:"iogonek";s:3:"-74";s:1:"o";s:4:"-111";s:6:"oacute";s:4:"-111";s:11:"ocircumflex";s:4:"-111";s:9:"odieresis";s:4:"-111";s:6:"ograve";s:4:"-111";s:13:"ohungarumlaut";s:4:"-111";s:7:"omacron";s:4:"-111";s:6:"oslash";s:4:"-111";s:6:"otilde";s:4:"-111";s:6:"period";s:4:"-129";s:9:"semicolon";s:3:"-74";s:1:"u";s:3:"-74";s:6:"uacute";s:3:"-74";s:11:"ucircumflex";s:3:"-74";s:9:"udieresis";s:3:"-74";s:6:"ugrave";s:3:"-74";s:13:"uhungarumlaut";s:3:"-74";s:7:"umacron";s:3:"-74";s:7:"uogonek";s:3:"-74";s:5:"uring";s:3:"-74";}s:1:"W";a:67:{s:1:"A";s:3:"-60";s:6:"Aacute";s:3:"-60";s:6:"Abreve";s:3:"-60";s:11:"Acircumflex";s:3:"-60";s:9:"Adieresis";s:3:"-60";s:6:"Agrave";s:3:"-60";s:7:"Amacron";s:3:"-60";s:7:"Aogonek";s:3:"-60";s:5:"Aring";s:3:"-60";s:6:"Atilde";s:3:"-60";s:1:"O";s:3:"-25";s:6:"Oacute";s:3:"-25";s:11:"Ocircumflex";s:3:"-25";s:9:"Odieresis";s:3:"-25";s:6:"Ograve";s:3:"-25";s:13:"Ohungarumlaut";s:3:"-25";s:7:"Omacron";s:3:"-25";s:6:"Oslash";s:3:"-25";s:6:"Otilde";s:3:"-25";s:1:"a";s:3:"-92";s:6:"aacute";s:3:"-92";s:6:"abreve";s:3:"-92";s:11:"acircumflex";s:3:"-92";s:9:"adieresis";s:3:"-92";s:6:"agrave";s:3:"-92";s:7:"amacron";s:3:"-92";s:7:"aogonek";s:3:"-92";s:5:"aring";s:3:"-92";s:6:"atilde";s:3:"-92";s:5:"colon";s:3:"-65";s:5:"comma";s:3:"-92";s:1:"e";s:3:"-92";s:6:"eacute";s:3:"-92";s:6:"ecaron";s:3:"-92";s:11:"ecircumflex";s:3:"-92";s:9:"edieresis";s:3:"-52";s:10:"edotaccent";s:3:"-92";s:6:"egrave";s:3:"-52";s:7:"emacron";s:3:"-52";s:7:"eogonek";s:3:"-92";s:6:"hyphen";s:3:"-37";s:1:"i";s:3:"-55";s:6:"iacute";s:3:"-55";s:7:"iogonek";s:3:"-55";s:1:"o";s:3:"-92";s:6:"oacute";s:3:"-92";s:11:"ocircumflex";s:3:"-92";s:9:"odieresis";s:3:"-92";s:6:"ograve";s:3:"-92";s:13:"ohungarumlaut";s:3:"-92";s:7:"omacron";s:3:"-92";s:6:"oslash";s:3:"-92";s:6:"otilde";s:3:"-92";s:6:"period";s:3:"-92";s:9:"semicolon";s:3:"-65";s:1:"u";s:3:"-55";s:6:"uacute";s:3:"-55";s:11:"ucircumflex";s:3:"-55";s:9:"udieresis";s:3:"-55";s:6:"ugrave";s:3:"-55";s:13:"uhungarumlaut";s:3:"-55";s:7:"umacron";s:3:"-55";s:7:"uogonek";s:3:"-55";s:5:"uring";s:3:"-55";s:1:"y";s:3:"-70";s:6:"yacute";s:3:"-70";s:9:"ydieresis";s:3:"-70";}s:1:"Y";a:68:{s:1:"A";s:3:"-50";s:6:"Aacute";s:3:"-50";s:6:"Abreve";s:3:"-50";s:11:"Acircumflex";s:3:"-50";s:9:"Adieresis";s:3:"-50";s:6:"Agrave";s:3:"-50";s:7:"Amacron";s:3:"-50";s:7:"Aogonek";s:3:"-50";s:5:"Aring";s:3:"-50";s:6:"Atilde";s:3:"-50";s:1:"O";s:3:"-15";s:6:"Oacute";s:3:"-15";s:11:"Ocircumflex";s:3:"-15";s:9:"Odieresis";s:3:"-15";s:6:"Ograve";s:3:"-15";s:13:"Ohungarumlaut";s:3:"-15";s:7:"Omacron";s:3:"-15";s:6:"Oslash";s:3:"-15";s:6:"Otilde";s:3:"-15";s:1:"a";s:3:"-92";s:6:"aacute";s:3:"-92";s:6:"abreve";s:3:"-92";s:11:"acircumflex";s:3:"-92";s:9:"adieresis";s:3:"-92";s:6:"agrave";s:3:"-92";s:7:"amacron";s:3:"-92";s:7:"aogonek";s:3:"-92";s:5:"aring";s:3:"-92";s:6:"atilde";s:3:"-92";s:5:"colon";s:3:"-65";s:5:"comma";s:3:"-92";s:1:"e";s:3:"-92";s:6:"eacute";s:3:"-92";s:6:"ecaron";s:3:"-92";s:11:"ecircumflex";s:3:"-92";s:9:"edieresis";s:3:"-52";s:10:"edotaccent";s:3:"-92";s:6:"egrave";s:3:"-52";s:7:"emacron";s:3:"-52";s:7:"eogonek";s:3:"-92";s:6:"hyphen";s:3:"-74";s:1:"i";s:3:"-74";s:6:"iacute";s:3:"-74";s:11:"icircumflex";s:3:"-34";s:9:"idieresis";s:3:"-34";s:6:"igrave";s:3:"-34";s:7:"imacron";s:3:"-34";s:7:"iogonek";s:3:"-74";s:1:"o";s:3:"-92";s:6:"oacute";s:3:"-92";s:11:"ocircumflex";s:3:"-92";s:9:"odieresis";s:3:"-92";s:6:"ograve";s:3:"-92";s:13:"ohungarumlaut";s:3:"-92";s:7:"omacron";s:3:"-92";s:6:"oslash";s:3:"-92";s:6:"otilde";s:3:"-92";s:6:"period";s:3:"-92";s:9:"semicolon";s:3:"-65";s:1:"u";s:3:"-92";s:6:"uacute";s:3:"-92";s:11:"ucircumflex";s:3:"-92";s:9:"udieresis";s:3:"-92";s:6:"ugrave";s:3:"-92";s:13:"uhungarumlaut";s:3:"-92";s:7:"umacron";s:3:"-92";s:7:"uogonek";s:3:"-92";s:5:"uring";s:3:"-92";}s:6:"Yacute";a:68:{s:1:"A";s:3:"-50";s:6:"Aacute";s:3:"-50";s:6:"Abreve";s:3:"-50";s:11:"Acircumflex";s:3:"-50";s:9:"Adieresis";s:3:"-50";s:6:"Agrave";s:3:"-50";s:7:"Amacron";s:3:"-50";s:7:"Aogonek";s:3:"-50";s:5:"Aring";s:3:"-50";s:6:"Atilde";s:3:"-50";s:1:"O";s:3:"-15";s:6:"Oacute";s:3:"-15";s:11:"Ocircumflex";s:3:"-15";s:9:"Odieresis";s:3:"-15";s:6:"Ograve";s:3:"-15";s:13:"Ohungarumlaut";s:3:"-15";s:7:"Omacron";s:3:"-15";s:6:"Oslash";s:3:"-15";s:6:"Otilde";s:3:"-15";s:1:"a";s:3:"-92";s:6:"aacute";s:3:"-92";s:6:"abreve";s:3:"-92";s:11:"acircumflex";s:3:"-92";s:9:"adieresis";s:3:"-92";s:6:"agrave";s:3:"-92";s:7:"amacron";s:3:"-92";s:7:"aogonek";s:3:"-92";s:5:"aring";s:3:"-92";s:6:"atilde";s:3:"-92";s:5:"colon";s:3:"-65";s:5:"comma";s:3:"-92";s:1:"e";s:3:"-92";s:6:"eacute";s:3:"-92";s:6:"ecaron";s:3:"-92";s:11:"ecircumflex";s:3:"-92";s:9:"edieresis";s:3:"-52";s:10:"edotaccent";s:3:"-92";s:6:"egrave";s:3:"-52";s:7:"emacron";s:3:"-52";s:7:"eogonek";s:3:"-92";s:6:"hyphen";s:3:"-74";s:1:"i";s:3:"-74";s:6:"iacute";s:3:"-74";s:11:"icircumflex";s:3:"-34";s:9:"idieresis";s:3:"-34";s:6:"igrave";s:3:"-34";s:7:"imacron";s:3:"-34";s:7:"iogonek";s:3:"-74";s:1:"o";s:3:"-92";s:6:"oacute";s:3:"-92";s:11:"ocircumflex";s:3:"-92";s:9:"odieresis";s:3:"-92";s:6:"ograve";s:3:"-92";s:13:"ohungarumlaut";s:3:"-92";s:7:"omacron";s:3:"-92";s:6:"oslash";s:3:"-92";s:6:"otilde";s:3:"-92";s:6:"period";s:3:"-92";s:9:"semicolon";s:3:"-65";s:1:"u";s:3:"-92";s:6:"uacute";s:3:"-92";s:11:"ucircumflex";s:3:"-92";s:9:"udieresis";s:3:"-92";s:6:"ugrave";s:3:"-92";s:13:"uhungarumlaut";s:3:"-92";s:7:"umacron";s:3:"-92";s:7:"uogonek";s:3:"-92";s:5:"uring";s:3:"-92";}s:9:"Ydieresis";a:68:{s:1:"A";s:3:"-50";s:6:"Aacute";s:3:"-50";s:6:"Abreve";s:3:"-50";s:11:"Acircumflex";s:3:"-50";s:9:"Adieresis";s:3:"-50";s:6:"Agrave";s:3:"-50";s:7:"Amacron";s:3:"-50";s:7:"Aogonek";s:3:"-50";s:5:"Aring";s:3:"-50";s:6:"Atilde";s:3:"-50";s:1:"O";s:3:"-15";s:6:"Oacute";s:3:"-15";s:11:"Ocircumflex";s:3:"-15";s:9:"Odieresis";s:3:"-15";s:6:"Ograve";s:3:"-15";s:13:"Ohungarumlaut";s:3:"-15";s:7:"Omacron";s:3:"-15";s:6:"Oslash";s:3:"-15";s:6:"Otilde";s:3:"-15";s:1:"a";s:3:"-92";s:6:"aacute";s:3:"-92";s:6:"abreve";s:3:"-92";s:11:"acircumflex";s:3:"-92";s:9:"adieresis";s:3:"-92";s:6:"agrave";s:3:"-92";s:7:"amacron";s:3:"-92";s:7:"aogonek";s:3:"-92";s:5:"aring";s:3:"-92";s:6:"atilde";s:3:"-92";s:5:"colon";s:3:"-65";s:5:"comma";s:3:"-92";s:1:"e";s:3:"-92";s:6:"eacute";s:3:"-92";s:6:"ecaron";s:3:"-92";s:11:"ecircumflex";s:3:"-92";s:9:"edieresis";s:3:"-52";s:10:"edotaccent";s:3:"-92";s:6:"egrave";s:3:"-52";s:7:"emacron";s:3:"-52";s:7:"eogonek";s:3:"-92";s:6:"hyphen";s:3:"-74";s:1:"i";s:3:"-74";s:6:"iacute";s:3:"-74";s:11:"icircumflex";s:3:"-34";s:9:"idieresis";s:3:"-34";s:6:"igrave";s:3:"-34";s:7:"imacron";s:3:"-34";s:7:"iogonek";s:3:"-74";s:1:"o";s:3:"-92";s:6:"oacute";s:3:"-92";s:11:"ocircumflex";s:3:"-92";s:9:"odieresis";s:3:"-92";s:6:"ograve";s:3:"-92";s:13:"ohungarumlaut";s:3:"-92";s:7:"omacron";s:3:"-92";s:6:"oslash";s:3:"-92";s:6:"otilde";s:3:"-92";s:6:"period";s:3:"-92";s:9:"semicolon";s:3:"-65";s:1:"u";s:3:"-92";s:6:"uacute";s:3:"-92";s:11:"ucircumflex";s:3:"-92";s:9:"udieresis";s:3:"-92";s:6:"ugrave";s:3:"-92";s:13:"uhungarumlaut";s:3:"-92";s:7:"umacron";s:3:"-92";s:7:"uogonek";s:3:"-92";s:5:"uring";s:3:"-92";}s:1:"a";a:3:{s:1:"g";s:3:"-10";s:6:"gbreve";s:3:"-10";s:12:"gcommaaccent";s:3:"-10";}s:6:"aacute";a:3:{s:1:"g";s:3:"-10";s:6:"gbreve";s:3:"-10";s:12:"gcommaaccent";s:3:"-10";}s:6:"abreve";a:3:{s:1:"g";s:3:"-10";s:6:"gbreve";s:3:"-10";s:12:"gcommaaccent";s:3:"-10";}s:11:"acircumflex";a:3:{s:1:"g";s:3:"-10";s:6:"gbreve";s:3:"-10";s:12:"gcommaaccent";s:3:"-10";}s:9:"adieresis";a:3:{s:1:"g";s:3:"-10";s:6:"gbreve";s:3:"-10";s:12:"gcommaaccent";s:3:"-10";}s:6:"agrave";a:3:{s:1:"g";s:3:"-10";s:6:"gbreve";s:3:"-10";s:12:"gcommaaccent";s:3:"-10";}s:7:"amacron";a:3:{s:1:"g";s:3:"-10";s:6:"gbreve";s:3:"-10";s:12:"gcommaaccent";s:3:"-10";}s:7:"aogonek";a:3:{s:1:"g";s:3:"-10";s:6:"gbreve";s:3:"-10";s:12:"gcommaaccent";s:3:"-10";}s:5:"aring";a:3:{s:1:"g";s:3:"-10";s:6:"gbreve";s:3:"-10";s:12:"gcommaaccent";s:3:"-10";}s:6:"atilde";a:3:{s:1:"g";s:3:"-10";s:6:"gbreve";s:3:"-10";s:12:"gcommaaccent";s:3:"-10";}s:1:"b";a:10:{s:6:"period";s:3:"-40";s:1:"u";s:3:"-20";s:6:"uacute";s:3:"-20";s:11:"ucircumflex";s:3:"-20";s:9:"udieresis";s:3:"-20";s:6:"ugrave";s:3:"-20";s:13:"uhungarumlaut";s:3:"-20";s:7:"umacron";s:3:"-20";s:7:"uogonek";s:3:"-20";s:5:"uring";s:3:"-20";}s:1:"c";a:3:{s:1:"h";s:3:"-15";s:1:"k";s:3:"-20";s:12:"kcommaaccent";s:3:"-20";}s:6:"cacute";a:3:{s:1:"h";s:3:"-15";s:1:"k";s:3:"-20";s:12:"kcommaaccent";s:3:"-20";}s:6:"ccaron";a:3:{s:1:"h";s:3:"-15";s:1:"k";s:3:"-20";s:12:"kcommaaccent";s:3:"-20";}s:8:"ccedilla";a:3:{s:1:"h";s:3:"-15";s:1:"k";s:3:"-20";s:12:"kcommaaccent";s:3:"-20";}s:5:"comma";a:2:{s:13:"quotedblright";s:4:"-140";s:10:"quoteright";s:4:"-140";}s:1:"e";a:11:{s:5:"comma";s:3:"-10";s:1:"g";s:3:"-40";s:6:"gbreve";s:3:"-40";s:12:"gcommaaccent";s:3:"-40";s:6:"period";s:3:"-15";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"x";s:3:"-20";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:6:"eacute";a:11:{s:5:"comma";s:3:"-10";s:1:"g";s:3:"-40";s:6:"gbreve";s:3:"-40";s:12:"gcommaaccent";s:3:"-40";s:6:"period";s:3:"-15";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"x";s:3:"-20";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:6:"ecaron";a:11:{s:5:"comma";s:3:"-10";s:1:"g";s:3:"-40";s:6:"gbreve";s:3:"-40";s:12:"gcommaaccent";s:3:"-40";s:6:"period";s:3:"-15";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"x";s:3:"-20";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:11:"ecircumflex";a:11:{s:5:"comma";s:3:"-10";s:1:"g";s:3:"-40";s:6:"gbreve";s:3:"-40";s:12:"gcommaaccent";s:3:"-40";s:6:"period";s:3:"-15";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"x";s:3:"-20";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:9:"edieresis";a:11:{s:5:"comma";s:3:"-10";s:1:"g";s:3:"-40";s:6:"gbreve";s:3:"-40";s:12:"gcommaaccent";s:3:"-40";s:6:"period";s:3:"-15";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"x";s:3:"-20";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:10:"edotaccent";a:11:{s:5:"comma";s:3:"-10";s:1:"g";s:3:"-40";s:6:"gbreve";s:3:"-40";s:12:"gcommaaccent";s:3:"-40";s:6:"period";s:3:"-15";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"x";s:3:"-20";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:6:"egrave";a:11:{s:5:"comma";s:3:"-10";s:1:"g";s:3:"-40";s:6:"gbreve";s:3:"-40";s:12:"gcommaaccent";s:3:"-40";s:6:"period";s:3:"-15";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"x";s:3:"-20";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:7:"emacron";a:11:{s:5:"comma";s:3:"-10";s:1:"g";s:3:"-40";s:6:"gbreve";s:3:"-40";s:12:"gcommaaccent";s:3:"-40";s:6:"period";s:3:"-15";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"x";s:3:"-20";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:7:"eogonek";a:11:{s:5:"comma";s:3:"-10";s:1:"g";s:3:"-40";s:6:"gbreve";s:3:"-40";s:12:"gcommaaccent";s:3:"-40";s:6:"period";s:3:"-15";s:1:"v";s:3:"-15";s:1:"w";s:3:"-15";s:1:"x";s:3:"-20";s:1:"y";s:3:"-30";s:6:"yacute";s:3:"-30";s:9:"ydieresis";s:3:"-30";}s:1:"f";a:7:{s:5:"comma";s:3:"-10";s:8:"dotlessi";s:3:"-60";s:1:"f";s:3:"-18";s:1:"i";s:3:"-20";s:7:"iogonek";s:3:"-20";s:6:"period";s:3:"-15";s:10:"quoteright";s:2:"92";}s:1:"g";a:14:{s:5:"comma";s:3:"-10";s:1:"e";s:3:"-10";s:6:"eacute";s:3:"-10";s:6:"ecaron";s:3:"-10";s:11:"ecircumflex";s:3:"-10";s:9:"edieresis";s:3:"-10";s:10:"edotaccent";s:3:"-10";s:6:"egrave";s:3:"-10";s:7:"emacron";s:3:"-10";s:7:"eogonek";s:3:"-10";s:1:"g";s:3:"-10";s:6:"gbreve";s:3:"-10";s:12:"gcommaaccent";s:3:"-10";s:6:"period";s:3:"-15";}s:6:"gbreve";a:14:{s:5:"comma";s:3:"-10";s:1:"e";s:3:"-10";s:6:"eacute";s:3:"-10";s:6:"ecaron";s:3:"-10";s:11:"ecircumflex";s:3:"-10";s:9:"edieresis";s:3:"-10";s:10:"edotaccent";s:3:"-10";s:6:"egrave";s:3:"-10";s:7:"emacron";s:3:"-10";s:7:"eogonek";s:3:"-10";s:1:"g";s:3:"-10";s:6:"gbreve";s:3:"-10";s:12:"gcommaaccent";s:3:"-10";s:6:"period";s:3:"-15";}s:12:"gcommaaccent";a:14:{s:5:"comma";s:3:"-10";s:1:"e";s:3:"-10";s:6:"eacute";s:3:"-10";s:6:"ecaron";s:3:"-10";s:11:"ecircumflex";s:3:"-10";s:9:"edieresis";s:3:"-10";s:10:"edotaccent";s:3:"-10";s:6:"egrave";s:3:"-10";s:7:"emacron";s:3:"-10";s:7:"eogonek";s:3:"-10";s:1:"g";s:3:"-10";s:6:"gbreve";s:3:"-10";s:12:"gcommaaccent";s:3:"-10";s:6:"period";s:3:"-15";}s:1:"k";a:21:{s:1:"e";s:3:"-10";s:6:"eacute";s:3:"-10";s:6:"ecaron";s:3:"-10";s:11:"ecircumflex";s:3:"-10";s:9:"edieresis";s:3:"-10";s:10:"edotaccent";s:3:"-10";s:6:"egrave";s:3:"-10";s:7:"emacron";s:3:"-10";s:7:"eogonek";s:3:"-10";s:1:"o";s:3:"-10";s:6:"oacute";s:3:"-10";s:11:"ocircumflex";s:3:"-10";s:9:"odieresis";s:3:"-10";s:6:"ograve";s:3:"-10";s:13:"ohungarumlaut";s:3:"-10";s:7:"omacron";s:3:"-10";s:6:"oslash";s:3:"-10";s:6:"otilde";s:3:"-10";s:1:"y";s:3:"-10";s:6:"yacute";s:3:"-10";s:9:"ydieresis";s:3:"-10";}s:12:"kcommaaccent";a:21:{s:1:"e";s:3:"-10";s:6:"eacute";s:3:"-10";s:6:"ecaron";s:3:"-10";s:11:"ecircumflex";s:3:"-10";s:9:"edieresis";s:3:"-10";s:10:"edotaccent";s:3:"-10";s:6:"egrave";s:3:"-10";s:7:"emacron";s:3:"-10";s:7:"eogonek";s:3:"-10";s:1:"o";s:3:"-10";s:6:"oacute";s:3:"-10";s:11:"ocircumflex";s:3:"-10";s:9:"odieresis";s:3:"-10";s:6:"ograve";s:3:"-10";s:13:"ohungarumlaut";s:3:"-10";s:7:"omacron";s:3:"-10";s:6:"oslash";s:3:"-10";s:6:"otilde";s:3:"-10";s:1:"y";s:3:"-10";s:6:"yacute";s:3:"-10";s:9:"ydieresis";s:3:"-10";}s:1:"n";a:1:{s:1:"v";s:3:"-40";}s:6:"nacute";a:1:{s:1:"v";s:3:"-40";}s:6:"ncaron";a:1:{s:1:"v";s:3:"-40";}s:12:"ncommaaccent";a:1:{s:1:"v";s:3:"-40";}s:6:"ntilde";a:1:{s:1:"v";s:3:"-40";}s:1:"o";a:4:{s:1:"g";s:3:"-10";s:6:"gbreve";s:3:"-10";s:12:"gcommaaccent";s:3:"-10";s:1:"v";s:3:"-10";}s:6:"oacute";a:4:{s:1:"g";s:3:"-10";s:6:"gbreve";s:3:"-10";s:12:"gcommaaccent";s:3:"-10";s:1:"v";s:3:"-10";}s:11:"ocircumflex";a:4:{s:1:"g";s:3:"-10";s:6:"gbreve";s:3:"-10";s:12:"gcommaaccent";s:3:"-10";s:1:"v";s:3:"-10";}s:9:"odieresis";a:4:{s:1:"g";s:3:"-10";s:6:"gbreve";s:3:"-10";s:12:"gcommaaccent";s:3:"-10";s:1:"v";s:3:"-10";}s:6:"ograve";a:4:{s:1:"g";s:3:"-10";s:6:"gbreve";s:3:"-10";s:12:"gcommaaccent";s:3:"-10";s:1:"v";s:3:"-10";}s:13:"ohungarumlaut";a:4:{s:1:"g";s:3:"-10";s:6:"gbreve";s:3:"-10";s:12:"gcommaaccent";s:3:"-10";s:1:"v";s:3:"-10";}s:7:"omacron";a:4:{s:1:"g";s:3:"-10";s:6:"gbreve";s:3:"-10";s:12:"gcommaaccent";s:3:"-10";s:1:"v";s:3:"-10";}s:6:"oslash";a:4:{s:1:"g";s:3:"-10";s:6:"gbreve";s:3:"-10";s:12:"gcommaaccent";s:3:"-10";s:1:"v";s:3:"-10";}s:6:"otilde";a:4:{s:1:"g";s:3:"-10";s:6:"gbreve";s:3:"-10";s:12:"gcommaaccent";s:3:"-10";s:1:"v";s:3:"-10";}s:6:"period";a:2:{s:13:"quotedblright";s:4:"-140";s:10:"quoteright";s:4:"-140";}s:9:"quoteleft";a:1:{s:9:"quoteleft";s:4:"-111";}s:10:"quoteright";a:16:{s:1:"d";s:3:"-25";s:6:"dcroat";s:3:"-25";s:10:"quoteright";s:4:"-111";s:1:"r";s:3:"-25";s:6:"racute";s:3:"-25";s:6:"rcaron";s:3:"-25";s:12:"rcommaaccent";s:3:"-25";s:1:"s";s:3:"-40";s:6:"sacute";s:3:"-40";s:6:"scaron";s:3:"-40";s:8:"scedilla";s:3:"-40";s:12:"scommaaccent";s:3:"-40";s:5:"space";s:4:"-111";s:1:"t";s:3:"-30";s:12:"tcommaaccent";s:3:"-30";s:1:"v";s:3:"-10";}s:1:"r";a:46:{s:1:"a";s:3:"-15";s:6:"aacute";s:3:"-15";s:6:"abreve";s:3:"-15";s:11:"acircumflex";s:3:"-15";s:9:"adieresis";s:3:"-15";s:6:"agrave";s:3:"-15";s:7:"amacron";s:3:"-15";s:7:"aogonek";s:3:"-15";s:5:"aring";s:3:"-15";s:6:"atilde";s:3:"-15";s:1:"c";s:3:"-37";s:6:"cacute";s:3:"-37";s:6:"ccaron";s:3:"-37";s:8:"ccedilla";s:3:"-37";s:5:"comma";s:4:"-111";s:1:"d";s:3:"-37";s:6:"dcroat";s:3:"-37";s:1:"e";s:3:"-37";s:6:"eacute";s:3:"-37";s:6:"ecaron";s:3:"-37";s:11:"ecircumflex";s:3:"-37";s:9:"edieresis";s:3:"-37";s:10:"edotaccent";s:3:"-37";s:6:"egrave";s:3:"-37";s:7:"emacron";s:3:"-37";s:7:"eogonek";s:3:"-37";s:1:"g";s:3:"-37";s:6:"gbreve";s:3:"-37";s:12:"gcommaaccent";s:3:"-37";s:6:"hyphen";s:3:"-20";s:1:"o";s:3:"-45";s:6:"oacute";s:3:"-45";s:11:"ocircumflex";s:3:"-45";s:9:"odieresis";s:3:"-45";s:6:"ograve";s:3:"-45";s:13:"ohungarumlaut";s:3:"-45";s:7:"omacron";s:3:"-45";s:6:"oslash";s:3:"-45";s:6:"otilde";s:3:"-45";s:6:"period";s:4:"-111";s:1:"q";s:3:"-37";s:1:"s";s:3:"-10";s:6:"sacute";s:3:"-10";s:6:"scaron";s:3:"-10";s:8:"scedilla";s:3:"-10";s:12:"scommaaccent";s:3:"-10";}s:6:"racute";a:46:{s:1:"a";s:3:"-15";s:6:"aacute";s:3:"-15";s:6:"abreve";s:3:"-15";s:11:"acircumflex";s:3:"-15";s:9:"adieresis";s:3:"-15";s:6:"agrave";s:3:"-15";s:7:"amacron";s:3:"-15";s:7:"aogonek";s:3:"-15";s:5:"aring";s:3:"-15";s:6:"atilde";s:3:"-15";s:1:"c";s:3:"-37";s:6:"cacute";s:3:"-37";s:6:"ccaron";s:3:"-37";s:8:"ccedilla";s:3:"-37";s:5:"comma";s:4:"-111";s:1:"d";s:3:"-37";s:6:"dcroat";s:3:"-37";s:1:"e";s:3:"-37";s:6:"eacute";s:3:"-37";s:6:"ecaron";s:3:"-37";s:11:"ecircumflex";s:3:"-37";s:9:"edieresis";s:3:"-37";s:10:"edotaccent";s:3:"-37";s:6:"egrave";s:3:"-37";s:7:"emacron";s:3:"-37";s:7:"eogonek";s:3:"-37";s:1:"g";s:3:"-37";s:6:"gbreve";s:3:"-37";s:12:"gcommaaccent";s:3:"-37";s:6:"hyphen";s:3:"-20";s:1:"o";s:3:"-45";s:6:"oacute";s:3:"-45";s:11:"ocircumflex";s:3:"-45";s:9:"odieresis";s:3:"-45";s:6:"ograve";s:3:"-45";s:13:"ohungarumlaut";s:3:"-45";s:7:"omacron";s:3:"-45";s:6:"oslash";s:3:"-45";s:6:"otilde";s:3:"-45";s:6:"period";s:4:"-111";s:1:"q";s:3:"-37";s:1:"s";s:3:"-10";s:6:"sacute";s:3:"-10";s:6:"scaron";s:3:"-10";s:8:"scedilla";s:3:"-10";s:12:"scommaaccent";s:3:"-10";}s:6:"rcaron";a:46:{s:1:"a";s:3:"-15";s:6:"aacute";s:3:"-15";s:6:"abreve";s:3:"-15";s:11:"acircumflex";s:3:"-15";s:9:"adieresis";s:3:"-15";s:6:"agrave";s:3:"-15";s:7:"amacron";s:3:"-15";s:7:"aogonek";s:3:"-15";s:5:"aring";s:3:"-15";s:6:"atilde";s:3:"-15";s:1:"c";s:3:"-37";s:6:"cacute";s:3:"-37";s:6:"ccaron";s:3:"-37";s:8:"ccedilla";s:3:"-37";s:5:"comma";s:4:"-111";s:1:"d";s:3:"-37";s:6:"dcroat";s:3:"-37";s:1:"e";s:3:"-37";s:6:"eacute";s:3:"-37";s:6:"ecaron";s:3:"-37";s:11:"ecircumflex";s:3:"-37";s:9:"edieresis";s:3:"-37";s:10:"edotaccent";s:3:"-37";s:6:"egrave";s:3:"-37";s:7:"emacron";s:3:"-37";s:7:"eogonek";s:3:"-37";s:1:"g";s:3:"-37";s:6:"gbreve";s:3:"-37";s:12:"gcommaaccent";s:3:"-37";s:6:"hyphen";s:3:"-20";s:1:"o";s:3:"-45";s:6:"oacute";s:3:"-45";s:11:"ocircumflex";s:3:"-45";s:9:"odieresis";s:3:"-45";s:6:"ograve";s:3:"-45";s:13:"ohungarumlaut";s:3:"-45";s:7:"omacron";s:3:"-45";s:6:"oslash";s:3:"-45";s:6:"otilde";s:3:"-45";s:6:"period";s:4:"-111";s:1:"q";s:3:"-37";s:1:"s";s:3:"-10";s:6:"sacute";s:3:"-10";s:6:"scaron";s:3:"-10";s:8:"scedilla";s:3:"-10";s:12:"scommaaccent";s:3:"-10";}s:12:"rcommaaccent";a:46:{s:1:"a";s:3:"-15";s:6:"aacute";s:3:"-15";s:6:"abreve";s:3:"-15";s:11:"acircumflex";s:3:"-15";s:9:"adieresis";s:3:"-15";s:6:"agrave";s:3:"-15";s:7:"amacron";s:3:"-15";s:7:"aogonek";s:3:"-15";s:5:"aring";s:3:"-15";s:6:"atilde";s:3:"-15";s:1:"c";s:3:"-37";s:6:"cacute";s:3:"-37";s:6:"ccaron";s:3:"-37";s:8:"ccedilla";s:3:"-37";s:5:"comma";s:4:"-111";s:1:"d";s:3:"-37";s:6:"dcroat";s:3:"-37";s:1:"e";s:3:"-37";s:6:"eacute";s:3:"-37";s:6:"ecaron";s:3:"-37";s:11:"ecircumflex";s:3:"-37";s:9:"edieresis";s:3:"-37";s:10:"edotaccent";s:3:"-37";s:6:"egrave";s:3:"-37";s:7:"emacron";s:3:"-37";s:7:"eogonek";s:3:"-37";s:1:"g";s:3:"-37";s:6:"gbreve";s:3:"-37";s:12:"gcommaaccent";s:3:"-37";s:6:"hyphen";s:3:"-20";s:1:"o";s:3:"-45";s:6:"oacute";s:3:"-45";s:11:"ocircumflex";s:3:"-45";s:9:"odieresis";s:3:"-45";s:6:"ograve";s:3:"-45";s:13:"ohungarumlaut";s:3:"-45";s:7:"omacron";s:3:"-45";s:6:"oslash";s:3:"-45";s:6:"otilde";s:3:"-45";s:6:"period";s:4:"-111";s:1:"q";s:3:"-37";s:1:"s";s:3:"-10";s:6:"sacute";s:3:"-10";s:6:"scaron";s:3:"-10";s:8:"scedilla";s:3:"-10";s:12:"scommaaccent";s:3:"-10";}s:5:"space";a:18:{s:1:"A";s:3:"-18";s:6:"Aacute";s:3:"-18";s:6:"Abreve";s:3:"-18";s:11:"Acircumflex";s:3:"-18";s:9:"Adieresis";s:3:"-18";s:6:"Agrave";s:3:"-18";s:7:"Amacron";s:3:"-18";s:7:"Aogonek";s:3:"-18";s:5:"Aring";s:3:"-18";s:6:"Atilde";s:3:"-18";s:1:"T";s:3:"-18";s:6:"Tcaron";s:3:"-18";s:12:"Tcommaaccent";s:3:"-18";s:1:"V";s:3:"-35";s:1:"W";s:3:"-40";s:1:"Y";s:3:"-75";s:6:"Yacute";s:3:"-75";s:9:"Ydieresis";s:3:"-75";}s:1:"v";a:2:{s:5:"comma";s:3:"-74";s:6:"period";s:3:"-74";}s:1:"w";a:2:{s:5:"comma";s:3:"-74";s:6:"period";s:3:"-74";}s:1:"y";a:2:{s:5:"comma";s:3:"-55";s:6:"period";s:3:"-55";}s:6:"yacute";a:2:{s:5:"comma";s:3:"-55";s:6:"period";s:3:"-55";}s:9:"ydieresis";a:2:{s:5:"comma";s:3:"-55";s:6:"period";s:3:"-55";}}s:9:"_version_";i:1;}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/php_Times-Roman.afm b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/php_Times-Roman.afm new file mode 100755 index 00000000..0f30f290 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/php_Times-Roman.afm @@ -0,0 +1 @@ +a:22:{s:8:"FontName";s:11:"Times-Roman";s:8:"FullName";s:11:"Times Roman";s:10:"FamilyName";s:5:"Times";s:6:"Weight";s:5:"Roman";s:11:"ItalicAngle";s:1:"0";s:12:"IsFixedPitch";s:5:"false";s:12:"CharacterSet";s:13:"ExtendedRoman";s:8:"FontBBox";a:4:{i:0;s:4:"-168";i:1;s:4:"-218";i:2;s:4:"1000";i:3;s:3:"898";}s:17:"UnderlinePosition";s:4:"-100";s:18:"UnderlineThickness";s:2:"50";s:7:"Version";s:7:"002.000";s:14:"EncodingScheme";s:21:"AdobeStandardEncoding";s:9:"CapHeight";s:3:"662";s:7:"XHeight";s:3:"450";s:8:"Ascender";s:3:"683";s:9:"Descender";s:4:"-217";s:5:"StdHW";s:2:"28";s:5:"StdVW";s:2:"84";s:16:"StartCharMetrics";s:3:"315";s:1:"C";a:464:{i:32;a:4:{s:1:"C";s:2:"32";s:2:"WX";s:3:"250";s:1:"N";s:5:"space";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:1:"0";i:2;s:1:"0";i:3;s:1:"0";}}s:5:"space";a:4:{s:1:"C";s:2:"32";s:2:"WX";s:3:"250";s:1:"N";s:5:"space";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:1:"0";i:2;s:1:"0";i:3;s:1:"0";}}i:33;a:4:{s:1:"C";s:2:"33";s:2:"WX";s:3:"333";s:1:"N";s:6:"exclam";s:1:"B";a:4:{i:0;s:3:"130";i:1;s:2:"-9";i:2;s:3:"238";i:3;s:3:"676";}}s:6:"exclam";a:4:{s:1:"C";s:2:"33";s:2:"WX";s:3:"333";s:1:"N";s:6:"exclam";s:1:"B";a:4:{i:0;s:3:"130";i:1;s:2:"-9";i:2;s:3:"238";i:3;s:3:"676";}}i:34;a:4:{s:1:"C";s:2:"34";s:2:"WX";s:3:"408";s:1:"N";s:8:"quotedbl";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:3:"431";i:2;s:3:"331";i:3;s:3:"676";}}s:8:"quotedbl";a:4:{s:1:"C";s:2:"34";s:2:"WX";s:3:"408";s:1:"N";s:8:"quotedbl";s:1:"B";a:4:{i:0;s:2:"77";i:1;s:3:"431";i:2;s:3:"331";i:3;s:3:"676";}}i:35;a:4:{s:1:"C";s:2:"35";s:2:"WX";s:3:"500";s:1:"N";s:10:"numbersign";s:1:"B";a:4:{i:0;s:1:"5";i:1;s:1:"0";i:2;s:3:"496";i:3;s:3:"662";}}s:10:"numbersign";a:4:{s:1:"C";s:2:"35";s:2:"WX";s:3:"500";s:1:"N";s:10:"numbersign";s:1:"B";a:4:{i:0;s:1:"5";i:1;s:1:"0";i:2;s:3:"496";i:3;s:3:"662";}}i:36;a:4:{s:1:"C";s:2:"36";s:2:"WX";s:3:"500";s:1:"N";s:6:"dollar";s:1:"B";a:4:{i:0;s:2:"44";i:1;s:3:"-87";i:2;s:3:"457";i:3;s:3:"727";}}s:6:"dollar";a:4:{s:1:"C";s:2:"36";s:2:"WX";s:3:"500";s:1:"N";s:6:"dollar";s:1:"B";a:4:{i:0;s:2:"44";i:1;s:3:"-87";i:2;s:3:"457";i:3;s:3:"727";}}i:37;a:4:{s:1:"C";s:2:"37";s:2:"WX";s:3:"833";s:1:"N";s:7:"percent";s:1:"B";a:4:{i:0;s:2:"61";i:1;s:3:"-13";i:2;s:3:"772";i:3;s:3:"676";}}s:7:"percent";a:4:{s:1:"C";s:2:"37";s:2:"WX";s:3:"833";s:1:"N";s:7:"percent";s:1:"B";a:4:{i:0;s:2:"61";i:1;s:3:"-13";i:2;s:3:"772";i:3;s:3:"676";}}i:38;a:4:{s:1:"C";s:2:"38";s:2:"WX";s:3:"778";s:1:"N";s:9:"ampersand";s:1:"B";a:4:{i:0;s:2:"42";i:1;s:3:"-13";i:2;s:3:"750";i:3;s:3:"676";}}s:9:"ampersand";a:4:{s:1:"C";s:2:"38";s:2:"WX";s:3:"778";s:1:"N";s:9:"ampersand";s:1:"B";a:4:{i:0;s:2:"42";i:1;s:3:"-13";i:2;s:3:"750";i:3;s:3:"676";}}i:39;a:4:{s:1:"C";s:2:"39";s:2:"WX";s:3:"333";s:1:"N";s:10:"quoteright";s:1:"B";a:4:{i:0;s:2:"79";i:1;s:3:"433";i:2;s:3:"218";i:3;s:3:"676";}}s:10:"quoteright";a:4:{s:1:"C";s:2:"39";s:2:"WX";s:3:"333";s:1:"N";s:10:"quoteright";s:1:"B";a:4:{i:0;s:2:"79";i:1;s:3:"433";i:2;s:3:"218";i:3;s:3:"676";}}i:40;a:4:{s:1:"C";s:2:"40";s:2:"WX";s:3:"333";s:1:"N";s:9:"parenleft";s:1:"B";a:4:{i:0;s:2:"48";i:1;s:4:"-177";i:2;s:3:"304";i:3;s:3:"676";}}s:9:"parenleft";a:4:{s:1:"C";s:2:"40";s:2:"WX";s:3:"333";s:1:"N";s:9:"parenleft";s:1:"B";a:4:{i:0;s:2:"48";i:1;s:4:"-177";i:2;s:3:"304";i:3;s:3:"676";}}i:41;a:4:{s:1:"C";s:2:"41";s:2:"WX";s:3:"333";s:1:"N";s:10:"parenright";s:1:"B";a:4:{i:0;s:2:"29";i:1;s:4:"-177";i:2;s:3:"285";i:3;s:3:"676";}}s:10:"parenright";a:4:{s:1:"C";s:2:"41";s:2:"WX";s:3:"333";s:1:"N";s:10:"parenright";s:1:"B";a:4:{i:0;s:2:"29";i:1;s:4:"-177";i:2;s:3:"285";i:3;s:3:"676";}}i:42;a:4:{s:1:"C";s:2:"42";s:2:"WX";s:3:"500";s:1:"N";s:8:"asterisk";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:3:"265";i:2;s:3:"432";i:3;s:3:"676";}}s:8:"asterisk";a:4:{s:1:"C";s:2:"42";s:2:"WX";s:3:"500";s:1:"N";s:8:"asterisk";s:1:"B";a:4:{i:0;s:2:"69";i:1;s:3:"265";i:2;s:3:"432";i:3;s:3:"676";}}i:43;a:4:{s:1:"C";s:2:"43";s:2:"WX";s:3:"564";s:1:"N";s:4:"plus";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:1:"0";i:2;s:3:"534";i:3;s:3:"506";}}s:4:"plus";a:4:{s:1:"C";s:2:"43";s:2:"WX";s:3:"564";s:1:"N";s:4:"plus";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:1:"0";i:2;s:3:"534";i:3;s:3:"506";}}i:44;a:4:{s:1:"C";s:2:"44";s:2:"WX";s:3:"250";s:1:"N";s:5:"comma";s:1:"B";a:4:{i:0;s:2:"56";i:1;s:4:"-141";i:2;s:3:"195";i:3;s:3:"102";}}s:5:"comma";a:4:{s:1:"C";s:2:"44";s:2:"WX";s:3:"250";s:1:"N";s:5:"comma";s:1:"B";a:4:{i:0;s:2:"56";i:1;s:4:"-141";i:2;s:3:"195";i:3;s:3:"102";}}i:45;a:4:{s:1:"C";s:2:"45";s:2:"WX";s:3:"333";s:1:"N";s:6:"hyphen";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:3:"194";i:2;s:3:"285";i:3;s:3:"257";}}s:6:"hyphen";a:4:{s:1:"C";s:2:"45";s:2:"WX";s:3:"333";s:1:"N";s:6:"hyphen";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:3:"194";i:2;s:3:"285";i:3;s:3:"257";}}i:46;a:4:{s:1:"C";s:2:"46";s:2:"WX";s:3:"250";s:1:"N";s:6:"period";s:1:"B";a:4:{i:0;s:2:"70";i:1;s:3:"-11";i:2;s:3:"181";i:3;s:3:"100";}}s:6:"period";a:4:{s:1:"C";s:2:"46";s:2:"WX";s:3:"250";s:1:"N";s:6:"period";s:1:"B";a:4:{i:0;s:2:"70";i:1;s:3:"-11";i:2;s:3:"181";i:3;s:3:"100";}}i:47;a:4:{s:1:"C";s:2:"47";s:2:"WX";s:3:"278";s:1:"N";s:5:"slash";s:1:"B";a:4:{i:0;s:2:"-9";i:1;s:3:"-14";i:2;s:3:"287";i:3;s:3:"676";}}s:5:"slash";a:4:{s:1:"C";s:2:"47";s:2:"WX";s:3:"278";s:1:"N";s:5:"slash";s:1:"B";a:4:{i:0;s:2:"-9";i:1;s:3:"-14";i:2;s:3:"287";i:3;s:3:"676";}}i:48;a:4:{s:1:"C";s:2:"48";s:2:"WX";s:3:"500";s:1:"N";s:4:"zero";s:1:"B";a:4:{i:0;s:2:"24";i:1;s:3:"-14";i:2;s:3:"476";i:3;s:3:"676";}}s:4:"zero";a:4:{s:1:"C";s:2:"48";s:2:"WX";s:3:"500";s:1:"N";s:4:"zero";s:1:"B";a:4:{i:0;s:2:"24";i:1;s:3:"-14";i:2;s:3:"476";i:3;s:3:"676";}}i:49;a:4:{s:1:"C";s:2:"49";s:2:"WX";s:3:"500";s:1:"N";s:3:"one";s:1:"B";a:4:{i:0;s:3:"111";i:1;s:1:"0";i:2;s:3:"394";i:3;s:3:"676";}}s:3:"one";a:4:{s:1:"C";s:2:"49";s:2:"WX";s:3:"500";s:1:"N";s:3:"one";s:1:"B";a:4:{i:0;s:3:"111";i:1;s:1:"0";i:2;s:3:"394";i:3;s:3:"676";}}i:50;a:4:{s:1:"C";s:2:"50";s:2:"WX";s:3:"500";s:1:"N";s:3:"two";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:1:"0";i:2;s:3:"475";i:3;s:3:"676";}}s:3:"two";a:4:{s:1:"C";s:2:"50";s:2:"WX";s:3:"500";s:1:"N";s:3:"two";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:1:"0";i:2;s:3:"475";i:3;s:3:"676";}}i:51;a:4:{s:1:"C";s:2:"51";s:2:"WX";s:3:"500";s:1:"N";s:5:"three";s:1:"B";a:4:{i:0;s:2:"43";i:1;s:3:"-14";i:2;s:3:"431";i:3;s:3:"676";}}s:5:"three";a:4:{s:1:"C";s:2:"51";s:2:"WX";s:3:"500";s:1:"N";s:5:"three";s:1:"B";a:4:{i:0;s:2:"43";i:1;s:3:"-14";i:2;s:3:"431";i:3;s:3:"676";}}i:52;a:4:{s:1:"C";s:2:"52";s:2:"WX";s:3:"500";s:1:"N";s:4:"four";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:1:"0";i:2;s:3:"472";i:3;s:3:"676";}}s:4:"four";a:4:{s:1:"C";s:2:"52";s:2:"WX";s:3:"500";s:1:"N";s:4:"four";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:1:"0";i:2;s:3:"472";i:3;s:3:"676";}}i:53;a:4:{s:1:"C";s:2:"53";s:2:"WX";s:3:"500";s:1:"N";s:4:"five";s:1:"B";a:4:{i:0;s:2:"32";i:1;s:3:"-14";i:2;s:3:"438";i:3;s:3:"688";}}s:4:"five";a:4:{s:1:"C";s:2:"53";s:2:"WX";s:3:"500";s:1:"N";s:4:"five";s:1:"B";a:4:{i:0;s:2:"32";i:1;s:3:"-14";i:2;s:3:"438";i:3;s:3:"688";}}i:54;a:4:{s:1:"C";s:2:"54";s:2:"WX";s:3:"500";s:1:"N";s:3:"six";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-14";i:2;s:3:"468";i:3;s:3:"684";}}s:3:"six";a:4:{s:1:"C";s:2:"54";s:2:"WX";s:3:"500";s:1:"N";s:3:"six";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-14";i:2;s:3:"468";i:3;s:3:"684";}}i:55;a:4:{s:1:"C";s:2:"55";s:2:"WX";s:3:"500";s:1:"N";s:5:"seven";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:2:"-8";i:2;s:3:"449";i:3;s:3:"662";}}s:5:"seven";a:4:{s:1:"C";s:2:"55";s:2:"WX";s:3:"500";s:1:"N";s:5:"seven";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:2:"-8";i:2;s:3:"449";i:3;s:3:"662";}}i:56;a:4:{s:1:"C";s:2:"56";s:2:"WX";s:3:"500";s:1:"N";s:5:"eight";s:1:"B";a:4:{i:0;s:2:"56";i:1;s:3:"-14";i:2;s:3:"445";i:3;s:3:"676";}}s:5:"eight";a:4:{s:1:"C";s:2:"56";s:2:"WX";s:3:"500";s:1:"N";s:5:"eight";s:1:"B";a:4:{i:0;s:2:"56";i:1;s:3:"-14";i:2;s:3:"445";i:3;s:3:"676";}}i:57;a:4:{s:1:"C";s:2:"57";s:2:"WX";s:3:"500";s:1:"N";s:4:"nine";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:3:"-22";i:2;s:3:"459";i:3;s:3:"676";}}s:4:"nine";a:4:{s:1:"C";s:2:"57";s:2:"WX";s:3:"500";s:1:"N";s:4:"nine";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:3:"-22";i:2;s:3:"459";i:3;s:3:"676";}}i:58;a:4:{s:1:"C";s:2:"58";s:2:"WX";s:3:"278";s:1:"N";s:5:"colon";s:1:"B";a:4:{i:0;s:2:"81";i:1;s:3:"-11";i:2;s:3:"192";i:3;s:3:"459";}}s:5:"colon";a:4:{s:1:"C";s:2:"58";s:2:"WX";s:3:"278";s:1:"N";s:5:"colon";s:1:"B";a:4:{i:0;s:2:"81";i:1;s:3:"-11";i:2;s:3:"192";i:3;s:3:"459";}}i:59;a:4:{s:1:"C";s:2:"59";s:2:"WX";s:3:"278";s:1:"N";s:9:"semicolon";s:1:"B";a:4:{i:0;s:2:"80";i:1;s:4:"-141";i:2;s:3:"219";i:3;s:3:"459";}}s:9:"semicolon";a:4:{s:1:"C";s:2:"59";s:2:"WX";s:3:"278";s:1:"N";s:9:"semicolon";s:1:"B";a:4:{i:0;s:2:"80";i:1;s:4:"-141";i:2;s:3:"219";i:3;s:3:"459";}}i:60;a:4:{s:1:"C";s:2:"60";s:2:"WX";s:3:"564";s:1:"N";s:4:"less";s:1:"B";a:4:{i:0;s:2:"28";i:1;s:2:"-8";i:2;s:3:"536";i:3;s:3:"514";}}s:4:"less";a:4:{s:1:"C";s:2:"60";s:2:"WX";s:3:"564";s:1:"N";s:4:"less";s:1:"B";a:4:{i:0;s:2:"28";i:1;s:2:"-8";i:2;s:3:"536";i:3;s:3:"514";}}i:61;a:4:{s:1:"C";s:2:"61";s:2:"WX";s:3:"564";s:1:"N";s:5:"equal";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:3:"120";i:2;s:3:"534";i:3;s:3:"386";}}s:5:"equal";a:4:{s:1:"C";s:2:"61";s:2:"WX";s:3:"564";s:1:"N";s:5:"equal";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:3:"120";i:2;s:3:"534";i:3;s:3:"386";}}i:62;a:4:{s:1:"C";s:2:"62";s:2:"WX";s:3:"564";s:1:"N";s:7:"greater";s:1:"B";a:4:{i:0;s:2:"28";i:1;s:2:"-8";i:2;s:3:"536";i:3;s:3:"514";}}s:7:"greater";a:4:{s:1:"C";s:2:"62";s:2:"WX";s:3:"564";s:1:"N";s:7:"greater";s:1:"B";a:4:{i:0;s:2:"28";i:1;s:2:"-8";i:2;s:3:"536";i:3;s:3:"514";}}i:63;a:4:{s:1:"C";s:2:"63";s:2:"WX";s:3:"444";s:1:"N";s:8:"question";s:1:"B";a:4:{i:0;s:2:"68";i:1;s:2:"-8";i:2;s:3:"414";i:3;s:3:"676";}}s:8:"question";a:4:{s:1:"C";s:2:"63";s:2:"WX";s:3:"444";s:1:"N";s:8:"question";s:1:"B";a:4:{i:0;s:2:"68";i:1;s:2:"-8";i:2;s:3:"414";i:3;s:3:"676";}}i:64;a:4:{s:1:"C";s:2:"64";s:2:"WX";s:3:"921";s:1:"N";s:2:"at";s:1:"B";a:4:{i:0;s:3:"116";i:1;s:3:"-14";i:2;s:3:"809";i:3;s:3:"676";}}s:2:"at";a:4:{s:1:"C";s:2:"64";s:2:"WX";s:3:"921";s:1:"N";s:2:"at";s:1:"B";a:4:{i:0;s:3:"116";i:1;s:3:"-14";i:2;s:3:"809";i:3;s:3:"676";}}i:65;a:4:{s:1:"C";s:2:"65";s:2:"WX";s:3:"722";s:1:"N";s:1:"A";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:1:"0";i:2;s:3:"706";i:3;s:3:"674";}}s:1:"A";a:4:{s:1:"C";s:2:"65";s:2:"WX";s:3:"722";s:1:"N";s:1:"A";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:1:"0";i:2;s:3:"706";i:3;s:3:"674";}}i:66;a:4:{s:1:"C";s:2:"66";s:2:"WX";s:3:"667";s:1:"N";s:1:"B";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:1:"0";i:2;s:3:"593";i:3;s:3:"662";}}s:1:"B";a:4:{s:1:"C";s:2:"66";s:2:"WX";s:3:"667";s:1:"N";s:1:"B";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:1:"0";i:2;s:3:"593";i:3;s:3:"662";}}i:67;a:4:{s:1:"C";s:2:"67";s:2:"WX";s:3:"667";s:1:"N";s:1:"C";s:1:"B";a:4:{i:0;s:2:"28";i:1;s:3:"-14";i:2;s:3:"633";i:3;s:3:"676";}}s:1:"C";a:4:{s:1:"C";s:2:"67";s:2:"WX";s:3:"667";s:1:"N";s:1:"C";s:1:"B";a:4:{i:0;s:2:"28";i:1;s:3:"-14";i:2;s:3:"633";i:3;s:3:"676";}}i:68;a:4:{s:1:"C";s:2:"68";s:2:"WX";s:3:"722";s:1:"N";s:1:"D";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:1:"0";i:2;s:3:"685";i:3;s:3:"662";}}s:1:"D";a:4:{s:1:"C";s:2:"68";s:2:"WX";s:3:"722";s:1:"N";s:1:"D";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:1:"0";i:2;s:3:"685";i:3;s:3:"662";}}i:69;a:4:{s:1:"C";s:2:"69";s:2:"WX";s:3:"611";s:1:"N";s:1:"E";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:1:"0";i:2;s:3:"597";i:3;s:3:"662";}}s:1:"E";a:4:{s:1:"C";s:2:"69";s:2:"WX";s:3:"611";s:1:"N";s:1:"E";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:1:"0";i:2;s:3:"597";i:3;s:3:"662";}}i:70;a:4:{s:1:"C";s:2:"70";s:2:"WX";s:3:"556";s:1:"N";s:1:"F";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:1:"0";i:2;s:3:"546";i:3;s:3:"662";}}s:1:"F";a:4:{s:1:"C";s:2:"70";s:2:"WX";s:3:"556";s:1:"N";s:1:"F";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:1:"0";i:2;s:3:"546";i:3;s:3:"662";}}i:71;a:4:{s:1:"C";s:2:"71";s:2:"WX";s:3:"722";s:1:"N";s:1:"G";s:1:"B";a:4:{i:0;s:2:"32";i:1;s:3:"-14";i:2;s:3:"709";i:3;s:3:"676";}}s:1:"G";a:4:{s:1:"C";s:2:"71";s:2:"WX";s:3:"722";s:1:"N";s:1:"G";s:1:"B";a:4:{i:0;s:2:"32";i:1;s:3:"-14";i:2;s:3:"709";i:3;s:3:"676";}}i:72;a:4:{s:1:"C";s:2:"72";s:2:"WX";s:3:"722";s:1:"N";s:1:"H";s:1:"B";a:4:{i:0;s:2:"19";i:1;s:1:"0";i:2;s:3:"702";i:3;s:3:"662";}}s:1:"H";a:4:{s:1:"C";s:2:"72";s:2:"WX";s:3:"722";s:1:"N";s:1:"H";s:1:"B";a:4:{i:0;s:2:"19";i:1;s:1:"0";i:2;s:3:"702";i:3;s:3:"662";}}i:73;a:4:{s:1:"C";s:2:"73";s:2:"WX";s:3:"333";s:1:"N";s:1:"I";s:1:"B";a:4:{i:0;s:2:"18";i:1;s:1:"0";i:2;s:3:"315";i:3;s:3:"662";}}s:1:"I";a:4:{s:1:"C";s:2:"73";s:2:"WX";s:3:"333";s:1:"N";s:1:"I";s:1:"B";a:4:{i:0;s:2:"18";i:1;s:1:"0";i:2;s:3:"315";i:3;s:3:"662";}}i:74;a:4:{s:1:"C";s:2:"74";s:2:"WX";s:3:"389";s:1:"N";s:1:"J";s:1:"B";a:4:{i:0;s:2:"10";i:1;s:3:"-14";i:2;s:3:"370";i:3;s:3:"662";}}s:1:"J";a:4:{s:1:"C";s:2:"74";s:2:"WX";s:3:"389";s:1:"N";s:1:"J";s:1:"B";a:4:{i:0;s:2:"10";i:1;s:3:"-14";i:2;s:3:"370";i:3;s:3:"662";}}i:75;a:4:{s:1:"C";s:2:"75";s:2:"WX";s:3:"722";s:1:"N";s:1:"K";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:1:"0";i:2;s:3:"723";i:3;s:3:"662";}}s:1:"K";a:4:{s:1:"C";s:2:"75";s:2:"WX";s:3:"722";s:1:"N";s:1:"K";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:1:"0";i:2;s:3:"723";i:3;s:3:"662";}}i:76;a:4:{s:1:"C";s:2:"76";s:2:"WX";s:3:"611";s:1:"N";s:1:"L";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:1:"0";i:2;s:3:"598";i:3;s:3:"662";}}s:1:"L";a:4:{s:1:"C";s:2:"76";s:2:"WX";s:3:"611";s:1:"N";s:1:"L";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:1:"0";i:2;s:3:"598";i:3;s:3:"662";}}i:77;a:4:{s:1:"C";s:2:"77";s:2:"WX";s:3:"889";s:1:"N";s:1:"M";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:1:"0";i:2;s:3:"863";i:3;s:3:"662";}}s:1:"M";a:4:{s:1:"C";s:2:"77";s:2:"WX";s:3:"889";s:1:"N";s:1:"M";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:1:"0";i:2;s:3:"863";i:3;s:3:"662";}}i:78;a:4:{s:1:"C";s:2:"78";s:2:"WX";s:3:"722";s:1:"N";s:1:"N";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:3:"-11";i:2;s:3:"707";i:3;s:3:"662";}}s:1:"N";a:4:{s:1:"C";s:2:"78";s:2:"WX";s:3:"722";s:1:"N";s:1:"N";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:3:"-11";i:2;s:3:"707";i:3;s:3:"662";}}i:79;a:4:{s:1:"C";s:2:"79";s:2:"WX";s:3:"722";s:1:"N";s:1:"O";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-14";i:2;s:3:"688";i:3;s:3:"676";}}s:1:"O";a:4:{s:1:"C";s:2:"79";s:2:"WX";s:3:"722";s:1:"N";s:1:"O";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-14";i:2;s:3:"688";i:3;s:3:"676";}}i:80;a:4:{s:1:"C";s:2:"80";s:2:"WX";s:3:"556";s:1:"N";s:1:"P";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:1:"0";i:2;s:3:"542";i:3;s:3:"662";}}s:1:"P";a:4:{s:1:"C";s:2:"80";s:2:"WX";s:3:"556";s:1:"N";s:1:"P";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:1:"0";i:2;s:3:"542";i:3;s:3:"662";}}i:81;a:4:{s:1:"C";s:2:"81";s:2:"WX";s:3:"722";s:1:"N";s:1:"Q";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:4:"-178";i:2;s:3:"701";i:3;s:3:"676";}}s:1:"Q";a:4:{s:1:"C";s:2:"81";s:2:"WX";s:3:"722";s:1:"N";s:1:"Q";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:4:"-178";i:2;s:3:"701";i:3;s:3:"676";}}i:82;a:4:{s:1:"C";s:2:"82";s:2:"WX";s:3:"667";s:1:"N";s:1:"R";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:1:"0";i:2;s:3:"659";i:3;s:3:"662";}}s:1:"R";a:4:{s:1:"C";s:2:"82";s:2:"WX";s:3:"667";s:1:"N";s:1:"R";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:1:"0";i:2;s:3:"659";i:3;s:3:"662";}}i:83;a:4:{s:1:"C";s:2:"83";s:2:"WX";s:3:"556";s:1:"N";s:1:"S";s:1:"B";a:4:{i:0;s:2:"42";i:1;s:3:"-14";i:2;s:3:"491";i:3;s:3:"676";}}s:1:"S";a:4:{s:1:"C";s:2:"83";s:2:"WX";s:3:"556";s:1:"N";s:1:"S";s:1:"B";a:4:{i:0;s:2:"42";i:1;s:3:"-14";i:2;s:3:"491";i:3;s:3:"676";}}i:84;a:4:{s:1:"C";s:2:"84";s:2:"WX";s:3:"611";s:1:"N";s:1:"T";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:1:"0";i:2;s:3:"593";i:3;s:3:"662";}}s:1:"T";a:4:{s:1:"C";s:2:"84";s:2:"WX";s:3:"611";s:1:"N";s:1:"T";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:1:"0";i:2;s:3:"593";i:3;s:3:"662";}}i:85;a:4:{s:1:"C";s:2:"85";s:2:"WX";s:3:"722";s:1:"N";s:1:"U";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:3:"-14";i:2;s:3:"705";i:3;s:3:"662";}}s:1:"U";a:4:{s:1:"C";s:2:"85";s:2:"WX";s:3:"722";s:1:"N";s:1:"U";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:3:"-14";i:2;s:3:"705";i:3;s:3:"662";}}i:86;a:4:{s:1:"C";s:2:"86";s:2:"WX";s:3:"722";s:1:"N";s:1:"V";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:3:"-11";i:2;s:3:"697";i:3;s:3:"662";}}s:1:"V";a:4:{s:1:"C";s:2:"86";s:2:"WX";s:3:"722";s:1:"N";s:1:"V";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:3:"-11";i:2;s:3:"697";i:3;s:3:"662";}}i:87;a:4:{s:1:"C";s:2:"87";s:2:"WX";s:3:"944";s:1:"N";s:1:"W";s:1:"B";a:4:{i:0;s:1:"5";i:1;s:3:"-11";i:2;s:3:"932";i:3;s:3:"662";}}s:1:"W";a:4:{s:1:"C";s:2:"87";s:2:"WX";s:3:"944";s:1:"N";s:1:"W";s:1:"B";a:4:{i:0;s:1:"5";i:1;s:3:"-11";i:2;s:3:"932";i:3;s:3:"662";}}i:88;a:4:{s:1:"C";s:2:"88";s:2:"WX";s:3:"722";s:1:"N";s:1:"X";s:1:"B";a:4:{i:0;s:2:"10";i:1;s:1:"0";i:2;s:3:"704";i:3;s:3:"662";}}s:1:"X";a:4:{s:1:"C";s:2:"88";s:2:"WX";s:3:"722";s:1:"N";s:1:"X";s:1:"B";a:4:{i:0;s:2:"10";i:1;s:1:"0";i:2;s:3:"704";i:3;s:3:"662";}}i:89;a:4:{s:1:"C";s:2:"89";s:2:"WX";s:3:"722";s:1:"N";s:1:"Y";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:1:"0";i:2;s:3:"703";i:3;s:3:"662";}}s:1:"Y";a:4:{s:1:"C";s:2:"89";s:2:"WX";s:3:"722";s:1:"N";s:1:"Y";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:1:"0";i:2;s:3:"703";i:3;s:3:"662";}}i:90;a:4:{s:1:"C";s:2:"90";s:2:"WX";s:3:"611";s:1:"N";s:1:"Z";s:1:"B";a:4:{i:0;s:1:"9";i:1;s:1:"0";i:2;s:3:"597";i:3;s:3:"662";}}s:1:"Z";a:4:{s:1:"C";s:2:"90";s:2:"WX";s:3:"611";s:1:"N";s:1:"Z";s:1:"B";a:4:{i:0;s:1:"9";i:1;s:1:"0";i:2;s:3:"597";i:3;s:3:"662";}}i:91;a:4:{s:1:"C";s:2:"91";s:2:"WX";s:3:"333";s:1:"N";s:11:"bracketleft";s:1:"B";a:4:{i:0;s:2:"88";i:1;s:4:"-156";i:2;s:3:"299";i:3;s:3:"662";}}s:11:"bracketleft";a:4:{s:1:"C";s:2:"91";s:2:"WX";s:3:"333";s:1:"N";s:11:"bracketleft";s:1:"B";a:4:{i:0;s:2:"88";i:1;s:4:"-156";i:2;s:3:"299";i:3;s:3:"662";}}i:92;a:4:{s:1:"C";s:2:"92";s:2:"WX";s:3:"278";s:1:"N";s:9:"backslash";s:1:"B";a:4:{i:0;s:2:"-9";i:1;s:3:"-14";i:2;s:3:"287";i:3;s:3:"676";}}s:9:"backslash";a:4:{s:1:"C";s:2:"92";s:2:"WX";s:3:"278";s:1:"N";s:9:"backslash";s:1:"B";a:4:{i:0;s:2:"-9";i:1;s:3:"-14";i:2;s:3:"287";i:3;s:3:"676";}}i:93;a:4:{s:1:"C";s:2:"93";s:2:"WX";s:3:"333";s:1:"N";s:12:"bracketright";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:4:"-156";i:2;s:3:"245";i:3;s:3:"662";}}s:12:"bracketright";a:4:{s:1:"C";s:2:"93";s:2:"WX";s:3:"333";s:1:"N";s:12:"bracketright";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:4:"-156";i:2;s:3:"245";i:3;s:3:"662";}}i:94;a:4:{s:1:"C";s:2:"94";s:2:"WX";s:3:"469";s:1:"N";s:11:"asciicircum";s:1:"B";a:4:{i:0;s:2:"24";i:1;s:3:"297";i:2;s:3:"446";i:3;s:3:"662";}}s:11:"asciicircum";a:4:{s:1:"C";s:2:"94";s:2:"WX";s:3:"469";s:1:"N";s:11:"asciicircum";s:1:"B";a:4:{i:0;s:2:"24";i:1;s:3:"297";i:2;s:3:"446";i:3;s:3:"662";}}i:95;a:4:{s:1:"C";s:2:"95";s:2:"WX";s:3:"500";s:1:"N";s:10:"underscore";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:4:"-125";i:2;s:3:"500";i:3;s:3:"-75";}}s:10:"underscore";a:4:{s:1:"C";s:2:"95";s:2:"WX";s:3:"500";s:1:"N";s:10:"underscore";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:4:"-125";i:2;s:3:"500";i:3;s:3:"-75";}}i:96;a:4:{s:1:"C";s:2:"96";s:2:"WX";s:3:"333";s:1:"N";s:9:"quoteleft";s:1:"B";a:4:{i:0;s:3:"115";i:1;s:3:"433";i:2;s:3:"254";i:3;s:3:"676";}}s:9:"quoteleft";a:4:{s:1:"C";s:2:"96";s:2:"WX";s:3:"333";s:1:"N";s:9:"quoteleft";s:1:"B";a:4:{i:0;s:3:"115";i:1;s:3:"433";i:2;s:3:"254";i:3;s:3:"676";}}i:97;a:4:{s:1:"C";s:2:"97";s:2:"WX";s:3:"444";s:1:"N";s:1:"a";s:1:"B";a:4:{i:0;s:2:"37";i:1;s:3:"-10";i:2;s:3:"442";i:3;s:3:"460";}}s:1:"a";a:4:{s:1:"C";s:2:"97";s:2:"WX";s:3:"444";s:1:"N";s:1:"a";s:1:"B";a:4:{i:0;s:2:"37";i:1;s:3:"-10";i:2;s:3:"442";i:3;s:3:"460";}}i:98;a:4:{s:1:"C";s:2:"98";s:2:"WX";s:3:"500";s:1:"N";s:1:"b";s:1:"B";a:4:{i:0;s:1:"3";i:1;s:3:"-10";i:2;s:3:"468";i:3;s:3:"683";}}s:1:"b";a:4:{s:1:"C";s:2:"98";s:2:"WX";s:3:"500";s:1:"N";s:1:"b";s:1:"B";a:4:{i:0;s:1:"3";i:1;s:3:"-10";i:2;s:3:"468";i:3;s:3:"683";}}i:99;a:4:{s:1:"C";s:2:"99";s:2:"WX";s:3:"444";s:1:"N";s:1:"c";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-10";i:2;s:3:"412";i:3;s:3:"460";}}s:1:"c";a:4:{s:1:"C";s:2:"99";s:2:"WX";s:3:"444";s:1:"N";s:1:"c";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-10";i:2;s:3:"412";i:3;s:3:"460";}}i:100;a:4:{s:1:"C";s:3:"100";s:2:"WX";s:3:"500";s:1:"N";s:1:"d";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:3:"-10";i:2;s:3:"491";i:3;s:3:"683";}}s:1:"d";a:4:{s:1:"C";s:3:"100";s:2:"WX";s:3:"500";s:1:"N";s:1:"d";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:3:"-10";i:2;s:3:"491";i:3;s:3:"683";}}i:101;a:4:{s:1:"C";s:3:"101";s:2:"WX";s:3:"444";s:1:"N";s:1:"e";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-10";i:2;s:3:"424";i:3;s:3:"460";}}s:1:"e";a:4:{s:1:"C";s:3:"101";s:2:"WX";s:3:"444";s:1:"N";s:1:"e";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-10";i:2;s:3:"424";i:3;s:3:"460";}}i:102;a:5:{s:1:"C";s:3:"102";s:2:"WX";s:3:"333";s:1:"N";s:1:"f";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:1:"0";i:2;s:3:"383";i:3;s:3:"683";}s:1:"L";a:2:{i:0;s:1:"l";i:1;s:2:"fl";}}s:1:"f";a:5:{s:1:"C";s:3:"102";s:2:"WX";s:3:"333";s:1:"N";s:1:"f";s:1:"B";a:4:{i:0;s:2:"20";i:1;s:1:"0";i:2;s:3:"383";i:3;s:3:"683";}s:1:"L";a:2:{i:0;s:1:"l";i:1;s:2:"fl";}}i:103;a:4:{s:1:"C";s:3:"103";s:2:"WX";s:3:"500";s:1:"N";s:1:"g";s:1:"B";a:4:{i:0;s:2:"28";i:1;s:4:"-218";i:2;s:3:"470";i:3;s:3:"460";}}s:1:"g";a:4:{s:1:"C";s:3:"103";s:2:"WX";s:3:"500";s:1:"N";s:1:"g";s:1:"B";a:4:{i:0;s:2:"28";i:1;s:4:"-218";i:2;s:3:"470";i:3;s:3:"460";}}i:104;a:4:{s:1:"C";s:3:"104";s:2:"WX";s:3:"500";s:1:"N";s:1:"h";s:1:"B";a:4:{i:0;s:1:"9";i:1;s:1:"0";i:2;s:3:"487";i:3;s:3:"683";}}s:1:"h";a:4:{s:1:"C";s:3:"104";s:2:"WX";s:3:"500";s:1:"N";s:1:"h";s:1:"B";a:4:{i:0;s:1:"9";i:1;s:1:"0";i:2;s:3:"487";i:3;s:3:"683";}}i:105;a:4:{s:1:"C";s:3:"105";s:2:"WX";s:3:"278";s:1:"N";s:1:"i";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:1:"0";i:2;s:3:"253";i:3;s:3:"683";}}s:1:"i";a:4:{s:1:"C";s:3:"105";s:2:"WX";s:3:"278";s:1:"N";s:1:"i";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:1:"0";i:2;s:3:"253";i:3;s:3:"683";}}i:106;a:4:{s:1:"C";s:3:"106";s:2:"WX";s:3:"278";s:1:"N";s:1:"j";s:1:"B";a:4:{i:0;s:3:"-70";i:1;s:4:"-218";i:2;s:3:"194";i:3;s:3:"683";}}s:1:"j";a:4:{s:1:"C";s:3:"106";s:2:"WX";s:3:"278";s:1:"N";s:1:"j";s:1:"B";a:4:{i:0;s:3:"-70";i:1;s:4:"-218";i:2;s:3:"194";i:3;s:3:"683";}}i:107;a:4:{s:1:"C";s:3:"107";s:2:"WX";s:3:"500";s:1:"N";s:1:"k";s:1:"B";a:4:{i:0;s:1:"7";i:1;s:1:"0";i:2;s:3:"505";i:3;s:3:"683";}}s:1:"k";a:4:{s:1:"C";s:3:"107";s:2:"WX";s:3:"500";s:1:"N";s:1:"k";s:1:"B";a:4:{i:0;s:1:"7";i:1;s:1:"0";i:2;s:3:"505";i:3;s:3:"683";}}i:108;a:4:{s:1:"C";s:3:"108";s:2:"WX";s:3:"278";s:1:"N";s:1:"l";s:1:"B";a:4:{i:0;s:2:"19";i:1;s:1:"0";i:2;s:3:"257";i:3;s:3:"683";}}s:1:"l";a:4:{s:1:"C";s:3:"108";s:2:"WX";s:3:"278";s:1:"N";s:1:"l";s:1:"B";a:4:{i:0;s:2:"19";i:1;s:1:"0";i:2;s:3:"257";i:3;s:3:"683";}}i:109;a:4:{s:1:"C";s:3:"109";s:2:"WX";s:3:"778";s:1:"N";s:1:"m";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:1:"0";i:2;s:3:"775";i:3;s:3:"460";}}s:1:"m";a:4:{s:1:"C";s:3:"109";s:2:"WX";s:3:"778";s:1:"N";s:1:"m";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:1:"0";i:2;s:3:"775";i:3;s:3:"460";}}i:110;a:4:{s:1:"C";s:3:"110";s:2:"WX";s:3:"500";s:1:"N";s:1:"n";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:1:"0";i:2;s:3:"485";i:3;s:3:"460";}}s:1:"n";a:4:{s:1:"C";s:3:"110";s:2:"WX";s:3:"500";s:1:"N";s:1:"n";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:1:"0";i:2;s:3:"485";i:3;s:3:"460";}}i:111;a:4:{s:1:"C";s:3:"111";s:2:"WX";s:3:"500";s:1:"N";s:1:"o";s:1:"B";a:4:{i:0;s:2:"29";i:1;s:3:"-10";i:2;s:3:"470";i:3;s:3:"460";}}s:1:"o";a:4:{s:1:"C";s:3:"111";s:2:"WX";s:3:"500";s:1:"N";s:1:"o";s:1:"B";a:4:{i:0;s:2:"29";i:1;s:3:"-10";i:2;s:3:"470";i:3;s:3:"460";}}i:112;a:4:{s:1:"C";s:3:"112";s:2:"WX";s:3:"500";s:1:"N";s:1:"p";s:1:"B";a:4:{i:0;s:1:"5";i:1;s:4:"-217";i:2;s:3:"470";i:3;s:3:"460";}}s:1:"p";a:4:{s:1:"C";s:3:"112";s:2:"WX";s:3:"500";s:1:"N";s:1:"p";s:1:"B";a:4:{i:0;s:1:"5";i:1;s:4:"-217";i:2;s:3:"470";i:3;s:3:"460";}}i:113;a:4:{s:1:"C";s:3:"113";s:2:"WX";s:3:"500";s:1:"N";s:1:"q";s:1:"B";a:4:{i:0;s:2:"24";i:1;s:4:"-217";i:2;s:3:"488";i:3;s:3:"460";}}s:1:"q";a:4:{s:1:"C";s:3:"113";s:2:"WX";s:3:"500";s:1:"N";s:1:"q";s:1:"B";a:4:{i:0;s:2:"24";i:1;s:4:"-217";i:2;s:3:"488";i:3;s:3:"460";}}i:114;a:4:{s:1:"C";s:3:"114";s:2:"WX";s:3:"333";s:1:"N";s:1:"r";s:1:"B";a:4:{i:0;s:1:"5";i:1;s:1:"0";i:2;s:3:"335";i:3;s:3:"460";}}s:1:"r";a:4:{s:1:"C";s:3:"114";s:2:"WX";s:3:"333";s:1:"N";s:1:"r";s:1:"B";a:4:{i:0;s:1:"5";i:1;s:1:"0";i:2;s:3:"335";i:3;s:3:"460";}}i:115;a:4:{s:1:"C";s:3:"115";s:2:"WX";s:3:"389";s:1:"N";s:1:"s";s:1:"B";a:4:{i:0;s:2:"51";i:1;s:3:"-10";i:2;s:3:"348";i:3;s:3:"460";}}s:1:"s";a:4:{s:1:"C";s:3:"115";s:2:"WX";s:3:"389";s:1:"N";s:1:"s";s:1:"B";a:4:{i:0;s:2:"51";i:1;s:3:"-10";i:2;s:3:"348";i:3;s:3:"460";}}i:116;a:4:{s:1:"C";s:3:"116";s:2:"WX";s:3:"278";s:1:"N";s:1:"t";s:1:"B";a:4:{i:0;s:2:"13";i:1;s:3:"-10";i:2;s:3:"279";i:3;s:3:"579";}}s:1:"t";a:4:{s:1:"C";s:3:"116";s:2:"WX";s:3:"278";s:1:"N";s:1:"t";s:1:"B";a:4:{i:0;s:2:"13";i:1;s:3:"-10";i:2;s:3:"279";i:3;s:3:"579";}}i:117;a:4:{s:1:"C";s:3:"117";s:2:"WX";s:3:"500";s:1:"N";s:1:"u";s:1:"B";a:4:{i:0;s:1:"9";i:1;s:3:"-10";i:2;s:3:"479";i:3;s:3:"450";}}s:1:"u";a:4:{s:1:"C";s:3:"117";s:2:"WX";s:3:"500";s:1:"N";s:1:"u";s:1:"B";a:4:{i:0;s:1:"9";i:1;s:3:"-10";i:2;s:3:"479";i:3;s:3:"450";}}i:118;a:4:{s:1:"C";s:3:"118";s:2:"WX";s:3:"500";s:1:"N";s:1:"v";s:1:"B";a:4:{i:0;s:2:"19";i:1;s:3:"-14";i:2;s:3:"477";i:3;s:3:"450";}}s:1:"v";a:4:{s:1:"C";s:3:"118";s:2:"WX";s:3:"500";s:1:"N";s:1:"v";s:1:"B";a:4:{i:0;s:2:"19";i:1;s:3:"-14";i:2;s:3:"477";i:3;s:3:"450";}}i:119;a:4:{s:1:"C";s:3:"119";s:2:"WX";s:3:"722";s:1:"N";s:1:"w";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:3:"-14";i:2;s:3:"694";i:3;s:3:"450";}}s:1:"w";a:4:{s:1:"C";s:3:"119";s:2:"WX";s:3:"722";s:1:"N";s:1:"w";s:1:"B";a:4:{i:0;s:2:"21";i:1;s:3:"-14";i:2;s:3:"694";i:3;s:3:"450";}}i:120;a:4:{s:1:"C";s:3:"120";s:2:"WX";s:3:"500";s:1:"N";s:1:"x";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:1:"0";i:2;s:3:"479";i:3;s:3:"450";}}s:1:"x";a:4:{s:1:"C";s:3:"120";s:2:"WX";s:3:"500";s:1:"N";s:1:"x";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:1:"0";i:2;s:3:"479";i:3;s:3:"450";}}i:121;a:4:{s:1:"C";s:3:"121";s:2:"WX";s:3:"500";s:1:"N";s:1:"y";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:4:"-218";i:2;s:3:"475";i:3;s:3:"450";}}s:1:"y";a:4:{s:1:"C";s:3:"121";s:2:"WX";s:3:"500";s:1:"N";s:1:"y";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:4:"-218";i:2;s:3:"475";i:3;s:3:"450";}}i:122;a:4:{s:1:"C";s:3:"122";s:2:"WX";s:3:"444";s:1:"N";s:1:"z";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:1:"0";i:2;s:3:"418";i:3;s:3:"450";}}s:1:"z";a:4:{s:1:"C";s:3:"122";s:2:"WX";s:3:"444";s:1:"N";s:1:"z";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:1:"0";i:2;s:3:"418";i:3;s:3:"450";}}i:123;a:4:{s:1:"C";s:3:"123";s:2:"WX";s:3:"480";s:1:"N";s:9:"braceleft";s:1:"B";a:4:{i:0;s:3:"100";i:1;s:4:"-181";i:2;s:3:"350";i:3;s:3:"680";}}s:9:"braceleft";a:4:{s:1:"C";s:3:"123";s:2:"WX";s:3:"480";s:1:"N";s:9:"braceleft";s:1:"B";a:4:{i:0;s:3:"100";i:1;s:4:"-181";i:2;s:3:"350";i:3;s:3:"680";}}i:124;a:4:{s:1:"C";s:3:"124";s:2:"WX";s:3:"200";s:1:"N";s:3:"bar";s:1:"B";a:4:{i:0;s:2:"67";i:1;s:4:"-218";i:2;s:3:"133";i:3;s:3:"782";}}s:3:"bar";a:4:{s:1:"C";s:3:"124";s:2:"WX";s:3:"200";s:1:"N";s:3:"bar";s:1:"B";a:4:{i:0;s:2:"67";i:1;s:4:"-218";i:2;s:3:"133";i:3;s:3:"782";}}i:125;a:4:{s:1:"C";s:3:"125";s:2:"WX";s:3:"480";s:1:"N";s:10:"braceright";s:1:"B";a:4:{i:0;s:3:"130";i:1;s:4:"-181";i:2;s:3:"380";i:3;s:3:"680";}}s:10:"braceright";a:4:{s:1:"C";s:3:"125";s:2:"WX";s:3:"480";s:1:"N";s:10:"braceright";s:1:"B";a:4:{i:0;s:3:"130";i:1;s:4:"-181";i:2;s:3:"380";i:3;s:3:"680";}}i:126;a:4:{s:1:"C";s:3:"126";s:2:"WX";s:3:"541";s:1:"N";s:10:"asciitilde";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:3:"183";i:2;s:3:"502";i:3;s:3:"323";}}s:10:"asciitilde";a:4:{s:1:"C";s:3:"126";s:2:"WX";s:3:"541";s:1:"N";s:10:"asciitilde";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:3:"183";i:2;s:3:"502";i:3;s:3:"323";}}i:161;a:4:{s:1:"C";s:3:"161";s:2:"WX";s:3:"333";s:1:"N";s:10:"exclamdown";s:1:"B";a:4:{i:0;s:2:"97";i:1;s:4:"-218";i:2;s:3:"205";i:3;s:3:"467";}}s:10:"exclamdown";a:4:{s:1:"C";s:3:"161";s:2:"WX";s:3:"333";s:1:"N";s:10:"exclamdown";s:1:"B";a:4:{i:0;s:2:"97";i:1;s:4:"-218";i:2;s:3:"205";i:3;s:3:"467";}}i:162;a:4:{s:1:"C";s:3:"162";s:2:"WX";s:3:"500";s:1:"N";s:4:"cent";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:4:"-138";i:2;s:3:"448";i:3;s:3:"579";}}s:4:"cent";a:4:{s:1:"C";s:3:"162";s:2:"WX";s:3:"500";s:1:"N";s:4:"cent";s:1:"B";a:4:{i:0;s:2:"53";i:1;s:4:"-138";i:2;s:3:"448";i:3;s:3:"579";}}i:163;a:4:{s:1:"C";s:3:"163";s:2:"WX";s:3:"500";s:1:"N";s:8:"sterling";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:2:"-8";i:2;s:3:"490";i:3;s:3:"676";}}s:8:"sterling";a:4:{s:1:"C";s:3:"163";s:2:"WX";s:3:"500";s:1:"N";s:8:"sterling";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:2:"-8";i:2;s:3:"490";i:3;s:3:"676";}}i:164;a:4:{s:1:"C";s:3:"164";s:2:"WX";s:3:"167";s:1:"N";s:8:"fraction";s:1:"B";a:4:{i:0;s:4:"-168";i:1;s:3:"-14";i:2;s:3:"331";i:3;s:3:"676";}}s:8:"fraction";a:4:{s:1:"C";s:3:"164";s:2:"WX";s:3:"167";s:1:"N";s:8:"fraction";s:1:"B";a:4:{i:0;s:4:"-168";i:1;s:3:"-14";i:2;s:3:"331";i:3;s:3:"676";}}i:165;a:4:{s:1:"C";s:3:"165";s:2:"WX";s:3:"500";s:1:"N";s:3:"yen";s:1:"B";a:4:{i:0;s:3:"-53";i:1;s:1:"0";i:2;s:3:"512";i:3;s:3:"662";}}s:3:"yen";a:4:{s:1:"C";s:3:"165";s:2:"WX";s:3:"500";s:1:"N";s:3:"yen";s:1:"B";a:4:{i:0;s:3:"-53";i:1;s:1:"0";i:2;s:3:"512";i:3;s:3:"662";}}i:166;a:4:{s:1:"C";s:3:"166";s:2:"WX";s:3:"500";s:1:"N";s:6:"florin";s:1:"B";a:4:{i:0;s:1:"7";i:1;s:4:"-189";i:2;s:3:"490";i:3;s:3:"676";}}s:6:"florin";a:4:{s:1:"C";s:3:"166";s:2:"WX";s:3:"500";s:1:"N";s:6:"florin";s:1:"B";a:4:{i:0;s:1:"7";i:1;s:4:"-189";i:2;s:3:"490";i:3;s:3:"676";}}i:167;a:4:{s:1:"C";s:3:"167";s:2:"WX";s:3:"500";s:1:"N";s:7:"section";s:1:"B";a:4:{i:0;s:2:"70";i:1;s:4:"-148";i:2;s:3:"426";i:3;s:3:"676";}}s:7:"section";a:4:{s:1:"C";s:3:"167";s:2:"WX";s:3:"500";s:1:"N";s:7:"section";s:1:"B";a:4:{i:0;s:2:"70";i:1;s:4:"-148";i:2;s:3:"426";i:3;s:3:"676";}}i:168;a:4:{s:1:"C";s:3:"168";s:2:"WX";s:3:"500";s:1:"N";s:8:"currency";s:1:"B";a:4:{i:0;s:3:"-22";i:1;s:2:"58";i:2;s:3:"522";i:3;s:3:"602";}}s:8:"currency";a:4:{s:1:"C";s:3:"168";s:2:"WX";s:3:"500";s:1:"N";s:8:"currency";s:1:"B";a:4:{i:0;s:3:"-22";i:1;s:2:"58";i:2;s:3:"522";i:3;s:3:"602";}}i:169;a:4:{s:1:"C";s:3:"169";s:2:"WX";s:3:"180";s:1:"N";s:11:"quotesingle";s:1:"B";a:4:{i:0;s:2:"48";i:1;s:3:"431";i:2;s:3:"133";i:3;s:3:"676";}}s:11:"quotesingle";a:4:{s:1:"C";s:3:"169";s:2:"WX";s:3:"180";s:1:"N";s:11:"quotesingle";s:1:"B";a:4:{i:0;s:2:"48";i:1;s:3:"431";i:2;s:3:"133";i:3;s:3:"676";}}i:170;a:4:{s:1:"C";s:3:"170";s:2:"WX";s:3:"444";s:1:"N";s:12:"quotedblleft";s:1:"B";a:4:{i:0;s:2:"43";i:1;s:3:"433";i:2;s:3:"414";i:3;s:3:"676";}}s:12:"quotedblleft";a:4:{s:1:"C";s:3:"170";s:2:"WX";s:3:"444";s:1:"N";s:12:"quotedblleft";s:1:"B";a:4:{i:0;s:2:"43";i:1;s:3:"433";i:2;s:3:"414";i:3;s:3:"676";}}i:171;a:4:{s:1:"C";s:3:"171";s:2:"WX";s:3:"500";s:1:"N";s:13:"guillemotleft";s:1:"B";a:4:{i:0;s:2:"42";i:1;s:2:"33";i:2;s:3:"456";i:3;s:3:"416";}}s:13:"guillemotleft";a:4:{s:1:"C";s:3:"171";s:2:"WX";s:3:"500";s:1:"N";s:13:"guillemotleft";s:1:"B";a:4:{i:0;s:2:"42";i:1;s:2:"33";i:2;s:3:"456";i:3;s:3:"416";}}i:172;a:4:{s:1:"C";s:3:"172";s:2:"WX";s:3:"333";s:1:"N";s:13:"guilsinglleft";s:1:"B";a:4:{i:0;s:2:"63";i:1;s:2:"33";i:2;s:3:"285";i:3;s:3:"416";}}s:13:"guilsinglleft";a:4:{s:1:"C";s:3:"172";s:2:"WX";s:3:"333";s:1:"N";s:13:"guilsinglleft";s:1:"B";a:4:{i:0;s:2:"63";i:1;s:2:"33";i:2;s:3:"285";i:3;s:3:"416";}}i:173;a:4:{s:1:"C";s:3:"173";s:2:"WX";s:3:"333";s:1:"N";s:14:"guilsinglright";s:1:"B";a:4:{i:0;s:2:"48";i:1;s:2:"33";i:2;s:3:"270";i:3;s:3:"416";}}s:14:"guilsinglright";a:4:{s:1:"C";s:3:"173";s:2:"WX";s:3:"333";s:1:"N";s:14:"guilsinglright";s:1:"B";a:4:{i:0;s:2:"48";i:1;s:2:"33";i:2;s:3:"270";i:3;s:3:"416";}}i:174;a:4:{s:1:"C";s:3:"174";s:2:"WX";s:3:"556";s:1:"N";s:2:"fi";s:1:"B";a:4:{i:0;s:2:"31";i:1;s:1:"0";i:2;s:3:"521";i:3;s:3:"683";}}s:2:"fi";a:4:{s:1:"C";s:3:"174";s:2:"WX";s:3:"556";s:1:"N";s:2:"fi";s:1:"B";a:4:{i:0;s:2:"31";i:1;s:1:"0";i:2;s:3:"521";i:3;s:3:"683";}}i:175;a:4:{s:1:"C";s:3:"175";s:2:"WX";s:3:"556";s:1:"N";s:2:"fl";s:1:"B";a:4:{i:0;s:2:"32";i:1;s:1:"0";i:2;s:3:"521";i:3;s:3:"683";}}s:2:"fl";a:4:{s:1:"C";s:3:"175";s:2:"WX";s:3:"556";s:1:"N";s:2:"fl";s:1:"B";a:4:{i:0;s:2:"32";i:1;s:1:"0";i:2;s:3:"521";i:3;s:3:"683";}}i:177;a:4:{s:1:"C";s:3:"177";s:2:"WX";s:3:"500";s:1:"N";s:6:"endash";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:3:"201";i:2;s:3:"500";i:3;s:3:"250";}}s:6:"endash";a:4:{s:1:"C";s:3:"177";s:2:"WX";s:3:"500";s:1:"N";s:6:"endash";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:3:"201";i:2;s:3:"500";i:3;s:3:"250";}}i:178;a:4:{s:1:"C";s:3:"178";s:2:"WX";s:3:"500";s:1:"N";s:6:"dagger";s:1:"B";a:4:{i:0;s:2:"59";i:1;s:4:"-149";i:2;s:3:"442";i:3;s:3:"676";}}s:6:"dagger";a:4:{s:1:"C";s:3:"178";s:2:"WX";s:3:"500";s:1:"N";s:6:"dagger";s:1:"B";a:4:{i:0;s:2:"59";i:1;s:4:"-149";i:2;s:3:"442";i:3;s:3:"676";}}i:179;a:4:{s:1:"C";s:3:"179";s:2:"WX";s:3:"500";s:1:"N";s:9:"daggerdbl";s:1:"B";a:4:{i:0;s:2:"58";i:1;s:4:"-153";i:2;s:3:"442";i:3;s:3:"676";}}s:9:"daggerdbl";a:4:{s:1:"C";s:3:"179";s:2:"WX";s:3:"500";s:1:"N";s:9:"daggerdbl";s:1:"B";a:4:{i:0;s:2:"58";i:1;s:4:"-153";i:2;s:3:"442";i:3;s:3:"676";}}i:180;a:4:{s:1:"C";s:3:"180";s:2:"WX";s:3:"250";s:1:"N";s:14:"periodcentered";s:1:"B";a:4:{i:0;s:2:"70";i:1;s:3:"199";i:2;s:3:"181";i:3;s:3:"310";}}s:14:"periodcentered";a:4:{s:1:"C";s:3:"180";s:2:"WX";s:3:"250";s:1:"N";s:14:"periodcentered";s:1:"B";a:4:{i:0;s:2:"70";i:1;s:3:"199";i:2;s:3:"181";i:3;s:3:"310";}}i:182;a:4:{s:1:"C";s:3:"182";s:2:"WX";s:3:"453";s:1:"N";s:9:"paragraph";s:1:"B";a:4:{i:0;s:3:"-22";i:1;s:4:"-154";i:2;s:3:"450";i:3;s:3:"662";}}s:9:"paragraph";a:4:{s:1:"C";s:3:"182";s:2:"WX";s:3:"453";s:1:"N";s:9:"paragraph";s:1:"B";a:4:{i:0;s:3:"-22";i:1;s:4:"-154";i:2;s:3:"450";i:3;s:3:"662";}}i:183;a:4:{s:1:"C";s:3:"183";s:2:"WX";s:3:"350";s:1:"N";s:6:"bullet";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:3:"196";i:2;s:3:"310";i:3;s:3:"466";}}s:6:"bullet";a:4:{s:1:"C";s:3:"183";s:2:"WX";s:3:"350";s:1:"N";s:6:"bullet";s:1:"B";a:4:{i:0;s:2:"40";i:1;s:3:"196";i:2;s:3:"310";i:3;s:3:"466";}}i:184;a:4:{s:1:"C";s:3:"184";s:2:"WX";s:3:"333";s:1:"N";s:14:"quotesinglbase";s:1:"B";a:4:{i:0;s:2:"79";i:1;s:4:"-141";i:2;s:3:"218";i:3;s:3:"102";}}s:14:"quotesinglbase";a:4:{s:1:"C";s:3:"184";s:2:"WX";s:3:"333";s:1:"N";s:14:"quotesinglbase";s:1:"B";a:4:{i:0;s:2:"79";i:1;s:4:"-141";i:2;s:3:"218";i:3;s:3:"102";}}i:185;a:4:{s:1:"C";s:3:"185";s:2:"WX";s:3:"444";s:1:"N";s:12:"quotedblbase";s:1:"B";a:4:{i:0;s:2:"45";i:1;s:4:"-141";i:2;s:3:"416";i:3;s:3:"102";}}s:12:"quotedblbase";a:4:{s:1:"C";s:3:"185";s:2:"WX";s:3:"444";s:1:"N";s:12:"quotedblbase";s:1:"B";a:4:{i:0;s:2:"45";i:1;s:4:"-141";i:2;s:3:"416";i:3;s:3:"102";}}i:186;a:4:{s:1:"C";s:3:"186";s:2:"WX";s:3:"444";s:1:"N";s:13:"quotedblright";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:3:"433";i:2;s:3:"401";i:3;s:3:"676";}}s:13:"quotedblright";a:4:{s:1:"C";s:3:"186";s:2:"WX";s:3:"444";s:1:"N";s:13:"quotedblright";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:3:"433";i:2;s:3:"401";i:3;s:3:"676";}}i:187;a:4:{s:1:"C";s:3:"187";s:2:"WX";s:3:"500";s:1:"N";s:14:"guillemotright";s:1:"B";a:4:{i:0;s:2:"44";i:1;s:2:"33";i:2;s:3:"458";i:3;s:3:"416";}}s:14:"guillemotright";a:4:{s:1:"C";s:3:"187";s:2:"WX";s:3:"500";s:1:"N";s:14:"guillemotright";s:1:"B";a:4:{i:0;s:2:"44";i:1;s:2:"33";i:2;s:3:"458";i:3;s:3:"416";}}i:188;a:4:{s:1:"C";s:3:"188";s:2:"WX";s:4:"1000";s:1:"N";s:8:"ellipsis";s:1:"B";a:4:{i:0;s:3:"111";i:1;s:3:"-11";i:2;s:3:"888";i:3;s:3:"100";}}s:8:"ellipsis";a:4:{s:1:"C";s:3:"188";s:2:"WX";s:4:"1000";s:1:"N";s:8:"ellipsis";s:1:"B";a:4:{i:0;s:3:"111";i:1;s:3:"-11";i:2;s:3:"888";i:3;s:3:"100";}}i:189;a:4:{s:1:"C";s:3:"189";s:2:"WX";s:4:"1000";s:1:"N";s:11:"perthousand";s:1:"B";a:4:{i:0;s:1:"7";i:1;s:3:"-19";i:2;s:3:"994";i:3;s:3:"706";}}s:11:"perthousand";a:4:{s:1:"C";s:3:"189";s:2:"WX";s:4:"1000";s:1:"N";s:11:"perthousand";s:1:"B";a:4:{i:0;s:1:"7";i:1;s:3:"-19";i:2;s:3:"994";i:3;s:3:"706";}}i:191;a:4:{s:1:"C";s:3:"191";s:2:"WX";s:3:"444";s:1:"N";s:12:"questiondown";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:4:"-218";i:2;s:3:"376";i:3;s:3:"466";}}s:12:"questiondown";a:4:{s:1:"C";s:3:"191";s:2:"WX";s:3:"444";s:1:"N";s:12:"questiondown";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:4:"-218";i:2;s:3:"376";i:3;s:3:"466";}}i:193;a:4:{s:1:"C";s:3:"193";s:2:"WX";s:3:"333";s:1:"N";s:5:"grave";s:1:"B";a:4:{i:0;s:2:"19";i:1;s:3:"507";i:2;s:3:"242";i:3;s:3:"678";}}s:5:"grave";a:4:{s:1:"C";s:3:"193";s:2:"WX";s:3:"333";s:1:"N";s:5:"grave";s:1:"B";a:4:{i:0;s:2:"19";i:1;s:3:"507";i:2;s:3:"242";i:3;s:3:"678";}}i:194;a:4:{s:1:"C";s:3:"194";s:2:"WX";s:3:"333";s:1:"N";s:5:"acute";s:1:"B";a:4:{i:0;s:2:"93";i:1;s:3:"507";i:2;s:3:"317";i:3;s:3:"678";}}s:5:"acute";a:4:{s:1:"C";s:3:"194";s:2:"WX";s:3:"333";s:1:"N";s:5:"acute";s:1:"B";a:4:{i:0;s:2:"93";i:1;s:3:"507";i:2;s:3:"317";i:3;s:3:"678";}}i:195;a:4:{s:1:"C";s:3:"195";s:2:"WX";s:3:"333";s:1:"N";s:10:"circumflex";s:1:"B";a:4:{i:0;s:2:"11";i:1;s:3:"507";i:2;s:3:"322";i:3;s:3:"674";}}s:10:"circumflex";a:4:{s:1:"C";s:3:"195";s:2:"WX";s:3:"333";s:1:"N";s:10:"circumflex";s:1:"B";a:4:{i:0;s:2:"11";i:1;s:3:"507";i:2;s:3:"322";i:3;s:3:"674";}}i:196;a:4:{s:1:"C";s:3:"196";s:2:"WX";s:3:"333";s:1:"N";s:5:"tilde";s:1:"B";a:4:{i:0;s:1:"1";i:1;s:3:"532";i:2;s:3:"331";i:3;s:3:"638";}}s:5:"tilde";a:4:{s:1:"C";s:3:"196";s:2:"WX";s:3:"333";s:1:"N";s:5:"tilde";s:1:"B";a:4:{i:0;s:1:"1";i:1;s:3:"532";i:2;s:3:"331";i:3;s:3:"638";}}i:197;a:4:{s:1:"C";s:3:"197";s:2:"WX";s:3:"333";s:1:"N";s:6:"macron";s:1:"B";a:4:{i:0;s:2:"11";i:1;s:3:"547";i:2;s:3:"322";i:3;s:3:"601";}}s:6:"macron";a:4:{s:1:"C";s:3:"197";s:2:"WX";s:3:"333";s:1:"N";s:6:"macron";s:1:"B";a:4:{i:0;s:2:"11";i:1;s:3:"547";i:2;s:3:"322";i:3;s:3:"601";}}i:198;a:4:{s:1:"C";s:3:"198";s:2:"WX";s:3:"333";s:1:"N";s:5:"breve";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:3:"507";i:2;s:3:"307";i:3;s:3:"664";}}s:5:"breve";a:4:{s:1:"C";s:3:"198";s:2:"WX";s:3:"333";s:1:"N";s:5:"breve";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:3:"507";i:2;s:3:"307";i:3;s:3:"664";}}i:199;a:4:{s:1:"C";s:3:"199";s:2:"WX";s:3:"333";s:1:"N";s:9:"dotaccent";s:1:"B";a:4:{i:0;s:3:"118";i:1;s:3:"581";i:2;s:3:"216";i:3;s:3:"681";}}s:9:"dotaccent";a:4:{s:1:"C";s:3:"199";s:2:"WX";s:3:"333";s:1:"N";s:9:"dotaccent";s:1:"B";a:4:{i:0;s:3:"118";i:1;s:3:"581";i:2;s:3:"216";i:3;s:3:"681";}}i:200;a:4:{s:1:"C";s:3:"200";s:2:"WX";s:3:"333";s:1:"N";s:8:"dieresis";s:1:"B";a:4:{i:0;s:2:"18";i:1;s:3:"581";i:2;s:3:"315";i:3;s:3:"681";}}s:8:"dieresis";a:4:{s:1:"C";s:3:"200";s:2:"WX";s:3:"333";s:1:"N";s:8:"dieresis";s:1:"B";a:4:{i:0;s:2:"18";i:1;s:3:"581";i:2;s:3:"315";i:3;s:3:"681";}}i:202;a:4:{s:1:"C";s:3:"202";s:2:"WX";s:3:"333";s:1:"N";s:4:"ring";s:1:"B";a:4:{i:0;s:2:"67";i:1;s:3:"512";i:2;s:3:"266";i:3;s:3:"711";}}s:4:"ring";a:4:{s:1:"C";s:3:"202";s:2:"WX";s:3:"333";s:1:"N";s:4:"ring";s:1:"B";a:4:{i:0;s:2:"67";i:1;s:3:"512";i:2;s:3:"266";i:3;s:3:"711";}}i:203;a:4:{s:1:"C";s:3:"203";s:2:"WX";s:3:"333";s:1:"N";s:7:"cedilla";s:1:"B";a:4:{i:0;s:2:"52";i:1;s:4:"-215";i:2;s:3:"261";i:3;s:1:"0";}}s:7:"cedilla";a:4:{s:1:"C";s:3:"203";s:2:"WX";s:3:"333";s:1:"N";s:7:"cedilla";s:1:"B";a:4:{i:0;s:2:"52";i:1;s:4:"-215";i:2;s:3:"261";i:3;s:1:"0";}}i:205;a:4:{s:1:"C";s:3:"205";s:2:"WX";s:3:"333";s:1:"N";s:12:"hungarumlaut";s:1:"B";a:4:{i:0;s:2:"-3";i:1;s:3:"507";i:2;s:3:"377";i:3;s:3:"678";}}s:12:"hungarumlaut";a:4:{s:1:"C";s:3:"205";s:2:"WX";s:3:"333";s:1:"N";s:12:"hungarumlaut";s:1:"B";a:4:{i:0;s:2:"-3";i:1;s:3:"507";i:2;s:3:"377";i:3;s:3:"678";}}i:206;a:4:{s:1:"C";s:3:"206";s:2:"WX";s:3:"333";s:1:"N";s:6:"ogonek";s:1:"B";a:4:{i:0;s:2:"62";i:1;s:4:"-165";i:2;s:3:"243";i:3;s:1:"0";}}s:6:"ogonek";a:4:{s:1:"C";s:3:"206";s:2:"WX";s:3:"333";s:1:"N";s:6:"ogonek";s:1:"B";a:4:{i:0;s:2:"62";i:1;s:4:"-165";i:2;s:3:"243";i:3;s:1:"0";}}i:207;a:4:{s:1:"C";s:3:"207";s:2:"WX";s:3:"333";s:1:"N";s:5:"caron";s:1:"B";a:4:{i:0;s:2:"11";i:1;s:3:"507";i:2;s:3:"322";i:3;s:3:"674";}}s:5:"caron";a:4:{s:1:"C";s:3:"207";s:2:"WX";s:3:"333";s:1:"N";s:5:"caron";s:1:"B";a:4:{i:0;s:2:"11";i:1;s:3:"507";i:2;s:3:"322";i:3;s:3:"674";}}i:208;a:4:{s:1:"C";s:3:"208";s:2:"WX";s:4:"1000";s:1:"N";s:6:"emdash";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:3:"201";i:2;s:4:"1000";i:3;s:3:"250";}}s:6:"emdash";a:4:{s:1:"C";s:3:"208";s:2:"WX";s:4:"1000";s:1:"N";s:6:"emdash";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:3:"201";i:2;s:4:"1000";i:3;s:3:"250";}}i:225;a:4:{s:1:"C";s:3:"225";s:2:"WX";s:3:"889";s:1:"N";s:2:"AE";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:1:"0";i:2;s:3:"863";i:3;s:3:"662";}}s:2:"AE";a:4:{s:1:"C";s:3:"225";s:2:"WX";s:3:"889";s:1:"N";s:2:"AE";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:1:"0";i:2;s:3:"863";i:3;s:3:"662";}}i:227;a:4:{s:1:"C";s:3:"227";s:2:"WX";s:3:"276";s:1:"N";s:11:"ordfeminine";s:1:"B";a:4:{i:0;s:1:"4";i:1;s:3:"394";i:2;s:3:"270";i:3;s:3:"676";}}s:11:"ordfeminine";a:4:{s:1:"C";s:3:"227";s:2:"WX";s:3:"276";s:1:"N";s:11:"ordfeminine";s:1:"B";a:4:{i:0;s:1:"4";i:1;s:3:"394";i:2;s:3:"270";i:3;s:3:"676";}}i:232;a:4:{s:1:"C";s:3:"232";s:2:"WX";s:3:"611";s:1:"N";s:6:"Lslash";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:1:"0";i:2;s:3:"598";i:3;s:3:"662";}}s:6:"Lslash";a:4:{s:1:"C";s:3:"232";s:2:"WX";s:3:"611";s:1:"N";s:6:"Lslash";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:1:"0";i:2;s:3:"598";i:3;s:3:"662";}}i:233;a:4:{s:1:"C";s:3:"233";s:2:"WX";s:3:"722";s:1:"N";s:6:"Oslash";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-80";i:2;s:3:"688";i:3;s:3:"734";}}s:6:"Oslash";a:4:{s:1:"C";s:3:"233";s:2:"WX";s:3:"722";s:1:"N";s:6:"Oslash";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-80";i:2;s:3:"688";i:3;s:3:"734";}}i:234;a:4:{s:1:"C";s:3:"234";s:2:"WX";s:3:"889";s:1:"N";s:2:"OE";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:2:"-6";i:2;s:3:"885";i:3;s:3:"668";}}s:2:"OE";a:4:{s:1:"C";s:3:"234";s:2:"WX";s:3:"889";s:1:"N";s:2:"OE";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:2:"-6";i:2;s:3:"885";i:3;s:3:"668";}}i:235;a:4:{s:1:"C";s:3:"235";s:2:"WX";s:3:"310";s:1:"N";s:12:"ordmasculine";s:1:"B";a:4:{i:0;s:1:"6";i:1;s:3:"394";i:2;s:3:"304";i:3;s:3:"676";}}s:12:"ordmasculine";a:4:{s:1:"C";s:3:"235";s:2:"WX";s:3:"310";s:1:"N";s:12:"ordmasculine";s:1:"B";a:4:{i:0;s:1:"6";i:1;s:3:"394";i:2;s:3:"304";i:3;s:3:"676";}}i:241;a:4:{s:1:"C";s:3:"241";s:2:"WX";s:3:"667";s:1:"N";s:2:"ae";s:1:"B";a:4:{i:0;s:2:"38";i:1;s:3:"-10";i:2;s:3:"632";i:3;s:3:"460";}}s:2:"ae";a:4:{s:1:"C";s:3:"241";s:2:"WX";s:3:"667";s:1:"N";s:2:"ae";s:1:"B";a:4:{i:0;s:2:"38";i:1;s:3:"-10";i:2;s:3:"632";i:3;s:3:"460";}}i:245;a:4:{s:1:"C";s:3:"245";s:2:"WX";s:3:"278";s:1:"N";s:8:"dotlessi";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:1:"0";i:2;s:3:"253";i:3;s:3:"460";}}s:8:"dotlessi";a:4:{s:1:"C";s:3:"245";s:2:"WX";s:3:"278";s:1:"N";s:8:"dotlessi";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:1:"0";i:2;s:3:"253";i:3;s:3:"460";}}i:248;a:4:{s:1:"C";s:3:"248";s:2:"WX";s:3:"278";s:1:"N";s:6:"lslash";s:1:"B";a:4:{i:0;s:2:"19";i:1;s:1:"0";i:2;s:3:"259";i:3;s:3:"683";}}s:6:"lslash";a:4:{s:1:"C";s:3:"248";s:2:"WX";s:3:"278";s:1:"N";s:6:"lslash";s:1:"B";a:4:{i:0;s:2:"19";i:1;s:1:"0";i:2;s:3:"259";i:3;s:3:"683";}}i:249;a:4:{s:1:"C";s:3:"249";s:2:"WX";s:3:"500";s:1:"N";s:6:"oslash";s:1:"B";a:4:{i:0;s:2:"29";i:1;s:4:"-112";i:2;s:3:"470";i:3;s:3:"551";}}s:6:"oslash";a:4:{s:1:"C";s:3:"249";s:2:"WX";s:3:"500";s:1:"N";s:6:"oslash";s:1:"B";a:4:{i:0;s:2:"29";i:1;s:4:"-112";i:2;s:3:"470";i:3;s:3:"551";}}i:250;a:4:{s:1:"C";s:3:"250";s:2:"WX";s:3:"722";s:1:"N";s:2:"oe";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:3:"-10";i:2;s:3:"690";i:3;s:3:"460";}}s:2:"oe";a:4:{s:1:"C";s:3:"250";s:2:"WX";s:3:"722";s:1:"N";s:2:"oe";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:3:"-10";i:2;s:3:"690";i:3;s:3:"460";}}i:251;a:4:{s:1:"C";s:3:"251";s:2:"WX";s:3:"500";s:1:"N";s:10:"germandbls";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:2:"-9";i:2;s:3:"468";i:3;s:3:"683";}}s:10:"germandbls";a:4:{s:1:"C";s:3:"251";s:2:"WX";s:3:"500";s:1:"N";s:10:"germandbls";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:2:"-9";i:2;s:3:"468";i:3;s:3:"683";}}s:9:"Idieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"333";s:1:"N";s:9:"Idieresis";s:1:"B";a:4:{i:0;s:2:"18";i:1;s:1:"0";i:2;s:3:"315";i:3;s:3:"835";}}s:6:"eacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:6:"eacute";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-10";i:2;s:3:"424";i:3;s:3:"678";}}s:6:"abreve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:6:"abreve";s:1:"B";a:4:{i:0;s:2:"37";i:1;s:3:"-10";i:2;s:3:"442";i:3;s:3:"664";}}s:13:"uhungarumlaut";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:13:"uhungarumlaut";s:1:"B";a:4:{i:0;s:1:"9";i:1;s:3:"-10";i:2;s:3:"501";i:3;s:3:"678";}}s:6:"ecaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:6:"ecaron";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-10";i:2;s:3:"424";i:3;s:3:"674";}}s:9:"Ydieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:9:"Ydieresis";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:1:"0";i:2;s:3:"703";i:3;s:3:"835";}}s:6:"divide";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"564";s:1:"N";s:6:"divide";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:3:"-10";i:2;s:3:"534";i:3;s:3:"516";}}s:6:"Yacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Yacute";s:1:"B";a:4:{i:0;s:2:"22";i:1;s:1:"0";i:2;s:3:"703";i:3;s:3:"890";}}s:11:"Acircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:11:"Acircumflex";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:1:"0";i:2;s:3:"706";i:3;s:3:"886";}}s:6:"aacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:6:"aacute";s:1:"B";a:4:{i:0;s:2:"37";i:1;s:3:"-10";i:2;s:3:"442";i:3;s:3:"678";}}s:11:"Ucircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:11:"Ucircumflex";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:3:"-14";i:2;s:3:"705";i:3;s:3:"886";}}s:6:"yacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"yacute";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:4:"-218";i:2;s:3:"475";i:3;s:3:"678";}}s:12:"scommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"389";s:1:"N";s:12:"scommaaccent";s:1:"B";a:4:{i:0;s:2:"51";i:1;s:4:"-218";i:2;s:3:"348";i:3;s:3:"460";}}s:11:"ecircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:11:"ecircumflex";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-10";i:2;s:3:"424";i:3;s:3:"674";}}s:5:"Uring";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:5:"Uring";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:3:"-14";i:2;s:3:"705";i:3;s:3:"898";}}s:9:"Udieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:9:"Udieresis";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:3:"-14";i:2;s:3:"705";i:3;s:3:"835";}}s:7:"aogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:7:"aogonek";s:1:"B";a:4:{i:0;s:2:"37";i:1;s:4:"-165";i:2;s:3:"469";i:3;s:3:"460";}}s:6:"Uacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Uacute";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:3:"-14";i:2;s:3:"705";i:3;s:3:"890";}}s:7:"uogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:7:"uogonek";s:1:"B";a:4:{i:0;s:1:"9";i:1;s:4:"-155";i:2;s:3:"487";i:3;s:3:"450";}}s:9:"Edieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:9:"Edieresis";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:1:"0";i:2;s:3:"597";i:3;s:3:"835";}}s:6:"Dcroat";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Dcroat";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:1:"0";i:2;s:3:"685";i:3;s:3:"662";}}s:11:"commaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"250";s:1:"N";s:11:"commaaccent";s:1:"B";a:4:{i:0;s:2:"59";i:1;s:4:"-218";i:2;s:3:"184";i:3;s:3:"-50";}}s:9:"copyright";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"760";s:1:"N";s:9:"copyright";s:1:"B";a:4:{i:0;s:2:"38";i:1;s:3:"-14";i:2;s:3:"722";i:3;s:3:"676";}}s:7:"Emacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:7:"Emacron";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:1:"0";i:2;s:3:"597";i:3;s:3:"813";}}s:6:"ccaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:6:"ccaron";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-10";i:2;s:3:"412";i:3;s:3:"674";}}s:5:"aring";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:5:"aring";s:1:"B";a:4:{i:0;s:2:"37";i:1;s:3:"-10";i:2;s:3:"442";i:3;s:3:"711";}}s:12:"Ncommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:12:"Ncommaaccent";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:4:"-198";i:2;s:3:"707";i:3;s:3:"662";}}s:6:"lacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:6:"lacute";s:1:"B";a:4:{i:0;s:2:"19";i:1;s:1:"0";i:2;s:3:"290";i:3;s:3:"890";}}s:6:"agrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:6:"agrave";s:1:"B";a:4:{i:0;s:2:"37";i:1;s:3:"-10";i:2;s:3:"442";i:3;s:3:"678";}}s:12:"Tcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:12:"Tcommaaccent";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:4:"-218";i:2;s:3:"593";i:3;s:3:"662";}}s:6:"Cacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Cacute";s:1:"B";a:4:{i:0;s:2:"28";i:1;s:3:"-14";i:2;s:3:"633";i:3;s:3:"890";}}s:6:"atilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:6:"atilde";s:1:"B";a:4:{i:0;s:2:"37";i:1;s:3:"-10";i:2;s:3:"442";i:3;s:3:"638";}}s:10:"Edotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:10:"Edotaccent";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:1:"0";i:2;s:3:"597";i:3;s:3:"835";}}s:6:"scaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"389";s:1:"N";s:6:"scaron";s:1:"B";a:4:{i:0;s:2:"39";i:1;s:3:"-10";i:2;s:3:"350";i:3;s:3:"674";}}s:8:"scedilla";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"389";s:1:"N";s:8:"scedilla";s:1:"B";a:4:{i:0;s:2:"51";i:1;s:4:"-215";i:2;s:3:"348";i:3;s:3:"460";}}s:6:"iacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:6:"iacute";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:1:"0";i:2;s:3:"290";i:3;s:3:"678";}}s:7:"lozenge";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"471";s:1:"N";s:7:"lozenge";s:1:"B";a:4:{i:0;s:2:"13";i:1;s:1:"0";i:2;s:3:"459";i:3;s:3:"724";}}s:6:"Rcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Rcaron";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:1:"0";i:2;s:3:"659";i:3;s:3:"886";}}s:12:"Gcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:12:"Gcommaaccent";s:1:"B";a:4:{i:0;s:2:"32";i:1;s:4:"-218";i:2;s:3:"709";i:3;s:3:"676";}}s:11:"ucircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:11:"ucircumflex";s:1:"B";a:4:{i:0;s:1:"9";i:1;s:3:"-10";i:2;s:3:"479";i:3;s:3:"674";}}s:11:"acircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:11:"acircumflex";s:1:"B";a:4:{i:0;s:2:"37";i:1;s:3:"-10";i:2;s:3:"442";i:3;s:3:"674";}}s:7:"Amacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:7:"Amacron";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:1:"0";i:2;s:3:"706";i:3;s:3:"813";}}s:6:"rcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"333";s:1:"N";s:6:"rcaron";s:1:"B";a:4:{i:0;s:1:"5";i:1;s:1:"0";i:2;s:3:"335";i:3;s:3:"674";}}s:8:"ccedilla";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:8:"ccedilla";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:4:"-215";i:2;s:3:"412";i:3;s:3:"460";}}s:10:"Zdotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:10:"Zdotaccent";s:1:"B";a:4:{i:0;s:1:"9";i:1;s:1:"0";i:2;s:3:"597";i:3;s:3:"835";}}s:5:"Thorn";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:5:"Thorn";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:1:"0";i:2;s:3:"542";i:3;s:3:"662";}}s:7:"Omacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:7:"Omacron";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-14";i:2;s:3:"688";i:3;s:3:"813";}}s:6:"Racute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Racute";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:1:"0";i:2;s:3:"659";i:3;s:3:"890";}}s:6:"Sacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"Sacute";s:1:"B";a:4:{i:0;s:2:"42";i:1;s:3:"-14";i:2;s:3:"491";i:3;s:3:"890";}}s:6:"dcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"588";s:1:"N";s:6:"dcaron";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:3:"-10";i:2;s:3:"589";i:3;s:3:"695";}}s:7:"Umacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:7:"Umacron";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:3:"-14";i:2;s:3:"705";i:3;s:3:"813";}}s:5:"uring";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:5:"uring";s:1:"B";a:4:{i:0;s:1:"9";i:1;s:3:"-10";i:2;s:3:"479";i:3;s:3:"711";}}s:13:"threesuperior";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"300";s:1:"N";s:13:"threesuperior";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:3:"262";i:2;s:3:"291";i:3;s:3:"676";}}s:6:"Ograve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Ograve";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-14";i:2;s:3:"688";i:3;s:3:"890";}}s:6:"Agrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Agrave";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:1:"0";i:2;s:3:"706";i:3;s:3:"890";}}s:6:"Abreve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Abreve";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:1:"0";i:2;s:3:"706";i:3;s:3:"876";}}s:8:"multiply";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"564";s:1:"N";s:8:"multiply";s:1:"B";a:4:{i:0;s:2:"38";i:1;s:1:"8";i:2;s:3:"527";i:3;s:3:"497";}}s:6:"uacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"uacute";s:1:"B";a:4:{i:0;s:1:"9";i:1;s:3:"-10";i:2;s:3:"479";i:3;s:3:"678";}}s:6:"Tcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"Tcaron";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:1:"0";i:2;s:3:"593";i:3;s:3:"886";}}s:11:"partialdiff";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"476";s:1:"N";s:11:"partialdiff";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:3:"-38";i:2;s:3:"459";i:3;s:3:"710";}}s:9:"ydieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:9:"ydieresis";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:4:"-218";i:2;s:3:"475";i:3;s:3:"623";}}s:6:"Nacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Nacute";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:3:"-11";i:2;s:3:"707";i:3;s:3:"890";}}s:11:"icircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:11:"icircumflex";s:1:"B";a:4:{i:0;s:3:"-16";i:1;s:1:"0";i:2;s:3:"295";i:3;s:3:"674";}}s:11:"Ecircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:11:"Ecircumflex";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:1:"0";i:2;s:3:"597";i:3;s:3:"886";}}s:9:"adieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:9:"adieresis";s:1:"B";a:4:{i:0;s:2:"37";i:1;s:3:"-10";i:2;s:3:"442";i:3;s:3:"623";}}s:9:"edieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:9:"edieresis";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-10";i:2;s:3:"424";i:3;s:3:"623";}}s:6:"cacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:6:"cacute";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-10";i:2;s:3:"413";i:3;s:3:"678";}}s:6:"nacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"nacute";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:1:"0";i:2;s:3:"485";i:3;s:3:"678";}}s:7:"umacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:7:"umacron";s:1:"B";a:4:{i:0;s:1:"9";i:1;s:3:"-10";i:2;s:3:"479";i:3;s:3:"601";}}s:6:"Ncaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Ncaron";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:3:"-11";i:2;s:3:"707";i:3;s:3:"886";}}s:6:"Iacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"333";s:1:"N";s:6:"Iacute";s:1:"B";a:4:{i:0;s:2:"18";i:1;s:1:"0";i:2;s:3:"317";i:3;s:3:"890";}}s:9:"plusminus";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"564";s:1:"N";s:9:"plusminus";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:1:"0";i:2;s:3:"534";i:3;s:3:"506";}}s:9:"brokenbar";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"200";s:1:"N";s:9:"brokenbar";s:1:"B";a:4:{i:0;s:2:"67";i:1;s:4:"-143";i:2;s:3:"133";i:3;s:3:"707";}}s:10:"registered";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"760";s:1:"N";s:10:"registered";s:1:"B";a:4:{i:0;s:2:"38";i:1;s:3:"-14";i:2;s:3:"722";i:3;s:3:"676";}}s:6:"Gbreve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Gbreve";s:1:"B";a:4:{i:0;s:2:"32";i:1;s:3:"-14";i:2;s:3:"709";i:3;s:3:"876";}}s:10:"Idotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"333";s:1:"N";s:10:"Idotaccent";s:1:"B";a:4:{i:0;s:2:"18";i:1;s:1:"0";i:2;s:3:"315";i:3;s:3:"835";}}s:9:"summation";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"600";s:1:"N";s:9:"summation";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:3:"-10";i:2;s:3:"585";i:3;s:3:"706";}}s:6:"Egrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"Egrave";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:1:"0";i:2;s:3:"597";i:3;s:3:"890";}}s:6:"racute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"333";s:1:"N";s:6:"racute";s:1:"B";a:4:{i:0;s:1:"5";i:1;s:1:"0";i:2;s:3:"335";i:3;s:3:"678";}}s:7:"omacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:7:"omacron";s:1:"B";a:4:{i:0;s:2:"29";i:1;s:3:"-10";i:2;s:3:"470";i:3;s:3:"601";}}s:6:"Zacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"Zacute";s:1:"B";a:4:{i:0;s:1:"9";i:1;s:1:"0";i:2;s:3:"597";i:3;s:3:"890";}}s:6:"Zcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"Zcaron";s:1:"B";a:4:{i:0;s:1:"9";i:1;s:1:"0";i:2;s:3:"597";i:3;s:3:"886";}}s:12:"greaterequal";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"549";s:1:"N";s:12:"greaterequal";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:1:"0";i:2;s:3:"523";i:3;s:3:"666";}}s:3:"Eth";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:3:"Eth";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:1:"0";i:2;s:3:"685";i:3;s:3:"662";}}s:8:"Ccedilla";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:8:"Ccedilla";s:1:"B";a:4:{i:0;s:2:"28";i:1;s:4:"-215";i:2;s:3:"633";i:3;s:3:"676";}}s:12:"lcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:12:"lcommaaccent";s:1:"B";a:4:{i:0;s:2:"19";i:1;s:4:"-218";i:2;s:3:"257";i:3;s:3:"683";}}s:6:"tcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"326";s:1:"N";s:6:"tcaron";s:1:"B";a:4:{i:0;s:2:"13";i:1;s:3:"-10";i:2;s:3:"318";i:3;s:3:"722";}}s:7:"eogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:7:"eogonek";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:4:"-165";i:2;s:3:"424";i:3;s:3:"460";}}s:7:"Uogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:7:"Uogonek";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:4:"-165";i:2;s:3:"705";i:3;s:3:"662";}}s:6:"Aacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Aacute";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:1:"0";i:2;s:3:"706";i:3;s:3:"890";}}s:9:"Adieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:9:"Adieresis";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:1:"0";i:2;s:3:"706";i:3;s:3:"835";}}s:6:"egrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:6:"egrave";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-10";i:2;s:3:"424";i:3;s:3:"678";}}s:6:"zacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:6:"zacute";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:1:"0";i:2;s:3:"418";i:3;s:3:"678";}}s:7:"iogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:7:"iogonek";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:4:"-165";i:2;s:3:"265";i:3;s:3:"683";}}s:6:"Oacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Oacute";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-14";i:2;s:3:"688";i:3;s:3:"890";}}s:6:"oacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"oacute";s:1:"B";a:4:{i:0;s:2:"29";i:1;s:3:"-10";i:2;s:3:"470";i:3;s:3:"678";}}s:7:"amacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:7:"amacron";s:1:"B";a:4:{i:0;s:2:"37";i:1;s:3:"-10";i:2;s:3:"442";i:3;s:3:"601";}}s:6:"sacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"389";s:1:"N";s:6:"sacute";s:1:"B";a:4:{i:0;s:2:"51";i:1;s:3:"-10";i:2;s:3:"348";i:3;s:3:"678";}}s:9:"idieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:9:"idieresis";s:1:"B";a:4:{i:0;s:2:"-9";i:1;s:1:"0";i:2;s:3:"288";i:3;s:3:"623";}}s:11:"Ocircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:11:"Ocircumflex";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-14";i:2;s:3:"688";i:3;s:3:"886";}}s:6:"Ugrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Ugrave";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:3:"-14";i:2;s:3:"705";i:3;s:3:"890";}}s:5:"Delta";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"612";s:1:"N";s:5:"Delta";s:1:"B";a:4:{i:0;s:1:"6";i:1;s:1:"0";i:2;s:3:"608";i:3;s:3:"688";}}s:5:"thorn";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:5:"thorn";s:1:"B";a:4:{i:0;s:1:"5";i:1;s:4:"-217";i:2;s:3:"470";i:3;s:3:"683";}}s:11:"twosuperior";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"300";s:1:"N";s:11:"twosuperior";s:1:"B";a:4:{i:0;s:1:"1";i:1;s:3:"270";i:2;s:3:"296";i:3;s:3:"676";}}s:9:"Odieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:9:"Odieresis";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-14";i:2;s:3:"688";i:3;s:3:"835";}}s:2:"mu";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:2:"mu";s:1:"B";a:4:{i:0;s:2:"36";i:1;s:4:"-218";i:2;s:3:"512";i:3;s:3:"450";}}s:6:"igrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:6:"igrave";s:1:"B";a:4:{i:0;s:2:"-8";i:1;s:1:"0";i:2;s:3:"253";i:3;s:3:"678";}}s:13:"ohungarumlaut";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:13:"ohungarumlaut";s:1:"B";a:4:{i:0;s:2:"29";i:1;s:3:"-10";i:2;s:3:"491";i:3;s:3:"678";}}s:7:"Eogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:7:"Eogonek";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:4:"-165";i:2;s:3:"597";i:3;s:3:"662";}}s:6:"dcroat";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"dcroat";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:3:"-10";i:2;s:3:"500";i:3;s:3:"683";}}s:13:"threequarters";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"750";s:1:"N";s:13:"threequarters";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:3:"-14";i:2;s:3:"718";i:3;s:3:"676";}}s:8:"Scedilla";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:8:"Scedilla";s:1:"B";a:4:{i:0;s:2:"42";i:1;s:4:"-215";i:2;s:3:"491";i:3;s:3:"676";}}s:6:"lcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"344";s:1:"N";s:6:"lcaron";s:1:"B";a:4:{i:0;s:2:"19";i:1;s:1:"0";i:2;s:3:"347";i:3;s:3:"695";}}s:12:"Kcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:12:"Kcommaaccent";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:4:"-198";i:2;s:3:"723";i:3;s:3:"662";}}s:6:"Lacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"Lacute";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:1:"0";i:2;s:3:"598";i:3;s:3:"890";}}s:9:"trademark";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"980";s:1:"N";s:9:"trademark";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:3:"256";i:2;s:3:"957";i:3;s:3:"662";}}s:10:"edotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:10:"edotaccent";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-10";i:2;s:3:"424";i:3;s:3:"623";}}s:6:"Igrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"333";s:1:"N";s:6:"Igrave";s:1:"B";a:4:{i:0;s:2:"18";i:1;s:1:"0";i:2;s:3:"315";i:3;s:3:"890";}}s:7:"Imacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"333";s:1:"N";s:7:"Imacron";s:1:"B";a:4:{i:0;s:2:"11";i:1;s:1:"0";i:2;s:3:"322";i:3;s:3:"813";}}s:6:"Lcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"Lcaron";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:1:"0";i:2;s:3:"598";i:3;s:3:"676";}}s:7:"onehalf";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"750";s:1:"N";s:7:"onehalf";s:1:"B";a:4:{i:0;s:2:"31";i:1;s:3:"-14";i:2;s:3:"746";i:3;s:3:"676";}}s:9:"lessequal";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"549";s:1:"N";s:9:"lessequal";s:1:"B";a:4:{i:0;s:2:"26";i:1;s:1:"0";i:2;s:3:"523";i:3;s:3:"666";}}s:11:"ocircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:11:"ocircumflex";s:1:"B";a:4:{i:0;s:2:"29";i:1;s:3:"-10";i:2;s:3:"470";i:3;s:3:"674";}}s:6:"ntilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"ntilde";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:1:"0";i:2;s:3:"485";i:3;s:3:"638";}}s:13:"Uhungarumlaut";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:13:"Uhungarumlaut";s:1:"B";a:4:{i:0;s:2:"14";i:1;s:3:"-14";i:2;s:3:"705";i:3;s:3:"890";}}s:6:"Eacute";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"Eacute";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:1:"0";i:2;s:3:"597";i:3;s:3:"890";}}s:7:"emacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:7:"emacron";s:1:"B";a:4:{i:0;s:2:"25";i:1;s:3:"-10";i:2;s:3:"424";i:3;s:3:"601";}}s:6:"gbreve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"gbreve";s:1:"B";a:4:{i:0;s:2:"28";i:1;s:4:"-218";i:2;s:3:"470";i:3;s:3:"664";}}s:10:"onequarter";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"750";s:1:"N";s:10:"onequarter";s:1:"B";a:4:{i:0;s:2:"37";i:1;s:3:"-14";i:2;s:3:"718";i:3;s:3:"676";}}s:6:"Scaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:6:"Scaron";s:1:"B";a:4:{i:0;s:2:"42";i:1;s:3:"-14";i:2;s:3:"491";i:3;s:3:"886";}}s:12:"Scommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"556";s:1:"N";s:12:"Scommaaccent";s:1:"B";a:4:{i:0;s:2:"42";i:1;s:4:"-218";i:2;s:3:"491";i:3;s:3:"676";}}s:13:"Ohungarumlaut";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:13:"Ohungarumlaut";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-14";i:2;s:3:"688";i:3;s:3:"890";}}s:6:"degree";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"400";s:1:"N";s:6:"degree";s:1:"B";a:4:{i:0;s:2:"57";i:1;s:3:"390";i:2;s:3:"343";i:3;s:3:"676";}}s:6:"ograve";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"ograve";s:1:"B";a:4:{i:0;s:2:"29";i:1;s:3:"-10";i:2;s:3:"470";i:3;s:3:"678";}}s:6:"Ccaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:6:"Ccaron";s:1:"B";a:4:{i:0;s:2:"28";i:1;s:3:"-14";i:2;s:3:"633";i:3;s:3:"886";}}s:6:"ugrave";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"ugrave";s:1:"B";a:4:{i:0;s:1:"9";i:1;s:3:"-10";i:2;s:3:"479";i:3;s:3:"678";}}s:7:"radical";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"453";s:1:"N";s:7:"radical";s:1:"B";a:4:{i:0;s:1:"2";i:1;s:3:"-60";i:2;s:3:"452";i:3;s:3:"768";}}s:6:"Dcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Dcaron";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:1:"0";i:2;s:3:"685";i:3;s:3:"886";}}s:12:"rcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"333";s:1:"N";s:12:"rcommaaccent";s:1:"B";a:4:{i:0;s:1:"5";i:1;s:4:"-218";i:2;s:3:"335";i:3;s:3:"460";}}s:6:"Ntilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Ntilde";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:3:"-11";i:2;s:3:"707";i:3;s:3:"850";}}s:6:"otilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"otilde";s:1:"B";a:4:{i:0;s:2:"29";i:1;s:3:"-10";i:2;s:3:"470";i:3;s:3:"638";}}s:12:"Rcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"667";s:1:"N";s:12:"Rcommaaccent";s:1:"B";a:4:{i:0;s:2:"17";i:1;s:4:"-198";i:2;s:3:"659";i:3;s:3:"662";}}s:12:"Lcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:12:"Lcommaaccent";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:4:"-218";i:2;s:3:"598";i:3;s:3:"662";}}s:6:"Atilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Atilde";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:1:"0";i:2;s:3:"706";i:3;s:3:"850";}}s:7:"Aogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:7:"Aogonek";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:4:"-165";i:2;s:3:"738";i:3;s:3:"674";}}s:5:"Aring";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:5:"Aring";s:1:"B";a:4:{i:0;s:2:"15";i:1;s:1:"0";i:2;s:3:"706";i:3;s:3:"898";}}s:6:"Otilde";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"722";s:1:"N";s:6:"Otilde";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-14";i:2;s:3:"688";i:3;s:3:"850";}}s:10:"zdotaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:10:"zdotaccent";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:1:"0";i:2;s:3:"418";i:3;s:3:"623";}}s:6:"Ecaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"611";s:1:"N";s:6:"Ecaron";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:1:"0";i:2;s:3:"597";i:3;s:3:"886";}}s:7:"Iogonek";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"333";s:1:"N";s:7:"Iogonek";s:1:"B";a:4:{i:0;s:2:"18";i:1;s:4:"-165";i:2;s:3:"315";i:3;s:3:"662";}}s:12:"kcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:12:"kcommaaccent";s:1:"B";a:4:{i:0;s:1:"7";i:1;s:4:"-218";i:2;s:3:"505";i:3;s:3:"683";}}s:5:"minus";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"564";s:1:"N";s:5:"minus";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:3:"220";i:2;s:3:"534";i:3;s:3:"286";}}s:11:"Icircumflex";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"333";s:1:"N";s:11:"Icircumflex";s:1:"B";a:4:{i:0;s:2:"11";i:1;s:1:"0";i:2;s:3:"322";i:3;s:3:"886";}}s:6:"ncaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:6:"ncaron";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:1:"0";i:2;s:3:"485";i:3;s:3:"674";}}s:12:"tcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:12:"tcommaaccent";s:1:"B";a:4:{i:0;s:2:"13";i:1;s:4:"-218";i:2;s:3:"279";i:3;s:3:"579";}}s:10:"logicalnot";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"564";s:1:"N";s:10:"logicalnot";s:1:"B";a:4:{i:0;s:2:"30";i:1;s:3:"108";i:2;s:3:"534";i:3;s:3:"386";}}s:9:"odieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:9:"odieresis";s:1:"B";a:4:{i:0;s:2:"29";i:1;s:3:"-10";i:2;s:3:"470";i:3;s:3:"623";}}s:9:"udieresis";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:9:"udieresis";s:1:"B";a:4:{i:0;s:1:"9";i:1;s:3:"-10";i:2;s:3:"479";i:3;s:3:"623";}}s:8:"notequal";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"549";s:1:"N";s:8:"notequal";s:1:"B";a:4:{i:0;s:2:"12";i:1;s:3:"-31";i:2;s:3:"537";i:3;s:3:"547";}}s:12:"gcommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:12:"gcommaaccent";s:1:"B";a:4:{i:0;s:2:"28";i:1;s:4:"-218";i:2;s:3:"470";i:3;s:3:"749";}}s:3:"eth";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:3:"eth";s:1:"B";a:4:{i:0;s:2:"29";i:1;s:3:"-10";i:2;s:3:"471";i:3;s:3:"686";}}s:6:"zcaron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"444";s:1:"N";s:6:"zcaron";s:1:"B";a:4:{i:0;s:2:"27";i:1;s:1:"0";i:2;s:3:"418";i:3;s:3:"674";}}s:12:"ncommaaccent";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:12:"ncommaaccent";s:1:"B";a:4:{i:0;s:2:"16";i:1;s:4:"-218";i:2;s:3:"485";i:3;s:3:"460";}}s:11:"onesuperior";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"300";s:1:"N";s:11:"onesuperior";s:1:"B";a:4:{i:0;s:2:"57";i:1;s:3:"270";i:2;s:3:"248";i:3;s:3:"676";}}s:7:"imacron";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"278";s:1:"N";s:7:"imacron";s:1:"B";a:4:{i:0;s:1:"6";i:1;s:1:"0";i:2;s:3:"271";i:3;s:3:"601";}}s:4:"Euro";a:4:{s:1:"C";s:2:"-1";s:2:"WX";s:3:"500";s:1:"N";s:4:"Euro";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:1:"0";i:2;s:1:"0";i:3;s:1:"0";}}}s:3:"KPX";a:133:{s:1:"A";a:40:{s:1:"C";s:3:"-40";s:6:"Cacute";s:3:"-40";s:6:"Ccaron";s:3:"-40";s:8:"Ccedilla";s:3:"-40";s:1:"G";s:3:"-40";s:6:"Gbreve";s:3:"-40";s:12:"Gcommaaccent";s:3:"-40";s:1:"O";s:3:"-55";s:6:"Oacute";s:3:"-55";s:11:"Ocircumflex";s:3:"-55";s:9:"Odieresis";s:3:"-55";s:6:"Ograve";s:3:"-55";s:13:"Ohungarumlaut";s:3:"-55";s:7:"Omacron";s:3:"-55";s:6:"Oslash";s:3:"-55";s:6:"Otilde";s:3:"-55";s:1:"Q";s:3:"-55";s:1:"T";s:4:"-111";s:6:"Tcaron";s:4:"-111";s:12:"Tcommaaccent";s:4:"-111";s:1:"U";s:3:"-55";s:6:"Uacute";s:3:"-55";s:11:"Ucircumflex";s:3:"-55";s:9:"Udieresis";s:3:"-55";s:6:"Ugrave";s:3:"-55";s:13:"Uhungarumlaut";s:3:"-55";s:7:"Umacron";s:3:"-55";s:7:"Uogonek";s:3:"-55";s:5:"Uring";s:3:"-55";s:1:"V";s:4:"-135";s:1:"W";s:3:"-90";s:1:"Y";s:4:"-105";s:6:"Yacute";s:4:"-105";s:9:"Ydieresis";s:4:"-105";s:10:"quoteright";s:4:"-111";s:1:"v";s:3:"-74";s:1:"w";s:3:"-92";s:1:"y";s:3:"-92";s:6:"yacute";s:3:"-92";s:9:"ydieresis";s:3:"-92";}s:6:"Aacute";a:40:{s:1:"C";s:3:"-40";s:6:"Cacute";s:3:"-40";s:6:"Ccaron";s:3:"-40";s:8:"Ccedilla";s:3:"-40";s:1:"G";s:3:"-40";s:6:"Gbreve";s:3:"-40";s:12:"Gcommaaccent";s:3:"-40";s:1:"O";s:3:"-55";s:6:"Oacute";s:3:"-55";s:11:"Ocircumflex";s:3:"-55";s:9:"Odieresis";s:3:"-55";s:6:"Ograve";s:3:"-55";s:13:"Ohungarumlaut";s:3:"-55";s:7:"Omacron";s:3:"-55";s:6:"Oslash";s:3:"-55";s:6:"Otilde";s:3:"-55";s:1:"Q";s:3:"-55";s:1:"T";s:4:"-111";s:6:"Tcaron";s:4:"-111";s:12:"Tcommaaccent";s:4:"-111";s:1:"U";s:3:"-55";s:6:"Uacute";s:3:"-55";s:11:"Ucircumflex";s:3:"-55";s:9:"Udieresis";s:3:"-55";s:6:"Ugrave";s:3:"-55";s:13:"Uhungarumlaut";s:3:"-55";s:7:"Umacron";s:3:"-55";s:7:"Uogonek";s:3:"-55";s:5:"Uring";s:3:"-55";s:1:"V";s:4:"-135";s:1:"W";s:3:"-90";s:1:"Y";s:4:"-105";s:6:"Yacute";s:4:"-105";s:9:"Ydieresis";s:4:"-105";s:10:"quoteright";s:4:"-111";s:1:"v";s:3:"-74";s:1:"w";s:3:"-92";s:1:"y";s:3:"-92";s:6:"yacute";s:3:"-92";s:9:"ydieresis";s:3:"-92";}s:6:"Abreve";a:40:{s:1:"C";s:3:"-40";s:6:"Cacute";s:3:"-40";s:6:"Ccaron";s:3:"-40";s:8:"Ccedilla";s:3:"-40";s:1:"G";s:3:"-40";s:6:"Gbreve";s:3:"-40";s:12:"Gcommaaccent";s:3:"-40";s:1:"O";s:3:"-55";s:6:"Oacute";s:3:"-55";s:11:"Ocircumflex";s:3:"-55";s:9:"Odieresis";s:3:"-55";s:6:"Ograve";s:3:"-55";s:13:"Ohungarumlaut";s:3:"-55";s:7:"Omacron";s:3:"-55";s:6:"Oslash";s:3:"-55";s:6:"Otilde";s:3:"-55";s:1:"Q";s:3:"-55";s:1:"T";s:4:"-111";s:6:"Tcaron";s:4:"-111";s:12:"Tcommaaccent";s:4:"-111";s:1:"U";s:3:"-55";s:6:"Uacute";s:3:"-55";s:11:"Ucircumflex";s:3:"-55";s:9:"Udieresis";s:3:"-55";s:6:"Ugrave";s:3:"-55";s:13:"Uhungarumlaut";s:3:"-55";s:7:"Umacron";s:3:"-55";s:7:"Uogonek";s:3:"-55";s:5:"Uring";s:3:"-55";s:1:"V";s:4:"-135";s:1:"W";s:3:"-90";s:1:"Y";s:4:"-105";s:6:"Yacute";s:4:"-105";s:9:"Ydieresis";s:4:"-105";s:10:"quoteright";s:4:"-111";s:1:"v";s:3:"-74";s:1:"w";s:3:"-92";s:1:"y";s:3:"-92";s:6:"yacute";s:3:"-92";s:9:"ydieresis";s:3:"-92";}s:11:"Acircumflex";a:40:{s:1:"C";s:3:"-40";s:6:"Cacute";s:3:"-40";s:6:"Ccaron";s:3:"-40";s:8:"Ccedilla";s:3:"-40";s:1:"G";s:3:"-40";s:6:"Gbreve";s:3:"-40";s:12:"Gcommaaccent";s:3:"-40";s:1:"O";s:3:"-55";s:6:"Oacute";s:3:"-55";s:11:"Ocircumflex";s:3:"-55";s:9:"Odieresis";s:3:"-55";s:6:"Ograve";s:3:"-55";s:13:"Ohungarumlaut";s:3:"-55";s:7:"Omacron";s:3:"-55";s:6:"Oslash";s:3:"-55";s:6:"Otilde";s:3:"-55";s:1:"Q";s:3:"-55";s:1:"T";s:4:"-111";s:6:"Tcaron";s:4:"-111";s:12:"Tcommaaccent";s:4:"-111";s:1:"U";s:3:"-55";s:6:"Uacute";s:3:"-55";s:11:"Ucircumflex";s:3:"-55";s:9:"Udieresis";s:3:"-55";s:6:"Ugrave";s:3:"-55";s:13:"Uhungarumlaut";s:3:"-55";s:7:"Umacron";s:3:"-55";s:7:"Uogonek";s:3:"-55";s:5:"Uring";s:3:"-55";s:1:"V";s:4:"-135";s:1:"W";s:3:"-90";s:1:"Y";s:4:"-105";s:6:"Yacute";s:4:"-105";s:9:"Ydieresis";s:4:"-105";s:10:"quoteright";s:4:"-111";s:1:"v";s:3:"-74";s:1:"w";s:3:"-92";s:1:"y";s:3:"-92";s:6:"yacute";s:3:"-92";s:9:"ydieresis";s:3:"-92";}s:9:"Adieresis";a:40:{s:1:"C";s:3:"-40";s:6:"Cacute";s:3:"-40";s:6:"Ccaron";s:3:"-40";s:8:"Ccedilla";s:3:"-40";s:1:"G";s:3:"-40";s:6:"Gbreve";s:3:"-40";s:12:"Gcommaaccent";s:3:"-40";s:1:"O";s:3:"-55";s:6:"Oacute";s:3:"-55";s:11:"Ocircumflex";s:3:"-55";s:9:"Odieresis";s:3:"-55";s:6:"Ograve";s:3:"-55";s:13:"Ohungarumlaut";s:3:"-55";s:7:"Omacron";s:3:"-55";s:6:"Oslash";s:3:"-55";s:6:"Otilde";s:3:"-55";s:1:"Q";s:3:"-55";s:1:"T";s:4:"-111";s:6:"Tcaron";s:4:"-111";s:12:"Tcommaaccent";s:4:"-111";s:1:"U";s:3:"-55";s:6:"Uacute";s:3:"-55";s:11:"Ucircumflex";s:3:"-55";s:9:"Udieresis";s:3:"-55";s:6:"Ugrave";s:3:"-55";s:13:"Uhungarumlaut";s:3:"-55";s:7:"Umacron";s:3:"-55";s:7:"Uogonek";s:3:"-55";s:5:"Uring";s:3:"-55";s:1:"V";s:4:"-135";s:1:"W";s:3:"-90";s:1:"Y";s:4:"-105";s:6:"Yacute";s:4:"-105";s:9:"Ydieresis";s:4:"-105";s:10:"quoteright";s:4:"-111";s:1:"v";s:3:"-74";s:1:"w";s:3:"-92";s:1:"y";s:3:"-92";s:6:"yacute";s:3:"-92";s:9:"ydieresis";s:3:"-92";}s:6:"Agrave";a:40:{s:1:"C";s:3:"-40";s:6:"Cacute";s:3:"-40";s:6:"Ccaron";s:3:"-40";s:8:"Ccedilla";s:3:"-40";s:1:"G";s:3:"-40";s:6:"Gbreve";s:3:"-40";s:12:"Gcommaaccent";s:3:"-40";s:1:"O";s:3:"-55";s:6:"Oacute";s:3:"-55";s:11:"Ocircumflex";s:3:"-55";s:9:"Odieresis";s:3:"-55";s:6:"Ograve";s:3:"-55";s:13:"Ohungarumlaut";s:3:"-55";s:7:"Omacron";s:3:"-55";s:6:"Oslash";s:3:"-55";s:6:"Otilde";s:3:"-55";s:1:"Q";s:3:"-55";s:1:"T";s:4:"-111";s:6:"Tcaron";s:4:"-111";s:12:"Tcommaaccent";s:4:"-111";s:1:"U";s:3:"-55";s:6:"Uacute";s:3:"-55";s:11:"Ucircumflex";s:3:"-55";s:9:"Udieresis";s:3:"-55";s:6:"Ugrave";s:3:"-55";s:13:"Uhungarumlaut";s:3:"-55";s:7:"Umacron";s:3:"-55";s:7:"Uogonek";s:3:"-55";s:5:"Uring";s:3:"-55";s:1:"V";s:4:"-135";s:1:"W";s:3:"-90";s:1:"Y";s:4:"-105";s:6:"Yacute";s:4:"-105";s:9:"Ydieresis";s:4:"-105";s:10:"quoteright";s:4:"-111";s:1:"v";s:3:"-74";s:1:"w";s:3:"-92";s:1:"y";s:3:"-92";s:6:"yacute";s:3:"-92";s:9:"ydieresis";s:3:"-92";}s:7:"Amacron";a:40:{s:1:"C";s:3:"-40";s:6:"Cacute";s:3:"-40";s:6:"Ccaron";s:3:"-40";s:8:"Ccedilla";s:3:"-40";s:1:"G";s:3:"-40";s:6:"Gbreve";s:3:"-40";s:12:"Gcommaaccent";s:3:"-40";s:1:"O";s:3:"-55";s:6:"Oacute";s:3:"-55";s:11:"Ocircumflex";s:3:"-55";s:9:"Odieresis";s:3:"-55";s:6:"Ograve";s:3:"-55";s:13:"Ohungarumlaut";s:3:"-55";s:7:"Omacron";s:3:"-55";s:6:"Oslash";s:3:"-55";s:6:"Otilde";s:3:"-55";s:1:"Q";s:3:"-55";s:1:"T";s:4:"-111";s:6:"Tcaron";s:4:"-111";s:12:"Tcommaaccent";s:4:"-111";s:1:"U";s:3:"-55";s:6:"Uacute";s:3:"-55";s:11:"Ucircumflex";s:3:"-55";s:9:"Udieresis";s:3:"-55";s:6:"Ugrave";s:3:"-55";s:13:"Uhungarumlaut";s:3:"-55";s:7:"Umacron";s:3:"-55";s:7:"Uogonek";s:3:"-55";s:5:"Uring";s:3:"-55";s:1:"V";s:4:"-135";s:1:"W";s:3:"-90";s:1:"Y";s:4:"-105";s:6:"Yacute";s:4:"-105";s:9:"Ydieresis";s:4:"-105";s:10:"quoteright";s:4:"-111";s:1:"v";s:3:"-74";s:1:"w";s:3:"-92";s:1:"y";s:3:"-92";s:6:"yacute";s:3:"-92";s:9:"ydieresis";s:3:"-92";}s:7:"Aogonek";a:40:{s:1:"C";s:3:"-40";s:6:"Cacute";s:3:"-40";s:6:"Ccaron";s:3:"-40";s:8:"Ccedilla";s:3:"-40";s:1:"G";s:3:"-40";s:6:"Gbreve";s:3:"-40";s:12:"Gcommaaccent";s:3:"-40";s:1:"O";s:3:"-55";s:6:"Oacute";s:3:"-55";s:11:"Ocircumflex";s:3:"-55";s:9:"Odieresis";s:3:"-55";s:6:"Ograve";s:3:"-55";s:13:"Ohungarumlaut";s:3:"-55";s:7:"Omacron";s:3:"-55";s:6:"Oslash";s:3:"-55";s:6:"Otilde";s:3:"-55";s:1:"Q";s:3:"-55";s:1:"T";s:4:"-111";s:6:"Tcaron";s:4:"-111";s:12:"Tcommaaccent";s:4:"-111";s:1:"U";s:3:"-55";s:6:"Uacute";s:3:"-55";s:11:"Ucircumflex";s:3:"-55";s:9:"Udieresis";s:3:"-55";s:6:"Ugrave";s:3:"-55";s:13:"Uhungarumlaut";s:3:"-55";s:7:"Umacron";s:3:"-55";s:7:"Uogonek";s:3:"-55";s:5:"Uring";s:3:"-55";s:1:"V";s:4:"-135";s:1:"W";s:3:"-90";s:1:"Y";s:4:"-105";s:6:"Yacute";s:4:"-105";s:9:"Ydieresis";s:4:"-105";s:10:"quoteright";s:4:"-111";s:1:"v";s:3:"-74";s:1:"w";s:3:"-52";s:1:"y";s:3:"-52";s:6:"yacute";s:3:"-52";s:9:"ydieresis";s:3:"-52";}s:5:"Aring";a:40:{s:1:"C";s:3:"-40";s:6:"Cacute";s:3:"-40";s:6:"Ccaron";s:3:"-40";s:8:"Ccedilla";s:3:"-40";s:1:"G";s:3:"-40";s:6:"Gbreve";s:3:"-40";s:12:"Gcommaaccent";s:3:"-40";s:1:"O";s:3:"-55";s:6:"Oacute";s:3:"-55";s:11:"Ocircumflex";s:3:"-55";s:9:"Odieresis";s:3:"-55";s:6:"Ograve";s:3:"-55";s:13:"Ohungarumlaut";s:3:"-55";s:7:"Omacron";s:3:"-55";s:6:"Oslash";s:3:"-55";s:6:"Otilde";s:3:"-55";s:1:"Q";s:3:"-55";s:1:"T";s:4:"-111";s:6:"Tcaron";s:4:"-111";s:12:"Tcommaaccent";s:4:"-111";s:1:"U";s:3:"-55";s:6:"Uacute";s:3:"-55";s:11:"Ucircumflex";s:3:"-55";s:9:"Udieresis";s:3:"-55";s:6:"Ugrave";s:3:"-55";s:13:"Uhungarumlaut";s:3:"-55";s:7:"Umacron";s:3:"-55";s:7:"Uogonek";s:3:"-55";s:5:"Uring";s:3:"-55";s:1:"V";s:4:"-135";s:1:"W";s:3:"-90";s:1:"Y";s:4:"-105";s:6:"Yacute";s:4:"-105";s:9:"Ydieresis";s:4:"-105";s:10:"quoteright";s:4:"-111";s:1:"v";s:3:"-74";s:1:"w";s:3:"-92";s:1:"y";s:3:"-92";s:6:"yacute";s:3:"-92";s:9:"ydieresis";s:3:"-92";}s:6:"Atilde";a:40:{s:1:"C";s:3:"-40";s:6:"Cacute";s:3:"-40";s:6:"Ccaron";s:3:"-40";s:8:"Ccedilla";s:3:"-40";s:1:"G";s:3:"-40";s:6:"Gbreve";s:3:"-40";s:12:"Gcommaaccent";s:3:"-40";s:1:"O";s:3:"-55";s:6:"Oacute";s:3:"-55";s:11:"Ocircumflex";s:3:"-55";s:9:"Odieresis";s:3:"-55";s:6:"Ograve";s:3:"-55";s:13:"Ohungarumlaut";s:3:"-55";s:7:"Omacron";s:3:"-55";s:6:"Oslash";s:3:"-55";s:6:"Otilde";s:3:"-55";s:1:"Q";s:3:"-55";s:1:"T";s:4:"-111";s:6:"Tcaron";s:4:"-111";s:12:"Tcommaaccent";s:4:"-111";s:1:"U";s:3:"-55";s:6:"Uacute";s:3:"-55";s:11:"Ucircumflex";s:3:"-55";s:9:"Udieresis";s:3:"-55";s:6:"Ugrave";s:3:"-55";s:13:"Uhungarumlaut";s:3:"-55";s:7:"Umacron";s:3:"-55";s:7:"Uogonek";s:3:"-55";s:5:"Uring";s:3:"-55";s:1:"V";s:4:"-135";s:1:"W";s:3:"-90";s:1:"Y";s:4:"-105";s:6:"Yacute";s:4:"-105";s:9:"Ydieresis";s:4:"-105";s:10:"quoteright";s:4:"-111";s:1:"v";s:3:"-74";s:1:"w";s:3:"-92";s:1:"y";s:3:"-92";s:6:"yacute";s:3:"-92";s:9:"ydieresis";s:3:"-92";}s:1:"B";a:19:{s:1:"A";s:3:"-35";s:6:"Aacute";s:3:"-35";s:6:"Abreve";s:3:"-35";s:11:"Acircumflex";s:3:"-35";s:9:"Adieresis";s:3:"-35";s:6:"Agrave";s:3:"-35";s:7:"Amacron";s:3:"-35";s:7:"Aogonek";s:3:"-35";s:5:"Aring";s:3:"-35";s:6:"Atilde";s:3:"-35";s:1:"U";s:3:"-10";s:6:"Uacute";s:3:"-10";s:11:"Ucircumflex";s:3:"-10";s:9:"Udieresis";s:3:"-10";s:6:"Ugrave";s:3:"-10";s:13:"Uhungarumlaut";s:3:"-10";s:7:"Umacron";s:3:"-10";s:7:"Uogonek";s:3:"-10";s:5:"Uring";s:3:"-10";}s:1:"D";a:15:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:1:"V";s:3:"-40";s:1:"W";s:3:"-30";s:1:"Y";s:3:"-55";s:6:"Yacute";s:3:"-55";s:9:"Ydieresis";s:3:"-55";}s:6:"Dcaron";a:15:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:1:"V";s:3:"-40";s:1:"W";s:3:"-30";s:1:"Y";s:3:"-55";s:6:"Yacute";s:3:"-55";s:9:"Ydieresis";s:3:"-55";}s:6:"Dcroat";a:15:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";s:1:"V";s:3:"-40";s:1:"W";s:3:"-30";s:1:"Y";s:3:"-55";s:6:"Yacute";s:3:"-55";s:9:"Ydieresis";s:3:"-55";}s:1:"F";a:31:{s:1:"A";s:3:"-74";s:6:"Aacute";s:3:"-74";s:6:"Abreve";s:3:"-74";s:11:"Acircumflex";s:3:"-74";s:9:"Adieresis";s:3:"-74";s:6:"Agrave";s:3:"-74";s:7:"Amacron";s:3:"-74";s:7:"Aogonek";s:3:"-74";s:5:"Aring";s:3:"-74";s:6:"Atilde";s:3:"-74";s:1:"a";s:3:"-15";s:6:"aacute";s:3:"-15";s:6:"abreve";s:3:"-15";s:11:"acircumflex";s:3:"-15";s:9:"adieresis";s:3:"-15";s:6:"agrave";s:3:"-15";s:7:"amacron";s:3:"-15";s:7:"aogonek";s:3:"-15";s:5:"aring";s:3:"-15";s:6:"atilde";s:3:"-15";s:5:"comma";s:3:"-80";s:1:"o";s:3:"-15";s:6:"oacute";s:3:"-15";s:11:"ocircumflex";s:3:"-15";s:9:"odieresis";s:3:"-15";s:6:"ograve";s:3:"-15";s:13:"ohungarumlaut";s:3:"-15";s:7:"omacron";s:3:"-15";s:6:"oslash";s:3:"-15";s:6:"otilde";s:3:"-15";s:6:"period";s:3:"-80";}s:1:"J";a:10:{s:1:"A";s:3:"-60";s:6:"Aacute";s:3:"-60";s:6:"Abreve";s:3:"-60";s:11:"Acircumflex";s:3:"-60";s:9:"Adieresis";s:3:"-60";s:6:"Agrave";s:3:"-60";s:7:"Amacron";s:3:"-60";s:7:"Aogonek";s:3:"-60";s:5:"Aring";s:3:"-60";s:6:"Atilde";s:3:"-60";}s:1:"K";a:39:{s:1:"O";s:3:"-30";s:6:"Oacute";s:3:"-30";s:11:"Ocircumflex";s:3:"-30";s:9:"Odieresis";s:3:"-30";s:6:"Ograve";s:3:"-30";s:13:"Ohungarumlaut";s:3:"-30";s:7:"Omacron";s:3:"-30";s:6:"Oslash";s:3:"-30";s:6:"Otilde";s:3:"-30";s:1:"e";s:3:"-25";s:6:"eacute";s:3:"-25";s:6:"ecaron";s:3:"-25";s:11:"ecircumflex";s:3:"-25";s:9:"edieresis";s:3:"-25";s:10:"edotaccent";s:3:"-25";s:6:"egrave";s:3:"-25";s:7:"emacron";s:3:"-25";s:7:"eogonek";s:3:"-25";s:1:"o";s:3:"-35";s:6:"oacute";s:3:"-35";s:11:"ocircumflex";s:3:"-35";s:9:"odieresis";s:3:"-35";s:6:"ograve";s:3:"-35";s:13:"ohungarumlaut";s:3:"-35";s:7:"omacron";s:3:"-35";s:6:"oslash";s:3:"-35";s:6:"otilde";s:3:"-35";s:1:"u";s:3:"-15";s:6:"uacute";s:3:"-15";s:11:"ucircumflex";s:3:"-15";s:9:"udieresis";s:3:"-15";s:6:"ugrave";s:3:"-15";s:13:"uhungarumlaut";s:3:"-15";s:7:"umacron";s:3:"-15";s:7:"uogonek";s:3:"-15";s:5:"uring";s:3:"-15";s:1:"y";s:3:"-25";s:6:"yacute";s:3:"-25";s:9:"ydieresis";s:3:"-25";}s:12:"Kcommaaccent";a:39:{s:1:"O";s:3:"-30";s:6:"Oacute";s:3:"-30";s:11:"Ocircumflex";s:3:"-30";s:9:"Odieresis";s:3:"-30";s:6:"Ograve";s:3:"-30";s:13:"Ohungarumlaut";s:3:"-30";s:7:"Omacron";s:3:"-30";s:6:"Oslash";s:3:"-30";s:6:"Otilde";s:3:"-30";s:1:"e";s:3:"-25";s:6:"eacute";s:3:"-25";s:6:"ecaron";s:3:"-25";s:11:"ecircumflex";s:3:"-25";s:9:"edieresis";s:3:"-25";s:10:"edotaccent";s:3:"-25";s:6:"egrave";s:3:"-25";s:7:"emacron";s:3:"-25";s:7:"eogonek";s:3:"-25";s:1:"o";s:3:"-35";s:6:"oacute";s:3:"-35";s:11:"ocircumflex";s:3:"-35";s:9:"odieresis";s:3:"-35";s:6:"ograve";s:3:"-35";s:13:"ohungarumlaut";s:3:"-35";s:7:"omacron";s:3:"-35";s:6:"oslash";s:3:"-35";s:6:"otilde";s:3:"-35";s:1:"u";s:3:"-15";s:6:"uacute";s:3:"-15";s:11:"ucircumflex";s:3:"-15";s:9:"udieresis";s:3:"-15";s:6:"ugrave";s:3:"-15";s:13:"uhungarumlaut";s:3:"-15";s:7:"umacron";s:3:"-15";s:7:"uogonek";s:3:"-15";s:5:"uring";s:3:"-15";s:1:"y";s:3:"-25";s:6:"yacute";s:3:"-25";s:9:"ydieresis";s:3:"-25";}s:1:"L";a:12:{s:1:"T";s:3:"-92";s:6:"Tcaron";s:3:"-92";s:12:"Tcommaaccent";s:3:"-92";s:1:"V";s:4:"-100";s:1:"W";s:3:"-74";s:1:"Y";s:4:"-100";s:6:"Yacute";s:4:"-100";s:9:"Ydieresis";s:4:"-100";s:10:"quoteright";s:3:"-92";s:1:"y";s:3:"-55";s:6:"yacute";s:3:"-55";s:9:"ydieresis";s:3:"-55";}s:6:"Lacute";a:12:{s:1:"T";s:3:"-92";s:6:"Tcaron";s:3:"-92";s:12:"Tcommaaccent";s:3:"-92";s:1:"V";s:4:"-100";s:1:"W";s:3:"-74";s:1:"Y";s:4:"-100";s:6:"Yacute";s:4:"-100";s:9:"Ydieresis";s:4:"-100";s:10:"quoteright";s:3:"-92";s:1:"y";s:3:"-55";s:6:"yacute";s:3:"-55";s:9:"ydieresis";s:3:"-55";}s:6:"Lcaron";a:4:{s:10:"quoteright";s:3:"-92";s:1:"y";s:3:"-55";s:6:"yacute";s:3:"-55";s:9:"ydieresis";s:3:"-55";}s:12:"Lcommaaccent";a:12:{s:1:"T";s:3:"-92";s:6:"Tcaron";s:3:"-92";s:12:"Tcommaaccent";s:3:"-92";s:1:"V";s:4:"-100";s:1:"W";s:3:"-74";s:1:"Y";s:4:"-100";s:6:"Yacute";s:4:"-100";s:9:"Ydieresis";s:4:"-100";s:10:"quoteright";s:3:"-92";s:1:"y";s:3:"-55";s:6:"yacute";s:3:"-55";s:9:"ydieresis";s:3:"-55";}s:6:"Lslash";a:12:{s:1:"T";s:3:"-92";s:6:"Tcaron";s:3:"-92";s:12:"Tcommaaccent";s:3:"-92";s:1:"V";s:4:"-100";s:1:"W";s:3:"-74";s:1:"Y";s:4:"-100";s:6:"Yacute";s:4:"-100";s:9:"Ydieresis";s:4:"-100";s:10:"quoteright";s:3:"-92";s:1:"y";s:3:"-55";s:6:"yacute";s:3:"-55";s:9:"ydieresis";s:3:"-55";}s:1:"N";a:10:{s:1:"A";s:3:"-35";s:6:"Aacute";s:3:"-35";s:6:"Abreve";s:3:"-35";s:11:"Acircumflex";s:3:"-35";s:9:"Adieresis";s:3:"-35";s:6:"Agrave";s:3:"-35";s:7:"Amacron";s:3:"-35";s:7:"Aogonek";s:3:"-35";s:5:"Aring";s:3:"-35";s:6:"Atilde";s:3:"-35";}s:6:"Nacute";a:10:{s:1:"A";s:3:"-35";s:6:"Aacute";s:3:"-35";s:6:"Abreve";s:3:"-35";s:11:"Acircumflex";s:3:"-35";s:9:"Adieresis";s:3:"-35";s:6:"Agrave";s:3:"-35";s:7:"Amacron";s:3:"-35";s:7:"Aogonek";s:3:"-35";s:5:"Aring";s:3:"-35";s:6:"Atilde";s:3:"-35";}s:6:"Ncaron";a:10:{s:1:"A";s:3:"-35";s:6:"Aacute";s:3:"-35";s:6:"Abreve";s:3:"-35";s:11:"Acircumflex";s:3:"-35";s:9:"Adieresis";s:3:"-35";s:6:"Agrave";s:3:"-35";s:7:"Amacron";s:3:"-35";s:7:"Aogonek";s:3:"-35";s:5:"Aring";s:3:"-35";s:6:"Atilde";s:3:"-35";}s:12:"Ncommaaccent";a:10:{s:1:"A";s:3:"-35";s:6:"Aacute";s:3:"-35";s:6:"Abreve";s:3:"-35";s:11:"Acircumflex";s:3:"-35";s:9:"Adieresis";s:3:"-35";s:6:"Agrave";s:3:"-35";s:7:"Amacron";s:3:"-35";s:7:"Aogonek";s:3:"-35";s:5:"Aring";s:3:"-35";s:6:"Atilde";s:3:"-35";}s:6:"Ntilde";a:10:{s:1:"A";s:3:"-35";s:6:"Aacute";s:3:"-35";s:6:"Abreve";s:3:"-35";s:11:"Acircumflex";s:3:"-35";s:9:"Adieresis";s:3:"-35";s:6:"Agrave";s:3:"-35";s:7:"Amacron";s:3:"-35";s:7:"Aogonek";s:3:"-35";s:5:"Aring";s:3:"-35";s:6:"Atilde";s:3:"-35";}s:1:"O";a:19:{s:1:"A";s:3:"-35";s:6:"Aacute";s:3:"-35";s:6:"Abreve";s:3:"-35";s:11:"Acircumflex";s:3:"-35";s:9:"Adieresis";s:3:"-35";s:6:"Agrave";s:3:"-35";s:7:"Amacron";s:3:"-35";s:7:"Aogonek";s:3:"-35";s:5:"Aring";s:3:"-35";s:6:"Atilde";s:3:"-35";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-35";s:1:"X";s:3:"-40";s:1:"Y";s:3:"-50";s:6:"Yacute";s:3:"-50";s:9:"Ydieresis";s:3:"-50";}s:6:"Oacute";a:19:{s:1:"A";s:3:"-35";s:6:"Aacute";s:3:"-35";s:6:"Abreve";s:3:"-35";s:11:"Acircumflex";s:3:"-35";s:9:"Adieresis";s:3:"-35";s:6:"Agrave";s:3:"-35";s:7:"Amacron";s:3:"-35";s:7:"Aogonek";s:3:"-35";s:5:"Aring";s:3:"-35";s:6:"Atilde";s:3:"-35";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-35";s:1:"X";s:3:"-40";s:1:"Y";s:3:"-50";s:6:"Yacute";s:3:"-50";s:9:"Ydieresis";s:3:"-50";}s:11:"Ocircumflex";a:19:{s:1:"A";s:3:"-35";s:6:"Aacute";s:3:"-35";s:6:"Abreve";s:3:"-35";s:11:"Acircumflex";s:3:"-35";s:9:"Adieresis";s:3:"-35";s:6:"Agrave";s:3:"-35";s:7:"Amacron";s:3:"-35";s:7:"Aogonek";s:3:"-35";s:5:"Aring";s:3:"-35";s:6:"Atilde";s:3:"-35";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-35";s:1:"X";s:3:"-40";s:1:"Y";s:3:"-50";s:6:"Yacute";s:3:"-50";s:9:"Ydieresis";s:3:"-50";}s:9:"Odieresis";a:19:{s:1:"A";s:3:"-35";s:6:"Aacute";s:3:"-35";s:6:"Abreve";s:3:"-35";s:11:"Acircumflex";s:3:"-35";s:9:"Adieresis";s:3:"-35";s:6:"Agrave";s:3:"-35";s:7:"Amacron";s:3:"-35";s:7:"Aogonek";s:3:"-35";s:5:"Aring";s:3:"-35";s:6:"Atilde";s:3:"-35";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-35";s:1:"X";s:3:"-40";s:1:"Y";s:3:"-50";s:6:"Yacute";s:3:"-50";s:9:"Ydieresis";s:3:"-50";}s:6:"Ograve";a:19:{s:1:"A";s:3:"-35";s:6:"Aacute";s:3:"-35";s:6:"Abreve";s:3:"-35";s:11:"Acircumflex";s:3:"-35";s:9:"Adieresis";s:3:"-35";s:6:"Agrave";s:3:"-35";s:7:"Amacron";s:3:"-35";s:7:"Aogonek";s:3:"-35";s:5:"Aring";s:3:"-35";s:6:"Atilde";s:3:"-35";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-35";s:1:"X";s:3:"-40";s:1:"Y";s:3:"-50";s:6:"Yacute";s:3:"-50";s:9:"Ydieresis";s:3:"-50";}s:13:"Ohungarumlaut";a:19:{s:1:"A";s:3:"-35";s:6:"Aacute";s:3:"-35";s:6:"Abreve";s:3:"-35";s:11:"Acircumflex";s:3:"-35";s:9:"Adieresis";s:3:"-35";s:6:"Agrave";s:3:"-35";s:7:"Amacron";s:3:"-35";s:7:"Aogonek";s:3:"-35";s:5:"Aring";s:3:"-35";s:6:"Atilde";s:3:"-35";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-35";s:1:"X";s:3:"-40";s:1:"Y";s:3:"-50";s:6:"Yacute";s:3:"-50";s:9:"Ydieresis";s:3:"-50";}s:7:"Omacron";a:19:{s:1:"A";s:3:"-35";s:6:"Aacute";s:3:"-35";s:6:"Abreve";s:3:"-35";s:11:"Acircumflex";s:3:"-35";s:9:"Adieresis";s:3:"-35";s:6:"Agrave";s:3:"-35";s:7:"Amacron";s:3:"-35";s:7:"Aogonek";s:3:"-35";s:5:"Aring";s:3:"-35";s:6:"Atilde";s:3:"-35";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-35";s:1:"X";s:3:"-40";s:1:"Y";s:3:"-50";s:6:"Yacute";s:3:"-50";s:9:"Ydieresis";s:3:"-50";}s:6:"Oslash";a:19:{s:1:"A";s:3:"-35";s:6:"Aacute";s:3:"-35";s:6:"Abreve";s:3:"-35";s:11:"Acircumflex";s:3:"-35";s:9:"Adieresis";s:3:"-35";s:6:"Agrave";s:3:"-35";s:7:"Amacron";s:3:"-35";s:7:"Aogonek";s:3:"-35";s:5:"Aring";s:3:"-35";s:6:"Atilde";s:3:"-35";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-35";s:1:"X";s:3:"-40";s:1:"Y";s:3:"-50";s:6:"Yacute";s:3:"-50";s:9:"Ydieresis";s:3:"-50";}s:6:"Otilde";a:19:{s:1:"A";s:3:"-35";s:6:"Aacute";s:3:"-35";s:6:"Abreve";s:3:"-35";s:11:"Acircumflex";s:3:"-35";s:9:"Adieresis";s:3:"-35";s:6:"Agrave";s:3:"-35";s:7:"Amacron";s:3:"-35";s:7:"Aogonek";s:3:"-35";s:5:"Aring";s:3:"-35";s:6:"Atilde";s:3:"-35";s:1:"T";s:3:"-40";s:6:"Tcaron";s:3:"-40";s:12:"Tcommaaccent";s:3:"-40";s:1:"V";s:3:"-50";s:1:"W";s:3:"-35";s:1:"X";s:3:"-40";s:1:"Y";s:3:"-50";s:6:"Yacute";s:3:"-50";s:9:"Ydieresis";s:3:"-50";}s:1:"P";a:22:{s:1:"A";s:3:"-92";s:6:"Aacute";s:3:"-92";s:6:"Abreve";s:3:"-92";s:11:"Acircumflex";s:3:"-92";s:9:"Adieresis";s:3:"-92";s:6:"Agrave";s:3:"-92";s:7:"Amacron";s:3:"-92";s:7:"Aogonek";s:3:"-92";s:5:"Aring";s:3:"-92";s:6:"Atilde";s:3:"-92";s:1:"a";s:3:"-15";s:6:"aacute";s:3:"-15";s:6:"abreve";s:3:"-15";s:11:"acircumflex";s:3:"-15";s:9:"adieresis";s:3:"-15";s:6:"agrave";s:3:"-15";s:7:"amacron";s:3:"-15";s:7:"aogonek";s:3:"-15";s:5:"aring";s:3:"-15";s:6:"atilde";s:3:"-15";s:5:"comma";s:4:"-111";s:6:"period";s:4:"-111";}s:1:"Q";a:9:{s:1:"U";s:3:"-10";s:6:"Uacute";s:3:"-10";s:11:"Ucircumflex";s:3:"-10";s:9:"Udieresis";s:3:"-10";s:6:"Ugrave";s:3:"-10";s:13:"Uhungarumlaut";s:3:"-10";s:7:"Umacron";s:3:"-10";s:7:"Uogonek";s:3:"-10";s:5:"Uring";s:3:"-10";}s:1:"R";a:26:{s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"T";s:3:"-60";s:6:"Tcaron";s:3:"-60";s:12:"Tcommaaccent";s:3:"-60";s:1:"U";s:3:"-40";s:6:"Uacute";s:3:"-40";s:11:"Ucircumflex";s:3:"-40";s:9:"Udieresis";s:3:"-40";s:6:"Ugrave";s:3:"-40";s:13:"Uhungarumlaut";s:3:"-40";s:7:"Umacron";s:3:"-40";s:7:"Uogonek";s:3:"-40";s:5:"Uring";s:3:"-40";s:1:"V";s:3:"-80";s:1:"W";s:3:"-55";s:1:"Y";s:3:"-65";s:6:"Yacute";s:3:"-65";s:9:"Ydieresis";s:3:"-65";}s:6:"Racute";a:26:{s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"T";s:3:"-60";s:6:"Tcaron";s:3:"-60";s:12:"Tcommaaccent";s:3:"-60";s:1:"U";s:3:"-40";s:6:"Uacute";s:3:"-40";s:11:"Ucircumflex";s:3:"-40";s:9:"Udieresis";s:3:"-40";s:6:"Ugrave";s:3:"-40";s:13:"Uhungarumlaut";s:3:"-40";s:7:"Umacron";s:3:"-40";s:7:"Uogonek";s:3:"-40";s:5:"Uring";s:3:"-40";s:1:"V";s:3:"-80";s:1:"W";s:3:"-55";s:1:"Y";s:3:"-65";s:6:"Yacute";s:3:"-65";s:9:"Ydieresis";s:3:"-65";}s:6:"Rcaron";a:26:{s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"T";s:3:"-60";s:6:"Tcaron";s:3:"-60";s:12:"Tcommaaccent";s:3:"-60";s:1:"U";s:3:"-40";s:6:"Uacute";s:3:"-40";s:11:"Ucircumflex";s:3:"-40";s:9:"Udieresis";s:3:"-40";s:6:"Ugrave";s:3:"-40";s:13:"Uhungarumlaut";s:3:"-40";s:7:"Umacron";s:3:"-40";s:7:"Uogonek";s:3:"-40";s:5:"Uring";s:3:"-40";s:1:"V";s:3:"-80";s:1:"W";s:3:"-55";s:1:"Y";s:3:"-65";s:6:"Yacute";s:3:"-65";s:9:"Ydieresis";s:3:"-65";}s:12:"Rcommaaccent";a:26:{s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"T";s:3:"-60";s:6:"Tcaron";s:3:"-60";s:12:"Tcommaaccent";s:3:"-60";s:1:"U";s:3:"-40";s:6:"Uacute";s:3:"-40";s:11:"Ucircumflex";s:3:"-40";s:9:"Udieresis";s:3:"-40";s:6:"Ugrave";s:3:"-40";s:13:"Uhungarumlaut";s:3:"-40";s:7:"Umacron";s:3:"-40";s:7:"Uogonek";s:3:"-40";s:5:"Uring";s:3:"-40";s:1:"V";s:3:"-80";s:1:"W";s:3:"-55";s:1:"Y";s:3:"-65";s:6:"Yacute";s:3:"-65";s:9:"Ydieresis";s:3:"-65";}s:1:"T";a:72:{s:1:"A";s:3:"-93";s:6:"Aacute";s:3:"-93";s:6:"Abreve";s:3:"-93";s:11:"Acircumflex";s:3:"-93";s:9:"Adieresis";s:3:"-93";s:6:"Agrave";s:3:"-93";s:7:"Amacron";s:3:"-93";s:7:"Aogonek";s:3:"-93";s:5:"Aring";s:3:"-93";s:6:"Atilde";s:3:"-93";s:1:"O";s:3:"-18";s:6:"Oacute";s:3:"-18";s:11:"Ocircumflex";s:3:"-18";s:9:"Odieresis";s:3:"-18";s:6:"Ograve";s:3:"-18";s:13:"Ohungarumlaut";s:3:"-18";s:7:"Omacron";s:3:"-18";s:6:"Oslash";s:3:"-18";s:6:"Otilde";s:3:"-18";s:1:"a";s:3:"-80";s:6:"aacute";s:3:"-80";s:6:"abreve";s:3:"-80";s:11:"acircumflex";s:3:"-80";s:9:"adieresis";s:3:"-40";s:6:"agrave";s:3:"-40";s:7:"amacron";s:3:"-40";s:7:"aogonek";s:3:"-80";s:5:"aring";s:3:"-80";s:6:"atilde";s:3:"-40";s:5:"colon";s:3:"-50";s:5:"comma";s:3:"-74";s:1:"e";s:3:"-70";s:6:"eacute";s:3:"-70";s:6:"ecaron";s:3:"-70";s:11:"ecircumflex";s:3:"-70";s:9:"edieresis";s:3:"-30";s:10:"edotaccent";s:3:"-70";s:6:"egrave";s:3:"-70";s:7:"emacron";s:3:"-30";s:7:"eogonek";s:3:"-70";s:6:"hyphen";s:3:"-92";s:1:"i";s:3:"-35";s:6:"iacute";s:3:"-35";s:7:"iogonek";s:3:"-35";s:1:"o";s:3:"-80";s:6:"oacute";s:3:"-80";s:11:"ocircumflex";s:3:"-80";s:9:"odieresis";s:3:"-80";s:6:"ograve";s:3:"-80";s:13:"ohungarumlaut";s:3:"-80";s:7:"omacron";s:3:"-80";s:6:"oslash";s:3:"-80";s:6:"otilde";s:3:"-80";s:6:"period";s:3:"-74";s:1:"r";s:3:"-35";s:6:"racute";s:3:"-35";s:6:"rcaron";s:3:"-35";s:12:"rcommaaccent";s:3:"-35";s:9:"semicolon";s:3:"-55";s:1:"u";s:3:"-45";s:6:"uacute";s:3:"-45";s:11:"ucircumflex";s:3:"-45";s:9:"udieresis";s:3:"-45";s:6:"ugrave";s:3:"-45";s:13:"uhungarumlaut";s:3:"-45";s:7:"umacron";s:3:"-45";s:7:"uogonek";s:3:"-45";s:5:"uring";s:3:"-45";s:1:"w";s:3:"-80";s:1:"y";s:3:"-80";s:6:"yacute";s:3:"-80";s:9:"ydieresis";s:3:"-80";}s:6:"Tcaron";a:72:{s:1:"A";s:3:"-93";s:6:"Aacute";s:3:"-93";s:6:"Abreve";s:3:"-93";s:11:"Acircumflex";s:3:"-93";s:9:"Adieresis";s:3:"-93";s:6:"Agrave";s:3:"-93";s:7:"Amacron";s:3:"-93";s:7:"Aogonek";s:3:"-93";s:5:"Aring";s:3:"-93";s:6:"Atilde";s:3:"-93";s:1:"O";s:3:"-18";s:6:"Oacute";s:3:"-18";s:11:"Ocircumflex";s:3:"-18";s:9:"Odieresis";s:3:"-18";s:6:"Ograve";s:3:"-18";s:13:"Ohungarumlaut";s:3:"-18";s:7:"Omacron";s:3:"-18";s:6:"Oslash";s:3:"-18";s:6:"Otilde";s:3:"-18";s:1:"a";s:3:"-80";s:6:"aacute";s:3:"-80";s:6:"abreve";s:3:"-80";s:11:"acircumflex";s:3:"-80";s:9:"adieresis";s:3:"-40";s:6:"agrave";s:3:"-40";s:7:"amacron";s:3:"-40";s:7:"aogonek";s:3:"-80";s:5:"aring";s:3:"-80";s:6:"atilde";s:3:"-40";s:5:"colon";s:3:"-50";s:5:"comma";s:3:"-74";s:1:"e";s:3:"-70";s:6:"eacute";s:3:"-70";s:6:"ecaron";s:3:"-70";s:11:"ecircumflex";s:3:"-30";s:9:"edieresis";s:3:"-30";s:10:"edotaccent";s:3:"-70";s:6:"egrave";s:3:"-70";s:7:"emacron";s:3:"-30";s:7:"eogonek";s:3:"-70";s:6:"hyphen";s:3:"-92";s:1:"i";s:3:"-35";s:6:"iacute";s:3:"-35";s:7:"iogonek";s:3:"-35";s:1:"o";s:3:"-80";s:6:"oacute";s:3:"-80";s:11:"ocircumflex";s:3:"-80";s:9:"odieresis";s:3:"-80";s:6:"ograve";s:3:"-80";s:13:"ohungarumlaut";s:3:"-80";s:7:"omacron";s:3:"-80";s:6:"oslash";s:3:"-80";s:6:"otilde";s:3:"-80";s:6:"period";s:3:"-74";s:1:"r";s:3:"-35";s:6:"racute";s:3:"-35";s:6:"rcaron";s:3:"-35";s:12:"rcommaaccent";s:3:"-35";s:9:"semicolon";s:3:"-55";s:1:"u";s:3:"-45";s:6:"uacute";s:3:"-45";s:11:"ucircumflex";s:3:"-45";s:9:"udieresis";s:3:"-45";s:6:"ugrave";s:3:"-45";s:13:"uhungarumlaut";s:3:"-45";s:7:"umacron";s:3:"-45";s:7:"uogonek";s:3:"-45";s:5:"uring";s:3:"-45";s:1:"w";s:3:"-80";s:1:"y";s:3:"-80";s:6:"yacute";s:3:"-80";s:9:"ydieresis";s:3:"-80";}s:12:"Tcommaaccent";a:72:{s:1:"A";s:3:"-93";s:6:"Aacute";s:3:"-93";s:6:"Abreve";s:3:"-93";s:11:"Acircumflex";s:3:"-93";s:9:"Adieresis";s:3:"-93";s:6:"Agrave";s:3:"-93";s:7:"Amacron";s:3:"-93";s:7:"Aogonek";s:3:"-93";s:5:"Aring";s:3:"-93";s:6:"Atilde";s:3:"-93";s:1:"O";s:3:"-18";s:6:"Oacute";s:3:"-18";s:11:"Ocircumflex";s:3:"-18";s:9:"Odieresis";s:3:"-18";s:6:"Ograve";s:3:"-18";s:13:"Ohungarumlaut";s:3:"-18";s:7:"Omacron";s:3:"-18";s:6:"Oslash";s:3:"-18";s:6:"Otilde";s:3:"-18";s:1:"a";s:3:"-80";s:6:"aacute";s:3:"-80";s:6:"abreve";s:3:"-80";s:11:"acircumflex";s:3:"-80";s:9:"adieresis";s:3:"-40";s:6:"agrave";s:3:"-40";s:7:"amacron";s:3:"-40";s:7:"aogonek";s:3:"-80";s:5:"aring";s:3:"-80";s:6:"atilde";s:3:"-40";s:5:"colon";s:3:"-50";s:5:"comma";s:3:"-74";s:1:"e";s:3:"-70";s:6:"eacute";s:3:"-70";s:6:"ecaron";s:3:"-70";s:11:"ecircumflex";s:3:"-30";s:9:"edieresis";s:3:"-30";s:10:"edotaccent";s:3:"-70";s:6:"egrave";s:3:"-30";s:7:"emacron";s:3:"-70";s:7:"eogonek";s:3:"-70";s:6:"hyphen";s:3:"-92";s:1:"i";s:3:"-35";s:6:"iacute";s:3:"-35";s:7:"iogonek";s:3:"-35";s:1:"o";s:3:"-80";s:6:"oacute";s:3:"-80";s:11:"ocircumflex";s:3:"-80";s:9:"odieresis";s:3:"-80";s:6:"ograve";s:3:"-80";s:13:"ohungarumlaut";s:3:"-80";s:7:"omacron";s:3:"-80";s:6:"oslash";s:3:"-80";s:6:"otilde";s:3:"-80";s:6:"period";s:3:"-74";s:1:"r";s:3:"-35";s:6:"racute";s:3:"-35";s:6:"rcaron";s:3:"-35";s:12:"rcommaaccent";s:3:"-35";s:9:"semicolon";s:3:"-55";s:1:"u";s:3:"-45";s:6:"uacute";s:3:"-45";s:11:"ucircumflex";s:3:"-45";s:9:"udieresis";s:3:"-45";s:6:"ugrave";s:3:"-45";s:13:"uhungarumlaut";s:3:"-45";s:7:"umacron";s:3:"-45";s:7:"uogonek";s:3:"-45";s:5:"uring";s:3:"-45";s:1:"w";s:3:"-80";s:1:"y";s:3:"-80";s:6:"yacute";s:3:"-80";s:9:"ydieresis";s:3:"-80";}s:1:"U";a:10:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";}s:6:"Uacute";a:10:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";}s:11:"Ucircumflex";a:10:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";}s:9:"Udieresis";a:10:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";}s:6:"Ugrave";a:10:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";}s:13:"Uhungarumlaut";a:10:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";}s:7:"Umacron";a:10:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";}s:7:"Uogonek";a:10:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";}s:5:"Uring";a:10:{s:1:"A";s:3:"-40";s:6:"Aacute";s:3:"-40";s:6:"Abreve";s:3:"-40";s:11:"Acircumflex";s:3:"-40";s:9:"Adieresis";s:3:"-40";s:6:"Agrave";s:3:"-40";s:7:"Amacron";s:3:"-40";s:7:"Aogonek";s:3:"-40";s:5:"Aring";s:3:"-40";s:6:"Atilde";s:3:"-40";}s:1:"V";a:71:{s:1:"A";s:4:"-135";s:6:"Aacute";s:4:"-135";s:6:"Abreve";s:4:"-135";s:11:"Acircumflex";s:4:"-135";s:9:"Adieresis";s:4:"-135";s:6:"Agrave";s:4:"-135";s:7:"Amacron";s:4:"-135";s:7:"Aogonek";s:4:"-135";s:5:"Aring";s:4:"-135";s:6:"Atilde";s:4:"-135";s:1:"G";s:3:"-15";s:6:"Gbreve";s:3:"-15";s:12:"Gcommaaccent";s:3:"-15";s:1:"O";s:3:"-40";s:6:"Oacute";s:3:"-40";s:11:"Ocircumflex";s:3:"-40";s:9:"Odieresis";s:3:"-40";s:6:"Ograve";s:3:"-40";s:13:"Ohungarumlaut";s:3:"-40";s:7:"Omacron";s:3:"-40";s:6:"Oslash";s:3:"-40";s:6:"Otilde";s:3:"-40";s:1:"a";s:4:"-111";s:6:"aacute";s:4:"-111";s:6:"abreve";s:4:"-111";s:11:"acircumflex";s:3:"-71";s:9:"adieresis";s:3:"-71";s:6:"agrave";s:3:"-71";s:7:"amacron";s:3:"-71";s:7:"aogonek";s:4:"-111";s:5:"aring";s:4:"-111";s:6:"atilde";s:3:"-71";s:5:"colon";s:3:"-74";s:5:"comma";s:4:"-129";s:1:"e";s:4:"-111";s:6:"eacute";s:4:"-111";s:6:"ecaron";s:3:"-71";s:11:"ecircumflex";s:3:"-71";s:9:"edieresis";s:3:"-71";s:10:"edotaccent";s:4:"-111";s:6:"egrave";s:3:"-71";s:7:"emacron";s:3:"-71";s:7:"eogonek";s:4:"-111";s:6:"hyphen";s:4:"-100";s:1:"i";s:3:"-60";s:6:"iacute";s:3:"-60";s:11:"icircumflex";s:3:"-20";s:9:"idieresis";s:3:"-20";s:6:"igrave";s:3:"-20";s:7:"imacron";s:3:"-20";s:7:"iogonek";s:3:"-60";s:1:"o";s:4:"-129";s:6:"oacute";s:4:"-129";s:11:"ocircumflex";s:4:"-129";s:9:"odieresis";s:3:"-89";s:6:"ograve";s:3:"-89";s:13:"ohungarumlaut";s:4:"-129";s:7:"omacron";s:3:"-89";s:6:"oslash";s:4:"-129";s:6:"otilde";s:3:"-89";s:6:"period";s:4:"-129";s:9:"semicolon";s:3:"-74";s:1:"u";s:3:"-75";s:6:"uacute";s:3:"-75";s:11:"ucircumflex";s:3:"-75";s:9:"udieresis";s:3:"-75";s:6:"ugrave";s:3:"-75";s:13:"uhungarumlaut";s:3:"-75";s:7:"umacron";s:3:"-75";s:7:"uogonek";s:3:"-75";s:5:"uring";s:3:"-75";}s:1:"W";a:67:{s:1:"A";s:4:"-120";s:6:"Aacute";s:4:"-120";s:6:"Abreve";s:4:"-120";s:11:"Acircumflex";s:4:"-120";s:9:"Adieresis";s:4:"-120";s:6:"Agrave";s:4:"-120";s:7:"Amacron";s:4:"-120";s:7:"Aogonek";s:4:"-120";s:5:"Aring";s:4:"-120";s:6:"Atilde";s:4:"-120";s:1:"O";s:3:"-10";s:6:"Oacute";s:3:"-10";s:11:"Ocircumflex";s:3:"-10";s:9:"Odieresis";s:3:"-10";s:6:"Ograve";s:3:"-10";s:13:"Ohungarumlaut";s:3:"-10";s:7:"Omacron";s:3:"-10";s:6:"Oslash";s:3:"-10";s:6:"Otilde";s:3:"-10";s:1:"a";s:3:"-80";s:6:"aacute";s:3:"-80";s:6:"abreve";s:3:"-80";s:11:"acircumflex";s:3:"-80";s:9:"adieresis";s:3:"-80";s:6:"agrave";s:3:"-80";s:7:"amacron";s:3:"-80";s:7:"aogonek";s:3:"-80";s:5:"aring";s:3:"-80";s:6:"atilde";s:3:"-80";s:5:"colon";s:3:"-37";s:5:"comma";s:3:"-92";s:1:"e";s:3:"-80";s:6:"eacute";s:3:"-80";s:6:"ecaron";s:3:"-80";s:11:"ecircumflex";s:3:"-80";s:9:"edieresis";s:3:"-40";s:10:"edotaccent";s:3:"-80";s:6:"egrave";s:3:"-40";s:7:"emacron";s:3:"-40";s:7:"eogonek";s:3:"-80";s:6:"hyphen";s:3:"-65";s:1:"i";s:3:"-40";s:6:"iacute";s:3:"-40";s:7:"iogonek";s:3:"-40";s:1:"o";s:3:"-80";s:6:"oacute";s:3:"-80";s:11:"ocircumflex";s:3:"-80";s:9:"odieresis";s:3:"-80";s:6:"ograve";s:3:"-80";s:13:"ohungarumlaut";s:3:"-80";s:7:"omacron";s:3:"-80";s:6:"oslash";s:3:"-80";s:6:"otilde";s:3:"-80";s:6:"period";s:3:"-92";s:9:"semicolon";s:3:"-37";s:1:"u";s:3:"-50";s:6:"uacute";s:3:"-50";s:11:"ucircumflex";s:3:"-50";s:9:"udieresis";s:3:"-50";s:6:"ugrave";s:3:"-50";s:13:"uhungarumlaut";s:3:"-50";s:7:"umacron";s:3:"-50";s:7:"uogonek";s:3:"-50";s:5:"uring";s:3:"-50";s:1:"y";s:3:"-73";s:6:"yacute";s:3:"-73";s:9:"ydieresis";s:3:"-73";}s:1:"Y";a:64:{s:1:"A";s:4:"-120";s:6:"Aacute";s:4:"-120";s:6:"Abreve";s:4:"-120";s:11:"Acircumflex";s:4:"-120";s:9:"Adieresis";s:4:"-120";s:6:"Agrave";s:4:"-120";s:7:"Amacron";s:4:"-120";s:7:"Aogonek";s:4:"-120";s:5:"Aring";s:4:"-120";s:6:"Atilde";s:4:"-120";s:1:"O";s:3:"-30";s:6:"Oacute";s:3:"-30";s:11:"Ocircumflex";s:3:"-30";s:9:"Odieresis";s:3:"-30";s:6:"Ograve";s:3:"-30";s:13:"Ohungarumlaut";s:3:"-30";s:7:"Omacron";s:3:"-30";s:6:"Oslash";s:3:"-30";s:6:"Otilde";s:3:"-30";s:1:"a";s:4:"-100";s:6:"aacute";s:4:"-100";s:6:"abreve";s:4:"-100";s:11:"acircumflex";s:4:"-100";s:9:"adieresis";s:3:"-60";s:6:"agrave";s:3:"-60";s:7:"amacron";s:3:"-60";s:7:"aogonek";s:4:"-100";s:5:"aring";s:4:"-100";s:6:"atilde";s:3:"-60";s:5:"colon";s:3:"-92";s:5:"comma";s:4:"-129";s:1:"e";s:4:"-100";s:6:"eacute";s:4:"-100";s:6:"ecaron";s:4:"-100";s:11:"ecircumflex";s:4:"-100";s:9:"edieresis";s:3:"-60";s:10:"edotaccent";s:4:"-100";s:6:"egrave";s:3:"-60";s:7:"emacron";s:3:"-60";s:7:"eogonek";s:4:"-100";s:6:"hyphen";s:4:"-111";s:1:"i";s:3:"-55";s:6:"iacute";s:3:"-55";s:7:"iogonek";s:3:"-55";s:1:"o";s:4:"-110";s:6:"oacute";s:4:"-110";s:11:"ocircumflex";s:4:"-110";s:9:"odieresis";s:3:"-70";s:6:"ograve";s:3:"-70";s:13:"ohungarumlaut";s:4:"-110";s:7:"omacron";s:3:"-70";s:6:"oslash";s:4:"-110";s:6:"otilde";s:3:"-70";s:6:"period";s:4:"-129";s:9:"semicolon";s:3:"-92";s:1:"u";s:4:"-111";s:6:"uacute";s:4:"-111";s:11:"ucircumflex";s:4:"-111";s:9:"udieresis";s:3:"-71";s:6:"ugrave";s:3:"-71";s:13:"uhungarumlaut";s:4:"-111";s:7:"umacron";s:3:"-71";s:7:"uogonek";s:4:"-111";s:5:"uring";s:4:"-111";}s:6:"Yacute";a:64:{s:1:"A";s:4:"-120";s:6:"Aacute";s:4:"-120";s:6:"Abreve";s:4:"-120";s:11:"Acircumflex";s:4:"-120";s:9:"Adieresis";s:4:"-120";s:6:"Agrave";s:4:"-120";s:7:"Amacron";s:4:"-120";s:7:"Aogonek";s:4:"-120";s:5:"Aring";s:4:"-120";s:6:"Atilde";s:4:"-120";s:1:"O";s:3:"-30";s:6:"Oacute";s:3:"-30";s:11:"Ocircumflex";s:3:"-30";s:9:"Odieresis";s:3:"-30";s:6:"Ograve";s:3:"-30";s:13:"Ohungarumlaut";s:3:"-30";s:7:"Omacron";s:3:"-30";s:6:"Oslash";s:3:"-30";s:6:"Otilde";s:3:"-30";s:1:"a";s:4:"-100";s:6:"aacute";s:4:"-100";s:6:"abreve";s:4:"-100";s:11:"acircumflex";s:4:"-100";s:9:"adieresis";s:3:"-60";s:6:"agrave";s:3:"-60";s:7:"amacron";s:3:"-60";s:7:"aogonek";s:4:"-100";s:5:"aring";s:4:"-100";s:6:"atilde";s:3:"-60";s:5:"colon";s:3:"-92";s:5:"comma";s:4:"-129";s:1:"e";s:4:"-100";s:6:"eacute";s:4:"-100";s:6:"ecaron";s:4:"-100";s:11:"ecircumflex";s:4:"-100";s:9:"edieresis";s:3:"-60";s:10:"edotaccent";s:4:"-100";s:6:"egrave";s:3:"-60";s:7:"emacron";s:3:"-60";s:7:"eogonek";s:4:"-100";s:6:"hyphen";s:4:"-111";s:1:"i";s:3:"-55";s:6:"iacute";s:3:"-55";s:7:"iogonek";s:3:"-55";s:1:"o";s:4:"-110";s:6:"oacute";s:4:"-110";s:11:"ocircumflex";s:4:"-110";s:9:"odieresis";s:3:"-70";s:6:"ograve";s:3:"-70";s:13:"ohungarumlaut";s:4:"-110";s:7:"omacron";s:3:"-70";s:6:"oslash";s:4:"-110";s:6:"otilde";s:3:"-70";s:6:"period";s:4:"-129";s:9:"semicolon";s:3:"-92";s:1:"u";s:4:"-111";s:6:"uacute";s:4:"-111";s:11:"ucircumflex";s:4:"-111";s:9:"udieresis";s:3:"-71";s:6:"ugrave";s:3:"-71";s:13:"uhungarumlaut";s:4:"-111";s:7:"umacron";s:3:"-71";s:7:"uogonek";s:4:"-111";s:5:"uring";s:4:"-111";}s:9:"Ydieresis";a:64:{s:1:"A";s:4:"-120";s:6:"Aacute";s:4:"-120";s:6:"Abreve";s:4:"-120";s:11:"Acircumflex";s:4:"-120";s:9:"Adieresis";s:4:"-120";s:6:"Agrave";s:4:"-120";s:7:"Amacron";s:4:"-120";s:7:"Aogonek";s:4:"-120";s:5:"Aring";s:4:"-120";s:6:"Atilde";s:4:"-120";s:1:"O";s:3:"-30";s:6:"Oacute";s:3:"-30";s:11:"Ocircumflex";s:3:"-30";s:9:"Odieresis";s:3:"-30";s:6:"Ograve";s:3:"-30";s:13:"Ohungarumlaut";s:3:"-30";s:7:"Omacron";s:3:"-30";s:6:"Oslash";s:3:"-30";s:6:"Otilde";s:3:"-30";s:1:"a";s:4:"-100";s:6:"aacute";s:4:"-100";s:6:"abreve";s:4:"-100";s:11:"acircumflex";s:4:"-100";s:9:"adieresis";s:3:"-60";s:6:"agrave";s:3:"-60";s:7:"amacron";s:3:"-60";s:7:"aogonek";s:4:"-100";s:5:"aring";s:4:"-100";s:6:"atilde";s:4:"-100";s:5:"colon";s:3:"-92";s:5:"comma";s:4:"-129";s:1:"e";s:4:"-100";s:6:"eacute";s:4:"-100";s:6:"ecaron";s:4:"-100";s:11:"ecircumflex";s:4:"-100";s:9:"edieresis";s:3:"-60";s:10:"edotaccent";s:4:"-100";s:6:"egrave";s:3:"-60";s:7:"emacron";s:3:"-60";s:7:"eogonek";s:4:"-100";s:6:"hyphen";s:4:"-111";s:1:"i";s:3:"-55";s:6:"iacute";s:3:"-55";s:7:"iogonek";s:3:"-55";s:1:"o";s:4:"-110";s:6:"oacute";s:4:"-110";s:11:"ocircumflex";s:4:"-110";s:9:"odieresis";s:3:"-70";s:6:"ograve";s:3:"-70";s:13:"ohungarumlaut";s:4:"-110";s:7:"omacron";s:3:"-70";s:6:"oslash";s:4:"-110";s:6:"otilde";s:3:"-70";s:6:"period";s:4:"-129";s:9:"semicolon";s:3:"-92";s:1:"u";s:4:"-111";s:6:"uacute";s:4:"-111";s:11:"ucircumflex";s:4:"-111";s:9:"udieresis";s:3:"-71";s:6:"ugrave";s:3:"-71";s:13:"uhungarumlaut";s:4:"-111";s:7:"umacron";s:3:"-71";s:7:"uogonek";s:4:"-111";s:5:"uring";s:4:"-111";}s:1:"a";a:2:{s:1:"v";s:3:"-20";s:1:"w";s:3:"-15";}s:6:"aacute";a:2:{s:1:"v";s:3:"-20";s:1:"w";s:3:"-15";}s:6:"abreve";a:2:{s:1:"v";s:3:"-20";s:1:"w";s:3:"-15";}s:11:"acircumflex";a:2:{s:1:"v";s:3:"-20";s:1:"w";s:3:"-15";}s:9:"adieresis";a:2:{s:1:"v";s:3:"-20";s:1:"w";s:3:"-15";}s:6:"agrave";a:2:{s:1:"v";s:3:"-20";s:1:"w";s:3:"-15";}s:7:"amacron";a:2:{s:1:"v";s:3:"-20";s:1:"w";s:3:"-15";}s:7:"aogonek";a:2:{s:1:"v";s:3:"-20";s:1:"w";s:3:"-15";}s:5:"aring";a:2:{s:1:"v";s:3:"-20";s:1:"w";s:3:"-15";}s:6:"atilde";a:2:{s:1:"v";s:3:"-20";s:1:"w";s:3:"-15";}s:1:"b";a:11:{s:6:"period";s:3:"-40";s:1:"u";s:3:"-20";s:6:"uacute";s:3:"-20";s:11:"ucircumflex";s:3:"-20";s:9:"udieresis";s:3:"-20";s:6:"ugrave";s:3:"-20";s:13:"uhungarumlaut";s:3:"-20";s:7:"umacron";s:3:"-20";s:7:"uogonek";s:3:"-20";s:5:"uring";s:3:"-20";s:1:"v";s:3:"-15";}s:1:"c";a:3:{s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:6:"cacute";a:3:{s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:6:"ccaron";a:3:{s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:8:"ccedilla";a:3:{s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:5:"comma";a:2:{s:13:"quotedblright";s:3:"-70";s:10:"quoteright";s:3:"-70";}s:1:"e";a:9:{s:1:"g";s:3:"-15";s:6:"gbreve";s:3:"-15";s:12:"gcommaaccent";s:3:"-15";s:1:"v";s:3:"-25";s:1:"w";s:3:"-25";s:1:"x";s:3:"-15";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:6:"eacute";a:9:{s:1:"g";s:3:"-15";s:6:"gbreve";s:3:"-15";s:12:"gcommaaccent";s:3:"-15";s:1:"v";s:3:"-25";s:1:"w";s:3:"-25";s:1:"x";s:3:"-15";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:6:"ecaron";a:9:{s:1:"g";s:3:"-15";s:6:"gbreve";s:3:"-15";s:12:"gcommaaccent";s:3:"-15";s:1:"v";s:3:"-25";s:1:"w";s:3:"-25";s:1:"x";s:3:"-15";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:11:"ecircumflex";a:9:{s:1:"g";s:3:"-15";s:6:"gbreve";s:3:"-15";s:12:"gcommaaccent";s:3:"-15";s:1:"v";s:3:"-25";s:1:"w";s:3:"-25";s:1:"x";s:3:"-15";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:9:"edieresis";a:9:{s:1:"g";s:3:"-15";s:6:"gbreve";s:3:"-15";s:12:"gcommaaccent";s:3:"-15";s:1:"v";s:3:"-25";s:1:"w";s:3:"-25";s:1:"x";s:3:"-15";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:10:"edotaccent";a:9:{s:1:"g";s:3:"-15";s:6:"gbreve";s:3:"-15";s:12:"gcommaaccent";s:3:"-15";s:1:"v";s:3:"-25";s:1:"w";s:3:"-25";s:1:"x";s:3:"-15";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:6:"egrave";a:9:{s:1:"g";s:3:"-15";s:6:"gbreve";s:3:"-15";s:12:"gcommaaccent";s:3:"-15";s:1:"v";s:3:"-25";s:1:"w";s:3:"-25";s:1:"x";s:3:"-15";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:7:"emacron";a:9:{s:1:"g";s:3:"-15";s:6:"gbreve";s:3:"-15";s:12:"gcommaaccent";s:3:"-15";s:1:"v";s:3:"-25";s:1:"w";s:3:"-25";s:1:"x";s:3:"-15";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:7:"eogonek";a:9:{s:1:"g";s:3:"-15";s:6:"gbreve";s:3:"-15";s:12:"gcommaaccent";s:3:"-15";s:1:"v";s:3:"-25";s:1:"w";s:3:"-25";s:1:"x";s:3:"-15";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:1:"f";a:15:{s:1:"a";s:3:"-10";s:6:"aacute";s:3:"-10";s:6:"abreve";s:3:"-10";s:11:"acircumflex";s:3:"-10";s:9:"adieresis";s:3:"-10";s:6:"agrave";s:3:"-10";s:7:"amacron";s:3:"-10";s:7:"aogonek";s:3:"-10";s:5:"aring";s:3:"-10";s:6:"atilde";s:3:"-10";s:8:"dotlessi";s:3:"-50";s:1:"f";s:3:"-25";s:1:"i";s:3:"-20";s:6:"iacute";s:3:"-20";s:10:"quoteright";s:2:"55";}s:1:"g";a:10:{s:1:"a";s:2:"-5";s:6:"aacute";s:2:"-5";s:6:"abreve";s:2:"-5";s:11:"acircumflex";s:2:"-5";s:9:"adieresis";s:2:"-5";s:6:"agrave";s:2:"-5";s:7:"amacron";s:2:"-5";s:7:"aogonek";s:2:"-5";s:5:"aring";s:2:"-5";s:6:"atilde";s:2:"-5";}s:6:"gbreve";a:10:{s:1:"a";s:2:"-5";s:6:"aacute";s:2:"-5";s:6:"abreve";s:2:"-5";s:11:"acircumflex";s:2:"-5";s:9:"adieresis";s:2:"-5";s:6:"agrave";s:2:"-5";s:7:"amacron";s:2:"-5";s:7:"aogonek";s:2:"-5";s:5:"aring";s:2:"-5";s:6:"atilde";s:2:"-5";}s:12:"gcommaaccent";a:10:{s:1:"a";s:2:"-5";s:6:"aacute";s:2:"-5";s:6:"abreve";s:2:"-5";s:11:"acircumflex";s:2:"-5";s:9:"adieresis";s:2:"-5";s:6:"agrave";s:2:"-5";s:7:"amacron";s:2:"-5";s:7:"aogonek";s:2:"-5";s:5:"aring";s:2:"-5";s:6:"atilde";s:2:"-5";}s:1:"h";a:3:{s:1:"y";s:2:"-5";s:6:"yacute";s:2:"-5";s:9:"ydieresis";s:2:"-5";}s:1:"i";a:1:{s:1:"v";s:3:"-25";}s:6:"iacute";a:1:{s:1:"v";s:3:"-25";}s:11:"icircumflex";a:1:{s:1:"v";s:3:"-25";}s:9:"idieresis";a:1:{s:1:"v";s:3:"-25";}s:6:"igrave";a:1:{s:1:"v";s:3:"-25";}s:7:"imacron";a:1:{s:1:"v";s:3:"-25";}s:7:"iogonek";a:1:{s:1:"v";s:3:"-25";}s:1:"k";a:21:{s:1:"e";s:3:"-10";s:6:"eacute";s:3:"-10";s:6:"ecaron";s:3:"-10";s:11:"ecircumflex";s:3:"-10";s:9:"edieresis";s:3:"-10";s:10:"edotaccent";s:3:"-10";s:6:"egrave";s:3:"-10";s:7:"emacron";s:3:"-10";s:7:"eogonek";s:3:"-10";s:1:"o";s:3:"-10";s:6:"oacute";s:3:"-10";s:11:"ocircumflex";s:3:"-10";s:9:"odieresis";s:3:"-10";s:6:"ograve";s:3:"-10";s:13:"ohungarumlaut";s:3:"-10";s:7:"omacron";s:3:"-10";s:6:"oslash";s:3:"-10";s:6:"otilde";s:3:"-10";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:12:"kcommaaccent";a:21:{s:1:"e";s:3:"-10";s:6:"eacute";s:3:"-10";s:6:"ecaron";s:3:"-10";s:11:"ecircumflex";s:3:"-10";s:9:"edieresis";s:3:"-10";s:10:"edotaccent";s:3:"-10";s:6:"egrave";s:3:"-10";s:7:"emacron";s:3:"-10";s:7:"eogonek";s:3:"-10";s:1:"o";s:3:"-10";s:6:"oacute";s:3:"-10";s:11:"ocircumflex";s:3:"-10";s:9:"odieresis";s:3:"-10";s:6:"ograve";s:3:"-10";s:13:"ohungarumlaut";s:3:"-10";s:7:"omacron";s:3:"-10";s:6:"oslash";s:3:"-10";s:6:"otilde";s:3:"-10";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:1:"l";a:1:{s:1:"w";s:3:"-10";}s:6:"lacute";a:1:{s:1:"w";s:3:"-10";}s:12:"lcommaaccent";a:1:{s:1:"w";s:3:"-10";}s:6:"lslash";a:1:{s:1:"w";s:3:"-10";}s:1:"n";a:4:{s:1:"v";s:3:"-40";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:6:"nacute";a:4:{s:1:"v";s:3:"-40";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:6:"ncaron";a:4:{s:1:"v";s:3:"-40";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:12:"ncommaaccent";a:4:{s:1:"v";s:3:"-40";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:6:"ntilde";a:4:{s:1:"v";s:3:"-40";s:1:"y";s:3:"-15";s:6:"yacute";s:3:"-15";s:9:"ydieresis";s:3:"-15";}s:1:"o";a:5:{s:1:"v";s:3:"-15";s:1:"w";s:3:"-25";s:1:"y";s:3:"-10";s:6:"yacute";s:3:"-10";s:9:"ydieresis";s:3:"-10";}s:6:"oacute";a:5:{s:1:"v";s:3:"-15";s:1:"w";s:3:"-25";s:1:"y";s:3:"-10";s:6:"yacute";s:3:"-10";s:9:"ydieresis";s:3:"-10";}s:11:"ocircumflex";a:5:{s:1:"v";s:3:"-15";s:1:"w";s:3:"-25";s:1:"y";s:3:"-10";s:6:"yacute";s:3:"-10";s:9:"ydieresis";s:3:"-10";}s:9:"odieresis";a:5:{s:1:"v";s:3:"-15";s:1:"w";s:3:"-25";s:1:"y";s:3:"-10";s:6:"yacute";s:3:"-10";s:9:"ydieresis";s:3:"-10";}s:6:"ograve";a:5:{s:1:"v";s:3:"-15";s:1:"w";s:3:"-25";s:1:"y";s:3:"-10";s:6:"yacute";s:3:"-10";s:9:"ydieresis";s:3:"-10";}s:13:"ohungarumlaut";a:5:{s:1:"v";s:3:"-15";s:1:"w";s:3:"-25";s:1:"y";s:3:"-10";s:6:"yacute";s:3:"-10";s:9:"ydieresis";s:3:"-10";}s:7:"omacron";a:5:{s:1:"v";s:3:"-15";s:1:"w";s:3:"-25";s:1:"y";s:3:"-10";s:6:"yacute";s:3:"-10";s:9:"ydieresis";s:3:"-10";}s:6:"oslash";a:5:{s:1:"v";s:3:"-15";s:1:"w";s:3:"-25";s:1:"y";s:3:"-10";s:6:"yacute";s:3:"-10";s:9:"ydieresis";s:3:"-10";}s:6:"otilde";a:5:{s:1:"v";s:3:"-15";s:1:"w";s:3:"-25";s:1:"y";s:3:"-10";s:6:"yacute";s:3:"-10";s:9:"ydieresis";s:3:"-10";}s:1:"p";a:3:{s:1:"y";s:3:"-10";s:6:"yacute";s:3:"-10";s:9:"ydieresis";s:3:"-10";}s:6:"period";a:2:{s:13:"quotedblright";s:3:"-70";s:10:"quoteright";s:3:"-70";}s:12:"quotedblleft";a:10:{s:1:"A";s:3:"-80";s:6:"Aacute";s:3:"-80";s:6:"Abreve";s:3:"-80";s:11:"Acircumflex";s:3:"-80";s:9:"Adieresis";s:3:"-80";s:6:"Agrave";s:3:"-80";s:7:"Amacron";s:3:"-80";s:7:"Aogonek";s:3:"-80";s:5:"Aring";s:3:"-80";s:6:"Atilde";s:3:"-80";}s:9:"quoteleft";a:11:{s:1:"A";s:3:"-80";s:6:"Aacute";s:3:"-80";s:6:"Abreve";s:3:"-80";s:11:"Acircumflex";s:3:"-80";s:9:"Adieresis";s:3:"-80";s:6:"Agrave";s:3:"-80";s:7:"Amacron";s:3:"-80";s:7:"Aogonek";s:3:"-80";s:5:"Aring";s:3:"-80";s:6:"Atilde";s:3:"-80";s:9:"quoteleft";s:3:"-74";}s:10:"quoteright";a:20:{s:1:"d";s:3:"-50";s:6:"dcroat";s:3:"-50";s:1:"l";s:3:"-10";s:6:"lacute";s:3:"-10";s:12:"lcommaaccent";s:3:"-10";s:6:"lslash";s:3:"-10";s:10:"quoteright";s:3:"-74";s:1:"r";s:3:"-50";s:6:"racute";s:3:"-50";s:6:"rcaron";s:3:"-50";s:12:"rcommaaccent";s:3:"-50";s:1:"s";s:3:"-55";s:6:"sacute";s:3:"-55";s:6:"scaron";s:3:"-55";s:8:"scedilla";s:3:"-55";s:12:"scommaaccent";s:3:"-55";s:5:"space";s:3:"-74";s:1:"t";s:3:"-18";s:12:"tcommaaccent";s:3:"-18";s:1:"v";s:3:"-50";}s:1:"r";a:6:{s:5:"comma";s:3:"-40";s:1:"g";s:3:"-18";s:6:"gbreve";s:3:"-18";s:12:"gcommaaccent";s:3:"-18";s:6:"hyphen";s:3:"-20";s:6:"period";s:3:"-55";}s:6:"racute";a:6:{s:5:"comma";s:3:"-40";s:1:"g";s:3:"-18";s:6:"gbreve";s:3:"-18";s:12:"gcommaaccent";s:3:"-18";s:6:"hyphen";s:3:"-20";s:6:"period";s:3:"-55";}s:6:"rcaron";a:6:{s:5:"comma";s:3:"-40";s:1:"g";s:3:"-18";s:6:"gbreve";s:3:"-18";s:12:"gcommaaccent";s:3:"-18";s:6:"hyphen";s:3:"-20";s:6:"period";s:3:"-55";}s:12:"rcommaaccent";a:6:{s:5:"comma";s:3:"-40";s:1:"g";s:3:"-18";s:6:"gbreve";s:3:"-18";s:12:"gcommaaccent";s:3:"-18";s:6:"hyphen";s:3:"-20";s:6:"period";s:3:"-55";}s:5:"space";a:18:{s:1:"A";s:3:"-55";s:6:"Aacute";s:3:"-55";s:6:"Abreve";s:3:"-55";s:11:"Acircumflex";s:3:"-55";s:9:"Adieresis";s:3:"-55";s:6:"Agrave";s:3:"-55";s:7:"Amacron";s:3:"-55";s:7:"Aogonek";s:3:"-55";s:5:"Aring";s:3:"-55";s:6:"Atilde";s:3:"-55";s:1:"T";s:3:"-18";s:6:"Tcaron";s:3:"-18";s:12:"Tcommaaccent";s:3:"-18";s:1:"V";s:3:"-50";s:1:"W";s:3:"-30";s:1:"Y";s:3:"-90";s:6:"Yacute";s:3:"-90";s:9:"Ydieresis";s:3:"-90";}s:1:"v";a:30:{s:1:"a";s:3:"-25";s:6:"aacute";s:3:"-25";s:6:"abreve";s:3:"-25";s:11:"acircumflex";s:3:"-25";s:9:"adieresis";s:3:"-25";s:6:"agrave";s:3:"-25";s:7:"amacron";s:3:"-25";s:7:"aogonek";s:3:"-25";s:5:"aring";s:3:"-25";s:6:"atilde";s:3:"-25";s:5:"comma";s:3:"-65";s:1:"e";s:3:"-15";s:6:"eacute";s:3:"-15";s:6:"ecaron";s:3:"-15";s:11:"ecircumflex";s:3:"-15";s:9:"edieresis";s:3:"-15";s:10:"edotaccent";s:3:"-15";s:6:"egrave";s:3:"-15";s:7:"emacron";s:3:"-15";s:7:"eogonek";s:3:"-15";s:1:"o";s:3:"-20";s:6:"oacute";s:3:"-20";s:11:"ocircumflex";s:3:"-20";s:9:"odieresis";s:3:"-20";s:6:"ograve";s:3:"-20";s:13:"ohungarumlaut";s:3:"-20";s:7:"omacron";s:3:"-20";s:6:"oslash";s:3:"-20";s:6:"otilde";s:3:"-20";s:6:"period";s:3:"-65";}s:1:"w";a:21:{s:1:"a";s:3:"-10";s:6:"aacute";s:3:"-10";s:6:"abreve";s:3:"-10";s:11:"acircumflex";s:3:"-10";s:9:"adieresis";s:3:"-10";s:6:"agrave";s:3:"-10";s:7:"amacron";s:3:"-10";s:7:"aogonek";s:3:"-10";s:5:"aring";s:3:"-10";s:6:"atilde";s:3:"-10";s:5:"comma";s:3:"-65";s:1:"o";s:3:"-10";s:6:"oacute";s:3:"-10";s:11:"ocircumflex";s:3:"-10";s:9:"odieresis";s:3:"-10";s:6:"ograve";s:3:"-10";s:13:"ohungarumlaut";s:3:"-10";s:7:"omacron";s:3:"-10";s:6:"oslash";s:3:"-10";s:6:"otilde";s:3:"-10";s:6:"period";s:3:"-65";}s:1:"x";a:9:{s:1:"e";s:3:"-15";s:6:"eacute";s:3:"-15";s:6:"ecaron";s:3:"-15";s:11:"ecircumflex";s:3:"-15";s:9:"edieresis";s:3:"-15";s:10:"edotaccent";s:3:"-15";s:6:"egrave";s:3:"-15";s:7:"emacron";s:3:"-15";s:7:"eogonek";s:3:"-15";}s:1:"y";a:2:{s:5:"comma";s:3:"-65";s:6:"period";s:3:"-65";}s:6:"yacute";a:2:{s:5:"comma";s:3:"-65";s:6:"period";s:3:"-65";}s:9:"ydieresis";a:2:{s:5:"comma";s:3:"-65";s:6:"period";s:3:"-65";}}s:9:"_version_";i:1;}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/php_ZapfDingbats.afm b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/php_ZapfDingbats.afm new file mode 100755 index 00000000..12b5b973 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/php_ZapfDingbats.afm @@ -0,0 +1 @@ +a:17:{s:8:"FontName";s:12:"ZapfDingbats";s:8:"FullName";s:17:"ITC Zapf Dingbats";s:10:"FamilyName";s:12:"ZapfDingbats";s:6:"Weight";s:6:"Medium";s:11:"ItalicAngle";s:1:"0";s:12:"IsFixedPitch";s:5:"false";s:12:"CharacterSet";s:7:"Special";s:8:"FontBBox";a:4:{i:0;s:2:"-1";i:1;s:4:"-143";i:2;s:3:"981";i:3;s:3:"820";}s:17:"UnderlinePosition";s:4:"-100";s:18:"UnderlineThickness";s:2:"50";s:7:"Version";s:7:"002.000";s:14:"EncodingScheme";s:12:"FontSpecific";s:5:"StdHW";s:2:"28";s:5:"StdVW";s:2:"90";s:16:"StartCharMetrics";s:3:"202";s:1:"C";a:404:{i:32;a:4:{s:1:"C";s:2:"32";s:2:"WX";s:3:"278";s:1:"N";s:5:"space";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:1:"0";i:2;s:1:"0";i:3;s:1:"0";}}s:5:"space";a:4:{s:1:"C";s:2:"32";s:2:"WX";s:3:"278";s:1:"N";s:5:"space";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:1:"0";i:2;s:1:"0";i:3;s:1:"0";}}i:33;a:4:{s:1:"C";s:2:"33";s:2:"WX";s:3:"974";s:1:"N";s:2:"a1";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:2:"72";i:2;s:3:"939";i:3;s:3:"621";}}s:2:"a1";a:4:{s:1:"C";s:2:"33";s:2:"WX";s:3:"974";s:1:"N";s:2:"a1";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:2:"72";i:2;s:3:"939";i:3;s:3:"621";}}i:34;a:4:{s:1:"C";s:2:"34";s:2:"WX";s:3:"961";s:1:"N";s:2:"a2";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:2:"81";i:2;s:3:"927";i:3;s:3:"611";}}s:2:"a2";a:4:{s:1:"C";s:2:"34";s:2:"WX";s:3:"961";s:1:"N";s:2:"a2";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:2:"81";i:2;s:3:"927";i:3;s:3:"611";}}i:35;a:4:{s:1:"C";s:2:"35";s:2:"WX";s:3:"974";s:1:"N";s:4:"a202";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:2:"72";i:2;s:3:"939";i:3;s:3:"621";}}s:4:"a202";a:4:{s:1:"C";s:2:"35";s:2:"WX";s:3:"974";s:1:"N";s:4:"a202";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:2:"72";i:2;s:3:"939";i:3;s:3:"621";}}i:36;a:4:{s:1:"C";s:2:"36";s:2:"WX";s:3:"980";s:1:"N";s:2:"a3";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"945";i:3;s:3:"692";}}s:2:"a3";a:4:{s:1:"C";s:2:"36";s:2:"WX";s:3:"980";s:1:"N";s:2:"a3";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"945";i:3;s:3:"692";}}i:37;a:4:{s:1:"C";s:2:"37";s:2:"WX";s:3:"719";s:1:"N";s:2:"a4";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"139";i:2;s:3:"685";i:3;s:3:"566";}}s:2:"a4";a:4:{s:1:"C";s:2:"37";s:2:"WX";s:3:"719";s:1:"N";s:2:"a4";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"139";i:2;s:3:"685";i:3;s:3:"566";}}i:38;a:4:{s:1:"C";s:2:"38";s:2:"WX";s:3:"789";s:1:"N";s:2:"a5";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"755";i:3;s:3:"705";}}s:2:"a5";a:4:{s:1:"C";s:2:"38";s:2:"WX";s:3:"789";s:1:"N";s:2:"a5";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"755";i:3;s:3:"705";}}i:39;a:4:{s:1:"C";s:2:"39";s:2:"WX";s:3:"790";s:1:"N";s:4:"a119";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"755";i:3;s:3:"705";}}s:4:"a119";a:4:{s:1:"C";s:2:"39";s:2:"WX";s:3:"790";s:1:"N";s:4:"a119";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"755";i:3;s:3:"705";}}i:40;a:4:{s:1:"C";s:2:"40";s:2:"WX";s:3:"791";s:1:"N";s:4:"a118";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-13";i:2;s:3:"761";i:3;s:3:"705";}}s:4:"a118";a:4:{s:1:"C";s:2:"40";s:2:"WX";s:3:"791";s:1:"N";s:4:"a118";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-13";i:2;s:3:"761";i:3;s:3:"705";}}i:41;a:4:{s:1:"C";s:2:"41";s:2:"WX";s:3:"690";s:1:"N";s:4:"a117";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"138";i:2;s:3:"655";i:3;s:3:"553";}}s:4:"a117";a:4:{s:1:"C";s:2:"41";s:2:"WX";s:3:"690";s:1:"N";s:4:"a117";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"138";i:2;s:3:"655";i:3;s:3:"553";}}i:42;a:4:{s:1:"C";s:2:"42";s:2:"WX";s:3:"960";s:1:"N";s:3:"a11";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"123";i:2;s:3:"925";i:3;s:3:"568";}}s:3:"a11";a:4:{s:1:"C";s:2:"42";s:2:"WX";s:3:"960";s:1:"N";s:3:"a11";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"123";i:2;s:3:"925";i:3;s:3:"568";}}i:43;a:4:{s:1:"C";s:2:"43";s:2:"WX";s:3:"939";s:1:"N";s:3:"a12";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"134";i:2;s:3:"904";i:3;s:3:"559";}}s:3:"a12";a:4:{s:1:"C";s:2:"43";s:2:"WX";s:3:"939";s:1:"N";s:3:"a12";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"134";i:2;s:3:"904";i:3;s:3:"559";}}i:44;a:4:{s:1:"C";s:2:"44";s:2:"WX";s:3:"549";s:1:"N";s:3:"a13";s:1:"B";a:4:{i:0;s:2:"29";i:1;s:3:"-11";i:2;s:3:"516";i:3;s:3:"705";}}s:3:"a13";a:4:{s:1:"C";s:2:"44";s:2:"WX";s:3:"549";s:1:"N";s:3:"a13";s:1:"B";a:4:{i:0;s:2:"29";i:1;s:3:"-11";i:2;s:3:"516";i:3;s:3:"705";}}i:45;a:4:{s:1:"C";s:2:"45";s:2:"WX";s:3:"855";s:1:"N";s:3:"a14";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:2:"59";i:2;s:3:"820";i:3;s:3:"632";}}s:3:"a14";a:4:{s:1:"C";s:2:"45";s:2:"WX";s:3:"855";s:1:"N";s:3:"a14";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:2:"59";i:2;s:3:"820";i:3;s:3:"632";}}i:46;a:4:{s:1:"C";s:2:"46";s:2:"WX";s:3:"911";s:1:"N";s:3:"a15";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:2:"50";i:2;s:3:"876";i:3;s:3:"642";}}s:3:"a15";a:4:{s:1:"C";s:2:"46";s:2:"WX";s:3:"911";s:1:"N";s:3:"a15";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:2:"50";i:2;s:3:"876";i:3;s:3:"642";}}i:47;a:4:{s:1:"C";s:2:"47";s:2:"WX";s:3:"933";s:1:"N";s:3:"a16";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"139";i:2;s:3:"899";i:3;s:3:"550";}}s:3:"a16";a:4:{s:1:"C";s:2:"47";s:2:"WX";s:3:"933";s:1:"N";s:3:"a16";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"139";i:2;s:3:"899";i:3;s:3:"550";}}i:48;a:4:{s:1:"C";s:2:"48";s:2:"WX";s:3:"911";s:1:"N";s:4:"a105";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:2:"50";i:2;s:3:"876";i:3;s:3:"642";}}s:4:"a105";a:4:{s:1:"C";s:2:"48";s:2:"WX";s:3:"911";s:1:"N";s:4:"a105";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:2:"50";i:2;s:3:"876";i:3;s:3:"642";}}i:49;a:4:{s:1:"C";s:2:"49";s:2:"WX";s:3:"945";s:1:"N";s:3:"a17";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"139";i:2;s:3:"909";i:3;s:3:"553";}}s:3:"a17";a:4:{s:1:"C";s:2:"49";s:2:"WX";s:3:"945";s:1:"N";s:3:"a17";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"139";i:2;s:3:"909";i:3;s:3:"553";}}i:50;a:4:{s:1:"C";s:2:"50";s:2:"WX";s:3:"974";s:1:"N";s:3:"a18";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"104";i:2;s:3:"938";i:3;s:3:"587";}}s:3:"a18";a:4:{s:1:"C";s:2:"50";s:2:"WX";s:3:"974";s:1:"N";s:3:"a18";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"104";i:2;s:3:"938";i:3;s:3:"587";}}i:51;a:4:{s:1:"C";s:2:"51";s:2:"WX";s:3:"755";s:1:"N";s:3:"a19";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-13";i:2;s:3:"721";i:3;s:3:"705";}}s:3:"a19";a:4:{s:1:"C";s:2:"51";s:2:"WX";s:3:"755";s:1:"N";s:3:"a19";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-13";i:2;s:3:"721";i:3;s:3:"705";}}i:52;a:4:{s:1:"C";s:2:"52";s:2:"WX";s:3:"846";s:1:"N";s:3:"a20";s:1:"B";a:4:{i:0;s:2:"36";i:1;s:3:"-14";i:2;s:3:"811";i:3;s:3:"705";}}s:3:"a20";a:4:{s:1:"C";s:2:"52";s:2:"WX";s:3:"846";s:1:"N";s:3:"a20";s:1:"B";a:4:{i:0;s:2:"36";i:1;s:3:"-14";i:2;s:3:"811";i:3;s:3:"705";}}i:53;a:4:{s:1:"C";s:2:"53";s:2:"WX";s:3:"762";s:1:"N";s:3:"a21";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"727";i:3;s:3:"692";}}s:3:"a21";a:4:{s:1:"C";s:2:"53";s:2:"WX";s:3:"762";s:1:"N";s:3:"a21";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"727";i:3;s:3:"692";}}i:54;a:4:{s:1:"C";s:2:"54";s:2:"WX";s:3:"761";s:1:"N";s:3:"a22";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"727";i:3;s:3:"692";}}s:3:"a22";a:4:{s:1:"C";s:2:"54";s:2:"WX";s:3:"761";s:1:"N";s:3:"a22";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"727";i:3;s:3:"692";}}i:55;a:4:{s:1:"C";s:2:"55";s:2:"WX";s:3:"571";s:1:"N";s:3:"a23";s:1:"B";a:4:{i:0;s:2:"-1";i:1;s:3:"-68";i:2;s:3:"571";i:3;s:3:"661";}}s:3:"a23";a:4:{s:1:"C";s:2:"55";s:2:"WX";s:3:"571";s:1:"N";s:3:"a23";s:1:"B";a:4:{i:0;s:2:"-1";i:1;s:3:"-68";i:2;s:3:"571";i:3;s:3:"661";}}i:56;a:4:{s:1:"C";s:2:"56";s:2:"WX";s:3:"677";s:1:"N";s:3:"a24";s:1:"B";a:4:{i:0;s:2:"36";i:1;s:3:"-13";i:2;s:3:"642";i:3;s:3:"705";}}s:3:"a24";a:4:{s:1:"C";s:2:"56";s:2:"WX";s:3:"677";s:1:"N";s:3:"a24";s:1:"B";a:4:{i:0;s:2:"36";i:1;s:3:"-13";i:2;s:3:"642";i:3;s:3:"705";}}i:57;a:4:{s:1:"C";s:2:"57";s:2:"WX";s:3:"763";s:1:"N";s:3:"a25";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"728";i:3;s:3:"692";}}s:3:"a25";a:4:{s:1:"C";s:2:"57";s:2:"WX";s:3:"763";s:1:"N";s:3:"a25";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"728";i:3;s:3:"692";}}i:58;a:4:{s:1:"C";s:2:"58";s:2:"WX";s:3:"760";s:1:"N";s:3:"a26";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"726";i:3;s:3:"692";}}s:3:"a26";a:4:{s:1:"C";s:2:"58";s:2:"WX";s:3:"760";s:1:"N";s:3:"a26";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"726";i:3;s:3:"692";}}i:59;a:4:{s:1:"C";s:2:"59";s:2:"WX";s:3:"759";s:1:"N";s:3:"a27";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"725";i:3;s:3:"692";}}s:3:"a27";a:4:{s:1:"C";s:2:"59";s:2:"WX";s:3:"759";s:1:"N";s:3:"a27";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"725";i:3;s:3:"692";}}i:60;a:4:{s:1:"C";s:2:"60";s:2:"WX";s:3:"754";s:1:"N";s:3:"a28";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"720";i:3;s:3:"692";}}s:3:"a28";a:4:{s:1:"C";s:2:"60";s:2:"WX";s:3:"754";s:1:"N";s:3:"a28";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"720";i:3;s:3:"692";}}i:61;a:4:{s:1:"C";s:2:"61";s:2:"WX";s:3:"494";s:1:"N";s:2:"a6";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"460";i:3;s:3:"692";}}s:2:"a6";a:4:{s:1:"C";s:2:"61";s:2:"WX";s:3:"494";s:1:"N";s:2:"a6";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"460";i:3;s:3:"692";}}i:62;a:4:{s:1:"C";s:2:"62";s:2:"WX";s:3:"552";s:1:"N";s:2:"a7";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"517";i:3;s:3:"692";}}s:2:"a7";a:4:{s:1:"C";s:2:"62";s:2:"WX";s:3:"552";s:1:"N";s:2:"a7";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"517";i:3;s:3:"692";}}i:63;a:4:{s:1:"C";s:2:"63";s:2:"WX";s:3:"537";s:1:"N";s:2:"a8";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"503";i:3;s:3:"692";}}s:2:"a8";a:4:{s:1:"C";s:2:"63";s:2:"WX";s:3:"537";s:1:"N";s:2:"a8";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"503";i:3;s:3:"692";}}i:64;a:4:{s:1:"C";s:2:"64";s:2:"WX";s:3:"577";s:1:"N";s:2:"a9";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:2:"96";i:2;s:3:"542";i:3;s:3:"596";}}s:2:"a9";a:4:{s:1:"C";s:2:"64";s:2:"WX";s:3:"577";s:1:"N";s:2:"a9";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:2:"96";i:2;s:3:"542";i:3;s:3:"596";}}i:65;a:4:{s:1:"C";s:2:"65";s:2:"WX";s:3:"692";s:1:"N";s:3:"a10";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"657";i:3;s:3:"705";}}s:3:"a10";a:4:{s:1:"C";s:2:"65";s:2:"WX";s:3:"692";s:1:"N";s:3:"a10";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"657";i:3;s:3:"705";}}i:66;a:4:{s:1:"C";s:2:"66";s:2:"WX";s:3:"786";s:1:"N";s:3:"a29";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"751";i:3;s:3:"705";}}s:3:"a29";a:4:{s:1:"C";s:2:"66";s:2:"WX";s:3:"786";s:1:"N";s:3:"a29";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"751";i:3;s:3:"705";}}i:67;a:4:{s:1:"C";s:2:"67";s:2:"WX";s:3:"788";s:1:"N";s:3:"a30";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"752";i:3;s:3:"705";}}s:3:"a30";a:4:{s:1:"C";s:2:"67";s:2:"WX";s:3:"788";s:1:"N";s:3:"a30";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"752";i:3;s:3:"705";}}i:68;a:4:{s:1:"C";s:2:"68";s:2:"WX";s:3:"788";s:1:"N";s:3:"a31";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"753";i:3;s:3:"705";}}s:3:"a31";a:4:{s:1:"C";s:2:"68";s:2:"WX";s:3:"788";s:1:"N";s:3:"a31";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"753";i:3;s:3:"705";}}i:69;a:4:{s:1:"C";s:2:"69";s:2:"WX";s:3:"790";s:1:"N";s:3:"a32";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"756";i:3;s:3:"705";}}s:3:"a32";a:4:{s:1:"C";s:2:"69";s:2:"WX";s:3:"790";s:1:"N";s:3:"a32";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"756";i:3;s:3:"705";}}i:70;a:4:{s:1:"C";s:2:"70";s:2:"WX";s:3:"793";s:1:"N";s:3:"a33";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-13";i:2;s:3:"759";i:3;s:3:"705";}}s:3:"a33";a:4:{s:1:"C";s:2:"70";s:2:"WX";s:3:"793";s:1:"N";s:3:"a33";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-13";i:2;s:3:"759";i:3;s:3:"705";}}i:71;a:4:{s:1:"C";s:2:"71";s:2:"WX";s:3:"794";s:1:"N";s:3:"a34";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-13";i:2;s:3:"759";i:3;s:3:"705";}}s:3:"a34";a:4:{s:1:"C";s:2:"71";s:2:"WX";s:3:"794";s:1:"N";s:3:"a34";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-13";i:2;s:3:"759";i:3;s:3:"705";}}i:72;a:4:{s:1:"C";s:2:"72";s:2:"WX";s:3:"816";s:1:"N";s:3:"a35";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"782";i:3;s:3:"705";}}s:3:"a35";a:4:{s:1:"C";s:2:"72";s:2:"WX";s:3:"816";s:1:"N";s:3:"a35";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"782";i:3;s:3:"705";}}i:73;a:4:{s:1:"C";s:2:"73";s:2:"WX";s:3:"823";s:1:"N";s:3:"a36";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"787";i:3;s:3:"705";}}s:3:"a36";a:4:{s:1:"C";s:2:"73";s:2:"WX";s:3:"823";s:1:"N";s:3:"a36";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"787";i:3;s:3:"705";}}i:74;a:4:{s:1:"C";s:2:"74";s:2:"WX";s:3:"789";s:1:"N";s:3:"a37";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}s:3:"a37";a:4:{s:1:"C";s:2:"74";s:2:"WX";s:3:"789";s:1:"N";s:3:"a37";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}i:75;a:4:{s:1:"C";s:2:"75";s:2:"WX";s:3:"841";s:1:"N";s:3:"a38";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"807";i:3;s:3:"705";}}s:3:"a38";a:4:{s:1:"C";s:2:"75";s:2:"WX";s:3:"841";s:1:"N";s:3:"a38";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"807";i:3;s:3:"705";}}i:76;a:4:{s:1:"C";s:2:"76";s:2:"WX";s:3:"823";s:1:"N";s:3:"a39";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"789";i:3;s:3:"705";}}s:3:"a39";a:4:{s:1:"C";s:2:"76";s:2:"WX";s:3:"823";s:1:"N";s:3:"a39";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"789";i:3;s:3:"705";}}i:77;a:4:{s:1:"C";s:2:"77";s:2:"WX";s:3:"833";s:1:"N";s:3:"a40";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"798";i:3;s:3:"705";}}s:3:"a40";a:4:{s:1:"C";s:2:"77";s:2:"WX";s:3:"833";s:1:"N";s:3:"a40";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"798";i:3;s:3:"705";}}i:78;a:4:{s:1:"C";s:2:"78";s:2:"WX";s:3:"816";s:1:"N";s:3:"a41";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-13";i:2;s:3:"782";i:3;s:3:"705";}}s:3:"a41";a:4:{s:1:"C";s:2:"78";s:2:"WX";s:3:"816";s:1:"N";s:3:"a41";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-13";i:2;s:3:"782";i:3;s:3:"705";}}i:79;a:4:{s:1:"C";s:2:"79";s:2:"WX";s:3:"831";s:1:"N";s:3:"a42";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"796";i:3;s:3:"705";}}s:3:"a42";a:4:{s:1:"C";s:2:"79";s:2:"WX";s:3:"831";s:1:"N";s:3:"a42";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"796";i:3;s:3:"705";}}i:80;a:4:{s:1:"C";s:2:"80";s:2:"WX";s:3:"923";s:1:"N";s:3:"a43";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"888";i:3;s:3:"705";}}s:3:"a43";a:4:{s:1:"C";s:2:"80";s:2:"WX";s:3:"923";s:1:"N";s:3:"a43";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"888";i:3;s:3:"705";}}i:81;a:4:{s:1:"C";s:2:"81";s:2:"WX";s:3:"744";s:1:"N";s:3:"a44";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"710";i:3;s:3:"692";}}s:3:"a44";a:4:{s:1:"C";s:2:"81";s:2:"WX";s:3:"744";s:1:"N";s:3:"a44";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"710";i:3;s:3:"692";}}i:82;a:4:{s:1:"C";s:2:"82";s:2:"WX";s:3:"723";s:1:"N";s:3:"a45";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"688";i:3;s:3:"692";}}s:3:"a45";a:4:{s:1:"C";s:2:"82";s:2:"WX";s:3:"723";s:1:"N";s:3:"a45";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"688";i:3;s:3:"692";}}i:83;a:4:{s:1:"C";s:2:"83";s:2:"WX";s:3:"749";s:1:"N";s:3:"a46";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"714";i:3;s:3:"692";}}s:3:"a46";a:4:{s:1:"C";s:2:"83";s:2:"WX";s:3:"749";s:1:"N";s:3:"a46";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"714";i:3;s:3:"692";}}i:84;a:4:{s:1:"C";s:2:"84";s:2:"WX";s:3:"790";s:1:"N";s:3:"a47";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-14";i:2;s:3:"756";i:3;s:3:"705";}}s:3:"a47";a:4:{s:1:"C";s:2:"84";s:2:"WX";s:3:"790";s:1:"N";s:3:"a47";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-14";i:2;s:3:"756";i:3;s:3:"705";}}i:85;a:4:{s:1:"C";s:2:"85";s:2:"WX";s:3:"792";s:1:"N";s:3:"a48";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"758";i:3;s:3:"705";}}s:3:"a48";a:4:{s:1:"C";s:2:"85";s:2:"WX";s:3:"792";s:1:"N";s:3:"a48";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"758";i:3;s:3:"705";}}i:86;a:4:{s:1:"C";s:2:"86";s:2:"WX";s:3:"695";s:1:"N";s:3:"a49";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"661";i:3;s:3:"706";}}s:3:"a49";a:4:{s:1:"C";s:2:"86";s:2:"WX";s:3:"695";s:1:"N";s:3:"a49";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"661";i:3;s:3:"706";}}i:87;a:4:{s:1:"C";s:2:"87";s:2:"WX";s:3:"776";s:1:"N";s:3:"a50";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:2:"-6";i:2;s:3:"741";i:3;s:3:"699";}}s:3:"a50";a:4:{s:1:"C";s:2:"87";s:2:"WX";s:3:"776";s:1:"N";s:3:"a50";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:2:"-6";i:2;s:3:"741";i:3;s:3:"699";}}i:88;a:4:{s:1:"C";s:2:"88";s:2:"WX";s:3:"768";s:1:"N";s:3:"a51";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:2:"-7";i:2;s:3:"734";i:3;s:3:"699";}}s:3:"a51";a:4:{s:1:"C";s:2:"88";s:2:"WX";s:3:"768";s:1:"N";s:3:"a51";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:2:"-7";i:2;s:3:"734";i:3;s:3:"699";}}i:89;a:4:{s:1:"C";s:2:"89";s:2:"WX";s:3:"792";s:1:"N";s:3:"a52";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"757";i:3;s:3:"705";}}s:3:"a52";a:4:{s:1:"C";s:2:"89";s:2:"WX";s:3:"792";s:1:"N";s:3:"a52";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"757";i:3;s:3:"705";}}i:90;a:4:{s:1:"C";s:2:"90";s:2:"WX";s:3:"759";s:1:"N";s:3:"a53";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"725";i:3;s:3:"692";}}s:3:"a53";a:4:{s:1:"C";s:2:"90";s:2:"WX";s:3:"759";s:1:"N";s:3:"a53";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"725";i:3;s:3:"692";}}i:91;a:4:{s:1:"C";s:2:"91";s:2:"WX";s:3:"707";s:1:"N";s:3:"a54";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-13";i:2;s:3:"672";i:3;s:3:"704";}}s:3:"a54";a:4:{s:1:"C";s:2:"91";s:2:"WX";s:3:"707";s:1:"N";s:3:"a54";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-13";i:2;s:3:"672";i:3;s:3:"704";}}i:92;a:4:{s:1:"C";s:2:"92";s:2:"WX";s:3:"708";s:1:"N";s:3:"a55";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"672";i:3;s:3:"705";}}s:3:"a55";a:4:{s:1:"C";s:2:"92";s:2:"WX";s:3:"708";s:1:"N";s:3:"a55";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"672";i:3;s:3:"705";}}i:93;a:4:{s:1:"C";s:2:"93";s:2:"WX";s:3:"682";s:1:"N";s:3:"a56";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"647";i:3;s:3:"705";}}s:3:"a56";a:4:{s:1:"C";s:2:"93";s:2:"WX";s:3:"682";s:1:"N";s:3:"a56";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"647";i:3;s:3:"705";}}i:94;a:4:{s:1:"C";s:2:"94";s:2:"WX";s:3:"701";s:1:"N";s:3:"a57";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"666";i:3;s:3:"705";}}s:3:"a57";a:4:{s:1:"C";s:2:"94";s:2:"WX";s:3:"701";s:1:"N";s:3:"a57";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"666";i:3;s:3:"705";}}i:95;a:4:{s:1:"C";s:2:"95";s:2:"WX";s:3:"826";s:1:"N";s:3:"a58";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"791";i:3;s:3:"705";}}s:3:"a58";a:4:{s:1:"C";s:2:"95";s:2:"WX";s:3:"826";s:1:"N";s:3:"a58";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"791";i:3;s:3:"705";}}i:96;a:4:{s:1:"C";s:2:"96";s:2:"WX";s:3:"815";s:1:"N";s:3:"a59";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"780";i:3;s:3:"705";}}s:3:"a59";a:4:{s:1:"C";s:2:"96";s:2:"WX";s:3:"815";s:1:"N";s:3:"a59";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"780";i:3;s:3:"705";}}i:97;a:4:{s:1:"C";s:2:"97";s:2:"WX";s:3:"789";s:1:"N";s:3:"a60";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}s:3:"a60";a:4:{s:1:"C";s:2:"97";s:2:"WX";s:3:"789";s:1:"N";s:3:"a60";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}i:98;a:4:{s:1:"C";s:2:"98";s:2:"WX";s:3:"789";s:1:"N";s:3:"a61";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}s:3:"a61";a:4:{s:1:"C";s:2:"98";s:2:"WX";s:3:"789";s:1:"N";s:3:"a61";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}i:99;a:4:{s:1:"C";s:2:"99";s:2:"WX";s:3:"707";s:1:"N";s:3:"a62";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-14";i:2;s:3:"673";i:3;s:3:"705";}}s:3:"a62";a:4:{s:1:"C";s:2:"99";s:2:"WX";s:3:"707";s:1:"N";s:3:"a62";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-14";i:2;s:3:"673";i:3;s:3:"705";}}i:100;a:4:{s:1:"C";s:3:"100";s:2:"WX";s:3:"687";s:1:"N";s:3:"a63";s:1:"B";a:4:{i:0;s:2:"36";i:1;s:1:"0";i:2;s:3:"651";i:3;s:3:"692";}}s:3:"a63";a:4:{s:1:"C";s:3:"100";s:2:"WX";s:3:"687";s:1:"N";s:3:"a63";s:1:"B";a:4:{i:0;s:2:"36";i:1;s:1:"0";i:2;s:3:"651";i:3;s:3:"692";}}i:101;a:4:{s:1:"C";s:3:"101";s:2:"WX";s:3:"696";s:1:"N";s:3:"a64";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"661";i:3;s:3:"691";}}s:3:"a64";a:4:{s:1:"C";s:3:"101";s:2:"WX";s:3:"696";s:1:"N";s:3:"a64";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"661";i:3;s:3:"691";}}i:102;a:4:{s:1:"C";s:3:"102";s:2:"WX";s:3:"689";s:1:"N";s:3:"a65";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"655";i:3;s:3:"692";}}s:3:"a65";a:4:{s:1:"C";s:3:"102";s:2:"WX";s:3:"689";s:1:"N";s:3:"a65";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"655";i:3;s:3:"692";}}i:103;a:4:{s:1:"C";s:3:"103";s:2:"WX";s:3:"786";s:1:"N";s:3:"a66";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-14";i:2;s:3:"751";i:3;s:3:"705";}}s:3:"a66";a:4:{s:1:"C";s:3:"103";s:2:"WX";s:3:"786";s:1:"N";s:3:"a66";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-14";i:2;s:3:"751";i:3;s:3:"705";}}i:104;a:4:{s:1:"C";s:3:"104";s:2:"WX";s:3:"787";s:1:"N";s:3:"a67";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"752";i:3;s:3:"705";}}s:3:"a67";a:4:{s:1:"C";s:3:"104";s:2:"WX";s:3:"787";s:1:"N";s:3:"a67";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"752";i:3;s:3:"705";}}i:105;a:4:{s:1:"C";s:3:"105";s:2:"WX";s:3:"713";s:1:"N";s:3:"a68";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"678";i:3;s:3:"705";}}s:3:"a68";a:4:{s:1:"C";s:3:"105";s:2:"WX";s:3:"713";s:1:"N";s:3:"a68";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"678";i:3;s:3:"705";}}i:106;a:4:{s:1:"C";s:3:"106";s:2:"WX";s:3:"791";s:1:"N";s:3:"a69";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"756";i:3;s:3:"705";}}s:3:"a69";a:4:{s:1:"C";s:3:"106";s:2:"WX";s:3:"791";s:1:"N";s:3:"a69";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"756";i:3;s:3:"705";}}i:107;a:4:{s:1:"C";s:3:"107";s:2:"WX";s:3:"785";s:1:"N";s:3:"a70";s:1:"B";a:4:{i:0;s:2:"36";i:1;s:3:"-14";i:2;s:3:"751";i:3;s:3:"705";}}s:3:"a70";a:4:{s:1:"C";s:3:"107";s:2:"WX";s:3:"785";s:1:"N";s:3:"a70";s:1:"B";a:4:{i:0;s:2:"36";i:1;s:3:"-14";i:2;s:3:"751";i:3;s:3:"705";}}i:108;a:4:{s:1:"C";s:3:"108";s:2:"WX";s:3:"791";s:1:"N";s:3:"a71";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"757";i:3;s:3:"705";}}s:3:"a71";a:4:{s:1:"C";s:3:"108";s:2:"WX";s:3:"791";s:1:"N";s:3:"a71";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"757";i:3;s:3:"705";}}i:109;a:4:{s:1:"C";s:3:"109";s:2:"WX";s:3:"873";s:1:"N";s:3:"a72";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"838";i:3;s:3:"705";}}s:3:"a72";a:4:{s:1:"C";s:3:"109";s:2:"WX";s:3:"873";s:1:"N";s:3:"a72";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"838";i:3;s:3:"705";}}i:110;a:4:{s:1:"C";s:3:"110";s:2:"WX";s:3:"761";s:1:"N";s:3:"a73";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"726";i:3;s:3:"692";}}s:3:"a73";a:4:{s:1:"C";s:3:"110";s:2:"WX";s:3:"761";s:1:"N";s:3:"a73";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"726";i:3;s:3:"692";}}i:111;a:4:{s:1:"C";s:3:"111";s:2:"WX";s:3:"762";s:1:"N";s:3:"a74";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"727";i:3;s:3:"692";}}s:3:"a74";a:4:{s:1:"C";s:3:"111";s:2:"WX";s:3:"762";s:1:"N";s:3:"a74";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"727";i:3;s:3:"692";}}i:112;a:4:{s:1:"C";s:3:"112";s:2:"WX";s:3:"762";s:1:"N";s:4:"a203";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"727";i:3;s:3:"692";}}s:4:"a203";a:4:{s:1:"C";s:3:"112";s:2:"WX";s:3:"762";s:1:"N";s:4:"a203";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"727";i:3;s:3:"692";}}i:113;a:4:{s:1:"C";s:3:"113";s:2:"WX";s:3:"759";s:1:"N";s:3:"a75";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"725";i:3;s:3:"692";}}s:3:"a75";a:4:{s:1:"C";s:3:"113";s:2:"WX";s:3:"759";s:1:"N";s:3:"a75";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"725";i:3;s:3:"692";}}i:114;a:4:{s:1:"C";s:3:"114";s:2:"WX";s:3:"759";s:1:"N";s:4:"a204";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"725";i:3;s:3:"692";}}s:4:"a204";a:4:{s:1:"C";s:3:"114";s:2:"WX";s:3:"759";s:1:"N";s:4:"a204";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"725";i:3;s:3:"692";}}i:115;a:4:{s:1:"C";s:3:"115";s:2:"WX";s:3:"892";s:1:"N";s:3:"a76";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"858";i:3;s:3:"705";}}s:3:"a76";a:4:{s:1:"C";s:3:"115";s:2:"WX";s:3:"892";s:1:"N";s:3:"a76";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"858";i:3;s:3:"705";}}i:116;a:4:{s:1:"C";s:3:"116";s:2:"WX";s:3:"892";s:1:"N";s:3:"a77";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"858";i:3;s:3:"692";}}s:3:"a77";a:4:{s:1:"C";s:3:"116";s:2:"WX";s:3:"892";s:1:"N";s:3:"a77";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"858";i:3;s:3:"692";}}i:117;a:4:{s:1:"C";s:3:"117";s:2:"WX";s:3:"788";s:1:"N";s:3:"a78";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}s:3:"a78";a:4:{s:1:"C";s:3:"117";s:2:"WX";s:3:"788";s:1:"N";s:3:"a78";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}i:118;a:4:{s:1:"C";s:3:"118";s:2:"WX";s:3:"784";s:1:"N";s:3:"a79";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"749";i:3;s:3:"705";}}s:3:"a79";a:4:{s:1:"C";s:3:"118";s:2:"WX";s:3:"784";s:1:"N";s:3:"a79";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"749";i:3;s:3:"705";}}i:119;a:4:{s:1:"C";s:3:"119";s:2:"WX";s:3:"438";s:1:"N";s:3:"a81";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"403";i:3;s:3:"705";}}s:3:"a81";a:4:{s:1:"C";s:3:"119";s:2:"WX";s:3:"438";s:1:"N";s:3:"a81";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"403";i:3;s:3:"705";}}i:120;a:4:{s:1:"C";s:3:"120";s:2:"WX";s:3:"138";s:1:"N";s:3:"a82";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"104";i:3;s:3:"692";}}s:3:"a82";a:4:{s:1:"C";s:3:"120";s:2:"WX";s:3:"138";s:1:"N";s:3:"a82";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"104";i:3;s:3:"692";}}i:121;a:4:{s:1:"C";s:3:"121";s:2:"WX";s:3:"277";s:1:"N";s:3:"a83";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"242";i:3;s:3:"692";}}s:3:"a83";a:4:{s:1:"C";s:3:"121";s:2:"WX";s:3:"277";s:1:"N";s:3:"a83";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"242";i:3;s:3:"692";}}i:122;a:4:{s:1:"C";s:3:"122";s:2:"WX";s:3:"415";s:1:"N";s:3:"a84";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"380";i:3;s:3:"692";}}s:3:"a84";a:4:{s:1:"C";s:3:"122";s:2:"WX";s:3:"415";s:1:"N";s:3:"a84";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"380";i:3;s:3:"692";}}i:123;a:4:{s:1:"C";s:3:"123";s:2:"WX";s:3:"392";s:1:"N";s:3:"a97";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"263";i:2;s:3:"357";i:3;s:3:"705";}}s:3:"a97";a:4:{s:1:"C";s:3:"123";s:2:"WX";s:3:"392";s:1:"N";s:3:"a97";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"263";i:2;s:3:"357";i:3;s:3:"705";}}i:124;a:4:{s:1:"C";s:3:"124";s:2:"WX";s:3:"392";s:1:"N";s:3:"a98";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"263";i:2;s:3:"357";i:3;s:3:"705";}}s:3:"a98";a:4:{s:1:"C";s:3:"124";s:2:"WX";s:3:"392";s:1:"N";s:3:"a98";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"263";i:2;s:3:"357";i:3;s:3:"705";}}i:125;a:4:{s:1:"C";s:3:"125";s:2:"WX";s:3:"668";s:1:"N";s:3:"a99";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"263";i:2;s:3:"633";i:3;s:3:"705";}}s:3:"a99";a:4:{s:1:"C";s:3:"125";s:2:"WX";s:3:"668";s:1:"N";s:3:"a99";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"263";i:2;s:3:"633";i:3;s:3:"705";}}i:126;a:4:{s:1:"C";s:3:"126";s:2:"WX";s:3:"668";s:1:"N";s:4:"a100";s:1:"B";a:4:{i:0;s:2:"36";i:1;s:3:"263";i:2;s:3:"634";i:3;s:3:"705";}}s:4:"a100";a:4:{s:1:"C";s:3:"126";s:2:"WX";s:3:"668";s:1:"N";s:4:"a100";s:1:"B";a:4:{i:0;s:2:"36";i:1;s:3:"263";i:2;s:3:"634";i:3;s:3:"705";}}i:128;a:4:{s:1:"C";s:3:"128";s:2:"WX";s:3:"390";s:1:"N";s:3:"a89";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"356";i:3;s:3:"705";}}s:3:"a89";a:4:{s:1:"C";s:3:"128";s:2:"WX";s:3:"390";s:1:"N";s:3:"a89";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"356";i:3;s:3:"705";}}i:129;a:4:{s:1:"C";s:3:"129";s:2:"WX";s:3:"390";s:1:"N";s:3:"a90";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"355";i:3;s:3:"705";}}s:3:"a90";a:4:{s:1:"C";s:3:"129";s:2:"WX";s:3:"390";s:1:"N";s:3:"a90";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"355";i:3;s:3:"705";}}i:130;a:4:{s:1:"C";s:3:"130";s:2:"WX";s:3:"317";s:1:"N";s:3:"a93";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"283";i:3;s:3:"692";}}s:3:"a93";a:4:{s:1:"C";s:3:"130";s:2:"WX";s:3:"317";s:1:"N";s:3:"a93";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"283";i:3;s:3:"692";}}i:131;a:4:{s:1:"C";s:3:"131";s:2:"WX";s:3:"317";s:1:"N";s:3:"a94";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"283";i:3;s:3:"692";}}s:3:"a94";a:4:{s:1:"C";s:3:"131";s:2:"WX";s:3:"317";s:1:"N";s:3:"a94";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"283";i:3;s:3:"692";}}i:132;a:4:{s:1:"C";s:3:"132";s:2:"WX";s:3:"276";s:1:"N";s:3:"a91";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"242";i:3;s:3:"692";}}s:3:"a91";a:4:{s:1:"C";s:3:"132";s:2:"WX";s:3:"276";s:1:"N";s:3:"a91";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"242";i:3;s:3:"692";}}i:133;a:4:{s:1:"C";s:3:"133";s:2:"WX";s:3:"276";s:1:"N";s:3:"a92";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"242";i:3;s:3:"692";}}s:3:"a92";a:4:{s:1:"C";s:3:"133";s:2:"WX";s:3:"276";s:1:"N";s:3:"a92";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"242";i:3;s:3:"692";}}i:134;a:4:{s:1:"C";s:3:"134";s:2:"WX";s:3:"509";s:1:"N";s:4:"a205";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"475";i:3;s:3:"692";}}s:4:"a205";a:4:{s:1:"C";s:3:"134";s:2:"WX";s:3:"509";s:1:"N";s:4:"a205";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"475";i:3;s:3:"692";}}i:135;a:4:{s:1:"C";s:3:"135";s:2:"WX";s:3:"509";s:1:"N";s:3:"a85";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"475";i:3;s:3:"692";}}s:3:"a85";a:4:{s:1:"C";s:3:"135";s:2:"WX";s:3:"509";s:1:"N";s:3:"a85";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"475";i:3;s:3:"692";}}i:136;a:4:{s:1:"C";s:3:"136";s:2:"WX";s:3:"410";s:1:"N";s:4:"a206";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"375";i:3;s:3:"692";}}s:4:"a206";a:4:{s:1:"C";s:3:"136";s:2:"WX";s:3:"410";s:1:"N";s:4:"a206";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"375";i:3;s:3:"692";}}i:137;a:4:{s:1:"C";s:3:"137";s:2:"WX";s:3:"410";s:1:"N";s:3:"a86";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"375";i:3;s:3:"692";}}s:3:"a86";a:4:{s:1:"C";s:3:"137";s:2:"WX";s:3:"410";s:1:"N";s:3:"a86";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"375";i:3;s:3:"692";}}i:138;a:4:{s:1:"C";s:3:"138";s:2:"WX";s:3:"234";s:1:"N";s:3:"a87";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"199";i:3;s:3:"705";}}s:3:"a87";a:4:{s:1:"C";s:3:"138";s:2:"WX";s:3:"234";s:1:"N";s:3:"a87";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"199";i:3;s:3:"705";}}i:139;a:4:{s:1:"C";s:3:"139";s:2:"WX";s:3:"234";s:1:"N";s:3:"a88";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"199";i:3;s:3:"705";}}s:3:"a88";a:4:{s:1:"C";s:3:"139";s:2:"WX";s:3:"234";s:1:"N";s:3:"a88";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"199";i:3;s:3:"705";}}i:140;a:4:{s:1:"C";s:3:"140";s:2:"WX";s:3:"334";s:1:"N";s:3:"a95";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"299";i:3;s:3:"692";}}s:3:"a95";a:4:{s:1:"C";s:3:"140";s:2:"WX";s:3:"334";s:1:"N";s:3:"a95";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"299";i:3;s:3:"692";}}i:141;a:4:{s:1:"C";s:3:"141";s:2:"WX";s:3:"334";s:1:"N";s:3:"a96";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"299";i:3;s:3:"692";}}s:3:"a96";a:4:{s:1:"C";s:3:"141";s:2:"WX";s:3:"334";s:1:"N";s:3:"a96";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"299";i:3;s:3:"692";}}i:161;a:4:{s:1:"C";s:3:"161";s:2:"WX";s:3:"732";s:1:"N";s:4:"a101";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:4:"-143";i:2;s:3:"697";i:3;s:3:"806";}}s:4:"a101";a:4:{s:1:"C";s:3:"161";s:2:"WX";s:3:"732";s:1:"N";s:4:"a101";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:4:"-143";i:2;s:3:"697";i:3;s:3:"806";}}i:162;a:4:{s:1:"C";s:3:"162";s:2:"WX";s:3:"544";s:1:"N";s:4:"a102";s:1:"B";a:4:{i:0;s:2:"56";i:1;s:3:"-14";i:2;s:3:"488";i:3;s:3:"706";}}s:4:"a102";a:4:{s:1:"C";s:3:"162";s:2:"WX";s:3:"544";s:1:"N";s:4:"a102";s:1:"B";a:4:{i:0;s:2:"56";i:1;s:3:"-14";i:2;s:3:"488";i:3;s:3:"706";}}i:163;a:4:{s:1:"C";s:3:"163";s:2:"WX";s:3:"544";s:1:"N";s:4:"a103";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-14";i:2;s:3:"508";i:3;s:3:"705";}}s:4:"a103";a:4:{s:1:"C";s:3:"163";s:2:"WX";s:3:"544";s:1:"N";s:4:"a103";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-14";i:2;s:3:"508";i:3;s:3:"705";}}i:164;a:4:{s:1:"C";s:3:"164";s:2:"WX";s:3:"910";s:1:"N";s:4:"a104";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:2:"40";i:2;s:3:"875";i:3;s:3:"651";}}s:4:"a104";a:4:{s:1:"C";s:3:"164";s:2:"WX";s:3:"910";s:1:"N";s:4:"a104";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:2:"40";i:2;s:3:"875";i:3;s:3:"651";}}i:165;a:4:{s:1:"C";s:3:"165";s:2:"WX";s:3:"667";s:1:"N";s:4:"a106";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"633";i:3;s:3:"705";}}s:4:"a106";a:4:{s:1:"C";s:3:"165";s:2:"WX";s:3:"667";s:1:"N";s:4:"a106";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"633";i:3;s:3:"705";}}i:166;a:4:{s:1:"C";s:3:"166";s:2:"WX";s:3:"760";s:1:"N";s:4:"a107";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"726";i:3;s:3:"705";}}s:4:"a107";a:4:{s:1:"C";s:3:"166";s:2:"WX";s:3:"760";s:1:"N";s:4:"a107";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"726";i:3;s:3:"705";}}i:167;a:4:{s:1:"C";s:3:"167";s:2:"WX";s:3:"760";s:1:"N";s:4:"a108";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:3:"121";i:2;s:3:"758";i:3;s:3:"569";}}s:4:"a108";a:4:{s:1:"C";s:3:"167";s:2:"WX";s:3:"760";s:1:"N";s:4:"a108";s:1:"B";a:4:{i:0;s:1:"0";i:1;s:3:"121";i:2;s:3:"758";i:3;s:3:"569";}}i:168;a:4:{s:1:"C";s:3:"168";s:2:"WX";s:3:"776";s:1:"N";s:4:"a112";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"741";i:3;s:3:"705";}}s:4:"a112";a:4:{s:1:"C";s:3:"168";s:2:"WX";s:3:"776";s:1:"N";s:4:"a112";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"741";i:3;s:3:"705";}}i:169;a:4:{s:1:"C";s:3:"169";s:2:"WX";s:3:"595";s:1:"N";s:4:"a111";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-14";i:2;s:3:"560";i:3;s:3:"705";}}s:4:"a111";a:4:{s:1:"C";s:3:"169";s:2:"WX";s:3:"595";s:1:"N";s:4:"a111";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-14";i:2;s:3:"560";i:3;s:3:"705";}}i:170;a:4:{s:1:"C";s:3:"170";s:2:"WX";s:3:"694";s:1:"N";s:4:"a110";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"659";i:3;s:3:"705";}}s:4:"a110";a:4:{s:1:"C";s:3:"170";s:2:"WX";s:3:"694";s:1:"N";s:4:"a110";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"659";i:3;s:3:"705";}}i:171;a:4:{s:1:"C";s:3:"171";s:2:"WX";s:3:"626";s:1:"N";s:4:"a109";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:1:"0";i:2;s:3:"591";i:3;s:3:"705";}}s:4:"a109";a:4:{s:1:"C";s:3:"171";s:2:"WX";s:3:"626";s:1:"N";s:4:"a109";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:1:"0";i:2;s:3:"591";i:3;s:3:"705";}}i:172;a:4:{s:1:"C";s:3:"172";s:2:"WX";s:3:"788";s:1:"N";s:4:"a120";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}s:4:"a120";a:4:{s:1:"C";s:3:"172";s:2:"WX";s:3:"788";s:1:"N";s:4:"a120";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}i:173;a:4:{s:1:"C";s:3:"173";s:2:"WX";s:3:"788";s:1:"N";s:4:"a121";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}s:4:"a121";a:4:{s:1:"C";s:3:"173";s:2:"WX";s:3:"788";s:1:"N";s:4:"a121";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}i:174;a:4:{s:1:"C";s:3:"174";s:2:"WX";s:3:"788";s:1:"N";s:4:"a122";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}s:4:"a122";a:4:{s:1:"C";s:3:"174";s:2:"WX";s:3:"788";s:1:"N";s:4:"a122";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}i:175;a:4:{s:1:"C";s:3:"175";s:2:"WX";s:3:"788";s:1:"N";s:4:"a123";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}s:4:"a123";a:4:{s:1:"C";s:3:"175";s:2:"WX";s:3:"788";s:1:"N";s:4:"a123";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}i:176;a:4:{s:1:"C";s:3:"176";s:2:"WX";s:3:"788";s:1:"N";s:4:"a124";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}s:4:"a124";a:4:{s:1:"C";s:3:"176";s:2:"WX";s:3:"788";s:1:"N";s:4:"a124";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}i:177;a:4:{s:1:"C";s:3:"177";s:2:"WX";s:3:"788";s:1:"N";s:4:"a125";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}s:4:"a125";a:4:{s:1:"C";s:3:"177";s:2:"WX";s:3:"788";s:1:"N";s:4:"a125";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}i:178;a:4:{s:1:"C";s:3:"178";s:2:"WX";s:3:"788";s:1:"N";s:4:"a126";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}s:4:"a126";a:4:{s:1:"C";s:3:"178";s:2:"WX";s:3:"788";s:1:"N";s:4:"a126";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}i:179;a:4:{s:1:"C";s:3:"179";s:2:"WX";s:3:"788";s:1:"N";s:4:"a127";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}s:4:"a127";a:4:{s:1:"C";s:3:"179";s:2:"WX";s:3:"788";s:1:"N";s:4:"a127";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}i:180;a:4:{s:1:"C";s:3:"180";s:2:"WX";s:3:"788";s:1:"N";s:4:"a128";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}s:4:"a128";a:4:{s:1:"C";s:3:"180";s:2:"WX";s:3:"788";s:1:"N";s:4:"a128";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}i:181;a:4:{s:1:"C";s:3:"181";s:2:"WX";s:3:"788";s:1:"N";s:4:"a129";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}s:4:"a129";a:4:{s:1:"C";s:3:"181";s:2:"WX";s:3:"788";s:1:"N";s:4:"a129";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}i:182;a:4:{s:1:"C";s:3:"182";s:2:"WX";s:3:"788";s:1:"N";s:4:"a130";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}s:4:"a130";a:4:{s:1:"C";s:3:"182";s:2:"WX";s:3:"788";s:1:"N";s:4:"a130";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}i:183;a:4:{s:1:"C";s:3:"183";s:2:"WX";s:3:"788";s:1:"N";s:4:"a131";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}s:4:"a131";a:4:{s:1:"C";s:3:"183";s:2:"WX";s:3:"788";s:1:"N";s:4:"a131";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}i:184;a:4:{s:1:"C";s:3:"184";s:2:"WX";s:3:"788";s:1:"N";s:4:"a132";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}s:4:"a132";a:4:{s:1:"C";s:3:"184";s:2:"WX";s:3:"788";s:1:"N";s:4:"a132";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}i:185;a:4:{s:1:"C";s:3:"185";s:2:"WX";s:3:"788";s:1:"N";s:4:"a133";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}s:4:"a133";a:4:{s:1:"C";s:3:"185";s:2:"WX";s:3:"788";s:1:"N";s:4:"a133";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}i:186;a:4:{s:1:"C";s:3:"186";s:2:"WX";s:3:"788";s:1:"N";s:4:"a134";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}s:4:"a134";a:4:{s:1:"C";s:3:"186";s:2:"WX";s:3:"788";s:1:"N";s:4:"a134";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}i:187;a:4:{s:1:"C";s:3:"187";s:2:"WX";s:3:"788";s:1:"N";s:4:"a135";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}s:4:"a135";a:4:{s:1:"C";s:3:"187";s:2:"WX";s:3:"788";s:1:"N";s:4:"a135";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}i:188;a:4:{s:1:"C";s:3:"188";s:2:"WX";s:3:"788";s:1:"N";s:4:"a136";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}s:4:"a136";a:4:{s:1:"C";s:3:"188";s:2:"WX";s:3:"788";s:1:"N";s:4:"a136";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}i:189;a:4:{s:1:"C";s:3:"189";s:2:"WX";s:3:"788";s:1:"N";s:4:"a137";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}s:4:"a137";a:4:{s:1:"C";s:3:"189";s:2:"WX";s:3:"788";s:1:"N";s:4:"a137";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}i:190;a:4:{s:1:"C";s:3:"190";s:2:"WX";s:3:"788";s:1:"N";s:4:"a138";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}s:4:"a138";a:4:{s:1:"C";s:3:"190";s:2:"WX";s:3:"788";s:1:"N";s:4:"a138";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}i:191;a:4:{s:1:"C";s:3:"191";s:2:"WX";s:3:"788";s:1:"N";s:4:"a139";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}s:4:"a139";a:4:{s:1:"C";s:3:"191";s:2:"WX";s:3:"788";s:1:"N";s:4:"a139";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}i:192;a:4:{s:1:"C";s:3:"192";s:2:"WX";s:3:"788";s:1:"N";s:4:"a140";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}s:4:"a140";a:4:{s:1:"C";s:3:"192";s:2:"WX";s:3:"788";s:1:"N";s:4:"a140";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}i:193;a:4:{s:1:"C";s:3:"193";s:2:"WX";s:3:"788";s:1:"N";s:4:"a141";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}s:4:"a141";a:4:{s:1:"C";s:3:"193";s:2:"WX";s:3:"788";s:1:"N";s:4:"a141";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}i:194;a:4:{s:1:"C";s:3:"194";s:2:"WX";s:3:"788";s:1:"N";s:4:"a142";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}s:4:"a142";a:4:{s:1:"C";s:3:"194";s:2:"WX";s:3:"788";s:1:"N";s:4:"a142";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}i:195;a:4:{s:1:"C";s:3:"195";s:2:"WX";s:3:"788";s:1:"N";s:4:"a143";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}s:4:"a143";a:4:{s:1:"C";s:3:"195";s:2:"WX";s:3:"788";s:1:"N";s:4:"a143";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}i:196;a:4:{s:1:"C";s:3:"196";s:2:"WX";s:3:"788";s:1:"N";s:4:"a144";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}s:4:"a144";a:4:{s:1:"C";s:3:"196";s:2:"WX";s:3:"788";s:1:"N";s:4:"a144";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}i:197;a:4:{s:1:"C";s:3:"197";s:2:"WX";s:3:"788";s:1:"N";s:4:"a145";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}s:4:"a145";a:4:{s:1:"C";s:3:"197";s:2:"WX";s:3:"788";s:1:"N";s:4:"a145";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}i:198;a:4:{s:1:"C";s:3:"198";s:2:"WX";s:3:"788";s:1:"N";s:4:"a146";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}s:4:"a146";a:4:{s:1:"C";s:3:"198";s:2:"WX";s:3:"788";s:1:"N";s:4:"a146";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}i:199;a:4:{s:1:"C";s:3:"199";s:2:"WX";s:3:"788";s:1:"N";s:4:"a147";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}s:4:"a147";a:4:{s:1:"C";s:3:"199";s:2:"WX";s:3:"788";s:1:"N";s:4:"a147";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}i:200;a:4:{s:1:"C";s:3:"200";s:2:"WX";s:3:"788";s:1:"N";s:4:"a148";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}s:4:"a148";a:4:{s:1:"C";s:3:"200";s:2:"WX";s:3:"788";s:1:"N";s:4:"a148";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}i:201;a:4:{s:1:"C";s:3:"201";s:2:"WX";s:3:"788";s:1:"N";s:4:"a149";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}s:4:"a149";a:4:{s:1:"C";s:3:"201";s:2:"WX";s:3:"788";s:1:"N";s:4:"a149";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}i:202;a:4:{s:1:"C";s:3:"202";s:2:"WX";s:3:"788";s:1:"N";s:4:"a150";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}s:4:"a150";a:4:{s:1:"C";s:3:"202";s:2:"WX";s:3:"788";s:1:"N";s:4:"a150";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}i:203;a:4:{s:1:"C";s:3:"203";s:2:"WX";s:3:"788";s:1:"N";s:4:"a151";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}s:4:"a151";a:4:{s:1:"C";s:3:"203";s:2:"WX";s:3:"788";s:1:"N";s:4:"a151";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}i:204;a:4:{s:1:"C";s:3:"204";s:2:"WX";s:3:"788";s:1:"N";s:4:"a152";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}s:4:"a152";a:4:{s:1:"C";s:3:"204";s:2:"WX";s:3:"788";s:1:"N";s:4:"a152";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}i:205;a:4:{s:1:"C";s:3:"205";s:2:"WX";s:3:"788";s:1:"N";s:4:"a153";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}s:4:"a153";a:4:{s:1:"C";s:3:"205";s:2:"WX";s:3:"788";s:1:"N";s:4:"a153";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}i:206;a:4:{s:1:"C";s:3:"206";s:2:"WX";s:3:"788";s:1:"N";s:4:"a154";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}s:4:"a154";a:4:{s:1:"C";s:3:"206";s:2:"WX";s:3:"788";s:1:"N";s:4:"a154";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}i:207;a:4:{s:1:"C";s:3:"207";s:2:"WX";s:3:"788";s:1:"N";s:4:"a155";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}s:4:"a155";a:4:{s:1:"C";s:3:"207";s:2:"WX";s:3:"788";s:1:"N";s:4:"a155";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}i:208;a:4:{s:1:"C";s:3:"208";s:2:"WX";s:3:"788";s:1:"N";s:4:"a156";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}s:4:"a156";a:4:{s:1:"C";s:3:"208";s:2:"WX";s:3:"788";s:1:"N";s:4:"a156";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}i:209;a:4:{s:1:"C";s:3:"209";s:2:"WX";s:3:"788";s:1:"N";s:4:"a157";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}s:4:"a157";a:4:{s:1:"C";s:3:"209";s:2:"WX";s:3:"788";s:1:"N";s:4:"a157";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}i:210;a:4:{s:1:"C";s:3:"210";s:2:"WX";s:3:"788";s:1:"N";s:4:"a158";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}s:4:"a158";a:4:{s:1:"C";s:3:"210";s:2:"WX";s:3:"788";s:1:"N";s:4:"a158";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}i:211;a:4:{s:1:"C";s:3:"211";s:2:"WX";s:3:"788";s:1:"N";s:4:"a159";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}s:4:"a159";a:4:{s:1:"C";s:3:"211";s:2:"WX";s:3:"788";s:1:"N";s:4:"a159";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-14";i:2;s:3:"754";i:3;s:3:"705";}}i:212;a:4:{s:1:"C";s:3:"212";s:2:"WX";s:3:"894";s:1:"N";s:4:"a160";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:2:"58";i:2;s:3:"860";i:3;s:3:"634";}}s:4:"a160";a:4:{s:1:"C";s:3:"212";s:2:"WX";s:3:"894";s:1:"N";s:4:"a160";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:2:"58";i:2;s:3:"860";i:3;s:3:"634";}}i:213;a:4:{s:1:"C";s:3:"213";s:2:"WX";s:3:"838";s:1:"N";s:4:"a161";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"152";i:2;s:3:"803";i:3;s:3:"540";}}s:4:"a161";a:4:{s:1:"C";s:3:"213";s:2:"WX";s:3:"838";s:1:"N";s:4:"a161";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"152";i:2;s:3:"803";i:3;s:3:"540";}}i:214;a:4:{s:1:"C";s:3:"214";s:2:"WX";s:4:"1016";s:1:"N";s:4:"a163";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"152";i:2;s:3:"981";i:3;s:3:"540";}}s:4:"a163";a:4:{s:1:"C";s:3:"214";s:2:"WX";s:4:"1016";s:1:"N";s:4:"a163";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"152";i:2;s:3:"981";i:3;s:3:"540";}}i:215;a:4:{s:1:"C";s:3:"215";s:2:"WX";s:3:"458";s:1:"N";s:4:"a164";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:4:"-127";i:2;s:3:"422";i:3;s:3:"820";}}s:4:"a164";a:4:{s:1:"C";s:3:"215";s:2:"WX";s:3:"458";s:1:"N";s:4:"a164";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:4:"-127";i:2;s:3:"422";i:3;s:3:"820";}}i:216;a:4:{s:1:"C";s:3:"216";s:2:"WX";s:3:"748";s:1:"N";s:4:"a196";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:2:"94";i:2;s:3:"698";i:3;s:3:"597";}}s:4:"a196";a:4:{s:1:"C";s:3:"216";s:2:"WX";s:3:"748";s:1:"N";s:4:"a196";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:2:"94";i:2;s:3:"698";i:3;s:3:"597";}}i:217;a:4:{s:1:"C";s:3:"217";s:2:"WX";s:3:"924";s:1:"N";s:4:"a165";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"140";i:2;s:3:"890";i:3;s:3:"552";}}s:4:"a165";a:4:{s:1:"C";s:3:"217";s:2:"WX";s:3:"924";s:1:"N";s:4:"a165";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"140";i:2;s:3:"890";i:3;s:3:"552";}}i:218;a:4:{s:1:"C";s:3:"218";s:2:"WX";s:3:"748";s:1:"N";s:4:"a192";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:2:"94";i:2;s:3:"698";i:3;s:3:"597";}}s:4:"a192";a:4:{s:1:"C";s:3:"218";s:2:"WX";s:3:"748";s:1:"N";s:4:"a192";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:2:"94";i:2;s:3:"698";i:3;s:3:"597";}}i:219;a:4:{s:1:"C";s:3:"219";s:2:"WX";s:3:"918";s:1:"N";s:4:"a166";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"166";i:2;s:3:"884";i:3;s:3:"526";}}s:4:"a166";a:4:{s:1:"C";s:3:"219";s:2:"WX";s:3:"918";s:1:"N";s:4:"a166";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"166";i:2;s:3:"884";i:3;s:3:"526";}}i:220;a:4:{s:1:"C";s:3:"220";s:2:"WX";s:3:"927";s:1:"N";s:4:"a167";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:2:"32";i:2;s:3:"892";i:3;s:3:"660";}}s:4:"a167";a:4:{s:1:"C";s:3:"220";s:2:"WX";s:3:"927";s:1:"N";s:4:"a167";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:2:"32";i:2;s:3:"892";i:3;s:3:"660";}}i:221;a:4:{s:1:"C";s:3:"221";s:2:"WX";s:3:"928";s:1:"N";s:4:"a168";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"129";i:2;s:3:"891";i:3;s:3:"562";}}s:4:"a168";a:4:{s:1:"C";s:3:"221";s:2:"WX";s:3:"928";s:1:"N";s:4:"a168";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"129";i:2;s:3:"891";i:3;s:3:"562";}}i:222;a:4:{s:1:"C";s:3:"222";s:2:"WX";s:3:"928";s:1:"N";s:4:"a169";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"128";i:2;s:3:"893";i:3;s:3:"563";}}s:4:"a169";a:4:{s:1:"C";s:3:"222";s:2:"WX";s:3:"928";s:1:"N";s:4:"a169";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"128";i:2;s:3:"893";i:3;s:3:"563";}}i:223;a:4:{s:1:"C";s:3:"223";s:2:"WX";s:3:"834";s:1:"N";s:4:"a170";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"155";i:2;s:3:"799";i:3;s:3:"537";}}s:4:"a170";a:4:{s:1:"C";s:3:"223";s:2:"WX";s:3:"834";s:1:"N";s:4:"a170";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"155";i:2;s:3:"799";i:3;s:3:"537";}}i:224;a:4:{s:1:"C";s:3:"224";s:2:"WX";s:3:"873";s:1:"N";s:4:"a171";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:2:"93";i:2;s:3:"838";i:3;s:3:"599";}}s:4:"a171";a:4:{s:1:"C";s:3:"224";s:2:"WX";s:3:"873";s:1:"N";s:4:"a171";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:2:"93";i:2;s:3:"838";i:3;s:3:"599";}}i:225;a:4:{s:1:"C";s:3:"225";s:2:"WX";s:3:"828";s:1:"N";s:4:"a172";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"104";i:2;s:3:"791";i:3;s:3:"588";}}s:4:"a172";a:4:{s:1:"C";s:3:"225";s:2:"WX";s:3:"828";s:1:"N";s:4:"a172";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"104";i:2;s:3:"791";i:3;s:3:"588";}}i:226;a:4:{s:1:"C";s:3:"226";s:2:"WX";s:3:"924";s:1:"N";s:4:"a173";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:2:"98";i:2;s:3:"889";i:3;s:3:"594";}}s:4:"a173";a:4:{s:1:"C";s:3:"226";s:2:"WX";s:3:"924";s:1:"N";s:4:"a173";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:2:"98";i:2;s:3:"889";i:3;s:3:"594";}}i:227;a:4:{s:1:"C";s:3:"227";s:2:"WX";s:3:"924";s:1:"N";s:4:"a162";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:2:"98";i:2;s:3:"889";i:3;s:3:"594";}}s:4:"a162";a:4:{s:1:"C";s:3:"227";s:2:"WX";s:3:"924";s:1:"N";s:4:"a162";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:2:"98";i:2;s:3:"889";i:3;s:3:"594";}}i:228;a:4:{s:1:"C";s:3:"228";s:2:"WX";s:3:"917";s:1:"N";s:4:"a174";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"882";i:3;s:3:"692";}}s:4:"a174";a:4:{s:1:"C";s:3:"228";s:2:"WX";s:3:"917";s:1:"N";s:4:"a174";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"882";i:3;s:3:"692";}}i:229;a:4:{s:1:"C";s:3:"229";s:2:"WX";s:3:"930";s:1:"N";s:4:"a175";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:2:"84";i:2;s:3:"896";i:3;s:3:"608";}}s:4:"a175";a:4:{s:1:"C";s:3:"229";s:2:"WX";s:3:"930";s:1:"N";s:4:"a175";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:2:"84";i:2;s:3:"896";i:3;s:3:"608";}}i:230;a:4:{s:1:"C";s:3:"230";s:2:"WX";s:3:"931";s:1:"N";s:4:"a176";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:2:"84";i:2;s:3:"896";i:3;s:3:"608";}}s:4:"a176";a:4:{s:1:"C";s:3:"230";s:2:"WX";s:3:"931";s:1:"N";s:4:"a176";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:2:"84";i:2;s:3:"896";i:3;s:3:"608";}}i:231;a:4:{s:1:"C";s:3:"231";s:2:"WX";s:3:"463";s:1:"N";s:4:"a177";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-99";i:2;s:3:"429";i:3;s:3:"791";}}s:4:"a177";a:4:{s:1:"C";s:3:"231";s:2:"WX";s:3:"463";s:1:"N";s:4:"a177";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"-99";i:2;s:3:"429";i:3;s:3:"791";}}i:232;a:4:{s:1:"C";s:3:"232";s:2:"WX";s:3:"883";s:1:"N";s:4:"a178";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:2:"71";i:2;s:3:"848";i:3;s:3:"623";}}s:4:"a178";a:4:{s:1:"C";s:3:"232";s:2:"WX";s:3:"883";s:1:"N";s:4:"a178";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:2:"71";i:2;s:3:"848";i:3;s:3:"623";}}i:233;a:4:{s:1:"C";s:3:"233";s:2:"WX";s:3:"836";s:1:"N";s:4:"a179";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:2:"44";i:2;s:3:"802";i:3;s:3:"648";}}s:4:"a179";a:4:{s:1:"C";s:3:"233";s:2:"WX";s:3:"836";s:1:"N";s:4:"a179";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:2:"44";i:2;s:3:"802";i:3;s:3:"648";}}i:234;a:4:{s:1:"C";s:3:"234";s:2:"WX";s:3:"836";s:1:"N";s:4:"a193";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:2:"44";i:2;s:3:"802";i:3;s:3:"648";}}s:4:"a193";a:4:{s:1:"C";s:3:"234";s:2:"WX";s:3:"836";s:1:"N";s:4:"a193";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:2:"44";i:2;s:3:"802";i:3;s:3:"648";}}i:235;a:4:{s:1:"C";s:3:"235";s:2:"WX";s:3:"867";s:1:"N";s:4:"a180";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"101";i:2;s:3:"832";i:3;s:3:"591";}}s:4:"a180";a:4:{s:1:"C";s:3:"235";s:2:"WX";s:3:"867";s:1:"N";s:4:"a180";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"101";i:2;s:3:"832";i:3;s:3:"591";}}i:236;a:4:{s:1:"C";s:3:"236";s:2:"WX";s:3:"867";s:1:"N";s:4:"a199";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"101";i:2;s:3:"832";i:3;s:3:"591";}}s:4:"a199";a:4:{s:1:"C";s:3:"236";s:2:"WX";s:3:"867";s:1:"N";s:4:"a199";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"101";i:2;s:3:"832";i:3;s:3:"591";}}i:237;a:4:{s:1:"C";s:3:"237";s:2:"WX";s:3:"696";s:1:"N";s:4:"a181";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:2:"44";i:2;s:3:"661";i:3;s:3:"648";}}s:4:"a181";a:4:{s:1:"C";s:3:"237";s:2:"WX";s:3:"696";s:1:"N";s:4:"a181";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:2:"44";i:2;s:3:"661";i:3;s:3:"648";}}i:238;a:4:{s:1:"C";s:3:"238";s:2:"WX";s:3:"696";s:1:"N";s:4:"a200";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:2:"44";i:2;s:3:"661";i:3;s:3:"648";}}s:4:"a200";a:4:{s:1:"C";s:3:"238";s:2:"WX";s:3:"696";s:1:"N";s:4:"a200";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:2:"44";i:2;s:3:"661";i:3;s:3:"648";}}i:239;a:4:{s:1:"C";s:3:"239";s:2:"WX";s:3:"874";s:1:"N";s:4:"a182";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:2:"77";i:2;s:3:"840";i:3;s:3:"619";}}s:4:"a182";a:4:{s:1:"C";s:3:"239";s:2:"WX";s:3:"874";s:1:"N";s:4:"a182";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:2:"77";i:2;s:3:"840";i:3;s:3:"619";}}i:241;a:4:{s:1:"C";s:3:"241";s:2:"WX";s:3:"874";s:1:"N";s:4:"a201";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:2:"73";i:2;s:3:"840";i:3;s:3:"615";}}s:4:"a201";a:4:{s:1:"C";s:3:"241";s:2:"WX";s:3:"874";s:1:"N";s:4:"a201";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:2:"73";i:2;s:3:"840";i:3;s:3:"615";}}i:242;a:4:{s:1:"C";s:3:"242";s:2:"WX";s:3:"760";s:1:"N";s:4:"a183";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"725";i:3;s:3:"692";}}s:4:"a183";a:4:{s:1:"C";s:3:"242";s:2:"WX";s:3:"760";s:1:"N";s:4:"a183";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:1:"0";i:2;s:3:"725";i:3;s:3:"692";}}i:243;a:4:{s:1:"C";s:3:"243";s:2:"WX";s:3:"946";s:1:"N";s:4:"a184";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"160";i:2;s:3:"911";i:3;s:3:"533";}}s:4:"a184";a:4:{s:1:"C";s:3:"243";s:2:"WX";s:3:"946";s:1:"N";s:4:"a184";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"160";i:2;s:3:"911";i:3;s:3:"533";}}i:244;a:4:{s:1:"C";s:3:"244";s:2:"WX";s:3:"771";s:1:"N";s:4:"a197";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:2:"37";i:2;s:3:"736";i:3;s:3:"655";}}s:4:"a197";a:4:{s:1:"C";s:3:"244";s:2:"WX";s:3:"771";s:1:"N";s:4:"a197";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:2:"37";i:2;s:3:"736";i:3;s:3:"655";}}i:245;a:4:{s:1:"C";s:3:"245";s:2:"WX";s:3:"865";s:1:"N";s:4:"a185";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"207";i:2;s:3:"830";i:3;s:3:"481";}}s:4:"a185";a:4:{s:1:"C";s:3:"245";s:2:"WX";s:3:"865";s:1:"N";s:4:"a185";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"207";i:2;s:3:"830";i:3;s:3:"481";}}i:246;a:4:{s:1:"C";s:3:"246";s:2:"WX";s:3:"771";s:1:"N";s:4:"a194";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:2:"37";i:2;s:3:"736";i:3;s:3:"655";}}s:4:"a194";a:4:{s:1:"C";s:3:"246";s:2:"WX";s:3:"771";s:1:"N";s:4:"a194";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:2:"37";i:2;s:3:"736";i:3;s:3:"655";}}i:247;a:4:{s:1:"C";s:3:"247";s:2:"WX";s:3:"888";s:1:"N";s:4:"a198";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-19";i:2;s:3:"853";i:3;s:3:"712";}}s:4:"a198";a:4:{s:1:"C";s:3:"247";s:2:"WX";s:3:"888";s:1:"N";s:4:"a198";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-19";i:2;s:3:"853";i:3;s:3:"712";}}i:248;a:4:{s:1:"C";s:3:"248";s:2:"WX";s:3:"967";s:1:"N";s:4:"a186";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"124";i:2;s:3:"932";i:3;s:3:"568";}}s:4:"a186";a:4:{s:1:"C";s:3:"248";s:2:"WX";s:3:"967";s:1:"N";s:4:"a186";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"124";i:2;s:3:"932";i:3;s:3:"568";}}i:249;a:4:{s:1:"C";s:3:"249";s:2:"WX";s:3:"888";s:1:"N";s:4:"a195";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-19";i:2;s:3:"853";i:3;s:3:"712";}}s:4:"a195";a:4:{s:1:"C";s:3:"249";s:2:"WX";s:3:"888";s:1:"N";s:4:"a195";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:3:"-19";i:2;s:3:"853";i:3;s:3:"712";}}i:250;a:4:{s:1:"C";s:3:"250";s:2:"WX";s:3:"831";s:1:"N";s:4:"a187";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"113";i:2;s:3:"796";i:3;s:3:"579";}}s:4:"a187";a:4:{s:1:"C";s:3:"250";s:2:"WX";s:3:"831";s:1:"N";s:4:"a187";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"113";i:2;s:3:"796";i:3;s:3:"579";}}i:251;a:4:{s:1:"C";s:3:"251";s:2:"WX";s:3:"873";s:1:"N";s:4:"a188";s:1:"B";a:4:{i:0;s:2:"36";i:1;s:3:"118";i:2;s:3:"838";i:3;s:3:"578";}}s:4:"a188";a:4:{s:1:"C";s:3:"251";s:2:"WX";s:3:"873";s:1:"N";s:4:"a188";s:1:"B";a:4:{i:0;s:2:"36";i:1;s:3:"118";i:2;s:3:"838";i:3;s:3:"578";}}i:252;a:4:{s:1:"C";s:3:"252";s:2:"WX";s:3:"927";s:1:"N";s:4:"a189";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"150";i:2;s:3:"891";i:3;s:3:"542";}}s:4:"a189";a:4:{s:1:"C";s:3:"252";s:2:"WX";s:3:"927";s:1:"N";s:4:"a189";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:3:"150";i:2;s:3:"891";i:3;s:3:"542";}}i:253;a:4:{s:1:"C";s:3:"253";s:2:"WX";s:3:"970";s:1:"N";s:4:"a190";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:2:"76";i:2;s:3:"931";i:3;s:3:"616";}}s:4:"a190";a:4:{s:1:"C";s:3:"253";s:2:"WX";s:3:"970";s:1:"N";s:4:"a190";s:1:"B";a:4:{i:0;s:2:"35";i:1;s:2:"76";i:2;s:3:"931";i:3;s:3:"616";}}i:254;a:4:{s:1:"C";s:3:"254";s:2:"WX";s:3:"918";s:1:"N";s:4:"a191";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:2:"99";i:2;s:3:"884";i:3;s:3:"593";}}s:4:"a191";a:4:{s:1:"C";s:3:"254";s:2:"WX";s:3:"918";s:1:"N";s:4:"a191";s:1:"B";a:4:{i:0;s:2:"34";i:1;s:2:"99";i:2;s:3:"884";i:3;s:3:"593";}}}s:9:"_version_";i:1;}
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/XMLDocBookConverter.inc b/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/XMLDocBookConverter.inc new file mode 100755 index 00000000..c0d648d2 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/XMLDocBookConverter.inc @@ -0,0 +1,1792 @@ +<?php +// +// +------------------------------------------------------------------------+ +// | phpDocumentor | +// +------------------------------------------------------------------------+ +// | Copyright (c) 2000-2003 Joshua Eichorn, Gregory Beaver | +// | Email jeichorn@phpdoc.org, cellog@phpdoc.org | +// | Web http://www.phpdoc.org | +// | Mirror http://phpdocu.sourceforge.net/ | +// | PEAR http://pear.php.net/package/PhpDocumentor | +// +------------------------------------------------------------------------+ +// | This source file is subject to version 3.00 of the PHP License, | +// | that is available at http://www.php.net/license/3_0.txt. | +// | If you did not receive a copy of the PHP license and are unable to | +// | obtain it through the world-wide-web, please send a note to | +// | license@php.net so we can mail you a copy immediately. | +// +------------------------------------------------------------------------+ +// +/** + * XML output converter for DocBook. + * This Converter takes output from the {@link Parser} and converts it to DocBook output + * + * @package Converters + * @subpackage XMLDocBook + * @see parserDocBlock, parserInclude, parserPage, parserClass, parserDefine, parserFunction, parserMethod, parserVar + * @author Greg Beaver <cellog@php.net> + * @since 1.0 + * @version $Id: XMLDocBookConverter.inc 234145 2007-04-19 20:20:57Z ashnazg $ + */ +/** + * XML DocBook converter. + * This Converter takes output from the {@link Parser} and converts it to DocBook output + * + * @package Converters + * @subpackage XMLDocBook + * @see parserDocBlock, parserInclude, parserPage, parserClass, parserDefine, parserFunction, parserMethod, parserVar + * @author Greg Beaver <cellog@php.net> + * @since 1.0 + * @version $Id: XMLDocBookConverter.inc 234145 2007-04-19 20:20:57Z ashnazg $ + * @todo indexes for other DocBook converters not based on peardoc + * @todo templates + */ +class XMLDocBookConverter extends Converter +{ + /** + * XMLDocBookConverter wants elements sorted by type as well as alphabetically + * @see Converter::$sort_page_contents_by_type + * @var boolean + */ + var $sort_page_contents_by_type = true; + /** @var string */ + var $outputformat = 'XML'; + /** @var string */ + var $name = 'DocBook'; + /** + * indexes of elements by package that need to be generated + * @var array + */ + var $leftindex = array('classes' => true, 'pages' => true, 'functions' => false, 'defines' => false, 'globals' => false); + /** + * whether a @see is going to be in the {@link $base_dir}, or in a package/subpackage subdirectory of $base_dir + * @var boolean + */ + var $local = true; + + /** + * name of current page being converted + * @var string + */ + var $page; + + /** + * path of current page being converted + * @var string + */ + var $path; + + /** + * name of current class being converted + * @var string + */ + var $class; + + /** + * template for the procedural page currently being processed + * @var Template + */ + var $page_data; + + /** + * output directory for the current procedural page being processed + * @var string + */ + var $page_dir; + + /** + * target directory passed on the command-line. + * {@link $targetDir} is malleable, always adding package/ and package/subpackage/ subdirectories onto it. + * @var string + */ + var $base_dir; + + /** + * output directory for the current class being processed + * @var string + */ + var $class_dir; + + /** + * template for the class currently being processed + * @var Template + */ + var $class_data; + + /** + * array of converted package page names. + * Used to link to the package page in the left index + * @var array Format: array(package => 1) + */ + var $package_pages = array(); + + /** + * controls formatting of parser informative output + * + * Converter prints: + * "Converting /path/to/file.php... Procedural Page Elements... Classes..." + * Since HTMLdefaultConverter outputs files while converting, it needs to send a \n to start a new line. However, if there + * is more than one class, output is messy, with multiple \n's just between class file output. This variable prevents that + * and is purely cosmetic + * @var boolean + */ + var $juststarted = false; + + /** + * contains all of the template procedural page element loop data needed for the current template + * @var array + */ + var $current; + + /** + * contains all of the template class element loop data needed for the current template + * @var array + */ + var $currentclass; + /** + * template options. Currently only 1 recognized option usepear + * + * usepear tells the getLink() function to return a package link to PEAR and PEAR_ERROR if possible, and to link directly + * to the fully-delimited link package#class.method or package#file.method in PEAR style, if possible, even if the + * package is not parsed. This will allow parsing of separate PEAR packages without parsing the entire thing at once! + * @var array + */ + var $template_options = array('usepear' => false); + + var $function_data = array(); + var $method_data = array(); + var $sourceloc = ''; + /** + * peardoc2 Category + * @var string + */ + var $category; + /** + * sets {@link $base_dir} to $targetDir + * @see Converter() + */ + function XMLDocBookConverter(&$allp, &$packp, &$classes, &$procpages, $po, $pp, $qm, $targetDir, $templateDir, $title) + { + die("XMLDocBookConverter is not supported in this development version. Use XML:DocBook/peardoc2:default"); + } + + /** + * do that stuff in $template_options + */ + function &getLink($expr, $package = false, $packages = false) + { + return Converter::getLink($expr, $package, $packages); + } + + function unmangle($s,$sourcecode) + { + return '<programlisting role="php"><![CDATA[ +'.$sourcecode.']]></programlisting>'; + } + + function type_adjust($typename) + { + if (isset($this->template_options['typechanging'][trim($typename)])) + return $this->template_options['typechanging'][trim($typename)]; + $a = $this->getLink($typename); + if (is_object($a)) + { + if (phpDocumentor_get_class($a) == 'classlink') + return '<classname>'.$typename.'</classname>'; + if (phpDocumentor_get_class($a) == 'functionlink' || phpDocumentor_get_class($a) == 'methodlink') + return '<function>'.$typename.'</function>'; + if (phpDocumentor_get_class($a) == 'definelink') + return '<constant>'.$typename.'</constant>'; + if (phpDocumentor_get_class($a) == 'varlink') + return '<varname>'.$typename.'</varname>'; + } + return $typename; + } + + function &SmartyInit(&$templ) + { + $this->makeLeft(); + $templ->assign("packageindex",$this->package_index); + return $templ; + } + + /** + * Writes out the template file of {@link $class_data} and unsets the template to save memory + * @see registerCurrentClass() + * @see parent::endClass() + */ + function endClass() + { + $a = '../'; + if (!empty($this->subpackage)) $a .= '../'; + if ($this->juststarted) + { + $this->juststarted = false; + phpDocumentor_out("\n"); + flush(); + } + foreach($this->method_data as $func) + { + $func[0]->assign("phpdocversion",PHPDOCUMENTOR_VER); + $func[0]->assign("phpdocwebsite",PHPDOCUMENTOR_WEBSITE); + $this->setTargetDir($this->base_dir . PATH_DELIMITER . strtolower($this->class_dir . PATH_DELIMITER . str_replace(array('_','.'),array('-','--'),$this->class))); + $this->writefile(strtolower($func[1] ). '.xml',$func[0]->fetch('method.tpl')); + } + if (isset($this->template_options['separatepage']) && $this->template_options['separatepage']) + { + $this->setTargetDir($this->base_dir . PATH_DELIMITER . strtolower($this->class_dir) . PATH_DELIMITER . str_replace(array('_','.'),array('-','--'),strtolower($this->class))); + $this->writefile(str_replace(array('_','.'),array('-','--'),strtolower($this->class)).'-summary.xml',$this->class_summary->fetch('class_summary.tpl')); + } + $this->setTargetDir($this->base_dir . PATH_DELIMITER . strtolower($this->class_dir)); + $this->writefile(str_replace(array('_','.'),array('-','--'),strtolower($this->class)) . '.xml',$this->class_data->fetch('class.tpl')); + unset($this->class_data); + } + + /** + * Writes out the template file of {@link $page_data} and unsets the template to save memory + * @see registerCurrent() + * @see parent::endPage() + */ + function endPage() + { + $this->package = $this->curpage->package; + $this->subpackage = $this->curpage->subpackage; + $a = '../'; + if (!empty($this->subpackage)) $a .= '../'; + foreach($this->function_data as $func) + { + $func[0]->assign("phpdocversion",PHPDOCUMENTOR_VER); + $func[0]->assign("phpdocwebsite",PHPDOCUMENTOR_WEBSITE); + $this->setTargetDir($this->base_dir . PATH_DELIMITER . strtolower($this->page_dir . PATH_DELIMITER . $this->page)); + $this->writefile(str_replace('_','-',strtolower($func[1])) . '.xml',$func[0]->fetch('function.tpl')); + } + if (isset($this->template_options['separatepage']) && $this->template_options['separatepage']) + { + $this->setTargetDir($this->base_dir . PATH_DELIMITER . strtolower($this->page_dir . PATH_DELIMITER . $this->page)); + $this->writefile(strtolower($this->page).'-summary.xml',$this->page_summary->fetch('page_summary.tpl')); + } + $this->setTargetDir($this->base_dir . PATH_DELIMITER . strtolower($this->page_dir)); + $this->writefile(strtolower($this->page) . '.xml',$this->page_data->fetch('page.tpl')); + unset($this->page_data); + } + + /** + * @param string + * @param string + * @return string <ulink url="'.$link.'">'.$text.'</ulink> + */ + function returnLink($link,$text) + { + return '<ulink url="'.$link.'">'.$text.'</ulink>'; + } + + function makeLeft() + { + static $done = false; + if ($done) return; + $done = true; + if (!isset($this->package_index)) + foreach($this->all_packages as $key => $val) + { + if (isset($this->pkg_elements[$key])) + { + if (!isset($start)) $start = $key; + $this->package_index[] = array('link' => "li_$key.html", 'title' => $key); + } + } + foreach($this->page_elements as $package => $o1) + { + foreach($o1 as $subpackage => $links) + { + for($i=0;$i<count($links);$i++) + { + $this->left[$package][$subpackage][] = + array("link" => $this->returnSee($links[$i], false, false, false), "title" => $links[$i]->name); + } + } + } + foreach($this->class_elements as $package => $o1) + { + foreach($o1 as $subpackage => $links) + { + for($i=0;$i<count($links);$i++) + { + $this->left['#class'][$package][$subpackage][] = + array("link" => $this->returnSee($links[$i], false, false, false), "title" => $links[$i]->name); + } + } + } + } + + /** + * HTMLdefaultConverter chooses to format both package indexes and the complete index here + * + * This function formats output for the elementindex.html and pkgelementindex.html template files. It then + * writes them to the target directory + * @see generateElementIndex(), generatePkgElementIndex() + */ + function formatPkgIndex() + { + // will implement in next release with other templates than peardoc2 + return; + list($package_indexes,$packages,$mletters) = $this->generatePkgElementIndexes(); + for($i=0;$i<count($package_indexes);$i++) + { + $template = &$this->newSmarty(); + $this->package = $package_indexes[$i]['package']; + $this->subpackage = ''; + $template->assign("compiledclassindex",$this->getClassLeft()); + $template->assign("compiledfileindex",$this->getPageLeft()); + $template->assign("index",$package_indexes[$i]['pindex']); + $template->assign("package",$package_indexes[$i]['package']); + $template->assign("letters",$mletters[$package_indexes[$i]['package']]); + $template->assign("title","Package ".$package_indexes[$i]['package']." Element Index"); + $template->assign("date",date("r",time())); +// $this->writefile('elementindex_'.$package_indexes[$i]['package'].'.html',$template->fetch('pkgelementindex.tpl')); + } + phpDocumentor_out("\n"); + flush(); + } + + /** + * HTMLdefaultConverter uses this function to format template index.html and packages.html + * + * This function generates the package list from {@link $all_packages}, eliminating any + * packages that don't have any entries in their package index (no files at all, due to @ignore + * or other factors). Then it uses the default package name as the first package index to display. + * It sets the right pane to be either a blank file with instructions on making package-level docs, + * or the package-level docs for the default package. + * @global string Used to set the starting package to display + */ + function formatIndex() + { + // will implement in next release with other templates than peardoc2 + return; + global $phpDocumentor_DefaultPackageName; + list($elindex,$mletters) = $this->generateElementIndex(); + $template = &$this->newSmarty(); + $template->assign("index",$elindex); + $template->assign("letters",$mletters); + $template->assign("title","Element Index"); + $template->assign("date",date("r",time())); + phpDocumentor_out("\n"); + flush(); + $this->setTargetDir($this->base_dir); +// $this->writefile('elementindex.html',$template->fetch('elementindex.tpl')); + uksort($this->package_index,"strnatcasecmp"); + $index = &$this->newSmarty(); + foreach($this->all_packages as $key => $val) + { + if (isset($this->pkg_elements[$key])) + { + if (!isset($start)) $start = $key; + if (!isset($this->package_pages[$key])) $this->writeNewPPage($key); + } + } + // Created index.html + if (isset($this->package_index[$phpDocumentor_DefaultPackageName])) $start = $phpDocumentor_DefaultPackageName; + $this->package = $start; + $this->subpackage = ''; + $index->assign("compiledclassindex",$this->getClassLeft()); + $index->assign("compiledfileindex",$this->getPageLeft()); + $index->assign("date",date("r",time())); + $index->assign("title",$this->title); + $index->assign("start","li_$start.html"); + if (isset($this->package_pages[$start])) + { + $index->assign("contents",$this->package_pages[$start]); + } + phpDocumentor_out("\n"); + flush(); + $this->setTargetDir($this->base_dir); +// $this->writefile("index.html",$index->fetch('index.tpl')); + unset($index); + + } + + function writeNewPPage($key) + { + // will implement in next release with other templates than peardoc2 + return; + $template = &$this->newSmarty(); + $this->package = $key; + $this->subpackage = ''; + $template->assign("compiledclassindex",$this->getClassLeft()); + $template->assign("compiledfileindex",$this->getPageLeft()); + $template->assign("date",date("r",time())); + $template->assign("title",$this->title); + $template->assign("package",$key); + phpDocumentor_out("\n"); + flush(); + $this->setTargetDir($this->base_dir); +// $this->writefile("li_$key.html",$template->fetch('index.tpl')); + unset($template); + } + + /** + * Generate indexes for li_package.html and classtree output files + * + * This function generates the li_package.html files from the template file left.html. It does this by + * iterating through each of the $page_elements, $class_elements and $function_elements arrays to retrieve + * the pre-sorted {@link abstractLink} descendants needed for index generation. Conversion of these links to + * text is done by {@link returnSee()}. The {@link $local} parameter is set to false to ensure that paths are correct. + * + * Then it uses {@link generateFormattedClassTrees()} to create class trees from the template file classtrees.html. Output + * filename is classtrees_packagename.html. This function also unsets {@link $elements} and {@link $pkg_elements} to free + * up the considerable memory these two class vars use + * @see $page_elements, $class_elements, $function_elements + */ + function formatLeftIndex() + { + // will implement in next release with other templates than peardoc2 + return; + phpDocumentor_out("\n"); + flush(); + $this->setTargetDir($this->base_dir); + if (!isset($this->left)) + { + debug("Nothing parsed, check the command-line"); + die(); + } + foreach($this->all_packages as $package => $rest) + { + if (!isset($this->pkg_elements[$package])) continue; + // Create class tree page + $template = &$this->newSmarty(); + $template->assign("classtrees",$this->generateFormattedClassTrees($package)); + $template->assign("package",$package); + $template->assign("date",date("r",time())); + $template->assign("title","Class Trees for Package $package"); +// $this->writefile("classtrees_$package.html",$template->fetch('classtrees.tpl')); + phpDocumentor_out("\n"); + flush(); + } + // free up considerable memory + unset($this->elements); + unset($this->pkg_elements); + } + + /** + * This function takes an {@link abstractLink} descendant and returns an html link + * + * @param abstractLink a descendant of abstractlink should be passed, and never text + * @param string text to display in the link + * @param boolean this parameter is not used, and is deprecated + * @param boolean determines whether the returned text is enclosed in an <a> tag + */ + function returnSee(&$element, $eltext = false, $local = true, $with_a = true) + { + if (!$element) return false; + if (!$eltext) + { + $eltext = ''; + switch($element->type) + { + case 'tutorial' : + $eltext = $element->title; + break; + case 'class' : + $eltext = '<classname>'.$element->name.'</classname>'; + break; + case 'method' : + $eltext .= '<function>'; + case 'var' : + if ($element->type == 'var') $eltext .= '<varname>'; + $eltext .= $element->class.'::'; + case 'page' : + case 'define' : + if ($element->type == 'define') + $eltext .= '<constant>'; + case 'function' : + if ($element->type == 'function') + $eltext .= '<function>'; + case 'global' : + default : + $eltext .= $element->name; + if ($element->type == 'function' || $element->type == 'method') $eltext .= '()</function>'; + if ($element->type == 'var') $eltext .= '</varname>'; + if ($element->type == 'define') $eltext .= '</constant>'; + break; + } + } + $a = ''; + if (!empty($element->subpackage)) + { + $a = $element->subpackage.'.'; + } + switch ($element->type) + { + case 'page' : + if ($with_a) + return '<link linkend="package.'.strtolower($element->package.'.'.$a).$element->fileAlias.'">'.$eltext.'</link>'; + else + return 'package.'.strtolower($element->package.'.'.$a).$element->fileAlias; + break; + case 'define' : + if ($with_a) + return '<link linkend="package.'.strtolower($element->package.'.'.$a).$element->fileAlias.'.'.urlencode($element->name).'">'.$eltext.'</link>'; + else + return 'package.'.strtolower($element->package.'.'.$a).$element->fileAlias.'.'.urlencode($element->name); + break; + case 'global' : + if ($with_a) + return '<link linkend="package.'.strtolower($element->package.'.'.$a).$element->fileAlias.'.'.urlencode($element->name).'">'.$eltext.'</link>'; + else + return 'package.'.strtolower($element->package.'.'.$a).$element->fileAlias.'.'.urlencode($element->name); + break; + case 'class' : + if ($with_a) + return '<link linkend="package.'.strtolower($element->package.'.'.$a.str_replace(array('_','.'),array('-','--'),$element->name)).'">'.$eltext.'</link>'; + else + return 'package.'.strtolower($element->package.'.'.$a.str_replace(array('_','.'),array('-','--'),$element->name)); + break; + case 'function' : + if ($with_a) + return '<link linkend="package.'.strtolower($element->package.'.'.$a.$element->fileAlias.'.'.str_replace('_','-',$element->name)).'">'.$eltext.'</link>'; + else + return 'package.'.strtolower($element->package.'.'.$a.$element->fileAlias.'.'.str_replace('_','-',$element->name)); + break; + case 'method' : + if ($with_a) + return '<link linkend="package.'.strtolower($element->package.'.'.$a.str_replace(array('_','.'),array('-','--'),$element->class).'.'.str_replace('_','-',$element->name)).'">'.$eltext.'</link>'; + else + return 'package.'.strtolower($element->package.'.'.$a.str_replace(array('_','.'),array('-','--'),$element->class).'.'.str_replace('_','-',$element->name)); + break; + case 'var' : + if ($with_a) + return '<link linkend="package.'.strtolower($element->package.'.'.$a.str_replace(array('_','.'),array('-','--'),$element->class).'.'.$element->name).'">'.$eltext.'</link>'; + else + return 'package.'.strtolower($element->package.'.'.$a.str_replace(array('_','.'),array('-','--'),$element->class).'.'.$element->name); + break; + case 'tutorial' : + if ($with_a) + return '<link linked="package.'.strtolower($element->package.'.'.$a.str_replace(array('_','.'),array('-','--'),$element->name).'-tutorial">'.$eltext).'</link>'; + else + return 'package.'.strtolower($element->package.'.'.$a.str_replace(array('_','.'),array('-','--'),$element->name)).'-tutorial'; + } + } + + /** + * Get the id value needed to allow linking + * @param mixed descendant of parserElement or parserData/parserPage + * @see parserElement, parserData, parserPage + * @return string the id value for this element type + */ + function getId(&$el) + { + if (phpDocumentor_get_class($el) == 'parserdata') + { + $element = $this->addLink($el->parent); + $elp = $el->parent; + } else + { + $elp = $el; + $element = $this->addLink($el); + } + $a = ''; + if (!empty($element->subpackage)) + { + $a = $element->subpackage.'.'; + } + switch ($element->type) + { + case 'page' : + return 'package.'.strtolower($element->package.'.'.$a.$element->fileAlias); + break; + case 'define' : + return 'package.'.$element->package.'.'.strtolower($a.$element->fileAlias.'.'.str_replace(array('$','_','"',"'"),array('var--','-','-','-'),$element->name)); + break; + case 'global' : + return 'package.'.strtolower($element->package.'.'.$a.$element->fileAlias.'.'.str_replace(array('$','_','"',"'"),array('var--','-','-','-'),$element->name)); + break; + case 'class' : + return 'package.'.strtolower($element->package.'.'.$a.str_replace(array('_','.'),array('-','--'),$element->name)); + break; + case 'function' : + return 'package.'.strtolower($element->package.'.'.$a.$element->fileAlias.'.'.str_replace('_','-',$element->name)); + break; + case 'method' : + return 'package.'.strtolower($element->package.'.'.$a.str_replace(array('_','.'),array('-','--'),$element->class).'.'.str_replace('_','-',$element->name)); + break; + case 'var' : + return 'package.'.strtolower($element->package.'.'.$a.str_replace(array('_','.'),array('-','--'),$element->class).'-summary.vars.'.str_replace(array('$','_'),array('var--','-'),$element->name)); + break; + case 'tutorial' : + return 'package.'.strtolower($element->package.'.'.$a.str_replace(array('_','.'),array('-','--'),$element->name)).'-tutorial'; + break; + } + } + + /** + * Create errors.html template file output + * + * This method takes all parsing errors and warnings and spits them out ordered by file and line number. + * @global ErrorTracker We'll be using it's output facility + */ + function ConvertErrorLog() + { + global $phpDocumentor_errors; + $allfiles = array(); + $files = array(); + $warnings = $phpDocumentor_errors->returnWarnings(); + $errors = $phpDocumentor_errors->returnErrors(); + $template = &$this->newSmarty(); + foreach($warnings as $warning) + { + $file = '##none'; + $linenum = 'Warning'; + if ($warning->file) + { + $file = $warning->file; + $allfiles[$file] = 1; + $linenum .= ' on line '.$warning->linenum; + } + $files[$file]['warnings'][] = array('name' => $linenum, 'listing' => $warning->data); + } + foreach($errors as $error) + { + $file = '##none'; + $linenum = 'Error'; + if ($error->file) + { + $file = $error->file; + $allfiles[$file] = 1; + $linenum .= ' on line '.$error->linenum; + } + $files[$file]['errors'][] = array('name' => $linenum, 'listing' => $error->data); + } + $i=1; + $af = array(); + foreach($allfiles as $file => $num) + { + $af[$i++] = $file; + } + $allfiles = $af; + usort($allfiles,'strnatcasecmp'); + $allfiles[0] = "Post-parsing"; + foreach($allfiles as $i => $a) + { + $allfiles[$i] = array('file' => $a); + } + $out = array(); + foreach($files as $file => $data) + { + if ($file == '##none') $file = 'Post-parsing'; + $out[$file] = $data; + } + $template->assign("files",$allfiles); + $template->assign("all",$out); + $template->assign("title","phpDocumentor Parser Errors and Warnings"); + $this->setTargetDir($this->base_dir); + $this->writefile("errors.html",$template->fetch('errors.tpl')); + unset($template); + phpDocumentor_out("\n\nTo view errors and warnings, look at ".$this->base_dir. PATH_DELIMITER . "errors.html\n"); + flush(); + } + + function postProcess($text) + { + return htmlentities($text); + } + + function prepareDocBlock(&$element, $nopackage = true) + { + return parent::prepareDocBlock($element, array('staticvar' => 'staticvar','deprec' => 'deprecated','abstract' => 'abstract','TODO' => 'todo', 'uses' => 'see', 'usedby' => 'see', 'tutorial' => 'see'), $nopackage); + } + + function getTutorialId($package,$subpackage,$tutorial,$id) + { + $subpackage = (empty($subpackage) ? '' : '.'.$subpackage); + $id = (empty($id) ? '' : '.'.$id); + return 'package.'.strtolower($package.$subpackage.str_replace(array('_','.'),array('-','--'),$tutorial).$id); + } + + function getCData($value) + { + return '<!CDATA['.$value.']]>'; + } + + /** + * Converts package page and sets its package as used in {@link $package_pages} + * @param parserPackagePage + */ + function convertPackagePage(&$element) + { + return; + phpDocumentor_out("\n"); + flush(); + $template = &$this->newSmarty(); + $this->package = $element->package; + $this->subpackage = ''; + $template->assign("compiledclassindex",$this->getClassLeft()); + $template->assign("compiledfileindex",$this->getPageLeft()); + $template->assign("date",date("r",time())); + $template->assign("title",$this->title); + $template->assign("package",$element->package); + $x = $element->Convert($this); + $x = substr($x,strpos($x,'<body')); + $template->assign("contents",trim(substr($x,strpos($x,'>') + 1))); + phpDocumentor_out("\n"); + flush(); + $this->setTargetDir($this->base_dir); +// $this->writefile("li_".$element->package.".html",$template->fetch('index.tpl')); + unset($template); + $this->package_pages[$element->package] = trim(substr($x,strpos($x,'>') + 1)); + } + + function convertTutorial(&$element) + { + $template = &parent::convertTutorial($element); + phpDocumentor_out("\n"); + flush(); + $x = $element->Convert($this,false); + if ($element->ini) + { // add child tutorial list to the tutorial through a slight hack :) + $subtutorials = ''; + $b = ''; + if (!empty($element->subpackage)) $b = '.'.$element->subpackage; + foreach($element->ini['Linked Tutorials'] as $child) + { + $subtutorials .= ' &'.$element->package.$b.'.'.str_replace(array('_','.'),array('-','--'),$child).'-'.$element->tutorial_type."-tutorial;\n"; + } + $x = str_replace('</refsect1></refentry>','</refsect1> + <refsect1> + <title>Related Docs</title> + <para> +'.$subtutorials. +' </para> + </refsect1></refentry>',$x); + } + $template->assign('contents',$x); + $contents = $template->fetch('tutorial.tpl'); + $a = ''; + if ($element->subpackage) $a = PATH_DELIMITER . $element->subpackage; + phpDocumentor_out("\n"); + flush(); + $this->setTargetDir($this->base_dir . PATH_DELIMITER . strtolower($element->package . $a)); + $this->writeFile(str_replace(array('_','.'),array('-','--'),strtolower($element->name)).'-tutorial.xml',$contents); + } + + /** + * Converts class variables for template output. + * @see prepareDocBlock(), getFormattedOverrides() + * @param parserVar + */ + function convertVar(&$element) + { + $docblock = $this->prepareDocBlock($element); + $b = 'mixed'; + if ($element->docblock->var) + { + $b = $element->docblock->var->converted_returnType; + } +// var_dump($this->getFormattedOverrides($element)); + if (isset($this->template_options['separatepage']) && $this->template_options['separatepage']) + $this->class_summary->append('vars',array('sdesc' => $docblock['sdesc'], + 'desc' => $docblock['desc'], + 'tags' => $docblock['tags'], + 'var_name' => $this->type_adjust($element->getName()), + 'var_default' => htmlspecialchars($element->getValue()), + 'var_type' => $b, + 'var_overrides' => $this->getFormattedOverrides($element), + 'line_number' => $element->getLineNumber(), + 'id' => $this->getId($element))); + else + $this->class_data->append('vars',array('sdesc' => $docblock['sdesc'], + 'desc' => $docblock['desc'], + 'tags' => $docblock['tags'], + 'var_name' => $this->type_adjust($element->getName()), + 'var_default' => htmlspecialchars($element->getValue()), + 'var_type' => $b, + 'var_overrides' => $this->getFormattedOverrides($element), + 'line_number' => $element->getLineNumber(), + 'id' => $this->getId($element))); + } + + /** + * Converts class for template output + * @see prepareDocBlock(), generateChildClassList(), generateFormattedClassTree(), getFormattedConflicts() + * @see getFormattedInheritedMethods(), getFormattedInheritedVars() + * @param parserClass + */ + function convertClass(&$element) + { + parent::convertClass($element); + $docblock = $this->prepareDocBlock($element); + $this->class_dir = $element->docblock->package; + if (!empty($element->docblock->subpackage)) $this->class_dir .= PATH_DELIMITER . $element->docblock->subpackage; + $docblock = $this->prepareDocBlock($element,false); + + $this->class_data->assign("sdesc",$docblock['sdesc']); + $this->class_data->assign("desc",$docblock['desc']); + $this->class_data->assign("tags",$docblock['tags']); + + $this->class_data->assign("source_location",$element->getSourceLocation($this,$this->template_options['usepear'])); + $this->class_data->assign("id",$this->getId($element)); + $this->class_data->assign("method_ids",array()); + if ($t = $element->getTutorial()) + { + $this->class_data->append("method_ids",$this->getId($t)); + } + + if (isset($this->template_options['separatepage']) && $this->template_options['separatepage']) + { + $this->class_summary = &$this->newSmarty(true); + if ($t = $element->getTutorial()) + { + $this->class_summary->assign("tutorial",$this->returnSee($t)); + } + + $this->class_summary->assign("class_name",$this->type_adjust($element->getName())); + $this->class_summary->assign("sdesc",$docblock['sdesc']); + $this->class_summary->assign("desc",$docblock['desc']); + $this->class_summary->assign("tags",$docblock['tags']); + $this->class_summary->assign("vars",array()); + $this->class_summary->assign("methods",array()); + $this->class_summary->assign("package",$element->docblock->package); + + $this->class_summary->assign("children", $this->generateChildClassList($element)); + $this->class_summary->assign("class_tree", $this->generateFormattedClassTree($element)); + $this->class_summary->assign("conflicts", $this->getFormattedConflicts($element,"classes")); + + $this->class_summary->assign("source_location",$element->getSourceLocation($this,$this->template_options['usepear'])); + $this->class_summary->assign("id",$this->getId($element).'-summary'); + $this->class_data->append("method_ids",$this->getId($element).'.'.strtolower(str_replace('_','-',$element->getName())).'-summary'); + $inherited_methods = $this->getFormattedInheritedMethods($element); + if (!empty($inherited_methods)) + { + $this->class_summary->assign("imethods",$inherited_methods); + } + $inherited_vars = $this->getFormattedInheritedVars($element); + if (!empty($inherited_vars)) + { + $this->class_summary->assign("ivars",$inherited_vars); + } + } + $this->sourceloc = $element->getSourceLocation($this,$this->template_options['usepear']); + } + + /** + * Converts method for template output + * @see prepareDocBlock(), parserMethod::getFunctionCall(), getFormattedDescMethods(), getFormattedOverrides() + * @param parserMethod + */ + function convertMethod(&$element) + { + $fname = $element->getName(); + if ($element->isConstructor) + { + $fname = 'constructor '.$element->getName(); + } + $docblock = $this->prepareDocBlock($element); + $returntype = 'void'; + if ($element->docblock->return) + { + $a = $element->docblock->return->Convert($this); + $returntype = $element->docblock->return->converted_returnType; + if ($returntype != $element->docblock->return->returnType) + { + $returntype = "<replaceable>$returntype</replaceable>"; + } + } + $params = array(); + if (count($element->docblock->params)) + foreach($element->docblock->params as $param => $val) + { + $a = $val->Convert($this); + $params[$param] = array("var" => $param,"datatype" => $val->converted_returnType,"data" => $a); + } + + if (isset($this->template_options['separatepage']) && $this->template_options['separatepage']) + { + $this->class_data->append('method_ids',$this->getId($element)); + $this->class_summary->append('methods',array('id' => $this->getId($element), + 'sdesc' => $docblock['sdesc'], + 'desc' => $docblock['desc'], + 'tags' => $docblock['tags'], + 'is_constructor' => $element->isConstructor, + 'function_name' => $element->getName(), + 'function_return' => $returntype, + 'function_call' => $element->getIntricateFunctionCall($this,$params), + 'descmethod' => $this->getFormattedDescMethods($element), + 'method_overrides' => $this->getFormattedOverrides($element), + 'line_number' => $element->getLineNumber(), + 'params' => $params)); + } else + { + $this->class_data->append('method_ids',$this->getId($element)); + $this->class_data->append('methods',array('id' => $this->getId($element), + 'sdesc' => $docblock['sdesc'], + 'desc' => $docblock['desc'], + 'tags' => $docblock['tags'], + 'is_constructor' => $element->isConstructor, + 'function_name' => $element->getName(), + 'function_return' => $returntype, + 'function_call' => $element->getIntricateFunctionCall($this,$params), + 'descmethod' => $this->getFormattedDescMethods($element), + 'method_overrides' => $this->getFormattedOverrides($element), + 'line_number' => $element->getLineNumber(), + 'params' => $params)); + } + if (!isset($this->method_data)) $this->method_data = array(); + $this->method_data[$i = count($this->method_data) - 1][0] = $this->newSmarty(true); + $this->method_data[$i][1] = $element->getName(); + $this->method_data[$i][0]->assign('class',$this->class); + $this->method_data[$i][0]->assign('source_location',$this->returnSee($this->getLink(basename($this->curpage->getFile())),$this->sourceloc)); + $this->method_data[$i][0]->assign('sdesc',$docblock['sdesc']); + $this->method_data[$i][0]->assign('desc',$docblock['desc']); + $this->method_data[$i][0]->assign('tags',$docblock['tags']); + $this->method_data[$i][0]->assign('function_name',$fname); + $this->method_data[$i][0]->assign('function_return',$returntype); + $this->method_data[$i][0]->assign('function_call',$element->getIntricateFunctionCall($this,$params)); + $this->method_data[$i][0]->assign('descmethod',$this->getFormattedDescMethods($element)); + $this->method_data[$i][0]->assign('method_overrides',$this->getFormattedOverrides($element)); + $this->method_data[$i][0]->assign('params',$params); + $this->method_data[$i][0]->assign('id',$this->getId($element)); + } + + /** + * Converts function for template output + * @see prepareDocBlock(), parserFunction::getFunctionCall(), getFormattedConflicts() + * @param parserFunction + */ + function convertFunction(&$element) + { + parent::convertFunction($element); + $docblock = $this->prepareDocBlock($element); + $fname = $element->getName(); + $params = array(); + if (count($element->docblock->params)) + foreach($element->docblock->params as $param => $val) + { + $a = $val->Convert($this); + $params[$param] = array("var" => $param,"datatype" => $val->converted_returnType,"data" => $a); + } + $returntype = 'void'; + if ($element->docblock->return) + { + $a = $element->docblock->return->Convert($this); + $returntype = $element->docblock->return->converted_returnType; + } + + $this->page_data->append("function_ids",$this->getId($element)); + $this->page_summary->append("function_ids",$this->getId($element)); + $this->page_summary->append('functions',array('id' => $this->getId($element), + 'sdesc' => $docblock['sdesc'], + 'desc' => $docblock['desc'], + 'tags' => $docblock['tags'], + 'function_name' => $element->getName(), + 'line_number' => $element->getLineNumber(), + 'function_return' => $returntype, + 'function_call' => $element->getIntricateFunctionCall($this,$params), + 'function_conflicts' => $this->getFormattedConflicts($element,'functions'), + 'params' => $params)); + $this->function_data[$i = count($this->function_data) - 1][0] = $this->newSmarty(true); + $this->function_data[$i][1] = $element->getName(); + $this->function_data[$i][0]->assign('sdesc',$docblock['sdesc']); + $this->function_data[$i][0]->assign('desc',$docblock['desc']); + $this->function_data[$i][0]->assign('tags',$docblock['tags']); + $this->function_data[$i][0]->assign('function_name',$fname); + $this->function_data[$i][0]->assign('line_number',$element->getLineNumber()); + $this->function_data[$i][0]->assign('function_return',$returntype); + $this->function_data[$i][0]->assign('function_call',$element->getIntricateFunctionCall($this,$params)); + $this->function_data[$i][0]->assign('function_conflicts',$this->getFormattedConflicts($element,"functions")); + $this->function_data[$i][0]->assign('params',$params); + $this->function_data[$i][0]->assign('source_location',$this->returnSee($this->getLink(basename($this->curpage->getFile())),$this->sourceloc)); + $this->function_data[$i][0]->assign('id',$this->getId($element)); + } + + /** + * Converts include elements for template output + * @see prepareDocBlock() + * @param parserInclude + */ + function convertInclude(&$element) + { + parent::convertInclude($element, array('include_file' => '-'.strtr($element->getValue(),array('"' => '', "'" => '','.' => '-')))); + $this->page_summary->append('includes',array('sdesc' => $docblock['sdesc'], + 'desc' => $docblock['desc'], + 'tags' => $docblock['tags'], + 'utags' => $docblock['utags'], + 'include_name' => $element->getName(), + 'include_value' => $per, + 'line_number' => $element->getLineNumber(), + 'include_file' => '-'.strtr($element->getValue(),array('"' => '', "'" => '','.' => '-')))); + } + + /** + * Converts defines for template output + * @see prepareDocBlock(), getFormattedConflicts() + * @param parserDefine + */ + function convertDefine(&$element) + { + $docblock = $this->prepareDocBlock($element); + parent::convertDefine($element, array('link' => urlencode($element->getName()))); + $this->page_summary->append('defines',array('sdesc' => $docblock['sdesc'], + 'desc' => $docblock['desc'], + 'tags' => $docblock['tags'], + 'name' => $element->getName(), + 'value' => $element->getValue(), + 'conflicts' => $this->getFormattedConflicts($element,"defines"), + 'line_number' => $element->getLineNumber(), + 'id' => $this->getId($element))); + } + + /** + * Converts global variables for template output + * @param parserGlobal + * @see prepareDocBlock(), getFormattedConflicts() + */ + function convertGlobal(&$element) + { + parent::convertGlobal($element, array('id' => $this->getId($element))); + $docblock = $this->prepareDocBlock($element); + $value = $this->getGlobalValue($element->getValue()); + $this->page_summary->append('globals',array('sdesc' => $docblock['sdesc'], + 'desc' => $docblock['desc'], + 'tags' => $docblock['tags'], + 'name' => $element->getName(), + 'link' => urlencode($element->getName()), + 'value' => $value, + 'type' => $element->getDataType($this), + 'line_number' => $element->getLineNumber(), + 'conflicts' => $this->getFormattedConflicts($element,"global variables"), + 'id' => $this->getId($element))); + } + + /** + * converts procedural pages for template output + * @see prepareDocBlock(), getClassesOnPage() + * @param parserData + */ + function convertPage(&$element) + { + parent::convertPage($element); + $this->juststarted = true; + $this->page_dir = $element->parent->package; + if (!empty($element->parent->subpackage)) $this->page_dir .= PATH_DELIMITER . $element->parent->subpackage; + // registering stuff on the template + $this->page_data->assign("source_location",$element->parent->getSourceLocation($this,$this->template_options['usepear'])); + $this->page_data->assign("function_ids",array()); + if ($t = $element->getTutorial()) + { + $this->page_data->append("function_ids",$this->getId($t)); + } + + $this->sourceloc = $element->parent->getSourceLocation($this,$this->template_options['usepear']); + $this->page_data->assign("id", $this->getId($element)); + if (isset($this->template_options['separatepage']) && $this->template_options['separatepage']) + { + $this->page_summary = new Smarty; + $this->page_summary->template_dir = $this->smarty_dir . PATH_DELIMITER . 'templates'; + $this->page_summary->compile_dir = $this->smarty_dir . PATH_DELIMITER . 'templates_c'; + $this->page_summary->config_dir = $this->smarty_dir . PATH_DELIMITER . 'configs'; + // registering stuff on the template + $this->page_summary->assign("source_location",$element->parent->getSourceLocation($this,$this->template_options['usepear'])); + $this->page_summary->assign("date",date("r",time())); + $this->page_summary->assign("functions",array()); + $this->page_summary->assign("includes",array()); + $this->page_summary->assign("defines",array()); + $this->page_summary->assign("globals",array()); + $this->page_summary->assign("classes",$this->getClassesOnPage($element)); + $this->page_summary->assign("name",$element->parent->getFile()); + $this->page_summary->assign("function_ids",array()); + if ($element->docblock) + { + $docblock = $this->prepareDocBlock($element, false); + $this->page_summary->assign("sdesc",$docblock['sdesc']); + $this->page_summary->assign("desc",$docblock['desc']); + $this->page_summary->assign("tags",$docblock['tags']); + $this->page_summary->assign("utags",$docblock['utags']); + } + $this->sourceloc = $element->parent->getSourceLocation($this,$this->template_options['usepear']); + $this->page_summary->assign("name", $element->parent->getFile()); + $this->page_summary->assign("id", $this->getId($element).'.'.$this->getPageName($element->parent).'-summary'); + $this->page_data->append("function_ids",$this->getId($element).'.'.strtolower($this->getPageName($element->parent)).'-summary'); + } + } + + function getPageName(&$element) + { + return str_replace(array('/','_','.'),array('-','-','---'),$element->getSourceLocation($this,$this->template_options['usepear'])); + } + + /** + * returns an array containing the class inheritance tree from the root object to the class + * + * @param parserClass class variable + * @return array Format: array(root,child,child,child,...,$class) + * @uses parserClass::getParentClassTree() + */ + + function generateFormattedClassTree($class) + { + $tree = $class->getParentClassTree($this); + $out = ''; + if (count($tree) - 1) + { + $result = array($class->getName()); + $parent = $tree[$class->getName()]; + while ($parent) + { + $subpackage = $parent->docblock->subpackage; + $package = $parent->docblock->package; + $x = $parent; + if (is_object($parent)) + $x = $parent->getLink($this); + if (!$x) $x = $parent->getName(); + $result[] = + $x; + if (is_object($parent)) + $parent = $tree[$parent->getName()]; + elseif (isset($tree[$parent])) + $parent = $tree[$parent]; + } + return array_reverse($result); + } else + { + return array($class->getName()); + } + } + + /** @access private */ + function sortVar($a, $b) + { + return strnatcasecmp($a->getName(),$b->getName()); + } + + /** @access private */ + function sortMethod($a, $b) + { + if ($a->isConstructor) return -1; + if ($b->isConstructor) return 1; + return strnatcasecmp($a->getName(),$b->getName()); + } + + /** + * returns a template-enabled array of class trees + * + * @param string $package package to generate a class tree for + * @see $roots, HTMLConverter::getRootTree() + */ + function generateFormattedClassTrees($package) + { + if (!isset($this->roots[$package])) return array(); + $roots = $trees = array(); + $roots = $this->roots[$package]; + for($i=0;$i<count($roots);$i++) + { + $trees[] = array('class' => $roots[$i],'class_tree' => "<ul>\n".$this->getRootTree($this->getSortedClassTreeFromClass($roots[$i],$package,''),$package)."</ul>\n"); + } + return $trees; + } + + /** + * return formatted class tree for the Class Trees page + * + * @param array $tree output from {@link getSortedClassTreeFromClass()} + * @see Classes::$definitechild, generateFormattedClassTrees() + * @return string + */ + function getRootTree($tree,$package) + { + if (!$tree) return ''; + $my_tree = ''; + $cur = '#root'; + $lastcur = array(false); + $kids = array(); + $dopar = false; + if ($tree[$cur]['parent']) + { + $dopar = true; + if (!is_object($tree[$cur]['parent'])) + { +// debug("parent ".$tree[$cur]['parent']." not found"); + $my_tree .= '<listitem>' . $tree[$cur]['parent'] .'<itemizedlist>'; + } + else + { +// debug("parent ".$this->returnSee($tree[$cur]['parent'], false, false)." in other package"); + $my_tree .= '<listitem>' . $this->returnSee($tree[$cur]['parent'], false, false); + if ($tree[$cur]['parent']->package != $package) $my_tree .= ' <emphasis>(Different package)</emphasis><itemizedlist>'; + } + } + do + { +// fancy_debug($cur,$lastcur,$kids); + if (count($tree[$cur]['children'])) + { +// debug("$cur has children"); + if (!isset($kids[$cur])) + { +// debug("set $cur kids"); + $kids[$cur] = 1; + $my_tree .= '<listitem>'.$this->returnSee($tree[$cur]['link'], false, false); + $my_tree .= '<itemizedlist>'."\n"; + } + array_push($lastcur,$cur); + list(,$cur) = each($tree[$cur]['children']); +// var_dump('listed',$cur); + if ($cur) + { + $cur = $cur['package'] . '#' . $cur['class']; +// debug("set cur to child $cur"); +// $my_tree .= '<li>'.$this->returnSee($tree[$cur]['link'], false, false); + continue; + } else + { +// debug("end of children for $cur"); + $cur = array_pop($lastcur); + $cur = array_pop($lastcur); + $my_tree .= '</itemizedlist></listitem>'."\n"; + if ($dopar && ($cur == '#root' || !$cur)) $my_tree .= '</itemizedlist></listitem>'; + } + } else + { +// debug("$cur has no children"); + $my_tree .= '<listitem>'.$this->returnSee($tree[$cur]['link'], false, false)."</listitem>"; + if ($dopar && $cur == '#root') $my_tree .= '</itemizedlist></listitem>'; + $cur = array_pop($lastcur); + } + } while ($cur); + return $my_tree; + } + /** + * Generate alphabetical index of all elements + * + * @see $elements, walk() + */ + function generateElementIndex() + { + $elementindex = array(); + $letters = array(); + $i = 0; + foreach($this->elements as $letter => $nutoh) + { + $letters[]['letter'] = $letter; + $elindex['letter'] = $letter; + foreach($this->elements[$letter] as $i => $yuh) + { + switch($this->elements[$letter][$i]->type) + { + case 'class': + $aa = ''; + $aa = $this->elements[$letter][$i]->docblock->getSDesc($this); + $oo['name'] = $this->elements[$letter][$i]->getName(); + $oo['listing'] = + 'in file '.$this->elements[$letter][$i]->file.', class '.$this->getClassLink($this->elements[$letter][$i]->getName(), + $this->elements[$letter][$i]->docblock->package, + $this->elements[$letter][$i]->getPath(), + $this->elements[$letter][$i]->getName() + , false + , true); + $oo['sdesc'] = "$aa"; + $elindex['index'][] = $oo; + break; + case 'define': + $aa = ''; + $aa = $this->elements[$letter][$i]->docblock->getSDesc($this); + $oo['name'] = $this->elements[$letter][$i]->getName(); + $oo['listing'] = + 'in file '.$this->elements[$letter][$i]->file.', constant '.$this->getDefineLink($this->elements[$letter][$i]->getName(), + $this->elements[$letter][$i]->docblock->package, + $this->elements[$letter][$i]->getPath(), + $this->elements[$letter][$i]->getName() + , false); + $oo['sdesc'] = "$aa"; + $elindex['index'][] = $oo; + break; + case 'global': + $aa = ''; + $aa = $this->elements[$letter][$i]->docblock->getSDesc($this); + $oo['name'] = $this->elements[$letter][$i]->getName(); + $oo['listing'] = + 'in file '.$this->elements[$letter][$i]->file.', global variable '.$this->getGlobalLink($this->elements[$letter][$i]->getName(), + $this->elements[$letter][$i]->docblock->package, + $this->elements[$letter][$i]->getPath(), + $this->elements[$letter][$i]->getName() + , false); + $oo['sdesc'] = "$aa"; + $elindex['index'][] = $oo; + break; + case 'function': + $aa = ''; + $aa = $this->elements[$letter][$i]->docblock->getSDesc($this); + $oo['name'] = $this->elements[$letter][$i]->getName(); + $oo['listing'] = + 'in file '.$this->elements[$letter][$i]->file.', function '.$this->getFunctionLink($this->elements[$letter][$i]->getName(), + $this->elements[$letter][$i]->docblock->package, + $this->elements[$letter][$i]->getPath(), + $this->elements[$letter][$i]->getName().'()' + , false); + $oo['sdesc'] = "$aa"; + $elindex['index'][] = $oo; + break; + case 'method': + $aa = ''; + $aa = $this->elements[$letter][$i]->docblock->getSDesc($this); + $oo['name'] = $this->elements[$letter][$i]->getName(); + $oo['listing'] = + 'in file '.$this->elements[$letter][$i]->file.', method '.$this->getMethodLink($this->elements[$letter][$i]->getName(), + $this->elements[$letter][$i]->class, + $this->elements[$letter][$i]->docblock->package, + $this->elements[$letter][$i]->getPath(), + $this->elements[$letter][$i]->class.'::'.$this->elements[$letter][$i]->getName().'()' + , false); + $oo['sdesc'] = "$aa"; + $elindex['index'][] = $oo; + break; + case 'var': + $aa = ''; + $aa = $this->elements[$letter][$i]->docblock->getSDesc($this); + $oo['name'] = $this->elements[$letter][$i]->getName(); + $oo['listing'] = + 'in file '.$this->elements[$letter][$i]->file.', variable '.$this->getVarLink($this->elements[$letter][$i]->getName(), + $this->elements[$letter][$i]->class, + $this->elements[$letter][$i]->docblock->package, + $this->elements[$letter][$i]->getPath(), + $this->elements[$letter][$i]->class.'::'.$this->elements[$letter][$i]->getName() + , false); + $oo['sdesc'] = "$aa"; + $elindex['index'][] = $oo; + break; + case 'page': + $oo['name'] = $this->elements[$letter][$i]->getFile(); + $oo['listing'] = + 'procedural page '.$this->getPageLink($this->elements[$letter][$i]->getFile(), + $this->elements[$letter][$i]->package, + $this->elements[$letter][$i]->getPath(), + $this->elements[$letter][$i]->getFile() + , false); + $elindex['index'][] = $oo; + break; + } + } + if (isset($elindex['index'])) + { + $elementindex[] = $elindex; + } else + { + unset($letters[count($letters) - 1]); + } + $elindex = array(); + } + return array($elementindex,$letters); + } + + function setTemplateDir($dir) + { + Converter::setTemplateDir($dir); + $this->smarty_dir = $this->templateDir; + } + + /** + * calls the converter setTargetDir, and then copies any template images and the stylesheet if they haven't been copied + * @see Converter::setTargetDir() + */ + function setTargetDir($dir) + { + Converter::setTargetDir($dir); + static $wrote = false; + if ($wrote) return; + $wrote = true; + $template_images = array(); + $stylesheets = array(); + $dir = $this->templateDir; + $this->templateDir = $this->templateDir.'templates/'; + $d = dir($this->templateDir); + $template_images = array(); + while($entry = $d->read()) + { + $sp = explode(".", $entry); + if ( preg_match("/\.(gif|jpg|png)$/i", $entry) ) + { + $template_images[] = $entry; + } + } + $d = dir($this->templateDir); + while($entry = $d->read()) + { + $sp = explode(".", $entry); + if ( preg_match("/\.css$/i", $entry) ) + { + $stylesheets[] = $entry; + } + } + phpDocumentor_out("Copying Any Stylesheets\n"); + flush(); + foreach($stylesheets as $image) + { + if (file_exists($this->templateDir.$image)) + { + phpDocumentor_out("Writing $image\n"); + flush(); + $this->copyFile($image); + } + } + phpDocumentor_out("Copying Any Template Images\n"); + flush(); + foreach($template_images as $image) + { + if (file_exists($this->templateDir.$image)) + { + phpDocumentor_out("Writing $image\n"); + flush(); + $this->copyFile($image); + } + } + $this->templateDir = $dir; + } + + /** + * Generate alphabetical index of all elements by package and subpackage + * + * @param string $package name of a package + * @see $pkg_elements, walk(), generatePkgElementIndexes() + */ + function generatePkgElementIndex($package) + { + $elementindex = array(); + $letters = array(); + $letterind = array(); + $used = array(); + $subp = ''; + foreach($this->pkg_elements[$package] as $subpackage => $els) + { + if (empty($els)) continue; + foreach($els as $letter => $yuh) + { + if (!isset($used[$letter])) + { + $letters[]['letter'] = $letter; + $letterind[$letter] = count($letters) - 1; + $used[$letter] = 1; + } + $elindex[$letter]['letter'] = $letter; + foreach($els[$letter] as $i => $yuh) + { + switch($els[$letter][$i]->type) + { + case 'class': + $aa = ''; + $aa = $els[$letter][$i]->docblock->getSDesc($this); + $oo['name'] = $els[$letter][$i]->getName(); + $oo['listing'] = + 'in file '.$els[$letter][$i]->file.', class '.$this->getClassLink($els[$letter][$i]->getName(), + $els[$letter][$i]->docblock->package, + $els[$letter][$i]->getPath(), + $els[$letter][$i]->getName() + , false + , true); + $oo['subpackage'] = $subpackage; + $oo['sdesc'] = $aa; + $elindex[$letter]['index'][] = $oo; + break; + case 'define': + $aa = $els[$letter][$i]->docblock->getSDesc($this); + $oo['name'] = $els[$letter][$i]->getName(); + $oo['listing'] = + 'in file '.$els[$letter][$i]->file.', constant '.$this->getDefineLink($els[$letter][$i]->getName(), + $els[$letter][$i]->docblock->package, + $els[$letter][$i]->getPath(), + $els[$letter][$i]->getName() + , false); + $oo['subpackage'] = $subpackage; + $oo['sdesc'] = $aa; + $elindex[$letter]['index'][] = $oo; + break; + case 'global': + $aa = $els[$letter][$i]->docblock->getSDesc($this); + $oo['name'] = $els[$letter][$i]->getName(); + $oo['listing'] = + 'in file '.$els[$letter][$i]->file.', global variable '.$this->getGlobalLink($els[$letter][$i]->getName(), + $els[$letter][$i]->docblock->package, + $els[$letter][$i]->getPath(), + $els[$letter][$i]->getName() + ,false); + $oo['subpackage'] = $subpackage; + $oo['sdesc'] = $aa; + $elindex[$letter]['index'][] = $oo; + break; + case 'function': + $aa = $els[$letter][$i]->docblock->getSDesc($this); + $oo['name'] = $els[$letter][$i]->getName(); + $oo['listing'] = + 'in file '.$els[$letter][$i]->file.', function '.$this->getFunctionLink($els[$letter][$i]->getName(), + $els[$letter][$i]->docblock->package, + $els[$letter][$i]->getPath(), + $els[$letter][$i]->getName().'()' + , false); + $oo['subpackage'] = $subpackage; + $oo['sdesc'] = $aa; + $elindex[$letter]['index'][] = $oo; + break; + case 'method': + $aa = $els[$letter][$i]->docblock->getSDesc($this); + $oo['name'] = $els[$letter][$i]->getName(); + $oo['listing'] = + 'in file '.$els[$letter][$i]->file.', method '.$this->getMethodLink($els[$letter][$i]->getName(), + $els[$letter][$i]->class, + $els[$letter][$i]->docblock->package, + $els[$letter][$i]->getPath(), + $els[$letter][$i]->class.'::'.$els[$letter][$i]->getName().'()' + , false); + $oo['subpackage'] = $subpackage; + $oo['sdesc'] = $aa; + $elindex[$letter]['index'][] = $oo; + break; + case 'var': + $aa = $els[$letter][$i]->docblock->getSDesc($this); + $oo['name'] = $els[$letter][$i]->getName(); + $oo['listing'] = + 'in file '.$els[$letter][$i]->file.', variable '.$this->getVarLink($els[$letter][$i]->getName(), + $els[$letter][$i]->class, + $els[$letter][$i]->docblock->package, + $els[$letter][$i]->getPath(), + $els[$letter][$i]->class.'::'.$els[$letter][$i]->getName() + , false); + $oo['subpackage'] = $subpackage; + $oo['sdesc'] = $aa; + $elindex[$letter]['index'][] = $oo; + break; + case 'page': + $oo['name'] = $els[$letter][$i]->getFile(); + $oo['listing'] = + 'procedural page '.$this->getPageLink($els[$letter][$i]->getFile(), + $els[$letter][$i]->package, + $els[$letter][$i]->getPath(), + $els[$letter][$i]->getFile() + , false); + $oo['subpackage'] = $subpackage; + $elindex[$letter]['index'][] = $oo; + break; + } + } + } + } + ksort($elindex); + usort($letters,'XMLDocBook_lettersort'); + if (isset($elindex)) + { + while(list($letter,$tempel) = each($elindex)) + { + if (!isset($tempel)) + { + unset($letters[$letterind[$tempel['letter']]]); + } else + $elementindex[] = $tempel; + } + } else $letters = array(); + return array($elementindex,$letters); + } + + /** + * + * @see generatePkgElementIndex() + */ + function generatePkgElementIndexes() + { + $packages = array(); + $package_names = array(); + $pkg = array(); + $letters = array(); + foreach($this->pkg_elements as $package => $trash) + { + $pkgs['package'] = $package; + $pkg['package'] = $package; + list($pkg['pindex'],$letters[$package]) = $this->generatePkgElementIndex($package); + if (count($pkg['pindex'])) + { + $packages[] = $pkg; + $package_names[] = $pkgs; + } + unset($pkgs); + unset($pkg); + } + foreach($packages as $i => $package) + { + $pnames = array(); + for($j=0;$j<count($package_names);$j++) + { + if ($package_names[$j]['package'] != $package['package']) $pnames[] = $package_names[$j]; + } + $packages[$i]['packageindexes'] = $pnames; + } + return array($packages,$package_names,$letters); + } + + /** + * @param string name of class + * @param string package name + * @param string full path to look in (used in index generation) + * @param boolean deprecated + * @param boolean return just the URL, or enclose it in an html a tag + * @return mixed false if not found, or an html a link to the class's documentation + * @see parent::getClassLink() + */ + function getClassLink($expr,$package, $file = false,$text = false, $local = true, $with_a = true) + { + $a = Converter::getClassLink($expr,$package,$file); + if (!$a) return false; + return $this->returnSee($a, $text, $local, $with_a); + } + + /** + * @param string name of function + * @param string package name + * @param string full path to look in (used in index generation) + * @param boolean deprecated + * @param boolean return just the URL, or enclose it in an html a tag + * @return mixed false if not found, or an html a link to the function's documentation + * @see parent::getFunctionLink() + */ + function getFunctionLink($expr,$package, $file = false,$text = false, $local = true) + { + $a = Converter::getFunctionLink($expr,$package,$file); + if (!$a) return false; + return $this->returnSee($a, $text, $local); + } + + /** + * @param string name of define + * @param string package name + * @param string full path to look in (used in index generation) + * @param boolean deprecated + * @param boolean return just the URL, or enclose it in an html a tag + * @return mixed false if not found, or an html a link to the define's documentation + * @see parent::getDefineLink() + */ + function getDefineLink($expr,$package, $file = false,$text = false, $local = true) + { + $a = Converter::getDefineLink($expr,$package,$file); + if (!$a) return false; + return $this->returnSee($a, $text, $local); + } + + /** + * @param string name of global variable + * @param string package name + * @param string full path to look in (used in index generation) + * @param boolean deprecated + * @param boolean return just the URL, or enclose it in an html a tag + * @return mixed false if not found, or an html a link to the global variable's documentation + * @see parent::getGlobalLink() + */ + function getGlobalLink($expr,$package, $file = false,$text = false, $local = true) + { + $a = Converter::getGlobalLink($expr,$package,$file); + if (!$a) return false; + return $this->returnSee($a, $text, $local); + } + + /** + * @param string name of procedural page + * @param string package name + * @param string full path to look in (used in index generation) + * @param boolean deprecated + * @param boolean return just the URL, or enclose it in an html a tag + * @return mixed false if not found, or an html a link to the procedural page's documentation + * @see parent::getPageLink() + */ + function getPageLink($expr,$package, $path = false,$text = false, $local = true) + { + $a = Converter::getPageLink($expr,$package,$path); + if (!$a) return false; + return $this->returnSee($a, $text, $local); + } + + /** + * @param string name of method + * @param string class containing method + * @param string package name + * @param string full path to look in (used in index generation) + * @param boolean deprecated + * @param boolean return just the URL, or enclose it in an html a tag + * @return mixed false if not found, or an html a link to the method's documentation + * @see parent::getMethodLink() + */ + function getMethodLink($expr,$class,$package, $file = false,$text = false, $local = true) + { + $a = Converter::getMethodLink($expr,$class,$package,$file); + if (!$a) return false; + return $this->returnSee($a, $text, $local); + } + + /** + * @param string name of var + * @param string class containing var + * @param string package name + * @param string full path to look in (used in index generation) + * @param boolean deprecated + * @param boolean return just the URL, or enclose it in an html a tag + * @return mixed false if not found, or an html a link to the var's documentation + * @see parent::getVarLink() + */ + function getVarLink($expr,$class,$package, $file = false,$text = false, $local = true) + { + $a = Converter::getVarLink($expr,$class,$package,$file); + if (!$a) return false; + return $this->returnSee($a, $text, $local); + } + + /** + * does a nat case sort on the specified second level value of the array + * + * @param mixed $a + * @param mixed $b + * @return int + */ + function rcNatCmp ($a, $b) + { + $aa = strtoupper($a[$this->rcnatcmpkey]); + $bb = strtoupper($b[$this->rcnatcmpkey]); + + return strnatcasecmp($aa, $bb); + } + + /** + * does a nat case sort on the specified second level value of the array. + * this one puts constructors first + * + * @param mixed $a + * @param mixed $b + * @return int + */ + function rcNatCmp1 ($a, $b) + { + $aa = strtoupper($a[$this->rcnatcmpkey]); + $bb = strtoupper($b[$this->rcnatcmpkey]); + + if (strpos($aa,'CONSTRUCTOR') === 0) + { + return -1; + } + if (strpos($bb,'CONSTRUCTOR') === 0) + { + return 1; + } + if (strpos($aa,strtoupper($this->class)) === 0) + { + return -1; + } + if (strpos($bb,strtoupper($this->class)) === 0) + { + return -1; + } + return strnatcasecmp($aa, $bb); + } + + /** + * This function is not used by HTMLdefaultConverter, but is required by Converter + */ + function Output() + { + } +} + +/** @access private */ +function XMLDocBook_lettersort($a, $b) +{ + return strnatcasecmp($a['letter'],$b['letter']); +} +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/Beautifier.php b/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/Beautifier.php new file mode 100644 index 00000000..81b2e782 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/Beautifier.php @@ -0,0 +1,135 @@ +<?PHP +/** + * XML/Beautifier.php + * + * Format XML files containing unknown entities (like all of peardoc) + * + * phpDocumentor :: automatic documentation generator + * + * PHP versions 4 and 5 + * + * Copyright (c) 2004-2006 Gregory Beaver + * + * LICENSE: + * + * This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General + * Public License as published by the Free Software Foundation; + * either version 2.1 of the License, or (at your option) any + * later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package phpDocumentor + * @subpackage Parsers + * @author Greg Beaver <cellog@php.net> + * @copyright 2004-2006 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version CVS: $Id: Beautifier.php 212211 2006-04-30 22:18:14Z cellog $ + * @filesource + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @since 1.3.0 + */ + + +/** + * This is just like XML_Beautifier, but uses {@link phpDocumentor_XML_Beautifier_Tokenizer} + * @package phpDocumentor + * @subpackage Parsers + * @since 1.3.0 + */ +class phpDocumentor_peardoc2_XML_Beautifier extends XML_Beautifier { + + /** + * format a file or URL + * + * @access public + * @param string $file filename + * @param mixed $newFile filename for beautified XML file (if none is given, the XML string will be returned.) + * if you want overwrite the original file, use XML_BEAUTIFIER_OVERWRITE + * @param string $renderer Renderer to use, default is the plain xml renderer + * @return mixed XML string of no file should be written, true if file could be written + * @throws PEAR_Error + * @uses _loadRenderer() to load the desired renderer + */ + function formatFile($file, $newFile = null, $renderer = "Plain") + { + if ($this->apiVersion() != '1.0') { + return $this->raiseError('API version must be 1.0'); + } + /** + * Split the document into tokens + * using the XML_Tokenizer + */ + require_once dirname(__FILE__) . '/Tokenizer.php'; + $tokenizer = new phpDocumentor_XML_Beautifier_Tokenizer(); + + $tokens = $tokenizer->tokenize( $file, true ); + + if (PEAR::isError($tokens)) { + return $tokens; + } + + include_once dirname(__FILE__) . '/Plain.php'; + $renderer = new PHPDoc_XML_Beautifier_Renderer_Plain($this->_options); + + $xml = $renderer->serialize($tokens); + + if ($newFile == null) { + return $xml; + } + + $fp = @fopen($newFile, "w"); + if (!$fp) { + return PEAR::raiseError("Could not write to output file", XML_BEAUTIFIER_ERROR_NO_OUTPUT_FILE); + } + + flock($fp, LOCK_EX); + fwrite($fp, $xml); + flock($fp, LOCK_UN); + fclose($fp); + return true; } + + /** + * format an XML string + * + * @access public + * @param string $string XML + * @return string formatted XML string + * @throws PEAR_Error + */ + function formatString($string, $renderer = "Plain") + { + if ($this->apiVersion() != '1.0') { + return $this->raiseError('API version must be 1.0'); + } + /** + * Split the document into tokens + * using the XML_Tokenizer + */ + require_once dirname(__FILE__) . '/Tokenizer.php'; + $tokenizer = new phpDocumentor_XML_Beautifier_Tokenizer(); + + $tokens = $tokenizer->tokenize( $string, false ); + + if (PEAR::isError($tokens)) { + return $tokens; + } + + include_once dirname(__FILE__) . '/Plain.php'; + $renderer = new PHPDoc_XML_Beautifier_Renderer_Plain($this->_options); + + $xml = $renderer->serialize($tokens); + + return $xml; + } +} +?>
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/Plain.php b/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/Plain.php new file mode 100644 index 00000000..b99ced18 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/Plain.php @@ -0,0 +1,250 @@ +<?PHP +/* vim: set expandtab tabstop=4 shiftwidth=4: */ +// +----------------------------------------------------------------------+ +// | PHP Version 4 | +// +----------------------------------------------------------------------+ +// | Copyright (c) 1997-2002 The PHP Group | +// +----------------------------------------------------------------------+ +// | This source file is subject to version 2.0 of the PHP license, | +// | that is bundled with this package in the file LICENSE, and is | +// | available at through the world-wide-web at | +// | http://www.php.net/license/2_02.txt. | +// | If you did not receive a copy of the PHP license and are unable to | +// | obtain it through the world-wide-web, please send a note to | +// | license@php.net so we can mail you a copy immediately. | +// +----------------------------------------------------------------------+ +// | Authors: Stephan Schmidt <schst@php.net> | +// +----------------------------------------------------------------------+ + +/** + * XML/Beautifier/Renderer/Plain.php + * + * @package XML_Beautifier + * @author Stephan Schmidt <schst@php.net> + */ + +/** + * XML_Util is needed to create the tags + */ +require_once 'XML/Util.php'; + +/** + * Renderer base class + */ +require_once 'XML/Beautifier/Renderer.php'; + +/** + * Basic XML Renderer for XML Beautifier + * + * @package XML_Beautifier + * @author Stephan Schmidt <schst@php.net> + * @todo option to specify inline tags + * @todo option to specify treatment of whitespac in data sections + * @todo automatically create <![CDATA[ ]]> sections + */ +class PHPDoc_XML_Beautifier_Renderer_Plain extends XML_Beautifier_Renderer { + + /** + * Serialize the XML tokens + * + * @access public + * @param array XML tokens + * @return string XML document + */ + function serialize($tokens) + { + $tokens = $this->normalize($tokens); + + $xml = ''; + $cnt = count($tokens); + for($i = 0; $i < $cnt; $i++ ) + { + $xml .= $this->_serializeToken($tokens[$i]); + } + return $xml; + } + + /** + * serialize a token + * + * This method does the actual beautifying. + * + * @access private + * @param array $token structure that should be serialized + * @todo split this method into smaller methods + */ + function _serializeToken($token) + { + switch ($token["type"]) { + + /* + * serialize XML Element + */ + case XML_BEAUTIFIER_ELEMENT: + $indent = $this->_getIndentString($token["depth"]); + + // adjust tag case + if ($this->_options["caseFolding"] === true) { + switch ($this->_options["caseFoldingTo"]) { + case "uppercase": + $token["tagname"] = strtoupper($token["tagname"]); + $token["attribs"] = array_change_key_case($token["attribs"], CASE_UPPER); + break; + case "lowercase": + $token["tagname"] = strtolower($token["tagname"]); + $token["attribs"] = array_change_key_case($token["attribs"], CASE_LOWER); + break; + } + } + + if ($this->_options["multilineTags"] == true) { + $attIndent = $indent . str_repeat(" ", (2+strlen($token["tagname"]))); + } else { + $attIndent = null; + } + // check for children + switch ($token["contains"]) { + + // contains only CData or is empty + case XML_BEAUTIFIER_CDATA: + case XML_BEAUTIFIER_EMPTY: + if (sizeof($token["children"]) >= 1) { + $data = $token["children"][0]["data"]; + } else { + $data = ''; + } + + if( strstr( $data, "\n" ) && $token['contains'] != PHPDOC_BEAUTIFIER_CDATA) + { + $data = "\n" . $this->_indentTextBlock( $data, $token['depth']+1, true ); + } + + $xml = $indent . XML_Util::createTag($token["tagname"], $token["attribs"], $data, null, false, $this->_options["multilineTags"], $attIndent) + . $this->_options["linebreak"]; + break; + // contains mixed content + default: + $xml = $indent . XML_Util::createStartElement($token["tagname"], $token["attribs"], null, $this->_options["multilineTags"], $attIndent) + . $this->_options["linebreak"]; + + $cnt = count($token["children"]); + for ($i = 0; $i < $cnt; $i++) { + $xml .= $this->_serializeToken($token["children"][$i]); + } + $xml .= $indent . XML_Util::createEndElement($token["tagname"]) + . $this->_options["linebreak"]; + break; + break; + } + break; + + /* + * serialize <![CDATA + */ + case PHPDOC_BEAUTIFIER_CDATA: + $xml = $token['data'] . $this->_options['linebreak']; + break; + + /* + * serialize CData + */ + case XML_BEAUTIFIER_CDATA: + if ($token["depth"] > 0) { + $xml = str_repeat($this->_options["indent"], $token["depth"]); + } else { + $xml = ""; + } + + $xml .= $token["data"] . $this->_options["linebreak"]; + break; + + /* + * serialize Processing instruction + */ + case XML_BEAUTIFIER_PI: + $indent = $this->_getIndentString($token["depth"]); + + $xml = $indent."<?".$token["target"].$this->_options["linebreak"] + . $this->_indentTextBlock(rtrim($token["data"]), $token["depth"]) + . $indent."?>".$this->_options["linebreak"]; + break; + + /* + * comments + */ + case XML_BEAUTIFIER_COMMENT: + $lines = count(explode("\n",$token["data"])); + + /* + * normalize comment, i.e. combine it to one + * line and remove whitespace + */ + if ($this->_options["normalizeComments"] && $lines > 1){ + $comment = preg_replace("/\s\s+/s", " ", str_replace( "\n" , " ", $token["data"])); + $lines = 1; + } else { + $comment = $token["data"]; + } + + /* + * check for the maximum length of one line + */ + if ($this->_options["maxCommentLine"] > 0) { + if ($lines > 1) { + $commentLines = explode("\n", $comment); + } else { + $commentLines = array($comment); + } + + $comment = ""; + for ($i = 0; $i < $lines; $i++) { + if (strlen($commentLines[$i]) <= $this->_options["maxCommentLine"]) { + $comment .= $commentLines[$i]; + continue; + } + $comment .= wordwrap($commentLines[$i], $this->_options["maxCommentLine"] ); + if ($i != ($lines-1)) { + $comment .= "\n"; + } + } + $lines = count(explode("\n",$comment)); + } + + $indent = $this->_getIndentString($token["depth"]); + + if ($lines > 1) { + $xml = $indent . "<!--" . $this->_options["linebreak"] + . $this->_indentTextBlock($comment, $token["depth"]+1, true) + . $indent . "-->" . $this->_options["linebreak"]; + } else { + $xml = $indent . sprintf( "<!-- %s -->", trim($comment) ) . $this->_options["linebreak"]; + } + break; + + /* + * xml declaration + */ + case XML_BEAUTIFIER_XML_DECLARATION: + $indent = $this->_getIndentString($token["depth"]); + $xml = $indent . XML_Util::getXMLDeclaration($token["version"], $token["encoding"], $token["standalone"]); + break; + + /* + * xml declaration + */ + case XML_BEAUTIFIER_DT_DECLARATION: + $xml = $token["data"]; + break; + + /* + * all other elements + */ + case XML_BEAUTIFIER_DEFAULT: + default: + $xml = XML_Util::replaceEntities( $token["data"] ); + break; + } + return $xml; + } +} +?>
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/Tokenizer.php b/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/Tokenizer.php new file mode 100644 index 00000000..f1f19e9c --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/Tokenizer.php @@ -0,0 +1,752 @@ +<?php +/** + * XML/Beautifier.php + * + * Format XML files containing unknown entities (like all of peardoc) + * + * phpDocumentor :: automatic documentation generator + * + * PHP versions 4 and 5 + * + * Copyright (c) 2004-2006 Gregory Beaver + * + * LICENSE: + * + * This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General + * Public License as published by the Free Software Foundation; + * either version 2.1 of the License, or (at your option) any + * later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package phpDocumentor + * @subpackage Parsers + * @author Greg Beaver <cellog@php.net> + * @copyright 2004-2006 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version CVS: $Id: Tokenizer.php 238276 2007-06-22 14:58:30Z ashnazg $ + * @filesource + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @since 1.3.0 + */ +/** + * From the XML_Beautifier package + */ +require_once 'XML/Beautifier/Tokenizer.php'; +/** + * Highlights source code using {@link parse()} + * @package phpDocumentor + * @subpackage Parsers + */ +class phpDocumentor_XML_Beautifier_Tokenizer extends XML_Beautifier_Tokenizer +{ + /**#@+ + * @access private + */ + var $_curthing; + var $_tag; + var $_attrs; + var $_attr; + + /**#@-*/ + /** + * @var array + */ + var $eventHandlers = array( + PHPDOC_XMLTOKEN_EVENT_NOEVENTS => 'normalHandler', + PHPDOC_XMLTOKEN_EVENT_XML => 'parseXMLHandler', + PHPDOC_XMLTOKEN_EVENT_PI => 'parsePiHandler', + PHPDOC_XMLTOKEN_EVENT_ATTRIBUTE => 'attrHandler', + PHPDOC_XMLTOKEN_EVENT_OPENTAG => 'tagHandler', + PHPDOC_XMLTOKEN_EVENT_IN_CDATA => 'realcdataHandler', + PHPDOC_XMLTOKEN_EVENT_DEF => 'defHandler', + PHPDOC_XMLTOKEN_EVENT_CLOSETAG => 'closetagHandler', + PHPDOC_XMLTOKEN_EVENT_ENTITY => 'entityHandler', + PHPDOC_XMLTOKEN_EVENT_COMMENT => 'commentHandler', + PHPDOC_XMLTOKEN_EVENT_SINGLEQUOTE => 'stringHandler', + PHPDOC_XMLTOKEN_EVENT_DOUBLEQUOTE => 'stringHandler', + PHPDOC_XMLTOKEN_EVENT_CDATA => 'parseCdataHandler', + ); + + /** + * Parse a new file + * + * The parse() method is a do...while() loop that retrieves tokens one by + * one from the {@link $_event_stack}, and uses the token event array set up + * by the class constructor to call event handlers. + * + * The event handlers each process the tokens passed to them, and use the + * {@link _addoutput()} method to append the processed tokens to the + * {@link $_line} variable. The word parser calls {@link newLineNum()} + * every time a line is reached. + * + * In addition, the event handlers use special linking functions + * {@link _link()} and its cousins (_classlink(), etc.) to create in-code + * hyperlinks to the documentation for source code elements that are in the + * source code. + * + * @uses setupStates() initialize parser state variables + * @uses configWordParser() pass $parse_data to prepare retrieval of tokens + * @param string + * @param Converter + * @param false|string full path to file with @filesource tag, if this + * is a @filesource parse + * @param false|integer starting line number from {@}source linenum} + * @staticvar integer used for recursion limiting if a handler for + * an event is not found + * @return bool + */ + function parseString ($parse_data) + { + static $endrecur = 0; + $parse_data = str_replace(array("\r\n", "\t"), array("\n", ' '), $parse_data); + $this->setupStates($parse_data); + + $this->configWordParser(PHPDOC_XMLTOKEN_EVENT_NOEVENTS); + // initialize variables so E_ALL error_reporting doesn't complain + $pevent = 0; + $word = 0; + $this->_curthing = ''; + + do + { + $lpevent = $pevent; + $pevent = $this->_event_stack->getEvent(); + if ($lpevent != $pevent) + { + $this->_last_pevent = $lpevent; + $this->configWordParser($pevent); + } + $this->_wp->setWhitespace(true); + + $dbg_linenum = $this->_wp->linenum; + $dbg_pos = $this->_wp->getPos(); + $this->_pv_last_word = $word; + $this->_pv_curline = $this->_wp->linenum; + $word = $this->_wp->getWord(); + + if (PHPDOCUMENTOR_DEBUG == true) + { + echo "LAST: "; + echo "|" . $this->_pv_last_word; + echo "|\n"; + echo "PEVENT: " . $this->getParserEventName($pevent) . "\n"; + echo "LASTPEVENT: " . $this->getParserEventName($this->_last_pevent) . "\n"; +// echo "LINE: ".$this->_line."\n"; +// echo "OUTPUT: ".$this->_output."\n"; + echo $dbg_linenum.'-'.$dbg_pos . ": "; + echo '|'.htmlspecialchars($word); + echo "|\n"; + echo "-------------------\n\n\n"; + flush(); + } + if (isset($this->eventHandlers[$pevent])) + { + $handle = $this->eventHandlers[$pevent]; + $this->$handle($word, $pevent); + } else + { + echo ('WARNING: possible error, no handler for event number '.$pevent); + if ($endrecur++ == 25) + { + return $this->raiseError("FATAL ERROR, recursion limit reached"); + } + } + } while (!($word === false)); + return true; + } + + /**#@+ + * Event Handlers + * + * All Event Handlers use {@link checkEventPush()} and + * {@link checkEventPop()} to set up the event stack and parser state. + * @access private + * @param string|array token value + * @param integer parser event from {@link Parser.inc} + */ + /** + * Most tokens only need highlighting, and this method handles them + */ + function normalHandler($word, $pevent) + { + if ($this->checkEventPush($word, $pevent)) { + $this->_wp->backupPos($word); + $this->_addoutput($pevent); + $this->_curthing = ''; + return; + } + $this->_curthing .= $word; + + if ($this->checkEventPop($word, $pevent)) { + $this->_addoutput($pevent); + $this->_curthing = ''; + } + } + + /** + * handle <!-- comments --> + */ + function commentHandler($word, $pevent) + { + if ($this->checkEventPush($word, $pevent)) { + $this->_wp->backupPos($word); + return; + } + + $this->_curthing .= $word; + if ($this->checkEventPop($word, $pevent)) { + $this->_addoutput($pevent); + $this->_curthing = ''; + } + } + + /** + * handle <?Processor instructions?> + */ + function parsePiHandler($word, $pevent) + { + if ($this->checkEventPush($word, $pevent)) { + $this->_wp->backupPos($word); + return; + } + if ($this->checkEventPop($word, $pevent)) { + $this->_addoutput($pevent); + $this->_curthing = ''; + $this->_attrs = null; + return; + } + if (!strlen($this->_curthing)) { + $this->_curthing .= str_replace('<?', '', $word); + } else { + if (!isset($this->_attrs) || !is_string($this->_attrs)) { + $this->_attrs = ''; + } + $this->_attrs .= $word; + } + } + + /** + * handle <?xml Processor instructions?> + */ + function parseXMLHandler($word, $pevent) + { + if ($this->checkEventPush($word, $pevent)) { + $this->_wp->backupPos($word); + return; + } + + $this->_curthing .= $word; + if ($this->checkEventPop($word, $pevent)) { + $this->_addoutput($pevent); + $this->_curthing = ''; + } + } + + /** + * handle <![CDATA[ unescaped text ]]> + */ + function realcdataHandler($word, $pevent) + { + $this->_curthing .= $word; + if ($this->checkEventPop($word, $pevent)) { + $this->_addoutput($pevent); + $this->_curthing = ''; + } + } + + /** + * handle <tags> + */ + function tagHandler($word, $pevent) + { + if ($this->checkEventPush($word, $pevent)) { + $this->_wp->backupPos($word); + $this->_curthing = ''; + return; + } + + if ($word{0} == '<') { + $this->_tag = substr($word, 1); + } + + if ($this->checkEventPop($word, $pevent)) { + $this->_addoutput($pevent); + $this->_tag = null; + $this->_attrs = null; + if ($word == '>') { + $this->_event_stack->pushEvent(PHPDOC_XMLTOKEN_EVENT_CDATA); + return; + } + } + } + + /** + * handle </tags> + */ + function closetagHandler($word, $pevent) + { + if ($this->checkEventPush($word, $pevent)) { + $this->_wp->backupPos($word); + return; + } + if ($this->checkEventPop($word, $pevent)) { + $this->_addoutput($pevent); + $this->_tag = ''; + return; + } + $this->_tag = trim(str_replace('</', '', $word)); + } + + /** + * handle <!def> + */ + function defHandler($word, $pevent) + { + if ($this->checkEventPush($word, $pevent)) { + $this->_wp->backupPos($word); + return; + } + + $this->_curthing .= $word; + if ($this->checkEventPop($word, $pevent)) { + $this->_addoutput($pevent); + $this->_curthing = ''; + } + } + + /** + * Most tokens only need highlighting, and this method handles them + */ + function attrHandler($word, $pevent) + { + if ($e = $this->checkEventPush($word, $pevent)) { + return; + } + if (!isset($this->_attrs) || !is_array($this->_attrs)) { + $this->_attrs = array(); + } + if (strpos($word, '=')) { + $this->_attrs[$this->_attr = trim(str_replace('=', '', $word))] = ''; + } + if ($this->checkEventPop($word, $pevent)) { + $this->_wp->backupPos($word); + return; + } + } + + /** + * handle attribute values + */ + function stringHandler($word, $pevent) + { + if ($this->checkEventPop($word, $pevent)) { + return; + } + $this->_attrs[$this->_attr] = $word; + } + + /** + * handle &entities; + */ + function entityHandler($word, $pevent) + { + if ($this->checkEventPop($word, $pevent)) { + $this->_addoutput($pevent); + $this->_curthing = ''; + return; + } + if (strlen($word) && $word{0} == '&') { + $word = substr($word, 1); + } + $this->_curthing .= $word; + } + + /** + * handle tag contents + */ + function parseCdataHandler($word, $pevent) + { + if ($this->checkEventPush($word, $pevent)) { + $this->_wp->backupPos($word); + if (strlen($this->_curthing)) { + $this->_addoutput($pevent); + } + $this->_curthing = ''; + return; + } + if ($this->checkEventPop($word, $pevent)) { + if (strlen($this->_curthing)) { + $this->_addoutput($pevent); + } + $this->_curthing = ''; + $this->_event_stack->pushEvent(PHPDOC_XMLTOKEN_EVENT_CLOSETAG); + return; + } + $this->_curthing .= $word; + } + + /**#@-*/ + + /** + * Handler for real character data + * + * @access protected + * @param object XML parser object + * @param string CDATA + * @return void + */ + function incdataHandler($parser, $cdata) + { + if ((string)$cdata === '') { + return true; + } + + $struct = array( + "type" => PHPDOC_BEAUTIFIER_CDATA, + "data" => $cdata, + "depth" => $this->_depth + ); + + $this->_appendToParent($struct); + } + /**#@+ + * Output Methods + * @access private + */ + /** + * This method adds output to {@link $_line} + * + * If a string with variables like "$test this" is present, then special + * handling is used to allow processing of the variable in context. + * @see _flush_save() + */ + function _addoutput($event) + { + $type = + array( + PHPDOC_XMLTOKEN_EVENT_NOEVENTS => '_handleXMLDefault', + PHPDOC_XMLTOKEN_EVENT_CLOSETAG => 'endHandler', + PHPDOC_XMLTOKEN_EVENT_ENTITY => 'entityrefHandler', + PHPDOC_XMLTOKEN_EVENT_DEF => '_handleXMLDefault', + PHPDOC_XMLTOKEN_EVENT_PI => 'parsePiHandler', + PHPDOC_XMLTOKEN_EVENT_XML => '_handleXMLDefault', + PHPDOC_XMLTOKEN_EVENT_OPENTAG => 'startHandler', + PHPDOC_XMLTOKEN_EVENT_COMMENT => '_handleXMLDefault', + PHPDOC_XMLTOKEN_EVENT_CDATA => 'cdataHandler', + PHPDOC_XMLTOKEN_EVENT_IN_CDATA => 'incdataHandler', + ); + $method = $type[$event]; + switch ($event) { + case PHPDOC_XMLTOKEN_EVENT_COMMENT : +// echo "comment: $this->_curthing\n"; + $this->$method(false, $this->_curthing); + break; + case PHPDOC_XMLTOKEN_EVENT_OPENTAG : +// echo "open tag: $this->_tag\n"; +// var_dump($this->_attrs); + $this->$method(false, $this->_tag, $this->_attrs); + break; + case PHPDOC_XMLTOKEN_EVENT_CLOSETAG : +// echo "close tag: $this->_tag\n"; + $this->$method(false, $this->_curthing); + break; + case PHPDOC_XMLTOKEN_EVENT_NOEVENTS : + if (!strlen($this->_curthing)) { + return; + } +// echo "default: $this->_curthing\n"; + $this->$method(false, $this->_curthing); + break; + case PHPDOC_XMLTOKEN_EVENT_DEF : +// echo "<!definition: $this->_curthing\n"; + $this->$method(false, $this->_curthing); + break; + case PHPDOC_XMLTOKEN_EVENT_PI : +// echo "<?pi: $this->_curthing\n"; +// echo "<?pi attrs: $this->_attrs\n"; + $this->$method(false, $this->_curthing, $this->_attrs); + break; + case PHPDOC_XMLTOKEN_EVENT_XML : +// echo "<?xml: $this->_curthing\n"; + $this->$method(false, $this->_curthing, $this->_attrs); + break; + case PHPDOC_XMLTOKEN_EVENT_CDATA : + case PHPDOC_XMLTOKEN_EVENT_IN_CDATA : +// echo "cdata: $this->_curthing\n"; + $this->$method(false, $this->_curthing); + break; + case PHPDOC_XMLTOKEN_EVENT_ENTITY : +// echo "entity: $this->_curthing\n"; + $this->$method(false, $this->_curthing, false, false, false); + break; + } + } + /**#@-*/ + + /** + * tell the parser's WordParser {@link $wp} to set up tokens to parse words by. + * tokens are word separators. In English, a space or punctuation are examples of tokens. + * In PHP, a token can be a ;, a parenthesis, or even the word "function" + * @param $value integer an event number + * @see WordParser + */ + + function configWordParser($e) + { + $this->_wp->setSeperator($this->tokens[($e + 100)]); + } + /** + * this function checks whether parameter $word is a token for pushing a new event onto the Event Stack. + * @return mixed returns false, or the event number + */ + + function checkEventPush($word,$pevent) + { + $e = false; + if (isset($this->pushEvent[$pevent])) + { + if (isset($this->pushEvent[$pevent][strtolower($word)])) + $e = $this->pushEvent[$pevent][strtolower($word)]; + } + if ($e) + { + $this->_event_stack->pushEvent($e); + return $e; + } else { + return false; + } + } + + /** + * this function checks whether parameter $word is a token for popping the current event off of the Event Stack. + * @return mixed returns false, or the event number popped off of the stack + */ + + function checkEventPop($word,$pevent) + { + if (!isset($this->popEvent[$pevent])) return false; + if (in_array(strtolower($word),$this->popEvent[$pevent])) + { + return $this->_event_stack->popEvent(); + } else { + return false; + } + } + + /** + * Initialize all parser state variables + * @param boolean true if we are highlighting an inline {@}source} tag's + * output + * @param false|string name of class we are going to start from + * @uses $_wp sets to a new {@link phpDocumentor_HighlightWordParser} + */ + function setupStates($parsedata) + { + $this->_output = ''; + $this->_line = ''; + unset($this->_wp); + $this->_wp = new WordParser; + $this->_wp->setup($parsedata); + $this->_event_stack = @(new EventStack); + $this->_event_stack->popEvent(); + $this->_event_stack->pushEvent(PHPDOC_XMLTOKEN_EVENT_NOEVENTS); + $this->_pv_linenum = null; + $this->_pv_next_word = false; + } + + /** + * Initialize the {@link $tokenpushEvent, $wordpushEvent} arrays + */ + function phpDocumentor_XML_Beautifier_Tokenizer() + { + $this->tokens[STATE_XMLTOKEN_CDATA] = + $this->tokens[STATE_XMLTOKEN_NOEVENTS] = array('<?xml', '<!--', '<![CDATA[', '<!', '</', '<?', '<');//, '&'); + $this->tokens[STATE_XMLTOKEN_OPENTAG] = array("\n","\t"," ", '>', '/>'); + $this->tokens[STATE_XMLTOKEN_XML] = + $this->tokens[STATE_XMLTOKEN_PI] = array("\n","\t"," ", '?>'); + $this->tokens[STATE_XMLTOKEN_IN_CDATA] = array(']]>'); + $this->tokens[STATE_XMLTOKEN_CLOSETAG] = array("\n",'>'); + $this->tokens[STATE_XMLTOKEN_COMMENT] = array("\n",'-->'); + $this->tokens[STATE_XMLTOKEN_DEF] = array("\n",']>','>'); + $this->tokens[STATE_XMLTOKEN_ENTITY] = array("\n",';'); + $this->tokens[STATE_XMLTOKEN_ATTRIBUTE] = array("\n",'"',"'",'>','/>'); + $this->tokens[STATE_XMLTOKEN_DOUBLEQUOTE] = array("\n",'"'); + $this->tokens[STATE_XMLTOKEN_SINGLEQUOTE] = array("\n","'"); +/**************************************************************/ + + $this->pushEvent[PHPDOC_XMLTOKEN_EVENT_NOEVENTS] = + array( + '<' => PHPDOC_XMLTOKEN_EVENT_OPENTAG, + '<?' => PHPDOC_XMLTOKEN_EVENT_PI, + '<?xml' => PHPDOC_XMLTOKEN_EVENT_XML, + '</' => PHPDOC_XMLTOKEN_EVENT_CLOSETAG, +// '&' => PHPDOC_XMLTOKEN_EVENT_ENTITY, + '<![cdata[' => PHPDOC_XMLTOKEN_EVENT_IN_CDATA, + '<!--' => PHPDOC_XMLTOKEN_EVENT_COMMENT, + '<!' => PHPDOC_XMLTOKEN_EVENT_DEF, + ); +/**************************************************************/ + + $this->pushEvent[PHPDOC_XMLTOKEN_EVENT_OPENTAG] = + array( + " " => PHPDOC_XMLTOKEN_EVENT_ATTRIBUTE, + "\n" => PHPDOC_XMLTOKEN_EVENT_ATTRIBUTE, + ); +/**************************************************************/ + + $this->pushEvent[PHPDOC_XMLTOKEN_EVENT_ATTRIBUTE] = + array( + "'" => PHPDOC_XMLTOKEN_EVENT_SINGLEQUOTE, + '"' => PHPDOC_XMLTOKEN_EVENT_DOUBLEQUOTE, + ); +/**************************************************************/ + + $this->popEvent[PHPDOC_XMLTOKEN_EVENT_IN_CDATA] = array(']]>'); +/**************************************************************/ + + $this->pushEvent[PHPDOC_XMLTOKEN_EVENT_CDATA] = + array( + '<' => PHPDOC_XMLTOKEN_EVENT_OPENTAG, + '<?' => PHPDOC_XMLTOKEN_EVENT_PI, +// '&' => PHPDOC_XMLTOKEN_EVENT_ENTITY, + '<!--' => PHPDOC_XMLTOKEN_EVENT_COMMENT, + '<!' => PHPDOC_XMLTOKEN_EVENT_DEF, + '<![cdata[' => PHPDOC_XMLTOKEN_EVENT_IN_CDATA, + ); +/**************************************************************/ + + $this->popEvent[PHPDOC_XMLTOKEN_EVENT_XML] = + $this->popEvent[PHPDOC_XMLTOKEN_EVENT_PI] = array('?>'); +/**************************************************************/ + + $this->popEvent[PHPDOC_XMLTOKEN_EVENT_ENTITY] = array(';'); +/**************************************************************/ + + $this->popEvent[PHPDOC_XMLTOKEN_EVENT_SINGLEQUOTE] = array("'"); +/**************************************************************/ + + $this->popEvent[PHPDOC_XMLTOKEN_EVENT_DOUBLEQUOTE] = array('"'); +/**************************************************************/ + + $this->popEvent[PHPDOC_XMLTOKEN_EVENT_OPENTAG] = array('>', '/>'); +/**************************************************************/ + + $this->popEvent[PHPDOC_XMLTOKEN_EVENT_CLOSETAG] = array('>'); +/**************************************************************/ + + $this->popEvent[PHPDOC_XMLTOKEN_EVENT_COMMENT] = array('-->'); +/**************************************************************/ + + $this->popEvent[PHPDOC_XMLTOKEN_EVENT_DEF] = array('>',']>'); +/**************************************************************/ + + $this->popEvent[PHPDOC_XMLTOKEN_EVENT_ATTRIBUTE] = array('>','/>'); +/**************************************************************/ + + $this->popEvent[PHPDOC_XMLTOKEN_EVENT_CDATA] = + array('</'); +/**************************************************************/ + } + + function getParserEventName ($value) + { + $lookup = array( + PHPDOC_XMLTOKEN_EVENT_NOEVENTS => "PHPDOC_XMLTOKEN_EVENT_NOEVENTS", + PHPDOC_XMLTOKEN_EVENT_PI => "PHPDOC_XMLTOKEN_EVENT_PI", + PHPDOC_XMLTOKEN_EVENT_OPENTAG => "PHPDOC_XMLTOKEN_EVENT_OPENTAG", + PHPDOC_XMLTOKEN_EVENT_ATTRIBUTE => "PHPDOC_XMLTOKEN_EVENT_ATTRIBUTE", + PHPDOC_XMLTOKEN_EVENT_CLOSETAG => "PHPDOC_XMLTOKEN_EVENT_CLOSETAG", + PHPDOC_XMLTOKEN_EVENT_ENTITY => "PHPDOC_XMLTOKEN_EVENT_ENTITY", + PHPDOC_XMLTOKEN_EVENT_COMMENT => "PHPDOC_XMLTOKEN_EVENT_COMMENT", + PHPDOC_XMLTOKEN_EVENT_SINGLEQUOTE => "PHPDOC_XMLTOKEN_EVENT_SINGLEQUOTE", + PHPDOC_XMLTOKEN_EVENT_DOUBLEQUOTE => "PHPDOC_XMLTOKEN_EVENT_DOUBLEQUOTE", + PHPDOC_XMLTOKEN_EVENT_CDATA => 'PHPDOC_XMLTOKEN_EVENT_CDATA', + PHPDOC_XMLTOKEN_EVENT_DEF => 'PHPDOC_XMLTOKEN_EVENT_DEF', + PHPDOC_XMLTOKEN_EVENT_XML => 'PHPDOC_XMLTOKEN_EVENT_XML', + PHPDOC_XMLTOKEN_EVENT_IN_CDATA => 'PHPDOC_XMLTOKEN_EVENT_IN_CDATA', + ); + if (isset($lookup[$value])) + return $lookup[$value]; + else return $value; + } +} + + +/** starting state */ +define("PHPDOC_XMLTOKEN_EVENT_NOEVENTS" , 1); +/** currently in starting state */ +define("STATE_XMLTOKEN_NOEVENTS" , 101); + +/** used when a processor instruction is found */ +define("PHPDOC_XMLTOKEN_EVENT_PI" , 2); +/** currently in processor instruction */ +define("STATE_XMLTOKEN_PI" , 102); + +/** used when an open <tag> is found */ +define("PHPDOC_XMLTOKEN_EVENT_OPENTAG" , 3); +/** currently parsing an open <tag> */ +define("STATE_XMLTOKEN_OPENTAG" , 103); + +/** used when a <tag attr="attribute"> is found */ +define("PHPDOC_XMLTOKEN_EVENT_ATTRIBUTE" , 4); +/** currently parsing an open <tag> */ +define("STATE_XMLTOKEN_ATTRIBUTE" , 104); + +/** used when a close </tag> is found */ +define("PHPDOC_XMLTOKEN_EVENT_CLOSETAG" , 5); +/** currently parsing a close </tag> */ +define("STATE_XMLTOKEN_CLOSETAG" , 105); + +/** used when an &entity; is found */ +define("PHPDOC_XMLTOKEN_EVENT_ENTITY" , 6); +/** currently parsing an &entity; */ +define("STATE_XMLTOKEN_ENTITY" , 106); + +/** used when a <!-- comment --> is found */ +define("PHPDOC_XMLTOKEN_EVENT_COMMENT" , 7); +/** currently parsing a <!-- comment --> */ +define("STATE_XMLTOKEN_COMMENT" , 107); + +/** used when a <!-- comment --> is found */ +define("PHPDOC_XMLTOKEN_EVENT_SINGLEQUOTE" , 8); +/** currently parsing a <!-- comment --> */ +define("STATE_XMLTOKEN_SINGLEQUOTE" , 108); + +/** used when a <!-- comment --> is found */ +define("PHPDOC_XMLTOKEN_EVENT_DOUBLEQUOTE" , 9); +/** currently parsing a <!-- comment --> */ +define("STATE_XMLTOKEN_DOUBLEQUOTE" , 109); + +/** used when a <! is found */ +define("PHPDOC_XMLTOKEN_EVENT_DEF" , 10); +/** currently parsing a <! */ +define("STATE_XMLTOKEN_DEF" , 110); + +/** used when a <! is found */ +define("PHPDOC_XMLTOKEN_EVENT_CDATA" , 11); +/** currently parsing a <! */ +define("STATE_XMLTOKEN_CDATA" , 111); + +/** used when a <?xml is found */ +define("PHPDOC_XMLTOKEN_EVENT_XML" , 12); +/** currently parsing a <?xml */ +define("STATE_XMLTOKEN_XML" , 112); + +/** used when a <![CDATA[ section is found */ +define('PHPDOC_XMLTOKEN_EVENT_IN_CDATA', 13); +/** currently parsing a <![CDATA[ ]]> */ +define('STATE_XMLTOKEN_IN_CDATA', 113); + +/** do not remove, needed in plain renderer */ +define('PHPDOC_BEAUTIFIER_CDATA', 100000); +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/XMLDocBookpeardoc2Converter.inc b/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/XMLDocBookpeardoc2Converter.inc new file mode 100755 index 00000000..f359d7d5 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/XMLDocBookpeardoc2Converter.inc @@ -0,0 +1,1701 @@ +<?php +/** + * Outputs documentation in XML DocBook format, in the version expected by + * pear.php.net's documentation team + * + * phpDocumentor :: automatic documentation generator + * + * PHP versions 4 and 5 + * + * Copyright (c) 2002-2006 Gregory Beaver + * + * LICENSE: + * + * This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General + * Public License as published by the Free Software Foundation; + * either version 2.1 of the License, or (at your option) any + * later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package Converters + * @subpackage XMLDocBook + * @author Greg Beaver <cellog@php.net> + * @copyright 2002-2006 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version CVS: $Id: XMLDocBookpeardoc2Converter.inc 234423 2007-04-24 21:32:15Z ashnazg $ + * @filesource + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @since 1.2 + */ +/** + * XML DocBook converter. + * This Converter takes output from the {@link Parser} and converts it to DocBook + * output for PEAR documentation. + * + * This Converter differs from the parent DocBook Converter in that it does not + * recognize the possibility of procedural pages or of functions! All functions + * must be defined as static methods for namespace purposes. In addition, all + * constants and global variables for a package are grouped together as per + * peardoc2 requirements. Include statements are not documented. If you want + * to document a normal project, don't use the peardoc2 converter, use the + * DocBook converter. + * @package Converters + * @subpackage XMLDocBook + * @author Greg Beaver <cellog@php.net> + * @since 1.2 + * @version $Id: XMLDocBookpeardoc2Converter.inc 234423 2007-04-24 21:32:15Z ashnazg $ + */ +class XMLDocBookpeardoc2Converter extends Converter +{ + /** + * This converter knows about the new root tree processing + * In order to fix PEAR Bug #6389 + * @var boolean + */ + var $processSpecialRoots = true; + /** + * XMLDocBookConverter wants elements sorted by type as well as alphabetically + * @see Converter::$sort_page_contents_by_type + * @var boolean + */ + var $sort_page_contents_by_type = true; + /** @var string */ + var $outputformat = 'XML'; + /** @var string */ + var $name = 'DocBook/peardoc2'; + /** + * indexes of elements by package that need to be generated + * @var array + */ + var $leftindex = array('classes' => true, 'pages' => false, 'functions' => false, 'defines' => true, 'globals' => true); + /** + * whether a @see is going to be in the {@link $base_dir}, or in a package/subpackage subdirectory of $base_dir + * @var boolean + */ + var $local = true; + + /** + * name of current page being converted + * @var string + */ + var $page; + + /** + * path of current page being converted + * @var string + */ + var $path; + + /** + * name of current class being converted + * @var string + */ + var $class; + + /** + * template for the procedural page currently being processed + * @var Template + */ + var $page_data; + + /** + * output directory for the current procedural page being processed + * @var string + */ + var $page_dir; + + /** + * Constants, used for constants.tpl + * @var array + */ + var $_peardoc2_constants = false; + + /** + * Global Variables, used for globals.tpl + * @var array + */ + var $_peardoc2_globals = false; + + /** + * target directory passed on the command-line. + * {@link $targetDir} is malleable, always adding package/ and package/subpackage/ subdirectories onto it. + * @var string + */ + var $base_dir; + + /** + * output directory for the current class being processed + * @var string + */ + var $class_dir; + + /** + * template for the class currently being processed + * @var Template + */ + var $class_data; + + /** + * array of converted package page names. + * Used to link to the package page in the left index + * @var array Format: array(package => 1) + */ + var $package_pages = array(); + + /** + * Contents of the packagename.xml file are stored in this template variable + * @var Smarty + */ + var $packagexml; + /** + * controls formatting of parser informative output + * + * Converter prints: + * "Converting /path/to/file.php... Procedural Page Elements... Classes..." + * Since HTMLdefaultConverter outputs files while converting, it needs to send a \n to start a new line. However, if there + * is more than one class, output is messy, with multiple \n's just between class file output. This variable prevents that + * and is purely cosmetic + * @var boolean + */ + var $juststarted = false; + + /** + * contains all of the template procedural page element loop data needed for the current template + * @var array + */ + var $current; + + /** + * contains all of the template class element loop data needed for the current template + * @var array + */ + var $currentclass; + + /** + * Pass elements by package, simplifies generation of package.xml/category.xml + */ + var $sort_absolutely_everything = true; + /** + * template options. Currently only 1 recognized option usepear + * + * usepear tells the getLink() function to return a package link to PEAR and PEAR_ERROR if possible, and to link directly + * to the fully-delimited link package#class.method or package#file.method in PEAR style, if possible, even if the + * package is not parsed. This will allow parsing of separate PEAR packages without parsing the entire thing at once! + * @var array + */ + var $template_options = array('usepear' => false); + + var $function_data = array(); + var $method_data = array(); + var $_write_constants_xml = array(); + var $_write_globals_xml = array(); + var $sourceloc = ''; + /** + * peardoc2 Category + * @var string + */ + var $category; + /** + * Used to re-format output so that it's easy for translators to handle + * + * @var XML_Beautifier|false + * @access private + */ + var $_beautifier = false; + + /** + * sets {@link $base_dir} to $targetDir + * @see Converter() + */ + function XMLDocBookpeardoc2Converter(&$allp, &$packp, &$classes, &$procpages, $po, $pp, $qm, $targetDir, $templateDir, $title) + { + if (!class_exists('XML_Beautifier')) { + @include_once 'XML/Beautifier.php'; + } + Converter::Converter($allp, $packp, $classes, $procpages,$po, $pp, $qm, $targetDir, $templateDir, $title); + if (class_exists('XML_Beautifier')) { + require_once 'phpDocumentor/Converters/XML/DocBook/peardoc2/Beautifier.php'; + $this->_beautifier = new phpDocumentor_peardoc2_XML_Beautifier; + $this->_beautifier->setOption('indent', ' '); + } + $this->base_dir = $targetDir; + } + + /** + * do that stuff in $template_options + */ + function &getLink($expr, $package = false, $packages = false) + { + return Converter::getLink($expr, $package, $packages); + } + + function unmangle($s,$sourcecode) + { + return '<programlisting role="php"><![CDATA[ +'.$sourcecode.']]></programlisting>'; + } + + /** + * Writes a file to target dir, beautify any .xml files first + * @param string filename + * @param string file contents + * @param boolean true if the data is binary and not text + */ + function writeFile($file,$data,$binary = false) + { + if ($this->_beautifier && substr($file, -4) == '.xml') { + $ret = $this->_beautifier->formatString($data); + if (PEAR::isError($ret)) { + addWarning(PDERROR_BEAUTIFYING_FAILED, $ret->getMessage()); + $ret = $data; + } + $data = $ret; + } + return parent::writeFile($file, $data, $binary); + } + + /** + * Used to convert the {@}example} inline tag in a docblock. + * + * By default, this just wraps ProgramExample + * @see XMLDocBookpeardoc2Converter::exampleProgramExample + * @param string + * @param boolean true if this is to highlight a tutorial <programlisting> + * @return string + */ + function exampleProgramExample($example, $tutorial = false, $inlinesourceparse = null/*false*/, + $class = null/*false*/, $linenum = null/*false*/, $filesourcepath = null/*false*/) + { + return '<example><title>Example</title><programlisting role="php"><![CDATA[' . + $example . ']]></programlisting></example>'; + $this->ProgramExample($example, $tutorial, $inlinesourceparse, $class, $linenum, $filesourcepath) + . '</example>'; + } + + function writeExample($title, $path, $source) + { + $this->_save_example = array($title, $source); + } + + function getExampleLink($unused, $title) + { + $source = $this->_save_example[1]; + return '<para><example><title>' . $title . '</title>' . $source . '</example></para>'; + } + + function type_adjust($typename) + { + if (isset($this->template_options['typechanging'][trim($typename)])) + return $this->template_options['typechanging'][trim($typename)]; + $a = $this->getLink($typename); + if (is_object($a)) + { + if (phpDocumentor_get_class($a) == 'classlink') + return '<classname>'.$typename.'</classname>'; + if (phpDocumentor_get_class($a) == 'functionlink' || phpDocumentor_get_class($a) == 'methodlink') + return '<function>'.$typename.'</function>'; + if (phpDocumentor_get_class($a) == 'definelink') + return '<constant>'.$typename.'</constant>'; + if (phpDocumentor_get_class($a) == 'varlink') + return '<varname>'.$typename.'</varname>'; + } + return $typename; + } + + /** + * Writes out the template file of {@link $class_data} and unsets the template to save memory + * @see registerCurrentClass() + * @see parent::endClass() + * @todo move class summary into an array to be written out at the end + * of parsing each package + */ + function endClass() + { + $a = '../'; + if (!empty($this->subpackage)) $a .= '../'; + if ($this->juststarted) + { + $this->juststarted = false; + phpDocumentor_out("\n"); + flush(); + } + foreach($this->method_data as $func) + { + $func[0]->assign("phpdocversion",PHPDOCUMENTOR_VER); + $func[0]->assign("phpdocwebsite",PHPDOCUMENTOR_WEBSITE); + $this->setTargetDir($this->base_dir . PATH_DELIMITER . strtolower($this->category) . PATH_DELIMITER . strtolower($this->class_dir . PATH_DELIMITER . str_replace(array('_','.'),array('-','--'),$this->class))); + $this->writefile(strtolower($func[1] ). '.xml','<!-- $' . "Revision$ -->\n" . $func[0]->fetch('method.tpl')); + } + // code below is in packagename.xml handling, see Output() +/* $this->setTargetDir($this->base_dir . PATH_DELIMITER . strtolower($this->category) . PATH_DELIMITER . strtolower($this->class_dir)); + $this->writefile(str_replace(array('_','.'),array('-','--'),strtolower($this->class)) . '.xml',$this->class_data->fetch('class.tpl'));*/ + unset($this->class_data); + } + + function addSummaryToPackageXml($template_output) + { + $this->packagexml->append('ids',$template_output); + } + + /** + * @param parserClass|false $element is false if this is the end of all conversion + */ + function flushPackageXml($element) + { + if (isset($this->packagexml)) + { + if (!$element || $element->docblock->package != $this->package) // finished with package + { + if (isset($this->_write_constants_xml[$this->category][$this->package]) && + $this->_write_constants_xml[$this->category][$this->package]) + { + $this->packagexml->append('ids', + '&package.' . + strtolower($this->category.'.' . + str_replace(array('_','.'),array('-','--'),$this->package).'.constants;')); + $this->_write_constants_xml[$this->category][$this->package] = false; + } + if (isset($this->_write_globals_xml[$this->category][$this->package]) && + $this->_write_globals_xml[$this->category][$this->package]) + { + $this->packagexml->append('ids', + '&package.'.strtolower($this->category.'.' . + str_replace(array('_','.'),array('-','--'),$this->package).'.globals;')); + $this->_write_globals_xml[$this->category][$this->package] = false; + } + $this->setTargetDir($this->base_dir . PATH_DELIMITER . strtolower($this->category)); + $this->writefile(str_replace('_','-',strtolower($this->package)).'.xml', + '<!-- $' . "Revision$ -->\n" . $this->packagexml->fetch('package.tpl')); + $this->packagexml->clear_all_assign(); + if ($element) { + $this->packagexml->assign('package',$element->docblock->package); + $this->packagexml->assign('ids',array()); + $this->packagexml->assign('id',$this->getId($element, true)); + } + } + } else + { + $this->packagexml = $this->newSmarty(); + $this->packagexml->assign('package',$element->docblock->package); + $this->packagexml->assign('ids',array()); + $this->packagexml->assign('id',$this->getId($element, true)); + } + } + + /** + * @param string + * @param string + * @return string <ulink url="'.$link.'">'.$text.'</ulink> + */ + function returnLink($link,$text) + { + return '<ulink url="'.$link.'">'.$text.'</ulink>'; + } + + function makeLeft() + { + } + + /** + * Does nothing + */ + function formatPkgIndex() + { + } + + /** + * Does nothing + */ + function formatIndex() + { + } + + /** + * Does nothing + */ + function writeNewPPage($key) + { + } + + /** + * Does nothing + */ + function writeSource() + { + } + + /** + * Creates package/lang/categoryname/packagename.xml for each package + */ + function formatLeftIndex() + { + $this->makeLeft(); + } + + /** + * This function takes an {@link abstractLink} descendant and returns an html link + * + * @param abstractLink a descendant of abstractlink should be passed, and never text + * @param string text to display in the link + * @param boolean this parameter is not used, and is deprecated + * @param boolean determines whether the returned text is enclosed in an <link> tag + */ + function returnSee(&$element, $eltext = false, $local = true, $with_a = true) + { + if (!$element) return false; + if (!$eltext) + { + $eltext = ''; + switch($element->type) + { + case 'tutorial' : + $eltext = $element->title; + break; + case 'class' : + $eltext = '<classname>'.$element->name.'</classname>'; + break; + case 'method' : + $eltext .= '<function>'; + case 'var' : + if ($element->type == 'var') $eltext .= '<varname>'; + $eltext .= $element->class.'::'; + case 'page' : + case 'define' : + if ($element->type == 'define') + $eltext .= '<constant>'; + case 'function' : + if ($element->type == 'function') + $eltext .= '<function>'; + case 'global' : + default : + $eltext .= $element->name; + if ($element->type == 'function' || $element->type == 'method') $eltext .= '</function>'; + if ($element->type == 'var') $eltext .= '</varname>'; + if ($element->type == 'define') $eltext .= '</constant>'; + break; + } + } elseif (!is_object($element)) { + return false; + } elseif ($element->type == 'method') + { + $eltext = str_replace($element->name . '()', $element->name, $eltext); + } + + if ($element->type == 'page' || $element->type == 'function' || $element->type == 'var') + { // we ignore all procedural pages, instead, constant, function and + // global variable pages are output + return $eltext; + } + if ($element->type == 'class') + { + return '<link linkend="'.$this->getId($element).'-summary">'.$eltext.'</link>'; + } + return '<link linkend="'.$this->getId($element).'">'.$eltext.'</link>'; + } + + /** + * Get the id value needed to allow linking + * @param mixed descendant of parserElement or parserData/parserPage + * @param boolean true to return the id for the package page + * @see parserElement, parserData, parserPage + * @return string the id value for this element type + */ + function getId(&$el, $returnpackage = false) + { + if (phpDocumentor_get_class($el) == 'parserdata') + { + $element = $this->addLink($el->parent); + $elp = $el->parent; + } elseif (!is_a($el,'abstractlink')) + { + $elp = $el; + $element = $this->addLink($el); + } else $element = $el; + $a = ''; + if (!empty($element->subpackage)) + { + $a = str_replace(array('_','.'),array('-','--'),$element->subpackage).'.'; + } + if ($returnpackage) return 'package.'.strtolower($element->category.'.'.str_replace(array('_','.'),array('-','--'),$element->package)); + switch ($element->type) + { + case 'page' : + return 'package.'.strtolower($element->category.'.'.str_replace(array('_','.'),array('-','--'),$element->package).'.'.$a.$element->fileAlias); + break; + case 'define' : + return 'package.'.strtolower($element->category.'.'.str_replace(array('_','.'),array('-','--'),$element->package).'.constants.details.'.$element->fileAlias); + break; + case 'global' : + return 'package.'.strtolower($element->category.'.'.str_replace(array('_','.'),array('-','--'),$element->package).'.globals.details.'.$element->fileAlias); + break; + case 'class' : + return 'package.'.strtolower($element->category.'.'.str_replace(array('_','.'),array('-','--'),$element->package).'.'.$a.str_replace(array('_','.'),array('-','--'),$element->name)); + break; + case 'function' : + return 'package.'.strtolower($element->category.'.'.str_replace(array('_','.'),array('-','--'),$element->package).'.'.$a.$element->fileAlias.'.'.str_replace('_','-',$element->name)); + break; + case 'method' : + return 'package.'.strtolower($element->category.'.'.str_replace(array('_','.'),array('-','--'),$element->package).'.'.$a.str_replace(array('_','.'),array('-','--'),$element->class).'.'.str_replace('_','-',$element->name)); + break; + case 'var' : + return 'package.'.strtolower($element->category.'.'.str_replace(array('_','.'),array('-','--'),$element->package).'.'.$a.str_replace(array('_','.'),array('-','--'),$element->class).'-summary.vars.'.str_replace(array('$','_'),array('var--','-'),$element->name)); + break; + case 'tutorial' : + return 'package.'.strtolower($element->category.'.'.str_replace(array('_','.'),array('-','--'),$element->package).'.'.$a.str_replace(array('_','.'),array('-','--'),$element->name)).'-tutorial'; + break; + } + } + + /** + * Create errors.html template file output + * + * This method takes all parsing errors and warnings and spits them out ordered by file and line number. + * @global ErrorTracker We'll be using it's output facility + */ + function ConvertErrorLog() + { + global $phpDocumentor_errors; + $allfiles = array(); + $files = array(); + $warnings = $phpDocumentor_errors->returnWarnings(); + $errors = $phpDocumentor_errors->returnErrors(); + $template = &$this->newSmarty(); + foreach($warnings as $warning) + { + $file = '##none'; + $linenum = 'Warning'; + if ($warning->file) + { + $file = $warning->file; + $allfiles[$file] = 1; + $linenum .= ' on line '.$warning->linenum; + } + $files[$file]['warnings'][] = array('name' => $linenum, 'listing' => $warning->data); + } + foreach($errors as $error) + { + $file = '##none'; + $linenum = 'Error'; + if ($error->file) + { + $file = $error->file; + $allfiles[$file] = 1; + $linenum .= ' on line '.$error->linenum; + } + $files[$file]['errors'][] = array('name' => $linenum, 'listing' => $error->data); + } + $i=1; + $af = array(); + foreach($allfiles as $file => $num) + { + $af[$i++] = $file; + } + $allfiles = $af; + usort($allfiles,'strnatcasecmp'); + $allfiles[0] = "Post-parsing"; + foreach($allfiles as $i => $a) + { + $allfiles[$i] = array('file' => $a); + } + $out = array(); + foreach($files as $file => $data) + { + if ($file == '##none') $file = 'Post-parsing'; + $out[$file] = $data; + } + $template->assign("files",$allfiles); + $template->assign("all",$out); + $template->assign("title","phpDocumentor Parser Errors and Warnings"); + $this->setTargetDir($this->base_dir); + $this->writefile("errors.html",$template->fetch('errors.tpl')); + unset($template); + phpDocumentor_out("\n\nTo view errors and warnings, look at ".$this->base_dir. PATH_DELIMITER . "errors.html\n"); + flush(); + } + + function postProcess($text) + { + return str_replace("'", ''', htmlentities($text)); + } + + function prepareDocBlock(&$element, $nopackage = true) + { + $a = new parserStringWithInlineTags; + $a->add('no exceptions thrown'); + if (!$element->docblock->getKeyword('throws')) $element->docblock->addKeyword('throws',$a); + $tags = parent::prepareDocBlock($element, + array('staticvar' => 'note','deprec' => 'deprecated', + 'abstract' => 'abstract','TODO' => 'note', 'link' => 'see', + 'uses' => 'see', 'usedby' => 'see', 'tutorial' => 'see', + 'return' => 'returns', 'access' => false), $nopackage); + $ret = array(); + foreach($tags['tags'] as $tag) + { + if ($tag['keyword'] == 'return') + { + // hack because stupid Converter isn't doing its job + $tag['keyword'] = 'returns'; + } + $ret[$tag['keyword']][] = $tag; + } + $tags['tags'] = $ret; + $tags['sdesc'] = $this->wordwrap($tags['sdesc']); + return $tags; + } + + function getTutorialId($package,$subpackage,$tutorial,$id,$category) + { + $subpackage = (empty($subpackage) ? '' : '.'.$subpackage); + $id = (empty($id) ? '' : '.'.$id); + return 'package.'.strtolower($category.'.'.$package.$subpackage.str_replace(array('_','.'),array('-','--'),$tutorial).$id); + } + + + /** + * Retrieve a Converter-specific anchor to a segment of a source code file + * parsed via a {@tutorial tags.filesource.pkg} tag. + * + * NOTE: unused + * @param string full path to source file + * @param string name of anchor + * @param string link text, if this is a link + * @param boolean returns either a link or a destination based on this + * parameter + * @return string link to an anchor, or the anchor + */ + function getSourceAnchor($sourcefile,$anchor,$text = '',$link = false) + { + return ''; + } + + function Br($input) + { + return "$input\n"; + } + + function getCData($value) + { + return '<![CDATA['.$value.']]>'; + } + + function ProgramExample($listing, $tutorial = false, $inlinesourceparse = null/*false*/, + $class = null/*false*/, $linenum = null/*false*/, $filesourcepath = null/*false*/, $origsource = null) + { + if ($origsource !== null) { + $listing = $origsource; + } + if (!tokenizer_ext) + { + $listing = $this->getCData($listing); + } + return '<programlisting role="php">' . $this->getCData($listing) . '</programlisting>'; + } + + /** + * Does nothing - use tutorials for DocBook + * @param parserPackagePage + */ + function convertPackagePage(&$element) + { + } + + /** + * Convert tutorials for output + * @param parserTutorial + */ + function convertTutorial(&$element) + { + $template = &parent::convertTutorial($element); + phpDocumentor_out("\n"); + flush(); + $x = $element->Convert($this,false); + if ($element->ini) + { // add child tutorial list to the tutorial through a slight hack :) + $subtutorials = ''; + $b = ''; + if (!empty($element->subpackage)) $b = '.'.$element->subpackage; + foreach($element->ini['Linked Tutorials'] as $child) + { + $subtutorials .= ' &'.$element->category.'.'.$element->package.$b.'.'.str_replace(array('_','.'),array('-','--'),$child).'-'.$element->tutorial_type."-tutorial;\n"; + } + $x = str_replace('</refsect1></refentry>','</refsect1> + <refsect1> + <title>Related Docs</title> + <para> +'.$subtutorials. +' </para> + </refsect1></refentry>',$x); + } + $template->assign('contents',$x); + $contents = $template->fetch('tutorial.tpl'); + $a = ''; + if ($element->subpackage) $a = PATH_DELIMITER . $element->subpackage; + phpDocumentor_out("\n"); + flush(); + $this->setTargetDir($this->base_dir . PATH_DELIMITER . str_replace(array('_','.'),array('-','--'),strtolower($element->category)) + . PATH_DELIMITER . strtolower(str_replace(array('_','.'),array('-','--'),$element->package) . $a)); + $this->writeFile(str_replace(array('_','.'),array('-','--'),strtolower($element->name)).'-tutorial.xml', + '<!-- $' . "Revision$ -->\n" . $contents); + } + + /** + * Does nothing in this converter + * @param parserVar + */ + function convertVar(&$element) + { + return; + $docblock = $this->prepareDocBlock($element); + $b = 'mixed'; + if ($element->docblock->var) + { + $b = $element->docblock->var->converted_returnType; + } +// var_dump($this->getFormattedOverrides($element)); + if (isset($this->template_options['separatepage']) && $this->template_options['separatepage']) + $this->class_summary->append('vars',array('sdesc' => $docblock['sdesc'], + 'desc' => $docblock['desc'], + 'tags' => $docblock['tags'], + 'var_name' => $this->type_adjust($element->getName()), + 'var_default' => htmlspecialchars($element->getValue()), + 'var_type' => $b, + 'var_overrides' => $this->getFormattedOverrides($element), + 'line_number' => $element->getLineNumber(), + 'id' => $this->getId($element))); + else + $this->class_data->append('vars',array('sdesc' => $docblock['sdesc'], + 'desc' => $docblock['desc'], + 'tags' => $docblock['tags'], + 'var_name' => $this->type_adjust($element->getName()), + 'var_default' => htmlspecialchars($element->getValue()), + 'var_type' => $b, + 'var_overrides' => $this->getFormattedOverrides($element), + 'line_number' => $element->getLineNumber(), + 'id' => $this->getId($element))); + } + + /** + * Converts class for template output + * @param parserClass + * @uses flushPackageXml() creates packagename.xml file when all classes in + * a package have been converted + */ + function convertClass(&$element) + { + $this->flushPackageXml($element); + parent::convertClass($element); + $docblock = $this->prepareDocBlock($element); + $this->method_data = array(); + $this->class_dir = str_replace(array('_','.'),array('-','--'),$element->docblock->package); + $this->package = $element->docblock->package; + $this->category = strtolower($element->docblock->category); + if (!empty($element->docblock->subpackage)) $this->class_dir .= PATH_DELIMITER . $element->docblock->subpackage; + $docblock = $this->prepareDocBlock($element,false); + $this->class_data->assign("sdesc",$docblock['sdesc']); + $this->class_data->assign("desc",$docblock['desc']); + $this->class_data->assign("tags",$docblock['tags']); + + $this->class_data->assign("source_location",$element->getSourceLocation($this,$this->template_options['usepear'])); + $this->class_data->assign("id",$this->getId($element)); + $this->class_data->assign("method_ids",array()); + $this->left[$this->package][] = array('link' => $this->getId($element).'-summary'); + if ($t = $element->getTutorial()) + { + $this->class_data->append("method_ids",$this->getId($t)); + } + + if (isset($this->template_options['separatepage']) && $this->template_options['separatepage']) + { + $this->class_summary = &$this->newSmarty(true); + if ($t = $element->getTutorial()) + { + $this->class_summary->assign("tutorial",$this->returnSee($t)); + } + + $this->class_summary->assign("class_name",$this->type_adjust($element->getName())); + $this->class_summary->assign("sdesc",$docblock['sdesc']); + $this->class_summary->assign("desc",$docblock['desc']); + $this->class_summary->assign("tags",$docblock['tags']); + $this->class_summary->assign("vars",array()); + $this->class_summary->assign("methods",array()); + $this->class_summary->assign("package",$element->docblock->package); + + $this->class_summary->assign("children", $this->generateChildClassList($element)); + $this->class_summary->assign("class_tree", $this->generateFormattedClassTree($element)); + $this->class_summary->assign("conflicts", $this->getFormattedConflicts($element,"classes")); + + $this->class_summary->assign("source_location",$element->getSourceLocation($this,$this->template_options['usepear'])); + $this->class_summary->assign("id",$this->getId($element).'-summary'); + $this->class_data->append("method_ids",$this->getId($element).'.'.strtolower(str_replace('_','-',$element->getName())).'-summary'); + $inherited_methods = $this->getFormattedInheritedMethods($element); + if (!empty($inherited_methods)) + { + $this->class_summary->assign("imethods",$inherited_methods); + } + $inherited_vars = $this->getFormattedInheritedVars($element); + // variables are irrelevant in peardoc2 + if (false)//!empty($inherited_vars)) + { + $this->class_summary->assign("ivars",$inherited_vars); + } + $this->addSummaryToPackageXml($this->class_summary->fetch('class_summary.tpl')); + } + $this->sourceloc = $element->getSourceLocation($this,$this->template_options['usepear']); + } + + /** + * Converts method for template output + * @see prepareDocBlock(), parserMethod::getFunctionCall(), getFormattedDescMethods(), getFormattedOverrides() + * @param parserMethod + */ + function convertMethod(&$element) + { + $docblock = $this->prepareDocBlock($element); + $returntype = 'void'; + if ($element->docblock->return) + { + $a = $element->docblock->return->Convert($this); + $returntype = $element->docblock->return->converted_returnType; + if ($returntype != $element->docblock->return->returnType) + { + $returntype = "<replaceable>$returntype</replaceable>"; + } + } + $params = array(); + if (count($element->docblock->params)) + foreach($element->docblock->params as $param => $val) + { + $a = $val->Convert($this); + $b = explode(' ',$a); + $c = ''; + foreach($b as $blah) { + if (!empty($c)) { + $c .= ' '; + } + $c .= str_replace(array('true', 'false', 'null'), array('&true;', '&false;', '&null;'), $blah); + } + $params[$param] = array("var" => $param,"datatype" => str_replace(array('true', 'false', 'null'), array('&true;', '&false;', '&null;'), + $val->returnType), "cdatatype" => $val->converted_returnType,"data" => $this->wordwrap($c)); + } + + $call = $element->getIntricateFunctionCall($this, $params); + if (isset($call['params'])) + { + foreach($call['params'] as $i => $param) + { + if (!is_string($call['params'][$i]['default'])) + { + continue; + } + $call['params'][$i]['default'] = str_replace(array('true', 'false', 'null'), array('&true;', '&false;', '&null;'), $param['default']); + } + } + $this->packagexml->append('ids','&'.$this->getId($element).';'); + $this->class_data->append('method_ids',$this->getId($element)); + $this->class_summary->append('methods',array('id' => $this->getId($element), + 'sdesc' => $docblock['sdesc'], + 'desc' => $docblock['desc'], + 'tags' => $docblock['tags'], + 'is_constructor' => $element->isConstructor, + 'function_name' => $element->getName(), + 'function_return' => $returntype, + 'function_call' => $call, + 'descmethod' => $this->getFormattedDescMethods($element), + 'method_overrides' => $this->getFormattedOverrides($element), + 'line_number' => $element->getLineNumber(), + 'params' => $params)); + $this->method_data[$i = count($this->method_data) - 1][0] = &$this->newSmarty(true); + $this->method_data[$i][1] = str_replace(array('_','.'),array('-','--'),$element->getName()); + $this->method_data[$i][0]->assign('class',$this->class); + $this->method_data[$i][0]->assign('source_location',$this->returnSee($this->getLink(basename($this->curpage->getFile())),$this->sourceloc)); + $this->method_data[$i][0]->assign('sdesc',$docblock['sdesc']); + $this->method_data[$i][0]->assign('desc',$docblock['desc']); + $this->method_data[$i][0]->assign('tags',$docblock['tags']); + $this->method_data[$i][0]->assign('function_name',$element->getName()); + $this->method_data[$i][0]->assign('function_return',$returntype); + $this->method_data[$i][0]->assign('function_call',$call); + $this->method_data[$i][0]->assign('descmethod',$this->getFormattedDescMethods($element)); + $this->method_data[$i][0]->assign('method_overrides',$this->getFormattedOverrides($element)); + $this->method_data[$i][0]->assign('params',$params); + $this->method_data[$i][0]->assign('id',$this->getId($element)); + } + + /** + * Converts function for template output - does nothing in peardoc2! + * @param parserFunction + */ + function convertFunction(&$element) + { +/* parent::convertFunction($element); + $docblock = $this->prepareDocBlock($element); + $fname = $element->getName(); + $params = array(); + if (count($element->docblock->params)) + foreach($element->docblock->params as $param => $val) + { + $a = $val->Convert($this); + $params[$param] = array("var" => $param,"datatype" => $val->converted_returnType,"data" => $a); + } + $returntype = 'void'; + if ($element->docblock->return) + { + $a = $element->docblock->return->Convert($this); + $returntype = $element->docblock->return->converted_returnType; + } + + $this->page_data->append("function_ids",$this->getId($element)); + $this->page_summary->append("function_ids",$this->getId($element)); + $this->page_summary->append('functions',array('id' => $this->getId($element), + 'sdesc' => $docblock['sdesc'], + 'desc' => $docblock['desc'], + 'tags' => $docblock['tags'], + 'function_name' => $element->getName(), + 'line_number' => $element->getLineNumber(), + 'function_return' => $returntype, + 'function_call' => $element->getIntricateFunctionCall($this,$params), + 'function_conflicts' => $this->getFormattedConflicts($element,'functions'), + 'params' => $params)); + $this->function_data[$i = count($this->function_data) - 1][0] = $this->newSmarty(true); + $this->function_data[$i][1] = $element->getName(); + $this->function_data[$i][0]->assign('sdesc',$docblock['sdesc']); + $this->function_data[$i][0]->assign('desc',$docblock['desc']); + $this->function_data[$i][0]->assign('tags',$docblock['tags']); + $this->function_data[$i][0]->assign('function_name',$fname); + $this->function_data[$i][0]->assign('line_number',$element->getLineNumber()); + $this->function_data[$i][0]->assign('function_return',$returntype); + $this->function_data[$i][0]->assign('function_call',$element->getIntricateFunctionCall($this,$params)); + $this->function_data[$i][0]->assign('function_conflicts',$this->getFormattedConflicts($element,"functions")); + $this->function_data[$i][0]->assign('params',$params); + $this->function_data[$i][0]->assign('source_location',$this->returnSee($this->getLink(basename($this->curpage->getFile())),$this->sourceloc)); + $this->function_data[$i][0]->assign('id',$this->getId($element));*/ + } + + /** + * Converts include elements for template output + * + * Completely ignored by this converter + * @param parserInclude + */ + function convertInclude(&$element) + { +/* parent::convertInclude($element, array('include_file' => '-'.strtr($element->getValue(),array('"' => '', "'" => '','.' => '-')))); + $docblock = $this->prepareDocBlock($element); + $per = $this->getIncludeValue($element->getValue(), $element->getPath()); + $this->page_summary->append('includes',array('sdesc' => $docblock['sdesc'], + 'desc' => $docblock['desc'], + 'tags' => $docblock['tags'], + 'utags' => $docblock['utags'], + 'include_name' => $element->getName(), + 'include_value' => $per, + 'line_number' => $element->getLineNumber(), + 'include_file' => '-'.strtr($element->getValue(),array('"' => '', "'" => '','.' => '-'))));*/ + } + + /** + * Converts defines for template output + * @see prepareDocBlock(), getFormattedConflicts() + * @param parserDefine + */ + function convertDefine(&$element) + { + $docblock = $this->prepareDocBlock($element); + $this->_appendDefines(array('sdesc' => $docblock['sdesc'], + 'desc' => $docblock['desc'], + 'tags' => $docblock['tags'], + 'name' => $this->postProcess($element->getName()), + 'value' => $this->postProcess($element->getValue()), + 'conflicts' => $this->getFormattedConflicts($element,"defines"), + 'line_number' => $element->getLineNumber(), + 'id' => $this->getId($element))); + } + + /** + * Append the constant information to the Smarty information + * + * Uses category, package, and current file to organize constants defined + * in a package for the constants.xml output file + * @param array + * @uses $_peardoc2_constants appends $define to them + * @access private + */ + function _appendDefines($define) + { + if (!isset($this->_peardoc2_constants[$this->category][$this->package][$this->sourceloc])) + { + $this->_peardoc2_constants[$this->category][$this->package][$this->sourceloc]['name'] = + $this->sourceloc; + $this->_peardoc2_constants[$this->category][$this->package][$this->sourceloc]['page'] = + $this->page; + } + $this->_write_constants_xml[$this->category][$this->package] = true; + $this->_peardoc2_constants[$this->category][$this->package][$this->sourceloc]['defines'][] = $define; + } + + /** + * Converts global variables for template output + * @param parserGlobal + * @see prepareDocBlock(), getFormattedConflicts() + */ + function convertGlobal(&$element) + { + $docblock = $this->prepareDocBlock($element); + $value = $this->getGlobalValue($element->getValue()); + if ($value == $element->getValue()) + { + $value = $this->ProgramExample($value); + } else + { + $value = $this->getGlobalValue('<![CDATA[' .$element->getValue() . ']]>'); + } + $this->_appendGlobals(array('sdesc' => $docblock['sdesc'], + 'desc' => $docblock['desc'], + 'tags' => $docblock['tags'], + 'name' => $this->postProcess($element->getName()), + 'link' => $element->getName(), + 'value' => $value, + 'type' => $element->getDataType($this), + 'line_number' => $element->getLineNumber(), + 'conflicts' => $this->getFormattedConflicts($element,"global variables"), + 'id' => $this->getId($element))); + } + + /** + * Append the global variable information to the Smarty information + * + * Uses category, package, and current file to organize globals defined + * in a package for the globals.xml output file + * @param array + * @uses $_peardoc2_globals appends $global to them + * @access private + */ + function _appendGlobals($global) + { + if (!isset($this->_peardoc2_globals[$this->category][$this->package][$this->sourceloc])) + { + $this->_peardoc2_globals[$this->category][$this->package][$this->sourceloc]['name'] = + $this->sourceloc; + $this->_peardoc2_globals[$this->category][$this->package][$this->sourceloc]['page'] = + $this->page; + } + $this->_write_globals_xml[$this->category][$this->package] = true; + $this->_peardoc2_globals[$this->category][$this->package][$this->sourceloc]['globals'][] = $global; + } + + /** + * converts procedural pages for template output + * @see prepareDocBlock(), getClassesOnPage() + * @param parserData + */ + function convertPage(&$element) + { + parent::convertPage($element); + $this->juststarted = true; + $this->page_dir = $element->parent->package; + $this->page = $this->getPageName($element->parent); + $this->category = strtolower($element->parent->category); + $this->sourceloc = $element->parent->getSourceLocation($this,true); + if (!empty($element->parent->subpackage)) $this->page_dir .= PATH_DELIMITER . $element->parent->subpackage; + // registering stuff on the template + } + + function getPageName(&$element) + { + return str_replace(array('/','_','.'),array('-','-','---'),$element->getSourceLocation($this,true)); + } + + /** + * returns an array containing the class inheritance tree from the root object to the class + * + * @param parserClass class variable + * @return array Format: array(root,child,child,child,...,$class) + * @uses parserClass::getParentClassTree() + */ + + function generateFormattedClassTree($class) + { + $tree = $class->getParentClassTree($this); + $out = ''; + if (count($tree) - 1) + { + $result = array($class->getName()); + $parent = $tree[$class->getName()]; + while ($parent) + { + if (is_string($parent)) { + $result[] = $parent; + break; + } + $subpackage = $parent->docblock->subpackage; + $package = $parent->docblock->package; + $x = $parent; + if (is_object($parent)) + $x = $parent->getLink($this); + if (!$x) $x = $parent->getName(); + $result[] = + $x; + if (is_object($parent)) + $parent = $tree[$parent->getName()]; + elseif (isset($tree[$parent])) + $parent = $tree[$parent]; + } + return array_reverse($result); + } else + { + return array($class->getName()); + } + } + + /** + * returns a list of child classes + * + * @param parserClass class variable + * @uses parserClass::getChildClassList() + */ + + function generateChildClassList($class) + { + $kids = $class->getChildClassList($this); + $list = array(); + if (count($kids)) + { + for($i=0; $i<count($kids); $i++) + { + $lt['link'] = '<link linkend="'.$this->getId($kids[$i]) . '-summary">'. $kids[$i]->getName().'</link>'; + $lt['sdesc'] = $kids[$i]->docblock->getSDesc($this); + $list[] = $lt; + } + } else return false; + return $list; + } + + /** @access private */ + function sortVar($a, $b) + { + return strnatcasecmp($a->getName(),$b->getName()); + } + + /** @access private */ + function sortMethod($a, $b) + { + if ($a->isConstructor) return -1; + if ($b->isConstructor) return 1; + return strnatcasecmp($a->getName(),$b->getName()); + } + + /** + * returns a template-enabled array of class trees + * + * @param string $package package to generate a class tree for + * @see $roots, HTMLConverter::getRootTree() + */ + function generateFormattedClassTrees($package) + { + if (!isset($this->roots['normal'][$package]) && + !isset($this->roots['special'][$package])) { + return array(); + } + $trees = array(); + if (isset($this->roots['normal'][$package])) { + $roots = $this->roots['normal'][$package]; + for($i=0;$i<count($roots);$i++) + { + $root = $this->classes->getClassByPackage($roots[$i], $package); + if ($root && $root->isInterface()) { + continue; + } + $trees[] = array('class' => $roots[$i],'class_tree' => "<ul>\n".$this->getRootTree($this->getSortedClassTreeFromClass($roots[$i],$package,''),$package)."</ul>\n"); + } + } + if (isset($this->roots['special'][$package])) { + $roots = $this->roots['special'][$package]; + foreach ($roots as $parent => $classes) { + $thistree = ''; + foreach ($classes as $classinfo) { + $root = $this->classes->getClassByPackage($classinfo, $package); + if ($root && $root->isInterface()) { + continue; + } + $thistree .= + $this->getRootTree( + $this->getSortedClassTreeFromClass( + $classinfo, + $package, + ''), + $package, + true); + } + if (!$thistree) { + continue; + } + $trees[] = array( + 'class' => $parent, + 'class_tree' => "<ul>\n" . $thistree . "</ul>\n" + ); + } + } + return $trees; + } + + /** + * returns a template-enabled array of interface inheritance trees + * + * @param string $package package to generate a class tree for + * @see $roots, HTMLConverter::getRootTree() + */ + function generateFormattedInterfaceTrees($package) + { + if (!isset($this->roots['normal'][$package]) && + !isset($this->roots['special'][$package])) { + return array(); + } + $trees = array(); + if (isset($this->roots['normal'][$package])) { + $roots = $this->roots['normal'][$package]; + for($i=0;$i<count($roots);$i++) + { + $root = $this->classes->getClassByPackage($roots[$i], $package); + if ($root && !$root->isInterface()) { + continue; + } + $trees[] = array('class' => $roots[$i],'class_tree' => "<ul>\n".$this->getRootTree($this->getSortedClassTreeFromClass($roots[$i],$package,''),$package)."</ul>\n"); + } + } + if (isset($this->roots['special'][$package])) { + $roots = $this->roots['special'][$package]; + foreach ($roots as $parent => $classes) { + $thistree = ''; + foreach ($classes as $classinfo) { + $root = $this->classes->getClassByPackage($classinfo, $package); + if ($root && !$root->isInterface()) { + continue; + } + $thistree .= + $this->getRootTree( + $this->getSortedClassTreeFromClass( + $classinfo, + $package, + ''), + $package, + true); + } + if (!$thistree) { + continue; + } + $trees[] = array( + 'class' => $parent, + 'class_tree' => "<ul>\n" . $thistree . "</ul>\n" + ); + } + } + return $trees; + } + + /** + * return formatted class tree for the Class Trees page + * + * @param array $tree output from {@link getSortedClassTreeFromClass()} + * @param string $package package + * @param boolean $nounknownparent if true, an object's parent will not be checked + * @see Classes::$definitechild, generateFormattedClassTrees() + * @return string + */ + function getRootTree($tree, $package, $noparent = false) + { + if (!$tree) return ''; + $my_tree = ''; + $cur = '#root'; + $lastcur = array(false); + $kids = array(); + $dopar = false; + if (!$noparent && $tree[$cur]['parent']) + { + $dopar = true; + if (!is_object($tree[$cur]['parent'])) + { +// debug("parent ".$tree[$cur]['parent']." not found"); + $my_tree .= '<listitem>' . $tree[$cur]['parent'] .'<itemizedlist>'; + } + else + { +// debug("parent ".$this->returnSee($tree[$cur]['parent'], false, false)." in other package"); + $my_tree .= '<listitem>' . $this->returnSee($tree[$cur]['parent'], false, false); + if ($tree[$cur]['parent']->package != $package) $my_tree .= ' <emphasis>(Different package)</emphasis><itemizedlist>'; + } + } + do + { +// fancy_debug($cur,$lastcur,$kids); + if (count($tree[$cur]['children'])) + { +// debug("$cur has children"); + if (!isset($kids[$cur])) + { +// debug("set $cur kids"); + $kids[$cur] = 1; + $my_tree .= '<listitem>'.$this->returnSee($tree[$cur]['link'], false, false); + $my_tree .= '<itemizedlist>'."\n"; + } + array_push($lastcur,$cur); + list(,$cur) = each($tree[$cur]['children']); +// var_dump('listed',$cur); + if ($cur) + { + $cur = $cur['package'] . '#' . $cur['class']; +// debug("set cur to child $cur"); +// $my_tree .= '<li>'.$this->returnSee($tree[$cur]['link'], false, false); + continue; + } else + { +// debug("end of children for $cur"); + $cur = array_pop($lastcur); + $cur = array_pop($lastcur); + $my_tree .= '</itemizedlist></listitem>'."\n"; + if ($dopar && ($cur == '#root' || !$cur)) $my_tree .= '</itemizedlist></listitem>'; + } + } else + { +// debug("$cur has no children"); + $my_tree .= '<listitem>'.$this->returnSee($tree[$cur]['link'], false, false)."</listitem>"; + if ($dopar && $cur == '#root') $my_tree .= '</itemizedlist></listitem>'; + $cur = array_pop($lastcur); + } + } while ($cur); + return $my_tree; + } + /** + * does nothing + */ + function generateElementIndex() + { + } + + function setTemplateDir($dir) + { + Converter::setTemplateDir($dir); + $this->smarty_dir = $this->templateDir; + } + + /** + * Generate alphabetical index of all elements by package and subpackage + * + * @param string $package name of a package + * @see $pkg_elements, walk(), generatePkgElementIndexes() + */ + function generatePkgElementIndex($package) + { + } + + /** + * + * @see generatePkgElementIndex() + */ + function generatePkgElementIndexes() + { + } + + /** + * @param string name of class + * @param string package name + * @param string full path to look in (used in index generation) + * @param boolean deprecated + * @param boolean return just the URL, or enclose it in an html a tag + * @return mixed false if not found, or an html a link to the class's documentation + * @see parent::getClassLink() + */ + function getClassLink($expr,$package, $file = false,$text = false, $local = true, $with_a = true) + { + $a = Converter::getClassLink($expr,$package,$file); + if (!$a) return false; + return $this->returnSee($a, $text, $local, $with_a); + } + + /** + * @param string name of function + * @param string package name + * @param string full path to look in (used in index generation) + * @param boolean deprecated + * @param boolean return just the URL, or enclose it in an html a tag + * @return mixed false if not found, or an html a link to the function's documentation + * @see parent::getFunctionLink() + */ + function getFunctionLink($expr,$package, $file = false,$text = false, $local = true) + { + $a = Converter::getFunctionLink($expr,$package,$file); + if (!$a) return false; + return $this->returnSee($a, $text, $local); + } + + /** + * @param string name of define + * @param string package name + * @param string full path to look in (used in index generation) + * @param boolean deprecated + * @param boolean return just the URL, or enclose it in an html a tag + * @return mixed false if not found, or an html a link to the define's documentation + * @see parent::getDefineLink() + */ + function getDefineLink($expr,$package, $file = false,$text = false, $local = true) + { + $a = Converter::getDefineLink($expr,$package,$file); + if (!$a) return false; + return $this->returnSee($a, $text, $local); + } + + /** + * @param string name of global variable + * @param string package name + * @param string full path to look in (used in index generation) + * @param boolean deprecated + * @param boolean return just the URL, or enclose it in an html a tag + * @return mixed false if not found, or an html a link to the global variable's documentation + * @see parent::getGlobalLink() + */ + function getGlobalLink($expr,$package, $file = false,$text = false, $local = true) + { + $a = Converter::getGlobalLink($expr,$package,$file); + if (!$a) return false; + return $this->returnSee($a, $text, $local); + } + + /** + * @param string name of procedural page + * @param string package name + * @param string full path to look in (used in index generation) + * @param boolean deprecated + * @param boolean return just the URL, or enclose it in an html a tag + * @return mixed false if not found, or an html a link to the procedural page's documentation + * @see parent::getPageLink() + */ + function getPageLink($expr,$package, $path = false,$text = false, $local = true) + { + $a = Converter::getPageLink($expr,$package,$path); + if (!$a) return false; + return $this->returnSee($a, $text, $local); + } + + /** + * @param string name of method + * @param string class containing method + * @param string package name + * @param string full path to look in (used in index generation) + * @param boolean deprecated + * @param boolean return just the URL, or enclose it in an html a tag + * @return mixed false if not found, or an html a link to the method's documentation + * @see parent::getMethodLink() + */ + function getMethodLink($expr,$class,$package, $file = false,$text = false, $local = true) + { + $a = Converter::getMethodLink($expr,$class,$package,$file); + if (!$a) return false; + return $this->returnSee($a, $text, $local); + } + + /** + * @param string name of var + * @param string class containing var + * @param string package name + * @param string full path to look in (used in index generation) + * @param boolean deprecated + * @param boolean return just the URL, or enclose it in an html a tag + * @return mixed false if not found, or an html a link to the var's documentation + * @see parent::getVarLink() + */ + function getVarLink($expr,$class,$package, $file = false,$text = false, $local = true) + { + $a = Converter::getVarLink($expr,$class,$package,$file); + if (!$a) return false; + return $this->returnSee($a, $text, $local); + } + + /** + * does a nat case sort on the specified second level value of the array + * + * @param mixed $a + * @param mixed $b + * @return int + */ + function rcNatCmp ($a, $b) + { + $aa = strtoupper($a[$this->rcnatcmpkey]); + $bb = strtoupper($b[$this->rcnatcmpkey]); + + return strnatcasecmp($aa, $bb); + } + + /** + * does a nat case sort on the specified second level value of the array. + * this one puts constructors first + * + * @param mixed $a + * @param mixed $b + * @return int + */ + function rcNatCmp1 ($a, $b) + { + $aa = strtoupper($a[$this->rcnatcmpkey]); + $bb = strtoupper($b[$this->rcnatcmpkey]); + + if (strpos($aa,'CONSTRUCTOR') === 0) + { + return -1; + } + if (strpos($bb,'CONSTRUCTOR') === 0) + { + return 1; + } + if (strpos($aa,strtoupper($this->class)) === 0) + { + return -1; + } + if (strpos($bb,strtoupper($this->class)) === 0) + { + return -1; + } + return strnatcasecmp($aa, $bb); + } + + function wordwrap($string) + { + return wordwrap($string); + } + + /** + * Generate the constants.xml, packagename.xml, and globals.xml files + */ + function Output() + { + $this->flushPackageXml(false); + $templ = &$this->newSmarty(); + $categories = array(); + $packages = array_flip($this->all_packages); + foreach($this->packagecategories as $package => $category) + { + $categories[$category]['package.'.$category.'.'.str_replace('_','-',strtolower($package ))] = 1; + if (isset($packages[$package])) unset($packages[$package]); + } + $category = $GLOBALS['phpDocumentor_DefaultCategoryName']; + foreach($packages as $package) + { + $categories[$category]['package.'.$category.'.'.str_replace('_','-',strtolower($package ))] = 1; + } + foreach($categories as $category => $ids) + { + $templ->assign('id','package.'.$category); + $templ->assign('ids',array()); + $templ->assign('category',$category); + $this->setTargetDir($this->base_dir); + if (file_exists($this->base_dir . PATH_DELIMITER . strtolower($category ) . '.xml')) + { + $contents = @file($this->base_dir . PATH_DELIMITER . strtolower($category ) . '.xml'); + if (is_array($contents)) + { + $found = false; + foreach($contents as $i => $line) + { + $line = trim($line); + if (strlen($line) && $line{0} == '&') + { + $found = $i; + if (in_array(str_replace(array ('&', ';'), array ('', ''), trim($line )), array_keys($ids ))) + { + unset($ids[str_replace(array('&', ';'), array('', ''), trim($line))]); + } + } + if ($found !== false && (!strlen($line) || $line{0} != '&')) + { + break; + } + } + $newids = array(); + foreach($ids as $id => $unll) + { + $newids[] = ' &' . $id . ";\n"; + } + $newcontents = array_merge(array_slice($contents, 0, $i), $newids); + $newcontents = array_merge($newcontents, array_slice($contents, $i)); + } + $categorycontents = implode($newcontents, ''); + } else + { + foreach($ids as $id => $unll) + { + if (!in_array($id, $templ->_tpl_vars['ids'])) + { + $templ->append('ids',$id); + } + } + $categorycontents = '<!-- $' . "Revision$ -->\n" . $templ->fetch('category.tpl'); + } + $this->writefile(strtolower($category) . '.xml', + $categorycontents); + phpDocumentor_out("\n"); + flush(); + } + $my = &$this->newSmarty(); + if ($this->_peardoc2_constants) + { + foreach($this->_peardoc2_constants as $category => $r) + { + foreach($r as $package => $s) + { + $my->assign('id','package.'.strtolower($category.'.'.str_replace('_','-',strtolower($package ))).'.constants'); + $my->assign('package',$package); + $defines = array(); + foreach($s as $file => $t) + { + $arr = array(); + $arr['name'] = $file; + $arr['page'] = strtolower($t['page']); + $arr['defines'] = $t['defines']; + $defines[] = $arr; + } + $my->assign('defines',$defines); + $this->setTargetDir($this->base_dir . PATH_DELIMITER . $category + . PATH_DELIMITER . strtolower(str_replace('_','-',strtolower($package )))); + $this->writefile('constants.xml', + '<!-- $' . "Revision$ -->\n" . $my->fetch('constants.tpl')); + $my->clear_all_assign(); + } + } + $this->_peardoc2_constants = false; + } + if ($this->_peardoc2_globals) + { + foreach($this->_peardoc2_globals as $category => $r) + { + foreach($r as $package => $s) + { + $my->assign('id','package.'.strtolower($category.'.'.str_replace('_','-',strtolower($package ))).'.globals'); + $my->assign('package',$package); + $defines = array(); + foreach($s as $file => $t) + { + $arr = array(); + $arr['name'] = $file; + $arr['page'] = strtolower($t['page']); + $arr['globals'] = $t['globals']; + $defines[] = $arr; + } + $my->assign('globals',$defines); + $this->setTargetDir($this->base_dir . PATH_DELIMITER . $category + . PATH_DELIMITER . strtolower(str_replace('_','-',strtolower($package )))); + $this->writefile('globals.xml', + '<!-- $' . "Revision$ -->\n" . $my->fetch('globals.tpl')); + $my->clear_all_assign(); + } + } + $this->_peardoc2_globals = false; + } + } +} +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/options.ini b/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/options.ini new file mode 100755 index 00000000..cdb08f38 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/options.ini @@ -0,0 +1,39 @@ +;; XML DocBook peardoc2 options +usepear = true + +;; preserve package page docbook tags that don't have an entry in the ppage section +;; we preserve every tag, as this is how it works +;; this is after all a docbook converter! +preservedocbooktags = true + +;; separate file for class and page docblocks and minor details (variables, globals, defines) +separatepage = true + +[typechanging] +true = &true; +false = &false; +null = &null; + +[desctranslate] +ul = "\n<itemizedlist>" +/ul = "</itemizedlist>\n" +ol = "\n<orderedlist>" +/ol = "</orderedlist>\n" +li = "\n<listitem><para>" +/li = "</para></listitem>\n" +code = <programlisting role="php-highlighted"> +/code = "</programlisting>\n" +pre = <![CDATA[ +/pre = ]]> +p = <para> +/p = "</para>\n" +b = <emphasis> +/b = </emphasis> +i = <important> +/i = </important> +var = <varname> +/var = </varname> +kbd = <screen> +/kbd = </screen> +samp = <example> +/samp = "</example>\n" diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/templates/category.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/templates/category.tpl new file mode 100755 index 00000000..7c95b11e --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/templates/category.tpl @@ -0,0 +1,26 @@ +<chapter id="{$id}"> +<title>{$category}</title> +{section name=ids loop=$ids} +&{$ids[ids]}; +{/section} +</chapter> +<!-- Generated by phpDocumentor v {$phpdocversion} {$phpdocwebsite} --> +<!-- Keep this comment at the end of the file +Local variables: +mode: sgml +sgml-omittag:t +sgml-shorttag:t +sgml-minimize-attributes:nil +sgml-always-quote-attributes:t +sgml-indent-step:1 +sgml-indent-data:t +sgml-parent-document:nil +sgml-default-dtd-file:"../../../../manual.ced" +sgml-exposed-tags:nil +sgml-local-catalogs:nil +sgml-local-ecat-files:nil +End: +vim600: syn=xml fen fdm=syntax fdl=2 si +vim: et tw=78 syn=sgml +vi: ts=1 sw=1 +-->
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/templates/class.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/templates/class.tpl new file mode 100755 index 00000000..72b9fea2 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/templates/class.tpl @@ -0,0 +1,29 @@ +<refentry id="{$id}"> + <refnamediv> + <refname>{$class_name}</refname> + <refpurpose>{$classname}</refpurpose> + </refnamediv> +{section name=methods loop=$method_ids} +&{$method_ids[methods]}; +{/section} +</refentry> +<!-- Generated by phpDocumentor v {$phpdocversion} {$phpdocwebsite} --> +<!-- Keep this comment at the end of the file +Local variables: +mode: sgml +sgml-omittag:t +sgml-shorttag:t +sgml-minimize-attributes:nil +sgml-always-quote-attributes:t +sgml-indent-step:1 +sgml-indent-data:t +sgml-parent-document:nil +sgml-default-dtd-file:"../../../../manual.ced" +sgml-exposed-tags:nil +sgml-local-catalogs:nil +sgml-local-ecat-files:nil +End: +vim600: syn=xml fen fdm=syntax fdl=2 si +vim: et tw=78 syn=sgml +vi: ts=1 sw=1 +-->
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/templates/class_summary.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/templates/class_summary.tpl new file mode 100755 index 00000000..03b42703 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/templates/class_summary.tpl @@ -0,0 +1,53 @@ +<refentry id="{$id}"> + <refnamediv> + <refname>Class Summary {$class_name}</refname> + <refpurpose>{$sdesc}</refpurpose> + </refnamediv> +<refsect1> + <title>{$sdesc}</title> + {$desc|default:"¬documented;"} +</refsect1> +<refsect1> +<title>Class Trees for {$class_name}</title> + <para> + {section name=tree loop=$class_tree} + {section name=mine loop=$class_tree[tree]} {/section}<itemizedlist> + {section name=mine loop=$class_tree[tree]} {/section} <listitem><para> + {section name=mine loop=$class_tree[tree]} {/section} {$class_tree[tree]} + {/section} + {section name=tree loop=$class_tree} + {section name=mine loop=$class_tree[tree]} {/section}</para></listitem> + </itemizedlist> + {/section} + </para> +{if $children} + <para> + <table> + <title>Classes that extend {$class_name}</title> + <tgroup cols="2"> + <thead> + <row> + <entry>Class</entry> + <entry>Summary</entry> + </row> + </thead> + <tbody> +{section name=kids loop=$children} + <row> + <entry>{$children[kids].link}</entry> + <entry>{$children[kids].sdesc}</entry> + </row> +{/section} + </tbody> + </tgroup> + </table> + </para> +{/if} +{if $imethods} + <para> + {$class_name} Inherited Methods + </para> +{include file="imethods.tpl" ivars=$ivars} +{/if} +</refsect1> +</refentry> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/templates/constants.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/templates/constants.tpl new file mode 100755 index 00000000..24588e88 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/templates/constants.tpl @@ -0,0 +1,68 @@ +<refentry id="{$id}"> + <refnamediv> + <refname>Package {$package} Constants</refname> + <refpurpose>Constants defined in and used by {$package}</refpurpose> + </refnamediv> + <refsect1 id="{$id}.details"> + <title>All Constants</title> +{section name=files loop=$defines} + <refsect2 id="{$id}.details.{$defines[files].page}"> + <title> + Constants defined in {$defines[files].name} + </title> + <para> + <table> + <title>Constants defined in {$defines[files].name}</title> +{section name=d loop=$defines[files].defines} +{if $defines[files].defines[d].conflicts}{assign var="defineconflict" value=true}{/if} +{/section} + <tgroup cols="{if $defineconflict}4{else}3{/if}"> + <thead> + <row> + <entry>Name</entry> + <entry>Value</entry> + <entry>Line Number</entry> +{if $defineconflict} + <entry>Conflicts with other packages</entry> +{/if} + </row> + </thead> + <tbody> +{section name=d loop=$defines[files].defines} + <row> + <entry>{$defines[files].defines[d].name}</entry> + <entry>{$defines[files].defines[d].value}</entry> + <entry>{$defines[files].defines[d].line_number}</entry> +{if $defineconflict} + <entry>{$defines[files].defines[d].conflicts}</entry> +{/if} + </row> +{/section} + </tbody> + </tgroup> + </table> + </para> + </refsect2> +{/section} + </refsect1> +</refentry> +<!-- Generated by phpDocumentor v {$phpdocversion} {$phpdocwebsite} --> +<!-- Keep this comment at the end of the file +Local variables: +mode: sgml +sgml-omittag:t +sgml-shorttag:t +sgml-minimize-attributes:nil +sgml-always-quote-attributes:t +sgml-indent-step:1 +sgml-indent-data:t +sgml-parent-document:nil +sgml-default-dtd-file:"../../../../manual.ced" +sgml-exposed-tags:nil +sgml-local-catalogs:nil +sgml-local-ecat-files:nil +End: +vim600: syn=xml fen fdm=syntax fdl=2 si +vim: et tw=78 syn=sgml +vi: ts=1 sw=1 +--> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/templates/docblock.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/templates/docblock.tpl new file mode 100755 index 00000000..ab140b3b --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/templates/docblock.tpl @@ -0,0 +1,116 @@ +{if $var} +{assign var="num" value="refsect3"} +{else} +{assign var="num" value="refsect1"} +{/if} + <{$num} id="{$id}.desc"> + &title.desc; +{if $line_number} + <simpara> + Source on line #: {if $class_slink}{$class_slink}{else}{$line_number}{/if} + </simpara> +{/if} +{if $var} + <simpara> + {$sdesc|default:"¬documented;"} + </simpara> +{/if} +{if $desc} + {$desc} +{else} +{if $var && $sdesc} +{else} + ¬documented; +{/if} +{/if} + </{$num}> +{if $params} + <{$num} id="{$id}.param"> + &title.param; + <para> +{section name=params loop=$params} + <variablelist> + <varlistentry> + <term> + {assign var="temp" value=$params[params].name} + {if strpos($params[params].type, '|') || + strpos($cparams.$temp.cdatatype, '>')} + <type>{$params[params].type}</type> + {else} + {if $params[params].type == 'integer'} + {assign var="paramtype" value="int"} + {elseif $params[params].type == 'boolean'} + {assign var="paramtype" value="bool"} + {else} + {assign var="paramtype" value=$params[params].type} + {/if} + {if in_array($paramtype, array('bool', 'int', 'float', 'string', 'mixed', 'object', 'resource', 'array', 'res'))} + &type.{$paramtype}; + {else} + <type>{$paramtype}</type> + {/if} + {/if} + <parameter>{$params[params].name|replace:"&":"&"}</parameter> + </term> + <listitem> + <para> + {$params[params].description} + </para> + </listitem> + </varlistentry> + </variablelist> +{/section} + </para> + </{$num}> +{/if} +{foreach from=$tags item="tag" key="tagname"} +{if $tagname != 'static' && $tagname != 'author' && $tagname != 'version' && $tagname != 'copyright' && $tagname != 'package' && $tagname != 'subpackage' && $tagname != 'example'} + <{$num} id="{$id}.{$tagname}"> + &title.{$tagname}; + {section name=t loop=$tag} + <para> + <emphasis>{$tag[t].keyword}</emphasis> {$tag[t].data} + </para> + {/section} + </{$num}> +{elseif $tagname == 'deprecated'} + <{$num} id="{$id}.{$tagname}"> + &title.note; + ¬e.deprecated; + {section name=t loop=$tag} + <para> + {$tag[t].data} + </para> + {/section} + </{$num}> +{elseif $tagname == 'static'} +{assign var="canstatic" value=true} +{elseif $tagname == 'example'} + <{$num} id="{$id}.{$tagname}"> + <title>Examples</title> + {section name=t loop=$tag} + {$tag[t].data} + {/section} + </{$num}> +{elseif $tagname != 'package' && $tagname != 'subpackage'} + <{$num} id="{$id}.{$tagname}"> + <title>{$tagname}</title>{* <-- need language snippets support for phpDocumentor, will use this instead *} + {section name=t loop=$tag} + <para> + <emphasis>{$tagname}</emphasis> {$tag[t].data} + </para> + {/section} + </{$num}> +{/if} +{/foreach} +{if $canstatic} + <{$num} id="{$id}.note"> + &title.note; + ¬e.canstatic; + </{$num}> +{else} + <{$num} id="{$id}.note"> + &title.note; + ¬e.notstatic; + </{$num}> +{/if} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/templates/errors.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/templates/errors.tpl new file mode 100644 index 00000000..0f526584 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/templates/errors.tpl @@ -0,0 +1,21 @@ +{include file="header.tpl" noleftindex=true} +{section name=files loop=$files} +<a href="#{$files[files].file}">{$files[files].file}</a><br> +{/section} +{foreach key=file item=issues from=$all} +<a name="{$file}"></a> +<h1>{$file}</h1> +{if count($issues.warnings)} +<h2>Warnings:</h2><br> +{section name=warnings loop=$issues.warnings} +<b>{$issues.warnings[warnings].name}</b> - {$issues.warnings[warnings].listing}<br> +{/section} +{/if} +{if count($issues.errors)} +<h2>Errors:</h2><br> +{section name=errors loop=$issues.errors} +<b>{$issues.errors[errors].name}</b> - {$issues.errors[errors].listing}<br> +{/section} +{/if} +{/foreach} +{include file="footer.tpl"} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/templates/globals.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/templates/globals.tpl new file mode 100755 index 00000000..7392d87a --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/templates/globals.tpl @@ -0,0 +1,69 @@ +<refentry id="{$id}"> + <refnamediv> + <refname>Package {$package} Global Variables</refname> + <refpurpose>Global Variables defined in and used by {$package}</refpurpose> + </refnamediv> + <refsect1 id="{$id}.details"> + <title>All Global Variables</title> +{section name=files loop=$globals} + <refsect2 id="{$id}.details.{$globals[files].page}"> + <title> + Global Variables defined in {$globals[files].name} + </title> + <para> + <table> + <title>Global Variables defined in {$globals[files].name}</title> +{section name=d loop=$globals[files].globals} +{if $globals[files].globals[d].conflicts}{assign var="globalconflict" value=true}{/if} +{/section} + <tgroup cols="{if $globalconflict}4{else}3{/if}"> + <thead> + <row> + <entry>Name</entry> + <entry>Value</entry> + <entry>Line Number</entry> +{if $globalconflict} + <entry>Conflicts with other packages</entry> +{/if} + </row> + </thead> + <tbody> +{section name=d loop=$globals} + <row> + +<entry>{$globals[files].globals[d].name}</entry> + <entry>{$globals[files].globals[d].value}</entry> + <entry>{$globals[files].globals[d].line_number}</entry> +{if $globalconflict} + <entry>{$globals[files].globals[d].conflicts}</entry> +{/if} + </row> +{/section} + </tbody> + </tgroup> + </table> + </para> + </refsect2> +{/section} + </refsect1> +</refentry> +<!-- Generated by phpDocumentor v {$phpdocversion} {$phpdocwebsite} --> +<!-- Keep this comment at the end of the file +Local variables: +mode: sgml +sgml-omittag:t +sgml-shorttag:t +sgml-minimize-attributes:nil +sgml-always-quote-attributes:t +sgml-indent-step:1 +sgml-indent-data:t +sgml-parent-document:nil +sgml-default-dtd-file:"../../../../manual.ced" +sgml-exposed-tags:nil +sgml-local-catalogs:nil +sgml-local-ecat-files:nil +End: +vim600: syn=xml fen fdm=syntax fdl=2 si +vim: et tw=78 syn=sgml +vi: ts=1 sw=1 +--> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/templates/imethods.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/templates/imethods.tpl new file mode 100755 index 00000000..c0be1bf7 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/templates/imethods.tpl @@ -0,0 +1,24 @@ + <para> +{section name=classes loop=$imethods} + <table> + <title>Inherited from {$imethods[classes].parent_class}</title> + <tgroup cols="2"> + <thead> + <row> + <entry>Method Name</entry> + <entry>Summary</entry> + </row> + </thead> + <tbody> +{section name=m loop=$imethods[classes].imethods} + <row> + <entry>{if $imethods[classes].imethods[m].constructor} Constructor{/if} {$imethods[classes].imethods[m].link}</entry> + <entry>{$imethods[classes].imethods[m].sdesc|default:"¬documented;"}</entry> + </row> +{/section} + </tbody> + </tgroup> + </table> +{/section} + </para> + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/templates/ivars.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/templates/ivars.tpl new file mode 100755 index 00000000..3b9eecf9 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/templates/ivars.tpl @@ -0,0 +1,26 @@ + <para> +{section name=classes loop=$ivars} + <table> + <title>Inherited from {$ivars[classes].parent_class}</title> + <tgroup cols="2"> + <thead> + <row> + <entry>Variable Name</entry> + <entry>Summary</entry> + <entry>Default Value</entry> + </row> + </thead> + <tbody> +{section name=m loop=$ivars[classes].ivars} + <row> + <entry>{if $ivars[classes].ivars[m].constructor} Constructor{/if} {$ivars[classes].ivars[m].link}</entry> + <entry>{$ivars[classes].ivars[m].sdesc|default:"¬documented;"}</entry> + <entry>{$ivars[classes].ivars[m].default|default:"&null;"}</entry> + </row> +{/section} + </tbody> + </tgroup> + </table> +{/section} + </para> + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/templates/method.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/templates/method.tpl new file mode 100755 index 00000000..fc53f5dc --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/templates/method.tpl @@ -0,0 +1,45 @@ +<refentry id="{$id}"> + <refnamediv> + <refname>{if $function_call.constructor}constructor {/if}<function>{$class}::{$function_name}</function></refname> + <refpurpose>{$sdesc|default:$function_name}</refpurpose> + </refnamediv> + <refsynopsisdiv> + <funcsynopsis> + <funcsynopsisinfo> + require_once '{$source_location}'; + </funcsynopsisinfo> + <funcprototype> + <funcdef>{$function_return}{if $function_call.returnsref}&{/if} + {if $function_call.constructor}constructor {/if}<function>{$class}::{$function_name}</function></funcdef> +{if count($function_call.params)} +{section name=params loop=$function_call.params} + <paramdef>{if @strpos('>',$function_call.params[params].type)}<replaceable>{/if}{$function_call.params[params].type}{if @strpos('>',$function_call.params[params].type)}</replaceable>{/if} <parameter>{if $function_call.params[params].hasdefault} <optional>{/if}{$function_call.params[params].name|replace:"&":"&"}{if $function_call.params[params].hasdefault} = {$function_call.params[params].default}</optional>{/if}</parameter></paramdef> +{/section} +{else} +<paramdef></paramdef> +{/if} + </funcprototype> + </funcsynopsis> + </refsynopsisdiv> +{include file="docblock.tpl" cparams=$params params=$function_call.params desc=$desc tags=$tags} +</refentry> +<!-- Keep this comment at the end of the file +Local variables: +mode: sgml +sgml-omittag:t +sgml-shorttag:t +sgml-minimize-attributes:nil +sgml-always-quote-attributes:t +sgml-indent-step:1 +sgml-indent-data:t +sgml-parent-document:nil +sgml-default-dtd-file:"../../../../manual.ced" +sgml-exposed-tags:nil +sgml-local-catalogs:nil +sgml-local-ecat-files:nil +End: +vim600: syn=xml fen fdm=syntax fdl=2 si +vim: et tw=78 syn=sgml +vi: ts=1 sw=1 +--> + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/templates/package.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/templates/package.tpl new file mode 100755 index 00000000..5b6bfc1c --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/templates/package.tpl @@ -0,0 +1,26 @@ +<sect1 id="{$id}"> +<title>{$package}</title> +{section name=ids loop=$ids} +{$ids[ids]} +{/section} +</sect1> +<!-- Generated by phpDocumentor v {$phpdocversion} {$phpdocwebsite} --> +<!-- Keep this comment at the end of the file +Local variables: +mode: sgml +sgml-omittag:t +sgml-shorttag:t +sgml-minimize-attributes:nil +sgml-always-quote-attributes:t +sgml-indent-step:1 +sgml-indent-data:t +sgml-parent-document:nil +sgml-default-dtd-file:"../../../../manual.ced" +sgml-exposed-tags:nil +sgml-local-catalogs:nil +sgml-local-ecat-files:nil +End: +vim600: syn=xml fen fdm=syntax fdl=2 si +vim: et tw=78 syn=sgml +vi: ts=1 sw=1 +-->
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/templates/tutorial.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/templates/tutorial.tpl new file mode 100755 index 00000000..e2cb70c4 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/templates/tutorial.tpl @@ -0,0 +1,21 @@ +{$contents} +<!-- Generated by phpDocumentor v {$phpdocversion} {$phpdocwebsite} --> +<!-- Keep this comment at the end of the file +Local variables: +mode: sgml +sgml-omittag:t +sgml-shorttag:t +sgml-minimize-attributes:nil +sgml-always-quote-attributes:t +sgml-indent-step:1 +sgml-indent-data:t +sgml-parent-document:nil +sgml-default-dtd-file:"../../../../manual.ced" +sgml-exposed-tags:nil +sgml-local-catalogs:nil +sgml-local-ecat-files:nil +End: +vim600: syn=xml fen fdm=syntax fdl=2 si +vim: et tw=78 syn=sgml +vi: ts=1 sw=1 +-->
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/templates/var.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/templates/var.tpl new file mode 100755 index 00000000..0d490e46 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/templates/var.tpl @@ -0,0 +1,15 @@ + <refsect1 id="{$my_id}.vars"> + <title>Class Variables</title> +{section name=var loop=$vars} + <refsect2 id="{$vars[vars].id}"> + <title>{$vars[var].var_type} {$vars[var].var_name}{if $vars[var].default} = {$vars[var].var_default}{/if}</title> + +{section name=v loop=$vars[var].var_overrides} + <para> + <emphasis>Overrides {$vars[var].var_overrides[v].link}</emphasis>{if $vars[var].var_overrides[v].sdesc}: {$vars[var].var_overrides[v].sdesc|default:""}{/if} + </para> +{/section} +{include file="docblock.tpl" var=true desc=$vars[var].desc sdesc=$vars[var].sdesc tags=$vars[var].tags line_number=$line_number id=$vars[var].id} + </refsect2> +{/section} + </refsect1> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/templates/peardoc2/templates/class_summary.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/templates/peardoc2/templates/class_summary.tpl new file mode 100755 index 00000000..ca8210a7 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/templates/peardoc2/templates/class_summary.tpl @@ -0,0 +1,93 @@ +<!-- $Revision: 1.1 $ --> +<refentry id="{$id}"> + <refnamediv> + <refname>Class {$class_name} Summary</refname> + <refpurpose>{$sdesc|default:"¬documented"}</refpurpose> + </refnamediv> +{include file="docblock.tpl" desc=$desc tags=$tags line_number=$line_number params=false} +{include file="var.tpl" vars=$vars my_id=$id} + <refsect1 id="{$id}.heritage"> + <title> + Heritage for {$class_name} + </title> + <refsect2 id="{$id}.heritage.class-trees"> + <title> + Class Trees for {$class_name} + </title> + <para> + {section name=tree loop=$class_tree} + {section name=mine loop=$class_tree[tree]} {/section}<itemizedlist> + {section name=mine loop=$class_tree[tree]} {/section} <listitem> + {section name=mine loop=$class_tree[tree]} {/section} {$class_tree[tree]} + {/section} + {section name=tree loop=$class_tree} + {section name=mine loop=$class_tree[tree]} {/section}</listitem> + </itemizedlist> + {/section} + </para> + </refsect2> +{if $children} + <refsect2 id="{$id}.heritage.child-classes"> + <title> + Classes that extend {$class_name} + </title> + <para> + <table> + <tgroup cols="2"> + <thead> + <row> + <entry>Class</entry> + <entry>Summary</entry> + </row> + </thead> + <tbody> +{section name=kids loop=$children} + <row> + <entry>{$children[kids].link}</entry> + <entry>{$children[kids].sdesc}</entry> + </row> +{/section} + </tbody> + </tgroup> + </table> + </para> + </refsect2> +{/if} +{if $imethods} + <refsect2 id="{$id}.heritage.inherited-methods"> + <title> + {$class_name} Inherited Methods + </title> +{include file="imethods.tpl" ivars=$ivars} + </refsect2> +{/if} +{if $ivars} + <refsect2 id="{$id}.heritage.inherited-vars"> + <title> + {$class_name} Inherited Variables + </title> +{include file="ivars.tpl" ivars=$ivars} + </refsect2> +{/if} + </refsect1> +</refentry> +<!-- Generated by phpDocumentor v {$phpdocversion} {$phpdocwebsite} --> +<!-- Keep this comment at the end of the file +Local variables: +mode: sgml +sgml-omittag:t +sgml-shorttag:t +sgml-minimize-attributes:nil +sgml-always-quote-attributes:t +sgml-indent-step:1 +sgml-indent-data:t +sgml-parent-document:nil +sgml-default-dtd-file:"../../../../manual.ced" +sgml-exposed-tags:nil +sgml-local-catalogs:nil +sgml-local-ecat-files:nil +End: +vim600: syn=xml fen fdm=syntax fdl=2 si +vim: et tw=78 syn=sgml +vi: ts=1 sw=1 +-->
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/templates/peardoc2/templates/ivars.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/templates/peardoc2/templates/ivars.tpl new file mode 100755 index 00000000..3b9eecf9 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/templates/peardoc2/templates/ivars.tpl @@ -0,0 +1,26 @@ + <para> +{section name=classes loop=$ivars} + <table> + <title>Inherited from {$ivars[classes].parent_class}</title> + <tgroup cols="2"> + <thead> + <row> + <entry>Variable Name</entry> + <entry>Summary</entry> + <entry>Default Value</entry> + </row> + </thead> + <tbody> +{section name=m loop=$ivars[classes].ivars} + <row> + <entry>{if $ivars[classes].ivars[m].constructor} Constructor{/if} {$ivars[classes].ivars[m].link}</entry> + <entry>{$ivars[classes].ivars[m].sdesc|default:"¬documented;"}</entry> + <entry>{$ivars[classes].ivars[m].default|default:"&null;"}</entry> + </row> +{/section} + </tbody> + </tgroup> + </table> +{/section} + </para> + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/templates/peardoc2/templates/tutorial.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/templates/peardoc2/templates/tutorial.tpl new file mode 100755 index 00000000..e2cb70c4 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/templates/peardoc2/templates/tutorial.tpl @@ -0,0 +1,21 @@ +{$contents} +<!-- Generated by phpDocumentor v {$phpdocversion} {$phpdocwebsite} --> +<!-- Keep this comment at the end of the file +Local variables: +mode: sgml +sgml-omittag:t +sgml-shorttag:t +sgml-minimize-attributes:nil +sgml-always-quote-attributes:t +sgml-indent-step:1 +sgml-indent-data:t +sgml-parent-document:nil +sgml-default-dtd-file:"../../../../manual.ced" +sgml-exposed-tags:nil +sgml-local-catalogs:nil +sgml-local-ecat-files:nil +End: +vim600: syn=xml fen fdm=syntax fdl=2 si +vim: et tw=78 syn=sgml +vi: ts=1 sw=1 +-->
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor/DescHTML.inc b/buildscripts/PhpDocumentor/phpDocumentor/DescHTML.inc new file mode 100755 index 00000000..867284ad --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/DescHTML.inc @@ -0,0 +1,423 @@ +<?php +/** + * All abstract representations of html tags in DocBlocks are handled by the + * classes in this file + * + * Before version 1.2, phpDocumentor simply passed html to converters, without + * much thought, except the {@link adv_htmlentities()} function was provided + * along with a list of allowed html. That list is no longer used, in favor + * of these classes. + * + * The PDF Converter output looked wretched in version 1.1.0 because line breaks + * in DocBlocks were honored. This meant that output often had just a few words + * on every other line! To fix this problem, DocBlock descriptions are now + * parsed using the {@link ParserDescParser}, and split into paragraphs. In + * addition, html in DocBlocks are parsed into these objects to allow for easy + * conversion in destination converters. This design also allows different + * conversion for different templates within a converter, which separates + * design from logic almost 100% + * + * phpDocumentor :: automatic documentation generator + * + * PHP versions 4 and 5 + * + * Copyright (c) 2002-2007 Gregory Beaver + * + * LICENSE: + * + * This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General + * Public License as published by the Free Software Foundation; + * either version 2.1 of the License, or (at your option) any + * later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage DescHTML + * @author Greg Beaver <cellog@php.net> + * @copyright 2002-2007 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version CVS: $Id: DescHTML.inc 246329 2007-11-17 03:07:00Z ashnazg $ + * @filesource + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @see parserDocBlock, parserInclude, parserPage, parserClass + * @see parserDefine, parserFunction, parserMethod, parserVar + * @since 1.2 + * @todo CS cleanup - change package to PhpDocumentor + */ +/** + * Used for <<code>> in a description + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage DescHTML + * @author Greg Beaver <cellog@php.net> + * @copyright 2002-2007 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @since 1.2 + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - rename class to ParserCode + */ +class parserCode extends parserStringWithInlineTags +{ + /** + * performs the conversion of code tags + * + * @param Converter &$c the converter object + * + * @return string the converted code block + * @uses Converter::ProgramExample() + * @todo CS cleanup - rename method to convert() + */ + function Convert(&$c) + { + if (!isset($this->value[0])) { + return ''; + } + if (is_string($this->value[0]) && $this->value[0]{0} == "\n") { + $this->value[0] = substr($this->value[0], 1); + } + $linktags = array(); + foreach ($this->value as $val) { + if (phpDocumentor_get_class($val) == 'parserlinkinlinetag' + || phpDocumentor_get_class($val) == 'parsertutorialinlinetag' + ) { + $linktags[] = array( + $c->postProcess($val->Convert($c, false, false)), $val); + } + } + $a = $c->ProgramExample(rtrim(ltrim(parent::Convert($c, + false, false), "\n\r"))); + foreach ($linktags as $tag) { + $a = str_replace($tag[0], $tag[1]->Convert($c, false, false), $a); + } + return $a; + } +} + +/** + * Used for <<pre>> in a description + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage DescHTML + * @author Greg Beaver <cellog@php.net> + * @copyright 2002-2007 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @since 1.2 + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - rename class to ParserPre + */ +class parserPre extends parserStringWithInlineTags +{ + /** + * performs the conversion of code tags + * + * @param Converter &$c the converter object + * + * @return string the converted pre block + * @uses Converter::PreserveWhiteSpace() + * @todo CS cleanup - rename method to convert() + */ + function Convert(&$c) + { + return $c->PreserveWhiteSpace(rtrim(ltrim(parent::Convert($c, + false, false), "\n\r"))); + } +} + +/** + * Used for <<b>> in a description + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage DescHTML + * @author Greg Beaver <cellog@php.net> + * @copyright 2002-2007 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @since 1.2 + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - rename class to ParserB + */ +class parserB extends parserStringWithInlineTags +{ + /** + * performs the conversion of bold tags + * + * @param Converter &$c the converter object + * + * @return string the converted pre block + * @uses Converter::Bolden() + * @todo CS cleanup - rename method to convert() + */ + function Convert(&$c) + { + return $c->Bolden(parent::Convert($c)); + } +} + +/** + * Used for <<i>> in a description + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage DescHTML + * @author Greg Beaver <cellog@php.net> + * @copyright 2002-2007 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @since 1.2 + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - rename class to ParserI + */ +class parserI extends parserStringWithInlineTags +{ + /** + * performs the conversion of italic tags + * + * @param Converter &$c the converter object + * + * @return string the converted pre block + * @uses Converter::Italicize() + * @todo CS cleanup - rename method to convert() + */ + function Convert(&$c) + { + return $c->Italicize(parent::Convert($c)); + } +} + +/** + * Used for <<var>> in a description + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage DescHTML + * @author Greg Beaver <cellog@php.net> + * @copyright 2002-2007 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @since 1.2 + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - rename class to ParserDescVar + */ +class parserDescVar extends parserStringWithInlineTags +{ + /** + * performs the conversion of variable tags + * + * @param Converter &$c the converter object + * + * @return string the converted pre block + * @uses Converter::Varize() + * @todo CS cleanup - rename method to convert() + */ + function Convert(&$c) + { + return $c->Varize(parent::Convert($c)); + } +} + +/** + * Used for <<samp>> in a description + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage DescHTML + * @author Greg Beaver <cellog@php.net> + * @copyright 2002-2007 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @since 1.2 + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - rename class to ParserSamp + */ +class parserSamp extends parserStringWithInlineTags +{ + /** + * performs the conversion of sample tags + * + * @param Converter &$c the converter object + * + * @return string the converted pre block + * @uses Converter::Sampize() + * @todo CS cleanup - rename method to convert() + */ + function Convert(&$c) + { + return $c->Sampize(parent::Convert($c)); + } +} + +/** + * Used for <<kbd>> in a description + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage DescHTML + * @author Greg Beaver <cellog@php.net> + * @copyright 2002-2007 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @since 1.2 + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - rename class to ParserKbd + */ +class parserKbd extends parserStringWithInlineTags +{ + /** + * performs the conversion of keyboard tags + * + * @param Converter &$c the converter object + * + * @return string the converted pre block + * @uses Converter::Kbdize() + * @todo CS cleanup - rename method to convert() + */ + function Convert(&$c) + { + return $c->Kbdize(parent::Convert($c)); + } +} + +/** + * Used for <<br>> in a description + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage DescHTML + * @author Greg Beaver <cellog@php.net> + * @copyright 2002-2007 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @since 1.2 + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - rename class to ParserBr + */ +class parserBr extends parserStringWithInlineTags +{ + /** + * performs the conversion of linebreak tags + * + * @param Converter &$c the converter object + * + * @return string the converted pre block + * @uses Converter::Br() + * @todo CS cleanup - rename method to convert() + */ + function Convert(&$c) + { + return $c->Br($this->getString()); + } +} + +/** + * Used for lists <<ol>> and <<ul>> + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage DescHTML + * @author Greg Beaver <cellog@php.net> + * @copyright 2002-2007 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @since 1.2 + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - rename class to ParserList + */ +class parserList extends parserStringWithInlineTags +{ + /** + * @var boolean + */ + var $numbered; + /** + * @var integer + */ + var $items = 0; + /** + * Constructor - create a new list + * + * @param integer $numbered a reference number for the new list + */ + function parserList($numbered) + { + $this->numbered = $numbered; + } + + /** + * add an item to a list + * + * @param parserStringWithInlineTags $item the item to add + * + * @return void + */ + function addItem($item) + { + $this->value[$this->items++] = $item; + } + + /** + * add a list + * + * @param parserList $list the list to add + * + * @return void + */ + function addList($list) + { + $this->value[$this->items++] = $list; + } + + /** + * performs the conversion of list tags + * + * @param Converter &$c the converter object + * + * @return string the converted pre block + * @uses Converter::ListItem() enclose each item of the list + * @uses Converter::EncloseList() enclose the list + * @todo CS cleanup - rename method to convert() + */ + function Convert(&$c) + { + $list = ''; + foreach ($this->value as $item) { + $list .= $c->ListItem(trim($item->Convert($c))); + } + return $c->EncloseList($list, $this->numbered); + } +} + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/DocBlockTags.inc b/buildscripts/PhpDocumentor/phpDocumentor/DocBlockTags.inc new file mode 100755 index 00000000..048c29ce --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/DocBlockTags.inc @@ -0,0 +1,1396 @@ +<?php +/** + * All abstract representations of DocBlock tags are defined + * by the classes in this file + * + * phpDocumentor :: automatic documentation generator + * + * PHP versions 4 and 5 + * + * Copyright (c) 2002-2008 Gregory Beaver + * + * LICENSE: + * + * This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General + * Public License as published by the Free Software Foundation; + * either version 2.1 of the License, or (at your option) any + * later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage DocBlockTags + * @author Greg Beaver <cellog@php.net> + * @copyright 2002-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version CVS: $Id: DocBlockTags.inc 287889 2009-08-30 07:27:39Z ashnazg $ + * @filesource + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @see parserDocBlock, parserInclude, parserPage, parserClass + * @see parserDefine, parserFunction, parserMethod, parserVar + * @since separate file since version 1.2 + * @todo CS cleanup - change package to PhpDocumentor + */ +/** + * used to represent standard tags like @access, etc. + * This class is aware of inline tags, and will automatically handle them + * using inherited functions + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage DocBlockTags + * @author Greg Beaver <cellog@php.net> + * @copyright 2002-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @since 1.0rc1 + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - change classname to PhpDocumentor_* + */ +class parserTag extends parserStringWithInlineTags +{ + /** + * Type is used by many functions to skip the hassle of + * if phpDocumentor_get_class($blah) == 'parserBlah' always '_tag' + * @var string + */ + var $type = '_tag'; + /** + * tag name (see, access, etc.) + * @var string + */ + var $keyword = ''; + + /** + * Set up the tag + * + * {@source} + * + * @param string $keyword tag name + * @param parserStringWithInlineTags $value tag value + * @param boolean $noparse whether to parse the $value + * for html tags + */ + function parserTag($keyword, $value, $noparse = false) + { + $this->keyword = $keyword; + if (!$noparse) { + $parser = new parserDescParser; + $parser->subscribe('*', $this); + $parser->parse($value->value, true, 'parserstringwithinlinetags'); + } else { + $this->value = $value; + } + } + + /** + * Perform the output conversion on this {@link parserTag} + * using the {@link Converter output converter} that is passed in + * + * @param Converter &$converter the converter object + * + * @return string + * @see Converter + * @todo CS cleanup - rename to convert for camelCase rule + */ + function Convert(&$converter) + { + if (is_array($this->value)) { + if (count($this->value) == 1) { + reset($this->value); + list(, $val) = each($this->value); + $a = $val->Convert($converter); + return $a; + } + $result = ''; + foreach ($this->value as $val) { + // this is only true if we processed the description + // in the constructor + if (phpDocumentor_get_class($val) + == 'parserstringwithinlinetags') { + $result .= $converter-> + EncloseParagraph($val->Convert($converter)); + } else { + $result .= $val->Convert($converter); + } + } + return $result; + } else { + $a = $this->value->Convert($converter); + return $a; + } + } + + /** + * Gets a count of the number of paragraphs in this + * tag's description. + * + * Useful in determining whether to enclose the + * tag in a paragraph or not. + * + * @return integer (actually, body is empty, so it doesn't return at all) + * @access private + * @todo does this need to be implemented? its body is empty + */ + function _valueParagraphCount() + { + } + + /** + * Called by the {@link parserDescParser} when processing a description. + * + * @param integer $a not used + * @param array $desc array of {@link parserStringWithInlineTags} + * representing paragraphs in the tag description + * + * @return void + * @see parserTag::parserTag() + * @todo CS cleanup - rename to handleEvent for camelCase rule + */ + function HandleEvent($a,$desc) + { + $this->value = $desc; + } + + /** + * Returns the text minus any inline tags + * + * @return string the text minus any inline tags + * @see parserStringWithInlineTags::getString() + */ + function getString() + { + if (is_array($this->value)) { + $result = ''; + foreach ($this->value as $val) { + $result .= $val->getString(); + } + return $result; + } else { + return $this->value->getString(); + } + } +} + +/** + * This class represents the @name tag + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage DocBlockTags + * @author Greg Beaver <cellog@php.net> + * @copyright 2002-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @tutorial tags.name.pkg + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - change classname to PhpDocumentor_* + */ +class parserNameTag extends parserTag +{ + /** + * tag name + * @var string + */ + var $keyword = 'name'; + + /** + * set up the name tag + * + * @param string $name tag name (not used) + * @param string $value tag value + */ + function parserNameTag($name, $value) + { + $this->value = $value; + } + + /** + * process this tag through the given output converter + * + * @param Converter &$c output converter + * + * @return string converted value of the tag + * @see parserStringWithInlineTags::Convert() + * @todo CS cleanup - rename to convert for camelCase rule + */ + function Convert(&$c) + { + return $this->value; + } +} + +/** + * This class represents the @access tag + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage DocBlockTags + * @author Greg Beaver <cellog@php.net> + * @copyright 2002-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @tutorial tags.access.pkg + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - change classname to PhpDocumentor_* + */ +class parserAccessTag extends parserTag +{ + /** + * tag name + * @var string + */ + var $keyword = 'access'; + + /** + * set to true if the returned tag has a value type of private, protected + * or public, false otherwise + * @var boolean + */ + var $isvalid = false; + + /** + * checks $value to make sure it is private, protected or public, otherwise + * it's not a valid @access tag + * + * @param parserStringWithInlineTags $value the tag value + * + * @see $isvalid + */ + function parserAccessTag($value) + { + if (!is_string($value)) { + if (is_object($value)) { + if (method_exists($value, 'getstring')) { + $value = $value->getString(); + } + } + } + switch(trim($value)) { + case 'private' : + case 'public' : + case 'protected' : + $this->value = $value; + $this->isvalid = true; + break; + default : + addError(PDERROR_ACCESS_WRONG_PARAM, $value); + $this->value = 'public'; + break; + } + } + + /** + * process this tag through the given output converter + * + * @param Converter &$converter the output converter + * + * @return string converted value of the tag + * @see parserStringWithInlineTags::Convert() + * @todo CS cleanup - rename to convert for camelCase rule + */ + function Convert(&$converter) + { + return $this->value; + } + + /** + * No inline tags are possible, returns 'public', 'protected' or 'private' + * + * @return string returns the text minus any inline tags + */ + function getString() + { + return $this->value; + } +} + +/** + * represents the "@return" tag + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage DocBlockTags + * @author Greg Beaver <cellog@php.net> + * @copyright 2002-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @tutorial tags.return.pkg + * @since 1.0rc1 + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - change classname to PhpDocumentor_* + */ +class parserReturnTag extends parserTag +{ + /** + * always 'return' + * @var string + */ + var $keyword = 'return'; + /** + * the type a function returns + */ + var $returnType = 'void'; + + /** + * contains a link to the documentation for a class + * passed as a type in @return, @var or @param + * + * Example: + * + * <code> + * class myclass + * { + * ... + * } + * /** @return myclass blahblahblah + * ... + * </code> + * + * In this case, $converted_returnType will contain a link to myclass + * instead of the string 'myclass' + * + * @var mixed either the same as $returnType or a link to the docs for a class + * @see $returnType + */ + var $converted_returnType = false; + + /** + * set up the tag + * + * @param string $returnType returned datatype + * @param parserStringWithInlineTags $value tag value + */ + function parserReturnTag($returnType, $value) + { + $this->returnType = $returnType; + parent::parserTag('return', $value); + } + + /** + * process this tag through the given output converter + * (sets up the $converted_returnType) + * + * @param Converter &$converter the output converter + * + * @return string converted value of the tag + * @see parserStringWithInlineTags::Convert(), $converted_returnType + * @todo CS cleanup - rename to convert for camelCase rule + */ + function Convert(&$converter) + { + $my_types = ''; + if (strpos($this->returnType, '|')) { + $types = explode('|', $this->returnType); + foreach ($types as $returntype) { + $a = $converter->getLink($returntype); + if (is_object($a) && phpDocumentor_get_class($a) == 'classlink') { + if (!empty($my_types)) { + $my_types .= '|'; + } + $my_types .= $converter-> + returnSee($a, $converter->type_adjust($returntype)); + } else { + if (!empty($my_types)) { + $my_types .= '|'; + } + $my_types .= $converter->type_adjust($returntype); + } + } + $this->converted_returnType = $my_types; + } else { + $a = $converter->getLink($this->returnType); + if (is_object($a) && phpDocumentor_get_class($a) == 'classlink') { + $this->converted_returnType = $converter-> + returnSee($a, $converter->type_adjust($this->returnType)); + } else { + $this->converted_returnType = $converter-> + type_adjust($this->returnType); + } + } + return parserTag::Convert($converter); + } +} + +/** + * represents the "@property" tag + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage DocBlockTags + * @author Greg Beaver <cellog@php.net> + * @copyright 2002-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @tutorial tags.property.pkg + * @since 1.4.0a1 + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - change classname to PhpDocumentor_* + */ +class parserPropertyTag extends parserReturnTag +{ + /** + * always 'property' + * @var string + */ + var $keyword = 'property'; + /** + * the type a property has + * @var string + */ + var $returnType = 'mixed'; + + /** + * set up the property tag + * + * @param string $returnType the tag value's datatype + * @param parserStringWithInlineTags $value the tag value + */ + function parserPropertyTag($returnType, $value) + { + $this->returnType = $returnType; + parent::parserTag($this->keyword, $value); + } +} + +/** + * represents the "@property-read" tag + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage DocBlockTags + * @author Greg Beaver <cellog@php.net> + * @copyright 2002-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @tutorial tags.property.pkg + * @since 1.4.0a1 + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - change classname to PhpDocumentor_* + */ +class parserPropertyReadTag extends parserPropertyTag +{ + /** + * always 'property-read' + * @var string + */ + var $keyword = 'property-read'; +} + +/** + * represents the "@property-write" tag + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage DocBlockTags + * @author Greg Beaver <cellog@php.net> + * @copyright 2002-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @tutorial tags.property.pkg + * @since 1.4.0a1 + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - change classname to PhpDocumentor_* + */ +class parserPropertyWriteTag extends parserPropertyTag +{ + /** + * always 'property-write' + * @var string + */ + var $keyword = 'property-write'; +} + +/** + * represents the "@method" tag + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage DocBlockTags + * @author Greg Beaver <cellog@php.net> + * @copyright 2002-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @tutorial tags.method.pkg + * @since 1.4.0a1 + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - change classname to PhpDocumentor_* + */ +class parserMethodTag extends parserPropertyTag +{ + /** + * always 'method' + * @var string + */ + var $keyword = 'method'; + /** + * the return type a method has + * @var string + */ + var $returnType = 'void'; +} + +/** + * represents the "@var" tag + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage DocBlockTags + * @author Greg Beaver <cellog@php.net> + * @copyright 2002-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @tutorial tags.var.pkg + * @since 1.0rc1 + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - change classname to PhpDocumentor_* + */ +class parserVarTag extends parserReturnTag +{ + /** + * always 'var' + * @var string + */ + var $keyword = 'var'; + /** + * the type a var has + * @var string + */ + var $returnType = 'mixed'; +} + +/** + * represents the "@param" tag + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage DocBlockTags + * @author Greg Beaver <cellog@php.net> + * @copyright 2002-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @tutorial tags.param.pkg + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - change classname to PhpDocumentor_* + */ +class parserParamTag extends parserVarTag +{ + /** + * always 'param' + * @var string + */ + var $keyword = 'param'; +} + +/** + * represents the "@staticvar" tag + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage DocBlockTags + * @author Greg Beaver <cellog@php.net> + * @copyright 2002-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @tutorial tags.staticvar.pkg + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - change classname to PhpDocumentor_* + */ +class parserStaticvarTag extends parserParamTag +{ + /** + * always 'staticvar' + * @var string + */ + var $keyword = 'staticvar'; +} + +/** + * represents the "@link" tag + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage DocBlockTags + * @author Greg Beaver <cellog@php.net> + * @copyright 2002-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @since 1.0rc1 + * @tutorial tags.link.pkg + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - change classname to PhpDocumentor_* + */ +class parserLinkTag extends parserTag +{ + /** + * always 'link' + * @var string + */ + var $keyword = 'link'; + + /** + * sets up the link tag + * + * @param string $link URL to link to + * (might also contain the URL's + * description text) + */ + function parserLinkTag($link) + { + $start = $val = $link->getString(); + if (strpos($val, ' ')) { + $val = explode(' ', $val); + $start = array_shift($val); + $val = join($val, ' '); + } + $a = new parserLinkInlineTag($start, $val); + $b = new parserStringWithInlineTags; + $b->add($a); + $this->value = $b; + } +} + +/** + * represents the "@see" tag + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage DocBlockTags + * @author Greg Beaver <cellog@php.net> + * @copyright 2002-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @since 1.0rc1 + * @tutorial tags.see.pkg + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - change classname to PhpDocumentor_* + */ +class parserSeeTag extends parserLinkTag +{ + /** + * always 'see' + * @var string + */ + var $keyword = 'see'; + + /** + * sets up the see tag + * + * @param string $name element to link to + */ + function parserSeeTag($name) + { + parserTag::parserTag($this->keyword, $name, true); + } + + /** + * process this tag through the given output converter + * + * @param Converter &$converter the output converter + * + * @return string converted value of the tag + * @see parserStringWithInlineTags::Convert() + * @todo CS cleanup - rename to convert for camelCase rule + */ + function Convert(&$converter) + { + if ($this->value->hasInlineTag()) { + addErrorDie(PDERROR_INLINETAG_IN_SEE); + } + $a = $converter->getLink(trim($this->value->Convert($converter))); + if (is_string($a)) { + // feature 564991 + if (strpos($a, '://')) { + // php function + return $converter->returnLink($a, str_replace('PHP_MANUAL#', '', + $this->value->Convert($converter))); + } + return $a; + } + if (is_object($a)) { + return $converter->returnSee($a); + } + // getLink parsed a comma-delimited list of linked thingies, + // add the commas back in + if (is_array($a)) { + $b = ''; + foreach ($a as $i => $bub) { + if (!empty($b)) { + $b .= ', '; + } + if (is_string($a[$i])) { + $b .= $a[$i]; + } + if (is_object($a[$i])) { + $b .= $converter->returnSee($a[$i]); + } + } + return $b; + } + return false; + } +} + +/** + * represents the "@see" tag + * + * Link to a license, instead of including lines and lines of license information + * in every file + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage DocBlockTags + * @author Greg Beaver <cellog@php.net> + * @copyright 2002-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @tutorial tags.license.pkg + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - change classname to PhpDocumentor_* + */ +class parserLicenseTag extends parserLinkTag +{ + /** + * always 'license' + * @var string + */ + var $keyword = 'license'; + + /** + * set up the license tag + * + * @param string $name unused? + * @param string $link URL to link to + */ + function parserLicenseTag($name, $link) + { + $a = explode(' ', $link->getString()); + $url = array_shift($a); + $license = join($a, ' '); + if (empty($license)) { + $license = $url; + } + $a = new parserLinkInlineTag($url, $license); + $b = new parserStringWithInlineTags; + $b->add($a); + $this->value = $b; + } +} + +/** + * represents the "@uses" tag + * + * This is exactly like @see except that the element used + * has a @useby link to this element added to its docblock + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage DocBlockTags + * @author Greg Beaver <cellog@php.net> + * @copyright 2002-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @since 1.2 + * @tutorial tags.uses.pkg + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - change classname to PhpDocumentor_* + */ +class parserUsesTag extends parserSeeTag +{ + /** + * Always "uses" + * @var string + */ + var $keyword = 'uses'; + /** + * @access private + */ + var $_description; + + /** + * set up the uses tag + * + * @param string $seeel element to link to + * @param parserStringWithInlineTags $description description of how + * the element is used + */ + function parserUsesTag($seeel, $description) + { + if ($seeel->hasInlineTag()) { + addErrorDie(PDERROR_DUMB_USES); + } + parent::parserSeeTag($seeel); + $this->_description = $description; + } + + /** + * Return a link to documentation for other element, + * and description of how it is used + * + * Works exactly like {@link parent::Convert()} + * except that it also includes a description of + * how the element used is used. + * + * @param Converter &$c the output converter + * + * @return string link to the uses target + * @todo CS cleanup - rename to convert for camelCase rule + */ + function Convert(&$c) + { + $val = $this->value; + $see = parent::Convert($c); + $this->value = $this->_description; + $desc_val = parserTag::Convert($c); + if (!empty($desc_val)) { + $see .= ' - '.$desc_val; + } + $this->value = $val; + return $see; + } + + /** + * Get the text of the link to the element that is being used + * + * @return string + * @access private + */ + function getSeeElement() + { + return $this->value->getString(); + } + + /** + * Get the description of how the element used is being used. + * + * @return parserStringWithInlineTags + */ + function getDescription() + { + return $this->_description; + } +} + +/** + * This is a virtual tag, it is created by @uses to cross-reference the used element + * + * This is exactly like @uses. + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage DocBlockTags + * @author Greg Beaver <cellog@php.net> + * @copyright 2002-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @since 1.2 + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - change classname to PhpDocumentor_* + */ +class parserUsedByTag extends parserUsesTag +{ + /** + * Always "usedby" + * @var string + */ + var $keyword = 'usedby'; + /** + * @access private + */ + var $_link; + + /** + * set up the usedby tag + * + * @param abstractLink $link link of element that uses this element + * @param string $description description of how the element is used + */ + function parserUsedByTag($link, $description) + { + $this->value = $description; + $this->_link = $link; + } + + /** + * process this tag through the given output converter + * + * @param Converter &$c the output converter + * + * @return string + * @todo CS cleanup - rename to convert for camelCase rule + */ + function Convert(&$c) + { + $see = $c->returnSee($this->_link); + $desc_val = parserTag::Convert($c); + if (!empty($desc_val)) { + $see .= ' - '.$desc_val; + } + return $see; + } +} + +/** + * represents "@tutorial" + * + * This is exactly like @see except that it only links to tutorials + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage DocBlockTags + * @author Greg Beaver <cellog@php.net> + * @copyright 2002-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @since 1.2 + * @tutorial phpDocumentor/tutorials.pkg + * @tutorial tags.tutorial.pkg + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - change classname to PhpDocumentor_* + */ +class parserTutorialTag extends parserSeeTag +{ + /** + * Always "tutorial" + * @var string + */ + var $keyword = 'tutorial'; + + /** + * process this tag through the given output converter + * + * @param Converter &$converter the output converter + * + * @return string|bool + * @see parserStringWithInlineTags::Convert() + * @todo CS cleanup - rename to convert for camelCase rule + */ + function Convert(&$converter) + { + $a = $converter->getTutorialLink(trim($this->value->Convert($converter))); + if (is_string($a)) { + return $a; + } + if (is_object($a)) { + return $converter->returnSee($a); + } + // getLink parsed a comma-delimited list of linked thingies, + // add the commas back in + if (is_array($a)) { + $b = ''; + foreach ($a as $i => $bub) { + if (!empty($b)) { + $b .= ', '; + } + if (is_string($a[$i])) { + $b .= $a[$i]; + } + if (is_object($a[$i])) { + $b .= $converter->returnSee($a[$i]); + } + } + return $b; + } + return false; + } +} + +/** + * represents "@filesource" + * + * Use this to create a link to a highlighted phpxref-style source file listing + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage DocBlockTags + * @author Greg Beaver <cellog@php.net> + * @copyright 2002-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @since 1.2 + * @tutorial tags.filesource.pkg + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - change classname to PhpDocumentor_* + */ +class parserFileSourceTag extends parserTag +{ + /** + * Always "filesource" + * @var string + */ + var $keyword = 'filesource'; + /** + * @var array + */ + var $source; + /** + * @var string + */ + var $path; + /** + * Flag variable, controls double writes of file for each converter + * @var array + * @access private + */ + var $_converted = array(); + + /** + * Set {@link $source} to $value, and set up path + * + * @param string $filepath the file's path + * @param array $value output from + * {@link phpDocumentorTWordParser::getFileSource()} + */ + function parserFileSourceTag($filepath, $value) + { + parent::parserTag($this->keyword, ''); + $this->path = $filepath; + $this->source = $value; + } + + /** + * Return a link to the highlighted source and generate the source + * + * @param Converter &$c the output converter + * + * @return string output from {@link getSourceLink()} + * @uses ConvertSource() generate source code and write it out + * @todo CS cleanup - rename to convert for camelCase rule + */ + function Convert(&$c) + { + $this->ConvertSource($c); + return $this->getSourceLink($c); + } + + /** + * convert the source code + * + * @param Converter &$c the output converter + * + * @return void + * @uses phpDocumentor_HighlightParser highlights source code + * @uses writeSource() + * @todo CS cleanup - rename to convertSource for camelCase rule + * @todo what's up with all the "return" statements? + * can they _all_ be removed? + */ + function ConvertSource(&$c) + { + $this->writeSource($c, $c-> + ProgramExample($this->source, true, false, false, false, $this->path)); + return; + $parser = new phpDocumentor_HighlightParser; + $return = ''; + $return = $parser-> + parse($this->source, $c, false, false, false, $this->path); + $this->writeSource($c, $return); + } + + /** + * have the output converter write the source code + * + * @param Converter &$c the output converter + * @param string $source highlighted source code + * + * @return void + * @uses Converter::writeSource() export highlighted file source + */ + function writeSource(&$c, $source) + { + $c->writeSource($this->path, $source); + } + + /** + * gets path to the sourcecode file + * + * @param Converter &$c the output converter + * + * @return output from getSourceLink() + * @uses Converter::getSourceLink() + */ + function getSourceLink(&$c) + { + return $c->getSourceLink($this->path); + } +} + +/** + * represents "@example" + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage DocBlockTags + * @author Greg Beaver <cellog@php.net> + * @copyright 2002-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @tutorial tags.example.pkg + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - change classname to PhpDocumentor_* + */ +class parserExampleTag extends parserFileSourceTag +{ + /** + * always "example" + * @var string + */ + var $keyword = 'example'; + + /** + * Reads and parses the example file indicated + * + * The example tag takes one parameter: the full path to a php file that + * should be parsed and included as an example. + * + * @param parserStringWithInlineTags $value tag value + * @param string $current_path path of file containing + * this @example tag + * + * @uses phpDocumentorTWordParser::getFileSource() uses to parse an example + * and retrieve all tokens by line number + * @todo does this "x = y = z = false" still work as expected in PHP5? + * @todo CS cleanup - rename constant to TOKENIZER_EXT + */ + function parserExampleTag($value, $current_path) + { + global $_phpDocumentor_setting; + parent::parserTag('example', $value); + $path = false; + // code thanks to Sam Blum, modified by Greg Beaver + $tagValue = $value->getString(); + + $path = $isAbsPath + = $pathOnly + = $fileName + = $fileExt + = $original_path + = $title + = false; + do { + // make sure the format is stuff.ext description + if (!preg_match('`(.*)\.(\w*)\s(.*)`', $tagValue, $match)) { + // or format is stuff.ext + if (!preg_match('`(.*)\.(\w*)\s*$`', $tagValue, $match)) { + // Murphy: Some funny path was given + $original_path = $tagValue; // used for error output + break; // try-block + } + } + if (strlen($match[1]) === 0) { + // Murphy: Some funny path was given + $original_path = $tagValue; // used for error output + break; // try-block + } + $fileExt = $match[2]; + $title = 'example'; + if (isset($match[3])) { + $title = trim($match[3]); + } + // Replace windows '\' the path. + $pathTmp = str_replace('\\', '/', $match[1]); + + // Is there a path and a file or is it just a file? + if (strpos($pathTmp, '/') === false) { + // No path part + $pathOnly = ''; + $fileName = $pathTmp .'.'. $fileExt; + } else { + // split the path on the last directory, find the filename + $splitPos = strrpos($pathTmp, '/'); + $pathOnly = substr($match[1], 0, $splitPos+1); + $fileName = substr($match[1], $splitPos+1) .'.'. $fileExt; + // Is the path absolute? (i.e. does it start like an absolute path?) + if (('/' === $pathTmp[0]) || preg_match('`^\w*:`i', $pathTmp)) { + // works for both windows 'C:' and URLs like 'http://' + $isAbsPath = true; // Yes + } + } + + $original_path = $pathOnly . $fileName; + + // Now look for the file starting with abs. path. + if ($isAbsPath) { + // remove any weirdities like /../file.ext + $tmp = realpath($original_path); + if ($tmp && is_file($tmp)) { + $path = $tmp; + } + // Alway break if abs. path was detected, + // even if file was not found. + break; // try-block + } + + // Search for the example file some standard places + // 1) Look if the ini-var examplesdir is set and look there ... + if (isset($_phpDocumentor_setting['examplesdir'])) { + $tmp = realpath($_phpDocumentor_setting['examplesdir'] + . PATH_DELIMITER . $original_path); + if ($tmp && is_file($tmp)) { + $path = $tmp; // Yo! found it :) + break; // try-block + } + } + + // 2) Then try to look for an 'example/'-dir + // below the *currently* parsed file ... + if (!empty($current_path)) { + $tmp = realpath(dirname($current_path) . PATH_DELIMITER + . 'examples' . PATH_DELIMITER . $fileName); + if ($tmp && is_file($tmp)) { + $path = $tmp; // Yo! found it :) + break; // try-block + } + } + + // 3) Then try to look for the example file + // below the subdir PHPDOCUMENTOR_BASE/examples/ ... + if (is_dir(PHPDOCUMENTOR_BASE . PATH_DELIMITER . 'examples')) { + $tmp = realpath(PHPDOCUMENTOR_BASE . PATH_DELIMITER + . 'examples' . PATH_DELIMITER . $original_path); + if ($tmp && is_file($tmp)) { + $path = $tmp; // Yo! found it :) + break; // try-block + } + } + + $tmp = realpath(PHPDOCUMENTOR_BASE . PATH_DELIMITER . $original_path); + if ($tmp && is_file($tmp)) { + $path = $tmp; // Yo! found it :) + break; // try-block + } + // If we reach this point, nothing was found and $path is false. + } while (false); + + if (!$path) { + addWarning(PDERROR_EXAMPLE_NOT_FOUND, $original_path); + $this->_title = 'example not found'; + $this->path = false; + } else { + $this->_title = ($title) ? $title : 'example'; + // make a unique html-filename but avoid it to get too long. + $uniqueFileName = str_replace(array(':', + DIRECTORY_SEPARATOR, '/'), array('_', '_', '_'), $path); + $uniqueFileName = substr($uniqueFileName, -50) . '_' . md5($path); + $this->path = $uniqueFileName; + + $f = @fopen($path, 'r'); + if ($f) { + $example = fread($f, filesize($path)); + if (tokenizer_ext) { + $obj = new phpDocumentorTWordParser; + $obj->setup($example); + $this->source = $obj->getFileSource(); + $this->origsource = $example; + unset($obj); + } else { + $this->source = $example; + } + } + } + } + + /** + * convert the source code + * + * @param Converter &$c the output converter + * + * @return void + * @uses phpDocumentor_HighlightParser highlights source code + * @uses writeSource() + * @todo CS cleanup - rename to convertSource for camelCase rule + * @todo what's up with all the "return" statements? + * can they _all_ be removed? + */ + function ConvertSource(&$c) + { + $this->writeSource($c, $c->ProgramExample($this->source, true, null, + null, null, null, $this->origsource)); + return; + $parser = new phpDocumentor_HighlightParser; + $return = ''; + $return = $parser->parse($this->source, $c); + $this->writeSource($c, $return); + } + + /** + * have the output converter write the source code + * + * @param Converter &$c the output converter + * @param string $source highlighted source code + * + * @return void + * @access private + * @uses Converter::writeExample() writes final example out + */ + function writeSource(&$c, $source) + { + if ($this->path) { + $c->writeExample($this->_title, $this->path, $source); + } + } + + /** + * Retrieve a converter-specific link to the example + * + * @param Converter &$c the output converter + * + * @return string + * @uses Converter::getExampleLink() retrieve the link to the example + */ + function getSourceLink(&$c) + { + if (!$this->path) return $this->_title; + return $c->getExampleLink($this->path, $this->_title); + } +} + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Errors.inc b/buildscripts/PhpDocumentor/phpDocumentor/Errors.inc new file mode 100755 index 00000000..213bd199 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Errors.inc @@ -0,0 +1,1172 @@ +<?php +/** + * Error handling for phpDocumentor + * + * phpDocumentor :: automatic documentation generator + * + * PHP versions 4 and 5 + * + * Copyright (c) 2001-2008 Gregory Beaver + * + * LICENSE: + * + * This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General + * Public License as published by the Free Software Foundation; + * either version 2.1 of the License, or (at your option) any + * later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage Errors + * @author Greg Beaver <cellog@php.net> + * @copyright 2001-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version CVS: $Id: Errors.inc 253641 2008-02-24 02:35:44Z ashnazg $ + * @filesource + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @see parserDocBlock, parserInclude, parserPage, parserClass + * @see parserDefine, parserFunction, parserMethod, parserVar + * @since 0.4 + * @todo CS cleanup - change package to PhpDocumentor + */ +/** + * warning triggered when inheritance could be from more than one class + */ +define("PDERROR_MULTIPLE_PARENT", 1); +/** + * warning triggered when parent class doesn't exist + */ +define("PDERROR_PARENT_NOT_FOUND", 2); +/** + * warning triggered when an {@inline tag} is not terminated + * (no } before the * / ending the comment) + */ +define("PDERROR_UNTERMINATED_INLINE_TAG", 3); +/** + * warning triggered when inheritance could be from more than one class + */ +define("PDERROR_CLASS_EXISTS", 4); +/** + * warning triggered when inheritance could be from more than one class + */ +define("PDERROR_INHERITANCE_CONFLICT", 5); +/** + * warning triggered when a converter is passed to + * {@link phpDocumentor_IntermediateParser::addConverter()} that is not a class + */ +define("PDERROR_CONVERTER_NOT_FOUND", 6); +/** + * warning triggered when a converter is passed to + * {@link phpDocumentor_IntermediateParser::addConverter()} that is not a class + */ +define("PDERROR_NO_CONVERTERS", 7); +/** + * warning triggered when the arguments to @access are neither public nor private + */ +define("PDERROR_ACCESS_WRONG_PARAM", 8); +/** + * warning triggered when there are multiple @access tags in a docblock + */ +define("PDERROR_MULTIPLE_ACCESS_TAGS", 9); +/** + * warning triggered when there are multiple @return tags in a docblock + */ +define("PDERROR_MULTIPLE_RETURN_TAGS", 10); +/** + * warning triggered when there are multiple @var tags in a docblock + */ +define("PDERROR_MULTIPLE_VAR_TAGS", 11); +/** + * warning triggered when there are multiple @package tags in a docblock + */ +define("PDERROR_MULTIPLE_PACKAGE_TAGS", 12); +/** + * warning triggered when there are multiple @subpackage tags in a docblock + */ +define("PDERROR_MULTIPLE_SUBPACKAGE_TAGS", 13); +/** + * warning triggered when the package or subpackage name is illegal + */ +define("PDERROR_ILLEGAL_PACKAGENAME", 14); +/** + * warning triggered when there a @package tag is used in a function, + * define, method, var or include + */ +define("PDERROR_OVERRIDDEN_PACKAGE_TAGS", 15); +/** + * warning triggered when there a @subpackage tag is used in a function, + * define, method, var or include + */ +define("PDERROR_OVERRIDDEN_SUBPACKAGE_TAGS", 16); +/** + * warning triggered when classes in the same package have the same name + */ +define("PDERROR_CLASS_CONFLICT", 17); +/** + * warning triggered when classes in the same package have the same name + */ +define("PDERROR_UNKNOWN_TAG", 18); +/** + * warning triggered when there are multiple @name tags in a docblock + */ +define("PDERROR_MULTIPLE_NAME_TAGS", 19); +/** + * warning triggered when there are multiple @name tags in a docblock + * @todo I think this description is a copy/paste that was never updated + */ +define("PDERROR_PACKAGEOUTPUT_DELETES_PARENT_FILE", 20); +/** + * warning triggered when there are multiple @name tags in a docblock + * @todo I think this description is a copy/paste that was never updated + */ +define("PDERROR_GLOBAL_NOT_FOUND", 21); +/** + * warning triggered when there are multiple @name tags in a docblock + * @todo I think this description is a copy/paste that was never updated + */ +define("PDERROR_MULTIPLE_GLOBAL_TAGS", 22); +/** + * warning triggered when there are multiple @name tags in a docblock + * @todo I think this description is a copy/paste that was never updated + */ +define("PDERROR_MALFORMED_GLOBAL_TAG", 23); +/** + * warning triggered when an @ignore tag is used in a DocBlock preceding + * a method, variable, include, or global variable + */ +define("PDERROR_IGNORE_TAG_IGNORED", 24); +/** + * warning triggered when a duplicate element is encountered that will be + * ignored by the documentor + */ +define("PDERROR_ELEMENT_IGNORED", 25); +/** + * warning triggered when an entire page is ignored because of @access private + */ +define("PDERROR_PARSEPRIVATE", 26); +/** + * warning triggered when an entire page is ignored because of @access private + * @todo I think this description is a copy/paste that was never updated + */ +define("PDERROR_UNKNOWN_COMMANDLINE", 27); +/** + * warning triggered when an entire page is ignored because of @access private + * @todo I think this description is a copy/paste that was never updated + */ +define("PDERROR_NEED_WHITESPACE", 28); +/** + * warning triggered when an entire page is ignored because of @access private + * @todo I think this description is a copy/paste that was never updated + */ +define("PDERROR_CLASS_PARENT_NOT_FOUND", 29); +/** + * warning triggered when a getClassByPackage is called and can't find the class + */ +define("PDERROR_CLASS_NOT_IN_PACKAGE", 30); +/** + * warning triggered when a { @source } inline tag is used in a docblock not + * preceding a function + */ +define("PDERROR_SOURCE_TAG_FUNCTION_NOT_FOUND", 31); +/** + * warning triggered when a docblock template is never turned off + * with /**#@-* / (no space) + */ +define("PDERROR_DB_TEMPLATE_UNTERMINATED", 32); +/** + * warning triggered when a docblock has an unmatched <ol> or <ul> + */ +define("PDERROR_UNMATCHED_LIST_TAG", 33); +/** + * warning triggered when another tag is nested in <b> + * (not allowed in phpDocumentor) + */ +define("PDERROR_CANT_NEST_IN_B", 34); +/** + * warning triggered when a docbook tag is not properly matched + */ +define("PDERROR_UNMATCHED_TUTORIAL_TAG", 35); +/** + * warning triggered when an inline tag is found inside an xml tag name + * in a package page + */ +define("PDERROR_CANT_HAVE_INLINE_IN_TAGNAME", 36); +/** + * warning triggered when a tutorial is referenced + * via @tutorial/{ @tutorial} and is not found + */ +define("PDERROR_TUTORIAL_NOT_FOUND", 37); +/** + * warning triggered when a tutorial lists itself as a child tutorial + */ +define("PDERROR_TUTORIAL_IS_OWN_CHILD", 38); +/** + * warning triggered when a tutorial's child lists the parent tutorial + * as a child tutorial + */ +define("PDERROR_TUTORIAL_IS_OWN_GRANDPA", 39); +/** + * warning triggered when a tutorial's child in the .ini file doesn't exist in the + * package and subpackage of the parent + */ +define("PDERROR_CHILD_TUTORIAL_NOT_FOUND", 40); +/** + * warning triggered when a <pdffunction:funcname /> tag is used in the PDF + * Converter and no funcname is present (<pdffunction: />) + */ +define("PDERROR_PDFFUNCTION_NO_FUNC", 41); +/** + * warning triggered when a <pdffunction:funcname /> tag is used in the PDF + * Converter and funcname is not a {@link Cezpdf} method + */ +define("PDERROR_PDF_METHOD_DOESNT_EXIST", 42); +/** + * warning triggered when a <pdffunction:funcname arg=$tempvar/> tag + * is used in the PDF + * Converter and "tempvar" is not set from the return of a previous pdffunction tag + */ +define("PDERROR_PDF_TEMPVAR_DOESNT_EXIST", 43); +/** + * warning triggered when a subsection's title is asked for, but the subsection + * is not found + */ +define("PDERROR_TUTORIAL_SUBSECTION_NOT_FOUND", 44); +/** + * warning triggered when a subsection's title is asked for, but the subsection + * is not found + */ +define("PDERROR_UNTERMINATED_ATTRIB", 45); +/** + * warning triggered when no @package tag is used in a page-level + * or class-level DocBlock + */ +define("PDERROR_NO_PACKAGE_TAG", 46); +/** + * warning triggered when no @access private tag is used in a + * global variable/method/var with _ as first char in name + * and --pear was specified + */ +define("PDERROR_PRIVATE_ASSUMED", 47); +/** + * warning triggered when an example's path from @example /path/to/example.php + * is not found + */ +define("PDERROR_EXAMPLE_NOT_FOUND", 48); +/** + * warning triggered when an example's path from @example /path/to/example.php + * is not found + */ +define("PDERROR_NO_CONVERTER_HANDLER", 49); +/** + * warning triggered when an example's path from @example /path/to/example.php + * is not found + */ +define("PDERROR_INLINETAG_IN_SEE", 50); +/** + * warning triggered when an id attribute in a tutorial docbook tag is not + * an {@}id} inline tag + */ +define("PDERROR_ID_MUST_BE_INLINE", 51); +/** + * warning triggered when an {@}internal}} tag is not closed + */ +define("PDERROR_INTERNAL_NOT_CLOSED", 52); +/** + * warning triggered when an {@}source} tag is found in a short description + */ +define("PDERROR_SOURCE_TAG_IGNORED", 53); +/** + * warning triggered when a child converter doesn't override + * getFormattedClassTrees() + */ +define("PDERROR_CONVERTER_OVR_GFCT", 54); +/** + * warning triggered when a package is already associated with a category, and + * a new association is found + */ +define("PDERROR_PACKAGECAT_SET", 55); +/** + * warning triggered when text in a docblock list is not contained in + * an <<li>> opening tag + */ +define("PDERROR_TEXT_OUTSIDE_LI", 56); +/** + * warning triggered when a DocBlock html tag is unclosed + */ +define("PDERROR_UNCLOSED_TAG", 57); +/** + * warning triggered by @filesource, if PHP < 4.3.0 + */ +define("PDERROR_TAG_NOT_HANDLED", 58); +/** + * warning triggered by sourcecode="on", if PHP < 4.3.0 + */ +define("PDERROR_SOURCECODE_IGNORED", 59); +/** + * warning triggered by an empty tag + */ +define("PDERROR_MALFORMED_TAG", 60); +/** + * warning triggered by more than 1 @category tag + */ +define("PDERROR_MULTIPLE_CATEGORY_TAGS", 61); +/** + * warning triggered by {@}inheritdoc} in a non-inheritable situation + */ +define("PDERROR_INHERITDOC_DONT_WORK_HERE", 62); +/** + * warning triggered by @example path/to/example with no title + */ +define("PDERROR_EMPTY_EXAMPLE_TITLE", 63); +/** + * warning triggered by non-existent template directory + */ +define("PDERROR_TEMPLATEDIR_DOESNT_EXIST", 64); +/** + * warning triggered by an unterminated entity in a tutorial + */ +define("PDERROR_UNTERMINATED_ENTITY", 65); +/** + * warning triggered by an unterminated entity in a tutorial + */ +define("PDERROR_BEAUTIFYING_FAILED", 66); +/** + * warning triggered by a function with no name + * + * <pre> + * function ($params) + * { + * } + * </pre> + * triggers this error + */ +define("PDERROR_FUNCTION_HAS_NONAME", 67); +/** + * warning triggered by a page-level docblock preceding a source element + * + * <code> + * <?php + * /** + * * Page-level DocBlock + * * @package pagepackage + * *{@*} + * include 'file.php'; + * </code> + */ +define("PDERROR_DOCBLOCK_CONFLICT", 68); +/** + * warning triggered when a file does not contain a page-level docblock + */ +define("PDERROR_NO_PAGE_LEVELDOCBLOCK", 69); +/** + * warning triggered when the first docblock in a file with a @package tag + * precedes a class. In this case, the class gets the docblock. + */ +define("PDERROR_DOCBLOCK_GOES_CLASS", 70); +/** + * warning triggered in tutorial parsing if there is a missing {@id} inline tag + */ +define("PDERROR_NO_DOCBOOK_ID", 71); +/** + * warning triggered if someone brilliant tries "class X extends X {" + */ +define("PDERROR_CANNOT_EXTEND_SELF", 72); +/** + * warning triggered by improper "@uses {@link blah}" + */ +define("PDERROR_DUMB_USES", 73); +/** + * warning triggered if <<ul>> is nested inside <<ul>> and not <<li>> + */ +define("PDERROR_UL_IN_UL", 74); +/** + * warning triggered if a command line option does not have a valid value passed in + */ +define("PDERROR_INVALID_VALUES", 75); +/** + * warning triggered when {@}internal}} is nested inside another {@}internal}} + */ +define("PDERROR_NESTED_INTERNAL", 76); +/** + * warning triggered when @todo is used on an include element + */ +define("PDERROR_NOTODO_INCLUDE", 77); +/** + * warning triggered when a class or method hasn't got docblock + */ +define("PDERROR_UNDOCUMENTED_ELEMENT", 78); +/** + * warning triggered when any of {@}property}}, {@}property-read}}, + * {@}property-write}}, or {@}method}} tag does not have name + */ +define("PDERROR_MISSING_PROPERTY_TAG_NAME", 79); +/** + * warning triggered when the PHP version being used has dangerous bug/behavior + */ +define("PDERROR_DANGEROUS_PHP_BUG_EXISTS", 80); +/** + * warning triggered when the alias value in an page-level docblock's @name tag + * is the same value as the target filename is it supposed to alias + */ +define("PDERROR_NAME_ALIAS_SAME_AS_TARGET", 81); +/** + * warning triggered when the a loop recursion tripwire has been tripped + */ +define("PDERROR_LOOP_RECURSION_LIMIT_REACHED", 82); + +/** + * Error messages for phpDocumentor parser warnings + * @global array $GLOBALS['phpDocumentor_warning_descrip'] + * @name $phpDocumentor_warning_descrip + */ +$GLOBALS['phpDocumentor_warning_descrip'] = + array( + PDERROR_MULTIPLE_PARENT => + 'Class %s has multiple possible parents, package inheritance aborted' + , + PDERROR_PARENT_NOT_FOUND => + 'Class %s parent %s not found' + , + PDERROR_INHERITANCE_CONFLICT => + 'Class %s in file %s has multiple possible parents named %s. ' . + 'Cannot resolve name conflict,' . "\n" . + ' try ignoring a file that contains the conflicting parent class' + , + PDERROR_UNKNOWN_TAG => + 'Unknown tag "@%s" used' + , + PDERROR_IGNORE_TAG_IGNORED => + '@ignore tag used for %s element "%s" will be ignored' + , + PDERROR_ELEMENT_IGNORED => + "\n" . 'duplicate %s element "%s" in file %s will be ignored.' . "\n" . + 'Use an @ignore tag on the original ' . + 'if you want this case to be documented.' + , + PDERROR_PARSEPRIVATE => + "entire page %s ignored because of @access private." . "\n" . + "Choose -pp to enable parsing of private elements" + , + PDERROR_CLASS_PARENT_NOT_FOUND => + "class %s in package %s parent not found in @see parent::%s" + , + PDERROR_CLASS_NOT_IN_PACKAGE => + "class %s was not found in package %s" + , + PDERROR_DB_TEMPLATE_UNTERMINATED => + 'docblock template never terminated with /**#@-*/' + , + PDERROR_PDF_METHOD_DOESNT_EXIST => + '<pdffunction:%s /> called, but pdf method "%s" doesn\'t exist' + , + PDERROR_TUTORIAL_NOT_FOUND => + "tutorial \"%s\" not found, does it exist?" + , + PDERROR_CHILD_TUTORIAL_NOT_FOUND => + 'child tutorial "%s" listed in %s not found ' . + 'in parent package "%s" subpackage "%s"' + , + PDERROR_TUTORIAL_SUBSECTION_NOT_FOUND => + 'tutorial %s subsection "%s" doesn\'t exist, ' . + 'but its title was asked for' + , + PDERROR_NO_PACKAGE_TAG => + 'no @package tag was used in a DocBlock for %s %s' + , + PDERROR_PRIVATE_ASSUMED => + '%s "%s" is assumed to be @access private because its name ' . + 'starts with _, but has no @access tag' + , + PDERROR_EXAMPLE_NOT_FOUND => + 'example file "%s" does not exist' + , + PDERROR_SOURCE_TAG_IGNORED => + '{@source} can only be used in the long description, ' . + 'not in the short description: "%s"' + , + PDERROR_PACKAGECAT_SET => + 'package %s is already in category %s, ' . + 'will now replace with category %s' + , + PDERROR_SOURCECODE_IGNORED => + 'sourcecode command-line option is ignored ' . + 'when your PHP build has no tokenizer support' + , + PDERROR_INHERITDOC_DONT_WORK_HERE => + '{@inheritdoc} can only be used in the docblock of a child class' + , + PDERROR_EMPTY_EXAMPLE_TITLE => + 'Example file found at "%s" has no title, using "%s"' + , + PDERROR_DOCBLOCK_CONFLICT => + 'Page-level DocBlock precedes "%s %s", ' . + 'use another DocBlock to document the source element' + , + PDERROR_NO_PAGE_LEVELDOCBLOCK => + 'File "%s" has no page-level DocBlock, ' . + 'use @package in the first DocBlock to create one' + , + PDERROR_DOCBLOCK_GOES_CLASS => + 'DocBlock would be page-level, but precedes class "%s", ' . + 'use another DocBlock to document the file' + , + PDERROR_NO_DOCBOOK_ID => + 'Tutorial section %s "%s" has no id="{@id subsection}" tag ' . + '({@id} for refentry)' + , + PDERROR_BEAUTIFYING_FAILED => + 'Beautifying failed: %s' + , + PDERROR_NOTODO_INCLUDE => + '@todo on an include element is ignored (line %s, file %s)' + , + PDERROR_UNDOCUMENTED_ELEMENT => + '%s "%s" has no %s-level DocBlock.' + , + PDERROR_MISSING_PROPERTY_TAG_NAME => + '@%s magic tag does not have name, illegal. Ignoring tag "@%s %s %s"' + , + PDERROR_NAME_ALIAS_SAME_AS_TARGET => + '@name value is the same as the filename it is supposed to alias' + ); + + + +//******************************************************** + + + +/** + * Error messages for phpDocumentor parser errors + * @global array $GLOBALS['phpDocumentor_error_descrip'] + * @name $phpDocumentor_error_descrip + */ +$GLOBALS['phpDocumentor_error_descrip'] = + array( + PDERROR_UNTERMINATED_INLINE_TAG => + 'Inline tag {@%s} in tag %s is unterminated, "%s"' + , + PDERROR_CLASS_EXISTS => + 'Class %s already exists in package "%s"' + , + PDERROR_CONVERTER_NOT_FOUND => + 'Converter %s specified by --output command-line option is not a class' + , + PDERROR_NO_CONVERTERS => + 'No Converters have been specified by --output command-line option' + , + PDERROR_ACCESS_WRONG_PARAM => + '@access was passed neither "public" nor "private." Was passed: "%s"' + , + PDERROR_MULTIPLE_ACCESS_TAGS => + 'DocBlock has multiple @access tags, illegal. ' . + 'ignoring additional tag "@access %s"' + , + PDERROR_MULTIPLE_RETURN_TAGS => + 'DocBlock has multiple @return tags, illegal. ' . + 'ignoring additional tag "@return %s %s"' + , + PDERROR_MULTIPLE_VAR_TAGS => + 'DocBlock has multiple @var tags, illegal. ' . + 'ignoring additional tag "@var %s %s"' + , + PDERROR_MULTIPLE_PACKAGE_TAGS => + 'DocBlock has multiple @package tags, illegal. ' . + 'ignoring additional tag "@package %s"' + , + PDERROR_MULTIPLE_SUBPACKAGE_TAGS => + 'DocBlock has multiple @subpackage tags, illegal. ' . + 'ignoring additional tag "@subpackage %s"' + , + PDERROR_ILLEGAL_PACKAGENAME => + '@%s tag has illegal %s name "%s"' + , + PDERROR_OVERRIDDEN_PACKAGE_TAGS => + '%s %s\'s DocBlock has @package tag, illegal. ' . + 'ignoring tag "@package %s"' + , + PDERROR_OVERRIDDEN_SUBPACKAGE_TAGS => + '"%s" %s\'s DocBlock has @subpackage tags, illegal. ' . + 'ignoring tag "@subpackage %s"' + , + PDERROR_CLASS_CONFLICT => + 'class "%s" has multiple declarations in package %s, ' . + 'in file %s and file %s, documentation will have output errors!' + , + PDERROR_MULTIPLE_NAME_TAGS => + 'DocBlock has multiple @name tags, illegal. ' . + 'ignoring additional tag "@name %s"' + , + PDERROR_PACKAGEOUTPUT_DELETES_PARENT_FILE => + '-po (packageoutput) option deletes parent file "%s" containing class' . + ' "%s."' . "\n" . ' Try using --defaultpackagename (-dn) %s to ' . + 'include the parent file in the same package as the class' + , + PDERROR_GLOBAL_NOT_FOUND => + 'global variable %s specified in @global tag was never found' + , + PDERROR_MULTIPLE_GLOBAL_TAGS => + '@global define tag already used for global variable "%s", ' . + 'ignoring @global %s' + , + PDERROR_MALFORMED_GLOBAL_TAG => + 'incorrect @global syntax. ' . + 'Should be @global vartype $varname or @global vartype description' + , + PDERROR_UNKNOWN_COMMANDLINE => + 'Unknown command-line option "%s" encountered, use phpdoc -h for help' + , + PDERROR_NEED_WHITESPACE => + 'phpDocumentor programmer error - wordparser whitespace set to false ' . + 'in handleDocBlock, notify developers. You should never see this error' + , + PDERROR_SOURCE_TAG_FUNCTION_NOT_FOUND => + '{@source} tag used in a docblock that isn\'t preceding a function' + , + PDERROR_UNMATCHED_LIST_TAG => + 'unmatched ol or ul tag in DocBlock, parsing will be incorrect' + , + PDERROR_CANT_NEST_IN_B => + 'Can\'t nest a code, pre, ul, or ol tag in a b tag in ' . + 'phpDocumentor DocBlock (%s tag nested)' + , + PDERROR_UNMATCHED_TUTORIAL_TAG => + 'While parsing extended documentation, "%s" tag was matched ' . + 'with "%s" endtag, missing endtag'."\ntag contents:\"%s\"" + , + PDERROR_CANT_HAVE_INLINE_IN_TAGNAME => + 'Can\'t have an inline tag inside a package page XML tag!' + , + PDERROR_TUTORIAL_IS_OWN_CHILD => + 'Tutorial %s lists itself as its own child in %s, illegal' + , + PDERROR_TUTORIAL_IS_OWN_GRANDPA => + 'Tutorial %s\'s child %s lists %s as its child in %s, illegal' + , + PDERROR_PDFFUNCTION_NO_FUNC => + 'Invalid pdffunction syntax: "<pdffunction: />", ' . + 'should be "<pdffunction:functionname [arg="value"...]/>"' + , + PDERROR_PDF_TEMPVAR_DOESNT_EXIST => + '<pdffunction:%s arg=%s /> called ' . + 'but temporary variable "%s" doesn\'t exist' + , + PDERROR_UNTERMINATED_ATTRIB => + 'Tutorial tag %s attribute %s is unterminated, current value "%s"' + , + PDERROR_NO_CONVERTER_HANDLER => + 'Handler for element of type "%s" called, but %s is not a method of %s' + , + PDERROR_INLINETAG_IN_SEE => + 'Inline tags are not allowed in a @see tag' + , + PDERROR_ID_MUST_BE_INLINE => + '<%s id="%s"> must be <%s id="{@id %s}">' + , + PDERROR_INTERNAL_NOT_CLOSED => + '{@internal was never terminated with }}' + , + PDERROR_CONVERTER_OVR_GFCT => + 'Converter "%s" must override getFormattedClassTrees() but doesn\'t' + , + PDERROR_TEXT_OUTSIDE_LI => + 'Text cannot be outside of li tag in a DocBlock list, ' . + 'parsing will be incorrect' + , + PDERROR_UNCLOSED_TAG => + 'Unclosed %s tag in DocBlock, parsing will be incorrect' + , + PDERROR_TAG_NOT_HANDLED => + '"%s" tag is not available in PHP built without tokenizer support, tag ignored' + , + PDERROR_MALFORMED_TAG => + '"%s" tag was used without any parameters, illegal' + , + PDERROR_MULTIPLE_CATEGORY_TAGS => + 'package has multiple @category tags, ignoring "@category %s"' + , + PDERROR_TEMPLATEDIR_DOESNT_EXIST => + 'template directory "%s" does not exist' + , + PDERROR_UNTERMINATED_ENTITY => + 'entity &%s is unterminated' + , + PDERROR_FUNCTION_HAS_NONAME => + 'function has no name (PHP error - test your file before parsing!)' + , + PDERROR_CANNOT_EXTEND_SELF => + 'class %s cannot extend itself - TEST YOUR CODE BEFORE PARSING' + , + PDERROR_DUMB_USES => + '@uses can only link to string data' + , + PDERROR_UL_IN_UL => + 'ul/ol tags cannot be directly nested inside ul/ol, nest inside li' + , + PDERROR_INVALID_VALUES => + 'command %s was passed "%s" but must be one of %s' + , + PDERROR_NESTED_INTERNAL => + '{@internal}} cannot be nested inside {@internal}}' + , + PDERROR_DANGEROUS_PHP_BUG_EXISTS => + 'Dangerous PHP Bug exists in PHP version %s that can be triggered ' . + 'by this parse (see PHP Bug #%s and PEAR Bug #%s)' + , + PDERROR_LOOP_RECURSION_LIMIT_REACHED => + 'An internal loop in PhpDocumentor has reached its preset ' . + 'recursion limit, preventing a possible infinite loop condition.' + ); + +/** + * encapsulates warning information + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage Errors + * @author Greg Beaver <cellog@php.net> + * @copyright 2001-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @todo CS cleanup - change package to PhpDocumentor + */ +class RecordWarning +{ + /** + * name of global variable that descriptors for this warning/error is kept + * @var string + */ + var $type = 'phpDocumentor_warning_descrip'; + /** + * file this error occurred in + * @var string + */ + var $file = false; + /** + * line number of the file this error occurred in + * @var integer + */ + var $linenum; + /** + * error string + * @var string + */ + var $data; + /** + * error number + * @see Errors.inc + * @var string + */ + var $num; + /** + * Constructor + * + * @param string $file filename this error occurred in ({@link $file}) + * @param integer $linenum line number this error occurred on ({@link $linenum}) + * @param integer $num Error number defined in {@link Errors.inc} + * @param string $data... variable number of strings, up to 4, + * + * @todo CS Cleanup - do I need to add $data to the method signature? + * to sprintf based on the error number + */ + function RecordWarning($file, $linenum, $num) + { + $this->file = $file; + $this->linenum = $linenum; + $a = array('', '', '', ''); + if (func_num_args()>3) { + for ($i=3;$i<func_num_args();$i++) { + $a[$i - 3] = func_get_arg($i); + } + } + + $this->num = $num; + $this->data = + sprintf($GLOBALS[$this->type][$this->num], $a[0], $a[1], $a[2], $a[3]); + $this->output(); + } + + /** + * prints the warning + * + * @param string $string the warning to print + * + * @return void + */ + function output($string = false) + { + if ($string) { + if ($this->file) { + return + "WARNING in $this->file on line $this->linenum: $this->data\n"; + } else { + return "WARNING: $this->data\n"; + } + } + if ($this->file) { + phpDocumentor_out("WARNING in $this->file " . + "on line $this->linenum: $this->data\n"); + } else { + phpDocumentor_out("WARNING: $this->data\n"); + } + flush(); + } +} + +/** + * encapsulates error information + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage Errors + * @author Greg Beaver <cellog@php.net> + * @copyright 2001-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @todo CS cleanup - change package to PhpDocumentor + */ +class RecordError extends RecordWarning +{ + /** + * name of global variable that descriptors for this warning/error is kept + * @var string + */ + var $type = 'phpDocumentor_error_descrip'; + + /** + * prints the error + * + * @param string $string the error to print + * + * @return string + */ + function output($string = false) + { + if ($string) { + if ($this->file) { + return + "\n\tERROR in $this->file on line $this->linenum: $this->data\n" + ; + } else { + return "\n\tERROR: $this->data\n"; + } + } + if ($this->file) { + phpDocumentor_out("\n\tERROR in $this->file " . + "on line $this->linenum: $this->data\n"); + } else { + phpDocumentor_out("\n\tERROR: $this->data\n"); + } + flush(); + } +} + +/** + * contains all the errors/warnings + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage Errors + * @author Greg Beaver <cellog@php.net> + * @copyright 2001-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @todo CS cleanup - change package to PhpDocumentor + * @see $errors, $warnings + */ +class ErrorTracker +{ + /** + * array of {@link RecordError}s + * @var array + */ + var $errors = array(); + /** + * array of {@link RecordWarning}s + * @var array + */ + var $warnings = array(); + /** + * @var string + */ + var $curfile = ''; + /** + * @var integer + */ + var $linenum = 0; + + /** + * index in {@link $errors} of last error triggered + * @var integer|false + */ + var $lasterror = false; + + /** + * index in {@link $warnings} of last warning triggered + * @var integer|false + */ + var $lastwarning = false; + + /** + * This function subscribes to two events in the Parser + * in order to keep track of line number information and file name. + * + * @param integer $num parser-passed event + * (see {@link PHPDOCUMENTOR_EVENT_NEWLINENUM, + * PHPDOCUMENTOR_EVENT_NEWFILE}) + * @param mixed $data either a line number if $num is + * PHPDOCUMENTOR_EVENT_NEWLINENUM or a file name + * if $num is PHPDOCUMENTOR_EVENT_NEWFILE + * + * @return void + */ + function handleEvent($num,$data) + { + switch($num) { + case PHPDOCUMENTOR_EVENT_NEWLINENUM : + $this->linenum = $data; + break; + + case PHPDOCUMENTOR_EVENT_NEWFILE : + $this->linenum = 0; + $this->curfile = $data; + break; + + case 1000000635 : // debugging + phpDocumentor_out($this->curfile . + ' has ' . $this->linenum . ' lines' . "\n"); + flush(); + break; + } + } + + /** + * add a new warning to the {@link $warnings} array + * + * @param integer $num error number from {@link Errors.inc} + * @param string $data... up to 4 string parameters to sprintf() + * into the error string for error number $num + * + * @return void + * @todo CS Cleanup - do I need to add $data to the method signature? + */ + function addWarning($num) + { + $a = array('', '', '', ''); + if (func_num_args()>1) { + for ($i=1;$i<func_num_args();$i++) { + $a[$i - 1] = func_get_arg($i); + } + } + $this->warnings[] = new RecordWarning($this->curfile, + $this->linenum, $num, $a[0], $a[1], $a[2], $a[3]); + $this->lastwarning = count($this->warnings) - 1; + } + + /** + * add a new error to the {@link $errors} array + * + * @param integer $num error number from {@link Errors.inc} + * @param string $data... up to 4 string parameters to sprintf() + * into the error string for error number $num + * + * @return void + * @todo CS Cleanup - do I need to add $data to the method signature? + */ + function addError($num) + { + $a = array('', '', '', ''); + if (func_num_args()>1) { + for ($i=1;$i<func_num_args();$i++) { + $a[$i - 1] = func_get_arg($i); + } + } + $this->errors[] = new RecordError($this->curfile, + $this->linenum, $num, $a[0], $a[1], $a[2], $a[3]); + $this->lasterror = count($this->errors) - 1; + } + + /** + * add a new error to the {@link $errors} array and returns the error string + * + * @param integer $num error number from {@link Errors.inc} + * @param string $data... up to 4 string parameters to sprintf() + * into the error string for error number $num + * + * @return void + * @todo CS Cleanup - do I need to add $data to the method signature? + */ + function addErrorReturn($num) + { + $a = array('', '', '', ''); + if (func_num_args()>1) { + for ($i=1;$i<func_num_args();$i++) { + $a[$i - 1] = func_get_arg($i); + } + } + $this->errors[] = new RecordError($this->curfile, + $this->linenum, $num, $a[0], $a[1], $a[2], $a[3], false); + $this->lasterror = count($this->errors) - 1; + } + + /** + * Get sorted array of all warnings in parsing/conversion + * + * @return array + */ + function &returnWarnings() + { + usort($this->warnings, array($this, "errorsort")); + return $this->warnings; + } + + /** + * Get sorted array of all non-fatal errors in parsing/conversion + * + * @return array + */ + function &returnErrors() + { + usort($this->errors, array($this, "errorsort")); + return $this->errors; + } + + /** + * sort two errors + * + * @param RecordError|RecordWarning $a the first error/warning + * @param RecordError|RecordWarning $b the second error/warning + * + * @return int + * @access private + */ + function errorsort($a, $b) + { + if (!$a->file) return -1; + if (!$b->file) return 1; + if ($a->file == $b->file) { + if ($a->linenum == $b->linenum) return 0; + if ($a->linenum < $b->linenum) return -1; + return 1; + } + return strnatcasecmp($a->file, $b->file); + } + + /** + * Get the error message of the last error + * + * @return string + */ + function returnLastError() + { + return $this->errors[$this->lasterror]->output(true); + } + + /** + * Get the warning message of the last warning + * + * @return string + */ + function returnLastWarning() + { + return $this->warnings[$this->lastwarning]->output(true); + } +} + +/** + * @global ErrorTracker $GLOBALS['phpDocumentor_errors'] + * @name $phpDocumentor_errors + */ +$GLOBALS['phpDocumentor_errors'] = new ErrorTracker; + +/** + * add an Error + * + * @param integer $num error number from {@link Errors.inc} + * @param string $data... up to 4 string parameters to sprintf() + * into the error string for error number $num + * + * @return void + * @see ErrorTracker::addError() + * @todo CS Cleanup - do I need to add $data to the method signature? + */ +function addError($num) +{ + global $phpDocumentor_errors; + $a = array('', '', '', ''); + if (func_num_args()>1) { + for ($i=1;$i<func_num_args();$i++) { + $a[$i - 1] = func_get_arg($i); + } + } + $phpDocumentor_errors->addError($num, $a[0], $a[1], $a[2], $a[3]); +} + +/** + * like {@link addError()} but exits parsing + * + * @param integer $num error number from {@link Errors.inc} + * @param string $data... up to 4 string parameters to sprintf() + * into the error string for error number $num + * + * @return void + * @global ErrorTracker repository for all errors generated by phpDocumentor + * @see ErrorTracker::addError() + * @todo CS Cleanup - do I need to add $data to the method signature? + */ +function addErrorDie($num) +{ + global $phpDocumentor_errors; + $a = array('', '', '', ''); + if (func_num_args()>1) { + for ($i=1;$i<func_num_args();$i++) { + $a[$i - 1] = func_get_arg($i); + } + } + $phpDocumentor_errors->addErrorReturn($num, $a[0], $a[1], $a[2], $a[3]); + echo $phpDocumentor_errors->returnLastError(); + die(1); +} + +/** + * add a Warning + * + * @param integer $num warning number from {@link Errors.inc} + * @param string $data... up to 4 string parameters to sprintf() + * into the error string for error number $num + * + * @return void + * @global ErrorTracker repository for all errors generated by phpDocumentor + * @see ErrorTracker::addWarning() + * @todo CS Cleanup - do I need to add $data to the method signature? + */ +function addWarning($num) +{ + global $phpDocumentor_errors; + $a = array('', '', '', ''); + if (func_num_args()>1) { + for ($i=1;$i<func_num_args();$i++) { + $a[$i - 1] = func_get_arg($i); + } + } + + $phpDocumentor_errors->addWarning($num, $a[0], $a[1], $a[2], $a[3]); +} +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/EventStack.inc b/buildscripts/PhpDocumentor/phpDocumentor/EventStack.inc new file mode 100755 index 00000000..4a75bba3 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/EventStack.inc @@ -0,0 +1,98 @@ +<?php +/** + * An Event Stack for inter-program communication, particularly for parsing + * + * phpDocumentor :: automatic documentation generator + * + * PHP versions 4 and 5 + * + * Copyright (c) 2000-2007 Joshua Eichorn + * + * LICENSE: + * + * This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General + * Public License as published by the Free Software Foundation; + * either version 2.1 of the License, or (at your option) any + * later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @author Joshua Eichorn <jeichorn@phpdoc.org> + * @copyright 2000-2007 Joshua Eichorn + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version CVS: $Id: EventStack.inc 243937 2007-10-10 02:27:42Z ashnazg $ + * @filesource + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @since 0.1 + * @todo CS cleanup - change package to PhpDocumentor + */ +/** + * An event Stack + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @author Joshua Eichorn <jeichorn@phpdoc.org> + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @todo CS cleanup - change package to PhpDocumentor + */ +class EventStack +{ + /** + * The stack + * @var array + */ + var $stack = array(PARSER_EVENT_NOEVENTS); + + /** + * The number of events in the stack + * @var integer + */ + var $num = 0; + + /** + * Push an event onto the stack + * + * @param int $event All events must be constants + * + * @return void + */ + function pushEvent($event) + { + $this->num = array_push($this->stack, $event) - 1; + } + + /** + * Pop an event from the stack + * + * @return int An event + */ + function popEvent() + { + $this->num--; + return array_pop($this->stack); + } + + /** + * Get the current event + * + * @return int An event + */ + function getEvent() + { + return $this->stack[$this->num]; + } +} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/HighlightParser.inc b/buildscripts/PhpDocumentor/phpDocumentor/HighlightParser.inc new file mode 100755 index 00000000..a474f73c --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/HighlightParser.inc @@ -0,0 +1,2603 @@ +<?php +/** + * Source Code Highlighting + * + * The classes in this file are responsible for the dynamic @example, @filesource + * and {@}source} tags output. Using the phpDocumentor_HighlightWordParser, + * the phpDocumentor_HighlightParser retrieves PHP tokens one by one from the + * array generated by {@link phpDocumentorTWordParser} source retrieval functions + * and then highlights them individually. + * + * It accomplishes this highlighting through the assistance of methods in + * the output Converter passed to its parse() method, and then returns the + * fully highlighted source as a string + * + * phpDocumentor :: automatic documentation generator + * + * PHP versions 4 and 5 + * + * Copyright (c) 2002-2008 Gregory Beaver + * + * LICENSE: + * + * This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General + * Public License as published by the Free Software Foundation; + * either version 2.1 of the License, or (at your option) any + * later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage Parsers + * @author Gregory Beaver <cellog@php.net> + * @copyright 2002-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version CVS: $Id: HighlightParser.inc 253641 2008-02-24 02:35:44Z ashnazg $ + * @filesource + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @tutorial tags.example.pkg, tags.filesource.pkg, tags.inlinesource.pkg + * @since 1.2.0beta3 + * @todo CS cleanup - change package to PhpDocumentor + */ + +/** + * Retrieve tokens from an array of tokens organized by line numbers + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage Parsers + * @author Gregory Beaver <cellog@php.net> + * @copyright 2002-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @since 1.2.0beta3 + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - change class name to PhpDocumentor_* + */ +class phpDocumentor_HighlightWordParser extends phpDocumentorTWordParser +{ + /** + * Hash used to keep track of line numbers that have already been initialized + * @var array + * @access private + */ + var $_listLineNums = array(); + /** + * Initialize the parser object + * + * @param array &$input the input + * @param phpDocumentor_HighlightParser &$parser the parser + * + * @return void + */ + function setup(&$input, &$parser) + { + $this->_parser = &$parser; + $this->data = &$input; + $this->_all = $input; + $this->_sourceline = 0; + $this->pos = 0; + $this->linenum = 0; + } + + /** + * debugging function + * + * @return void + * @access private + */ + function printState() + { + $linenum = $this->linenum; + $pos = $this->pos; + if (!isset($this->_all[$this->linenum][$this->pos])) { + $linenum++; + $pos = 0; + } + $details = ''; + $token = $this->_all[$linenum][$pos]; + if (is_array($token)) { + $details = token_name($token[0]); + $token = htmlspecialchars($token[1]); + } else { + $token = htmlspecialchars($token); + } + debug('Next Token ' . $this->linenum . '-' . $this->pos . ':' . $details); + var_dump($token); + } + + /** + * Retrieve the position of the next token that will be parsed + * in the internal token array + * + * @return array format: array(line number, position) + */ + function nextToken() + { + $linenum = $this->linenum; + $pos = $this->pos; + if (!isset($this->_all[$this->linenum][$this->pos])) { + $linenum++; + $pos = 0; + } + if (!isset($this->_all[$linenum][$pos])) { + return false; + } + return array($linenum, $pos); + } + + /** + * Retrieve the next token + * + * @return array|string either array(PHP token constant, token) or string + * non-specific separator + */ + function getWord() + { + if (!isset($this->_all[$this->linenum][$this->pos])) { + $this->linenum++; + $this->pos = 0; + if (!isset($this->_all[$this->linenum])) { + return false; + } + $this->_parser->newLineNum(); + return $this->getWord(); + } + $word = $this->_all[$this->linenum][$this->pos++]; + return str_replace("\t", ' ', $word); + } + + /** + * back the word parser to the previous token as defined by $last_token + * + * @param array|string $last_token token, or output from {@link nextToken()} + * @param bool $is_pos if true, backupPos interprets $last_token + * to be the position in the internal token + * array of the last token + * + * @return void + */ + function backupPos($last_token, $is_pos = false) + { + if (!$last_token) { + return; + } + if ($is_pos) { + $this->linenum = $last_token[0]; + $this->pos = $last_token[1]; + return; + } + if ($last_token === false) { + return; + } + + //fancy_debug('before', $this->linenum, $this->pos, + // token_name($this->_all[$this->linenum][$this->pos][0]), + // htmlentities($this->_all[$this->linenum][$this->pos][1]), + // $this->_all[$this->linenum]); + + do { + $this->pos--; + if ($this->pos < 0) { + $this->linenum--; + if ($this->linenum < 0) { + var_dump($last_token); + break; + } + $this->pos = count($this->_all[$this->linenum]) - 1; + } + } while (!$this->tokenEquals($last_token, str_replace("\t", ' ', + $this->_all[$this->linenum][$this->pos]))); + + //fancy_debug('after', $this->linenum, $this->pos, + // token_name($this->_all[$this->linenum][$this->pos][0]), + // htmlentities($this->_all[$this->linenum][$this->pos][1])); + } +} + +/** + * Highlights source code using {@link parse()} + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage Parsers + * @author Gregory Beaver <cellog@php.net> + * @copyright 2002-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @since 1.2.0beta3 + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - change class name to PhpDocumentor_* + */ +class phpDocumentor_HighlightParser extends phpDocumentorTParser +{ + /**#@+ + * @access private + */ + + /** + * Highlighted source is built up in this string + * @var string + */ + var $_output; + + /** + * contents of the current source code line as it is parsed + * @var string + */ + var $_line; + + /** + * Used to retrieve highlighted tokens + * @var Converter a descendant of Converter + */ + var $_converter; + + /** + * Path to file being highlighted, if this is from a @filesource tag + * @var false|string full path + */ + var $_filesourcepath; + + /** + * @var array + */ + var $eventHandlers = array( + PARSER_EVENT_ARRAY => 'defaultHandler', + PARSER_EVENT_CLASS => 'handleClass', + PARSER_EVENT_COMMENT => 'handleComment', + PARSER_EVENT_DOCBLOCK_TEMPLATE => 'handleDocBlockTemplate', + PARSER_EVENT_END_DOCBLOCK_TEMPLATE => 'handleEndDocBlockTemplate', + PARSER_EVENT_LOGICBLOCK => 'handleLogicBlock', + PARSER_EVENT_METHOD_LOGICBLOCK => 'handleMethodLogicBlock', + PARSER_EVENT_NOEVENTS => 'defaultHandler', + PARSER_EVENT_OUTPHP => 'defaultHandler', + PARSER_EVENT_CLASS_MEMBER => 'handleClassMember', + PARSER_EVENT_DEFINE => 'defaultHandler', + PARSER_EVENT_DEFINE_PARAMS => 'defaultHandler', + PARSER_EVENT_DEFINE_PARAMS_PARENTHESIS => 'defaultHandler', + PARSER_EVENT_INCLUDE_PARAMS_PARENTHESIS => 'defaultHandler', + PARSER_EVENT_DOCBLOCK => 'handleDocBlock', + PARSER_EVENT_TAGS => 'handleTags', + PARSER_EVENT_DESC => 'handleDesc', + PARSER_EVENT_DOCKEYWORD => 'handleTag', + PARSER_EVENT_DOCKEYWORD_EMAIL => 'handleDockeywordEmail', + PARSER_EVENT_EOFQUOTE => 'handleQuote', + PARSER_EVENT_FUNCTION => 'handleFunction', + PARSER_EVENT_METHOD => 'handleMethod', + PARSER_EVENT_FUNCTION_PARAMS => 'handleFunctionParams', + PARSER_EVENT_FUNC_GLOBAL => 'handleFuncGlobal', + PARSER_EVENT_INLINE_DOCKEYWORD => 'handleInlineDockeyword', + PARSER_EVENT_INCLUDE => 'defaultHandler', + PARSER_EVENT_INCLUDE_PARAMS => 'defaultHandler', + PARSER_EVENT_QUOTE => 'handleQuote', + PARSER_EVENT_QUOTE_VAR => 'handleQuoteVar', + PARSER_EVENT_PHPCODE => 'handlePhpCode', + PARSER_EVENT_SINGLEQUOTE => 'handleSingleQuote', + PARSER_EVENT_STATIC_VAR => 'defaultHandler', + PARSER_EVENT_STATIC_VAR_VALUE => 'defaultHandler', + PARSER_EVENT_VAR => 'handleVar', + ); + + /** + * event handlers for @tags + * @tutorial tags.pkg + */ + var $tagHandlers = array( + '*' => 'defaultTagHandler', + 'abstract' => 'coreTagHandler', + 'access' => 'coreTagHandler', + 'author' => 'coreTagHandler', + 'category' => 'coreTagHandler', + 'copyright' => 'coreTagHandler', + 'deprecated' => 'coreTagHandler', + 'example' => 'coreTagHandler', + 'filesource' => 'coreTagHandler', + 'final' => 'coreTagHandler', + 'global' => 'globalTagHandler', + 'ignore' => 'coreTagHandler', + 'license' => 'coreTagHandler', + 'link' => 'coreTagHandler', + 'name' => 'coreTagHandler', + 'package' => 'coreTagHandler', + 'param' => 'paramTagHandler', + 'parameter' => 'paramTagHandler', + 'see' => 'coreTagHandler', + 'since' => 'coreTagHandler', + 'subpackage' => 'coreTagHandler', + 'internal' => 'coreTagHandler', + 'return' => 'returnTagHandler', + 'static' => 'coreTagHandler', + 'staticvar' => 'staticvarTagHandler', + 'throws' => 'coreTagHandler', + 'todo' => 'coreTagHandler', + 'tutorial' => 'coreTagHandler', + 'uses' => 'coreTagHandler', + 'var' => 'varTagHandler', + 'version' => 'coreTagHandler', + 'property' => 'propertyTagHandler', + 'property-read' => 'propertyTagHandler', + 'property-write' => 'propertyTagHandler', + 'method' => 'propertyTagHandler' + ); + /**#@-*/ + + /** + * wraps the current line (via the converter) and resets it to empty + * + * @return void + * @uses Converter::SourceLine() encloses {@link $_line} in a + * converter-specific format + */ + function newLineNum() + { + if ($this->_pf_no_output_yet) { + return; + } + $this->_flush_save(); + $this->_line .= $this->_converter->flushHighlightCache(); + $this->_output .= $this->_converter->SourceLine($this->_wp->linenum, + $this->_line, $this->_path); + $this->_line = ''; + } + + /** + * Start the parsing at a certain line number + * + * @param int $num line number + * + * @return void + */ + function setLineNum($num) + { + $this->_wp->linenum = $num; + } + + /** + * Parse a new file + * + * The parse() method is a do...while() loop that retrieves tokens one by + * one from the {@link $_event_stack}, and uses the token event array set up + * by the class constructor to call event handlers. + * + * The event handlers each process the tokens passed to them, and use the + * {@link _addoutput()} method to append the processed tokens to the + * {@link $_line} variable. The word parser calls {@link newLineNum()} + * every time a line is reached. + * + * In addition, the event handlers use special linking functions + * {@link _link()} and its cousins (_classlink(), etc.) to create in-code + * hyperlinks to the documentation for source code elements that are in the + * source code. + * + * @param array &$parse_data the parse data + * @param Converter &$converter the converter object + * @param bool $inlinesourceparse whether this data is from an + * inline {@}source} tag + * @param string|false $class if a string, it is the name of the + * class whose method we are parsing + * containing a {@}source} tag + * @param false|integer $linenum starting line number from + * {@}source linenum} + * @param false|string $filesourcepath full path to file with @filesource + * tag, if this is a @filesource parse + * + * @staticvar int used for recursion limiting if a handler for + * an event is not found + * @return bool + * @uses setupStates() initialize parser state variables + * @uses configWordParser() pass $parse_data to prepare retrieval of tokens + * @todo CS cleanup - rename tokenizer_ext constant to uppercase + */ + function parse (&$parse_data, &$converter, $inlinesourceparse = false, + $class = false, $linenum = false, $filesourcepath = false) + { + if (!tokenizer_ext) { + if (is_array($parse_data)) { + $parse_data = join($parse_data, ''); + } + $parse_data = explode("\n", $parse_data); + $this->_output = ''; + foreach ($parse_data as $linenum => $line) { + if ($linenum > 0) { + $this->_output .= $converter->SourceLine($linenum, + $line, $filesourcepath); + } + } + return $converter->PreserveWhiteSpace($this->_output); + } + static $endrecur = 0; + $this->_converter = &$converter; + $converter->startHighlight(); + $this->_path = $filesourcepath; + $this->setupStates($inlinesourceparse, $class); + + $this->configWordParser($parse_data); + if ($linenum !== false) { + $this->setLineNum($linenum); + } + // initialize variables so E_ALL error_reporting doesn't complain + $pevent = 0; + $word = 0; + + do { + $lpevent = $pevent; + $pevent = $this->_event_stack->getEvent(); + if ($lpevent != $pevent) { + $this->_last_pevent = $lpevent; + } + + if ($pevent == PARSER_EVENT_CLASS_MEMBER) { + $this->_wp->setWhitespace(true); + } else { + $this->_wp->setWhitespace(false); + } + + if (!is_array($word)) { + $lw = $word; + } + if (is_array($word) && $word[0] != T_WHITESPACE) { + $lw = $word; + } + $dbg_linenum = $this->_wp->linenum; + $dbg_pos = $this->_wp->getPos(); + $word = $this->_wp->getWord(); + if (is_array($word) && ($word[0] == T_WHITESPACE || + $word[0] == T_COMMENT) && + $pevent != PARSER_EVENT_CLASS_MEMBER + ) { + //debug("added " . $this->_wp->linenum . '-' . $this->_wp->pos); + $this->_addoutput($word); + continue; + } else { + $this->_pv_last_word = $lw; + } + if ($pevent != PARSER_EVENT_DOCBLOCK) { + $this->_pv_last_next_word = $this->_pv_next_word; + $this->_pv_next_word = $this->_wp->nextToken(); + } + // in wordparser, have to keep track of lines + //$this->publishEvent(PHPDOCUMENTOR_EVENT_NEWLINENUM, + // $this->_wp->linenum); + if (PHPDOCUMENTOR_DEBUG == true) { + echo "LAST: "; + if (is_array($this->_pv_last_word)) { + echo token_name($this->_pv_last_word[0]) . + ' => |' . + htmlspecialchars($this->_pv_last_word[1]); + } else { + echo "|" . $this->_pv_last_word; + } + echo "|\n"; + echo "PEVENT: " . $this->getParserEventName($pevent) . "\n"; + echo "LASTPEVENT: " . + $this->getParserEventName($this->_last_pevent) . "\n"; + //echo "LINE: " . $this->_line . "\n"; + //echo "OUTPUT: " . $this->_output . "\n"; + echo $dbg_linenum . '-' . $dbg_pos . ": "; + if (is_array($word)) { + echo token_name($word[0]) . ' => |' . htmlspecialchars($word[1]); + } else { + echo '|'.htmlspecialchars($word); + } + echo "|\n"; + $this->_wp->printState(); + echo "NEXT TOKEN: "; + $tok1 = $this->_pv_next_word; + $tok = $this->_wp->_all[$tok1[0]][$tok1[1]]; + if (is_array($tok)) { + echo token_name($tok[0]) . ' => ' . $tok1[0] . '-' . $tok1[1] . + '|' . htmlspecialchars($tok[1]); + } else { + echo "|" . $tok; + } + echo "|\n"; + echo "-------------------\n\n\n"; + flush(); + } + if ($word !== false && isset($this->eventHandlers[$pevent])) { + $handle = $this->eventHandlers[$pevent]; + $this->$handle($word, $pevent); + } elseif ($word !== false) { + debug('WARNING: possible error, no handler for event number ' + . $pevent); + if ($endrecur++ == 25) { + die("FATAL ERROR, recursion limit reached"); + } + } + } while (!($word === false)); + if (strlen($this->_line)) { + $this->newLineNum(); + } + return $this->_output; + } + + /**#@+ + * Event Handlers + * + * All Event Handlers use {@link checkEventPush()} and + * {@link checkEventPop()} to set up the event stack and parser state. + * + * @param string|array $word token value + * @param int $pevent parser event from {@link Parser.inc} + * + * @return void + * @access private + */ + /** + * Most tokens only need highlighting, and this method handles them + */ + function defaultHandler($word, $pevent) + { + $this->_addoutput($word); + if ($this->checkEventPush($word, $pevent)) { + return; + } + $this->checkEventPop($word, $pevent); + } + + /** + * Handles global declarations in a function, like: + * + * <code> + * function foobar() + * { + * global $_phpDocumentor_setting; + * } + * </code> + * + * @uses _globallink() instead of _addoutput(), to link to global variables + * if they are used in a function + */ + function handleFuncGlobal($word, $pevent) + { + if ($this->checkEventPush($word, $pevent)) { + return; + } + $this->_globallink($word); + $this->checkEventPop($word, $pevent); + } + + /** + * Handles strings in quotation marks and heredoc + * + * Special handling is needed for strings that contain variables like: + * + * <code>$a = "$test string"</code> + * + * The tokenizer parses out tokens '"',array(T_VARIABLE,'$test'),' string', + * and '"'. Since it is possible to have $this->classvar in a string, + * we save a variable name just in case the next token is -> to allow linking + * to class members. Otherwise, the string is simply highlighted. + * + * constant strings (with no $variables in them) are passed as a single + * entity, and so will be saved in the last token parsed. This means the + * event handler must tell the word parser to re-retrieve the current token + * so that the correct event handler can process it. + */ + function handleQuote($word, $pevent) + { + if ($this->_pf_inmethod && is_array($word) && $word[0] == T_VARIABLE) { + $this->_pv_lastvar = $word; + } + if ($this->checkEventPush($word, $pevent)) { + $this->_addoutput($word); + return; + } + if ($this->_pf_quote_active && + (($this->_pv_last_word == '"' && + $this->_last_pevent != PARSER_EVENT_QUOTE) || + (is_array($this->_pv_last_word) && + $this->_pv_last_word[0] == T_END_HEREDOC && + $this->_last_pevent != PARSER_EVENT_EOFQUOTE)) + ) { + $this->_pf_quote_active = false; + $this->_wp->backupPos($word); + $this->_event_stack->popEvent(); + return; + } + if (!$this->_pf_quote_active && + (($this->_pv_last_word == '"' && + $this->_last_pevent != PARSER_EVENT_QUOTE) || + (is_array($this->_pv_last_word) && + $this->_pv_last_word[0] == T_END_HEREDOC && + $this->_last_pevent != PARSER_EVENT_EOFQUOTE)) + ) { + if (is_array($word) && $word[0] == T_VARIABLE) { + $this->_pv_lastvar = $word; + } + $this->_pf_quote_active = true; + $this->_save_highlight_state = $this->_converter->getHighlightState(); + $this->_converter->startHighlight(); + $this->_addoutput($word); + $this->checkEventPop($word, $pevent); + return; + } elseif (is_array($this->_pv_last_word) && + $this->_pv_last_word[0] == T_CONSTANT_ENCAPSED_STRING + ) { + //$this->_pv_quote_data = $this->_pv_last_word[1]; + $this->_event_stack->popEvent(); + $this->_wp->backupPos($word); + return; + } + if ($this->checkEventPop($word, $pevent)) { + $this->_pf_quote_active = false; + } + $this->_addoutput($word); + } + + /** + * Handles {$variable} within a "quote" + * + * This is a simple handler, for a very complex + * array of legal syntax. It is legal to nest control structures + * inside the {}, and other weird stuff. + */ + function handleQuoteVar($word, $pevent) + { + if ($this->checkEventPop($word, $pevent)) { + $this->_pf_quote_active = true; + $this->_addoutput($word); + return; + } + if ($this->_pf_inmethod && is_array($word) && $word[0] == T_VARIABLE) { + $this->_pv_lastvar = $word; + } + if ($this->checkEventPush($word, $pevent)) { + $this->_pf_quote_active = false; + if (is_string($word) && ($word == '{' || $word == '"' || $word == "'") + ) { + $this->_pf_quote_active = true; + $this->_pv_lastvar = false; + } + } + $this->_addoutput($word); + } + + /** + * Handles define() statements + * + * The only thing this handler cares about is retrieving the name of the + * define variable, and the end of the define statement, so after the name + * is found, it simply makes sure parentheses are matched as in this case: + * + * <code> + * define("test",array("hello",6 => 4, 5 => array('there'))); + * </code> + * + * This handler and the DEFINE_PARAMS_PARENTHESIS handler (which is just + * {@link defaultHandler()} in this version, as nothing fancy is needed) + * work together to ensure proper parenthesis matching. + * + * If the define variable is documented, a link will be created to its + * documentation using the Converter passed. + */ + function handleDefine($word, $pevent) + { + static $token_save; + if (!isset($token_save)) { + $token_save = array(); + } + $e = $this->checkEventPush($word, $pevent); + if ($e && $e != PARSER_EVENT_DEFINE_PARAMS_PARENTHESIS) { + return; + } + + if (!isset($this->_pv_define_params_data)) { + $this->_pv_define_params_data = ''; + } + + if ($this->checkEventPop($word, $pevent)) { + unset($token_save); + $this->_addoutput($word); + } + if ($this->_pf_definename_isset) { + $this->_addoutput($word); + } else { + if ($word != ",") { + $token_save[] = $word; + if (is_array($word)) { + $word = $word[1]; + } + $this->_pv_define_params_data .= $word; + } else { + if (substr($this->_pv_define_params_data, 0, 1) == + substr($this->_pv_define_params_data, + strlen($this->_pv_define_params_data) - 1) && + in_array(substr($this->_pv_define_params_data, 0, 1), + array('"', "'")) + ) { + // remove leading and ending quotation marks + // if there are only two + $a = substr($this->_pv_define_params_data, 0, 1); + $b = substr($this->_pv_define_params_data, 1, + strlen($this->_pv_define_params_data) - 2); + if (strpos($b, $a) === false) { + $this->_pv_define_params_data = $b; + } + } + $this->_pf_definename_isset = true; + + $link = $this->_converter->getLink($this->_pv_define_params_data); + foreach ($token_save as $token) { + if (is_object($link)) { + if (is_array($token)) { + $token = $token[1]; + } + $this->_addoutput($this->_converter->returnSee($link, + $token)); + } else { + $this->_addoutput($save, $token); + } + } + $this->_pv_define_params_data = ''; + } + } + } + + /** + * Handles normal global code. Special consideration is taken for DocBlocks + * as they need to retrieve the whole DocBlock before doing any output, so + * the parser flag {@link $_pf_no_output_yet} is set to tell + * {@link _addoutput()} not to spit anything out yet. + * + * @uses _link() make any global code that is a documentable element link + * to the php manual or its documentation + */ + function handlePhpCode($word, $pevent) + { + $test = $this->checkEventPush($word, $pevent); + if ($test == PARSER_EVENT_DOCBLOCK || $test == PARSER_EVENT_COMMENT) { + if (substr($word[1], 0, 2) == '/*' && strpos($word[1], '*/')) { + $this->_pv_last_word = $word; + if ($word[1] == '/**#@-*/') { + $this->_pf_docblock_template = true; + } else { + $this->_pf_docblock = true; + } + return $this->handleDocBlock($word, PARSER_EVENT_DOCBLOCK); + } + $this->_pf_no_output_yet = true; + $this->_pv_saveline = $this->_wp->linenum + 1; + return; + } + if (is_array($word) && $word[0] == T_DOUBLE_COLON) { + $this->_pf_colon_colon = true; + } + if (!$this->_pf_colon_colon && is_array($word) && $word[0] == T_STRING) { + $this->_pv_last_string = $word; + } + $this->_link($word); + $this->checkEventPop($word, $pevent); + } + + /** + * Handle the function declaration header + * + * This handler only sees the "function name" portion of the function + * declaration. Handling of the function parameters is by + * {@link handleFunctionParams()}, and the function body is handled by + * {@link handleLogicBlock()} + */ + function handleFunction($word, $pevent) + { + if ($this->checkEventPush($word, $pevent)) { + $this->_addoutput($word); + return; + } + if ($this->checkEventPop($word, $pevent)) { + return; + } + $this->_link($word); + } + + /** + * Handle the method declaration header + * + * This handler only sees the "function name" portion of the method + * declaration. Handling of the method parameters is by + * {@link handleFunctionParams()}, and the method body is handled by + * {@link handleMethodLogicBlock()} + */ + function handleMethod($word, $pevent) + { + if ($this->checkEventPush($word, $pevent)) { + $this->_addoutput($word); + return; + } + if ($this->checkEventPop($word, $pevent)) { + if ($word == ';') { + $this->_addoutput($word); + } + return; + } + $this->_methodlink($word); + } + + /** + * Handler for the stuff between ( and ) in a function declaration + * + * <code> + * function handles($only,$these,$parameters){...} + * </code> + */ + function handleFunctionParams($word, $pevent) + { + if ($this->checkEventPush($word, $pevent)) { + $this->_addoutput($word); + return; + } + $this->_addoutput($word); + $this->checkEventPop($word, $pevent); + } + + /** + * Handler for function body. + * + * The function body is checked for php functions, documented constants, + * functions, and indirectly for global statements. It hyperlinks to the + * documentation for detected elements is created. Everything else is + * highlighted normally. + */ + function handleLogicBlock($word, $pevent) + { + if ($this->checkEventPush($word, $pevent)) { + $this->_addoutput($word); + return; + } + if (is_array($word) && $word[0] == T_DOUBLE_COLON) { + $this->_pf_colon_colon = true; + } + if (!$this->_pf_colon_colon && is_array($word) && $word[0] == T_STRING) { + $this->_pv_last_string = $word; + } + $this->_link($word); + if ($this->checkEventPop($word, $pevent)) { + $e = $this->_event_stack->popEvent(); + $this->_event_stack->pushEvent($e); + if ($e == PARSER_EVENT_FUNCTION) { + $this->_wp->backupPos($word); + } + } + } + + /** + * Handler for method body. + * + * Like functions, the method body is checked for php functions, documented + * constants, functions, and indirectly for global statements. It also + * checks for "$this->XXXX" where XXXX is a class variable or method, and + * links to the documentation for detected elements is created. Everything + * else is highlighted normally. + */ + function handleMethodLogicBlock($word, $pevent) + { + if (isset($this->_pv_prev_var_type)) { + //debug('prevtype is set'); + if (!is_array($word)) { + unset($this->_pv_prev_var_type); + } else { + if ($word[0] != T_WHITESPACE && + $word[0] != T_STRING && $word[0] != T_OBJECT_OPERATOR + ) { + //fancy_debug('unset', $word); + unset($this->_pv_prev_var_type); + } + } + } + $this->_pf_inmethod = true; + if ($e = $this->checkEventPush($word, $pevent)) { + $this->_addoutput($word); + if ($e == PARSER_EVENT_CLASS_MEMBER) { + $this->_pf_no_output_yet = true; + } + return; + } + if (is_array($word) && $word[0] == T_DOUBLE_COLON) { + $this->_pf_colon_colon = true; + } + if (!$this->_pf_colon_colon && is_array($word) && $word[0] == T_STRING) { + $this->_pv_last_string = $word; + } + if (is_array($word) && $word[0] == T_VARIABLE) { + $this->_pv_lastvar = $word; + } + $this->_link($word); + if ($this->checkEventPop($word, $pevent)) { + $this->_pf_inmethod = false; + $e = $this->_event_stack->popEvent(); + $this->_event_stack->pushEvent($e); + if ($e == PARSER_EVENT_METHOD) { + $this->_wp->backupPos($word); + } + } + } + + /** + * Handles $obj->classmember in a method body + * + * This handler is responsible for linking to the documentation of a + * class member when it is used directly in a method body. + * + * There are two methods of determining whether to link: + * - $this->member + * - $this->member->submember + * + * The first case is handled by the $_pv_lastvar variable, and the + * second case is handled by the $_pv_prev_var_type variable. $_pv_lastvar + * is always set to the value of the last T_VARIABLE token, if and only if + * no text has occurred between the variable and a T_OBJECT_OPERATOR token + * "->". handleClassMember will only link if the last variable encountered + * was $this. + * + * When $this->variable is encountered, the variable is looked up to see + * if it can be found, and if so, the contents of its @var tag are processed + * to see if the member variable is defined to have 1 and only 1 class. + * If so, the $_pv_prev_var_type variable is set to this classname. When + * submember is processed, the HighlightParser checks to see if + * $_pv_prev_var_type::submember() or $_pv_prev_var_type::$submember exists, + * and if it does, it is linked to. + */ + function handleClassMember($word, $pevent) + { + if (!isset($this->_pv_lastvar) && !isset($this->_pv_prev_var_type)) { + //fancy_debug('returned from', $word, $this->_pv_prev_var_type); + $this->_pf_no_output_yet = false; + $this->_event_stack->popEvent(); + return $this->defaultHandler($word, $pevent); + } + if (isset($this->_pv_cm_name)) { + $this->_pf_obj_op = false; + $name = $this->_pv_cm_name; + unset($this->_pv_cm_name); + //debug('unset pvcmname'); + $this->_event_stack->popEvent(); + // control variable for _pv_prev_var_type + $setnow = false; + if ((isset($this->_pv_lastvar) && $this->_pv_lastvar[1] == '$this') || + isset($this->_pv_prev_var_type) + ) { + if (is_array($word) && $word[0] == T_WHITESPACE) { + // preserve value of _pv_prev_var_type + $setnow = true; + $save = $this->_wp->nextToken(); + $temp = $this->_wp->getWord(); + $this->_wp->backupPos($save, true); + } + if ((is_string($word) && $word == '(') || (isset($temp) && + is_string($temp) && $temp == '(') + ) { + // it's a function + $this->_pf_no_output_yet = false; + $this->_methodlink($name); + unset($this->_pv_prev_var_type); + } else { + // it's a variable + //fancy_debug('name is ', $name); + $this->_pf_no_output_yet = false; + $this->_varlink($name, true); + $templink = + $this->_converter->getLink('object ' . $this->_pv_class); + $class = false; + if (is_object($templink)) { + $class = $this->_converter->classes + ->getClass($templink->name, $templink->path); + } + if ($class) { + $varname = $name; + if (is_array($varname)) { + $varname = $name[1]; + } + if ($varname{0} != '$') { + $varname = '$'.$varname; + } + $var = $class->getVar($this->_converter, $varname); + + if (is_object($var) && $var->docblock->var) { + $type = $var->docblock->var->returnType; + } + if (isset($type)) { + if (strpos($type, 'object') === false) { + $type = 'object '.$type; + } + $type = $this->_converter->getLink($type); + if (phpDocumentor_get_class($type) == 'classlink') { + // the variable's type is a class, + // save it for future -> + //fancy_debug('set prev_var_type!', $type->name); + $setnow = true; + $this->_pv_prev_var_type = $type->name; + } else { + unset($this->_pv_prev_var_type); + } + } else { + unset($this->_pv_prev_var_type); + } + } else { + unset($this->_pv_prev_var_type); + } + } + } else { + $this->_pf_no_output_yet = false; + // this does NewLinenum if necessary + $this->_wp->backupPos($word); + $this->_wp->getWord(); + $this->_addoutput($name); + } + if (!$setnow) { + //debug('unset prevtype, no setnow'); + unset($this->_pv_prev_var_type); + } + unset($this->_pv_lastvar); + $this->_pf_no_output_yet = false; + // this does NewLinenum if necessary + $this->_wp->backupPos($word); + $this->_wp->getWord(); + if ($word[0] == T_OBJECT_OPERATOR) { + $this->_wp->backupPos($word); + } else { + $this->_addoutput($word); + } + return; + } + if (!$this->_pf_obj_op && is_array($this->_pv_last_word) && + $this->_pv_last_word[0] == T_OBJECT_OPERATOR + ) { + if ((isset($this->_pv_lastvar) && $this->_pv_lastvar[1] == '$this') || + isset($this->_pv_prev_var_type) + ) { + $this->_pf_obj_op = true; + } else { + $this->_pf_no_output_yet = false; + // this does NewLinenum if necessary + $this->_wp->backupPos($word); + $this->_wp->getWord(); + $this->_addoutput($word); + $this->_event_stack->popEvent(); + } + } + if (is_array($word) && $word == T_WHITESPACE) { + $this->_pf_no_output_yet = false; + // this does NewLinenum if necessary + $this->_wp->backupPos($word); + $this->_wp->getWord(); + $this->_addoutput($word); + return; + } + if ($this->_pf_obj_op) { + if (!(is_array($word) && ($word[0] == T_STRING || + $word[0] == T_WHITESPACE)) + ) { + unset($this->_pv_lastvar); + //debug('unset lastvar'); + $this->_event_stack->popEvent(); + $this->_pf_no_output_yet = false; + // this does NewLinenum if necessary + $this->_wp->backupPos($word); + $this->_wp->getWord(); + $this->_addoutput($word); + return; + } + if ($word[0] == T_STRING) { + //fancy_debug('set pvcmname to', $word); + $this->_pv_cm_name = $word; + } else { + $this->_pf_no_output_yet = false; + // this does NewLinenum if necessary + $this->_wp->backupPos($word); + $this->_wp->getWord(); + $this->_addoutput($word); + } + } + } + + /** + * Handles comments + * + * Comments are almost always single-line tokens, and so will be + * in the last word. This handler checks to see if the current token + * is in fact a comment, and if it isn't, it backs up and returns control + * to the parent event handler with that word. + */ + function handleComment($word, $pevent) + { + $w = $this->_pv_last_word; + // don't perform this check if this is a normal comment. Docblocks + // have the _pf_no_output_yet variable set to true + if ($this->_pf_no_output_yet && is_array($w) && + (in_array($w[0], array(T_COMMENT, T_DOC_COMMENT)) && + strpos($w[1], '/**') === 0) + ) { + $this->_event_stack->popEvent(); + $this->_event_stack->pushEvent(PARSER_EVENT_DOCBLOCK); + return $this->handleDocBlock($word, PARSER_EVENT_DOCBLOCK); + } + if ($this->_pf_no_output_yet) { + $flag = 1; + $this->_pf_no_output_yet = false; + $this->_addoutput($this->_pv_last_word); + } + if (!is_array($word) || + !in_array($word[0], array(T_COMMENT, T_DOC_COMMENT)) || + (in_array($word[0], array(T_COMMENT, T_DOC_COMMENT)) && + strpos($word[1], '/**') === 0) + ) { + $this->_event_stack->popEvent(); + if (strpos($this->_pv_last_word[1], "\n") !== false) { + //$this->_wp->linenum++; + //$this->newLineNum(); + } + $this->_wp->backupPos($this->_pv_last_word); + $this->_wp->getWord(); + //var_dump($this->_wp->nextToken()); + return; + } elseif (isset($flag)) { + $this->newLineNum(); + } + $this->_addoutput($word); + $this->checkEventPop($word, $pevent); + if (strpos($word[1], '*/') === strlen($word[1]) - 2) { + $this->_event_stack->popEvent(); + } + } + + /** + * Handle class declarations + * + * Handles the initial declaration line: + * + * <code>class X</code> + * + * or + * + * <code>class X extends Y implements I</code> + * + * @uses _classlink() to link to documentation for X and for Y class in + * "class X extends Y" + */ + function handleClass($word, $pevent) + { + $this->_pf_in_class = true; + $a = $this->checkEventPush($word, $pevent); + + if (!isset($this->_pv_class) && is_array($word) && $word[0] == T_STRING) { + $this->_pv_class = $this->_converter->class = $word[1]; + $this->_classlink($word); + return; + } + + if (is_array($word) && + in_array($word[0], array(T_PRIVATE, T_PROTECTED, T_PUBLIC)) + ) { + $starttok = $this->_wp->nextToken(); + $test = array(T_WHITESPACE); + while ($test && $test[0] == T_WHITESPACE) { + $tok = $this->_wp->nextToken(); + $test = $this->_wp->getWord(); + } // while + + if (is_array($test) && $test[0] == T_VARIABLE) { + $this->_wp->backupPos($tok, true); + return; + } + $this->_wp->backupPos($starttok, true); + } + + if (@in_array($this->_pv_last_word[0], + array(T_PRIVATE, T_PROTECTED, T_PUBLIC)) + ) { + if (is_array($word) && $word[0] == T_VARIABLE) { + $this->_wp->backupPos($this->_pv_last_word); + $this->_event_stack->pushEvent(PARSER_EVENT_VAR); + return; + } + } + + if ($this->_pf_extends_found && is_array($word) && $word[0] == T_STRING) { + $this->_classlink($word); + return; + } + if (is_array($word) && $word[0] == T_EXTENDS) { + $this->_pf_extends_found = true; + } + if ($a == PARSER_EVENT_DOCBLOCK) { + $this->_pf_no_output_yet = true; + $this->_pv_saveline = $this->_wp->linenum + 1; + return; + } + $this->_addoutput($word); + if ($this->checkEventPop($word, $pevent)) { + $this->_pf_in_class = false; + unset($this->_pv_class); + } + } + + /** + * Handles class variable declaration + * + * <code> + * class X + * { + * var $Y; + * } + * </code> + * + * @uses _varlink() make a link to $Y documentation in class variable + * declaration "var $Y;" + */ + function handleVar($word, $pevent) + { + if ($this->checkEventPush($word, $pevent)) { + $this->_addoutput($word); + return; + } + if (is_array($word) && $word[0] == T_VARIABLE) { + return $this->_varlink($word); + } + $this->_addoutput($word); + $this->checkEventPop($word, $pevent); + } + + /** + * This handler is responsible for highlighting DocBlocks + * + * handleDocBlock determines whether the docblock is normal or a template, + * and gathers all the lines of the docblock together before doing any + * processing + * + * As it is not possible to distinguish any comment token from a docblock + * token, this handler is also called for comments, and will pass control + * to {@link handleComment()} if the comment is not a DocBlock + * + * @uses commonDocBlock() once all lines of the DocBlock have been retrieved + */ + function handleDocBlock($word, $pevent) + { + if (!($this->_pf_docblock || $this->_pf_docblock_template)) { + if (strpos($this->_pv_last_word[1], '/**') !== 0) { + // not a docblock + $this->_wp->backupPos($this->_pv_last_word); + $this->_event_stack->popEvent(); + $this->_event_stack->pushEvent(PARSER_EVENT_COMMENT); + $this->_pf_no_output_yet = false; + return; + } else { + $this->_pf_no_output_yet = true; + $this->_pv_db_lines = array(); + } + } + $last_word = $this->_pv_last_word[1]; + $dtype = '_pv_docblock'; + if ($last_word == '/**#@-*/') { + // stop using docblock template + $this->_pf_no_output_yet = false; + $this->_addDocBlockoutput('closetemplate', $last_word); + if ($this->_pv_next_word !== false) { + $this->_wp->backupPos($this->_pv_next_word, true); + } + $this->_event_stack->popEvent(); + return; + } + if (!($this->_pf_docblock || $this->_pf_docblock_template)) { + $this->_pv_db_lines = array(); + if (strpos($last_word, '/**#@+') === 0) { + // docblock template definition + $this->_pf_docblock_template = true; + } else { + $this->_pf_docblock = true; + } + $this->_pv_db_lines[] = $last_word; + if (strpos($last_word, '*/') !== false) { + $this->commonDocBlock(); + return; + } + $this->_pv_db_lines[] = $word[1]; + if (strpos($word[1], '*/') !== false) { + $this->commonDocBlock(); + } + } else { + $this->_pv_db_lines[] = $word[1]; + } + if (($this->_pf_docblock || $this->_pf_docblock_template) && + (strpos($word[1], '*/') !== false) + ) { + $this->commonDocBlock(); + } + } + /**#@-*/ + + /** + * This continuation of handleDocBlock splits DocBlock comments up into + * phpDocumentor tokens. It highlights DocBlock templates in a different + * manner from regular DocBlocks, recognizes inline tags, regular tags, + * and distinguishes between standard core tags and other tags, and + * recognizes parameters to tags like @var. + * + * the type in "@var type description" will be highlighted as a php type, + * and the var in "@param type $var description" will be highlighted as a + * php variable. + * + * @return void + * @uses handleDesc() highlight inline tags in the description + * @uses handleTags() highlight all tags + * @access private + */ + function commonDocBlock() + { + $this->_event_stack->popEvent(); + $lines = $this->_pv_db_lines; + $go = count($this->_pv_db_lines); + for ($i=0; $i < $go; $i++) { + if (substr(trim($lines[$i]), 0, 2) == '*/' || + substr(trim($lines[$i]), 0, 1) != '*' && + substr(trim($lines[$i]), 0, 3) != '/**' + ) { + $lines[$i] = array($lines[$i], false); + } elseif (substr(trim($lines[$i]), 0, 3) == '/**') { + $linesi = array(); + // remove leading "/**" + $linesi[1] = substr(trim($lines[$i]), 3); + if (empty($linesi[1])) { + $linesi[0] = $lines[$i]; + } else { + $linesi[0] = + substr($lines[$i], 0, strpos($lines[$i], $linesi[1])); + } + $lines[$i] = $linesi; + } else { + $linesi = array(); + // remove leading "* " + $linesi[1] = substr(trim($lines[$i]), 1); + if (empty($linesi[1])) { + $linesi[0] = $lines[$i]; + } else { + $linesi[0] = + substr($lines[$i], 0, strpos($lines[$i], $linesi[1])); + } + $lines[$i] = $linesi; + } + } + for ($i = 0; $i < count($lines); $i++) { + if ($lines[$i][1] === false) { + continue; + } + if (substr(trim($lines[$i][1]), 0, 1) == '@' && + substr(trim($lines[$i][1]), 0, 2) != '@ ' + ) { + $tagindex = $i; + $i = count($lines); + } + } + if (isset($tagindex)) { + $tags = array_slice($lines, $tagindex); + $desc = array_slice($lines, 0, $tagindex); + } else { + $tags = array(); + $desc = $lines; + } + //var_dump($desc, $tags); + $this->_pf_no_output_yet = false; + $save = $this->_wp->linenum; + $this->_wp->linenum = $this->_pv_saveline; + $this->handleDesc($desc); + $this->handleTags($tags); + $this->_pv_db_lines = array(); + $this->_wp->linenum = $save; + if (strpos($this->_pv_last_word[1], '*/') !== false) { + $this->_wp->backupPos($this->_pv_next_word, true); + } + $this->_pf_docblock = $this->_pf_docblock_template = false; + } + + /** + * Handle the description area of a DocBlock + * + * This method simply finds inline tags and highlights them + * separately from the rest of the description. + * + * @param mixed $desc the description piece(s) + * + * @return void + * @uses getInlineTags() + * @access private + */ + function handleDesc($desc) + { + $dbtype = 'docblock'; + $dbtype .= ($this->_pf_docblock ? '' : 'template'); + foreach ($desc as $line) { + $this->getInlineTags($line[0] . $line[1]); + if (strpos($line[0], '*/') === false && + !(substr($line[0], 0, 2) == '/*' && + strpos($line[1], '*/') !== false) + ) { + $this->newLineNum(); + $this->_wp->linenum++; + } + } + if ($this->_pf_internal) { + $this->_pf_internal = false; + } + } + + /** + * Handle phpDocumentor tags in a DocBlock + * + * This method uses the {@link $tagHandlers} array to determine which + * method will handle tags found in the docblock, and passes the data to + * the individual handlers one by one + * + * @param array $tags array of tags to handle + * + * @return void + * @access private + */ + function handleTags($tags) + { + $newtags = array(); + $curtag = array(); + for ($i=0; $i < count($tags); $i++) { + $tagsi = trim($tags[$i][1]); + if (substr($tagsi, 0, 1) == '@' && substr($tagsi, 0, 2) != '@ ') { + // start a new tag + $tags[$i][1] = array(substr($tags[$i][1], 0, + strpos($tags[$i][1], $tagsi)), $tagsi); + if (!empty($curtag)) { + $newtags[] = $curtag; + $curtag = array(); + } + $curtag[] = $tags[$i]; + } else { + $curtag[] = $tags[$i]; + } + } + if (!empty($curtag)) { + $newtags[] = $curtag; + } + foreach ($newtags as $tag) { + foreach ($tag as $i => $t) { + if ($t[1] === false) { + continue; + } + if (is_array($t[1])) { + $tag[$i][1][1] + = explode(" ", str_replace("\t", ' ', $t[1][1])); + $x = $tag[$i][1][1]; + } + } + $tagname = substr(array_shift($x), 1); + $restoftag = $tag; + if (isset($this->tagHandlers[$tagname])) { + $handle = $this->tagHandlers[$tagname]; + } else { + $handle = $this->tagHandlers['*']; + } + $this->$handle($tagname, $restoftag); + } + } + + /** + * This handler recognizes all {@}inline} tags + * + * Normal inline tags are simply highlighted. the {@}internal}} inline + * tag {@tutorial tags.inlineinternal.pkg} is highlighted differently + * to distinguish it from other inline tags. + * + * @param mixed $value the tag value + * @param bool $endinternal indicates the end of an @internal tag + * + * @return void + * @access private + */ + function getInlineTags($value, $endinternal = false) + { + if (!$value) { + return; + } + if ($this->_pf_internal && !$endinternal) { + if (strpos($value, '}}') !== false) { + $x = strrpos($value, '}}'); + // add the rest of internal + $this->getInlineTags(substr($value, 0, $x + 3), true); + // strip internal from value + $value = substr($value, strrpos($value, '}}') + 1); + // turn off internal + $this->_pf_internal = false; + } + } + if (!$value) { + return; + } + $dbtype = 'docblock'; + $dbtype .= ($this->_pf_docblock ? '' : 'template'); + $save = $value; + $value = explode('{@', $value); + $newval = array(); + // everything before the first {@ is normal text + $this->_addDocBlockoutput($dbtype, $value[0]); + for ($i=1; $i < count($value); $i++) { + if (substr($value[$i], 0, 1) == '}') { + $this->_addDocBlockoutput($dbtype, '{@}' . substr($value[$i], 1)); + } else { + $save = $value[$i]; + $value[$i] = str_replace("\t", " ", $value[$i]); + $value[$i] = explode(" ", $value[$i]); + $word = array_shift($value[$i]); + $val = join(' ', $value[$i]); + if ($word == 'internal') { + $this->_pf_internal = true; + $this->_addDocBlockoutput($dbtype, '{@internal '); + $value[$i] = substr($save, strlen('internal') + 1); + // strip internal and cycle as if it were normal text. + $this->_addDocBlockoutput($dbtype, $value[$i]); + continue; + } + if (in_array(str_replace('}', '', $word), $this->allowableInlineTags) + ) { + if (strpos($word, '}')) { + $word = str_replace('}', '', $word); + $val = '} ' . $val; + } + $val = explode('}', $val); + if (count($val) == 1) { + //addError(PDERROR_UNTERMINATED_INLINE_TAG, + // $word, '', $save); + } + $rest = $val; + $val = array_shift($rest); + if ($endinternal) { + $rest = join('}', $rest); + } else { + $rest = join(' ', $rest); + } + if (isset($this->inlineTagHandlers[$word])) { + $handle = $this->inlineTagHandlers[$word]; + } else { + $handle = $this->inlineTagHandlers['*']; + } + $this->$handle($word, $val); + $this->_addDocBlockoutput($dbtype, $rest); + } else { + $val = $word . ' ' . $val; + $this->_addDocBlockoutput($dbtype, '{@' . $val); + } + } + } + } + + + /** + * Handles all inline tags + * + * @param string $name the tag name + * @param mixed $value the tag value + * + * @return void + * @access private + */ + function handleDefaultInlineTag($name, $value) + { + $this->_addDocBlockoutput('inlinetag', '{@' . $name . ' ' . $value . '}'); + } + + /**#@+ + * phpDocumentor DocBlock tag handlers + * + * @param string $name tag name + * @param array $value array of lines contained in the tag description + * + * @return void + * @access private + */ + /** + * Handle normal tags + * + * This handler adds to outpu all comment information before the tag begins + * as in " * " before "@todo" in " * @todo" + * + * Then, it highlights the tag as a regular or coretag based on $coretag. + * Finally, it uses getInlineTags to highlight the description + * + * @param bool $coretag whether this tag is a core tag or not + * + * @uses getInlineTags() highlight a tag description + */ + function defaultTagHandler($name, $value, $coretag = false) + { + $dbtype = 'docblock'; + $dbtype .= ($this->_pf_docblock ? '' : 'template'); + foreach ($value as $line) { + $this->_addDocBlockoutput($dbtype, $line[0]); + if ($line[1] === false) { + if (trim($line[0]) != '*/') { + $this->newLineNum(); + $this->_wp->linenum++; + } + continue; + } + $this->_addDocBlockoutput($dbtype, $line[1][0]); + $stored = ''; + if (is_array($line[1][1])) { + foreach ($line[1][1] as $i => $tpart) { + if ($tpart == '@' . $name && $i == 0) { + $tagname = 'tag'; + if ($coretag) { + $tagname = 'coretag'; + } + $this->_addDocBlockoutput($tagname, '@' . $name); + continue; + } + $stored .= ' ' . $tpart; + } + } else { + $stored = $line[1]; + } + $this->getInlineTags($stored); + if (strpos($stored, '*/') === false) { + $this->newLineNum(); + $this->_wp->linenum++; + } + } + } + + /** + * main handler for "core" tags + * + * @see defaultTagHandler() + */ + function coreTagHandler($name, $value) + { + return $this->defaultTagHandler($name, $value, true); + } + + /** + * Handles @global + * + * This handler works like {@link defaultTagHandler()} except it highlights + * the type and variable (if present) in "@global type $variable" or + * "@global type description" + */ + function globalTagHandler($name, $value) + { + $this->paramTagHandler($name, $value); + } + + /** + * Handles @param + * + * This handler works like {@link defaultTagHandler()} except it highlights + * the type and variable (if present) in "@param type $variable description" + * or "@param type description" + * + * @param bool $checkforvar private parameter, checks for $var or not + */ + function paramTagHandler($name, $value, $checkforvar = true) + { + $dbtype = 'docblock'; + $dbtype .= ($this->_pf_docblock ? '' : 'template'); + $ret = $this->retrieveType($value, 0, $checkforvar); + foreach ($value as $num => $line) { + $this->_addDocBlockoutput($dbtype, $line[0]); + if ($line[1] === false) { + if (trim($line[0]) != '*/') { + $this->newLineNum(); + $this->_wp->linenum++; + } + continue; + } + $this->_addDocBlockoutput($dbtype, $line[1][0]); + $stored = ''; + $typeloc = 1; + $varloc = 2; + if (is_array($line[1][1])) { + $this->_addDocBlockoutput('coretag', '@' . $name . ' '); + foreach ($ret[0] as $text) { + if (is_string($text)) { + $this->_addDocBlockoutput($dbtype, $text); + } + if (is_array($text)) { + if ($text[0] != 'desc') { + $this->_addDocBlockoutput($text[0], $text[1]); + } else { + $stored .= $text[1]; + } + } + } + } else { + if (isset($ret[$num])) { + foreach ($ret[$num] as $text) { + if (is_string($text)) { + $this->_addDocBlockoutput($dbtype, $text); + } + if (is_array($text)) { + if ($text[0] != 'desc') { + $this->_addDocBlockoutput($text[0], $text[1]); + } else { + $stored .= $text[1]; + } + } + } + } else { + $stored = $line[1]; + } + } + $this->getInlineTags($stored); + if (strpos($stored, '*/') === false) { + $this->newLineNum(); + $this->_wp->linenum++; + } + } + } + + /** + * handles the @staticvar tag + * + * @see paramTagHandler() + */ + function staticvarTagHandler($name, $value) + { + return $this->paramTagHandler($name, $value); + } + + /** + * handles the @var tag + * + * @see paramTagHandler() + */ + function varTagHandler($name, $value) + { + return $this->paramTagHandler($name, $value); + } + + /** + * Handles @return + * + * This handler works like {@link defaultTagHandler()} except it highlights + * the type in "@return type description" + */ + function returnTagHandler($name, $value) + { + $this->paramTagHandler($name, $value, false); + } + + /** + * Handles @property(-read or -write) and @method magic tags + */ + function propertyTagHandler($name, $value) + { + return $this->paramTagHandler($name, $value, true); + } + + /**#@-*/ + + /** + * Retrieve the type portion of a @tag type description + * + * Tags like @param, @return and @var all have a PHP type portion in their + * description. Since the type may contain the expression "object blah" + * where blah is a classname, it makes parsing out the type field complex. + * + * Even more complicated is the case where a tag variable can contain + * multiple types, such as object blah|object blah2|false, and so this + * method handles these cases. + * + * @param array $value array of words that were separated by spaces + * @param 0|1 $state 0 = find the type, 1 = find the var, if present + * @param bool $checkforvar flag to determine whether to check for the end of a + * type is defined by a $varname + * + * @return array Format: array(state (0 [find type], 1 [var], 2 [done]), + * @access private + */ + function retrieveType($value, $state = 0, $checkforvar = false) + { + $index = 0; + $result = array(); + do { + if (!isset($value[$index][1])) { + return $result; + } + $val = $value[$index][1]; + if (empty($val)) { + return $result; + } + if ($index == 0) { + $val = $val[1]; + array_shift($val); + } else { + $val = explode(' ', $val); + } + $ret = $this->_retrieveType($val, $state, $checkforvar); + $state = $ret[0]; + $result[$index++] = $ret[1]; + } while ((!$checkforvar && $state < 1) || ($state < 2 && $checkforvar)); + return $result; + } + + /** + * used by {@link retrieveType()} in its work + * + * @param array $value array of words that were separated by spaces + * @param 0|1 $state 0 = find the type, 1 = find the var, if present + * @param bool $checkforvar flag to determine whether to check for the end of a + * type is defined by a $varname + * + * @return array + * @access private + */ + function _retrieveType($value, $state, $checkforvar) + { + $result = array(); + $result[] = $this->_removeWhiteSpace($value, 0); + if ($state == 0) { + if (!count($value)) { + return array(2, $result); + } + $types = ''; + $index = 0; + if (trim($value[0]) == 'object') { + $result[] = array('tagphptype', $value[0] . ' '); + $types .= array_shift($value).' '; + $result[] = $this->_removeWhiteSpace($value, 0); + if (!count($value)) { + // was just passed "object" + return array(2, $result); + } + if ($value[0]{0} == '$' || substr($value[0], 0, 2) == '&$') { + // was just passed "object" + // and the next thing is a variable name + if ($checkforvar) { + $result[] = array('tagvarname' , $value[0] . ' '); + array_shift($value); + } + $result[] = array('desc', join(' ', $value)); + return array(2, $result); + } + } + $done = false; + $loop = -1; + do { + // this loop checks for type|type|type and for + // type|object classname|type|object classname2 + if (strpos($value[0], '|')) { + $temptypes = explode('|', $value[0]); + while (count($temptypes)) { + $type = array_shift($temptypes); + $result[] = array('tagphptype', $type); + if (count($temptypes)) { + $result[] = '|'; + } + } + if (trim($type) == 'object') { + $result[] = array('tagphptype', $types . ' '); + $result[] = $this->_removeWhiteSpace($value, 0); + } else { + $done = true; + } + array_shift($value); + if (count($value) && strlen($value[0]) && isset ($value[0]) && + ($value[0]{0} == '$' || substr($value[0], 0, 2) == '&$') + ) { + // was just passed "object" + // and the next thing is a variable name + $result[] = array('tagvarname' , $value[0] . ' '); + array_shift($value); + $result[] = array('desc', join(' ', $value)); + return array(2, $result); + } + } else { + $result[] = array('tagphptype', $value[0] . ' '); + array_shift($value); + $done = true; + } + $loop++; + } while (!$done && count($value)); + if ($loop) { + $result[] = ' '; + } + // still searching for type + if (!$done && !count($value)) { + return array(0, $result); + } + // still searching for var + if ($done && !count($value)) { + return array(1, $result); + } + } + $result[] = $this->_removeWhiteSpace($value, 0); + $state = 1; + if ($checkforvar) { + if (count($value)) { + $state = 2; + if (substr($value[0], 0, 1) == '$' || + substr($value[0], 0, 2) == '&$' + ) { + $result[] = array('tagvarname' , $value[0] . ' '); + array_shift($value); + } + } else { + $state = 1; + } + } + $result[] = array('desc', join(' ', $value)); + return array($state, $result); + } + + /** + * captures trailing whitespace + * + * @param array &$value array of string + * @param int $index index to seek non-whitespace to + * + * @return string whitespace + * @access private + */ + function _removeWhiteSpace(&$value, $index) + { + $result = ''; + if (count($value) > $index && empty($value[$index])) { + $found = false; + for ($i = $index; $i < count($value) && !strlen($value[$i]); $i++) { + $result .= ' '; + } + array_splice($value, $index, $i - $index); + } + return $result; + } + + /**#@+ + * Link generation methods + * + * @param string|array $word token to try to link + * + * @access private + */ + /** + * Generate a link to documentation for an element + * + * This method tries to link to documentation for functions, methods, + * PHP functions, class names, and if found, adds the links to output + * instead of plain text + */ + function _link($word) + { + if (is_array($word) && $word[0] == T_STRING) { + if ($this->_pf_colon_colon) { + $this->_pf_colon_colon = false; + + $combo = $this->_pv_last_string[1] . '::' . $word[1] . '()'; + //debug('testing ' . $combo); + $link = $this->_converter->getLink($combo); + if (is_object($link)) { + $this->_addoutput($this->_converter->returnSee($link, + $word[1]), true); + return; + } + $this->_addoutput($word); + return; + } + $link = $this->_converter->getLink($word[1] . '()'); + if (is_object($link)) { + $this->_addoutput($this->_converter->returnSee($link, + $word[1]), true); + return; + } elseif (is_string($link) && strpos($link, 'ttp://')) { + $this->_addoutput($this->_converter->returnLink($link, + $word[1]), true); + return; + } else { + $link = $this->_converter->getLink($word[1]); + if (is_object($link)) { + $word[1] = $this->_converter->returnSee($link, $word[1]); + } + $this->_addoutput($word, true); + return; + } + } + $this->_addoutput($word); + } + + /** + * Works like {@link _link()} except it only links to global variables + */ + function _globallink($word) + { + if (!is_array($word)) { + return $this->_addoutput($word); + } + if ($word[0] != T_VARIABLE) { + return $this->_addoutput($word); + } + if (is_array($word) && $word[0] == T_VARIABLE) { + $link = $this->_converter->getLink('global ' . $word[1]); + if (is_object($link)) { + $this->_addoutput($this->_converter->returnSee($link, + $word[1]), true); + return; + } + } + $this->_addoutput($word); + } + + /** + * Works like {@link _link()} except it only links to classes + */ + function _classlink($word) + { + //debug("checking class " . $word[1]); + if (is_array($word) && $word[0] == T_STRING) { + $link = $this->_converter->getLink($word[1]); + if (is_object($link)) { + $this->_addoutput($this->_converter->returnSee($link, + $word[1]), true); + return; + } + } + $this->_addoutput($word); + } + + /** + * Works like {@link _link()} except it only links to methods + */ + function _methodlink($word) + { + if (is_array($word) && $word[0] == T_STRING) { + //debug("checking method " . $this->_pv_class . '::' . $word[1] . '()'); + if (isset($this->_pv_prev_var_type)) { + $link = $this->_converter->getLink($this->_pv_prev_var_type . '::' . + $word[1] . '()'); + } else { + $link = $this->_converter->getLink($this->_pv_class . '::' . + $word[1] . '()'); + } + if (is_object($link)) { + $this->_addoutput($this->_converter->returnSee($link, + $word[1]), true); + return; + } + if (isset($this->_pv_prev_var_type)) { + $this->_addoutput($word); + return; + } + //debug("checking method " . $word[1] . '()'); + $link = $this->_converter->getLink($word[1] . '()'); + if (is_object($link)) { + $this->_addoutput($this->_converter->returnSee($link, + $word[1]), true); + return; + } + } + $this->_addoutput($word); + } + + /** + * Works like {@link _link()} except it only links to class variables + * + * @param bool $justastring true if the $word is only a string + */ + function _varlink($word, $justastring=false) + { + if ($justastring) { + $word[0] = T_VARIABLE; + } + if (is_array($word) && $word[0] == T_VARIABLE) { + $x = ($justastring ? '$' : ''); + //debug("checking var " . $this->_pv_class . '::' . $x . $word[1]); + if (isset($this->_pv_prev_var_type)) { + //debug("checking var " . $this->_pv_prev_var_type . '::' . + // $x . $word[1]); + $link = $this->_converter->getLink($this->_pv_prev_var_type . '::' . + $x . $word[1]); + } else { + $link = $this->_converter->getLink($this->_pv_class . '::' . + $x . $word[1]); + } + if (is_object($link)) { + $this->_addoutput($this->_converter->returnSee($link, + $word[1]), true); + return; + } + //debug("checking var " . $x . $word[1]); + if (isset($this->_pv_prev_var_type)) { + $this->_addoutput($word); + return; + } + $link = $this->_converter->getLink($x . $word[1]); + if (is_object($link)) { + $this->_addoutput($this->_converter->returnSee($link, + $word[1]), true); + return; + } + } + $this->_addoutput($word); + } + /**#@-*/ + + /**#@+ + * Output Methods + * @access private + */ + /** + * This method adds output to {@link $_line} + * + * If a string with variables like "$test this" is present, then special + * handling is used to allow processing of the variable in context. + * + * @param mixed $word the string|array tag token and value + * @param bool $preformatted whether or not the $word is already formatted + * + * @return void + * @see _flush_save() + */ + function _addoutput($word, $preformatted = false) + { + if ($this->_pf_no_output_yet) { + return; + } + if ($this->_pf_quote_active) { + if (is_array($word)) { + $this->_save .= $this->_converter->highlightSource($word[0], + $word[1]); + } else { + $this->_save .= $this->_converter->highlightSource(false, + $word, true); + } + } else { + $this->_flush_save(); + if (is_string($word) && trim($word) == '') { + $this->_line .= $this->_converter->postProcess($word); + return; + } + if (is_array($word) && trim($word[1]) == '') { + $this->_line .= $this->_converter->postProcess($word[1]); + return; + } + if (is_array($word)) { + $this->_line .= $this->_converter->highlightSource($word[0], + $word[1], $preformatted); + } else { + $this->_line .= $this->_converter->highlightSource(false, + $word, $preformatted); + } + } + } + + /** + * Like {@link _output()}, but for DocBlock highlighting + * + * @param mixed $dbtype the docblock type + * @param mixed $word the string|array tag token and value + * @param bool $preformatted whether or not the $word is already formatted + * + * @return void + */ + function _addDocBlockoutput($dbtype, $word, $preformatted = false) + { + if ($this->_pf_internal) { + $this->_line .= $this->_converter->highlightDocBlockSource('internal', + $word, $preformatted); + } else { + $this->_line .= $this->_converter->highlightDocBlockSource($dbtype, + $word, $preformatted); + } + } + + /** + * Flush a saved string variable highlighting + * + * {@source} + * + * @return void + * @todo CS cleanup - rename to _flushSave() for camelCase rule + */ + function _flush_save() + { + if (!empty($this->_save)) { + $this->_save .= $this->_converter->flushHighlightCache(); + // clear the existing cache, reset it to the old value + if (isset($this->_save_highlight_state)) { + $this->_converter-> + _setHighlightCache($this->_save_highlight_state[0], + $this->_save_highlight_state[1]); + } + $this->_line .= $this->_converter-> + highlightSource(T_CONSTANT_ENCAPSED_STRING, $this->_save, true); + $this->_save = ''; + } + } + /**#@-*/ + + /** + * Give the word parser necessary data to begin a new parse + * + * @param array &$data all tokens separated by line number + * + * @return void + */ + function configWordParser(&$data) + { + $this->_wp->setup($data, $this); + $this->_wp->setWhitespace(true); + } + + /** + * Initialize all parser state variables + * + * @param bool $inlinesourceparse true if we are highlighting an inline + * {@}source} tag's output + * @param false|string $class name of class we are going + * to start from + * + * @return void + * @uses $_wp sets to a new {@link phpDocumentor_HighlightWordParser} + */ + function setupStates($inlinesourceparse, $class) + { + $this->_output = ''; + $this->_line = ''; + unset($this->_wp); + $this->_wp = new phpDocumentor_HighlightWordParser; + $this->_event_stack = new EventStack; + if ($inlinesourceparse) { + $this->_event_stack->pushEvent(PARSER_EVENT_PHPCODE); + if ($class) { + $this->_event_stack->pushEvent(PARSER_EVENT_CLASS); + $this->_pv_class = $class; + } + } else { + $this->_pv_class = null; + } + + $this->_pv_define = null; + $this->_pv_define_name = null; + $this->_pv_define_value = null; + $this->_pv_define_params_data = null; + $this->_pv_dtype = null; + $this->_pv_docblock = null; + $this->_pv_dtemplate = null; + $this->_pv_func = null; + $this->_pv_global_name = null; + $this->_pv_global_val = null; + $this->_pv_globals = null; + $this->_pv_global_count = null; + $this->_pv_include_params_data = null; + $this->_pv_include_name = null; + $this->_pv_include_value = null; + $this->_pv_linenum = null; + $this->_pv_periodline = null; + $this->_pv_paren_count = 0; + $this->_pv_statics = null; + $this->_pv_static_count = null; + $this->_pv_static_val = null; + $this->_pv_quote_data = null; + $this->_pv_function_data = null; + $this->_pv_var = null; + $this->_pv_varname = null; + $this->_pf_definename_isset = false; + $this->_pf_extends_found = false; + $this->_pf_includename_isset = false; + $this->_pf_get_source = false; + $this->_pf_getting_source = false; + $this->_pf_in_class = false; + $this->_pf_in_define = false; + $this->_pf_in_global = false; + $this->_pf_in_include = false; + $this->_pf_in_var = false; + $this->_pf_funcparam_val = false; + $this->_pf_quote_active = false; + $this->_pf_reset_quote_data = true; + $this->_pf_useperiod = false; + $this->_pf_var_equals = false; + $this->_pf_obj_op = false; + $this->_pf_docblock = false; + $this->_pf_docblock_template = false; + $this->_pf_colon_colon = false; + $this->_pv_last_string = false; + $this->_pf_inmethod = false; + $this->_pf_no_output_yet = false; + $this->_pv_saveline = 0; + $this->_pv_next_word = false; + $this->_save = ''; + } + + /** + * Initialize the {@link $tokenpushEvent, $wordpushEvent} arrays + * + * @return void + */ + function phpDocumentor_HighlightParser() + { + if (!defined('T_INTERFACE')) { + define('T_INTERFACE', -1); + } + $this->allowableTags + = $GLOBALS['_phpDocumentor_tags_allowed']; + $this->allowableInlineTags + = $GLOBALS['_phpDocumentor_inline_doc_tags_allowed']; + $this->inlineTagHandlers + = array('*' => 'handleDefaultInlineTag'); + /**************************************************************/ + + $this->tokenpushEvent[PARSER_EVENT_NOEVENTS] = + array( + T_OPEN_TAG => PARSER_EVENT_PHPCODE, + ); + + /**************************************************************/ + + $this->tokenpushEvent[PARSER_EVENT_PHPCODE] = + array( + T_FUNCTION => PARSER_EVENT_FUNCTION, + T_CLASS => PARSER_EVENT_CLASS, + T_INTERFACE => PARSER_EVENT_CLASS, + T_INCLUDE_ONCE => PARSER_EVENT_INCLUDE, + T_INCLUDE => PARSER_EVENT_INCLUDE, + T_START_HEREDOC => PARSER_EVENT_EOFQUOTE, + T_REQUIRE => PARSER_EVENT_INCLUDE, + T_REQUIRE_ONCE => PARSER_EVENT_INCLUDE, + T_COMMENT => PARSER_EVENT_COMMENT, + T_DOC_COMMENT => PARSER_EVENT_DOCBLOCK, + ); + $this->wordpushEvent[PARSER_EVENT_PHPCODE] = + array( + "define" => PARSER_EVENT_DEFINE, + '"' => PARSER_EVENT_QUOTE, + '\'' => PARSER_EVENT_QUOTE, + ); + /**************************************************************/ + + $this->wordpushEvent[PARSER_EVENT_FUNCTION] = + array( + '{' => PARSER_EVENT_LOGICBLOCK, + '(' => PARSER_EVENT_FUNCTION_PARAMS, + ); + $this->tokenpushEvent[PARSER_EVENT_FUNCTION] = + array( + T_COMMENT => PARSER_EVENT_COMMENT, + T_DOC_COMMENT => PARSER_EVENT_DOCBLOCK, + ); + $this->wordpopEvent[PARSER_EVENT_FUNCTION] = array("}"); + /**************************************************************/ + + $this->tokenpopEvent[PARSER_EVENT_EOFQUOTE] = array(T_END_HEREDOC); + /**************************************************************/ + + $this->tokenpushEvent[PARSER_EVENT_FUNCTION_PARAMS] = + array( + T_CONSTANT_ENCAPSED_STRING => PARSER_EVENT_QUOTE, + T_ARRAY => PARSER_EVENT_ARRAY, + T_COMMENT => PARSER_EVENT_COMMENT, + T_DOC_COMMENT => PARSER_EVENT_DOCBLOCK, + ); + $this->wordpushEvent[PARSER_EVENT_FUNCTION_PARAMS] = + array( + '"' => PARSER_EVENT_QUOTE, + "'" => PARSER_EVENT_QUOTE, + ); + $this->wordpopEvent[PARSER_EVENT_FUNCTION_PARAMS] = array(")"); + /**************************************************************/ + + $this->wordpushEvent[PARSER_EVENT_LOGICBLOCK] = + array( + "{" => PARSER_EVENT_LOGICBLOCK, + '"' => PARSER_EVENT_QUOTE, + ); + $this->tokenpushEvent[PARSER_EVENT_LOGICBLOCK] = + array( + T_GLOBAL => PARSER_EVENT_FUNC_GLOBAL, + T_STATIC => PARSER_EVENT_STATIC_VAR, + T_START_HEREDOC => PARSER_EVENT_EOFQUOTE, + T_CURLY_OPEN => PARSER_EVENT_LOGICBLOCK, + T_DOLLAR_OPEN_CURLY_BRACES => PARSER_EVENT_LOGICBLOCK, + ); + $this->wordpopEvent[PARSER_EVENT_LOGICBLOCK] = array("}"); + $this->tokenpopEvent[PARSER_EVENT_LOGICBLOCK] = array(T_CURLY_OPEN); + + /**************************************************************/ + + $this->tokenpushEvent[PARSER_EVENT_ARRAY] = + array( + T_COMMENT => PARSER_EVENT_COMMENT, + T_DOC_COMMENT => PARSER_EVENT_DOCBLOCK, + ); + $this->wordpopEvent[PARSER_EVENT_ARRAY] = array(")"); + /**************************************************************/ + + $this->tokenpushEvent[PARSER_EVENT_FUNC_GLOBAL] = + array( + T_COMMENT => PARSER_EVENT_COMMENT, + T_DOC_COMMENT => PARSER_EVENT_DOCBLOCK, + ); + $this->wordpopEvent[PARSER_EVENT_FUNC_GLOBAL] = array(";"); + /**************************************************************/ + + $this->tokenpushEvent[PARSER_EVENT_STATIC_VAR] = + array( + T_CONSTANT_ENCAPSED_STRING => PARSER_EVENT_QUOTE, + T_COMMENT => PARSER_EVENT_COMMENT, + T_DOC_COMMENT => PARSER_EVENT_DOCBLOCK, + ); + $this->wordpushEvent[PARSER_EVENT_STATIC_VAR] = + array( + "=" => PARSER_EVENT_STATIC_VAR_VALUE, + ); + $this->wordpopEvent[PARSER_EVENT_STATIC_VAR] = array(";"); + /**************************************************************/ + + $this->tokenpushEvent[PARSER_EVENT_STATIC_VAR_VALUE] = + array( + T_CONSTANT_ENCAPSED_STRING => PARSER_EVENT_QUOTE, + T_COMMENT => PARSER_EVENT_COMMENT, + T_DOC_COMMENT => PARSER_EVENT_DOCBLOCK, + T_ARRAY => PARSER_EVENT_ARRAY, + ); + $this->wordpushEvent[PARSER_EVENT_STATIC_VAR_VALUE] = + array( + '"' => PARSER_EVENT_QUOTE, + "'" => PARSER_EVENT_QUOTE, + ); + $this->wordpopEvent[PARSER_EVENT_STATIC_VAR_VALUE] = array(";", ","); + /**************************************************************/ + $this->tokenpushEvent[PARSER_EVENT_QUOTE] = + array( + T_OBJECT_OPERATOR => PARSER_EVENT_CLASS_MEMBER, + T_CURLY_OPEN => PARSER_EVENT_QUOTE_VAR, + ); + $this->wordpopEvent[PARSER_EVENT_QUOTE] = array('"'); + /**************************************************************/ + $this->tokenpushEvent[PARSER_EVENT_QUOTE_VAR] = + array( + T_OBJECT_OPERATOR => PARSER_EVENT_CLASS_MEMBER, + T_CURLY_OPEN => PARSER_EVENT_QUOTE_VAR, + ); + $this->wordpushEvent[PARSER_EVENT_QUOTE_VAR] = + array( + "{" => PARSER_EVENT_QUOTE_VAR, + '"' => PARSER_EVENT_QUOTE_VAR, + "'" => PARSER_EVENT_QUOTE_VAR, + ); + $this->wordpopEvent[PARSER_EVENT_QUOTE_VAR] = array('}'); + /**************************************************************/ + + $this->tokenpushEvent[PARSER_EVENT_DEFINE] = + array( + T_COMMENT => PARSER_EVENT_COMMENT, + T_DOC_COMMENT => PARSER_EVENT_DOCBLOCK, + T_CONSTANT_ENCAPSED_STRING => PARSER_EVENT_QUOTE, + ); + $this->wordpushEvent[PARSER_EVENT_DEFINE] = + array( + "(" => PARSER_EVENT_DEFINE_PARAMS, + ); + $this->wordpopEvent[PARSER_EVENT_DEFINE] = array(";"); + /**************************************************************/ + + $this->tokenpushEvent[PARSER_EVENT_DEFINE_PARAMS] = + array( + T_COMMENT => PARSER_EVENT_COMMENT, + T_DOC_COMMENT => PARSER_EVENT_DOCBLOCK, + ); + $this->wordpushEvent[PARSER_EVENT_DEFINE_PARAMS] = + array( + "(" => PARSER_EVENT_DEFINE_PARAMS_PARENTHESIS, + '"' => PARSER_EVENT_QUOTE, + "'" => PARSER_EVENT_QUOTE, + ); + $this->wordpopEvent[PARSER_EVENT_DEFINE_PARAMS] = array(")"); + /**************************************************************/ + + $this->tokenpushEvent[PARSER_EVENT_DEFINE_PARAMS_PARENTHESIS] = + array( + T_COMMENT => PARSER_EVENT_COMMENT, + T_DOC_COMMENT => PARSER_EVENT_DOCBLOCK, + ); + $this->wordpushEvent[PARSER_EVENT_DEFINE_PARAMS_PARENTHESIS] = + array( + "(" => PARSER_EVENT_DEFINE_PARAMS_PARENTHESIS, + '"' => PARSER_EVENT_QUOTE, + "'" => PARSER_EVENT_QUOTE, + ); + $this->wordpopEvent[PARSER_EVENT_DEFINE_PARAMS_PARENTHESIS] = array(")"); + /**************************************************************/ + + $this->tokenpushEvent[PARSER_EVENT_VAR] = + array( + T_COMMENT => PARSER_EVENT_COMMENT, + T_DOC_COMMENT => PARSER_EVENT_DOCBLOCK, + T_ARRAY => PARSER_EVENT_ARRAY, + ); + $this->wordpopEvent[PARSER_EVENT_VAR] = array(";"); + /**************************************************************/ + + $this->tokenpushEvent[PARSER_EVENT_CLASS] = + array( + T_FUNCTION => PARSER_EVENT_METHOD, + T_VAR => PARSER_EVENT_VAR, + T_COMMENT => PARSER_EVENT_DOCBLOCK, + T_DOC_COMMENT => PARSER_EVENT_DOCBLOCK, + T_CLOSE_TAG => PARSER_EVENT_OUTPHP, + ); + $this->wordpopEvent[PARSER_EVENT_CLASS] = array("}"); + /**************************************************************/ + + $this->wordpushEvent[PARSER_EVENT_METHOD] = + array( + '{' => PARSER_EVENT_METHOD_LOGICBLOCK, + '(' => PARSER_EVENT_FUNCTION_PARAMS, + ); + $this->tokenpushEvent[PARSER_EVENT_METHOD] = + array( + T_COMMENT => PARSER_EVENT_COMMENT, + T_DOC_COMMENT => PARSER_EVENT_DOCBLOCK, + ); + $this->wordpopEvent[PARSER_EVENT_METHOD] = array("}", ";"); + /**************************************************************/ + + $this->wordpushEvent[PARSER_EVENT_METHOD_LOGICBLOCK] = + array( + "{" => PARSER_EVENT_METHOD_LOGICBLOCK, + '"' => PARSER_EVENT_QUOTE, + ); + $this->tokenpushEvent[PARSER_EVENT_METHOD_LOGICBLOCK] = + array( + T_OBJECT_OPERATOR => PARSER_EVENT_CLASS_MEMBER, + T_GLOBAL => PARSER_EVENT_FUNC_GLOBAL, + T_STATIC => PARSER_EVENT_STATIC_VAR, + T_CURLY_OPEN => PARSER_EVENT_LOGICBLOCK, + T_DOLLAR_OPEN_CURLY_BRACES => PARSER_EVENT_LOGICBLOCK, + ); + $this->wordpopEvent[PARSER_EVENT_METHOD_LOGICBLOCK] = array("}"); + $this->tokenpopEvent[PARSER_EVENT_METHOD_LOGICBLOCK] = array(T_CURLY_OPEN); + /**************************************************************/ + + $this->tokenpushEvent[PARSER_EVENT_INCLUDE] = + array( + T_COMMENT => PARSER_EVENT_COMMENT, + T_DOC_COMMENT => PARSER_EVENT_DOCBLOCK, + ); + $this->wordpushEvent[PARSER_EVENT_INCLUDE] = + array( + "(" => PARSER_EVENT_INCLUDE_PARAMS, + ); + $this->wordpopEvent[PARSER_EVENT_INCLUDE] = array(";"); + /**************************************************************/ + + $this->tokenpushEvent[PARSER_EVENT_INCLUDE_PARAMS] = + array( + T_COMMENT => PARSER_EVENT_COMMENT, + T_DOC_COMMENT => PARSER_EVENT_DOCBLOCK, + ); + $this->wordpushEvent[PARSER_EVENT_INCLUDE_PARAMS] = + array( + "(" => PARSER_EVENT_INCLUDE_PARAMS_PARENTHESIS, + ); + $this->wordpopEvent[PARSER_EVENT_INCLUDE_PARAMS] = array(")"); + /**************************************************************/ + + $this->tokenpushEvent[PARSER_EVENT_INCLUDE_PARAMS_PARENTHESIS] = + array( + T_COMMENT => PARSER_EVENT_COMMENT, + T_DOC_COMMENT => PARSER_EVENT_DOCBLOCK, + ); + $this->wordpushEvent[PARSER_EVENT_INCLUDE_PARAMS_PARENTHESIS] = + array( + "(" => PARSER_EVENT_INCLUDE_PARAMS_PARENTHESIS, + ); + $this->wordpopEvent[PARSER_EVENT_INCLUDE_PARAMS_PARENTHESIS] = array(")"); + } +} +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/InlineTags.inc b/buildscripts/PhpDocumentor/phpDocumentor/InlineTags.inc new file mode 100755 index 00000000..0af2ea40 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/InlineTags.inc @@ -0,0 +1,1044 @@ +<?php +/** + * All abstract representations of inline tags are in this file + * + * phpDocumentor :: automatic documentation generator + * + * PHP versions 4 and 5 + * + * Copyright (c) 2002-2008 Gregory Beaver + * + * LICENSE: + * + * This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General + * Public License as published by the Free Software Foundation; + * either version 2.1 of the License, or (at your option) any + * later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage InlineTags + * @author Gregory Beaver <cellog@php.net> + * @copyright 2002-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version CVS: $Id: InlineTags.inc 286921 2009-08-08 05:01:24Z ashnazg $ + * @filesource + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @since separate file since 1.2 + * @todo CS cleanup - change package to PhpDocumentor + */ + +/** + * Use this element to represent an {@}inline tag} like {@}link} + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage InlineTags + * @author Gregory Beaver <cellog@php.net> + * @copyright 2002-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @filesource + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @see parserStringWithInlineTags + * @since 1.0rc1 + * @tutorial inlinetags.pkg + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - change classname to PhpDocumentor_* + */ +class parserInlineTag extends parserBase +{ + /** + * Element type + * + * Type is used by many functions to skip the hassle of + * + * <code> + * if phpDocumentor_get_class($blah) == 'parserBlah' + * </code> + * always "inlinetag" + * @var string + */ + var $type = 'inlinetag'; + /** + * the name of the inline tag (like link) + * @var string + */ + var $inlinetype = ''; + + /** + * sets up the tag + * + * @param string $type tag type (example: link) + * @param string $value tag value (example: what to link to) + */ + function parserInlineTag($type, $value) + { + $this->inlinetype = $type; + $this->value = trim($value); + } + + /** + * get length of the tag + * + * @return integer length of the tag + * @todo CS cleanup - rename to strLen for camelCase rule + */ + function Strlen() + { + // fix 1203451 + if (is_array($this->value)) { + return array_reduce(create_function('$a, $b', 'return $a + strlen($b);')) + + count($this->value); + } + return strlen($this->value); + } + + /** + * always gets an empty string + * + * @return string always '', used by {@link Parser::handleDocBlock()} to + * calculate the short description of a DocBlock + * @see parserStringWithInlineTags::getString() + * @see parserStringWithInlineTags::trimmedStrlen() + */ + function getString() + { + return ''; + } +} + +/** + * represents inline links + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage InlineTags + * @author Gregory Beaver <cellog@php.net> + * @copyright 2002-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @filesource + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @see parserStringWithInlineTags + * @since 1.0rc1 + * @tutorial tags.inlinelink.pkg + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - change classname to PhpDocumentor_* + */ +class parserLinkInlineTag extends parserInlineTag +{ + /** + * text to display in the link, can be different from the link for standard + * links like websites + * @var string + */ + var $linktext = ''; + + /** + * sets up the tag + * + * @param string $link stored in $value, see {@link parserBase::$value} + * @param string $text see {@link $linktext} + */ + function parserLinkInlineTag($link, $text) + { + if (strpos($link, ',')) { + $link = explode(',', $link); + parserInlineTag::parserInlineTag('link', ''); + $this->value = $link; + } else { + parserInlineTag::parserInlineTag('link', $link); + } + $this->linktext = trim($text); + } + + /** + * calls the output conversion + * + * @param Converter &$c converter used to change the abstract link + * into text for display + * + * @return false|string returns the converted link or false + * if not converted successfully + * @todo CS cleanup - rename to convert for camelCase rule + */ + function Convert(&$c) + { + if (is_array($this->value)) { + $ret = ''; + foreach ($this->value as $text) { + if (!empty($ret)) { + $ret .= ', '; + } + $ret .= $this->ConvertPart($c, trim($text)); + } + return $ret; + } else { + return $this->ConvertPart($c, $this->value); + } + } + + /** + * convert part of the tag + * + * @param Converter &$c the output converter + * @param string $value the tag value + * + * @return string + * @todo CS cleanup - rename to convertPart for camelCase rule + */ + function ConvertPart(&$c, $value) + { + if (strpos($value, '://') || (strpos($value, 'mailto:') === 0)) { + if (strpos($value, ' ')) { + $value = explode(' ', $value); + $link = array_shift($value); + $text = join(' ', $value); + } else { + $link = $value; + $text = $this->linktext; + } + return $c->returnLink($link, htmlspecialchars($text)); + } else { + $savevalue = $value; + $descrip = false; + if (strpos(trim($value), ' ')) { + $v = preg_split('/\s/', trim($value)); + if (in_array(strtolower($v[0]), array('object', 'function'))) { + if (!isset($v[1]) + || (isset($v[1]) && strlen($v[1]) + && !in_array($v[1]{0}, array('$','&')) + && $v[1] != '###commanana####' + ) + ) { + $vsave = $v[0]; + array_shift($v); + $v[0] = $vsave . ' ' . $v[0]; + } + } + $value = $c->getLink($v[0]); + array_shift($v); + $descrip = join($v, ' '); + $descrip = str_replace('###commanana####', ',', $descrip); + } else { + $value = $c->getLink($value); + } + if (is_string($value)) { + // feature 564991 + if (strpos($value, '://')) { + // php function + return $c->returnLink($value, $descrip ? $descrip : + str_replace('PHP_MANUAL#', '', $value)); + } + return $value; + } + if (!$descrip) { + $descrip = $c->type_adjust($savevalue); + } + if (is_object($value)) { + return $c->returnSee($value, $descrip); + } + return $savevalue; + } + } +} + +/** + * Represents inline links to external tutorial documentation + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage InlineTags + * @author Gregory Beaver <cellog@php.net> + * @copyright 2002-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @filesource + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @see parserStringWithInlineTags + * @tutorial tags.inlinetutorial.pkg + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - change classname to PhpDocumentor_* + */ +class parserTutorialInlineTag extends parserLinkInlineTag +{ + /** + * constructor + * + * @param string $link stored in $value, see {@link parserBase::$value} + * @param string $text see {@link $linktext} + */ + function parserTutorialInlineTag($link,$text) + { + parserInlineTag::parserInlineTag('tutorial', $link); + $this->linktext = trim($text); + } + + /** + * convert part of the tag + * + * @param Converter &$c converter used to change the abstract link + * into text for display + * + * @return mixed returns the converted link + * or false if not converted successfully + * @todo CS cleanup - rename to convert for camelCase rule + */ + function Convert(&$c) + { + $descrip = false; + if (strpos($this->value, ',') === false) { + if (strpos(trim($this->value), ' ')) { + $v = explode(' ', trim($this->value)); + $value = $c->getTutorialLink($v[0]); + array_shift($v); + $descrip = join($v, ' '); + } else { + $value = $c->getTutorialLink($this->value); + } + } else { + $vals = explode(',', $this->value); + $descrip = array(); + foreach ($vals as $val) { + $val = trim($val); + if (strpos($val, ' ')) { + $v = explode(' ', $val); + $value[] = $c->getTutorialLink($v[0]); + array_shift($v); + $descrip[] = join($v, ' '); + } else { + $value[] = $c->getTutorialLink($val); + $descrip[] = false; + } + } + } + if (is_string($value)) { + return $value; + } + if (is_object($value)) { + return $c->returnSee($value, $descrip); + } + /* + * getLink parsed a comma-delimited list of linked thingies, + * add the commas back in + */ + if (is_array($value)) { + $a = ''; + foreach ($value as $i => $bub) { + if (!empty($a)) { + $a .= ', '; + } + if (is_string($value[$i])) { + $a .= $value[$i]; + } + if (is_object($value[$i])) { + $a .= $c->returnSee($value[$i], $descrip[$i]); + } + } + return $a; + } + return false; + } +} + +/** + * represents inline source tag, used for function/method source + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage InlineTags + * @author Gregory Beaver <cellog@php.net> + * @copyright 2002-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @filesource + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @see parserStringWithInlineTags + * @tutorial tags.inlinesource.pkg + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - change classname to PhpDocumentor_* + */ +class parserSourceInlineTag extends parserInlineTag +{ + /** + * always 'source' + * @var string + */ + var $inlinetype = 'source'; + /** + * First line of source code to display + * @var integer + * @see $end + */ + var $start = 1; + /** + * Last line to display + * @var '*'|integer If '*' then the whole source will be used, otherwise + * the {@link $start} to $end line numbers will be displayed + */ + var $end = '*'; + /** + * tokenized source organized by line numbers for php 4.3.0+, the old + * {@}source} tag used a string + * @var string|array + */ + var $source = false; + /**#@+ @access private */ + /** @var string|false */ + var $_class; + /**#@-*/ + + /** + * constructor + * + * @param string $value format "start [end]", + * where start and end are line numbers + * with the end line number optional + */ + function parserSourceInlineTag($value) + { + parserInlineTag::parserInlineTag('source', ''); + preg_match('/^([0-9]+)\W([0-9]*)$/', trim($value), $match); + if (!count($match)) { + preg_match('/^([0-9]+)$/', trim($value), $match); + if (count($match)) { + $this->start = (int) $match[1]; + } + } else { + $this->start = (int) $match[1]; + $this->end = (int) $match[2]; + } + } + + /** + * only used to determine blank lines. {@}source} will not be blank, probably + * + * @return int + */ + function Strlen() + { + return 1; + } + + /** + * gets the source string + * + * @return string + */ + function getString() + { + return '{@source}'; + } + + /** + * sets the source tag's value + * + * @param string|array $source source code + * @param string|bool $class class name if this is a method, + * boolean in php 4.3.0, + * if this is a method this will be true + * + * @return void + */ + function setSource($source, $class = false) + { + if (is_array($source)) { + $this->_class = $class; + $this->source = $source; + } else { + $source = strstr($source, 'function'); + $pos = strrpos($source, '}'); + $this->source = substr($source, 0, $pos + 1); + } + } + + /** + * convert the tag + * + * @param Converter &$c the output converter object + * + * @return string + * @uses stringConvert() in PHP 4.2.3-, this method is used to convert + * @uses arrayConvert() in PHP 4.3.0+, this method is used to convert + * @todo CS cleanup - rename to convert for camelCase rule + */ + function Convert(&$c) + { + if (is_string($this->source)) { + return $this->stringConvert($c); + } + return $this->arrayConvert($c); + } + + /** + * converter helper used in PHP 4.3.0+ + * + * @param Converter &$c the output converter object + * + * @return string + * @uses phpDocumentor_HighlightParser Parses the tokenized source + */ + function arrayConvert(&$c) + { + $source = $this->source; + if ($this->end != '*') { + $source = array_slice($this->source, 0, $this->end + $this->start - 1); + } + $start = $this->start - 1; + if ($start < 0) { + $start = 0; + } + return $c->ProgramExample($source, true, true, $this->_class, $start); + } + + /** + * converter helper used in PHP 4.2.3- + * + * @param Converter &$c the output converter object + * + * @return string + * @uses Converter::unmangle() remove the extraneous stuff from + * {@link highlight_string()} + * @deprecated in favor of PHP 4.3.0+ {@link arrayConvert()} + */ + function stringConvert(&$c) + { + $source = highlight_string('<?php ' . $this->source . ' ?>', true); + $source = '<code>' . substr($source, strlen('<code><font color="#000000"> +<font color="#0000CC"><?php </font>') - 1); + $source = str_replace('} </font><font color="#0000CC">?></font>', + '}</font></code>', $source); + if ($this->start || ($this->end != '*')) { + $source = explode('<br />', $source); + $start = $this->start; + if ($this->end != '*') { + $source = array_slice($source, $start - 1, $this->end - $start + 1); + } else { + $source = array_slice($source, $start - 1); + } + $source = implode($source, '<br />'); + if ($start > 0) { + $source = "<code>$source"; + } + if ($this->end != '*') { + $source = "$source</code>"; + } + } + $source = $c->unmangle($source, $this->source); + return $source; + } +} + +/** + * Represents the example inline tag, used to display an example file + * inside a docblock or tutorial + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage InlineTags + * @author Gregory Beaver <cellog@php.net> + * @copyright 2002-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @filesource + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @see parserStringWithInlineTags + * @tutorial tags.inlineexample.pkg + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - change classname to PhpDocumentor_* + */ +class parserExampleInlineTag extends parserSourceInlineTag +{ + /** + * constructor + * + * @param string $value format "filepath[ start [end]]" + * where start and end are line numbers + * with the end line number optional + * @param string $current_path full path to the current file, + * used to check relative directory locations + * @param bool $isTutorial if true, then this is in a tutorial + * + * @return mixed + * @todo replace tokenizer_ext constant with TOKENIZER_EXT for CS rule + */ + function parserExampleInlineTag($value, $current_path, $isTutorial = false) + { + global $_phpDocumentor_setting; + parserInlineTag::parserInlineTag('example', ''); + $path = false; + $tagValue = trim($value); + $path = $isAbsPath = $pathOnly = $fileName = $fileExt + = $original_path = $title = false; + do { + // make sure the format is stuff.ext startline[ endline] + if (!preg_match('`(.*)\.(\w*)\s(.*)`', $tagValue, $match)) { + // or format is stuff.ext + if (!preg_match('`(.*)\.(\w*)\s*$`', $tagValue, $match)) { + // Murphy: Some funny path was given + $original_path = $tagValue; // used for error output + break; // try-block + } + } + if (strlen($match[1]) === 0) { + // Murphy: Some funny path was given + $original_path = $tagValue; // used for error output + break; // try-block + } + $fileExt = $match[2]; + if (isset($match[3])) { + $lines = explode(' ', trim($match[3])); + $this->start = (int) $lines[0]; + if (isset($lines[1])) { + $this->end = (int) $lines[1]; + } + } + // Replace windows '\' the path. + $pathTmp = str_replace('\\', '/', $match[1]); + + // Is there a path and a file or is it just a file? + if (strpos($pathTmp, '/') === false) { + // No path part + $pathOnly = ''; + $fileName = $pathTmp .'.'. $fileExt; + } else { + // split the path on the last directory, find the filename + $splitPos = strrpos($pathTmp, '/'); + $pathOnly = substr($match[1], 0, $splitPos+1); + $fileName = substr($match[1], $splitPos+1) .'.'. $fileExt; + // Is the path absolute? (i.e. does it start like an absolute path?) + if (('/' === $pathTmp[0]) || preg_match('`^\w*:`i', $pathTmp)) { + // works for both windows 'C:' and URLs like 'http://' + $isAbsPath = true; // Yes + } + } + + $original_path = $pathOnly . $fileName; + + // Now look for the file starting with abs. path. + if ($isAbsPath) { + // remove any weirdities like /../file.ext + $tmp = realpath($original_path); + if ($tmp && is_file($tmp)) { + $path = $tmp; + } + /* + * Alway break if abs. path was detected, + * even if file was not found. + */ + break; // try-block + } + + // Search for the example file some standard places + // 1) Look if the ini-var examplesdir is set and look there ... + if (isset($_phpDocumentor_setting['examplesdir'])) { + $tmp = realpath($_phpDocumentor_setting['examplesdir'] + . PATH_DELIMITER . $original_path); + if ($tmp && is_file($tmp)) { + $path = $tmp; // Yo! found it :) + break; // try-block + } + } + + // 2) Then try to look for an 'example/'-dir + // below the *currently* parsed file ... + if (!empty($current_path)) { + $tmp = realpath(dirname($current_path) . PATH_DELIMITER . 'examples' + . PATH_DELIMITER . $fileName); + if ($tmp && is_file($tmp)) { + $path = $tmp; // Yo! found it :) + break; // try-block + } + } + + // 3) Then try to look for the example file + // below the subdir PHPDOCUMENTOR_BASE/examples/ ... + if (is_dir(PHPDOCUMENTOR_BASE . PATH_DELIMITER . 'examples')) { + $tmp = realpath(PHPDOCUMENTOR_BASE . PATH_DELIMITER . 'examples' + . PATH_DELIMITER . $original_path); + if ($tmp && is_file($tmp)) { + $path = $tmp; // Yo! found it :) + break; // try-block + } + } + + $tmp = realpath(PHPDOCUMENTOR_BASE . PATH_DELIMITER . $original_path); + if ($tmp && is_file($tmp)) { + $path = $tmp; // Yo! found it :) + break; // try-block + } + // If we reach this point, nothing was found and $path is false. + } while (false); + + if (!$path) { + addWarning(PDERROR_EXAMPLE_NOT_FOUND, $original_path); + $this->path = false; + } else { + $f = @fopen($path, 'r'); + if ($f) { + $example = fread($f, filesize($path)); + if (tokenizer_ext && !$isTutorial) { + $obj = new phpDocumentorTWordParser; + $obj->setup($example); + $this->setSource($obj->getFileSource()); + unset($obj); + } else { + $this->setSource($example); + } + } + } + } + + /** + * sets the source + * + * @param string|array $source source code + * @param string|bool $class class name if this is a method, + * boolean in php 4.3.0, + * if this is a method this will be true + * + * @return void + */ + function setSource($source, $class = false) + { + $this->_class = $class; + $this->source = $source; + } + + /** + * converter helper for PHP 4.3.0+ + * + * @param Converter &$c output converter + * + * @return string + * @uses phpDocumentor_HighlightParser Parses the tokenized source + */ + function arrayConvert(&$c) + { + $source = $this->source; + if ($this->end != '*') { + $source = array_slice($this->source, 0, $this->end + $this->start - 1); + } + $start = $this->start - 1; + if ($start < 0) { + $start = 0; + } + return $c->exampleProgramExample($source, true, true, $this->_class, $start); + } + + /** + * Return the source for the example file, enclosed in + * a <programlisting> tag to use in a tutorial + * + * @return string + */ + function getProgramListing() + { + $source = explode("\n", $this->source); + $start = $this->start; + if ($this->end != '*') { + $source = array_slice($source, $start - 1, $this->end - $start + 1); + } else { + $source = array_slice($source, $start - 1); + } + $source = join("\n", $source); + return + "<programlisting role=\"php\"> + <![CDATA[\n" . + $source . + "\n]]>\n</programlisting>"; + } +} + +/** + * Represents the inheritdoc inline tag, used by classes/methods/vars to inherit + * documentation from the parent class if possible + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage InlineTags + * @author Gregory Beaver <cellog@php.net> + * @copyright 2002-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @filesource + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @see parserStringWithInlineTags + * @tutorial tags.inlineinheritdoc.pkg + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - change classname to PhpDocumentor_* + */ +class parserInheritdocInlineTag extends parserInlineTag +{ + /** + * always 'inheritdoc' + * @var string + */ + var $inlinetype = 'inheritdoc'; + + /** + * Does nothing, overrides parent constructor + */ + function parserInheritdocInlineTag() + { + } + + /** + * only sets a warning and returns empty + * + * @return string + * @todo CS cleanup - rename to convert for camelCase rule + */ + function Convert() + { + addWarning(PDERROR_INHERITDOC_DONT_WORK_HERE); + return ''; + } +} + +/** + * Represents the inline {@}id} tag for tutorials + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage InlineTags + * @author Gregory Beaver <cellog@php.net> + * @copyright 2002-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @filesource + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @see parserStringWithInlineTags + * @tutorial tags.inlineid.pkg + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - change classname to PhpDocumentor_* + */ +class parserIdInlineTag extends parserInlineTag +{ + /** + * always 'id' + * @var string + */ + var $inlinetype = 'id'; + /** + * package of the {@}id} + * @var string + */ + var $package = 'default'; + /** + * category of the {@}id} + * @var string + */ + var $category = 'default'; + /** + * subpackage of the {@}id} + * @var string + */ + var $subpackage = ''; + /** + * full name of the tutorial + * @var string + */ + var $tutorial; + /** + * section/subsection name + * @var string + */ + var $id; + + /** + * constructor + * + * @param string $category category name + * @param string $package package name + * @param string $subpackage subpackage name + * @param string $tutorial tutorial name + * @param string $id section/subsection name + */ + function parserIdInlineTag($category,$package,$subpackage,$tutorial,$id = false) + { + $this->package = $package; + $this->subpackage = $subpackage; + $this->tutorial = $tutorial; + $this->id = $id; + $this->category = $category; + } + + /** + * converter + * + * @param Converter &$c output converter + * + * @return string + * @uses Converter::getTutorialId() retrieve converter-specific ID + * @todo CS cleanup - rename to convert for camelCase rule + */ + function Convert(&$c) + { + if (!$this->id) { + return ''; + } + return $c->getTutorialId($this->package, $this->subpackage, + $this->tutorial, $this->id, $this->category); + } +} + +/** + * Represents {@}toc} for table of contents generation in tutorials + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage InlineTags + * @author Gregory Beaver <cellog@php.net> + * @copyright 2002-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @filesource + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @see parserStringWithInlineTags + * @tutorial tags.inlinetoc.pkg + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - change classname to PhpDocumentor_* + */ +class parserTocInlineTag extends parserInlineTag +{ + /** + * always 'toc' + * @var string + */ + var $inlinetype = 'toc'; + /** + * @var array format: + * <pre> + * array( + * array( + * 'tagname' => section, + * 'link' => returnsee link, + * 'id' => anchor name, + * 'title' => from title tag + * ), + * ... + * ) + * </pre> + * @access private + */ + var $_toc = false; + /** + * full path to tutorial, used in conversion + * @var string + * @access private + */ + var $_path = false; + + /** + * constructor + */ + function parserTocInlineTag() + { + parent::parserInlineTag('toc', ''); + } + + /** + * set the TOC + * + * @param array $toc format: + * <pre> + * array( + * array( + * 'tag' => {@link parserXMLDocBookTag}, + * 'id' => {@link parserIdInlineTag}, + * 'title' => {@link parserXMLDocBookTag title} + * ), + * ... + * ) + * </pre> + * + * @return void + */ + function setTOC($toc) + { + $this->toc = $toc; + } + + /** + * set the path + * + * @param string $path the path + * + * @return void + */ + function setPath($path) + { + $this->_path = $path; + } + + /** + * converter method + * + * <pre> + * array( + * 'tagname' => string name of tag, + * 'link' => {@link tutorialLink} to the tutorial, + * 'id' => converter specific tutorial ID from + * {@link Converter::getTutorialId()} + * 'title' => title of the tutorial) + * </pre> + * and returns the results as the table of contents + * + * @param Converter &$c converter object + * + * @return mixed + * @uses Converter::getTutorialId() retrieve the tutorial ID for + * @uses Converter::formatTutorialTOC() passes an array of format: + * @todo CS cleanup - rename to convert for camelCase rule + */ + function Convert(&$c) + { + $newtoc = array(); + if (isset($this->toc) && is_array($this->toc)) { + foreach ($this->toc as $i => $toc) { + if (isset($toc['title'])) { + $toc['tag']->setTitle($toc['title']); + } else { + $toc['tag']->setTitle(new parserStringWithInlineTags); + } + $newtoc[$i]['tagname'] = $toc['tag']->name; + $l = new tutorialLink; + if (!isset($toc['title'])) { + $title = 'section '.$toc['id']->id; + } else { + $title = $toc['title']->Convert($c); + } + $l->addLink($toc['id']->id, $this->_path, basename($this->_path), + $toc['id']->package, $toc['id']->subpackage, strip_tags($title)); + $newtoc[$i]['link'] = $c->returnSee($l); + $newtoc[$i]['id'] = $c->getTutorialId($toc['id']->package, + $toc['id']->subpackage, basename($this->_path), + $toc['id']->id, $toc['id']->category); + $newtoc[$i]['title'] = $title; + } + } + return $c->formatTutorialTOC($newtoc); + } +} +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/IntermediateParser.inc b/buildscripts/PhpDocumentor/phpDocumentor/IntermediateParser.inc new file mode 100755 index 00000000..98b07159 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/IntermediateParser.inc @@ -0,0 +1,1940 @@ +<?php +/** + * The phpDocumentor_IntermediateParser Class + * + * The Intermediary Data Parser (intermediate between Parse and Converter) + * + * phpDocumentor :: automatic documentation generator + * + * PHP versions 4 and 5 + * + * Copyright (c) 2002-2006 Gregory Beaver + * + * LICENSE: + * + * This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General + * Public License as published by the Free Software Foundation; + * either version 2.1 of the License, or (at your option) any + * later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package phpDocumentor + * @author Gregory Beaver <cellog@php.net> + * @copyright 2002-2006 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version CVS: $Id: IntermediateParser.inc 247821 2007-12-09 06:11:35Z ashnazg $ + * @filesource + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @since 1.1 + */ +/** The phpDocumentor_IntermediateParser Class + * + * This class performs the work of organizing raw data from the parser in the + * format of descendants of the {@link parserElement} class. This is also where + * processing of package pages occurs, in + * {@link phpDocumentor_IntermediateParser::handleClass()} for class-level + * packages and {@link phpDocumentor_IntermediateParser::handleDocBlock()} for + * page-level packages. + * + * Most of the work of this parser goes to matching up + * DocBlocks with the elements that they are documenting. Since DocBlocks are + * passed before the element they document, the last DocBlock is stored in + * {@link phpDocumentor_IntermediateParser::$last} and then placed into the + * $docblock parameter of the parserElement + * descendant object. + * @author Gregory Beaver + * @version $Id: IntermediateParser.inc 247821 2007-12-09 06:11:35Z ashnazg $ + * @copyright 2002 Gregory Beaver + * @package phpDocumentor + */ +class phpDocumentor_IntermediateParser +{ + /** + * @var parserDocBlock + */ + var $last; + + /** + * type of the last parser Element handled + * + * This is used in handleDocBlock to determine whether a DocBlock is a + * page-level DocBlock in conjunction with the {@link parserData::$clean} + * var. A page-level DocBlock is alwaysthe first DocBlock in a file, and + * must be followed by another DocBlock. The first test is handled by + * parserData::$clean, which is set to false on the first encounter of an + * element, and the second test is handled by this variable, which must be + * equal to "docblock" + * @see handleDocBlock() + * @var string + */ + var $lasttype = ''; + + /** + * Name of the class currently being parsed. + * It is only used (and only valid) when phpDocumentor_IntermediateParser is + * parsing a class + * @var string + */ + var $cur_class = ''; + + /** + * type of the current parser Element being handled + * + * This is used by {@link HandleEvent()} to set the {@link $lasttype} var, + * which is used to detect page-level DocBlocks + * @var string + */ + var $type = ''; + + /** + * set in {@link Setup.inc.php} to the value of the parseprivate commandline + * option. If this option is true, elements with an @access private tag + * will be parsed and displayed + * @tutorial phpDocumentor.howto.pkg#using.command-line.parseprivate + * @var boolean + */ + var $parsePrivate = false; + + /** + * this variable is used to prevent parsing of elements with an @ignore tag + * @see $packageoutput + * @see $parsePrivate + */ + var $private_class = false; + + /** + * used to set the output directory + * @see setTargetDir() + */ + var $targetDir; + + /** + * used to set the template base directory + * @see setTemplateBase() + */ + var $templateBase; + + /** + * array of parsed package pages + * + * used by {@link Convert()} to convert all package pages into output + * @var array + */ + var $package_pages = array(); + + /** + * @var array array of all {@link parserData} containing page information + */ + var $pages = array(); + /** + * Put away a page that has been @ignored or @access private if + * !{@link $parsePrivate} + * + * When a page has @access private in its DocBlock, it is placed here + * instead of in {@link $pages}, to allow for proper Class parsing. Since + * classes and pages are parsed as if they were separate, this array allows + * public classes on private pages to retrieve information needed about the + * page that holds the class and to {@link addPageIfNecessary()} to the + * $pages array + * @var array + */ + var $privatepages = array(); + /** + * Keeps track of packages of classes that have parent classes in another + * package. Used in automatic linking. + * + * This array is updated by {@link addPackageParent()}, which is called in + * {@link Classes::processChild()} to keep track of classes that descend + * from classes in different packages. In other words, if class foo is in + * package one, and class bar is in package two, an entry + * $package_parents['two'] = 'one' will be made. + * @var array Format: packagename => parentpackagename + * @see Converter::getLink() + */ + var $package_parents = array(); + + /** + * Used to determine the category for tutorials. + * + * <b>WARNING:</b> If more than one category exists, the last category + * encountered will overwrite the previous and will raise a big warning + * @var array Format: packagename => categoryname + */ + var $packagecategories = array(); + + /** + * list of all packages encountered while documenting. Used in automatic + * linking. + * + * Converter::getLink() first checks if an ambiguous link is found in the + * current package. If not, it then checks in parent packages, and if still + * not found, uses this array to check in the rest of the packages before + * giving up + * @var array Format: array(packagename => 1, packagename => 1,...) + * @see Converter::getLink() + */ + var $all_packages = array(); + + /** + * array of packages to parser and output documentation for, if not all + * packages should be documented + * + * Format:<br /> + * array(package1,package2,...)<br /> + * or false if not set + * + * Use this option to limit output similar to ignoring files. If you have + * some temporary files that you don't want to specify by name but don't + * want included in output, set a package name for all the elements in your + * project, and set packageoutput to that name. the default package will be + * ignored. Parsing speed does not improve. If you want to ignore files + * for speed reasons, use the ignore command-line option + * @tutorial phpDocumentor.howto.pkg#using.command-line.packageoutput + * @see Io + * @var false|array + */ + var $packageoutput = false; + + /** + * the functions which handle output from the {@link Parser} + * @see handleEvent(), handleDocBlock(), handlePage(), handleClass() + * @see handleDefine(), handleFunction(), handleMethod(), handleVar() + * @see handlePackagePage(), handleInclude(), handleTutorial() + */ + var $event_handlers = array( + 'docblock' => 'handleDocBlock', + 'page' => 'handlePage', + 'class' => 'handleClass', + 'define' => 'handleDefine', + 'function' => 'handleFunction', + 'method' => 'handleMethod', + 'var' => 'handleVar', + 'const' => 'handleConst', + 'packagepage' => 'handlePackagePage', + 'include' => 'handleInclude', + 'global' => 'handleGlobal', + 'tutorial' => 'handleTutorial', + ); + + /** + * $data contains parsed structures for the current page being parsed + * + * In version 1.1+, $data is only used to store the current page information. + * All handling of documented elements is handled by the + * {@link ProceduralPages} and {@link Classes} classes. + * @var parserData + */ + var $data; + + /** + * set in {@link Setup.inc.php} to the value of the quitemode commandline + * option. + * + * If this option is true, informative output while parsing will not be + * displayed (documentation is unaffected) + * @var boolean + * @tutorial phpDocumentor.howto.pkg#using.command-line.quiet + */ + var $quietMode = false; + + /** + * set in {@link Setup.inc.php} to the value of the undocumentedElementWarnings commandline + * option. + * + * If this option is true, warnings about certain elements (classes, methods) + * that are not documented with DocBlocks will be shown while parsing, + * and will also be displayed in the errors.html page + * (other documentation is unaffected) + * @var boolean + * @tutorial phpDocumentor.howto.pkg#using.command-line.undocumentedelements + */ + var $undocumentedElementWarnings = false; + + /** + * used to keep track of inheritance at the smartest level possible for a + * dumb computer + * @var Classes + */ + var $classes = false; + + /** + * used to keep track of all elements in a procedural page. Handles name + * conflicts with elegance + * @since 1.1 + * @var ProceduralPages + */ + var $proceduralpages = false; + + /** + * an array of template names indexed by converter name + * + * For example, if the default HTMLframesConverter is using the DOM/l0l33t + * template, the array will be + * <code>$converters['frames'] = 'DOM/l0l33t'</code> + * @var array Format: array(Convertername1 => templatename) + * @see Converter + */ + var $converters = false; + /** + * @var string Title of generated documentation, passed to Converters + */ + var $title = ''; + + var $uses = array(); + + var $db_template; + + /** + * Stores parsed CHANGELOG/INSTALL/README files + * @var array Format: array(CHANGELOG => contents, + * INSTALL => contents, + * README => contents) + */ + var $ric = array(); + + /** + * Flag used to determine whether the last docblock + * was a page-level docblock. + * @var boolean + * @access private + */ + var $_lastDocBlockWasPageLevel = false; + + /** + * Flag used to determine whether the Page-level + * DocBlock was declared in old or new style + * @var boolean + * @access private + */ + var $_oldPageLevel = false; + + /** + * sets up basic data structures + * @param string Title of generated documentation, passed to Converters + * @see $title, $data, $classes, $proceduralpages + */ + function phpDocumentor_IntermediateParser($title='Generated Documentation') + { + $this->title = $title; + $this->data = new parserData; + $this->classes = new Classes; + $this->proceduralpages = new ProceduralPages; + } + + /** + * Retrieve the relative path. If the path contains "pear/" it will + * be used as the base, otherwise the Program_Root string will be used. + * @global array uses 'Program_Root' option to replace it with '' for + * retrieving the source location of a file + * @param string path to file + * @return string + * @see $sourceLocation + * @access private + */ + function _getSourceLocation($sl, $sourceloc) + { + global $_phpDocumentor_options; + if (empty($sl)) return false; + $sl = str_replace('\\','/',$sl); + if (strpos($sl,'pear/')) + { + $sl = substr($sl,strpos($sl,'pear/') + 5); + if (dirname($sl) == '.') + { + return 'PEAR'; + } + return dirname($sl); + } else + { + if (strpos(str_replace($_phpDocumentor_options['Program_Root'] . PATH_DELIMITER,'',$sourceloc),PATH_DELIMITER) === false) + return ''; + return dirname(str_replace($_phpDocumentor_options['Program_Root'] . PATH_DELIMITER,'',$sourceloc)); + } + } + + /** + * Guess the package/subpackage based on subdirectory if the --pear option + * + * A file in pear/dir/file.php will be in package "dir." A file in + * pear/dir/subdir/file.php will be in package "dir," subpackage "subdir." + * @param string full path of file + * @param template-ready source location Program_Root/dir/file.php + * @global array uses the 'pear' option to determine whether to guess based + * on subdirectory + * @tutorial phpDocumentor.howto.pkg#using.command-line.pear + */ + function _guessPackage($path, $sourceloc) + { + global $_phpDocumentor_setting; + if ($_phpDocumentor_setting['pear']) + { + $subpath = explode(PATH_DELIMITER, $this->_getSourceLocation($path, $sourceloc)); + if (!empty($subpath[0])) + { // can only have package and subpackage in this version + $package = $subpath[0]; + $subpackage = ''; + if (isset($subpath[1])) $subpackage = $subpath[1]; + return array($package,$subpackage); + } else return array($this->package, $this->subpackage); + } else return array($this->package, $this->subpackage); + } + + /** + * handles post-parsing of include/require/include_once/require_once + * + * This function sets {@link $data}->clean to false to tell the + * phpDocumentor_IntermediateParser that a page-level DocBlock can't be + * found after this point on this page. It then sets the package + * to be the same as the page, and adds itself to the + * {@link ProceduralPages} class + * @param integer $event Event number from {@link Parser.inc} + * @param parserInclude $data + */ + function handleInclude($event,$data) + { + if ($this->_lastDocBlockWasPageLevel) + { + addWarning(PDERROR_DOCBLOCK_CONFLICT, $data->getName(), $data->getValue()); + if (!$this->_oldPageLevel) + { + unset($this->last); + } + } + $this->_lastDocBlockWasPageLevel = false; + $this->data->clean = false; + // page was @ignored + if ($this->private_page) + { + unset($this->last); + return; + } + if (empty($this->last)) + { + if (isset($this->db_template)) + { + // use the docblock template + $this->last = phpDocumentor_clone($this->db_template); + } + else + { + // we don't have a docblock, create an empty one to get rid of errors + $this->last = new parserDocblock(); + } + } +// $this->last->setLineNumber($data->getLineNumber()); + if ($this->last->getKeyword('ignore')) + { + $this->last = false; + return; +// addWarning(PDERROR_IGNORE_TAG_IGNORED,'include',$data->getName().'('.$data->getValue().')'); + } + + $this->last->overridePackage($this->category,$this->package,$this->subpackage,$data->getName(),'include'); + $data->setDocBlock($this->last); + $this->proceduralpages->addInclude($data); + $this->last = false; + } + + /** + * handles post-parsing of global variables + * + * This function sets {@link $data}->clean to false to tell the + * phpDocumentor_IntermediateParser that a page-level DocBlock can't be + * found after this point on this page. It then sets the package + * to be the same as the page, and adds itself to the + * {@link ProceduralPages} class + * @param integer $event Event number from {@link Parser.inc} + * @param parserGlobal $data + */ + function handleGlobal($event,$data) + { + if ($this->_lastDocBlockWasPageLevel) + { + addWarning(PDERROR_DOCBLOCK_CONFLICT, 'global variable', $data->getName()); + if (!$this->_oldPageLevel) + { + unset($this->last); + } + } + $this->_lastDocBlockWasPageLevel = false; + $this->data->clean = false; + if ($this->private_page) + { + unset($this->last); + return; + } + if (empty($this->last)) + { + if (isset($this->db_template)) + { + // use the docblock template + $this->last = phpDocumentor_clone($this->db_template); + } + else + { + // we don't have a docblock, create an empty one to get rid of errors + $this->last = new parserDocblock(); + } + } +// $this->last->setLineNumber($data->getLineNumber()); + if ($this->last->getKeyword('ignore')) + { + addWarning(PDERROR_IGNORE_TAG_IGNORED,'global variable - just don\'t document the',$data->getName()); + $this->last = false; + return; + } + $this->last->overridePackage($this->category,$this->package,$this->subpackage,$data->getName(),'global'); + $data->setDocBlock($this->last); + if ($data->docblock->getKeyword('name')) + { + $a = $data->docblock->getKeyword('name'); + if (is_object($a)) $a = $a->value; + $data->setName($a); + } + $this->proceduralpages->addGlobal($data); + $this->last = false; + } + + /** + * handles post-parsing of Package-level documentation pages. + * + * sets the {@link $package_pages}[$data->package] to $data + * @param integer $event Event number from {@link Parser.inc} + * @param parserPackagePage $data + */ + function handlePackagePage($event,$data) + { + $this->package_pages[$data->package] = &$data; + $this->last = false; + } + + /** + * handle post-parsing of Tutorials. + * + * This adds the parsed tutorial to the tutorial tree + * @uses $tutorials sets the value of tutorials to parameter $data + * @param integer $event Event Number + * @param parserTutorial $data + * @since 1.2 + */ + function handleTutorial($event,$data) + { + if (isset($this->packagecategories[$data->package])) + { + $data->category = $this->packagecategories[$data->package]; + } else + { + $data->category = $GLOBALS['phpDocumentor_DefaultCategoryName']; + } + $this->tutorials[$data->package][$data->subpackage][$data->tutorial_type][$data->name] = $data; + } + + /** + * handles post-parsing of class vars + * + * This function sets up a @var tag if none is found, and aligns $data's + * $path var and packages to match the parent object + * @param integer $event Event number from {@link Parser.inc} + * @param parserVar $data + */ + function handleVar($event,$data) + { + global $_phpDocumentor_setting; + if ($this->private_class) + { + unset($this->last); + return; + } + if (empty($this->last)) + { + if (isset($this->db_template)) + { + // use the docblock template + $this->last = phpDocumentor_clone($this->db_template); + } + else + { + // we don't have a docblock, create an empty one to get rid of errors + $this->last = new parserDocblock(); + } + } +// $this->last->setLineNumber($data->getLineNumber()); + $this->last->overridePackage($this->category,$this->package,$this->subpackage,$data->getName(),'var'); + $this->last->updateModifiers($data->getModifiers()); + + if ($this->last->getKeyword('ignore')) + { + $this->last = false; + return; +// addWarning(PDERROR_IGNORE_TAG_IGNORED,'var',$this->cur_class.'::'.$data->getName()); + } + if (!$this->last->var) + { + $this->last->addVar('mixed',new parserStringWithInlineTags); + } + + if ($_phpDocumentor_setting['pear']) + { + if (strpos($data->getName(), '_') == 1 && !$this->last->getKeyword('access')) + { + addWarning(PDERROR_PRIVATE_ASSUMED,'class variable',$data->class.'::'.$data->getName()); + $this->last->addKeyword('access','private'); + $data->setDocBlock($this->last); + } + } + $data->setDocBlock($this->last); + $data->path = $this->data->parent->path; + $this->classes->addVar($data); + $this->last = false; + } + + /** + * handles post-parsing of class constants + * + * This function aligns $data's + * $path var and packages to match the parent object + * @param integer $event Event number from {@link Parser.inc} + * @param parserVar $data + */ + function handleConst($event,$data) + { + global $_phpDocumentor_setting; + if ($this->private_class) + { + unset($this->last); + return; + } + if (empty($this->last)) + { + if (isset($this->db_template)) + { + // use the docblock template + $this->last = phpDocumentor_clone($this->db_template); + } + else + { + // we don't have a docblock, create an empty one to get rid of errors + $this->last = new parserDocblock(); + } + } +// $this->last->setLineNumber($data->getLineNumber()); + $this->last->overridePackage($this->category,$this->package,$this->subpackage,$data->getName(),'const'); + + if ($this->last->getKeyword('ignore')) + { + $this->last = false; + return; +// addWarning(PDERROR_IGNORE_TAG_IGNORED,'var',$this->cur_class.'::'.$data->getName()); + } + $data->setDocBlock($this->last); + $data->path = $this->data->parent->path; + $this->classes->addConst($data); + $this->last = false; + } + + /** + * handles post-parsing of class methods + * + * This function first aligns $data's path and package to match the parent + * object, and also aligns the docblock's @param, @global, and @staticvar + * tags with the information parsed from the method source code. It also + * checks to see if the method is a constructor and sets the $isConstructor + * flag. If source code has been parsed by a {@}source} tag, the source is + * added to its docblock + * + * Finally, it adds the method to the {@link Classes} class. + * @param integer $event Event number from {@link Parser.inc} + * @param parserMethod $data + */ + function handleMethod($event,$data) + { + global $_phpDocumentor_setting; + if ($this->private_class) + { + unset($this->last); + return; + } + + if (empty($this->last)) + { + if ($this->undocumentedElementWarnings) + { + addWarning(PDERROR_UNDOCUMENTED_ELEMENT,'Method',$data->getName(),'method'); + } + if (isset($this->db_template)) + { + // use the docblock template + $this->last = phpDocumentor_clone($this->db_template); + } + else + { + // we don't have a docblock, create an empty one to get rid of errors + $this->last = new parserDocblock(); + } + } +// $this->last->setLineNumber($data->getLineNumber()); + if ($this->last->getKeyword('ignore')) + { + $this->last = false; + return; +// addWarning(PDERROR_IGNORE_TAG_IGNORED,'method',$this->cur_class.'::'.$data->getName()); + } + $this->last->overridePackage($this->category,$this->package,$this->subpackage,$data->getName(),'method'); + if ($data->hasSource()) + { + $this->last->setSource($data->getSource(), $data->getClass()); + } + foreach($data->listParams() as $key => $param) + { + $update_params[$key] = $param; + } + foreach($data->listGlobals() as $param) + { + $update_globals[] = $param[1]; + } + foreach($data->listStatics() as $param) + { + $update_statics[] = $param[0]; + } + if (isset($update_params)) + $this->last->updateParams($update_params); + if (isset($update_globals)) + $this->last->updateGlobals($update_globals); + if (isset($update_statics)) + $this->last->updateStatics($update_statics); + $this->last->updateModifiers($data->getModifiers()); + unset($update_params); + unset($update_globals); + unset($update_statics); + + if ($data->getName() == $this->cur_class) $data->setConstructor(); + if ($data->getName() == '__construct') { + $data->setConstructor(); + } + if ($data->getName() == '__destruct') { + $data->setDestructor(); + } + + if ($_phpDocumentor_setting['pear']) + { + if (strpos($data->getName(), '_') === 0 && substr($data->getName(), 1) == $data->class) + { // is destructor + $data->setDestructor(); + } elseif (strpos($data->getName(), '_') === 0 && !$this->last->getKeyword('access')) + { + if (strpos($data->getName(), '__') !== 0) { + addWarning(PDERROR_PRIVATE_ASSUMED,'method',$data->class.'::'.$data->getName().'()'); + $this->last->addKeyword('access','private'); + $data->setDocBlock($this->last); + } + } + } + $data->setDocBlock($this->last); + $data->path = $this->data->parent->path; + $this->classes->addMethod($data); + $this->last = false; + } + + /** + * handles post-parsing of functions + * + * This function sets {@link $data}->clean to false to tell the + * phpDocumentor_IntermediateParser that a page-level DocBlock can't be + * found after this point on this page. It then sets the package to be the + * same as the page, aligns the docblock's @param, @global, and @staticvar + * tags with the information parsed from the function source code. + * + * If source code has been parsed by a {@}source} tag, the source is added + * to its docblock, and then the parserFunction adds itself to the + * {@link ProceduralPages} class + * @param integer $event Event number from {@link Parser.inc} + * @param parserFunction $data + */ + function handleFunction($event,$data) + { + if ($this->_lastDocBlockWasPageLevel) + { + addWarning(PDERROR_DOCBLOCK_CONFLICT, 'function', $data->getName()); + if (!$this->_oldPageLevel) + { + unset($this->last); + } + } + $this->_lastDocBlockWasPageLevel = false; + $this->data->clean = false; + if ($this->private_page) + { + unset($this->last); + return; + } + + if (empty($this->last)) + { + if (isset($this->db_template)) + { + // use the docblock template + $this->last = phpDocumentor_clone($this->db_template); + } + else + { + // we don't have a docblock, create an empty one to get rid of errors + $this->last = new parserDocblock(); + } + } +// $this->last->setLineNumber($data->getLineNumber()); + if ($this->last->getKeyword('ignore')) + { + unset($this->last); + return; + } + $this->last->overridePackage($this->category,$this->package,$this->subpackage,$data->getName(),'function'); + + foreach($data->listParams() as $key => $param) + { + $update_params[$key] = $param; + } + foreach($data->listGlobals() as $param) + { + $update_globals[] = $param[1]; + } + foreach($data->listStatics() as $param) + { + $update_statics[] = $param[0]; + } + if (isset($update_params)) + $this->last->updateParams($update_params); + if (isset($update_globals)) + $this->last->updateGlobals($update_globals); + if (isset($update_statics)) + $this->last->updateStatics($update_statics); + unset($update_params); + unset($update_globals); + unset($update_statics); + + if ($data->hasSource()) + { + $this->last->setSource($data->getSource()); + } + if (count($this->last->params) == 1 && !count($data->listParams())) + { + // if the function has no parameters, and 1 @param, add it to the list as optional, default value is description from @param + $pars = $this->last->listParams(); + $data->addParam($pars[0]['var'],$pars[0]['data']->getString()); + } + $data->setDocBlock($this->last); + $this->proceduralpages->addFunction($data); + $this->last = false; + } + + /** + * handles post-parsing of defines + * + * This function sets {@link $data}->clean to false to tell the + * phpDocumentor_IntermediateParser that a page-level DocBlock can't be + * found after this point on this page. It then sets the package to be the + * same as the page and adds itself to the {@link ProceduralPages} class + * @param integer $event Event number from {@link Parser.inc} + * @param parserDefine $data + */ + function handleDefine($event,$data) + { + if ($this->_lastDocBlockWasPageLevel) + { + addWarning(PDERROR_DOCBLOCK_CONFLICT, 'define', $data->getName()); + if (!$this->_oldPageLevel) + { + unset($this->last); + } + } + $this->_lastDocBlockWasPageLevel = false; + $this->data->clean = false; + if ($this->private_page) + { + unset($this->last); + return; + } + if (empty($this->last)) + { + if (isset($this->db_template)) + { + // use the docblock template + $this->last = phpDocumentor_clone($this->db_template); + } + else + { + // we don't have a docblock, create an empty one to get rid of errors + $this->last = new parserDocblock(); + } + } +// $this->last->setLineNumber($data->getLineNumber()); + if ($this->last->getKeyword('ignore')) + { + unset($this->last); + return; + } + + $this->last->overridePackage($this->category,$this->package,$this->subpackage,$data->getName(),'define'); + $data->setDocBlock($this->last); + $this->proceduralpages->addDefine($data); + $this->last = false; + } + + /** + * handles post-parsing of classes + * + * This function sets {@link $data}->clean to false to tell the + * phpDocumentor_IntermediateParser that a page-level DocBlock can't be + * found after this point on this page. It sets {@link $cur_class} to its + * name, and if an @ignore tag is found in the DocBlock, it sets + * {@link $private_class} to true, to prevent post-parsing of any of the + * class's vars or methods. Then it checks for the existence of a package + * page for the class's package + * @param integer $event Event number from {@link Parser.inc} + * @param parserClass $data + */ + function handleClass($event,$data) + { + global $_phpDocumentor_setting; + if ($data->isInterface()) + { + $objectType = 'interface'; + } + else + { + $objectType = 'class'; + } + if ($this->_lastDocBlockWasPageLevel) + { + if (!$this->_oldPageLevel) + { + addWarning(PDERROR_DOCBLOCK_GOES_CLASS, $data->getName()); + $doc = new parserDocBlock; + $doc->category = $this->category; + $doc->package = $this->package; + $doc->subpackage = $this->subpackage; + if ($_phpDocumentor_setting['sourcecode']) { + $doc->canSource(); + $doc->addFileSource($this->data->parent->path, $this->data->parent->source); + } + $this->data->setDocBlock($doc); + unset($doc); + if ($this->last) { + $this->last->cantSource(); + } + } + } + $this->_lastDocBlockWasPageLevel = false; + $this->data->clean = false; + if (empty($this->last)) + { + if ($this->undocumentedElementWarnings) + { + addWarning(PDERROR_UNDOCUMENTED_ELEMENT,'Class',$data->getName(),'Class'); + } + if (isset($this->db_template)) + { + // use the docblock template + $this->last = phpDocumentor_clone($this->db_template); + } + else + { + // we don't have a docblock, create an empty one to get rid of errors + $this->last = new parserDocblock(); + } + list($this->last->package, $this->last->subpackage) = $this->_guessPackage($this->data->parent->path, $this->data->parent->getSourceLocation('dummy')); + addWarning(PDERROR_NO_PACKAGE_TAG,$objectType,$data->getName(),$this->last->package); + } else + { + if (!$this->last->getExplicitPackage()) + { + list($this->last->package, $this->last->subpackage) = $this->_guessPackage($this->data->parent->path, $this->data->parent->getSourceLocation('dummy')); + addWarning(PDERROR_NO_PACKAGE_TAG,$objectType,$data->getName(),$this->last->package); + } else + { + if (isset($this->packagecategories[$this->package]) + && $this->packagecategories[$this->package] != $this->category) + addWarning(PDERROR_PACKAGECAT_SET,$this->package, + $this->packagecategories[$this->package], + $this->category); + $this->packagecategories[$this->package] = $this->category; + } + } + $this->last->updateModifiers($data->getModifiers()); +// $this->last->setLineNumber($data->getLineNumber()); + $data->setDocBlock($this->last); + $this->cur_class = $name = $data->getName(); + if ($this->last->getKeyword('ignore')) + { + $this->private_class = true; + unset($this->last); + return; + } + $data->path = $this->data->parent->path; + $this->classes->addClass($data); + $this->private_class = false; + if ($this->last->package) + { + $this->parsePackagePage($this->last->package, $this->data->parent->getPath()); + } + $this->last = false; + } + + /** + * handles post-parsing of procedural pages + * + * this event is called at the start of a new page, before the Parser knows + * whether the page will contain any procedural pages or not + * @param integer $event Event number from {@link Parser.inc} + * @param parserPage $data + */ + function handlePage($event,$data) + { + $type = 'page'; + $this->private_page = false; + $this->data = new parserData; + $data->category = $this->category = $GLOBALS['phpDocumentor_DefaultCategoryName']; + $this->package = $GLOBALS['phpDocumentor_DefaultPackageName']; + $this->subpackage = ''; + $this->proceduralpages->addPage($data); + $this->data->setParent($data); + $this->pages[$data->getPath()] = $this->data; + $this->classes->nextFile($data->getPath()); + $this->packageoutput = $data->getPackageOutput(); + } + + /** + * handles post-parsing of DocBlocks + * + * This function sets {@link $last} to the DocBlock represented by $data, to + * allow the next documentable element passed to + * phpDocumentor_IntermediateParser to link the DocBlock into its $docblock + * property. This function also checks for two special cases of DocBlocks: + * <ol> + * <li>First DocBlock in the file contains a @package tag</li> + * <li>First DocBlock in the file is immediately followed by another + * DocBlock</li> + * </ol> + * In both cases, the function extracts this tag and uses it as the + * page-level package. If the @package tag is in the DocBlock of an + * element (function, global variable, whatever) that isn't a page-level + * DocBlock, a warning will be raised to notify the author that a @package + * tag belongs in a page-level DocBlock. + * + * <b>New</b> in version 1.2.2, if the first DocBlock in a file contains + * a @package tag, it is a page-level DocBlock. + * + * If the DocBlock is page-level, it is processed with + * {@link _processPageLevelDocBlock} + * + * Finally, the function replaces the old parserPage in + * {@link parserData::$data}->parent with the new one containing information + * from the DocBlock by calling {@link addPage()}, and checks for + * package-level docs. + * @param integer $event Event number from {@link Parser.inc} + * @param parserDocBlock $data + */ + function handleDocBlock($event,$data) + { + $type = 'docblock'; + $data->postProcess(); + // Zend desc support + if ($tdesc = $data->getKeyword('desc')) + { + $data->setShortDesc($tdesc); + unset($data->tags['desc']); + } + $this->_lastDocBlockWasPageLevel = false; + // 1st docblock in file, check for @package + if ($this->data->isClean() && !isset($this->last)) + { + if ($data->getExplicitPackage()) + { + // new with 1.2.2: + // if the first docblock in a file + // contains a @package tag, then it is + // a page-level docblock + $this->_processPageLevelDocBlock($data); + $this->_lastDocBlockWasPageLevel = true; + $this->all_packages[$data->package] = 1; + $this->last = $data; + return; + } + $doc = new parserDocBlock; + $doc->category = $this->category; + $doc->package = $this->package; + $doc->subpackage = $this->subpackage; + $this->data->setDocBlock($doc); + $this->proceduralpages->addPagePackage($this->data->parent->getPath(),$this->package,$this->subpackage); + unset($doc); + } + // 2nd docblock in a row, and it's at the top of the file, page-level docblock + if ($this->lasttype == "docblock" && $this->data->isClean()) + { + $this->_processPageLevelDocBlock($this->last); + $this->_oldPageLevel = true; + $this->_lastDocBlockWasPageLevel = false; + } + $this->all_packages[$data->package] = 1; + $this->last = $data; + } + + /** + * Process a Page-level DocBlock + * + * First, it checks for an @ignore tag, + * and if found, calls {@link ProceduralPages::ignorePage()}. An @ignore + * tag in a page-level DocBlock will ignore all functions, defines, global + * variables, and includes. It will not ignore classes! The function next + * checks for an @access private, and if --parseprivate is off, performs the + * same actions as @ignore. + * Next, it checks for the @name tag, which is used to rename the page. + * This is also a PEAR compatibility issue, and may not be very useful in + * the long run. Documentation is best when it refers to real entities in + * the package, and not to aliases. + * @access private + */ + function _processPageLevelDocBlock($data) + { + global $_phpDocumentor_setting; + // can only have 1 package-level docblock, others are ignored + if (!$this->data->isClean()) + { + return; + } + $this->data->clean = false; + $this->data->explicitDocBlock(); + $data->canSource(); + if ($_phpDocumentor_setting['sourcecode']) + { + $data->addFileSource($this->data->parent->path, $this->data->parent->source); + } + if (!$data->getExplicitPackage()) + { + list($data->package,$data->subpackage) = $this->_guessPackage($this->data->parent->getPath(), $this->data->parent->getSourceLocation('dummy')); + addWarning(PDERROR_NO_PACKAGE_TAG,'file',$this->data->parent->getPath(),$this->last->package); + } + if (isset($this->packagecategories[$this->package]) + && $this->packagecategories[$this->package] != $data->category) + addWarning(PDERROR_PACKAGECAT_SET,$this->package, + $this->packagecategories[$this->package], + $data->category); + $this->packagecategories[$this->package] = $data->category; + $this->category = $this->data->parent->category = $data->category; + $this->packagecategories[$this->package] = $this->category; + $this->subpackage = $this->data->parent->subpackage = $data->subpackage; + $this->data->setDocBlock($data); + if ($data->getKeyword('ignore')) + { + $this->proceduralpages->ignorePage($this->data->parent); + $this->private_page = true; + unset($this->last); + $this->privatepages[$this->data->parent->getPath()] = $this->data; + unset($this->pages[$this->data->parent->getPath()]); + return; + } + $this->package = $this->data->parent->package = $data->package; + $this->subpackage = $this->data->parent->subpackage = $data->subpackage; + $this->proceduralpages->addPagePackage($this->data->parent->getPath(),$this->package,$this->subpackage); + if ($access = $data->getKeyword('access')) + { + if (is_object($access) && ($access->getString() == 'private') && (!$this->parsePrivate)) + { + $this->proceduralpages->ignorePage($this->data->parent); + $this->private_page = true; + unset($this->last); + $this->privatepages[$this->data->parent->getPath()] = $this->data; + unset($this->pages[$this->data->parent->getPath()]); + return; + } + } + if ($data->getKeyword('name')) + { + $a = $data->getKeyword('name'); + if (is_object($a)) $a = $a->value; + $this->data->parent->setFile($a); + $this->proceduralpages->setName($a); + } + $this->addPage($this->data->parent, $this->data->parent->getPath()); + if ($this->package) + { + $this->parsePackagePage($this->package, $this->data->parent->getPath()); + } + } + + /** + * Backward-compatibility only, use the new tutorials for more power + * @tutorial tutorials.pkg + * @param string package name of package file to parse + * @param string directory of file that contains package name + */ + function parsePackagePage($package, $path) + { + if (!isset($this->package_pages[$package])) + { + if (file_exists(dirname($path) . SMART_PATH_DELIMITER . $package . '.html')) + { + if ($this->quietMode === false) + { + phpDocumentor_out("Reading package-level file ".$package . '.html'); + flush(); + } + $fp = fopen(dirname($path) . SMART_PATH_DELIMITER . $package . '.html',"r"); + $ret = fread($fp,filesize(dirname($path) . SMART_PATH_DELIMITER . $package . '.html')); + fclose($fp); + unset($fp); + if ($this->quietMode === false) + { + phpDocumentor_out(" -- Parsing File\n"); + flush(); + } + $pageParser = new ppageParser; + $tempp = $this->package; + $lp = $this->last; + $pageParser->subscribe('*',$this); + $pageParser->parse($ret,false,$package); + $this->package = $tempp; + $this->last = $lp; + unset($tempp); + unset($pageParser); + } + } + } + + /** + * called via {@link Parser::parse()} and Parser's inherited method + * {@link Publisher::publishEvent()} + * + * $event is one of the PHPDOC constants from Parser.inc. If it is not + * PHPDOCUMENTOR_EVENT_NEWSTATE, then a function name is retrieved from the + * {@link $event_handlers} array and called to handle the $data + * @param integer $event event number from {@link Parser.inc} + * @param mixed $data if $event is {@link PHPDOCUMENTOR_EVENT_NEWSTATE}, $data is a {@link PHP_DOC_EVENT_END_PAGE} or {@link STATE_END_CLASS}, + * otherwise $data is either a {@link parserDocBlock}, {@link parserPage} or descendant of {@link parserElement} + * @global array we use 'sourcecode' to determine whether to highlight the source + * of the current file if it has no file-level docblock + */ + function HandleEvent($event,$data) + { + global $_phpDocumentor_setting; + global $phpDocumentor_DefaultPackageName, $phpDocumentor_DefaultCategoryName; + if (empty($this->packagecategories)) + $this->packagecategories[$phpDocumentor_DefaultPackageName] = $phpDocumentor_DefaultCategoryName; + if ($event == PHPDOCUMENTOR_EVENT_NEWSTATE) + { + if ($data == STATE_END_CLASS) + { + } elseif ($data == PHPDOCUMENTOR_EVENT_END_PAGE) + { + if (!$this->private_page) + { + $this->all_packages[$this->package] = 1; + if (!$this->data->hasExplicitDocBlock()) + { + $doc = $this->data->docblock; + if (!$this->data->docblock) + { + $doc = new parserDocBlock; + } + if ($_phpDocumentor_setting['sourcecode']) + { + $doc->canSource(); + $doc->addFileSource($this->data->parent->path, $this->data->parent->source); + } + list($doc->package,$doc->subpackage) = $this->_guessPackage($this->data->parent->getPath(), $this->data->parent->getSourceLocation('dummy')); + addWarning(PDERROR_NO_PAGE_LEVELDOCBLOCK,$this->data->parent->getPath()); + $this->data->setDocBlock($doc); + $this->proceduralpages->addPage($this->data->parent,$doc->package,$doc->subpackage); + } + $this->pages[$this->data->parent->getPath()] = $this->data; + } + $this->private_page = false; + $this->private_class = false; + if (isset($this->db_template)) + { + addWarning(PDERROR_DB_TEMPLATE_UNTERMINATED); + } + unset($this->db_template); + unset($this->last); + } elseif ($data == PHPDOCUMENTOR_EVENT_END_DOCBLOCK_TEMPLATE) + { + unset($this->db_template); + } + //echo $this->state_lookup[$data] . "\n"; + //echo $data."\n"; + } + else + { + if ($event == PHPDOCUMENTOR_EVENT_README_INSTALL_CHANGELOG) + { + $this->ric[$data[0]] = $data[1]; + return; + } + if ($event == PHPDOCUMENTOR_EVENT_DOCBLOCK_TEMPLATE) + { + $data->postProcess(); + $this->db_template = $data; + $this->_lastDocBlockWasPageLevel = false; + // 2nd docblock in a row, and it's at the top of the file, page-level docblock + if ($this->type == "docblock" && $this->data->isClean()) + { + // can only have 1 package-level docblock, others are ignored + $this->data->clean = false; + if ($this->last->getKeyword('ignore')) + { + $this->proceduralpages->ignorePage($this->data->parent); + $this->private_page = true; + unset($this->last); + $this->privatepages[$this->data->parent->getPath()] = $this->data; + unset($this->pages[$this->data->parent->getPath()]); + return; + } + $this->data->setDocBlock($this->last); + $this->package = $this->data->parent->package = $this->last->package; + $this->subpackage = $this->data->parent->subpackage = $this->last->subpackage; + $this->proceduralpages->addPagePackage($this->data->parent->getPath(),$this->package,$this->subpackage); + if ($access = $this->last->getKeyword('access')) + { + if (is_object($access) && ($access->getString() == 'private') && (!$this->parsePrivate)) + { + addWarning(PDERROR_PARSEPRIVATE, $this->data->parent->getPath()); + $this->proceduralpages->ignorePage($this->data->parent); + $this->private_page = true; + unset($this->last); + $this->privatepages[$this->data->parent->getPath()] = $this->data; + unset($this->pages[$this->data->parent->getPath()]); + return; + } + } + if ($this->last->getKeyword('name')) + { + $a = $this->last->getKeyword('name'); + if (is_object($a)) $a = $a->value; + $this->data->parent->setFile($a); + $this->proceduralpages->setName($a); + } + $this->addPage($this->data->parent, $this->data->parent->getPath()); + if ($this->package) + { + $this->parsePackagePage($this->package, $this->data->parent->getPath()); + } + } + unset($this->last); + } else + { + $this->lasttype = $this->type; + $type = $data->getType(); +// fancy_debug($type,$data); + if (($type != 'page') && ($type != 'docblock') && ($type != 'packagepage') && ($type != 'tutorial')) + { + $data->setFile($this->data->parent->getFile()); + } + $this->type = $type; + //echo $type . "\n"; + + if (isset($this->event_handlers[$type])) + { + $handle = $this->event_handlers[$type]; + $this->$handle($event,$data); + } + } + } + } + + /** + * Replaces the {@link parserPage} represented by $this->pages[$path] with + * $page + * + * Called by {@link addPageIfNecessary(), handleDocBlock()} and + * {@link ProceduralPages::setupPages()}, this method first checks to see if + * the page has been added. If not, it assumes that the page has either + * been @ignored or set with @access private with --parseprivate off, and + * returns {@link addPrivatePage()}. Otherwise, it sets the pages[$path] to + * be the parserPage $page and sets the package and subpackage to that of + * $page + * @see $pages + * @param parserPage + * @param string full path to the file + */ + function addPage($page, $path) + { + if (!isset($this->pages[$path])) return $this->addPrivatePage($page, $path); + $this->pages[$path]->setParent($page); + if ($page->package != $GLOBALS['phpDocumentor_DefaultPackageName']) + { + if (!$this->pages[$path]->docblock) + { + $docblock = new parserDocBlock; + $docblock->package = $page->package; + $docblock->subpackage = $page->subpackage; + $this->pages[$path]->docblock = $docblock; + } else + { + $this->pages[$path]->docblock->package = $page->package; + $this->pages[$path]->docblock->subpackage = $page->subpackage; + } + } + } + + /** + * add a new {@link parserPage} to the $pages array if none is found + * + * This method is used when a page has been @ignored or marked with @access + * private, and a public class is in the page (a class with no @access + * private in its DocBlock). The method first creates a new page in the + * {@link $pages} array and then copies path information, and calls + * {@link addPage()} to set up packages + * @param string full path of page + */ + function addPageIfNecessary($path, &$class) + { + global $_phpDocumentor_setting; + if (!$this->parsePrivate) + { + if (!isset($this->pages[$path])) + { + $this->pages[$path] = new parserData; + $this->pages[$path]->docblock = new parserDocBlock; + $this->pages[$path]->docblock->package = $this->privatepages[$path]->docblock->package; + $this->pages[$path]->docblock->subpackage = $this->privatepages[$path]->docblock->subpackage; + $par = $this->privatepages[$path]->parent; + $this->pages[$path]->setParent($par); + $this->proceduralpages->addPage($par); + } + } + if (!empty($_phpDocumentor_setting['packageoutput'])) + $packages = explode(',',$_phpDocumentor_setting['packageoutput']); + if (!empty($_phpDocumentor_setting['packageoutput']) && + $this->pages[$path]->parent->package != $class->docblock->package && + !in_array($this->pages[$path]->parent->package,$packages)) + { + $this->pages[$path]->parent->package = $class->docblock->package; + $this->addPage($this->pages[$path]->parent, $path); + $this->proceduralpages->addPage($this->pages[$path]->parent); + } + } + + /** + * Adds a {@link parserPage} element to the {@link parserData} element in + * $this->privatepages[$path] + * + * Performs a similar function to addPage, but adds to the + * {@link $privatePages} array + * @param parserPage $page + * @param string $path full path to the page + * @see addPage() + */ + function addPrivatePage($page, $path) + { + /* + * if privatepages is still empty, + * we need to initialize it with an empty + * path=>ParserData element, so that it has + * a top-level element... otherwise the setParent() call + * below will crap out. + */ + if (count($this->privatepages) == 0) { + $this->privatepages[$path] = new ParserData(); + } + $this->privatepages[$path]->setParent($page); + if (isset($page->package) && $page->package != $GLOBALS['phpDocumentor_DefaultPackageName']) + { + if (!$this->privatepages[$path]->docblock) + { + $docblock = new parserDocBlock; + $docblock->package = $page->package; + $docblock->subpackage = $page->subpackage; + $this->privatepages[$path]->docblock = $docblock; + } else + { + $this->privatepages[$path]->docblock->package = $page->package; + $this->privatepages[$path]->docblock->subpackage = $page->subpackage; + } + } + } + + /** + * adds a processed descendant of {@link parserElement} to the {@link $pages} + * array or {@link $privatepages} array + * + * This function expects the page to exist in either $pages or $privatepages. It calls the + * {@link parserData::addElement()} method to add $element to the page. + * @param parserElement $element this will actually be a descendant of parserElement + * @param string $path + */ + function addElementToPage($element, $path) + { + if (isset($this->privatepages[$path])) + { + if (isset($this->pages[$path])) + { + if ($element->type == 'class' || $element->type == 'method' + || $element->type == 'var' || $element->type == 'const') + { + $this->pages[$path]->addElement($element); + } else + $this->privatepages[$path]->addElement($element); + } else + $this->privatepages[$path]->addElement($element); + } else + { + if (isset($this->pages[$path])) + { + $this->pages[$path]->addElement($element); + } + } + } + + /** + * Add all the @uses tags from $element to the $uses array so that @usedby + * virtual tags can be added + * @uses parserUsesTag::getSeeElement() used to initialize {@link $uses} + * @uses parserUsesTag::getDescription() used to initialize {@link $uses} + * @param parserElement descendant of parserElement + * @param string full path to the file + */ + function addUses($element, $path) + { + if (isset($element->type) && $element->type == 'page') + { + $element = $this->pages[$element->path]; + } + if (!$this->parsePrivate && isset($element->docblock->hasaccess) && $element->docblock->hasaccess) + { + $a = $element->docblock->getKeyword('access'); + if (is_object($a) && $a->getString() == 'private') return; + } + if (isset($this->privatepages[$path])) + { + if (isset($this->pages[$path])) + { + $uses = $element->docblock->getKeyword('uses'); + if ($uses) + { + if (!is_array($uses)) $uses = array($uses); + foreach($uses as $use) + { + if (!is_object($use)) continue; + $el = $use->getSeeElement(); + $description = $use->getDescription(); + $this->uses[$el][] = array($element, $description); + } + } + } + } else + { + if (isset($this->pages[$path])) + { + $uses = $element->docblock->getKeyword('uses'); + if ($uses) + { + if (!is_array($uses)) $uses = array($uses); + foreach($uses as $use) + { + if (!is_object($use)) continue; + $el = $use->getSeeElement(); + $description = $use->getDescription(); + $this->uses[$el][] = array($element, $description); + } + } + } + } + } + + /** + * Add a {@link parserUsedByTag} link to every element referred to by @uses + * @param Converter temporary converter used to retrieve abstract links + * @uses phpDocumentor_IntermediateParser::addUses() indirectly, as + * addUses() sets up $uses, which is iterated over here + * @uses $pages sets up all @usedby tags from here + * @access private + */ + function _setupUsesList(&$converter) + { + ob_start(); + $converter->_createPkgElements($this->pages); + ob_end_clean(); + ksort($this->uses); + foreach($this->uses as $link => $elements) + { + foreach($elements as $element) + { + if ($element[0]->type == 'method' || $element[0]->type == 'var' || + $element[0]->type == 'const') + { + $converter->class = $element[0]->getClass(); + } + if ($element[0]->type == 'class') + { + $converter->class = $element[0]->getName(); + } + $reallink = $converter->getLink($link,$element[0]->docblock->package); + if (is_object($reallink)) + { + // add a used by tag to the docblock of the destination + switch(phpDocumentor_get_class($reallink)) + { + case 'pagelink' : + $this->pages[$reallink->path]->docblock->addUsedBy( + $element[0]->getLink($converter, false, true), + $element[1]); + break; + case 'functionlink' : + case 'definelink' : + case 'globallink' : + if (isset($this->pages[$reallink->path])) + { + for ($i=0; + $i<count($this->pages[$reallink->path]->elements); + $i++) { + if ($this->pages[$reallink->path]->elements[$i]->type == + str_replace('link', '', + phpDocumentor_get_class($reallink)) && + $this->pages[$reallink->path]-> + elements[$i]->getName() + == $reallink->name) { + $this->pages[$reallink->path]->elements[$i]-> + docblock->addUsedBy( + $element[0]->getLink($converter,false,true), + $element[1]); +// debug('added @usedby to '.str_replace('link','',phpDocumentor_get_class($reallink)).' '.$reallink->name); + } + } + } + break; + case 'classlink' : + case 'methodlink' : + case 'varlink' : + case 'constlink' : + if (isset($this->pages[$reallink->path])) + { + for ($i=0;$i<count($this->pages[$reallink->path]->classelements);$i++) + { + if ($this->pages[$reallink->path]->classelements[$i]->type == + str_replace('link','',phpDocumentor_get_class($reallink)) && + $this->pages[$reallink->path]->classelements[$i]->getName() == $reallink->name && + (!isset($reallink->class) || + $this->pages[$reallink->path]->classelements[$i]->getClass() == $reallink->class)) + { + $this->pages[$reallink->path]->classelements[$i]->docblock->addUsedBy($element[0]->getLink($converter,false,true), $element[1]); +// debug('added @usedby to '.str_replace('link','',phpDocumentor_get_class($reallink)).' '.$reallink->name); + } + } + } + break; + } + } + } + } + } + + /** + * Interface to the Converter + * + * This function simply passes {@link $pages} and {@link package_pages} to + * the walk() method, and then calls the Output() method. Note that + * Output() is not required to do anything, and in fact doesn't in + * HTMLframesConverter. + * @uses Converter::walk() passes {@link $pages} and {@link $package_pages} + * @uses Converter::Output() + */ + function Convert($title, $converter) + { + $converter->walk($this->pages, $this->package_pages); + $converter->Output($title); + $converter->cleanup(); + } + + /** + * Clean up classes + * + * {@source} + * @access private + * @uses Classes::Inherit() passes $this + */ + function fixClasses() + { + $this->classes->Inherit($this); + } + + /** + * Clean up Procedural Pages + * {@source} + * @access private + * @uses ProceduralPages::setupPages() passes $this + */ + function fixProcPages() + { + $this->proceduralpages->setupPages($this); + } + + /** + * If the parent class of $class is in a different package, adds it to the + * {@link $package_parents} array + * @param parserClass &$class + */ + function addPackageParent(&$class) + { + if (!is_array($class->parent)) return; + $par = $this->classes->getClass($class->parent[1], $class->parent[0]); + if ($class->docblock->package == $par->docblock->package) return; + $this->package_parents[$class->docblock->package] = $par->docblock->package; + if (!isset($this->package_parents[$par->docblock->package]) || !$this->package_parents[$par->docblock->package]) $this->package_parents[$par->docblock->package] = false; + } + + /** + * Add a converter name to use to the list of converters + * + * Sets up the {@link $converters} array. + * {@internal + * First, the Converter's file is included, and then, if successful, + * the converter classname is tested for existance. If all is good, + * then the templates are added to the list of converters/templates to use}} + * @param string $output output format (HTML, PDF, XML). Must be all caps + * @param string $name Converter name (frames, for example, is the name of + * HTMLframesConverter) + * @param string $template template to use, should be a relative path to the + * templates dir (like DOM/default) + */ + function addConverter($output,$name,$template) + { + if ($this->templateBase) { + $templateBase = str_replace('\\','/', $this->templateBase) . '/Converters'; + } else { + if ('@PEAR-DIR@' != '@'.'PEAR-DIR@') { + $templateBase = 'PhpDocumentor/phpDocumentor/Converters'; + } else { + $templateBase = str_replace('\\','/',$GLOBALS['_phpDocumentor_install_dir']) . '/phpDocumentor/Converters'; + } + } + if (strpos($name,PATH_DELIMITER)) + { + // include the parent template + $parent = explode(PATH_DELIMITER,$name); + $parent = $parent[0]; + if (!class_exists($output . $parent . 'Converter')) { + $filename = $templateBase . '/' . $output . '/' . $parent . '/' . $output + . $parent . 'Converter.inc'; + if (Io::isIncludeable($filename)) + { + include_once($filename); + } + } + if (!class_exists($output . $parent . 'Converter')) + { + addError(PDERROR_CONVERTER_NOT_FOUND,"parent Converter ".$output . $parent . "Converter of child Converter ".$output . str_replace(PATH_DELIMITER,'',$name) . "Converter"); + } + } + $filename = $templateBase . + PATH_DELIMITER . $output . PATH_DELIMITER . $name . PATH_DELIMITER . $output . + str_replace(PATH_DELIMITER, '', $name) . "Converter" . ".inc"; + if (Io::isIncludeable($filename)) + { + include_once($filename); + } + if (class_exists($output . str_replace(PATH_DELIMITER,'',$name) . 'Converter')) + { + $this->converters[$output][$output . str_replace(PATH_DELIMITER,'',$name) . "Converter"][] = $template; + } else + { + addError(PDERROR_CONVERTER_NOT_FOUND,$output . str_replace(PATH_DELIMITER,'',$name) . "Converter"); + } + } + + /** + * does a natural case sort on two {@link parserElement} descendants + * + * @param mixed $a + * @param mixed $b + * @return int + * @see generateElementIndex() + */ + function elementCmp ($a, $b) + { + return strnatcasecmp($a->getName(), $b->getName()); + } + + /** + * does a natural case sort on two class elements (either + * {@link parserClass, parserMethod} or {@link parserVar} + * + * @param mixed $a + * @param mixed $b + * @return int + * @see generateElementIndex() + */ + function ClasselementCmp ($a, $b) + { + if (phpDocumentor_get_class($a) == 'parserclass') $atest = $a->name; else $atest = $a->class; + if (phpDocumentor_get_class($b) == 'parserclass') $btest = $b->name; else $btest = $b->class; + + if(($c = strnatcasecmp($atest, $btest)) != 0) return $c; + if (phpDocumentor_get_class($a) != 'parserclass') $atest .= $a->name; + if (phpDocumentor_get_class($b) != 'parserclass') $btest .= $b->name; + if (phpDocumentor_get_class($a) == 'parsermethod' && phpDocumentor_get_class($b) == 'parsermethod') + { + if ($a->isConstructor) return -1; + if ($b->isConstructor) return 1; + if ($a->isDestructor) return -1; + if ($b->isDestructor) return 1; + } + return strnatcasecmp($atest,$btest); + } + + /** + * call this method once parsing has completed. + * + * This method calls the private methods fixClasses and fixProcPages, both + * of which adjust inheritance and package information based on complicated + * post-parsing rules described in {@link ProceduralPages::setupPages()} + * and {@link Classes::Inherit()}. Then, it sorts elements of the $pages + * array and calls Convert for each Converter in the $converters array + * @see $converters + * @see $pages + * @see Convert() + */ + function Output ($title = "Generated Documentation") + { + $GLOBALS['phpDocumentor_errors']->curfile = false; + $this->fixClasses(); + $this->fixProcPages(); +// var_dump($this->uses); +// exit; + phpDocumentor_out("\nSorting page elements..."); + flush(); + uasort($this->pages,'pagesort'); + foreach($this->pages as $i => $page) + { + usort($this->pages[$i]->elements,array($this,'elementCmp')); + usort($this->pages[$i]->classelements,array($this,'ClasselementCmp')); + } + phpDocumentor_out("done\n"); + flush(); + $complicatedout = false; + if (is_array($this->converters)) + { + if (count($this->converters) > 1) + { + $complicatedout = true; + } + phpDocumentor_out("Formatting @uses list..."); + flush(); + $a = new __dummyConverter($this->all_packages, $this->package_parents, $this->classes, $this->proceduralpages, $this->packageoutput, $this->parsePrivate, $this->quietMode, $this->targetDir , '', $this->title); + $this->_setupUsesList($a); + unset($a); + phpDocumentor_out("done\n\n"); + flush(); + foreach($this->converters as $converter => $blah) + { + if (is_array($blah)) + { + if (count($blah) > 1) + { + $complicatedout = true; + } + foreach($blah as $converter => $templates) + { + foreach($templates as $template) + { + $extraout = ''; + if ($complicatedout) + { + $extraout = SMART_PATH_DELIMITER . $converter; + } + if (count($templates) > 1) + { + $extraout .= SMART_PATH_DELIMITER . str_replace(PATH_DELIMITER, SMART_PATH_DELIMITER, substr($template,0,strlen($template) - 1)); + } + $a = new $converter($this->all_packages, $this->package_parents, $this->classes, $this->proceduralpages, $this->packageoutput, $this->parsePrivate, $this->quietMode, $this->targetDir . $extraout, $template, $this->title); + if (isset($this->templateBase)) + { + $a->setTemplateBase($this->templateBase, $template); + } + $a->ric = $this->ric; + $a->packagecategories = $this->packagecategories; + if (isset($this->tutorials)) $a->setTutorials($this->tutorials); + $this->Convert($title, $a); + unset($a); + } + } + } + } + } else + { + addErrorDie(PDERROR_NO_CONVERTERS); + } + } + + /** + * Sets the output directory + * + * @param string $dir the output directory + */ + function setTargetDir($dir) + { + $this->targetDir = $dir; + } + + /** + * Sets the template base directory + * + * @param string $dir the template base directory + * @tutorial phpDocumentor.howto.pkg#using.command-line.templatebase + */ + function setTemplateBase($dir) + { + $this->templateBase = $dir; + } + + /** + * set parsing information output mode (quiet or verbose) + * + * If set to false, no parsing information (parsing /php/file/thisfile.php, + * Converting etc.) will be displayed. + * Useful for cron jobs + * @param bool $quietMode + */ + function setQuietMode($quietMode) + { + $this->quietMode = $quietMode; + } + + /** + * show warnings for undocumented elements + * + * If set to false, no warnings will be shown for undocumented elements. + * Useful for identifying classes and methods that haven't yet been documented. + * @param bool $undocumentedElementWarnings + */ + function setUndocumentedElementWarningsMode($undocumentedElementWarnings) + { + $this->undocumentedElementWarnings = $undocumentedElementWarnings; + } + + /** + * set display of elements marked with @access private + * + * If set to true, elements will be displayed + * @param bool $parse + */ + function setParsePrivate($parse) + { + $this->parsePrivate = $parse; + } +} + +/** @access private */ +function pagesort($a, $b) +{ + return strnatcasecmp($a->parent->file,$b->parent->file); +} +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Io.inc b/buildscripts/PhpDocumentor/phpDocumentor/Io.inc new file mode 100755 index 00000000..17eb326b --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Io.inc @@ -0,0 +1,992 @@ +<?php +/** + * File and input handling routines + * + * This class parses command-line options, and works with files to + * generate lists of files to parse based on the ignore/include options + * + * phpDocumentor :: automatic documentation generator + * + * PHP versions 4 and 5 + * + * Copyright (c) 2000-2006 Joshua Eichorn, Gregory Beaver + * + * LICENSE: + * + * This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General + * Public License as published by the Free Software Foundation; + * either version 2.1 of the License, or (at your option) any + * later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package phpDocumentor + * @author Joshua Eichorn <jeichorn@phpdoc.org> + * @author Gregory Beaver <cellog@php.net> + * @copyright 2000-2006 Joshua Eichorn, Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version CVS: $Id: Io.inc 286921 2009-08-08 05:01:24Z ashnazg $ + * @filesource + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @since 0.1 + */ +/** + * Class to handle file and user io opperations + * + * @author Joshua Eichorn <jeichorn@phpdoc.org> + * @author Gregory Beaver <cellog@php.net> + * @version $Id: Io.inc 286921 2009-08-08 05:01:24Z ashnazg $ + * @package phpDocumentor + */ +class Io +{ + + /** + * Holds all the options that are avaible to the cmd line interface + * and to the different web interfaces + */ + var $phpDocOptions; + /** + * Format: array(array(regexp-ready string to search for whole path, + * regexp-ready string to search for basename of ignore strings),...) + * @var false|array + */ + var $ignore; + /** + * A specific array of values that boolean-based arguments can understand, + * aided by the {@link decideOnOrOff()} helper method. + * + * Use lowercase letters always, to simplify string comparisons + * @var array + */ + var $valid_booleans = array + ( + '', ' ', 'on', 'y', 'yes', 'true', '1', + 'off', 'n', 'no', 'false', '0' + + ); + + /** + * creates an array $this->phpDocOptions and sets program options in it. + * Array is in the format of: + * <pre> + * [filename][tag][] = "f"; + * [filename][tag][] = "-file"; + * [filename][desc] "name of file to parse" + * </pre> + */ + function Io() + { + $this->phpDocOptions['filename']['tag'] = array( "-f", "--filename"); + $this->phpDocOptions['filename']['desc'] = "name of file(s) to parse ',' file1,file2. Can contain complete path and * ? wildcards"; + $this->phpDocOptions['filename']['type'] = "path"; + + $this->phpDocOptions['directory']['tag'] = array( "-d", "--directory"); + $this->phpDocOptions['directory']['desc'] = "name of a directory(s) to parse directory1,directory2"; + $this->phpDocOptions['directory']['type'] = "path"; + + $this->phpDocOptions['examplesdir']['tag'] = array( "-ed", "--examplesdir"); + $this->phpDocOptions['examplesdir']['desc'] = "full path of the directory to look for example files from @example tags"; + $this->phpDocOptions['examplesdir']['type'] = "path"; + + $this->phpDocOptions['templatebase']['tag'] = array( "-tb", "--templatebase"); + $this->phpDocOptions['templatebase']['desc'] = "base location of all templates for this parse."; + $this->phpDocOptions['templatebase']['type'] = "path"; + + $this->phpDocOptions['target']['tag'] = array("-t", "--target"); + $this->phpDocOptions['target']['desc'] = "path where to save the generated files"; + $this->phpDocOptions['target']['type'] = "path"; + + $this->phpDocOptions['ignore']['tag'] = array("-i", "--ignore"); + $this->phpDocOptions['ignore']['desc'] = "file(s) that will be ignored, multiple separated by ','. Wildcards * and ? are ok"; + $this->phpDocOptions['ignore']['type'] = "path"; + + $this->phpDocOptions['ignoresymlinks']['tag'] = array("-is", "--ignoresymlinks"); + $this->phpDocOptions['ignoresymlinks']['desc'] = "ignore symlinks to other files or directories, default is off"; + $this->phpDocOptions['ignoresymlinks']['type'] = "set"; + $this->phpDocOptions['ignoresymlinks']['validvalues'] = $this->valid_booleans; + + $this->phpDocOptions['ignoretags']['tag'] = array("-it", "--ignore-tags"); + $this->phpDocOptions['ignoretags']['desc'] = "tags to ignore for this parse. @package, @subpackage, @access and @ignore may not be ignored."; + $this->phpDocOptions['ignoretags']['type'] = "value"; + + $this->phpDocOptions['hidden']['tag'] = array("-dh", "--hidden"); + $this->phpDocOptions['hidden']['desc'] = "set equal to on (-dh on) to descend into hidden directories (directories starting with '.'), default is off"; + $this->phpDocOptions['hidden']['type'] = "set"; + $this->phpDocOptions['hidden']['validvalues'] = $this->valid_booleans; + + $this->phpDocOptions['quiet']['tag'] = array("-q", "--quiet"); + $this->phpDocOptions['quiet']['desc'] = "do not display parsing/conversion messages. Useful for cron jobs on/off default off"; + $this->phpDocOptions['quiet']['type'] = "set"; + $this->phpDocOptions['quiet']['validvalues'] = $this->valid_booleans; + + $this->phpDocOptions['undocumentedelements']['tag'] = array("-ue", "--undocumentedelements"); + $this->phpDocOptions['undocumentedelements']['desc'] = "Control whether or not warnings will be shown for undocumented elements. Useful for identifying classes and methods that haven't yet been documented on/off default off"; + $this->phpDocOptions['undocumentedelements']['type'] = "set"; + $this->phpDocOptions['undocumentedelements']['validvalues'] = $this->valid_booleans; + + $this->phpDocOptions['title']['tag'] = array("-ti","--title"); + $this->phpDocOptions['title']['desc'] = "title of generated documentation, default is 'Generated Documentation'"; + $this->phpDocOptions['title']['type'] = "value"; + + $this->phpDocOptions['help']['tag'] = array("-h", "--help"); + $this->phpDocOptions['help']['desc'] = " show this help message"; + + $this->phpDocOptions['useconfig']['tag'] = array("-c","--useconfig"); + $this->phpDocOptions['useconfig']['desc'] = "Use a Config file in the users/ subdirectory for all command-line options"; + $this->phpDocOptions['useconfig']['type'] = "value"; + + $this->phpDocOptions['parseprivate']['tag'] = array("-pp","--parseprivate"); + $this->phpDocOptions['parseprivate']['desc'] = "parse @internal and elements marked private with @access. Use on/off, default off"; + $this->phpDocOptions['parseprivate']['type'] = "set"; + $this->phpDocOptions['parseprivate']['validvalues'] = array('on', 'off'); + + $this->phpDocOptions['packageoutput']['tag'] = array("-po","--packageoutput"); + $this->phpDocOptions['packageoutput']['desc'] = "output documentation only for selected packages. Use a comma-delimited list"; + $this->phpDocOptions['packageoutput']['type'] = "value"; + + $this->phpDocOptions['defaultpackagename']['tag'] = array("-dn","--defaultpackagename"); + $this->phpDocOptions['defaultpackagename']['desc'] = "name to use for the default package. If not specified, uses 'default'"; + $this->phpDocOptions['defaultpackagename']['type'] = "value"; + + $this->phpDocOptions['defaultcategoryname']['tag'] = array("-dc","--defaultcategoryname"); + $this->phpDocOptions['defaultcategoryname']['desc'] = "name to use for the default category. If not specified, uses 'default'"; + $this->phpDocOptions['defaultcategoryname']['type'] = "value"; + + $this->phpDocOptions['output']['tag'] = array("-o","--output"); + $this->phpDocOptions['output']['desc'] = "output information to use separated by ','. Format: output:converter:templatedir like \"HTML:frames:phpedit\""; + $this->phpDocOptions['output']['type'] = "value"; + + $this->phpDocOptions['converterparams']['tag'] = array("-cp","--converterparams"); + $this->phpDocOptions['converterparams']['desc'] = "dynamic parameters for a converter, separate values with commas"; + $this->phpDocOptions['converterparams']['type'] = "value"; + + $this->phpDocOptions['customtags']['tag'] = array("-ct","--customtags"); + $this->phpDocOptions['customtags']['desc'] = "custom tags, will be recognized and put in tags[] instead of unknowntags[]"; + $this->phpDocOptions['customtags']['type'] = "value"; + + $this->phpDocOptions['sourcecode']['tag'] = array("-s","--sourcecode"); + $this->phpDocOptions['sourcecode']['desc'] = "generate highlighted sourcecode for every parsed file (PHP 4.3.0+ only) on/off default off"; + $this->phpDocOptions['sourcecode']['type'] = "set"; + $this->phpDocOptions['sourcecode']['validvalues'] = array('on', 'off'); + + $this->phpDocOptions['javadocdesc']['tag'] = array("-j","--javadocdesc"); + $this->phpDocOptions['javadocdesc']['desc'] = "JavaDoc-compliant description parsing. Use on/off, default off (more flexibility)"; + $this->phpDocOptions['javadocdesc']['type'] = "set"; + $this->phpDocOptions['javadocdesc']['validvalues'] = array('on', 'off'); + + $this->phpDocOptions['pear']['tag'] = array("-p","--pear"); + $this->phpDocOptions['pear']['desc'] = "Parse a PEAR-style repository (package is directory, _members are @access private) on/off default off"; + $this->phpDocOptions['pear']['type'] = "set"; + $this->phpDocOptions['pear']['validvalues'] = array('on', 'off'); + + $this->phpDocOptions['readmeinstallchangelog']['tag'] = array("-ric","--readmeinstallchangelog"); + $this->phpDocOptions['readmeinstallchangelog']['desc'] = "Specify custom filenames to parse like README, INSTALL or CHANGELOG files"; + $this->phpDocOptions['readmeinstallchangelog']['type'] = "value"; + + $this->phpDocOptions['general']['message'] ="You can have multiple directories and multiple files, as well as a combination of both options"; + } + + + /** + * create the help message for display on the command-line + * @return string a string containing a help message + */ + function displayHelpMsg() + { + unset($ret); + $ret = "\n"; + foreach($this->phpDocOptions as $data) + { + unset($tag); + $tag = ""; + if (isset($data['tag'])) + { + if (is_array($data['tag'])) { + foreach($data['tag'] as $param) { + $tag .= "$param "; + } + } + $taglen = 34; + $outputwidth = 79; + $tagspace = str_repeat(" ",$taglen); + $tmp = " ".trim($tag).$tagspace; + $tmp = substr($tmp,0,$taglen); + $d = wordwrap(ltrim($data['desc']),($outputwidth-$taglen)); + $dt = explode("\n",$d); + $dt[0] = $tmp .$dt[0]; + for($i=1;$i<count($dt);$i++) + { + $dt[$i] = $tagspace.$dt[$i]; + } + $ret .= implode("\n",$dt)."\n\n"; + + } + } + $ret .= "\n".wordwrap($data['message'],$outputwidth)."\n"; + return $ret; + } + + /** + * calls {@link file_exists()} for each value in include_path, + * then calls {@link is_readable()} when it finds the file + * @param string + * @return boolean + */ + function isIncludeable($filename) + { + $test = realpath($filename); + if ($test && is_readable($test)) { + return true; // for absolute paths + } + $ip = get_include_path(); + if (PHPDOCUMENTOR_WINDOWS) + { + $ip = explode(';', $ip); + } else { + $ip = explode(':', $ip); + } + foreach($ip as $path) + { + if ($a = realpath($path . DIRECTORY_SEPARATOR . $filename)) + { + if (is_readable($a)) + { + return true; + } + } + } + return false; + } + + /** + * Parses $_SERVER['argv'] and creates a setup array + * @return array a setup array + * @global array command-line arguments + * @todo replace with Console_* ? + */ + function parseArgv() + { + global $argv; + + // defaults for setting + $setting['hidden'] = "off"; + $setting['ignoresymlinks'] = 'off'; + $setting['template'] = 'templates' . PATH_DELIMITER .'default' . PATH_DELIMITER; + + $valnext = "junk"; + $data = array(); + if(isset($argv) && is_array($argv)) + { + foreach ($argv as $cmd) + { + if ($cmd == '--') { + continue; + } + if ($cmd == '-h' || $cmd == '--help') + { + echo $this->displayHelpMsg(); + die(); + } + + // at first, set the arg value as if we + // already know it's formatted normally, e.g. + // -q on + $setting[$valnext] = $cmd; + + if (isset($data['type']) && $data['type'] == 'set') { + + if ($valnext !== 'junk' && strpos(trim($cmd),'-') === 0) { + // if valnext isn't 'junk' (i.e it was an arg option) + // then the first arg needs an implicit "" as its value, e.g. + // ... -q -pp ... ===> ... -q '' -pp ... + $setting[$valnext] = ''; + + } else if (!in_array(strtolower($cmd), $data['validvalues'], true)) { + // the arg value is not a valid value + addErrorDie(PDERROR_INVALID_VALUES, $valnext, $cmd, + '(' . implode(', ', $data['validvalues']) . ')'); + } + } + + foreach( $this->phpDocOptions as $name => $data ) + { + if (!empty($data['tag'])) + { + if (in_array($cmd,$data['tag'])) + { + $valnext = $name; + break; + } + else + { + $valnext = "junk"; + } + } + } + + if ($valnext == 'junk' && (strpos(trim($cmd),'-') === 0)) { + // this indicates the last arg of the command + // is an arg option (-) that was preceded by unrecognized "junk" + addErrorDie(PDERROR_UNKNOWN_COMMANDLINE,$cmd); + + } else if ($valnext != 'junk' && (strpos(trim($cmd),'-') === 0)) { + // this indicates the last arg of the command + // is an arg option (-) without an arg value + + // add an empty arg "value" for this arg "option" + $setting[$valnext] = ''; + } + + + } + } else + { + echo "Please use php-cli.exe in windows, or set register_argc_argv On"; + die; + } + /* $setting will always have at least 3 elements + [hidden] => off + [ignoresymlinks] => 'off' + [template] => templates/default + */ + if (count($setting) < 4) { + echo $this->displayhelpMsg(); + die(); + } + + return $setting; + } + + + /** + * @return array list of files in a directory + * @param string $directory full path to the directory you want the list of + * @param bool whether to list files that begin with . like .bash_history + * @param bool whether to ignore symlinks + */ + function dirList($orig_directory, $hidden = false, $ignore_symlinks = false) + { + $directory = realpath($orig_directory); + $ret = false; + if (! @is_dir($directory)) + { + die("directory: '$directory' not found\n"); + } + $ret = array(); + $d = @dir($directory); // thanks to Jason E Sweat (jsweat@users.sourceforge.net) for fix + while($d && ($entry=$d->read()) !== false) { + if (strcmp($entry,".") == 0 || strcmp($entry,"..") == 0) { + continue; + } + + // skip hidden files, if we're supposed to + if (!$hidden) + { + if (substr($entry,0,1) == ".") + { + phpDocumentor_out("Hidden " . $directory . PATH_DELIMITER . $entry . " Ignored\n"); + continue; + } + } + + // skip symlink files, if we're supposed to + if ($ignore_symlinks) + { + if (is_link($directory . PATH_DELIMITER . $entry)) + { + phpDocumentor_out("Symlink " . $directory . PATH_DELIMITER . $entry . " Ignored\n"); + continue; + } + } + + if (is_file($directory . PATH_DELIMITER . $entry)) { + $ret[] = $directory . PATH_DELIMITER . $entry; + } + if (is_dir($directory . PATH_DELIMITER . $entry)) { + $tmp = $this->dirList($directory . PATH_DELIMITER . $entry, $hidden, $ignore_symlinks); + if (is_array($tmp)) { + foreach($tmp as $ent) { + $ret[] = $ent; + } + } + } + } + if ($d) $d->close(); + return $ret; + } + + /** + * Retrieve common directory (case-insensitive in windows) + * + * takes the list of files, and returns the subdirectory they share in common, + * so in this list: + * + * <code> + * array( + * "/dir1/dir2/subdir/dir3/filename.ext", + * "/dir1/dir2/subdir/dir4/filename.ext", + * "/dir1/dir2/mydir/dir5/filename.ext"); + * </code> + * + * getBase will return "/dir1/dir2" + * @param array array of strings + */ + function getBase($filelist) + { + $masterPath = false; + foreach($filelist as $path) + { + if (!$masterPath) + { + $masterPath = str_replace('\\','/',dirname($path)); + } else + { + if (dirname($path) != $masterPath) + { + $mp = explode(PATH_DELIMITER, $masterPath); + $np = explode(PATH_DELIMITER, str_replace('\\', '/', dirname($path))); + if (count($np) < count($mp)) + { + $masterPath = join($np, PATH_DELIMITER); + } else + { + $test = false; + $found = false; + for($i=0;$i < count($mp) && $i < count($np);$i++) + { + if (PHPDOCUMENTOR_WINDOWS) + { + if (strtolower($mp[$i]) != strtolower($np[$i])) $found = $i; + } else + { + if ($mp[$i] != $np[$i]) $found = $i; + } + } + if ($found !== false) + { + $mp = array_slice($mp,0,$found); + $masterPath = join($mp,PATH_DELIMITER); + } + } + } + } + } + return $masterPath; + } + + /** + * Retrieve tutorial subdirectories and their contents from the list of + * files to parse + * @param array array of paths (strings) + * @return array array(filelist - tutorials, tutorials) + */ + function getTutorials($filelist) + { + $list = $tutorials = array(); + foreach($filelist as $file) + { + if (strpos($file,'tutorials/') !== false) + { + $tutedir = explode('/',substr($file,strpos($file,'tutorials/'))); + array_shift($tutedir); + if (count($tutedir) <= 3) + { + $res = array(); + // kludge - will need to fix for 2.0 + $res['category'] = $GLOBALS['phpDocumentor_DefaultCategoryName']; + $res['package'] = array_shift($tutedir); + $res['subpackage'] = ''; + if (count($tutedir) > 1) + $res['subpackage'] = array_shift($tutedir); + $f = array_shift($tutedir); + $res['tutename'] = $f; + $f = explode('.',$f); + $res['tutetype'] = array_pop($f); + if ($res['tutetype'] == 'ini') continue; + $res['path'] = $file; + if (@file_exists($file . '.ini')) + { + $res['ini'] = phpDocumentor_parse_ini_file($file . '.ini', true); + } else + { + $res['ini'] = false; + } + $tutorials[] = $res; + } + } else $list[] = $file; + } + return array($list,$tutorials); + } + + /** + * @param string base directory from {@link getBase()} + * @param array file list from {@link dirList()} + * @return array array(filelist - README/INSTALL/CHANGELOG, + * README/INSTALL/CHANGELOG) + */ + function getReadmeInstallChangelog($base,$filelist) + { + $list = $ric = array(); + $names = $GLOBALS['_phpDocumentor_RIC_files']; + foreach($filelist as $file) + { + if ((dirname($file) == $base) && in_array(strtoupper(basename($file)), $names)) + { // be sure to change $this->checkIgnore() if any other files are added here!! + $ric[] = $file; + } else + { + $list[] = $file; + } + } + return array($list,$ric); + } + + /** + * @param string directory + * @param string base directory + * @param array array of ignored items + * @param boolean the "hidden" flag + * @param boolean the "ignoresymlinks" flag + * @uses dirList + * @uses checkIgnore + * @uses setup_dirs + */ + function getDirTree($dir, $base_dir, $ignore = array(), $hidden = false, $ignoresymlinks = false) + { + $allfiles = $this->dirList($dir,$hidden,$ignoresymlinks); + $struc = array(); + foreach($allfiles as $file) + { + if ($this->checkIgnore(basename($file),dirname(realpath($file)),$ignore,$ignoresymlinks)) continue; + if (PHPDOCUMENTOR_WINDOWS) { + $path = substr(dirname($file),strlen(str_replace('\\','/',realpath($base_dir)))); + } else { + $path = substr(dirname($file),strlen(str_replace('\\','/',realpath($base_dir)))+1); + } + if (!$path) $path = '/'; + $parts = pathinfo($file); + if (!isset($parts['extension'])) + { + $parts['extension'] = ''; + } + $struc[$path][] = array( + 'file' => $parts['basename'], + 'ext' => $parts['extension'], + 'path' => $file); + } + uksort($struc,'strnatcasecmp'); + foreach($struc as $key => $ind) + { + usort($ind,'Ioinc_sortfiles'); + $struc[$key] = $ind; + $save = $key; + if ($key != '/') + { + $key = explode('/',$key); + while (count($key)) + { + array_pop($key); + if (isset($struc[join('/',$key)])) + { + $struc[join('/',$key)][substr($save,strlen(join('/',$key)) + 1)] = $ind; + unset($struc[$save]); + } + } + } + } + foreach($struc as $key => $ind) + { + if ($key != '/') + { + if (count(explode('/',$key)) == 1) + { + $struc['/'][$key] = $struc[$key]; + unset($struc[$key]); + } + } + } + $tempstruc = $struc; + unset($tempstruc['/']); + $leftover_dirs = array_keys($tempstruc); + $splitdirs = array(); + foreach($leftover_dirs as $dir) + { + $splitdirs[] = explode('/',$dir); + } + $leftover_dirs = array(); + + foreach($splitdirs as $dir) + { + $save = join($dir,'/'); + $struc['/'] = setup_dirs($struc['/'], $dir, $tempstruc[$save]); + unset($struc[$save]); + } + @uksort($struc['/'],'Ioinc_mystrucsort'); + return $struc; + } + + /** + * Reads a file and returns it as a string + * Does basic error checking + * + * file extensions are set in {@link phpdoc.inc} + * + * @global array PHP File extensions, used to validate that $path is a PHP File + * @global array PHP File extensions in a CVS repository, used to validate that $path is a PHP File + * @param string $path + */ + function readPhpFile($path, $quietMode = false) + { + global $_phpDocumentor_cvsphpfile_exts, $_phpDocumentor_phpfile_exts; + // tiberiusblue addition + $cvsExt = $_phpDocumentor_cvsphpfile_exts; + $ext = $_phpDocumentor_phpfile_exts; + if (file_exists($path)) + { + if (is_file($path)) + { + // check extension + $tmp = explode(".",$path); + // tiberiusblue addition + $tmp2 = $tmp; + if (in_array(array_pop($tmp),$ext)) + { + phpDocumentor_out(" -- Parsing file\n"); + flush(); + if (function_exists('file_get_contents')) { + return file_get_contents($path); + } + $fp = fopen($path,"r"); + $ret = fread($fp,filesize($path)); + fclose($fp); + return $ret; + } elseif (in_array(array_pop($tmp2),$cvsExt)) + { + phpDocumentor_out(" CVS file [EXPERIMENTAL]\n"); + flush(); + if (function_exists('file_get_contents')) { + $ret = file_get_contents($path); + } else { + $fp = fopen($path,"r"); + $ret = fread($fp,filesize($path)); + fclose($fp); + } + $ret = strstr($ret,"<?"); + $ret = substr($ret,0,strpos($ret,"@\n")); + $ret = str_replace("@@","@",$ret); + return $ret; + } else + { + phpDocumentor_out(" -- File not parsed, not a php file\n"); + flush(); + } + } else { + phpDocumentor_out(" -- Unable to read file, not a file\n"); + flush(); + } + } else { + phpDocumentor_out(" -- Unable to read file, file does not exist\n"); + flush(); + } + } + + /** + * Tell whether to ignore a file or a directory + * allows * and ? wildcards + * + * @author Greg Beaver <cellog@php.net> + * @param string $file just the file name of the file or directory, + * in the case of directories this is the last dir + * @param string $path the path to consider (should be checked by + * realpath() before, and may be relative) + * @param array $ignore + * @param bool + * @param bool Ignore symlinks? + * @return bool true if $path should be ignored, false if it should not + */ + function checkIgnore($file,$path,$ignore,$ignore_no_ext = true,$ignoresymlinks = false) + { + global $_phpDocumentor_RIC_files; + + if ($ignoresymlinks && is_link($path . PATH_DELIMITER . $file)) return false; + + if (!count($ignore)) return false; + + if (!isset($this->ignore)) + { + $this->_setupIgnore($ignore); + } + if (!$this->ignore) + { + return false; + } + + if ($ignore_no_ext && + !in_array(strtoupper($file), $_phpDocumentor_RIC_files)) + { + if (!is_numeric(strpos($file,'.'))) return true; + } + if (is_array($this->ignore)) + { + foreach($this->ignore as $match) + { + // match is an array if the ignore parameter was a /path/to/pattern + if (is_array($match)) + { + // check to see if the path matches with a path delimiter appended + preg_match('/^' . strtoupper($match[0]).'$/', strtoupper($path) . PATH_DELIMITER,$find); + if (!count($find)) + { + // check to see if it matches without an appended path delimiter + preg_match('/^' . strtoupper($match[0]).'$/', strtoupper($path), $find); + } + if (count($find)) + { + // check to see if the file matches the file portion of the regex string + preg_match('/^' . strtoupper($match[1]).'$/', strtoupper($file), $find); + if (count($find)) + { + return true; + } + } + // check to see if the full path matches the regex + preg_match('/^' . strtoupper($match[0]).'$/', + strtoupper($path . DIRECTORY_SEPARATOR . $file), $find); + if (count($find)) + { + return true; + } + } else + { + // ignore parameter was just a pattern with no path delimiters + // check it against the path + preg_match('/^' . strtoupper($match).'$/', strtoupper($path), $find); + if (count($find)) + { + return true; + } + // check it against the file only + preg_match('/^' . strtoupper($match).'$/', strtoupper($file), $find); + if (count($find)) + { + return true; + } + } + } + } + return false; + } + + /** + * Construct the {@link $ignore} array + * @author Greg Beaver <cellog@php.net> + * @param array strings of files/paths/wildcards to ignore + * @access protected + */ + function _setupIgnore($ignore) + { + $ig = array(); + if ( ! is_array($ignore)) + { + $this->ignore = false; + return; + } + for($i=0; $i<count($ignore);$i++) + { + if (empty($ignore[$i])) + continue; + + $ignore[$i] = strtr($ignore[$i], '\\', '/'); + $ignore[$i] = str_replace('//','/',$ignore[$i]); + + if (!is_numeric(strpos($ignore[$i],PATH_DELIMITER))) + { + $ig[] = $this->getRegExpableSearchString($ignore[$i]); + } else + { + if (basename($ignore[$i]) . PATH_DELIMITER == $ignore[$i]) + $ig[] = $this->getRegExpableSearchString($ignore[$i]); + else + $ig[] = array($this->getRegExpableSearchString($ignore[$i]),$this->getRegExpableSearchString(basename($ignore[$i]))); + } + } + if (count($ig)) $this->ignore = $ig; + } + + /** + * Converts $s into a string that can be used with preg_match + * @param string $s string with wildcards ? and * + * @author Greg Beaver <cellog@php.net> + * @return string converts * to .*, ? to ., etc. + */ + function getRegExpableSearchString($s) + { + $y = '\/'; + if (DIRECTORY_SEPARATOR == '\\') + { + $y = '\\\\'; + } + $s = str_replace('/', DIRECTORY_SEPARATOR, $s); + $x = strtr($s, array('?' => '.','*' => '.*','.' => '\\.','\\' => '\\\\','/' => '\\/', + '[' => '\\[',']' => '\\]','-' => '\\-')); + if (strpos($s, DIRECTORY_SEPARATOR) !== false && + strrpos($s, DIRECTORY_SEPARATOR) === strlen($s) - 1) + { + $x = "(?:.*$y$x?.*|$x.*)"; + } + return $x; + } + + /** + * Removes files from the $dir array that do not match the search string in + * $match + * @param array $dir array of filenames (full path) + * @param string $match search string with wildcards + * @author Greg Beaver <cellog@php.net> + * @return string|array listing of every file in a directory that matches + * the search string + */ + function removeNonMatches($dir, $match) + { + $match = $this->getRegExpableSearchString($match); + $nodir = false; + if (!is_array($dir)) + { + $dir = array($dir); + $nodir = true; + } + foreach($dir as $i => $file) + { + preg_match('/^'.$match.'$/',basename($file),$find); + if (!count($find)) unset($dir[$i]); + } + if ($nodir) return $dir[0]; + return $dir; + } + + /** + * Take a filename with wildcards and return all files that match the + * wildcards + * @param string $file a full path from the -f command-line parameter, with + * potential * and ? wildcards. + * @return mixed if $file contains wildcards, returns an array of matching + * files, otherwise returns false + * @author Greg Beaver <cellog@php.net> + * @uses dirList + * @uses removeNonMatches + */ + function getAllFiles($file) + { + $path = realpath(dirname($file)); + $file = basename($file); + // any wildcards? + if (is_numeric(strpos($file,'?')) || is_numeric(strpos($file,'*'))) + { + $files = $this->dirList($path); + $a = $this->removeNonMatches($files,$file); + return $a; + } + return false; + } +} + +/**#@+ + * Sorting functions for the file list + * @param string + * @param string + */ +function Ioinc_sortfiles($a, $b) +{ + return strnatcasecmp($a['file'],$b['file']); +} + +function Ioinc_mystrucsort($a, $b) +{ + if (is_numeric($a) && is_string($b)) return 1; + if (is_numeric($b) && is_string($a)) return -1; + if (is_numeric($a) && is_numeric($b)) + { + if ($a > $b) return 1; + if ($a < $b) return -1; + if ($a == $b) return 0; + } + return strnatcasecmp($a,$b); +} +/**#@-*/ + +/** + * Recursively add all the subdirectories of $contents to $dir without erasing anything in + * $dir + * @param array + * @param array + * @return array processed $dir + */ +function set_dir($dir,$contents) +{ + while(list($one,$two) = each($contents)) + { + if (isset($dir[$one])) + { + $dir[$one] = set_dir($dir[$one],$contents[$one]); + } else $dir[$one] = $two; + } + return $dir; +} + +/** + * Recursively move contents of $struc into associative array + * + * The contents of $struc have many indexes like 'dir/subdir/subdir2'. + * This function converts them to + * array('dir' => array('subdir' => array('subdir2'))) + * @param array struc is array('dir' => array of files in dir,'dir/subdir' => array of files in dir/subdir,...) + * @param array array form of 'dir/subdir/subdir2' array('dir','subdir','subdir2') + * @return array same as struc but with array('dir' => array(file1,file2,'subdir' => array(file1,...))) + */ +function setup_dirs($struc,$dir,$contents) +{ + if (!count($dir)) + { + foreach($contents as $dir => $files) + { + if (is_string($dir)) + { + if (strpos($dir,'/')) + { + $test = true; + $a = $contents[$dir]; + unset($contents[$dir]); + $b = explode('/',$dir); + $c = array_shift($b); + if (isset($contents[$c])) + { + $contents[$c] = set_dir($contents[$c],setup_dirs(array(),$b,$a)); + } else $contents[$c] = setup_dirs(array(),$b,$a); + } + } + } + return $contents; + } + $me = array_shift($dir); + if (!isset($struc[$me])) $struc[$me] = array(); + $struc[$me] = setup_dirs($struc[$me],$dir,$contents); + return $struc; +} + +if (!function_exists('get_include_path')) { +function get_include_path() +{ + return ini_get('include_path'); +} +} +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/LinkClasses.inc b/buildscripts/PhpDocumentor/phpDocumentor/LinkClasses.inc new file mode 100755 index 00000000..ceeca4ad --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/LinkClasses.inc @@ -0,0 +1,361 @@ +<?php +/** + * Linking to element documentation is performed by the classes in this file. + * + * abstractLink descendants contain enough information to differentiate every + * documentable element, and so can be converted to a link string by + * {@link Converter::returnSee()} + * + * phpDocumentor :: automatic documentation generator + * + * PHP versions 4 and 5 + * + * Copyright (c) 2002-2008 Gregory Beaver + * + * LICENSE: + * + * This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General + * Public License as published by the Free Software Foundation; + * either version 2.1 of the License, or (at your option) any + * later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage Links + * @author Gregory Beaver <cellog@php.net> + * @copyright 2002-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version CVS: $Id: LinkClasses.inc 253641 2008-02-24 02:35:44Z ashnazg $ + * @filesource + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @since 1.2.0 + * @todo CS cleanup - change package to PhpDocumentor + */ + +/** + * linking classes parent + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage Links + * @author Gregory Beaver <cellog@php.net> + * @copyright 2002-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - change classname to PhpDocumentor_* + */ +class abstractLink +{ + /**#@+ + * @var string + */ + var $path; + /** + * phpdoc alias _phpdoc_inc for phpdoc.inc + */ + var $fileAlias = ''; + /** + * element type linked to. + * can only be a documentable element + */ + var $type = ''; + var $name = ''; + var $category = ''; + var $package = ''; + var $subpackage = ''; + /**#@-*/ + + /** + * sets up the link + * + * @param string $path full path to file containing element + * @param string $fileAlias page name, as configured by {@link Parser::parse} + * @param string $name element name + * @param string $package package element is in + * @param string $subpackage subpackage element is in + * @param string $category optional category that documentation is in + * + * @return void + */ + function addLink($path, $fileAlias, $name, $package, $subpackage, + $category = false) + { + $this->path = $path; + $this->fileAlias = $fileAlias; + $this->name = $name; + $this->category = $category; + $this->package = $package; + $this->subpackage = $subpackage; + } +} + +/** + * procedural page link + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage Links + * @author Gregory Beaver <cellog@php.net> + * @copyright 2002-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - change classname to PhpDocumentor_* + */ +class pageLink extends abstractLink +{ + /** + * @var string + */ + var $type = 'page'; +} + +/** + * function link + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage Links + * @author Gregory Beaver <cellog@php.net> + * @copyright 2002-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - change classname to PhpDocumentor_* + */ +class functionLink extends abstractLink +{ + /** + * @var string + */ + var $type = 'function'; +} + +/** + * define link + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage Links + * @author Gregory Beaver <cellog@php.net> + * @copyright 2002-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - change classname to PhpDocumentor_* + */ +class defineLink extends abstractLink +{ + /** + * @var string + */ + var $type = 'define'; +} + +/** + * global variable link + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage Links + * @author Gregory Beaver <cellog@php.net> + * @copyright 2002-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - change classname to PhpDocumentor_* + */ +class globalLink extends abstractLink +{ + /** + * @var string + */ + var $type = 'global'; +} + +/** + * class link + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage Links + * @author Gregory Beaver <cellog@php.net> + * @copyright 2002-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - change classname to PhpDocumentor_* + */ +class classLink extends abstractLink +{ + /** + * @var string + */ + var $type = 'class'; +} + +/** + * method link + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage Links + * @author Gregory Beaver <cellog@php.net> + * @copyright 2002-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - change classname to PhpDocumentor_* + */ +class methodLink extends abstractLink +{ + /** + * @var string + */ + var $type = 'method'; + /** + * @var string + */ + var $class = ''; + + /** + * sets up the link + * + * @param string $class class name + * @param string $path full path to file containing element + * @param string $fileAlias page name, as configured by {@link Parser::parse} + * @param string $name element name + * @param string $package package element is in + * @param string $subpackage subpackage element is in + * @param string $category optional category that documentation is in + * + * @return void + */ + function addLink($class, $path , $fileAlias, $name, $package, $subpackage, + $category = false) + { + $this->class = $class; + abstractLink::addLink($path, $fileAlias, $name, $package, $subpackage, + $category); + } +} + +/** + * class variable link + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage Links + * @author Gregory Beaver <cellog@php.net> + * @copyright 2002-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - change classname to PhpDocumentor_* + */ +class varLink extends methodLink +{ + /** + * @var string + */ + var $type = 'var'; +} + +/** + * class constant link + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage Links + * @author Gregory Beaver <cellog@php.net> + * @copyright 2002-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - change classname to PhpDocumentor_* + */ +class constLink extends methodLink +{ + /** + * @var string + */ + var $type = 'const'; +} + +/** + * tutorial link + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage Links + * @author Gregory Beaver <cellog@php.net> + * @copyright 2002-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - change classname to PhpDocumentor_* + */ +class tutorialLink extends abstractLink +{ + /**#@+ + * @var string + */ + var $type = 'tutorial'; + var $section = ''; + var $title = false; + /**#@-*/ + + /** + * sets up the link + * + * @param string $section section/subsection name + * @param string $path full path to file containing element + * @param string $name page name, as configured by {@link Parser::parse} + * @param string $package package element is in + * @param string $subpackage subpackage element is in + * @param string $title title of tutorial + * @param string $category optional category that documentation is in + * + * @return void + */ + function addLink($section, $path, $name, $package, $subpackage, $title = false, + $category = false) + { + $this->section = $section; + $this->title = $title; + parent::addLink($path, '', $name, $package, $subpackage, $category); + } +} +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/PackagePageElements.inc b/buildscripts/PhpDocumentor/phpDocumentor/PackagePageElements.inc new file mode 100755 index 00000000..24e991ee --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/PackagePageElements.inc @@ -0,0 +1,513 @@ +<?php +/** + * Data structures used in parsing XML DocBook-based tutorials + * + * Conversion of DocBook-based tutorials is performed using special + * {@link Converter} class methods. By default, these methods simply retrieve + * simple rules for replacement of tags and slight re-ordering from the + * options.ini file present for every template. + * + * In future versions, there may be utilization of xslt or other more powerful + * protocols. However, for most situations, the power of these classes will + * be more than sufficient to handle very complex documentation. + * + * Note that an entire tutorial is contained in a single parserXMLDocBookTag, + * matching the document model for DocBook. The top-level tag, <refentry>, + * contains every other tag and all text. + * + * phpDocumentor :: automatic documentation generator + * + * PHP versions 4 and 5 + * + * Copyright (c) 2002-2008 Gregory Beaver + * + * LICENSE: + * + * This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General + * Public License as published by the Free Software Foundation; + * either version 2.1 of the License, or (at your option) any + * later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage Tutorial + * @author Gregory Beaver <cellog@php.net> + * @copyright 2002-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version CVS: $Id: PackagePageElements.inc 253643 2008-02-24 04:27:54Z ashnazg $ + * @tutorial tutorials.pkg + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @since 1.2.0 + * @todo CS cleanup - change package to PhpDocumentor + */ +/** + * Represents <![CDATA[ ]]> sections. + * + * These sections are interpreted as plain text + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage Tutorial + * @author Gregory Beaver <cellog@php.net> + * @copyright 2002-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @tutorial tutorials.pkg + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - change classname to PhpDocumentor_* + */ +class parserCData extends parserStringWithInlineTags +{ + /** + * calls the output conversion + * + * @param Converter &$c the output converter + * @param bool $postprocess if postprocessing is needed + * + * @return string + * @uses Converter::getCData() convert contents to text + * @todo CS cleanup - rename to convert for camelCase rule + */ + function Convert(&$c, $postprocess = true) + { + $val = $this->value; + if ($postprocess) { + foreach ($this->value as $key => $value) { + if (is_string($value)) { + $this->value[$key] = $c->getCData($value); + } + } + } + $this->cache = false; + $x = parent::Convert($c, false); + $this->value = $val; + return $x; + } +} +/** + * a standard XML DocBook Tag + * + * This class is designed to represent all DocBook tags. It is intelligent + * enough to understand the <title> tag, and also the <refname> tag for + * as title for <refentry> + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage Tutorial + * @author Gregory Beaver <cellog@php.net> + * @copyright 2002-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @tutorial tutorials.pkg + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @since 1.2 + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - change classname to PhpDocumentor_* + * @todo CS cleanup - rename to parserXmlDocBookTag for camelCase rule + */ +class parserXMLDocBookTag extends parserStringWithInlineTags +{ + /** + * Attributes from the XML tag + * + * Format: array(attrname => attrvalue, attrname => attrvalue,...) + * @var array + */ + var $attributes = array(); + /** + * Name of the tag + * @var string + */ + var $name; + /**#@+ + * @access private + */ + /** + * @var parserCData + */ + var $_cdata; + /** + * @var parserTag + */ + var $_title; + /** + * @var parserIdLineTag + */ + var $_id; + /** + * Set to <refpurpose> in <refsynopsisdiv> + * @var parserTag + */ + var $_description; + /**#@-*/ + + /** + * sets up the tag + * + * @param string $name tag name + * + * @todo CS cleanup - rename to parserXmlDocBookTag for camelCase rule + */ + function parserXMLDocBookTag($name) + { + $this->name = $name; + } + + /** + * calls the output conversion + * + * @param Converter &$c the output converter + * @param bool $postprocess if postprocessing is needed + * + * @return string + * @uses Converter::TranslateTag() Calls this to enclose the contents of the + * DocBook tag based on the values in template options.ini file + */ + function Convert(&$c, $postprocess = true) + { + $value = parent::Convert($c, $postprocess); + $simvalue = parent::Convert($c, false); + foreach ($this->attributes as $a => $v) { + $this->attributes[$a] = (is_string($v) ? $v : + $v->Convert($c, $postprocess)); + } + if (isset($this->_title)) { + list($this->attributes,$value) = $c->ConvertTitle($this->name, + $this->attributes, $this->_title->Convert($c, $postprocess), $value); + } + return $c->TranslateTag($this->name, $this->attributes, $value, $simvalue); + } + + /** + * Begin a new CData section + * + * @return void + * @see addCData() + */ + function startCData() + { + $this->_cdata = new parserCData; + } + + /** + * Adds {@link $_cdata} to {@link $value} + * + * @return void + */ + function endCData() + { + $this->value[] = $this->_cdata; + unset($this->_cdata); + } + + /** + * Retrieve either the table of contents index, + * or the location that the TOC will go + * + * @param false|integer $state either an index of the {@}toc} tag in $this->value + * or false, if the next index value of $this->value + * is needed + * + * @return int + * @see setTOC() + */ + function getTOC($state = false) + { + if ($state !== false) { + return $this->value[$state]; + } + return count($this->value); + } + + /** + * sets the TOC value + * + * @param integer $state index of the TOC in $this->value + * @param parserTocInlineTag $val tag value + * + * @return void + */ + function setTOC($state, $val) + { + $this->value[$state] = $val; + } + + /** + * add a word to CData + * + * @param string $word word to add + * + * @return void + */ + function addCData($word) + { + $this->_cdata->add($word); + } + + /** + * Add an xml tag attribute name="value" pair + * + * if the attribute is id, value must be a {@link parserIdInlineTag} + * + * @param string $name attribute name + * @param string|parserIdInlineTag $value value of attribute + * + * @return void + */ + function addAttribute($name, $value) + { + $this->attributes[$name] = $value; + if ($name == 'id') { + // fix 1153593 + if (is_string($value)) { + addWarning(PDERROR_ID_MUST_BE_INLINE, $this->name, $value, + $this->name, $value); + } else { + $this->setId($value); + } + } + } + + /** + * Set the title of a DocBook tag section. + * + * For most DocBook tags, the title is represented with a <title></title> + * tag pair. The <refentry> top-level tag is a little different. Instead + * of using <title></title>, phpDocumentor uses the contents of the + * <refname> tag in the <refnamediv> tag + * + * @param parserXMLDocBookTag $title the title element + * + * @return void + */ + function setTitle($title) + { + $this->_title = $title; + } + + /** + * If the id attribute is present, this method will set its id + * + * @param parserIdInlineTag $id the id value + * + * @return void + */ + function setId($id) + { + $this->_id = $id; + } + + /** + * Return converter-specific formatting of ID. + * + * Passes $c to {@link parserIdInlineTag::Convert()} + * + * @param Converter &$c the output converter + * + * @return string + */ + function getId(&$c) + { + if ($this->_id) { + return trim($this->_id->Convert($c)); + } + } + + /** + * Determine whether the docbook element has a title + * + * @return boolean + */ + function hasTitle() + { + return isset($this->_title); + } + + /** + * Retrieve Converter-specific formatting of the title of this element + * + * @param Converter &$c the output converter + * + * @return string + */ + function getTitle(&$c) + { + if ($this->name == 'refentry') { + foreach ($this->value as $tag) { + if (is_object($tag) && $tag->name == 'refnamediv') { + return $tag->getTitle($c); + } + } + } + if ($this->name == 'refnamediv') { + foreach ($this->value as $tag) { + if (is_object($tag) && is_a($tag, 'parserXMLDocBookTag') + && $tag->name == 'refname') { + $t = new parserStringWithInlineTags; + foreach ($tag->value as $val) { + $t->add($val); + } + $this->_title = $t; + } + if (is_object($tag) && is_a($tag, 'parserXMLDocBookTag') + && $tag->name == 'refpurpose') { + $t = new parserStringWithInlineTags; + foreach ($tag->value as $val) { + $t->add($val); + } + $this->_description = $t; + } + } + } + if (isset($this->_title)) { + return $this->_title->Convert($c); + } + if (is_object($this->value[0]) && is_a($tag, 'parserXMLDocBookTag')) { + return $this->value[0]->getTitle($c); + } + if (isset($this->value[1])) { + if (is_object($this->value[1]) && is_a($tag, 'parserXMLDocBookTag')) { + return $this->value[1]->getTitle($c); + } + } + return ''; + } + + /** + * Retrieve the contents of a subsection + * + * This method uses the $_id members of nested docbook tags to retrieve + * the section defined by $subsection + * + * @param Converter &$c the output converter + * @param string $subsection converter-specific subsection + * + * @return bool|string + */ + function getSubsection(&$c, $subsection) + { + if (!is_object($this->_id)) { + return false; + } + $search = phpDocumentor_clone($this->_id); + if (is_string($this->_id)) { + return false; + } + if (phpDocumentor_get_class($search) != 'parseridinlinetag') { + return false; + } + $search->id = $subsection; + foreach ($this->value as $el) { + if (phpDocumentor_get_class($el) == 'parserxmldocbooktag') { + if ($el->getId($c) == $search->Convert($c)) { + return $el; + } elseif ($a = $el->getSubsection($c, $subsection)) { + return $a; + } + } + } + return false; + } + + /** + * Add contents to this tag. + * + * There are four kinds of data in a DocBook tutorial: + * 1. <b>tags</b> - normal tags like <refentry> + * 2. <b>entities</b> - normal entities like ” + * 3. <b><![CDATA[</b> - character data that should not be interpreted, + * like <programlisting> contents + * 4. <b>text</b> - normal non-markup text + * + * All four kinds of data are added here + * + * @param parserEntity|parserCData|parserXMLDocBookTag|string $el nested tag, + * entity, or text + * + * @return mixed + */ + function add($el) + { + if (is_string($el)) { + return parent::add($el); + } + if (phpDocumentor_get_class($el) == 'parserxmldocbooktag') { + if ($el->name == 'title') { + $this->setTitle($el); + } else { + return parent::add($el); + } + } else { + return parent::add($el); + } + } +} + +/** + * a standard entity like ” + * + * This class is designed to represent all DocBook entities. + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage Tutorial + * @author Gregory Beaver <cellog@php.net> + * @copyright 2002-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @tutorial tutorials.pkg + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @since 1.2 + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - change classname to PhpDocumentor_* + */ +class parserEntity +{ + /** + * sets up the entity + * + * @param string $name entity name + */ + function parserEntity($name) + { + $this->value = $name; + } + + /** + * calls the output conversion + * + * @param Converter &$c the output converter + * @param bool $postprocess if postprocessing is needed + * + * @return string + * @uses Converter::TranslateEntity() convert contents to text + * @todo CS cleanup - rename to convert for camelCase rule + */ + function Convert(&$c, $postprocess = true) + { + if ($postprocess) { + return $c->TranslateEntity($this->value); + } else { + $trans_tbl = get_html_translation_table(HTML_ENTITIES); + $trans_tbl = array_flip($trans_tbl); + $ret = strtr('&'.$this->value.';', $trans_tbl); + return $ret; + } + } +} +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Parser.inc b/buildscripts/PhpDocumentor/phpDocumentor/Parser.inc new file mode 100755 index 00000000..99fdd57a --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Parser.inc @@ -0,0 +1,3252 @@ +<?php +/** + * Base parser for all parsers + * + * phpDocumentor :: automatic documentation generator + * + * PHP versions 4 and 5 + * + * Copyright (c) 2000-2006 Joshua Eichorn, Gregory Beaver + * + * LICENSE: + * + * This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General + * Public License as published by the Free Software Foundation; + * either version 2.1 of the License, or (at your option) any + * later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package phpDocumentor + * @subpackage Parsers + * @author Joshua Eichorn <jeichorn@phpdoc.org> + * @author Gregory Beaver <cellog@php.net> + * @copyright 2000-2006 Joshua Eichorn, Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version CVS: $Id: Parser.inc 238276 2007-06-22 14:58:30Z ashnazg $ + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @since 0.1 + */ +/** used when a backslash is encountered in parsing a string or other escapable entity */ +define("PARSER_EVENT_ESCAPE" , 900); +/** used when a backslash is encountered in parsing a string or other escapable entity */ +define("STATE_ESCAPE" , 1000); + +/** Class published to IntermediateParser with this event */ +define("PHPDOCUMENTOR_EVENT_CLASS" , 800); +/** DocBlock published to IntermediateParser with this event */ +define("PHPDOCUMENTOR_EVENT_DOCBLOCK" , 801); +/** Function published to IntermediateParser with this event */ +define("PHPDOCUMENTOR_EVENT_FUNCTION" , 802); +/** Class Variable published to IntermediateParser with this event */ +define("PHPDOCUMENTOR_EVENT_VAR" , 803); +/** New File (page) published to IntermediateParser with this event */ +define("PHPDOCUMENTOR_EVENT_PAGE" , 804); +/** Constant (define) published to IntermediateParser with this event */ +define("PHPDOCUMENTOR_EVENT_DEFINE" , 805); +/** Class Constant published to IntermediateParser with this event */ +define("PHPDOCUMENTOR_EVENT_CONST" , 806); +/** @deprecated */ +define("PHPDOCUMENTOR_EVENT_MESSAGE" , 807); +/** use to inform IntermediateParser of a new element being parsed */ +define("PHPDOCUMENTOR_EVENT_NEWSTATE" , 808); +/** + * used to inform phpDocumentor_IntermediateParser that the current file has been completely parsed. + * Render then flushes all buffers for functions/classes/defines/includes on the current page + * @see phpDocumentor_IntermediateParser::HandleEvent() + */ +define("PHPDOCUMENTOR_EVENT_END_PAGE" , 808); +/** Package-level page published to IntermediateParser with this event */ +define("PHPDOCUMENTOR_EVENT_PACKAGEPAGE" , 809); +/** Include (include/require/include_once/include_once) published to IntermediateParser with this event */ +define("PHPDOCUMENTOR_EVENT_INCLUDE" , 810); +/** Tutorial published to IntermediateParser with this event */ +define("PHPDOCUMENTOR_EVENT_TUTORIAL" , 811); +/** Contents of README/INSTALL/CHANGELOG files published to IntermediateParser with this event */ +define("PHPDOCUMENTOR_EVENT_README_INSTALL_CHANGELOG" , 812); + +/** use to inform ErrorTracker of a new file being parsed */ +define("PHPDOCUMENTOR_EVENT_NEWFILE" , 811); +/** use to inform ErrorTracker of the next line number being parsed */ +define("PHPDOCUMENTOR_EVENT_NEWLINENUM" , 812); +/** used when a global variable definition is encountered in the source */ +define("PHPDOCUMENTOR_EVENT_GLOBAL" , 813); +/** used when a docblock template is encountered in the source */ +define("PHPDOCUMENTOR_EVENT_DOCBLOCK_TEMPLATE" , 814); +/** used when a docblock template is encountered in the source */ +define("PHPDOCUMENTOR_EVENT_END_DOCBLOCK_TEMPLATE" , 815); +/** used when double quotation mark (") encountered in parsing */ +define("PARSER_EVENT_QUOTE" , 101); +/** currently parsing a quote */ +define("STATE_QUOTE" , 201); + +/** { encountered in parsing a function or php code */ +define("PARSER_EVENT_LOGICBLOCK" , 102); +/** currently parsing a { } block */ +define("STATE_LOGICBLOCK" , 202); + +/** used for the beginning of parsing, before first < ? php encountered */ +define("PARSER_EVENT_NOEVENTS" , 103); +/** out of < ? php tag */ +define("STATE_NOEVENTS" , 203); + +/** used when long comment /x x/ where x is an asterisk is encountered in parsing */ +define("PARSER_EVENT_COMMENTBLOCK" , 104); +/** currently parsing a long comment /x x/ where x is an asterisk */ +define("STATE_COMMENTBLOCK" , 204); + +/** used when short comment // is encountered in parsing */ +define("PARSER_EVENT_COMMENT" , 105); +/** currently parsing a short comment // */ +define("STATE_COMMENT" , 205); + +/** used when php code processor instruction (< ? php) is encountered in parsing */ +define("PARSER_EVENT_PHPCODE" , 106); +/** currently parsing php code */ +define("STATE_PHPCODE" , 206); + +/** used when a define statement is encountered in parsing */ +define("PARSER_EVENT_DEFINE" , 107); +/** currently parsing a define statement */ +define("STATE_DEFINE" , 207); + +/** used when a define statement opening parenthesis is encountered in parsing */ +define("PARSER_EVENT_DEFINE_PARAMS" , 108); +/** currently parsing the stuff in ( ) of a define statement */ +define("STATE_DEFINE_PARAMS" , 208); + +/** used when a function statement opening parenthesis is encountered in parsing */ +define("PARSER_EVENT_FUNCTION_PARAMS" , 109); +/** currently parsing the stuff in ( ) of a function definition */ +define("STATE_FUNCTION_PARAMS" , 209); + +/** used when a single quote (') is encountered in parsing */ +define("PARSER_EVENT_SINGLEQUOTE" , 110); +/** currently parsing a string enclosed in single quotes (') */ +define("STATE_SINGLEQUOTE" , 210); + +/** used when a class definition is encountered in parsing */ +define("PARSER_EVENT_CLASS" , 111); +/** currently parsing a class definition */ +define("STATE_CLASS" , 211); +/** used to tell Render that a class has been completely parsed, and to flush buffers */ +define("STATE_END_CLASS" , 311); + +/** used when a DocBlock is encountered in parsing */ +define("PARSER_EVENT_DOCBLOCK" , 112); +/** currently parsing a DocBlock */ +define("STATE_DOCBLOCK" , 212); + +/** used when a @tag is encountered in DocBlock parsing */ +define("PARSER_EVENT_DOCKEYWORD" , 113); +/** currently parsing a @tag in a DocBlock */ +define("STATE_DOCKEYWORD" , 213); + +/** used when a <email@address> is encountered in parsing an @author tag*/ +define("PARSER_EVENT_DOCKEYWORD_EMAIL" , 114); +/** currently parsing an email in brackets in an @author tag of a DocBlock */ +define("STATE_DOCKEYWORD_EMAIL" , 214); + +/** used when an array definition is encountered in parsing */ +define("PARSER_EVENT_ARRAY" , 115); +/** currently parsing an array */ +define("STATE_ARRAY" , 215); + +/** used when a var statement is encountered in parsing a class definition */ +define("PARSER_EVENT_VAR" , 116); +/** currently parsing a Class variable */ +define("STATE_VAR" , 216); + +/** used when a function definition is encountered in parsing */ +define("PARSER_EVENT_FUNCTION" , 117); +/** currently parsing a Function or Method */ +define("STATE_FUNCTION" , 217); + +/** used when a ? > (with no space) is encountered in parsing */ +define("PARSER_EVENT_OUTPHP" , 118); +/** currently out of php code */ +define("STATE_OUTPHP" , 218); + +/** used when an inline {@tag} is encountered in parsing a DocBlock */ +define("PARSER_EVENT_INLINE_DOCKEYWORD" , 119); +/** currently parsing an inline tag like { @link} in a DocBlock */ +define("STATE_INLINE_DOCKEYWORD" , 219); + +/** used when a define statement's opening parenthesis is encountered in parsing */ +define("PARSER_EVENT_DEFINE_PARAMS_PARENTHESIS" , 120); +/** currently parsing an inner parenthetical statement of a define( ) */ +define("STATE_DEFINE_PARAMS_PARENTHESIS" , 220); + +define("PARSER_EVENT_END_STATEMENT", 121); + +/** used when a <<< is encountered in parsing */ +define("PARSER_EVENT_EOFQUOTE" , 122); +/** currently parsing a string defined using Perl <<< */ +define("STATE_EOFQUOTE" , 222); + +/** used when an include/require/include_once/include_once statement is encountered in parsing */ +define("PARSER_EVENT_INCLUDE" , 123); +/** currently parsing an include/require/include_once/include_once */ +define("STATE_INCLUDE" , 223); + +/** used when an opening parenthesis of an include/require/include_once/include_once statement is encountered in parsing */ +define("PARSER_EVENT_INCLUDE_PARAMS" , 124); +/** currently parsing the stuff in ( ) of a define statement */ +define("STATE_INCLUDE_PARAMS" , 224); + +/** used when an inner ( ) is encountered while parsing an include/require/include_once/include_once statement */ +define("PARSER_EVENT_INCLUDE_PARAMS_PARENTHESIS" , 125); +/** currently parsing an inner parenthetical statement of an include/includeonce/require/requireonce( ) */ +define("STATE_INCLUDE_PARAMS_PARENTHESIS" , 225); + +/** used when parsing the desc part of a docblock */ +define("PARSER_EVENT_DESC" , 126); +/** currently parsing the desc part of a docblock */ +define("STATE_DESC" , 226); + +/** used when parsing the @tag block of a docblock */ +define("PARSER_EVENT_TAGS" , 127); +/** currently parsing the @tag block of a docblock */ +define("STATE_TAGS" , 227); + +/** used when parsing a global variable declaration */ +define("PARSER_EVENT_DEFINE_GLOBAL" , 128); +/** currently parsing a global variable declaration */ +define("STATE_GLOBAL" , 228); + +/** used when parsing the default value in a global variable declaration */ +define("PARSER_EVENT_GLOBAL_VALUE" , 129); +/** currently parsing the default value in a global variable declaration */ +define("STATE_GLOBAL_VALUE" , 229); + +/** used when parsing a "global $var1, $var2;" declaration in a function */ +define("PARSER_EVENT_FUNC_GLOBAL" , 130); +/** currently parsing a "global $var1, $var2;" declaration in a function */ +define("STATE_FUNC_GLOBAL" , 230); + +/** used when parsing a "static $var1, $var2;" declaration in a function */ +define("PARSER_EVENT_STATIC_VAR" , 131); +/** currently parsing a "static $var1, $var2;" declaration in a function */ +define("STATE_STATIC_VAR" , 231); + +/** used when parsing the value in a "static $var1 = x" declaration in a function */ +define("PARSER_EVENT_STATIC_VAR_VALUE" , 132); +/** currently parsing the value in a "static $var1 = x" declaration in a function */ +define("STATE_STATIC_VAR_VALUE" , 232); + +/** used when encountering a /**#@+ comment marking a new docblock template */ +define("PARSER_EVENT_DOCBLOCK_TEMPLATE" , 133); +/** currently parsing the value in a "static $var1 = x" declaration in a function */ +define("STATE_DOCBLOCK_TEMPLATE" , 233); + +/** used when encountering a /**#@-* / comment (no space) marking the end of using a docblock template */ +define("PARSER_EVENT_END_DOCBLOCK_TEMPLATE" , 134); +/** currently parsing the value in a "static $var1 = x" declaration in a function */ +define("STATE_END_DOCBLOCK_TEMPLATE" , 234); + +/** used by the {@link HighlightParser} only, when a method starts */ +define("PARSER_EVENT_METHOD" , 135); +/** currently parsing a method using the {@link HighlightParser} */ +define("STATE_METHOD" , 235); + +/** used by the {@link HighlightParser} only, when a method body is parsed */ +define("PARSER_EVENT_METHOD_LOGICBLOCK" , 136); +/** currently parsing the method body using the {@link HighlightParser} */ +define("STATE_METHOD_LOGICBLOCK" , 236); + +/** used by the {@link HighlightParser} only, when ->var or ->function() is encountered in a method */ +define("PARSER_EVENT_CLASS_MEMBER" , 137); +/** currently parsing a class member using the {@link HighlightParser} */ +define("STATE_CLASS_MEMBER" , 237); + +/** used by the {@link HighlightParser} only, when {$var} is encountered in a string */ +define("PARSER_EVENT_QUOTE_VAR" , 138); +/** currently parsing a {$encapsed_var} using the {@link HighlightParser} */ +define("STATE_QUOTE_VAR" , 238); + +/** used when parsing an access modifier */ +define("PARSER_EVENT_ACCESS_MODIFIER" , 139); +/** currently parsing an access modifier */ +define("STATE_ACCESS_MODIFIER" , 239); + +/** used when a class implements interfaces */ +define("PARSER_EVENT_IMPLEMENTS" , 140); +/** currently parsing an implements clause */ +define("STATE_IMPLEMENTS" , 240); + +/** used when a class implements interfaces */ +define("PARSER_EVENT_CLASS_CONSTANT" , 141); +/** currently parsing a class constant */ +define("STATE_CLASS_CONSTANT" , 241); + +/** used when a variable value is an array */ +define("PARSER_EVENT_VAR_ARRAY" , 142); +/** currently parsing a variable value is an array */ +define("STATE_VAR_ARRAY" , 242); + +/** used when a comment is found in a variable array value */ +define("PARSER_EVENT_VAR_ARRAY_COMMENT" , 143); +/** currently parsing a comment in a variable array value */ +define("STATE_VAR_ARRAY_COMMENT" , 243); + +/** used when a $param is encountered in a function definition */ +define("PARSER_EVENT_FUNCTION_PARAM_VAR", 144); +/** currently parsing a $param in a function definition */ +define("STATE_FUNCTION_PARAM_VAR", 244); + +if (!defined('T_INTERFACE')) +{ + define('T_INTERFACE', 'foo'); + if (!defined('T_CONST')) { + define('T_CONST', 'foo'); + } + define('T_ABSTRACT', 'foo'); + define('T_PRIVATE', 'foo'); + define('T_PUBLIC', 'foo'); + define('T_PROTECTED', 'foo'); + define('T_FINAL', 'foo'); + define('T_IMPLEMENTS', 'foo'); +} +if (!defined('T_ML_COMMENT')) +{ + define('T_ML_COMMENT', T_COMMENT); +} +if (!defined('T_DOC_COMMENT')) +{ + define('T_DOC_COMMENT', T_ML_COMMENT); +} +/** + * PHP Parser for PHP 4.2.3- + * + * This parser is slower than the tokenizer-based parser, and is deprecated. + * @author Joshua Eichorn <jeichorn@phpdoc.org> + * @author Gregory Beaver <cellog@php.net> + * @version $Id: Parser.inc 238276 2007-06-22 14:58:30Z ashnazg $ + * @package phpDocumentor + * @subpackage Parsers + * @deprecated in favor of {@link phpDocumentorTParser} + */ +class Parser extends Publisher +{ + /**#@+ + * @access private + */ + /** + * Word parser + * @see WordParser + */ + var $wp; + + /** + * temporary parser variables + */ + var $p_vars = array('func' => false, 'function_data' => '', 'quote_data' => '', 'event_stack' => false, 'last_pevent' => 0, + 'two_words_ago' => '', 'temp_word' => '', 'docblock' => false, 'line' => array(), 'linecount' => 0, 'startword' => '', + 'periodline' => 0, 'shortdesc' => '', 'docblock_desc' => '', 'class' => false, 'source_location' => '', + 'define_params_data' => '', 'define' => false, 'define_name' => '', 'define_value' => '', 'var' => false, + 'oldtoken' => false, 'comment_data' => '', 'function_param' => NULL, 'inline_dockeyword_type' => false, + 'inline_dockeyword_data' => false, 'dockeyword_type' => false, 'dockeyword_data' =>false, 'param_var' => false, + 'include_name' => '', 'include_value' => '','include' => false, 'return_type' => '', 'cur_class' => '', 'property_name' => false, + 'function_data' => false, 'varname' => '', 'returntype' => false, 'vartype' => false, 'paramtype' => false, + 'tagname' => '', 'find_global' => '', 'global_type' => '', 'paramname' => false, 'statics' => array(), + 'static_count' => 0, 'static_val' => array(), 'docblock_type' => 'docblock', 'seelement' => false); + + /** + * parser flags, for states that don't warrant a new event (like new line in a docblock) + */ + var $p_flags = array('docblocknewline' => false, 'docblockintags' => false, 'useperiod' => false, + 'definename_isset' => false, 'define_parens' => false, 'reset_quote_data' => false, + 'in_desc' => true, 'in_tag' => false, 'newline' => true, 'tempnewline' => false, + 'start_docblock' => false, 'includename_isset' => false, 'return_isset' => false, + 'is_return' => false, 'in_class' => false, 'asterisk' => false, 'var_equals' => false, + 'arrayinvarname' => false, 'valid_newline' => true, 'startline' => false, + 'function_global' => false, 'define_global' => false, 'static_value' => false,'funcparam_val' => false, + 'get_source' => false, 'getting_source' => false); + + /** + * lookup table for event handler methods + * @see Parser::parse() + */ + var $eventHandlers = array( + 'handleArray' => PARSER_EVENT_ARRAY, + 'handleClass' => PARSER_EVENT_CLASS, + 'handleComment' => PARSER_EVENT_COMMENT, + 'handleDocBlockTemplate' => PARSER_EVENT_DOCBLOCK_TEMPLATE, + 'handleEndDocBlockTemplate' => PARSER_EVENT_END_DOCBLOCK_TEMPLATE, + 'handleEscape' => PARSER_EVENT_ESCAPE, + 'handleLogicBlock' => PARSER_EVENT_LOGICBLOCK, + 'defaultHandler' => PARSER_EVENT_NOEVENTS, +// 'defaultHandler' => PARSER_EVENT_COMMENTBLOCK, (set in constructor below) +// 'defaultHandler' => PARSER_EVENT_OUTPHP, + 'handleDefine' => PARSER_EVENT_DEFINE, + 'handleDefineParams' => PARSER_EVENT_DEFINE_PARAMS, + 'handleDefineParamsParenthesis' => PARSER_EVENT_DEFINE_PARAMS_PARENTHESIS, + 'handleIncludeParamsParenthesis' => PARSER_EVENT_INCLUDE_PARAMS_PARENTHESIS, +// 'handleDocBlock' => PARSER_EVENT_DOCBLOCK, + 'BetterhandleDocBlock' => PARSER_EVENT_DOCBLOCK, + 'handleTags' => PARSER_EVENT_TAGS, + 'handleDesc' => PARSER_EVENT_DESC, +// 'handleDockeyword' => PARSER_EVENT_DOCKEYWORD, + 'handleTag' => PARSER_EVENT_DOCKEYWORD, + 'handleDockeywordEmail' => PARSER_EVENT_DOCKEYWORD_EMAIL, + 'handleEOFQuote' => PARSER_EVENT_EOFQUOTE, + 'handleFunction' => PARSER_EVENT_FUNCTION, + 'handleFunctionParams' => PARSER_EVENT_FUNCTION_PARAMS, + 'handleFuncGlobal' => PARSER_EVENT_FUNC_GLOBAL, + 'handleGlobal' => PARSER_EVENT_DEFINE_GLOBAL, + 'handleGlobalValue' => PARSER_EVENT_GLOBAL_VALUE, + 'handleInlineDockeyword' => PARSER_EVENT_INLINE_DOCKEYWORD, + 'handleInclude' => PARSER_EVENT_INCLUDE, + 'handleIncludeParams' => PARSER_EVENT_INCLUDE_PARAMS, + 'handleQuote' => PARSER_EVENT_QUOTE, + 'handlePhpCode' => PARSER_EVENT_PHPCODE, + 'handleSingleQuote' => PARSER_EVENT_SINGLEQUOTE, + 'handleStaticVar' => PARSER_EVENT_STATIC_VAR, + 'handleStaticValue' => PARSER_EVENT_STATIC_VAR_VALUE, + 'handleVar' => PARSER_EVENT_VAR, + ); + + /** + * event handlers for @tags + * @tutorial tags.pkg + */ + var $tagHandlers = array( + '*' => 'defaultTagHandler', + 'category' => 'categoryTagHandler', + 'example' => 'exampleTagHandler', + 'filesource' => 'invalidTagHandler', + 'return' => 'returnTagHandler', + 'returns' => 'returnTagHandler', + 'var' => 'varTagHandler', + 'package' => 'packageTagHandler', + 'param' => 'paramTagHandler', + 'parameter' => 'paramTagHandler', + 'global' => 'globalTagHandler', + 'staticvar' => 'staticvarTagHandler', + 'uses' => 'usesTagHandler', + 'property' => 'propertyTagHandler', + 'property-read' => 'propertyTagHandler', + 'property-write' => 'propertyTagHandler', + 'method' => 'propertyTagHandler' + ); + + var $laststart = false; + + /** + * An array of allowable @tags + */ + var $allowableTags; + + + /** + * An array of allowed inline @tags + */ + var $allowableInlineTags; + + /** + * Sets the states up, and creates a new WordParser + */ + + /** + * an array of parsing tokens organized by event number. + * A token is defined as the smallest group of characters that separates or + * defines a new parser element. In English, a space or punctuation are + * tokens that separate words. in PHP, tokens may be //, or even " + * Format: array(eventnum =>array(token1, token2, token3, ...),...) + * @var array + */ + var $tokens; + + /** + * array of events that are raised, organized by the tokens that raise them. + * Format: array(eventnum => array(token => neweventnum, token2 => neweventnum2,...),...) + * @var array + */ + var $pushEvent; + + /** + * array of tokens that end an event, organized by event + * Format: array(eventnum => array(token => neweventnum, token2 => neweventnum2,...),...) + * @var array + */ + var $popEvent; + /**#@-*/ + + /** + * Set up invariant parsing variables + */ + function Parser() + { + $this->allowableTags = $GLOBALS['_phpDocumentor_tags_allowed']; + $this->allowableInlineTags = $GLOBALS['_phpDocumentor_inline_doc_tags_allowed']; + $this->wp = new WordParser; + // strange PHP 4.0.6 behavior: it converts constants to strings without warning if it's an array index + $this->eventHandlers = array_flip($this->eventHandlers); + $this->eventHandlers[PARSER_EVENT_COMMENTBLOCK] = 'defaultHandler'; + $this->eventHandlers[PARSER_EVENT_OUTPHP] = 'defaultHandler'; + $this->subscribe(PHPDOCUMENTOR_EVENT_NEWLINENUM,$GLOBALS['phpDocumentor_errors']); + $this->subscribe(PHPDOCUMENTOR_EVENT_NEWFILE,$GLOBALS['phpDocumentor_errors']); + } + + /** + * Parse a new file + * + * @param string $parse_data + * @param string $path + * @param int $base number of directories to drop off the bottom when creating names using path + * @staticvar integer used for recursion limiting if a handler for an event is not found + * @return bool + */ + function parse (&$parse_data, $path, $base = 0, $packages = false) + { + global $_phpDocumentor_options; + static $endrecur = 0; + $this->p_vars = array('func' => false, 'function_data' => '', 'quote_data' => '', 'event_stack' => false, 'last_pevent' => 0, + 'two_words_ago' => '', 'temp_word' => '', 'docblock' => false, 'line' => array(), 'linecount' => 0, 'startword' => '', + 'periodline' => 0, 'shortdesc' => '', 'docblock_desc' => '', 'class' => false, 'source_location' => '', + 'define_params_data' => '', 'define' => false, 'define_name' => '', 'define_value' => '', 'var' => false, + 'oldtoken' => false, 'comment_data' => '', 'function_param' => NULL, 'inline_dockeyword_type' => false, + 'inline_dockeyword_data' => false, 'dockeyword_type' => false, 'dockeyword_data' =>false, 'param_var' => false, + 'include_name' => '', 'include_value' => '','include' => false, 'return_type' => '', 'cur_class' => '', 'property_name' => false, + 'function_data' => false, 'varname' => '', 'returntype' => false, 'vartype' => false, 'paramtype' => false, + 'tagname' => '', 'find_global' => '', 'global_type' => '', 'paramname' => false, 'statics' => array(), + 'static_count' => 0, 'static_val' => array(), 'docblock_type' => 'docblock', 'linenum' => false, + 'seelement' => false); + + $this->p_flags = array('docblocknewline' => false, 'docblockintags' => false, 'useperiod' => false, + 'definename_isset' => false, 'define_parens' => false, 'reset_quote_data' => false, + 'in_desc' => true, 'in_tag' => false, 'newline' => true, 'tempnewline' => false, + 'start_docblock' => false, 'includename_isset' => false, 'return_isset' => false, + 'is_return' => false, 'in_class' => false, 'asterisk' => false, 'var_equals' => false, + 'arrayinvarname' => false, 'valid_newline' => true, 'startline' => false, + 'function_global' => false, 'define_global' => false, 'static_value' => false,'funcparam_val' => false, + 'get_source' => false, 'getting_source' => false, 'in_define' => false, 'in_include' => false, + 'in_var' => false, 'in_global' => false); + $this->p_vars['parsepath'] = $path; + $this->setupStates(); + if (strlen($parse_data) == 0) + { + return false; + } + + // initialize variables so E_ALL error_reporting doesn't complain + $pevent = 0; + $word = 0; + $this->p_vars['event_stack'] = new EventStack; + + $this->wp->setup($parse_data); + + + $page = new ParserPage; + $page->setPath($path); + $page->setPackageOutput($packages); + $page->setFile(basename($path)); + $this->publishEvent(PHPDOCUMENTOR_EVENT_NEWFILE,basename($path)); + //$name = str_replace("/","_",dirname($path)) . "_" . array_shift(explode(".",$page->getFile())); + // fc@fc.clever-soft.com 11/29/2001 + $name = str_replace( ':', '', dirname($path) . PATH_DELIMITER . $page->getFile() ); + $tmp = explode( PATH_DELIMITER, $name ); + $name = implode( "---", array_slice( $tmp, $base ) ); + // if base is '', drive letter is present in windows + + $page->setName($name); + $temploc = $_phpDocumentor_options['Program_Root'] . PATH_DELIMITER. implode(PATH_DELIMITER, + array_slice(explode(PATH_DELIMITER,$path),$base)); + + if ($temploc == $_phpDocumentor_options['Program_Root'] . PATH_DELIMITER) $temploc .= $path; + + $this->p_vars['source_location'] = $source_location = $temploc; + $page->setSourceLocation($source_location); + + $this->publishEvent(PHPDOCUMENTOR_EVENT_PAGE,$page); + unset($page); + $this->p_flags['reset_quote_data'] = true; + + do + { + $lpevent = $pevent; + $pevent = $this->p_vars['event_stack']->getEvent(); + if ($lpevent != $pevent) + { + $this->p_vars['last_pevent'] = $lpevent; + } + + if ($this->p_vars['last_pevent'] != $pevent) + { + // its a new event so the word parser needs to be reconfigured + $this->configWordParser($pevent); + } + + $this->publishEvent(PHPDOCUMENTOR_EVENT_NEWSTATE,($pevent + 100)); + + if ($pevent == PARSER_EVENT_GLOBAL_VALUE || $pevent == PARSER_EVENT_DOCBLOCK || $pevent == PARSER_EVENT_DOCBLOCK_TEMPLATE) + { + $this->wp->setWhitespace(true); + } + + $this->p_vars['last_word'] = $word; + $word = $this->wp->getWord(); + // in wordparser, have to keep track of lines + $this->publishEvent(PHPDOCUMENTOR_EVENT_NEWLINENUM, $this->wp->linenum); + + if (PHPDOCUMENTOR_DEBUG == true) + { + echo "\nLAST: |" . $this->p_vars['last_word'] . "|\n"; + echo "PEVENT: " . $this->getParserEventName($pevent) . "\n"; + echo "LASTPEVENT: " . $this->getParserEventName($this->p_vars['last_pevent']) . "\n"; + echo $this->wp->getPos() . ": |$word|\n--------------------------\n\n"; + } + if ($this->p_flags['get_source']) + { + if ($pevent == PARSER_EVENT_FUNCTION) + { + $this->wp->retrievesource("function $word"); + $this->p_flags['get_source'] = false; + $this->p_flags['getting_source'] = true; + } + } + if (false)//$this->p_flags['getting_source'] && ($pevent == PARSER_EVENT_DOCBLOCK) || ($pevent == PARSER_EVENT_NOEVENTS)) + { + addError(PDERROR_SOURCE_TAG_FUNCTION_NOT_FOUND); + // throw away source + $this->wp->getSource(); + } + if (isset($this->eventHandlers[$pevent])) + { + $handle = $this->eventHandlers[$pevent]; + $this->$handle($word, $pevent); + } else + { + debug('WARNING: possible error, no handler for event number '.$pevent); + if ($endrecur++ == 25) + { + die("FATAL ERROR, recursion limit reached"); + } + } + } while (!($word === false)); + $this->publishEvent(PHPDOCUMENTOR_EVENT_NEWSTATE,PHPDOCUMENTOR_EVENT_END_PAGE); + } + + /**#@+ + * @access private + * @param string token parsed from source + * @param integer parser constant from {@link Parser.inc} + */ + /** + * handler for NOEVENTS, OUTPHP, COMMENTBLOCK + */ + + function defaultHandler($word, $pevent) + { + $this->checkEventPush( $word, $pevent); + $this->checkEventPop($word,$pevent); + } + + /** + * handler for LOGICBLOCK + * + * Logic Blocks are the stuff between { and } in a function/method. A + * logic block can clearly contain other logic blocks, as in: + * + * <code> + * function test($a) + * { + * if (testcondition) + * { // nested logic block + * } + * } + * </code> + * + * So, the exit portion of the logic block handler must check to see if the + * logic block being exited is the top-level, and it does this by retrieving + * the last event from the stack. If it is a function (and not a logic block) + * then it backs up the word parser so that the function will exit properly. + * + * {@source 11} + */ + + function handleLogicBlock($word, $pevent) + { + $a = $this->checkEventPush( $word, $pevent); + if ($a == PARSER_EVENT_FUNC_GLOBAL || $a == PARSER_EVENT_STATIC_VAR) + { + if (substr($this->p_vars['last_word'],strlen($this->p_vars['last_word']) - 1,1) != ' ' && substr($this->p_vars['last_word'],strlen($this->p_vars['last_word']) - 1,1) != "\t" && substr($this->p_vars['last_word'],strlen($this->p_vars['last_word']) - 1,1) != "\n" && substr($this->p_vars['last_word'],strlen($this->p_vars['last_word']) - 1,1) != ";" && substr($this->p_vars['last_word'],strlen($this->p_vars['last_word']) - 1,1) != "}" && substr($this->p_vars['last_word'],strlen($this->p_vars['last_word']) - 1,1) != "{") + { + $this->p_vars['event_stack']->popEvent(); + } + } + if ($this->checkEventPop($word,$pevent)) + { + $e = $this->p_vars['event_stack']->popEvent(); + $this->p_vars['event_stack']->pushEvent($e); + if ($e == PARSER_EVENT_FUNCTION) + { + $this->wp->backupPos($word); + } + } + } + + /** + * handler for ESCAPE. + * this event handler parses <code>"this string \"with its escape backslashes\""</code> and returns: + * <code>this string "with its escape backslashes"</code> + * to make it human-readable + */ + + function handleEscape($word, $pevent) + { + $this->p_vars['event_stack']->popEvent(); + } + + /** + * handler for COMMENT. + * this event handler parses single-line comments like: + * // this one + */ + + function handleComment($word, $pevent) + { + $this->checkEventPush( $word, $pevent); + + if (!isset($this->p_vars['comment_data'])) $this->p_vars['comment_data'] = ''; + $this->p_vars['comment_data'] .= $word; + + $this->checkEventPop($word,$pevent); + } + + /** + * handler for ARRAY. + * this event handler parses arrays in default values of function and var definitions + */ + + function handleArray($word, $pevent) + { + $e = $this->checkEventPush( $word, $pevent); + if (($e == PARSER_EVENT_COMMENTBLOCK) || + ($e == PARSER_EVENT_COMMENT)) return; + + if (!isset($this->p_vars['function_data']) || (isset($this->p_vars['function_data']) && empty($this->p_vars['function_data']))) + { + $this->p_vars['function_data'] = "array"; + } + + if ( ($this->p_vars['last_word'] == "'")) + { + $this->p_vars['function_data'] .= $this->p_vars['quote_data']."'"; + } + if ( ($this->p_vars['last_word'] == "\"")) + { + $this->p_vars['function_data'] .= $this->p_vars['quote_data']."\""; + } + + $this->p_vars['function_data'] .= $word; + //echo "function_data = |$this->p_vars['function_data']|\n"; + + if ($this->checkEventPop($word,$pevent)) + { + } + } + + /** + * handler for DEFINE. + * handles define(constant, value); statements + */ + + function handleDefine($word, $pevent) + { + if (!$this->p_flags['in_define']) + { + $this->p_vars['linenum'] = $this->wp->linenum; + } + $this->p_flags['in_define'] = true; + $this->checkEventPush( $word, $pevent); + + $this->p_flags['definename_isset'] = false; + $this->p_vars['define_params_data'] = ''; + unset($this->p_vars['quote_data']); + if ($this->checkEventPop($word,$pevent)) + { + $this->p_flags['in_define'] = false; + $this->p_vars['define'] = new parserDefine; + $this->p_vars['define']->setLineNumber($this->p_vars['linenum']); + $this->p_vars['define']->setName($this->p_vars['define_name']); + $this->p_vars['define']->setValue($this->p_vars['define_value']); + $this->publishEvent(PHPDOCUMENTOR_EVENT_DEFINE,$this->p_vars['define']); + $this->p_flags['definename_isset'] = false; + unset($this->p_vars['define']); + unset($this->p_vars['define_name']); + unset($this->p_vars['define_value']); + $this->p_flags['in_define'] = false; + $this->p_vars['define_params_data'] = ''; + } + } + + /** + * handler for DEFINE_PARAMS. + * handles the parsing of constant and value in define(constant, value); + */ + + function handleDefineParams($word, $pevent) + { + if ($this->checkEventPush( $word, $pevent)) + { + if ($word == '(') + { + $this->p_vars['define_params_data'] .= $word; + } + return; + } + + $this->p_flags['define_parens'] = true; + if(!isset($this->p_vars['define_params_data'])) $this->p_vars['define_params_data'] = ''; + + if ($this->checkEventPop($word,$pevent)) + { + if (!empty($this->p_vars['quote_data'])) + { + $this->p_vars['define_params_data'] .= $this->p_vars['quote_data']; + } + if (!empty($this->p_vars['define_params_data'])) + { + //echo $this->p_vars['define_params_data']."\n"; + $this->p_vars['define_value'] = $this->p_vars['define_params_data']; + } + else + { + if ( $this->p_vars['last_word'] != "/*" && + $this->p_vars['last_word'] != "//" && $this->p_vars['last_word'] != "#") + { + $this->p_vars['define_value'] = trim($this->p_vars['last_word']); + } + else + { + $this->p_vars['define_value'] = ""; + } + } + } + if ($this->p_flags['definename_isset']) + { + if (isset($this->p_vars['quote_data'])) + { + $this->p_vars['define_params_data'] .= '"'.$this->p_vars['quote_data'].'"'; + unset($this->p_vars['quote_data']); + } + $this->p_vars['define_params_data'] .= $word; + } else + { + if ($word != ",") + { + if (isset($this->p_vars['quote_data'])) + { + $this->p_vars['define_params_data'] .= $this->p_vars['quote_data']; + unset($this->p_vars['quote_data']); + } + $this->p_vars['define_params_data'] .= $word; + } else + { + if (isset($this->p_vars['quote_data']) && !$this->p_flags['definename_isset']) + { + $this->p_vars['define_params_data'] .= $this->p_vars['quote_data']; + unset($this->p_vars['quote_data']); + } + $this->p_flags['definename_isset'] = true; + $this->p_vars['define_name'] = $this->p_vars['define_params_data']; + unset($this->p_vars['quote_data']); + $this->p_vars['define_params_data'] = ''; + } + } + } + + /** + * handler for DEFINE_PARAMS_PARENTHESIS. + * this handler takes all parenthetical statements within constant or value in: + * define(constant, value) of a define statement, and handles them properly + */ + + function handleDefineParamsParenthesis($word, $pevent) + { + if (isset($this->p_vars['quote_data'])) + { + $this->p_vars['define_params_data'] .= '"'.$this->p_vars['quote_data'].'"'; + unset($this->p_vars['quote_data']); + } + $this->p_vars['define_params_data'] .= $word; + $this->checkEventPush( $word, $pevent); + $this->checkEventPop( $word, $pevent); + } + + /** + * handler for CLASS. + * this handler parses a class statement + */ + + function handleClass($word, $pevent) + { + $this->p_flags['in_class'] = true; + $a = $this->checkEventPush( $word, $pevent); + if ($a == PARSER_EVENT_DOCBLOCK || $a == PARSER_EVENT_DOCBLOCK_TEMPLATE) + { + $this->wp->setWhitespace(true); + } + + if (!isset($this->p_vars['class'])) $this->p_vars['class'] = false; + if (!is_subclass_of($this->p_vars['class'],"parserBase")) + { + $this->p_vars['class'] = new parserClass; + $this->p_vars['class']->setLineNumber($this->wp->linenum); + $this->p_vars['class']->setname($word); + $this->p_vars['cur_class'] = $word; + $this->p_vars['class']->setSourceLocation($this->p_vars['source_location']); + } + + if (strtolower($this->p_vars['last_word']) == "extends") + { + $this->p_vars['class']->setExtends($word); + } + + if ($word == "{") + { + $this->publishEvent(PHPDOCUMENTOR_EVENT_CLASS,$this->p_vars['class']); + } + //echo $this->wp->getPos() . ": |$word|\n"; + if ($this->checkEventPop($word,$pevent)) + { + $this->p_flags['in_class'] = false; + // throw an event when class is done + $this->publishEvent(PHPDOCUMENTOR_EVENT_NEWSTATE,STATE_END_CLASS); + $this->p_vars['class'] = false; + } + } + + /** + * handler for VAR. + * handle a var $varname = default_value; or var $varname; statement in a class definition + */ + + function handleVar($word, $pevent) + { + if (!$this->p_flags['in_var']) + { + $this->p_vars['linenum'] = $this->wp->linenum; + } + $this->p_flags['in_var'] = true; + //echo $word."\n"; + $e = $this->checkEventPush( $word, $pevent); + + if (!isset($this->p_vars['var'])) $this->p_vars['var'] = false; + if ($word == '=' || $word == ';') $this->p_flags['var_equals'] = true; + if (!$this->p_flags['var_equals']) + { + // if we haven't parsed the = yet, no arrays are possible! + if ($e == PARSER_EVENT_ARRAY) + { + $this->p_flags['arrayinvarname'] = true; + $this->p_vars['event_stack']->popEvent(); + } + if (!$e || ($e == PARSER_EVENT_ARRAY)) + $this->p_vars['varname'] .= $word; + } + + if (!$this->p_flags['var_equals']) + { + if ($word != "/*" && $word != "//" && $word != "#") + { + $this->p_vars['var'] = new parserVar($this->p_vars['cur_class']); + $this->p_vars['var']->setName($this->p_vars['varname']); + } + } + if ($this->p_vars['last_word'] == "=") + { + if ($word != "/*" && $word != "//" && $word != "#") + { + $this->p_vars['var']->setValue($word); + } + } + // fix 1202772 + if (isset($this->p_vars['quote_data']) && ($this->p_vars['last_pevent'] == PARSER_EVENT_QUOTE || $this->p_vars['last_pevent'] == PARSER_EVENT_SINGLEQUOTE)) + { + $this->p_vars['var']->setValue($this->p_vars['quote_data']); + unset($this->p_vars['quote_data']); + } + if ($this->p_vars['last_pevent'] == PARSER_EVENT_ARRAY) + { + $this->p_vars['var']->setValue($this->p_vars['function_data']); + $this->p_vars['function_data'] = false; + } + + if ($this->checkEventPop($word,$pevent)) + { + $this->p_vars['var']->setLineNumber($this->p_vars['linenum']); + $this->publishEvent(PHPDOCUMENTOR_EVENT_VAR,$this->p_vars['var']); + unset($this->p_vars['var']); + $this->p_flags['in_var'] = false; + $this->p_flags['var_equals'] = false; + $this->p_flags['arrayinvarname'] = false; + $this->p_vars['varname'] = ''; + } + } + + /** + * handler for QUOTE. + * this handler recognizes strings defined with double quotation marks (") and handles them correctly + * in any place that they legally appear in php code + */ + + function handleQuote($word, $pevent) + { + if ($this->p_flags['reset_quote_data'] === true) + { + $this->p_flags['reset_quote_data'] = false; + $this->p_vars['quote_data'] = ""; + } + $this->checkEventPush( $word, $pevent); + if ($word != "\"") + { + $this->p_vars['quote_data'] .= $word; + } + if ($this->checkEventPop($word,$pevent)) + { + $this->p_flags['reset_quote_data'] = true; + } + } + + /** + * handler for SINGLEQUOTE. + * this handler recognizes strings defined with single quotation marks (') and handles them correctly + * in any place that they legally appear in php code + */ + + function handleSingleQuote($word, $pevent) + { + $this->checkEventPush( $word, $pevent); + if ($this->checkEventPop($word,$pevent)) + { + if ($this->p_vars['last_word'] != "'") + { + $this->p_vars['quote_data'] = $this->p_vars['last_word']; + } else { + $this->p_vars['quote_data'] = ""; + } + } + } + + /** + * handler for EOFQUOTE. + * this handler recognizes strings defined with perl-style <<< EOF quotes, and handles them correctly + * in any place that they legally appear in php code + * + * an example: + * <code>$var <<< EOF + * blah blah blah + * EOF;</code> + */ + + function handleEOFQuote($word, $pevent) + { + // echo $this->wp->getPos() . ": word=|$word|\t\t\tlastword=|$this->p_vars['last_word']|\n"; + if (trim($this->p_vars['last_word']) == "<<<") + { + // ok we found the keyword + //echo "Keyword == $word\n"; + $this->p_vars['oldtoken'] = $this->tokens[STATE_EOFQUOTE]; + $this->tokens[STATE_EOFQUOTE] = array($word); + } + else if ($this->p_vars['last_pevent'] || PARSER_EVENT_EOFQUOTE) + { + // i don't think anything will ever use this so were not going to set it + //$this->p_vars['quote_data'] = $this->p_vars['last_word']; + $this->p_vars['event_stack']->popEvent(); + $this->tokens[STATE_EOFQUOTE] = $this->p_vars['oldtoken']; + } + } + /**#@-*/ + + /** + * Tells the parser to search for a global variable definition as + * defined by a @global type $name tag. + * + * The parser is fooled into looking for the entire global variable as a + * single token by amending the {@link $tokens} array. + * + * {@source} + * @access private + * @param string name of global variable as it appears in the source code + */ + function findGlobal($name) + { + if (!isset($this->p_vars['globaltofind'])) + { + $this->p_vars['globaltofind'] = $name; + $this->pushEvent[PARSER_EVENT_PHPCODE][strtolower($name)] = PARSER_EVENT_DEFINE_GLOBAL; + $this->tokens[STATE_PHPCODE][] = $name; + } else + { + addError(PDERROR_MULTIPLE_GLOBAL_TAGS,$this->p_vars['globaltofind'],$name); + } + } + + /**#@+ + * @access private + * @param string token parsed from source + * @param integer parser constant from {@link Parser.inc} + */ + /** + * handler for PHPCODE. + * this handler recognizes the <code><?</code> php processor directive, and begins parsing php code + */ + + function handlePhpCode($word, $pevent) + { + $e = $this->checkEventPush( $word, $pevent); + if ($e == PARSER_EVENT_DOCBLOCK || $e == PARSER_EVENT_DOCBLOCK_TEMPLATE) + { + $this->wp->setWhitespace(true); + } + if (isset($this->p_vars['globaltofind']) && $e) + { + if ($e != PARSER_EVENT_DEFINE_GLOBAL && $e != PARSER_EVENT_ARRAY && $e != PARSER_EVENT_QUOTE && $e != PARSER_EVENT_SINGLEQUOTE && $e != PARSER_EVENT_COMMENT && $e != PARSER_EVENT_COMMENTBLOCK) + { + addError(PDERROR_GLOBAL_NOT_FOUND,$this->p_vars['globaltofind']); + unset($this->pushEvent[PARSER_EVENT_PHPCODE][strtolower($this->p_vars['globaltofind'])]); + foreach($this->tokens[STATE_PHPCODE] as $i => $notme) + if ($this->tokens[STATE_PHPCODE][$i] == $this->p_vars['globaltofind']) + unset($this->tokens[STATE_PHPCODE][$i]); + unset($this->p_vars['globaltofind']); + } + } + } + + /** + * handler for global variables + */ + function handleGlobal($word, $pevent) + { + if (!$this->p_flags['in_global']) + { + $this->p_vars['linenum'] = $this->wp->linenum; + } + $this->p_flags['in_global'] = true; + $e = $this->checkEventPush($word, $pevent); + if ($this->checkEventPop($word, $pevent)) + { + $this->p_flags['in_global'] = false; + $a = new parserGlobal; + $a->setDataType($this->p_vars['global_type']); + $this->p_vars['global_type'] = ''; + $a->setLineNumber($this->p_vars['linenum']); + $a->setName($this->p_vars['globaltofind']); + if (isset($this->p_vars['global_val'])) + $a->setValue(trim($this->p_vars['global_val'])); + unset($this->p_vars['global_val']); + $this->publishEvent(PHPDOCUMENTOR_EVENT_GLOBAL,$a); + unset($this->pushEvent[PARSER_EVENT_PHPCODE][strtolower($this->p_vars['globaltofind'])]); + foreach($this->tokens[STATE_PHPCODE] as $i => $notme) + if ($this->tokens[STATE_PHPCODE][$i] == $this->p_vars['globaltofind']) + unset($this->tokens[STATE_PHPCODE][$i]); + unset($this->p_vars['globaltofind']); + } + } + + /** + * Handles the stuff after the = in <code>$globalvar = value</code> + */ + function handleGlobalValue($word, $pevent) + { + if ($this->checkEventPush($word, $pevent)) + { + $this->wp->setWhitespace(false); + return; + } + if (!isset($this->p_vars['global_val'])) $this->p_vars['global_val'] = ''; + if ($this->p_vars['last_pevent'] == PARSER_EVENT_QUOTE || $this->p_vars['last_pevent'] == PARSER_EVENT_SINGLEQUOTE) + { + if (!isset($this->p_vars['quote_data'])) $this->p_vars['quote_data'] = ''; + $this->p_vars['global_val'] .= '"'.$this->p_vars['quote_data'].'"'; + unset($this->p_vars['quote_data']); + $this->p_vars['last_pevent'] = PARSER_EVENT_GLOBAL_VALUE; + } + if ($this->p_vars['last_pevent'] == PARSER_EVENT_ARRAY) + { + $this->p_vars['global_val'] .= $this->p_vars['function_data']; + $this->p_vars['function_data'] = false; + } + if ($word != ';') + $this->p_vars['global_val'] .= $word; + if ($this->checkEventPop($word, $pevent)) + { + $this->wp->setWhitespace(false); + $this->wp->backupPos($word); + } + } + + /** + * handler for FUNC_GLOBAL. + * this handler recognizes "global $var1, $var2" declarations in a function, and parses them + */ + + function handleFuncGlobal($word, $pevent) + { + if ((substr(trim($word),0,1) != '$') && ($word != ',') && ($word != ';')) + { // not a global declaration, using a variable named "$global" + $this->p_vars['event_stack']->popEvent(); + return; + } + if ($this->checkEventPop($word, $pevent)) + { + return; + } + if (!$this->checkEventPush($word, $pevent)) + { + if ($word == ',') + { // another variable + $this->p_vars['global_count']++; + } else + { + if (!isset($this->p_vars['globals'][$this->p_vars['global_count']])) + $this->p_vars['globals'][$this->p_vars['global_count']] = ''; + if (!empty($this->p_vars['globals'][$this->p_vars['global_count']])) $this->p_vars['global_count']++; + $this->p_vars['globals'][$this->p_vars['global_count']] = trim($word); + } + } + } + + /** + * handler for STATIC_VAR. + * this handler recognizes "static $var1, $var2 = 6" declarations in a function, and parses them + */ + + function handleStaticVar($word, $pevent) + { + if ($this->checkEventPop($word, $pevent)) + { + $this->p_vars['static_count']++; + return; + } + if (!$this->checkEventPush($word, $pevent)) + { + if ($word == ',') + { + $this->p_vars['static_count']++; + return; + } + if (!isset($this->p_vars['statics'][$this->p_vars['static_count']])) + $this->p_vars['statics'][$this->p_vars['static_count']] = ''; + if (!empty($this->p_vars['statics'][$this->p_vars['static_count']])) $this->p_vars['static_count']++; + $this->p_vars['statics'][$this->p_vars['static_count']] = trim($word); + } + } + + /** + * handler for STATIC_VAR_VALUE. + * this handler parses the 6 in "static $var1, $var2 = 6" + */ + + function handleStaticValue($word, $pevent) + { + if ($this->checkEventPush($word, $pevent)) + { + return; + } + if (!isset($this->p_vars['static_val'][$this->p_vars['static_count']])) $this->p_vars['static_val'][$this->p_vars['static_count']] = ''; + if ($this->p_vars['last_pevent'] == PARSER_EVENT_QUOTE || $this->p_vars['last_pevent'] == PARSER_EVENT_SINGLEQUOTE) + { + $this->p_vars['static_val'][$this->p_vars['static_count']] .= '"'.$this->p_vars['quote_data'].'"'; + unset($this->p_vars['quote_data']); + } + if ($this->p_vars['last_pevent'] == PARSER_EVENT_ARRAY) + { + $this->p_vars['static_val'][$this->p_vars['static_count']] .= $this->p_vars['function_data']; + $this->p_vars['function_data'] = false; + } + if ($this->checkEventPop($word, $pevent)) + { + $this->p_vars['static_val'][$this->p_vars['static_count']] = trim($this->p_vars['static_val'][$this->p_vars['static_count']]); + $this->wp->backupPos($word); + return; + } else $this->p_vars['static_val'][$this->p_vars['static_count']] .= $word; + } + + /** + * handler for FUNCTION. + * this handler recognizes function declarations, and parses them. The body + * of the function is parsed by handleLogicBlock() + * @see handleLogicBlock() + */ + + function handleFunction($word, $pevent) + { + if ($e = $this->checkEventPush( $word, $pevent)) + { + if ($e == PARSER_EVENT_COMMENT || $e == PARSER_EVENT_COMMENTBLOCK) return; + } + + if (!isset($this->p_vars['func'])) $this->p_vars['func'] = false; + if (! is_subclass_of($this->p_vars['func'],"parserBase")) + { + $this->p_vars['globals'] = array(); + $this->p_vars['global_count'] = 0; + if ($this->p_flags['in_class']) + $this->p_vars['func'] = new parserMethod($this->p_vars['cur_class']); + else + $this->p_vars['func'] = new parserFunction; + $this->p_vars['func']->setLineNumber($this->wp->linenum); + if (trim($word) != '&') + $this->p_vars['func']->setName(trim($word)); + else + $this->p_vars['func']->setReturnsReference(); + } else + { + if ($this->p_vars['func']->getReturnsReference()) + { + if ($this->p_vars['last_word'] == '&') + { + $this->p_vars['func']->setName(trim($word)); + } + } + } + if ($this->checkEventPop($word,$pevent)) + { + $this->p_vars['func']->addGlobals($this->p_vars['globals']); + $this->p_vars['func']->addStatics($this->p_vars['statics'],$this->p_vars['static_val']); + $this->p_vars['globals'] = array(); + $this->p_vars['global_count'] = 0; + if ($this->p_flags['getting_source']) + { + $x = $this->wp->getSource(); + $this->p_vars['func']->addSource($x); + $this->p_flags['get_source'] = false; + $this->p_flags['getting_source'] = false; + } + $this->publishEvent(PHPDOCUMENTOR_EVENT_FUNCTION,$this->p_vars['func']); + $this->p_vars['func'] = false; + } + } + + /**#@-*/ + /** + * Helper function for {@link handleFunctionParams()} + * + * This function adds a new parameter to the parameter list + * @access private + * @param string + */ + function endFunctionParam($word) + { + if (isset($this->p_vars['quote_data']) && ($this->p_vars['last_pevent'] == PARSER_EVENT_SINGLEQUOTE)) + { + $this->p_vars['function_data'] .= "'".$this->p_vars['quote_data']."'"; + unset($this->p_vars['quote_data']); + } + if (isset($this->p_vars['quote_data']) && ($this->p_vars['quote_data'] != '') && ($this->p_vars['last_pevent'] == PARSER_EVENT_QUOTE)) + { + $this->p_vars['function_data'] .= '"'.$this->p_vars['quote_data'].'"'; + unset($this->p_vars['quote_data']); + } + if (isset($this->p_vars['function_param'])) + { + $this->p_vars['func']->addParam($this->p_vars['function_param'],$this->p_vars['function_data'], $this->p_flags['funcparam_val']); + unset($this->p_vars['function_param']); + $this->p_vars['function_data'] = ''; + $this->p_flags['funcparam_val'] = false; + } + } + /**#@+ + * @access private + * @param string token parsed from source + * @param integer parser constant from {@link Parser.inc} + */ + /** + * handler for FUNCTION_PARAMS. + * this handler recognizes the parameters of a function within parentheses like function(param, param = default_value) + * and parses them + * @see endFunctionParam() + */ + + function handleFunctionParams($word, $pevent) + { + //echo $this->wp->getPos() . ": word=|$word|\t\t\tlastword=|".$this->p_vars['last_word']."|\n"; + //echo "function_param = '".$this->p_vars['function_param']."'\n"; + //echo "function_data = '".$this->p_vars['function_data']."'\n"; + $e1 = $this->checkEventPush( $word, $pevent); + + if (!$e1) + { + if ($word == ',' || $this->checkEventPop($word,$pevent)) + { + $this->endFunctionParam($word); + } elseif ($word == '=') + { + $this->p_flags['funcparam_val'] = true; + } else + { + if ($this->p_flags['funcparam_val']) + { + if (isset($this->p_vars['quote_data']) && ($this->p_vars['last_pevent'] == PARSER_EVENT_SINGLEQUOTE)) + { + $this->p_vars['function_data'] .= "'".$this->p_vars['quote_data']."'"; + unset($this->p_vars['quote_data']); + } + if (isset($this->p_vars['quote_data']) && ($this->p_vars['last_pevent'] == PARSER_EVENT_QUOTE)) + { + $this->p_vars['function_data'] .= '"'.$this->p_vars['quote_data'].'"'; + unset($this->p_vars['quote_data']); + } + $this->p_vars['function_data'] .= $word; + } else + { + $this->p_vars['function_param'] = $word; + } + } + } + } + + + /** + * javadoc-desc-compliant handler for DOCBLOCK. + * this handler recognizes @tags in DocBlocks and parses them for display. + * It also parses out unknown tags into their own array for use by the docblock + */ + + function JavaDochandleDocblock($word, $pevent) + { + $e1 = $this->checkEventPush( $word, $pevent); + if (!isset($this->p_vars[$this->p_vars['docblock_type']]) || !$this->p_vars[$this->p_vars['docblock_type']]) + { + $this->p_vars[$this->p_vars['docblock_type']] = new parserDocBlock(); + $this->p_vars['returntype'] = false; + $this->p_vars['vartype'] = false; + $this->p_flags['startdocblock'] = true; + $this->p_flags['valid_newline'] = true; + $this->p_flags['startline'] = true; + $this->p_flags['newline'] = true; + $this->p_flags['in_desc'] = true; + $this->p_flags['in_tag'] = false; + $this->p_flags['useperiod'] = false; + $this->p_vars['line'] = array(); + $this->p_vars['linecount'] = 0; + } + $e = $this->checkEventPop( $word, $pevent); + if (!$e1 && !$e) + { + if ($this->p_flags['in_desc']) $this->JavaDochandleDesc($word, $pevent); + else $this->handleTags($word, $pevent); + } + if ($e) + { + if (!isset($this->p_vars['periodline'])) $this->p_vars['periodline'] = 0; + if ($this->p_vars['periodline'] > 3) + { + $this->p_flags['useperiod'] = false; + } + + $this->p_vars['docblock_desc'] = new parserDesc; +// echo "i = ".$this->p_vars['periodline']."; i < " . count($this->p_vars['line']) . "\n"; + if ($this->p_vars['docblock_type'] == 'docblock') + { + if (isset($this->p_vars['docblock_template'])) + { + // copy template values if not overridden + if (!$this->p_vars['docblock']->getExplicitPackage()) + { + if ($p = $this->p_vars['docblock_template']->getKeyword('package')) + { + $this->p_vars['docblock']->addKeyword('package',$p); + $this->p_vars['docblock']->setExplicitPackage(); + } + if ($p = $this->p_vars['docblock_template']->getKeyword('category')) + { + $this->p_vars['docblock']->addKeyword('category',$p); + $this->p_vars['docblock']->setExplicitCategory(); + } + if ($p = $this->p_vars['docblock_template']->getKeyword('subpackage')) + { + $this->p_vars['docblock']->addKeyword('subpackage',$p); + } + } + $tags = $this->p_vars['docblock_template']->listTags(); + foreach($tags as $tag) + { + $this->p_vars['docblock']->addKeyword($tag->keyword,$tag->value); + } + $this->p_vars['docblock_desc']->add($this->p_vars['docblock_template']->desc); + if (!count($this->p_vars['docblock']->params)) $this->p_vars['docblock']->params = $this->p_vars['docblock_template']->params; + } + if ($a = strpos(trim($this->p_vars['shortdesc']),'<p>') === 0) + $this->p_vars['shortdesc'] = substr($this->p_vars['shortdesc'],strpos($this->p_vars['shortdesc'],'<p>') + 4); + $this->p_vars[$this->p_vars['docblock_type']]->setShortDesc($this->p_vars['shortdesc']); + } + for($i = 0; $i < count($this->p_vars['line']); $i++) + { + // the line will not be set if it doesn't start with a * + if (isset($this->p_vars['line'][$i])) + $this->p_vars['docblock_desc']->add($this->p_vars['line'][$i]); + } + + + $this->p_vars[$this->p_vars['docblock_type']]->setDesc($this->p_vars['docblock_desc']); + unset($this->p_vars['docblock_desc']); +// var_dump($this->p_vars[$this->p_vars['docblock_type']]); +// exit; + if ($this->p_vars['docblock_type'] == 'docblock') + { + $this->publishEvent(PHPDOCUMENTOR_EVENT_DOCBLOCK,$this->p_vars[$this->p_vars['docblock_type']]); + unset($this->p_vars[$this->p_vars['docblock_type']]); + $this->p_vars[$this->p_vars['docblock_type']] = new parserDocBlock(); + } + $this->p_flags['in_desc'] = true; + $this->p_flags['in_tag'] = false; + $this->p_flags['useperiod'] = false; + $this->p_vars['line'] = array(); + $this->p_vars['linecount'] = 0; + $this->p_flags['start_docblock'] = true; + $this->p_flags['valid_newline'] = true; + $this->wp->setWhitespace(false); + } + } + + /** + * handler for DOCKEYWORD_DESC. + * this handler parses the short and long description of a dockeyword + */ + + function JavaDochandleDesc($word, $pevent) + { + if ($this->p_flags['valid_newline']) + { + if ($word == '@' && $this->p_flags['startline']) + { + return $this->handleTag($word, $pevent); + } + if (!isset($this->p_vars['line'][$this->p_vars['linecount']])) + { + $this->p_vars['line'][$this->p_vars['linecount']] = new parserStringWithInlineTags; + } + if ($this->p_vars['last_word'] == "." && $this->p_flags['useperiod'] == false) + { + $this->p_vars['periodline'] = $this->p_vars['linecount']; + $this->p_vars['shortdesc'] = new parserDesc; + for($i = 0; ($i <= $this->p_vars['periodline']) && ($i < count($this->p_vars['line'])); $i++) + { + if (isset($this->p_vars['line'][$i])) + $this->p_vars['shortdesc']->add($this->p_vars['line'][$i]); + } + $this->p_flags['useperiod'] = true; + } + $this->p_vars['line'][$this->p_vars['linecount']]->add($word); +// debug("DESC $word"); + } + $this->handleCR($word); + } + + /** + * handler for DOCBLOCK. + * this handler recognizes @tags in DocBlocks and parses them for display. + * It also parses out unknown tags into their own array for use by the docblock + */ + + function BetterhandleDocblock($word, $pevent) + { + $e1 = $this->checkEventPush( $word, $pevent); + if (!$this->wp->returnWhiteSpace) + { + addErrorDie(PDERROR_NEED_WHITESPACE); + } + if (!isset($this->p_vars[$this->p_vars['docblock_type']]) || !$this->p_vars[$this->p_vars['docblock_type']]) + { + $this->p_vars[$this->p_vars['docblock_type']] = new parserDocBlock(); + $this->p_vars['returntype'] = false; + $this->p_vars['vartype'] = false; + $this->p_flags['startdocblock'] = true; + $this->p_flags['valid_newline'] = true; + $this->p_flags['startline'] = true; + $this->p_flags['newline'] = true; + $this->p_flags['in_desc'] = true; + $this->p_flags['in_tag'] = false; + $this->p_flags['useperiod'] = false; + $this->p_vars['line'] = array(); + $this->p_vars['linecount'] = 0; + } + $e = $this->checkEventPop( $word, $pevent); + if (!$e1 && !$e) + { + if ($this->p_flags['in_desc']) $this->handleDesc($word, $pevent); + else $this->handleTags($word, $pevent); + } + if ($e) + { + if (!isset($this->p_vars['periodline'])) $this->p_vars['periodline'] = 0; + if ($this->p_vars['periodline'] > 3) + { + $this->p_flags['useperiod'] = false; + } else + { + for($i = 0; $i < $this->p_vars['periodline']; $i++) + { + if (isset($this->p_vars['line'][$i])) + { + if ($this->p_vars['line'][$i]->trimmedStrlen() == 0 && isset($this->p_vars['line'][$i - 1]) && $this->p_vars['line'][$i - 1]->trimmedStrlen()) + { + $this->p_vars['periodline'] = $i; + } + } + } + } + // figure out the shortdesc + if ($this->p_flags['useperiod'] === false) + { + // use the first non blank line for short desc + for($i = 0; $i < count($this->p_vars['line']); $i++) + { + if (!isset($this->p_vars['line'][$i])) + $this->p_vars['line'][$i] = new parserStringWithInlineTags; + if ($this->p_vars['line'][$i]->trimmedStrlen() > 0) + { + $this->p_vars['periodline'] = $i; + $i = count($this->p_vars['line']); + } + } + + // check to see if we are going to use a blank line to end the shortdesc + // this can only be in the first 4 lines + if (count($this->p_vars['line']) > 4) + { + $max = 4; + } else { + $max = count($this->p_vars['line']); + } + + for($i = $this->p_vars['periodline']; $i < $max; $i++) + { + if (isset($this->p_vars['line'][$i])) + if ($this->p_vars['line'][$i]->trimmedStrlen() == 0) + { + $this->p_vars['periodline'] = $i; + $i = $max; + } + } + } + + if ($this->p_vars['docblock_type'] == 'docblock') + { + $this->p_vars['shortdesc'] = new parserDesc; + for($i = 0; ($i <= $this->p_vars['periodline']) && ($i < count($this->p_vars['line'])); $i++) + { + if (isset($this->p_vars['line'][$i])) + $this->p_vars['shortdesc']->add($this->p_vars['line'][$i]); + } + $this->p_vars['periodline']++; + + $this->p_vars['docblock_desc'] = new parserDesc; + if (isset($this->p_vars['docblock_template'])) + { + // copy template values if not overridden + if (!$this->p_vars['docblock']->getExplicitPackage()) + { + if ($p = $this->p_vars['docblock_template']->getKeyword('package')) + { + $this->p_vars['docblock']->addKeyword('package',$p); + $this->p_vars['docblock']->setExplicitPackage(); + } + if ($p = $this->p_vars['docblock_template']->getKeyword('category')) + { + $this->p_vars['docblock']->addKeyword('category',$p); + $this->p_vars['docblock']->setExplicitCategory(); + } + if ($p = $this->p_vars['docblock_template']->getKeyword('subpackage')) + { + $this->p_vars['docblock']->addKeyword('subpackage',$p); + } + } + $tags = $this->p_vars['docblock_template']->listTags(); + foreach($tags as $tag) + { + $this->p_vars['docblock']->addKeyword($tag->keyword,$tag->value); + } + if (!count($this->p_vars['docblock']->params)) $this->p_vars['docblock']->params = $this->p_vars['docblock_template']->params; + $this->p_vars['docblock_desc']->add($this->p_vars['docblock_template']->desc); + } + // echo "i = ".$this->p_vars['periodline']."; i < " . count($this->p_vars['line']) . "\n"; + for($i = $this->p_vars['periodline']; $i < count($this->p_vars['line']); $i++) + { + // the line will not be set if it doesn't start with a * + if (isset($this->p_vars['line'][$i])) + $this->p_vars['docblock_desc']->add($this->p_vars['line'][$i]); + } + } else + { + $this->p_vars['shortdesc'] = new parserDesc; + for($i = 0; ($i <= $this->p_vars['periodline']) && ($i < count($this->p_vars['line'])); $i++) + { + if (isset($this->p_vars['line'][$i])) + $this->p_vars['shortdesc']->add($this->p_vars['line'][$i]); + } + $this->p_vars['periodline']++; + + $this->p_vars['docblock_desc'] = new parserDesc; + for($i=$this->p_vars['periodline']; $i < count($this->p_vars['line']); $i++) + { + if (isset($this->p_vars['line'][$i])) + $this->p_vars['docblock_desc']->add($this->p_vars['line'][$i]); + } + } + + + $this->p_vars[$this->p_vars['docblock_type']]->setShortDesc($this->p_vars['shortdesc']); + $this->p_vars[$this->p_vars['docblock_type']]->setDesc($this->p_vars['docblock_desc']); + unset($this->p_vars['docblock_desc']); +// var_dump($this->p_vars[$this->p_vars['docblock_type']]); +// exit; + if ($this->p_vars['docblock_type'] == 'docblock') + { + $this->publishEvent(PHPDOCUMENTOR_EVENT_DOCBLOCK,$this->p_vars[$this->p_vars['docblock_type']]); + unset($this->p_vars[$this->p_vars['docblock_type']]); + $this->p_vars[$this->p_vars['docblock_type']] = new parserDocBlock(); + } else + { + $this->publishEvent(PHPDOCUMENTOR_EVENT_DOCBLOCK_TEMPLATE,$this->p_vars[$this->p_vars['docblock_type']]); + } + $this->p_flags['in_desc'] = true; + $this->p_flags['in_tag'] = false; + $this->p_flags['useperiod'] = false; + $this->p_vars['line'] = array(); + $this->p_vars['linecount'] = 0; + $this->p_flags['start_docblock'] = true; + $this->p_flags['valid_newline'] = true; + $this->wp->setWhitespace(false); + $this->p_vars['docblock_type'] = 'docblock'; + } + } + + /** + * Handles docblock templates + * @tutorial phpDocumentor.howto.pkg#basics.docblocktemplate + */ + function handleDocBlockTemplate($word, $pevent) + { + $this->p_vars['docblock_type'] = 'docblock_template'; + $this->p_vars['event_stack']->popEvent(); + $this->p_vars['event_stack']->pushEvent(PARSER_EVENT_DOCBLOCK); + // fool the docblock handler into thinking everything is totally normal + $this->p_vars['last_word'] = '/**'; + $pevent = PARSER_EVENT_DOCBLOCK; + $this->BetterhandleDocBlock($word, $pevent); + } + + /** + * Handles closing docblock templates /**#@-* / + * @tutorial phpDocumentor.howto.pkg#basics.docblocktemplate + */ + function handleEndDocBlockTemplate($word, $pevent) + { + unset($this->p_vars['docblock_template']); + $this->publishEvent(PHPDOCUMENTOR_EVENT_NEWSTATE,PHPDOCUMENTOR_EVENT_END_DOCBLOCK_TEMPLATE); + $this->p_vars['event_stack']->popEvent(); + } + /**#@-*/ + /** + * Handles a new line in a DocBlock + * @param string token containing a newline \n + * @access private + */ + function handleCR($word) + { + $this->laststart = $this->p_flags['startline']; + if ($word == "\n" || $word == ".\n") + { + $this->p_flags['start_docblock'] = false; + $this->p_flags['newline'] = true; + $this->p_flags['valid_newline'] = false; + if ($this->p_flags['in_desc'] && !$this->p_flags['useperiod']) + { + if ($word == ".\n") + { + $this->p_flags['useperiod'] = true; + $this->p_vars['periodline'] = $this->p_vars['linecount']; + } + } + } else + { + if ($this->p_flags['valid_newline'] && strlen(trim($word))) + { + $this->p_flags['startline'] = false; + } + if ($this->p_flags['newline'] && ($word == '*' || $this->p_flags['start_docblock'])) + { + $this->p_flags['newline'] = false; + $this->p_flags['valid_newline'] = true; + if (!$this->p_flags['start_docblock']) + $this->p_vars['linecount']++; + $this->p_flags['startline'] = true; + $justset = true; +// debug('valid newline'); + } + } + } + + /** + * handler for DOCKEYWORD_DESC. + * this handler parses the short and long description of a dockeyword + * @access private + */ + + function handleDesc($word, $pevent) + { +// echo "|$word|\n"; + if ($this->p_flags['valid_newline']) + { + if ($word == '@' && $this->p_flags['startline']) + { + return $this->handleTag($word, $pevent); + } + if ($this->p_vars['last_word'] == ". " || $this->p_vars['last_word'] == ".\t") + { + $this->p_flags['useperiod'] = true; + $this->p_vars['periodline'] = $this->p_vars['linecount']; + $this->p_vars['linecount']++; + } + if (!isset($this->p_vars['line'][$this->p_vars['linecount']])) + { + $this->p_vars['line'][$this->p_vars['linecount']] = new parserStringWithInlineTags; + } + if ($this->p_flags['startline']) + { + if ($word[0] == ' ') $word = substr($word,1); +// $word = ltrim($word," \t"); + } + if ($word != '') $this->p_vars['line'][$this->p_vars['linecount']]->add($word); +// debug("DESC $word"); + } + $this->handleCR($word); + } + + /**#@+ + * @access private + * @param string token parsed from source + * @param integer parser constant from {@link Parser.inc} + */ + /** + * handler for DOCKEYWORD_TAGS. + * this handler recognizes @tags in DocBlocks and parses them for display + * I think this may be unused. We'll delete from 1.1 if so + */ + function handleTags($word, $pevent) + { + if ($this->p_flags['valid_newline']) + { +// debug("TAGS $word"); + } + $this->handleCR($word); + } + + /** + * handler for DOCKEYWORD. + * this handler recognizes @tags in DocBlocks and parses them for display + */ + function handleTag($word, $pevent) + { + if ($this->p_flags['in_desc'] && !$this->p_flags['valid_newline']) + { + $this->p_vars['event_stack']->popEvent(); + return $this->handleDesc($word, $pevent); + } +// if ($this->p_vars['last_word'] == '@') fancy_debug('here'.$word,$this->p_flags['startline'],$this->p_flags['in_tag']); + if ($this->p_vars['tagname'] == 'author') + { + if ($word == '<') + { + $this->p_vars['event_stack']->pushEvent(PARSER_EVENT_DOCKEYWORD_EMAIL); + return $this->handleDockeywordEmail($word, $pevent); + } + } + if ($this->checkEventPush( $word, $pevent)) return; + if ($this->p_vars['last_word'] == '@' && !$this->p_flags['startline'] && $this->p_flags['in_desc']) + { + // fix 1203445 + if (!isset($this->p_vars['line'][$this->p_vars['linecount']])) + { + $this->p_vars['line'][$this->p_vars['linecount']] = new parserStringWithInlineTags; + } + $this->p_vars['event_stack']->popEvent(); + $this->p_vars['line'][$this->p_vars['linecount']]->add('@'); + return $this->handleDesc($word, $pevent); + } elseif($this->p_vars['last_word'] == '@' && !strlen(trim($word)) && empty($this->p_vars['tagname']) && $this->p_flags['in_desc']) + { + // fix 1203445 + if (!isset($this->p_vars['line'][$this->p_vars['linecount']])) + { + $this->p_vars['line'][$this->p_vars['linecount']] = new parserStringWithInlineTags; + } + $pevent = $this->p_vars['event_stack']->popEvent(); + $this->p_vars['line'][$this->p_vars['linecount']]->add('@'); + return $this->handleDesc($word, $pevent); + } + if ($word == '@' && $this->p_flags['startline'] && $this->p_flags['in_tag']) + { + $this->wp->backupPos($word); + $white = $this->wp->returnWhiteSpace; + $this->wp->setWhitespace(true); + $word1 = $this->wp->getWord(); + $this->wp->backupPos($word1); + if (strlen(trim($word1))) + { + $this->endTag(); + } + $this->wp->getWord(); + $this->wp->setWhitespace($white); + } + $this->p_flags['in_tag'] = true; + $e = $this->checkEventPop($word, $pevent); + if (!$e) + { + if ($this->p_flags['valid_newline']) + { + if (($this->p_flags['startline'] || $this->laststart) && $word != '@') + { + if ($this->p_vars['last_word'] == '@') + { +// debug("TAGSTART $word"); + $this->p_flags['in_tag'] = true; + $this->p_vars['tagname'] = $word; + $this->p_flags['startline'] = false; + $this->p_vars['tag_value'] = new parserStringWithInlineTags; + } else + { +// debug("TAG1 $word"); + if (isset($this->tagHandlers[$this->p_vars['tagname']])) + $handler = $this->tagHandlers[$this->p_vars['tagname']]; + else $handler = $this->tagHandlers['*']; + $this->$handler($word); + } + } else + { + if (empty($this->p_vars['tagname'])) + { + if ($this->p_flags['in_desc']) + { + $this->p_flags['in_tag'] = false; + // fix 1203445 + if (!isset($this->p_vars['line'][$this->p_vars['linecount']])) + { + $this->p_vars['line'][$this->p_vars['linecount']] = + new parserStringWithInlineTags; + } + $this->p_vars['line'][$this->p_vars['linecount']]->add('@'); + $this->p_vars['event_stack']->popEvent(); + $this->handleCR($word); + return $this->handleDesc($word, $pevent); + } + } +// debug("TAG2 $word"); + if (isset($this->tagHandlers[$this->p_vars['tagname']])) + $handler = $this->tagHandlers[$this->p_vars['tagname']]; + else $handler = $this->tagHandlers['*']; + $this->$handler($word); + } + } + $this->handleCR($word); + } + $this->p_flags['in_desc'] = false; + if ($e) + { + $this->endTag(); + $this->wp->setWhitespace(false); + // walk back a word + $this->wp->backupPos($word); + $this->wp->setWhitespace(true); + } + } + /**#@-*/ + /** + * Called to clean up at the end of parsing a @tag in a docblock + */ + function endTag() + { + if (isset($this->tagHandlers[$this->p_vars['tagname']])) + $handler = $this->tagHandlers[$this->p_vars['tagname']]; + else $handler = $this->tagHandlers['*']; + $this->$handler(false); + $this->p_vars['tagname'] = ''; + $this->p_flags['startline'] = true; +// debug("ENDTAG"); + } + + /**#@+ + * Tag Handlers + * @param string + */ + /** + * Handles all standard tags that only have a description + */ + function defaultTagHandler($word) + { + if ($word !== false) + { + $this->p_vars['tag_value']->add($word); + } else + { + $this->p_vars[$this->p_vars['docblock_type']]->addKeyword($this->p_vars['tagname'],$this->p_vars['tag_value']); + } + } + + /** + * Handles tags like '@filesource' that only work in PHP 4.3.0+ + */ + function invalidTagHandler($word) + { + if ($word === false) + { + addError(PDERROR_TAG_NOT_HANDLED,$this->p_vars['tagname']); + } + } + + /** + * handles @package + * @tutorial tags.package.pkg + */ + function packageTagHandler($word) + { + if ($word !== false) + { + $this->p_vars['tag_value']->add($word); + } else + { + $this->p_vars[$this->p_vars['docblock_type']]->addKeyword($this->p_vars['tagname'],$this->p_vars['tag_value']); + $this->p_vars[$this->p_vars['docblock_type']]->setExplicitPackage(); + } + } + + /** + * handles @example + * @tutorial tags.example.pkg + */ + function exampleTagHandler($word) + { + if ($word !== false) + { + $this->p_vars['tag_value']->add($word); + } else + { + $this->p_vars[$this->p_vars['docblock_type']]->addExample($this->p_vars['tag_value'], $this->p_vars['parsepath']); + } + } + + /** + * handles @category + * @tutorial tags.category.pkg + */ + function categoryTagHandler($word) + { + if ($word !== false) + { + $this->p_vars['tag_value']->add($word); + } else + { + $this->p_vars[$this->p_vars['docblock_type']]->addKeyword($this->p_vars['tagname'],$this->p_vars['tag_value']); + $this->p_vars[$this->p_vars['docblock_type']]->setExplicitCategory(); + } + } + + /** + * handles @global + * @tutorial tags.global.pkg + */ + function globalTagHandler($word) + { + if ($word !== false) + { + // no data yet + $a = trim($this->p_vars['tag_value']->getString()); + if (empty($a)) + { + // not an empty word + if (trim($word) != '') + { + if (!empty($this->p_vars['global_type'])) + { + if (!$this->p_flags['define_global'] && !$this->p_flags['function_global']) + { + // @global type $GLOBALVARNAME ? + if (substr($word,0,1) == '$') + { + $this->p_flags['define_global'] = true; + $this->p_flags['function_global'] = false; + $this->p_vars['find_global'] = $word; + } else + { // function @global type description + $this->p_flags['function_global'] = true; + $this->p_flags['define_global'] = false; + $this->p_vars['tag_value']->add($word); + } + } else + { + if ($this->p_flags['define_global']) + { + $this->p_vars['find_global'] .= $word; + } elseif($this->p_flags['function_global']) + { + // description, to be added to the tag + $this->p_vars['tag_value']->add($word); + } + } + } else + { + $this->p_vars['global_type'] = $word; + } + } else $this->p_vars['tag_value']->add($word); // add whitespace to the tag description + } else + { // tag_value has data, must be a function @global + $this->p_vars['tag_value']->add($word); + } + } else + { // endtag + if ($this->p_flags['define_global']) + { + $this->findGlobal($this->p_vars['find_global']); + } + elseif ($this->p_flags['function_global']) + { + $this->p_vars[$this->p_vars['docblock_type']]->addFuncGlobal($this->p_vars['global_type'],$this->p_vars['tag_value']); + $this->p_vars['global_type'] = ''; + } + else + { + addError(PDERROR_MALFORMED_GLOBAL_TAG); + } + $this->p_vars['find_global'] = ''; + $this->p_flags['define_global'] = false; + $this->p_flags['function_global'] = false; + } + } + + /** + * handles @staticvar + * @tutorial tags.staticvar.pkg + */ + function staticvarTagHandler($word) + { + if ($word !== false) + { + if (!$this->p_vars['returntype']) $this->p_vars['returntype'] = trim($word); + else + { + if (!$this->p_vars['paramname']) + { + if (substr(trim($word),0,1) == "$") + $this->p_vars['paramname'] = trim($word); + else $this->p_vars['tag_value']->add($word); + } else + { + if (0)//strtolower($this->p_vars['paramtype']) == 'object') + { + if (strlen(trim($word))) + $this->p_vars['paramname'] = trim($word); + } else $this->p_vars['tag_value']->add($word); + } + } + } else + { + if (!$this->p_vars['paramname']) + $this->p_vars[$this->p_vars['docblock_type']]->addStaticVar(null,$this->p_vars['returntype'],$this->p_vars['tag_value']); + else + $this->p_vars[$this->p_vars['docblock_type']]->addStaticVar($this->p_vars['paramname'],$this->p_vars['returntype'],$this->p_vars['tag_value']); + $this->p_vars['paramname'] = false; + $this->p_vars['returntype'] = false; + } + } + + /** + * handles @uses + * @tutorial tags.uses.pkg + */ + function usesTagHandler($word) + { + if ($word !== false) + { + if (!$this->p_vars['seelement']) $this->p_vars['seelement'] = trim($word); + else + { + $this->p_vars['tag_value']->add($word); + } + } else + { + $see = new parserStringWithInlineTags; + $see->add($this->p_vars['seelement']); + $this->p_vars[$this->p_vars['docblock_type']]->addUses($see,$this->p_vars['tag_value']); + $this->p_vars['seelement'] = false; + } + } + + /** + * handles @param + * @tutorial tags.param.pkg + */ + function paramTagHandler($word) + { + if ($word !== false) + { + if (!$this->p_vars['returntype']) $this->p_vars['returntype'] = trim($word); + else + { + if (!$this->p_vars['paramname']) + { + if (substr(trim($word),0,1) == "$" || substr(trim($word),0,2) == "&$") + $this->p_vars['paramname'] = trim($word); + else $this->p_vars['tag_value']->add($word); + } else + { + if (0)//strtolower($this->p_vars['paramtype']) == 'object') + { + if (strlen(trim($word))) + $this->p_vars['paramname'] = trim($word); + } else $this->p_vars['tag_value']->add($word); + } + } + } else + { + if (!$this->p_vars['paramname']) + $this->p_vars[$this->p_vars['docblock_type']]->addParam(null,$this->p_vars['returntype'],$this->p_vars['tag_value']); + else + $this->p_vars[$this->p_vars['docblock_type']]->addParam($this->p_vars['paramname'],$this->p_vars['returntype'],$this->p_vars['tag_value']); + $this->p_vars['paramname'] = false; + $this->p_vars['returntype'] = false; + } + } + + /** + * handles @return + * @tutorial tags.return.pkg + */ + function returnTagHandler($word) + { + if ($word !== false) + { + if (!$this->p_vars['returntype']) $this->p_vars['returntype'] = trim($word); + else + { + if (strtolower($this->p_vars['returntype']) == 'object') + { + if (strlen(trim($word))) + $this->p_vars['returntype'] = trim($word); + } else $this->p_vars['tag_value']->add($word); + } + } else + { + $this->p_vars[$this->p_vars['docblock_type']]->addReturn($this->p_vars['returntype'],$this->p_vars['tag_value']); + $this->p_vars['returntype'] = false; + } + } + + /** + * handles @var + * @tutorial tags.var.pkg + */ + function varTagHandler($word) + { + if ($word) + { + if (!$this->p_vars['vartype']) $this->p_vars['vartype'] = trim($word); + else + { + if (strtolower($this->p_vars['vartype']) == 'object') + { + if (strlen(trim($word))) + $this->p_vars['vartype'] = trim($word); + } + else $this->p_vars['tag_value']->add($word); + } + } elseif ($word === false) + { + $this->p_vars[$this->p_vars['docblock_type']]->addVar($this->p_vars['vartype'],$this->p_vars['tag_value']); + $this->p_vars['vartype'] = false; + } + } + + /** + * Handles @property(-read or -write) and @method magic tag + */ + function propertyTagHandler( $word ) + { + if ( $word !== false ) + { + if ( !$this->p_vars['returntype'] ) + $this->p_vars['returntype'] = trim( $word ); + else + { + if ( !$this->p_vars['property_name'] ) + { + if ( substr( trim( $word ), 0, 1 ) == "$" + || substr(trim($word), 0, 2) == "&$" + || substr(trim($word), -2, 2) == "()" + ) + $this->p_vars['property_name'] = trim( $word ); + else + $this->p_vars['tag_value']->add( $word ); + } + else + { + $this->p_vars['tag_value']->add( $word ); + } + } + } + else + { + $this->p_vars[$this->p_vars['docblock_type']]->addProperty( $this->p_vars['tagname'], + $this->p_vars['property_name'], + $this->p_vars['returntype'], + $this->p_vars['tag_value'] ); + $this->p_vars['property_name'] = false; + $this->p_vars['returntype'] = false; + } + } + + /**#@-*/ + /** @access private */ + function getSource() + { + $this->p_flags['get_source'] = true; + } + /**#@+ + * @access private + * @param string token parsed from source + * @param integer parser constant from {@link Parser.inc} + */ + /** + * handler for DOCKEYWORD_EMAIL. + * this handler recognizes angle brackets < and > surrounding an email address in an @author tag, + * and returns a mailto: hyperlink + */ + + function handleDockeywordEmail($word, $pevent) + { + //echo $this->wp->getPos() . ": |$word|\n"; + if (!$this->checkEventPop($word,$pevent) && $word != "<") + { + if (strstr($word,"@")) + { + $this->p_vars['tag_value']->add('<'); + $this->p_vars['tag_value']->add(new parserLinkInlineTag("mailto:$word",$word)); + $this->p_vars['tag_value']->add('>'); + } else { + $this->p_vars['tag_value']->add("<$word>"); + } + } + } + + /** + * handler for INLINE_DOCKEYWORD. + * this handler recognizes {@inline tags} like link, and parses them, replacing them directly + * in the text flow with their output. + */ + + function handleInlineDockeyword($word, $pevent) + { + // echo $this->wp->getPos() . ": |$word|\n"; + + // echo "docktype: $this->p_vars['inline_dockeyword_type']\n"; + if (!isset($this->p_vars['inline_dockeyword_type'])) $this->p_vars['inline_dockeyword_type'] = false; + if (!isset($this->p_vars['inline_dockeyword_data'])) $this->p_vars['inline_dockeyword_data'] = ''; + if (!$this->p_vars['inline_dockeyword_type']) + { + if (in_array($word,$this->allowableInlineTags)) + { + if ($word == '}') + $this->p_vars['inline_dockeyword_type'] = ''; + else + $this->p_vars['inline_dockeyword_type'] = strtolower($word); + $this->p_vars['whitesp'] = $this->wp->returnWhiteSpace; + $this->wp->setWhiteSpace(true); + } else { + if ($this->p_flags['in_desc']) + { + // fix 1203445 + if (!isset($this->p_vars['line'][$this->p_vars['linecount']])) + { + $this->p_vars['line'][$this->p_vars['linecount']] = + new parserStringWithInlineTags; + } + if ($word == '}') + { + $this->p_vars['line'][$this->p_vars['linecount']]->add('{@'); + } else + { + $this->p_vars['line'][$this->p_vars['linecount']]->add('{@'.$word); + } + } elseif($this->p_flags['in_tag']) + { + if ($word == '}') + $this->p_vars['tag_value']->add('{@'.$word); + else + $this->p_vars['tag_value']->add('{@'.$word); + } + $this->p_vars['event_stack']->popEvent(); + $this->p_vars['inline_dockeyword_type'] = false; + $this->p_vars['inline_dockeyword_data'] = ''; + return; + } + } else + { + if ($word != "}") + { + $this->p_vars['inline_dockeyword_data'] .= $word; + } + } + if ($this->checkEventPop($word,$pevent)) + { + $this->wp->setWhiteSpace($this->p_vars['whitesp']); + if ($this->p_vars['inline_dockeyword_type']=='link') + { + // support hyperlinks of any protocol + if (is_numeric(strpos($this->p_vars['inline_dockeyword_data'],'://')) || (strpos(trim($this->p_vars['inline_dockeyword_data']),'mailto:') === 0)) + { + // if there is more than 1 parameter, the stuff after the space is the hyperlink text + if (strpos(trim($this->p_vars['inline_dockeyword_data']),' ')) + { + $i1 = strpos(trim($this->p_vars['inline_dockeyword_data']),' ') + 1; + $link = substr(trim($this->p_vars['inline_dockeyword_data']),0,$i1 - 1); + $text = substr(trim($this->p_vars['inline_dockeyword_data']),$i1); + $this->p_vars['inline_dockeyword_data'] = new parserLinkInlineTag($link,$text); +// '<a href="'.$link.'">'.$text.'</a>'; + } + else + { + $this->p_vars['inline_dockeyword_data'] = new parserLinkInlineTag($this->p_vars['inline_dockeyword_data'],$this->p_vars['inline_dockeyword_data']); + } +// '<a href="'.$this->p_vars['inline_dockeyword_data'].'">'.$this->p_vars['inline_dockeyword_data'].'</a>'; + } else + { + if (!strpos($this->p_vars['inline_dockeyword_data'],',')) + { + $testp = explode('#',$this->p_vars['inline_dockeyword_data']); + if (count($testp) - 1) + $this->p_vars['inline_dockeyword_data'] = new parserLinkInlineTag($this->p_vars['inline_dockeyword_data'],$testp[1]); + else + $this->p_vars['inline_dockeyword_data'] = new parserLinkInlineTag($this->p_vars['inline_dockeyword_data'],$this->p_vars['inline_dockeyword_data']); + } else + $this->p_vars['inline_dockeyword_data'] = new parserLinkInlineTag($this->p_vars['inline_dockeyword_data'],$this->p_vars['inline_dockeyword_data']); + } + } + if ($this->p_vars['inline_dockeyword_type'] == 'tutorial') + { + $this->p_vars['inline_dockeyword_data'] = new parserTutorialInlineTag($this->p_vars['inline_dockeyword_data'],$this->p_vars['inline_dockeyword_data']); + } + if ($this->p_vars['inline_dockeyword_type'] == 'source') + { + $this->getSource(); + $this->p_vars['inline_dockeyword_data'] = new parserSourceInlineTag($this->p_vars['inline_dockeyword_data']); + } + if ($this->p_vars['inline_dockeyword_type'] == 'inheritdoc') + { + $this->p_vars['inline_dockeyword_data'] = new parserInheritdocInlineTag(); + } + if ($word == '*/') + { + if (!isset($this->p_vars['inline_dockeyword_type'])) $this->p_vars['inline_dockeyword_type'] = ''; + if (!isset($this->p_vars['tagname'])) $this->p_vars['tagname'] = ''; + if (!isset($this->p_vars['tag_value']) || !is_object($this->p_vars['tag_value'])) $this->p_vars['tag_value'] = new parserStringWithInlineTags; + addError(PDERROR_UNTERMINATED_INLINE_TAG,$this->p_vars['inline_dockeyword_type'],$this->p_vars['tagname'],'@'.$this->p_vars['tagname'].' '.$this->p_vars['tag_value']->getString()); + // when we add the error class, raise error here: we reached the end of the docblock + $this->wp->backupPos($word); + } + if ($this->p_flags['in_desc']) + { + $this->p_vars['line'][$this->p_vars['linecount']]->add($this->p_vars['inline_dockeyword_data']); + $this->p_vars['inline_dockeyword_type'] = false; + $this->p_vars['inline_dockeyword_data'] = ''; + } + elseif ($this->p_flags['in_tag']) + { + $this->p_vars['tag_value']->add($this->p_vars['inline_dockeyword_data']); + $this->p_vars['inline_dockeyword_type'] = false; + $this->p_vars['inline_dockeyword_data'] = ''; + } + } + } + + /** + * handler for INCLUDE. + * this handler recognizes include/require/include_once/include_once statements, and publishes the + * data to Render + */ + + function handleInclude($word, $pevent) + { + if (!$this->p_flags['in_include']) + { + $this->p_vars['linenum'] = $this->wp->linenum; + } + $this->p_flags['in_include'] = true; + $a = $this->checkEventPush( $word, $pevent); + if (!$this->p_flags['includename_isset']) + { + $this->p_flags['includename_isset'] = true; + $this->p_vars['include_name'] = $this->p_vars['last_word']; + if ($a) + $this->p_vars['include_value'] = ''; + else + $this->p_vars['include_value'] = $word; + unset($this->p_vars['quote_data']); + } else + { + if (!$a) + { + if (empty($this->p_vars['include_params_data'])) + { + if (isset($this->p_vars['quote_data'])) + { + $this->p_vars['include_value'] .= '"'.$this->p_vars['quote_data'].'"'; + unset($this->p_vars['quote_data']); + } + if ($word != ';') + $this->p_vars['include_value'] .= $word; + } + } else + { + $this->p_vars['include_params_data'] = ''; + } + } + + if ($this->checkEventPop($word,$pevent)) + { + $this->p_vars['include'] = new parserInclude; + $this->p_vars['include']->setLineNumber($this->p_vars['linenum']); + $this->p_flags['in_include'] = false; + $this->p_vars['include']->setName($this->p_vars['include_name']); + $this->p_vars['include']->setValue($this->p_vars['include_value']); + $this->publishEvent(PHPDOCUMENTOR_EVENT_INCLUDE,$this->p_vars['include']); + $this->p_flags['includename_isset'] = false; + unset($this->p_vars['include']); + unset($this->p_vars['include_name']); + unset($this->p_vars['include_value']); + unset($this->p_vars['include_params_data']); + } + } + + /** + * handler for INCLUDE_PARAMS. + * this handler parses the contents of ( ) in include/require/include_once/include_once statements + */ + + function handleIncludeParams($word, $pevent) + { + $this->checkEventPush( $word, $pevent); + + $this->p_flags['include_parens'] = true; + if(!isset($this->p_vars['include_params_data'])) $this->p_vars['include_params_data'] = ''; + + if ($this->checkEventPop($word,$pevent)) + { + if (isset($this->p_vars['quote_data'])) + { + $this->p_vars['include_value'] = $this->p_vars['include_params_data'].'"'.$this->p_vars['quote_data'].'"'; + unset($this->p_vars['quote_data']); + } else { + if (!empty($this->p_vars['include_params_data'])) + $this->p_vars['include_value'] = $this->p_vars['include_params_data']; + else + $this->p_vars['include_value'] = trim($this->p_vars['last_word']); + } + } + if (isset($this->p_vars['quote_data'])) + { + $this->p_vars['include_params_data'] .= '"'.$this->p_vars['quote_data'].'"'; + unset($this->p_vars['quote_data']); + } + if (($word != "'") && ($word != '"')) + $this->p_vars['include_params_data'] .= $word; + } + + /** + * handler for INCLUDE_PARAMS_PARENTHESIS. + * this handler takes all parenthetical statements within file in: + * include statement include(file), and handles them properly + */ + + function handleIncludeParamsParenthesis($word, $pevent) + { + if (isset($this->p_vars['quote_data'])) + { + $this->p_vars['include_params_data'] .= '"'.$this->p_vars['quote_data'].'"'; + unset($this->p_vars['quote_data']); + } + $this->p_vars['include_params_data'] .= $word; + $this->checkEventPush( $word, $pevent); + $this->checkEventPop( $word, $pevent); + } + /**#@-*/ + /** + * this function checks whether parameter $word is a token for pushing a new event onto the Event Stack. + * @return mixed returns false, or the event number + */ + + function checkEventPush($word,$pevent) + { + $e = false; + if (isset($this->pushEvent[$pevent])) + { + if (isset($this->pushEvent[$pevent][strtolower($word)])) + $e = $this->pushEvent[$pevent][strtolower($word)]; + } + if ($e) + { + $this->p_vars['event_stack']->pushEvent($e); + return $e; + } else { + return false; + } + } + + /** + * this function checks whether parameter $word is a token for popping the current event off of the Event Stack. + * @return mixed returns false, or the event number popped off of the stack + */ + + function checkEventPop($word,$pevent) + { + if (!isset($this->popEvent[$pevent])) return false; + if (in_array(strtolower($word),$this->popEvent[$pevent])) + { + return $this->p_vars['event_stack']->popEvent(); + } else { + return false; + } + } + + /** + * setup the parser tokens, and the pushEvent/popEvent arrays + * @see $tokens, $pushEvent, $popEvent + */ + + function setupStates() + { + $this->tokens[STATE_PHPCODE] = array(" ", "\t",";","?>","</script>","/**#@+","/**#@-*/","/**", "//","/*","#","\r\n","\n","\r","(",'<<<','"',"'"); + $this->tokens[STATE_QUOTE] = array("\\\"","\\\\","\""); + $this->tokens[STATE_LOGICBLOCK] = array("{","}","\"","'","/*","//","#","?>","</script>",'<<<','global','static'); + $this->tokens[STATE_FUNC_GLOBAL] = array("\"","'","/*","//","#",";",","); + $this->tokens[STATE_STATIC_VAR] = array("\"","'","/*","//","#",";",",",'=','array'); + $this->tokens[STATE_STATIC_VAR_VALUE] = array("/*","//","#"," ","\t",";","=","\"","'","array",","); + $this->tokens[STATE_NOEVENTS] = array("<?php","<?",'<script language="php">'); + $this->tokens[STATE_COMMENTBLOCK] = array("*/","\n"); + $this->tokens[STATE_COMMENT] = array("\r\n","\r","\n"); + $this->tokens[STATE_DEFINE] = array(" ","(",";"); + $this->tokens[STATE_DEFINE_PARAMS] = array("/*","//","#",",",")"," ","'","\"","("); + $this->tokens[STATE_DEFINE_PARAMS_PARENTHESIS] = array("(","'","\"",")"); + $this->tokens[STATE_FUNCTION_PARAMS] = array("/*","//","#","\"",",",")","="," ","'","("); + $this->tokens[STATE_SINGLEQUOTE] = array("'","\\'","\\\\"); + $this->tokens[STATE_CLASS] = array(" ", "\t", "?>", "</script>", ";", "}", "{", + "/**#@+", "/**#@-*/", "/**", "//", "/*", "#", + "\r\n", "\n", "\r","("); + $this->tokens[STATE_DOCBLOCK] = array("*/","*","@","\r\n","\n","\r",". ",".\n",".\t",'{@'); + $this->tokens[STATE_DOCBLOCK_TEMPLATE] = array("*/","*","@","\r\n","\n","\r",". ",".\n",".\t",'{@'); + $this->tokens[STATE_DOCKEYWORD] = array("@","*/","*","\n","\r\n","\r","\t"," ","<",">",'{@'); + $this->tokens[STATE_INLINE_DOCKEYWORD] = array("{@","}","\t"," ","*/"); + $this->tokens[STATE_DOCKEYWORD_EMAIL] = array(">","\n","\r\n","\r"); + $this->tokens[STATE_VAR] = array("/*","//","#"," ","\t",";","=",",","\"","'","array"); + $this->tokens[STATE_GLOBAL] = array("/*","//","#"," ","\t",";","=","\"","'"); + $this->tokens[STATE_GLOBAL_VALUE] = array("/*","//","#"," ","\t",";","=","\"","'","array"); + $this->tokens[STATE_ARRAY] = array("/*","//","#","(",")","\"","'","array"); + $this->tokens[STATE_FUNCTION] = array("(","{","}"," ","\t","&","/*","//","#"); + $this->tokens[STATE_OUTPHP] = array("<?php","<?",'<script language="php">'); + $this->tokens[STATE_EOFQUOTE] = array(" ","\t","\n"); + $this->tokens[STATE_ESCAPE] = false;// this tells the word parser to just cycle + $this->tokens[STATE_INCLUDE] = array(" ","(",";","'",'"'); + $this->tokens[STATE_INCLUDE_PARAMS] = array("/*",")"," ","'","\"","("); + $this->tokens[STATE_INCLUDE_PARAMS_PARENTHESIS] = array("(","'","\"",")"); + + // For each event word to event mapings + $this->pushEvent[PARSER_EVENT_QUOTE] = + array( + "\\" => PARSER_EVENT_ESCAPE + ); + $this->popEvent[PARSER_EVENT_QUOTE] = array("\""); +########################## + + $this->pushEvent[PARSER_EVENT_LOGICBLOCK] = + array( + "\"" => PARSER_EVENT_QUOTE, + "'" => PARSER_EVENT_SINGLEQUOTE, + "//" => PARSER_EVENT_COMMENT, + "#" => PARSER_EVENT_COMMENT, + "global" => PARSER_EVENT_FUNC_GLOBAL, + "static" => PARSER_EVENT_STATIC_VAR, + "/*" => PARSER_EVENT_COMMENTBLOCK, + "{" => PARSER_EVENT_LOGICBLOCK, + "?>" => PARSER_EVENT_OUTPHP, + "</script>" => PARSER_EVENT_OUTPHP, + "<<<" => PARSER_EVENT_EOFQUOTE + ); + $this->popEvent[PARSER_EVENT_LOGICBLOCK] = array("}"); +########################## + + $this->pushEvent[PARSER_EVENT_FUNC_GLOBAL] = + array( + "\"" => PARSER_EVENT_QUOTE, + "'" => PARSER_EVENT_SINGLEQUOTE, + "//" => PARSER_EVENT_COMMENT, + "#" => PARSER_EVENT_COMMENT, + "/*" => PARSER_EVENT_COMMENTBLOCK, + ); + $this->popEvent[PARSER_EVENT_FUNC_GLOBAL] = array(";"); +########################## + + $this->pushEvent[PARSER_EVENT_STATIC_VAR] = + array( + "\"" => PARSER_EVENT_QUOTE, + "'" => PARSER_EVENT_SINGLEQUOTE, + "//" => PARSER_EVENT_COMMENT, + "#" => PARSER_EVENT_COMMENT, + "/*" => PARSER_EVENT_COMMENTBLOCK, + "=" => PARSER_EVENT_STATIC_VAR_VALUE, + ); + $this->popEvent[PARSER_EVENT_STATIC_VAR] = array(";"); +########################## + + $this->pushEvent[PARSER_EVENT_STATIC_VAR_VALUE] = + array( + "\"" => PARSER_EVENT_QUOTE, + "'" => PARSER_EVENT_SINGLEQUOTE, + "array" => PARSER_EVENT_ARRAY, + "/*" => PARSER_EVENT_COMMENTBLOCK, + "//" => PARSER_EVENT_COMMENT, + "#" => PARSER_EVENT_COMMENT + ); + $this->popEvent[PARSER_EVENT_STATIC_VAR_VALUE] = array(";",","); +########################## + + $this->pushEvent[PARSER_EVENT_NOEVENTS] = + array( + "<?php" => PARSER_EVENT_PHPCODE, + "<?" => PARSER_EVENT_PHPCODE, + '<script language="php">' => PARSER_EVENT_PHPCODE, + ); +########################## + + $this->pushEvent[PARSER_EVENT_PHPCODE] = + array( + "function" => PARSER_EVENT_FUNCTION, + "class" => PARSER_EVENT_CLASS, + "define" => PARSER_EVENT_DEFINE, + "include_once" => PARSER_EVENT_INCLUDE, + "require_once" => PARSER_EVENT_INCLUDE, + "include" => PARSER_EVENT_INCLUDE, + "require" => PARSER_EVENT_INCLUDE, + "//" => PARSER_EVENT_COMMENT, + "#" => PARSER_EVENT_COMMENT, + "/*" => PARSER_EVENT_COMMENTBLOCK, + "/**" => PARSER_EVENT_DOCBLOCK, + "/**#@+" => PARSER_EVENT_DOCBLOCK_TEMPLATE, + "/**#@-*/" => PARSER_EVENT_END_DOCBLOCK_TEMPLATE, + "\"" => PARSER_EVENT_QUOTE, + "'" => PARSER_EVENT_SINGLEQUOTE, + "<<<" => PARSER_EVENT_EOFQUOTE, + "?>" => PARSER_EVENT_OUTPHP, + "</script>" => PARSER_EVENT_OUTPHP, + ); +########################## + + $this->pushEvent[PARSER_EVENT_FUNCTION] = + array( + "(" => PARSER_EVENT_FUNCTION_PARAMS, + "//" => PARSER_EVENT_COMMENT, + "#" => PARSER_EVENT_COMMENT, + "/*" => PARSER_EVENT_COMMENTBLOCK, + "{" => PARSER_EVENT_LOGICBLOCK + ); + $this->popEvent[PARSER_EVENT_FUNCTION] = array("}"); +########################## + + $this->pushEvent[PARSER_EVENT_DOCBLOCK] = + array( + "@" => PARSER_EVENT_DOCKEYWORD, + "{@" => PARSER_EVENT_INLINE_DOCKEYWORD + ); + $this->popEvent[PARSER_EVENT_DOCBLOCK] = array("*/"); +########################## + + $this->pushEvent[PARSER_EVENT_DOCBLOCK_TEMPLATE] = + array( + "@" => PARSER_EVENT_DOCKEYWORD, + "{@" => PARSER_EVENT_INLINE_DOCKEYWORD + ); + $this->popEvent[PARSER_EVENT_DOCBLOCK_TEMPLATE] = array("*/"); +########################## + + $this->pushEvent[PARSER_EVENT_CLASS] = + array( + "function" => PARSER_EVENT_FUNCTION, + "var" => PARSER_EVENT_VAR, + "/**" => PARSER_EVENT_DOCBLOCK, + "/**#@+" => PARSER_EVENT_DOCBLOCK_TEMPLATE, + "/**#@-*/" => PARSER_EVENT_END_DOCBLOCK_TEMPLATE, + "//" => PARSER_EVENT_COMMENT, + "/*" => PARSER_EVENT_COMMENTBLOCK, + "#" => PARSER_EVENT_COMMENT, + "?>" => PARSER_EVENT_OUTPHP, + "</script>" => PARSER_EVENT_OUTPHP, + ); + $this->popEvent[PARSER_EVENT_CLASS] = array("}"); +########################## + + $this->pushEvent[PARSER_EVENT_DEFINE] = + array( + "/*" => PARSER_EVENT_COMMENTBLOCK, + "(" => PARSER_EVENT_DEFINE_PARAMS + ); + $this->popEvent[PARSER_EVENT_DEFINE] = array(";"); +########################## + + $this->pushEvent[PARSER_EVENT_INCLUDE] = + array( + "/*" => PARSER_EVENT_COMMENTBLOCK, + "(" => PARSER_EVENT_INCLUDE_PARAMS, + "'" => PARSER_EVENT_SINGLEQUOTE, + '"' => PARSER_EVENT_QUOTE, + ); + $this->popEvent[PARSER_EVENT_INCLUDE] = array(";"); +########################## + + $this->pushEvent[PARSER_EVENT_DEFINE_PARAMS] = + array( + "(" => PARSER_EVENT_DEFINE_PARAMS_PARENTHESIS, + "'" => PARSER_EVENT_SINGLEQUOTE, + '"' => PARSER_EVENT_QUOTE, + "/*" => PARSER_EVENT_COMMENTBLOCK, + "//" => PARSER_EVENT_COMMENT, + "#" => PARSER_EVENT_COMMENT + ); + $this->popEvent[PARSER_EVENT_DEFINE_PARAMS] = array(")"); +########################## + + $this->pushEvent[PARSER_EVENT_INCLUDE_PARAMS] = + array( + "(" => PARSER_EVENT_INCLUDE_PARAMS_PARENTHESIS, + "'" => PARSER_EVENT_SINGLEQUOTE, + '"' => PARSER_EVENT_QUOTE, + ); + $this->popEvent[PARSER_EVENT_INCLUDE_PARAMS] = array(")"); +########################## + + $this->pushEvent[PARSER_EVENT_DEFINE_PARAMS_PARENTHESIS] = + array( + "(" => PARSER_EVENT_DEFINE_PARAMS_PARENTHESIS, + "'" => PARSER_EVENT_SINGLEQUOTE, + '"' => PARSER_EVENT_QUOTE, + ); + $this->popEvent[PARSER_EVENT_DEFINE_PARAMS_PARENTHESIS] = array(")"); +########################## + + $this->pushEvent[PARSER_EVENT_INCLUDE_PARAMS_PARENTHESIS] = + array( + "(" => PARSER_EVENT_INCLUDE_PARAMS_PARENTHESIS, + "'" => PARSER_EVENT_SINGLEQUOTE, + '"' => PARSER_EVENT_QUOTE, + ); + $this->popEvent[PARSER_EVENT_INCLUDE_PARAMS_PARENTHESIS] = array(")"); +########################## + + $this->pushEvent[PARSER_EVENT_VAR] = + array( + "\"" => PARSER_EVENT_QUOTE, + "'" => PARSER_EVENT_SINGLEQUOTE, + "array" => PARSER_EVENT_ARRAY, + "/*" => PARSER_EVENT_COMMENTBLOCK, + "//" => PARSER_EVENT_COMMENT, + "#" => PARSER_EVENT_COMMENT + ); + $this->popEvent[PARSER_EVENT_VAR] = array(";"); +########################## + + $this->pushEvent[PARSER_EVENT_DEFINE_GLOBAL] = + array( + "=" => PARSER_EVENT_GLOBAL_VALUE, + "\"" => PARSER_EVENT_QUOTE, + "'" => PARSER_EVENT_SINGLEQUOTE, + "/*" => PARSER_EVENT_COMMENTBLOCK, + "//" => PARSER_EVENT_COMMENT, + "#" => PARSER_EVENT_COMMENT + ); + $this->popEvent[PARSER_EVENT_DEFINE_GLOBAL] = array(";"); +########################## + + $this->pushEvent[PARSER_EVENT_GLOBAL_VALUE] = + array( + "\"" => PARSER_EVENT_QUOTE, + "'" => PARSER_EVENT_SINGLEQUOTE, + "array" => PARSER_EVENT_ARRAY, + "/*" => PARSER_EVENT_COMMENTBLOCK, + "//" => PARSER_EVENT_COMMENT, + "#" => PARSER_EVENT_COMMENT + ); + $this->popEvent[PARSER_EVENT_GLOBAL_VALUE] = array(";"); +########################## + + $this->pushEvent[PARSER_EVENT_COMMENT] = + array( + "\\" => PARSER_EVENT_ESCAPE + ); + $this->popEvent[PARSER_EVENT_COMMENT] = array("\n"); +########################## + + $this->popEvent[PARSER_EVENT_COMMENTBLOCK] = array("*/"); +########################## + $this->pushEvent[PARSER_EVENT_SINGLEQUOTE] = + array( + "\\" => PARSER_EVENT_ESCAPE + ); + + $this->popEvent[PARSER_EVENT_SINGLEQUOTE] = array("'"); +########################## + $this->pushEvent[PARSER_EVENT_FUNCTION_PARAMS] = + array( + "\"" => PARSER_EVENT_QUOTE, + "'" => PARSER_EVENT_SINGLEQUOTE, + "array" => PARSER_EVENT_ARRAY, + "/*" => PARSER_EVENT_COMMENTBLOCK, + "//" => PARSER_EVENT_COMMENT, + "#" => PARSER_EVENT_COMMENT + ); + $this->popEvent[PARSER_EVENT_FUNCTION_PARAMS] = array(")"); +########################## + $this->pushEvent[PARSER_EVENT_DOCKEYWORD] = + array( +// "<" => PARSER_EVENT_DOCKEYWORD_EMAIL, + "{@" => PARSER_EVENT_INLINE_DOCKEYWORD, + ); + + $this->popEvent[PARSER_EVENT_DOCKEYWORD] = array("*/"); +########################## + + $this->popEvent[PARSER_EVENT_INLINE_DOCKEYWORD] = array("}","*/"); +########################## + + $this->popEvent[PARSER_EVENT_OUTPHP] = array("<?php","<?",'<script language="php">'); +########################## + + $this->popEvent[PARSER_EVENT_DOCKEYWORD_EMAIL] = array(">","\n"); + +########################## + $this->pushEvent[PARSER_EVENT_ARRAY] = + array( + "\"" => PARSER_EVENT_QUOTE, + "'" => PARSER_EVENT_SINGLEQUOTE, + "array" => PARSER_EVENT_ARRAY, + "/*" => PARSER_EVENT_COMMENTBLOCK, + "//" => PARSER_EVENT_COMMENT, + "#" => PARSER_EVENT_COMMENT + ); + $this->popEvent[PARSER_EVENT_ARRAY] = array(")"); +########################## + } + + /** + * tell the parser's WordParser {@link $wp} to set up tokens to parse words by. + * tokens are word separators. In English, a space or punctuation are examples of tokens. + * In PHP, a token can be a ;, a parenthesis, or even the word "function" + * @param $value integer an event number + * @see WordParser + */ + + function configWordParser($e) + { + $this->wp->setSeperator($this->tokens[($e + 100)]); + } + + /** + * Debugging function, takes an event number and attempts to return its name + * @param $value integer an event number + */ + + + function getParserEventName ($value) + { + $lookup = array( + PARSER_EVENT_NOEVENTS => "PARSER_EVENT_NOEVENTS", + PARSER_EVENT_PHPCODE => "PARSER_EVENT_PHPCODE", + PARSER_EVENT_DOCBLOCK => "PARSER_EVENT_DOCBLOCK", + PARSER_EVENT_FUNCTION => "PARSER_EVENT_FUNCTION", + PARSER_EVENT_CLASS => "PARSER_EVENT_CLASS", + PARSER_EVENT_DEFINE => "PARSER_EVENT_DEFINE", + PARSER_EVENT_DEFINE_PARAMS => "PARSER_EVENT_DEFINE_PARAMS", + PARSER_EVENT_COMMENT => "PARSER_EVENT_COMMENT", + PARSER_EVENT_COMMENTBLOCK => "PARSER_EVENT_COMMENTBLOCK", + PARSER_EVENT_ESCAPE => "PARSER_EVENT_ESCAPE", + PARSER_EVENT_QUOTE => "PARSER_EVENT_QUOTE", + PARSER_EVENT_FUNCTION_PARAMS => "PARSER_EVENT_FUNCTION_PARAMS", + PARSER_EVENT_SINGLEQUOTE => "PARSER_EVENT_SINGLEQUOTE", + PARSER_EVENT_VAR => "PARSER_EVENT_VAR", + PARSER_EVENT_LOGICBLOCK => "PARSER_EVENT_LOGICBLOCK", + PARSER_EVENT_OUTPHP => "PARSER_EVENT_OUTPHP", + PARSER_EVENT_DOCKEYWORD => "PARSER_EVENT_DOCKEYWORD", + PARSER_EVENT_DOCKEYWORD_EMAIL => "PARSER_EVENT_DOCKEYWORD_EMAIL", + PARSER_EVENT_ARRAY => "PARSER_EVENT_ARRAY", + PARSER_EVENT_INLINE_DOCKEYWORD => "PARSER_EVENT_INLINE_DOCKEYWORD", + PARSER_EVENT_EOFQUOTE => "PARSER_EVENT_EOFQUOTE", + PARSER_EVENT_INCLUDE => "PARSER_EVENT_INCLUDE", + PARSER_EVENT_INCLUDE_PARAMS => "PARSER_EVENT_INCLUDE_PARAMS", + PARSER_EVENT_INCLUDE_PARAMS_PARENTHESIS => "PARSER_EVENT_INCLUDE_PARAMS_PARENTHESIS", + PARSER_EVENT_DEFINE_PARAMS_PARENTHESIS => "PARSER_EVENT_DEFINE_PARAMS_PARENTHESIS", + PARSER_EVENT_DEFINE_GLOBAL => "PARSER_EVENT_DEFINE_GLOBAL", + PARSER_EVENT_GLOBAL_VALUE => "PARSER_EVENT_GLOBAL_VALUE", + PARSER_EVENT_FUNC_GLOBAL => "PARSER_EVENT_FUNC_GLOBAL", + PARSER_EVENT_STATIC_VAR => "PARSER_EVENT_STATIC_VAR", + PARSER_EVENT_DOCBLOCK_TEMPLATE => "PARSER_EVENT_DOCBLOCK_TEMPLATE", + PARSER_EVENT_END_DOCBLOCK_TEMPLATE => "PARSER_EVENT_END_DOCBLOCK_TEMPLATE", + PARSER_EVENT_METHOD_LOGICBLOCK => 'PARSER_EVENT_METHOD_LOGICBLOCK', + PARSER_EVENT_CLASS_MEMBER => 'PARSER_EVENT_CLASS_MEMBER', + PARSER_EVENT_METHOD => 'PARSER_EVENT_METHOD', + PARSER_EVENT_QUOTE_VAR => 'PARSER_EVENT_QUOTE_VAR', + PARSER_EVENT_ACCESS_MODIFIER => 'PARSER_EVENT_ACCESS_MODIFIER', + PARSER_EVENT_IMPLEMENTS => 'PARSER_EVENT_IMPLEMENTS', + PARSER_EVENT_CLASS_CONSTANT => 'PARSER_EVENT_CLASS_CONSTANT', + PARSER_EVENT_VAR_ARRAY => 'PARSER_EVENT_VAR_ARRAY', + PARSER_EVENT_VAR_ARRAY_COMMENT =>'PARSER_EVENT_VAR_ARRAY_COMMENT', + ); + if (isset($lookup[$value])) + return $lookup[$value]; + else return $value; + } +} + +/** + * Global package page parser + * + * @deprecated in favor of tutorials + * @tutorial tutorials.pkg + * @package phpDocumentor + * @subpackage Parsers + */ +class ppageParser extends Parser +{ + /** @var string */ + var $package = false; + /** @var string */ + var $subpackage = ''; + /** + * set up invariant Parser variables + */ + function ppageParser() + { + Parser::Parser(); + $this->allowableInlineTags = $GLOBALS['_phpDocumentor_inline_tutorial_tags_allowed']; + $this->eventHandlers = array(); + $this->eventHandlers[PARSER_EVENT_NOEVENTS] = 'defaultHandler'; + $this->eventHandlers[PARSER_EVENT_INLINE_DOCKEYWORD] = 'handleInlineDocKeyword'; + } + + /** + * set up invariant Parser variables + */ + function setupStates() + { + $this->tokens[STATE_NOEVENTS] = array("{@","}"); + $this->tokens[STATE_INLINE_DOCKEYWORD] = array("{@","}","\t"," "); + +########################## + + $this->pushEvent[PARSER_EVENT_NOEVENTS] = + array( + "{@" => PARSER_EVENT_INLINE_DOCKEYWORD + ); +########################## + + $this->popEvent[PARSER_EVENT_INLINE_DOCKEYWORD] = array("}"); + } + + /** + * Parse a new file + * + * @param string $parse_data + * @param string $package + * @param int $subpackage + * @return mixed false or parsed data + */ + function parse (&$parse_data,$xml,$package = 'default',$subpackage = '',$tutorial = '', + $category='default', $path='') + { + $this->setupStates(); + $this->p_vars['total'] = new parserPackagePage($package,$xml); + $this->p_vars['tutorial'] = $tutorial; + $this->_path = $path; + $this->category = $category; + $this->package = $package; + if (!isset($subpackage) || !$subpackage) $subpackage = ''; + $this->subpackage = $subpackage; + if (strlen($parse_data) == 0) + { + return false; + } + + // initialize variables so E_ALL error_reporting doesn't complain + $pevent = 0; + $word = 0; + $this->p_vars['event_stack'] = new EventStack; + // change this to a new ParserStringWithInlineTags, and change all $total .= blah to $total->add(blah) + // then modify phpDocumentor_IntermediateParser->Convert to convert all package pages (the package page handler in phpDocumentor_IntermediateParser should + // save them all in a variable) to perform the linking. then, remove the legacy code from handleDocBlock + // and handleClass in Render.inc, and do a loop that converts each package page, and passes it to handleEvent + // just like Converter::walk does with the other elements. The only other addition that might be good is a + // new descendant of parserElement parserPackagePage that contains the data and stuff. Hope this helps :) + $total = ''; + + $this->wp->setup($parse_data); + + $this->p_flags['reset_quote_data'] = true; + + do + { + $lpevent = $pevent; + $pevent = $this->p_vars['event_stack']->getEvent(); + if ($lpevent != $pevent) + { + $this->p_vars['last_pevent'] = $lpevent; + } + + if ($this->p_vars['last_pevent'] != $pevent) + { + // its a new event so the word parser needs to be reconfigured + $this->configWordParser($pevent); + } + + if (!$xml) + $this->publishEvent(PHPDOCUMENTOR_EVENT_NEWSTATE,($pevent + 100)); + + + $this->p_vars['last_word'] = $word; + $word = $this->wp->getWord(); + + if (PHPDOCUMENTOR_DEBUG == true) + { + echo "LAST: |" . $this->p_vars['last_word'] . "|\n"; + echo "PEVENT: " . $this->getParserEventName($pevent) . "\n"; + echo $this->wp->getPos() . ": |$word|\n"; + } + if (isset($this->eventHandlers[$pevent])) + { + $handle = $this->eventHandlers[$pevent]; + $this->$handle($word, $pevent); + } + } while (!($word === false)); + if (!$xml) + $this->PublishEvent(PHPDOCUMENTOR_EVENT_PACKAGEPAGE,$this->p_vars['total']); + else + return $this->p_vars['total']->value; + } + + /** + * Handles all non-inline tags + * + * @param string token + * @param integer parser event + */ + function defaultHandler($word, $pevent) + { + if (!$this->checkEventPush( $word, $pevent)) + { + if ($word) $this->p_vars['total']->add($word); + } + } + + /** + * handler for INLINE_DOCKEYWORD. + * this handler recognizes {@inline tags} like link, and parses them, replacing them directly + * in the text flow with their output. + * @param string token + * @param integer parser event + */ + + function handleInlineDockeyword($word, $pevent) + { + // echo $this->wp->getPos() . ": |$word|\n"; + + // echo "docktype: $this->p_vars['inline_dockeyword_type']\n"; + if (!isset($this->p_vars['inline_dockeyword_type'])) $this->p_vars['inline_dockeyword_type'] = false; + if (!isset($this->p_vars['inline_dockeyword_data'])) $this->p_vars['inline_dockeyword_data'] = ''; + if (!$this->p_vars['inline_dockeyword_type']) + { + if (in_array($word,$this->allowableInlineTags)) + { + $this->p_vars['inline_dockeyword_type'] = strtolower($word); + $this->p_vars['whitesp'] = $this->wp->returnWhiteSpace; + $this->wp->setWhiteSpace(true); + } else { + if ($word == '}') + $this->p_vars['total']->add('{@'); + else + { + $this->p_vars['total']->add('{@'.$word); + $this->p_vars['event_stack']->popEvent(); + } + $this->p_vars['inline_dockeyword_type'] = false; + $this->p_vars['inline_dockeyword_data'] = ''; + } + } else + { + if ($word != "}") + { + $this->p_vars['inline_dockeyword_data'] .= $word; + } + } + if ($this->checkEventPop($word,$pevent)) + { + $this->wp->setWhiteSpace($this->p_vars['whitesp']); + if ($this->p_vars['inline_dockeyword_type']=='link') + { + // support hyperlinks of any protocol + if (is_numeric(strpos($this->p_vars['inline_dockeyword_data'],'://')) || (strpos(trim($this->p_vars['inline_dockeyword_data']),'mailto:') === 0)) + { + // if there is more than 1 parameter, the stuff after the space is the hyperlink text + if (strpos(trim($this->p_vars['inline_dockeyword_data']),' ')) + { + $i1 = strpos(trim($this->p_vars['inline_dockeyword_data']),' ') + 1; + $link = substr(trim($this->p_vars['inline_dockeyword_data']),0,$i1 - 1); + $text = substr(trim($this->p_vars['inline_dockeyword_data']),$i1); + $this->p_vars['inline_dockeyword_data'] = new parserLinkInlineTag($link,$text); +// '<a href="'.$link.'">'.$text.'</a>'; + } + else + { + $this->p_vars['inline_dockeyword_data'] = new parserLinkInlineTag($this->p_vars['inline_dockeyword_data'],$this->p_vars['inline_dockeyword_data']); + } +// '<a href="'.$this->p_vars['inline_dockeyword_data'].'">'.$this->p_vars['inline_dockeyword_data'].'</a>'; + } else + { + $testp = explode('#',$this->p_vars['inline_dockeyword_data']); + if (count($testp) - 1) $this->p_vars['inline_dockeyword_data'] = $testp[1]; + $this->p_vars['inline_dockeyword_data'] = new parserLinkInlineTag($this->p_vars['inline_dockeyword_data'],$this->p_vars['inline_dockeyword_data']); + } + } + if ($this->p_vars['inline_dockeyword_type']=='id') + { + $this->p_vars['inline_dockeyword_data'] = new parserIdInlineTag($this->category,$this->package,$this->subpackage,$this->p_vars['tutorial'],trim($this->p_vars['inline_dockeyword_data'])); + } + if ($this->p_vars['inline_dockeyword_type'] == 'tutorial') + { + $this->p_vars['inline_dockeyword_data'] = new parserTutorialInlineTag($this->p_vars['inline_dockeyword_data'],$this->p_vars['inline_dockeyword_data']); + } + if ($this->p_vars['inline_dockeyword_type'] == 'toc') + { + $this->p_vars['inline_dockeyword_data'] = new parserTocInlineTag(); + } + if ($this->p_vars['inline_dockeyword_type'] == 'example') + { + $example = + new parserExampleInlineTag($this->p_vars['inline_dockeyword_data'], $this->_path, true); + $this->p_vars['total']->add($example->getProgramListing()); + } else + { + $this->p_vars['total']->add($this->p_vars['inline_dockeyword_data']); + } + $this->p_vars['inline_dockeyword_type'] = false; + $this->p_vars['inline_dockeyword_data'] = ''; + } + } +} +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/ParserData.inc b/buildscripts/PhpDocumentor/phpDocumentor/ParserData.inc new file mode 100755 index 00000000..31e7e9f6 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/ParserData.inc @@ -0,0 +1,970 @@ +<?php +/** + * Parser Data Structures + * + * phpDocumentor :: automatic documentation generator + * + * PHP versions 4 and 5 + * + * Copyright (c) 2002-2008 Gregory Beaver + * + * LICENSE: + * + * This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General + * Public License as published by the Free Software Foundation; + * either version 2.1 of the License, or (at your option) any + * later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage ParserData + * @author Gregory Beaver <cellog@php.net> + * @copyright 2002-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version CVS: $Id: ParserData.inc 253814 2008-02-26 12:15:56Z ashnazg $ + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @since 1.0rc1 + * @todo CS cleanup - change package to PhpDocumentor + */ + +/** + * Contains information about a PHP file, used to group procedural elements + * together. + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage ParserData + * @author Gregory Beaver <cellog@php.net> + * @copyright 2002-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @filesource + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @since 1.0rc1 + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - change classname to PhpDocumentor_* + */ +class parserPage +{ + /** + * Type is used by many functions to skip the hassle of if + * <code>phpDocumentor_get_class($blah) == 'parserBlah'</code> + * @var string + */ + var $type = 'page'; + /** + * not implemented in this version, will be used to link xml output pages + * @var string + */ + var $id = ''; + /** + * filename.ext (no path) + * @var string + */ + var $file = ''; + /** + * relative source location + * @var string + */ + var $sourceLocation = ''; + /** + * phpdoc-safe name (only letters, numbers and _) + * @var string + */ + var $name = ''; + /** + * original phpdoc-safe name (only letters, numbers and _) + * + * This fixes [ 1391432 ] Too many underscores in include links. + * @var string + */ + var $origName = ''; + /** + * @var string + */ + var $category = 'default'; + /** + * @var string + */ + var $package = 'default'; + /** + * @var string + */ + var $subpackage = ''; + /** + * @var string + */ + var $parserVersion = PHPDOCUMENTOR_VER; + /** + * not implemented yet + * file modification date, will be used for makefiles + * @var string + */ + var $modDate = ''; + /** + * @var string full path this page represents + */ + var $path = ''; + /** + * Tokenized source code of the file + * @var array + */ + var $source = array(); + /** + * Used to limit output, contains contents of --packageoutput commandline. + * Does not increase parsing time. Use --ignore for that + * @see phpDocumentor_IntermediateParser::$packageoutput, + * Converter::$package_output + * @var mixed either false or an array of packages + */ + var $packageOutput = false; + + /** + * sets package to default package + * + * @global string default package name + */ + function parserPage() + { + global $phpDocumentor_DefaultPackageName; + $this->package = $GLOBALS['phpDocumentor_DefaultPackageName']; + } + + /** + * gets the tag type + * + * @return string always "page" + */ + function getType() + { + return 'page'; + } + + /** + * Sets the source code of the file for highlighting. + * + * PHP 4.3.0+ passes an array of tokenizer tokens by line number. PHP + * 4.2.3- passes a string to be passed to {@link highlight_string()} + * + * @param string|array $source the token array/string + * + * @return void + */ + function setSource($source) + { + $this->source = $source; + } + + /** + * Sets the name to display in documentation (can be an alias set with @name) + * + * @param string $file the file name + * + * @return void + */ + function setFile($file) + { + $this->file = $file; + } + + /** + * gets the file name + * + * @return string|bool filename.ext or @name alias, + * or FALSE if it's not set + */ + function getFile() + { + if (!isset($this->file)) { + return false; + } + return $this->file; + } + + /** + * sets the path to the file + * + * @param string $path full path to file + * + * @return void + */ + function setPath($path) + { + // look for special windows case + if (SMART_PATH_DELIMITER === '\\') { + $this->path = strtr($path, '/', '\\'); + } else { + $this->path = $path; + } + } + + /** + * gets the path + * + * @return string fully delimited path (OS-dependent format), + * or FALSE if it's not set + */ + function getPath() + { + if (!isset($this->path)) { + return false; + } + return $this->path; + } + + /** + * loads the package output array + * + * @param array $packages array of packages to display in documentation + * (package1,package2,...) + * + * @return void + * @see phpDocumentor_IntermediateParser::$packageoutput + */ + function setPackageOutput($packages) + { + $this->packageOutput = $packages; + } + + /** + * gets the package output array + * + * @return array array of packages (package1,package2,...) + * @see phpDocumentor_IntermediateParser::$packageoutput + */ + function getPackageOutput() + { + return $this->packageOutput; + } + + /** + * sets the name + * + * @param string $name phpdoc-safe name (only _, numbers and letters) + * set by Parser::parse() + * + * @return void + * @see Parser::parse() + */ + function setName($name) + { + $this->origName = $name; + $this->name = $name; + } + + /** + * gets the name + * + * @return string phpdoc-safe name (only _, numbers and letters), + * or FALSE if it's not set + */ + function getName() + { + if (!isset($this->name)) { + return false; + } + return $this->name; + } + + /** + * sets the source location + * + * @param string $source path of this file relative to program root + * + * @return void + */ + function setSourceLocation($source) + { + $this->sourceLocation = $source; + } + + /** + * gets the source location + * + * @param Converter $c the output converter + * @param bool $pearize if this parameter is true, + * it will truncate the source location + * to the subdirectory of pear + * + * @return string path of this file relative to program root + * @todo determine if the str_replace in the 'pear/' ELSE branch should be + * removed (see Documentation/tests/bug1574043.php). It does NOT exist + * in the similar function parserClass->getSourceLocation() in + * ParserElements.inc. + */ + function getSourceLocation ($c, $pearize = false) + { + global $_phpDocumentor_options; + if (!isset($this->sourceLocation)) { + $sl = false; + } else { + $sl = $this->sourceLocation; + if ($pearize) { + if (strpos($sl, 'pear/')) { + $sl = substr($sl, strpos($sl, 'pear/') + 5); + } else { + $sl = str_replace($_phpDocumentor_options['Program_Root'] + . PATH_DELIMITER, '', $sl); + } + } + } + return $sl; + } + + /** + * Not implemented in this version + * + * @return bool tell the parser whether to parse the file, + * otherwise this function will retrieve the parsed data + * from external file + */ + function getParseData() + { + return true; + } +} + +/** + * Contains an in-memory representation of all documentable elements + * ({@link parserPage}, {@link parserFunction}, {@link parserDefine}, + * {@link parserInclude}, {@link parserClass}, {@link parserMethod}, + * {@link parserVar}) and their DocBlocks ({@link parserDocBlock}). + * + * This class works in coordination with {@link phpDocumentor_IntermediateParser} + * to take output from {@link Parser::handleEvent()} and create indexes, links, + * and other assorted things (all documented in phpDocumentor_IntermediateParser + * and {@link Converter}) + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage ParserData + * @author Gregory Beaver <cellog@php.net> + * @copyright 2002-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @filesource + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @since 1.0rc1 + * @todo CS cleanup - change package to PhpDocumentor + */ +class parserData +{ + /** + * {@link parserPage} element that is this parserData's parent, or false if + * not set. + * @var false|parserPage + */ + var $parent = false; + /** + * array of parsed elements + * @var array + */ + var $elements = array(); + /** + * @var boolean + * @access private + */ + var $_hasclasses = false; + /** + * @var boolean + * @access private + */ + var $_hasinterfaces = false; + /** + * array of parsed elements with @access private + * @var array + */ + var $privateelements = array(); + /** + * array of parsed class elements + * @var array + */ + var $classelements = array(); + + /** + * @var parserTutorial|false + */ + var $tutorial = false; + /** + * array of parsed class elements with @access private + * @var array + */ + var $privateclasselements = array(); + /** + * array of links descended from {@link abstractLink} + * @var array + * @see pageLink, defineLink, classLink, functionLink, methodLink, varLink + */ + var $links = array(); + /** + * used by {@link phpDocumentor_IntermediateParser::handleDocBlock()} to + * determine whether a docblock is a page-level docblock or not. $clean is + * true as long as only 0 or 1 docblock has been parsed, and no element + * other than parserPage has been parsed + * @var boolean + */ + var $clean = true; + /** + * DocBlock ({@link parserDocBlock}) for this page, or false if not set + * @var mixed + */ + var $docblock = false; + /** + * Flag used to determine whether a page-level docblock is present + * @var boolean + * @access private + */ + var $_explicitdocblock = false; + /** + * Type is used by many functions to skip the hassle of if + * <code>phpDocumentor_get_class($blah) == 'parserBlah'</code> + * always 'page', used in element indexing and conversion functions found in + * {@link Converter} + * @var string + */ + var $type = 'page'; + + /** + * add a new element to the tracking array + * + * @param parserElement &$element add a parsed element to the + * {@link $elements} array, + * also sets {@link $clean} to false + * + * @return void + */ + function addElement(&$element) + { + $element->setPath($this->parent->path); + if ($element->getType() == 'class' + || $element->getType() == 'method' + || $element->getType() == 'var' + || $element->getType() == 'const' + ) { + if ($element->getType() == 'class') { + if ($element->isInterface()) { + $this->_hasinterfaces = true; + } else { + $this->_hasclasses = true; + } + } + $this->classelements[] = $element; + } else { + $this->elements[] = $element; + } + $this->clean = false; + } + + /** + * Does this package have interfaces? + * + * @return bool + */ + function hasInterfaces() + { + return $this->_hasinterfaces; + } + + /** + * Does this package have classes? + * + * @return boolean + */ + function hasClasses() + { + return $this->_hasclasses; + } + + /** + * adds a tutorial parser + * + * @param parserTutorial $t a tutorial parser + * @param Converter &$c the output converter + * + * @return void + */ + function addTutorial($t, &$c) + { + $this->tutorial = new tutorialLink; + $this->tutorial->addLink('', $t->path, $t->name, $t->package, + $t->subpackage, $t->getTitle($c)); + } + + /** + * If this file has a tutorial associated with it, + * returns a link to the tutorial. + * + * @return tutorialLink + */ + function getTutorial() + { + return $this->tutorial; + } + + /** + * If the page-level DocBlock was present in the source, returns true + * + * @return bool + */ + function hasExplicitDocBlock() + { + return $this->_explicitdocblock; + } + + /** + * Tells this page that its DocBlock was not implicit + * + * @return bool + */ + function explicitDocBlock() + { + $this->_explicitdocblock = true; + } + + /** + * adds a link + * + * @param parserElement &$element element to add a new link (descended from + * {@link abstractLink}) to the + * {@link $links} array + * @param string $classorpackage classname for elements that are + * class-based (this may be deprecated in + * the future, as the classname should be + * contained within the element. if + * $element is a page, this parameter is a + * package name + * @param string $subpackage subpackage name for page elements + * + * @return string + */ + function addLink(&$element, $classorpackage = '', $subpackage = '') + { + switch($element->type) + { + case 'function': + $x = new functionLink; + $x->addLink($this->parent->path, $this->parent->name, $element->name, + $element->docblock->package, $element->docblock->subpackage); + return $x; + break; + case 'define': + $x = new defineLink; + $x->addLink($this->parent->path, $this->parent->name, $element->name, + $element->docblock->package, $element->docblock->subpackage); + return $x; + break; + case 'global': + $x = new globalLink; + $x->addLink($this->parent->path, $this->parent->name, $element->name, + $element->docblock->package, $element->docblock->subpackage); + return $x; + break; + case 'class': + $x = new classLink; + $x->addLink($this->parent->path, $this->parent->name, $element->name, + $element->docblock->package, $element->docblock->subpackage); + return $x; + break; + case 'method': + $x = new methodLink; + $x->addLink($classorpackage, $this->parent->path, + $this->parent->name, $element->name, $element->docblock->package, + $element->docblock->subpackage); + return $x; + break; + case 'var': + $x = new varLink; + $x->addLink($classorpackage, $this->parent->path, + $this->parent->name, $element->name, $element->docblock->package, + $element->docblock->subpackage); + return $x; + break; + case 'page': + if (empty($classorpackage)) { + $classorpackage = $GLOBALS['phpDocumentor_DefaultPackageName']; + } + $x = new pageLink; + $x->addLink($element->path, $element->name, $element->file, + $classorpackage, $subpackage); + return $x; + break; + } + } + + /** + * returns a link + * + * @param Converter &$c the output converter + * @param bool $text a text flag + * + * @return string + */ + function &getLink(&$c, $text = false) + { + $a = $c->getPageLink($this->parent->file, $this->docblock->package, + $this->parent->path, $text); + return $a; + } + + /** + * returns a list of all classes declared in a file + * + * @param Converter &$c output converter + * + * @return array Format: array( + * packagename => parserClass, + * packagename => parserClass, + * ... + * ) + */ + function getClasses(&$c) + { + $r = $c->classes->getClassesInPath($this->parent->path); + $rr = array(); + if ($r) { + foreach ($r as $class => $obj) { + $rr[$obj->docblock->package][] = $obj; + } + } + return $rr; + } + + /** + * Get the output-safe filename (. changed to _) + * + * @return string + */ + function getName() + { + if (isset($this->parent) && $this->parent) { + return $this->parent->getName(); + } + } + + /** + * sets the parent + * + * @param parserPage &$parent parent element of this parsed data + * + * @return void + */ + function setParent(&$parent) + { + $this->parent = $parent; + } + + /** + * checks if the element is "cleaned" already + * + * @return bool returns the value of {@link $clean} + */ + function isClean() + { + return $this->clean; + } + + /** + * sets the docblock + * + * @param parserDocBlock &$docblock docblock element + * + * @return void + * @see parserDocBlock + */ + function setDocBlock(&$docblock) + { + $this->docblock = $docblock; + } +} + +/** + * Base class for all elements + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage ParserData + * @author Gregory Beaver <cellog@php.net> + * @copyright 2002-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @filesource + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @since 1.0rc1 + * @todo CS cleanup - change package to PhpDocumentor + * @abstract + */ +class parserBase +{ + /** + * Type is used by many functions to skip the hassle of if + * phpDocumentor_get_class($blah) == 'parserBlah'... always base + * @var string + */ + var $type = 'base'; + /** + * set to different things by its descendants + * @abstract + * @var mixed + */ + var $value = false; + + /** + * gets the type + * + * @return string returns value of {@link $type} + */ + function getType() + { + return $this->type; + } + + /** + * sets the given value + * + * @param mixed $value set the value of this element + * + * @return void + */ + function setValue($value) + { + $this->value = $value; + } + + /** + * gets the value + * + * @return mixed get the value of this element (element-dependent) + */ + function getValue() + { + return $this->value; + } +} + + +/** + * Used to represent strings that contain inline tags, + * so that they can be properly parsed at link time + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage ParserData + * @author Gregory Beaver <cellog@php.net> + * @copyright 2002-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @filesource + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @since 1.0rc1 + * @todo CS cleanup - change package to PhpDocumentor + */ +class parserStringWithInlineTags extends parserBase +{ + /** + * Type is used by many functions to skip the hassle of + * if phpDocumentor_get_class($blah) == 'parserBlah'... + * always '_string' + * @var string + */ + var $type = '_string'; + /** + * @access private + */ + var $cache = false; + /** + * array of strings and {@link parserInlineTag}s + * Format: + * array(string1,string2,parserInlineTag1,string3,parserInlineTag2,...) + * @var array + */ + var $value = array(); + + /** + * equivalent to the . operator ($a = $b . $c) + * + * @param mixed $stringOrInlineTag either a string or a {@link parserInlineTag} + * + * @return void + */ + function add($stringOrInlineTag) + { + if (is_string($stringOrInlineTag)) { + if (!count($this->value)) { + $this->value[] = $stringOrInlineTag; + return; + } + if (is_string($this->value[count($this->value) - 1])) { + $this->value[count($this->value) - 1] .= $stringOrInlineTag; + return; + } else { + $this->value[] = $stringOrInlineTag; + return; + } + } else { + if (is_a($stringOrInlineTag, 'parserinlinetag') + && phpDocumentor_setup::checkIgnoreTag($stringOrInlineTag-> + inlinetype, true) + ) { + return; + } + $this->value[] = $stringOrInlineTag; + } + } + + /** + * Determine whether the string contains any inline tags + * + * @return bool + * @tutorial inlinetags.pkg + */ + function hasInlineTag() + { + for ($i=0; $i<count($this->value); $i++) { + if (is_a($this->value[$i], 'parserinlinetag')) { + return true; + } + } + return false; + } + + /** + * Pass source code to any {@}source} tags contained within the string + * for later conversion. + * + * @param string|array $source source code ready to be highlighted + * + * @return void + */ + function setSource($source) + { + for ($i=0; $i<count($this->value); $i++) { + if (phpDocumentor_get_class($this->value[$i]) == 'parsersourceinlinetag' + ) { + $this->value[$i]->setSource($source); + } + } + } + + /** + * equivalent to trim(strlen($string)) + * + * @return integer length of the string this object represents + */ + function trimmedStrlen() + { + $a = 0; + for ($i=0; $i<count($this->value); $i++) { + if (is_string($this->value[$i])) { + if ($i == 0) { + $a += strlen(ltrim($this->value[$i])); + } elseif ($i == count($this->value[$i]) - 1) { + $a += strlen(chop($this->value[$i])); + } + } else { + $a += $this->value[$i]->Strlen(); + } + } + return $a; + } + + /** + * return the string unconverted (all inline tags are taken out - this + * should only be used in pre-parsing to see if any other text + * is in the string) + * + * @param bool $trim whether to trim the string + * + * @return string trimmed value + * @uses parserInlineTag::getString() removes inline tag length, as it is + * indeterminate until conversion. + */ + function getString($trim = true) + { + $a = ''; + for ($i=0; $i<count($this->value); $i++) { + if (is_string($this->value[$i])) { + $a .= $this->value[$i]; + } else { + $a .= $this->value[$i]->getString(); + } + } + if ($trim) { + $a = trim($a); + } + return $a; + } + + /** + * Use to convert the string to a real string + * with all inline tags parsed and linked + * + * @param Converter &$converter the output converter + * @param bool $postprocess true if one needs to postprocess + * @param bool $trim false if the output should not be trimmed + * + * @return string + * @see Converter::returnSee() + * @todo CS cleanup - rename to convert for camelCase rule + */ + function Convert(&$converter, $postprocess = true, $trim = true) + { + if ($this->cache) { + if ($converter->name == $this->cache['name'] + && $converter->outputformat == $this->cache['output'] + && $converter->checkState($this->cache['state']) + && $this->cache['postprocess'] === $postprocess + ) { + return $this->cache['contents']; + } + if ($converter->name != $this->cache['name']) { + $this->cache = false; + } + } + if (is_string($this->value)) { + return $this->value; + } + $a = ''; + for ($i=0; $i<count($this->value); $i++) { + if (is_string($this->value[$i])) { + if ($postprocess && !method_exists($converter, 'postProcess')) { + var_dump('a', $converter); + } + if ($postprocess) { + $a .= $converter->postProcess($this->value[$i]); + } else { + $a .= $this->value[$i]; + } + } else { + $a .= $this->value[$i]->Convert($converter, $postprocess); + } + } + if ($trim) { + $a = trim($a); + } + $this->cache = array( + 'name' => $converter->name, + 'output' => $converter->outputformat, + 'contents' => $a, + 'state' => $converter->getState(), + 'postprocess' => $postprocess + ); + return $a; + } +} + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/ParserDescCleanup.inc b/buildscripts/PhpDocumentor/phpDocumentor/ParserDescCleanup.inc new file mode 100755 index 00000000..f58be00e --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/ParserDescCleanup.inc @@ -0,0 +1,1488 @@ +<?php +/** + * All of the functions to clean up and handle the long description + * of a DocBlock are in this file. + * + * The primary functionality is based on Parser and WordParser, and modified to recognize + * only the tokens defined in the PHPDOCUMENTOR_PDP_* constants + * + * phpDocumentor :: automatic documentation generator + * + * PHP versions 4 and 5 + * + * Copyright (c) 2002-2006 Gregory Beaver + * + * LICENSE: + * + * This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General + * Public License as published by the Free Software Foundation; + * either version 2.1 of the License, or (at your option) any + * later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package phpDocumentor + * @subpackage Parsers + * @author Gregory Beaver <cellog@php.net> + * @copyright 2002-2006 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version CVS: $Id: ParserDescCleanup.inc 286923 2009-08-08 06:00:39Z ashnazg $ + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @see Parser, WordParser + * @since 1.2 + */ + +/**#@+ + * {@link parserDescParser} token constants + */ +/** when <<code>> is found in a desc */ +define('PHPDOCUMENTOR_PDP_EVENT_CODE', 600); +/** when <<code>> is found in a desc */ +define('PHPDOCUMENTOR_PDP_STATE_CODE', 700); +/** when <<p>> is found in a desc */ +define('PHPDOCUMENTOR_PDP_EVENT_P', 601); +/** when <<p>> is found in a desc */ +define('PHPDOCUMENTOR_PDP_STATE_P', 701); +/** when \n\n is found in a desc */ +define('PHPDOCUMENTOR_PDP_EVENT_DOUBLECR', 602); +/** when \n\n is found in a desc */ +define('PHPDOCUMENTOR_PDP_STATE_DOUBLECR', 702); +/** when <<pre>> is found in a desc */ +define('PHPDOCUMENTOR_PDP_EVENT_PRE', 603); +/** when <<pre>> is found in a desc */ +define('PHPDOCUMENTOR_PDP_STATE_PRE', 703); +/** when <<ul>>/<<ol>> is found in a desc */ +define('PHPDOCUMENTOR_PDP_EVENT_LIST', 604); +/** when <<ul>>/<<ol>> is found in a desc */ +define('PHPDOCUMENTOR_PDP_STATE_LIST', 704); +/** when <<b>> is found in a desc */ +define('PHPDOCUMENTOR_PDP_EVENT_B', 605); +/** when <<b>> is found in a desc */ +define('PHPDOCUMENTOR_PDP_STATE_B', 705); +/** when <<i>> is found in a desc */ +define('PHPDOCUMENTOR_PDP_EVENT_I', 606); +/** when <<i>> is found in a desc */ +define('PHPDOCUMENTOR_PDP_STATE_I', 706); +/** when <<br>> is found in a desc */ +define('PHPDOCUMENTOR_PDP_EVENT_BR', 607); +/** when <<br>> is found in a desc */ +define('PHPDOCUMENTOR_PDP_STATE_BR', 707); +/** when the << potential escape for tags is found in a desc */ +define('PHPDOCUMENTOR_PDP_EVENT_ESCAPE',608); +/** when the << potential escape for tags is found in a desc */ +define('PHPDOCUMENTOR_PDP_STATE_ESCAPE',708); +/** when << /pre>> is found in a <<pre>><</pre>> section */ +define('PHPDOCUMENTOR_PDP_EVENT_ESCAPE_PRE',609); +/** when << /pre>> is found in a <<pre>><</pre>> section */ +define('PHPDOCUMENTOR_PDP_STATE_ESCAPE_PRE',709); +/** when << /code>> is found in a <<code>><</code>> section */ +define('PHPDOCUMENTOR_PDP_EVENT_ESCAPE_CODE',610); +/** when << /code>> is found in a <<code>><</code>> section */ +define('PHPDOCUMENTOR_PDP_STATE_ESCAPE_CODE',710); +/** when <<var>> is found in a desc */ +define('PHPDOCUMENTOR_PDP_EVENT_VAR',611); +/** when <<var>> is found in a desc */ +define('PHPDOCUMENTOR_PDP_STATE_VAR',711); +/** when <<samp>> is found in a desc */ +define('PHPDOCUMENTOR_PDP_EVENT_SAMP',612); +/** when <<samp>> is found in a desc */ +define('PHPDOCUMENTOR_PDP_STATE_SAMP',712); +/** when <<kbd>> is found in a desc */ +define('PHPDOCUMENTOR_PDP_EVENT_KBD',613); +/** when <<kbd>> is found in a desc */ +define('PHPDOCUMENTOR_PDP_STATE_KBD',713); +/** when a simple list is found in a desc + * + * like + * <pre> + * o item 1 + * o item 2 + * </pre> + */ +define('PHPDOCUMENTOR_PDP_EVENT_SIMLIST',614); +/** when a simple list is found in a desc + * + * like + * <pre> + * o item 1 + * o item 2 + * </pre> + */ +define('PHPDOCUMENTOR_PDP_STATE_SIMLIST',714); +/**#@-*/ +/** +* Like WordParser but designed to handle an array with strings and +* {@link parserInlineTag}s +* @package phpDocumentor +* @subpackage WordParsers +* @author Greg Beaver <cellog@php.net> +* @since 1.2 +*/ +class ObjectWordParser extends WordParser +{ + /** + * Determines whether text searching is case-sensitive or not + * @access private + */ + var $_casesensitive = false; + + function ObjectWordParser($casesensitive = false) + { + $this->_casesensitive = $casesensitive; + } + + /** + * Set the word parser to go. + * + * @param array {@link parserStringWithInlineTags::$value} style-array, with + * alternating text and inline tags + */ + function setup(&$input) + { +// if (is_string($input[0])) $input[0] = ltrim($input[0]); + $this->data = & $input; + $this->pos = 0; + $this->linenum = 0; + $this->linenumpos = 0; + $this->cache = array(); + reset($this->data); + list($this->index,) = each($this->data); + if (!is_object($this->data[$this->index])) + $this->size = strlen($this->data[$this->index]); + else $this->size = 0; + //$this->run = 0; + //$this->word = WORD_PARSER_RET_WORD; + } + + function getWord() + { + if (!isset($this->data[$this->index])) return false; + // return any inline tags unchanged + if (is_object($this->data[$this->index])) + { + $index = $this->index; + list($this->index,) = each($this->data); + $this->pos = 0; + if ($this->index) + { + if (!is_object($this->data[$this->index])) + $this->size = strlen($this->data[$this->index]); + else $this->size = 0; + $this->cache = array(); + return $this->data[$index]; + } else + { + return false; + } + } + //$st = $this->mtime(); + if ($this->size == $this->pos) + { + // cycle to next line in the array + list($this->index,) = each($this->data); + if (!$this->index) return false; + $this->pos = 0; + if (!is_object($this->data[$this->index])) + $this->size = strlen($this->data[$this->index]); + else $this->size = 0; + $this->cache = array(); + return $this->getWord(); + } + + $npos = $this->size; + if (is_array($this->wordseperators)) + { + //$this->wordseperators = array(); + foreach($this->wordseperators as $sep) + { + if (isset($this->cache[$sep])) + $tpos = $this->cache[$sep]; + else + $tpos = false; + if ($tpos < $this->pos || !is_int($tpos)) + { + if ($this->_casesensitive) + $tpos = strpos($this->data[$this->index],$sep,$this->pos); + else + $tpos = strpos(strtolower($this->data[$this->index]),$sep,$this->pos); + } + + if ( ($tpos < $npos) && !($tpos === false)) + { + //echo trim($sep) . "=$tpos\n"; + $npos = $tpos; + $seplen = strlen($sep); + } + else if (!($tpos === false)) + { + $this->cache[$sep] = $tpos; + } + } + } else { + // its time to cycle + return ""; + } + + $len = $npos - $this->pos; + if ($len == 0) + { + $len = $seplen; + } + + //$st3 = $this->mtime(); + $word = substr($this->data[$this->index],$this->pos,$len); + + // Change random other os newlines to the unix one + if ($word == "\r" || $word == "\r\n") + { + $word = "\n"; + } + + if ($this->linenumpos <= $this->pos) + { + $this->linenumpos = $this->pos + $len; + $this->linenum += count(explode("\n",$word)) - 1; + } + + if ($this->getsource) + { + $this->source .= $word; + } + $this->pos = $this->pos + $len; + //$this->word = WORD_PARSER_RET_SEP; + + // Things like // commenats rely on the newline to find their end so im going to have to return them + // never return worthless white space /t ' ' + if ($this->returnWhiteSpace == false) + { + if (strlen(trim($word)) == 0 && $word != "\n") + { + $word = $this->getWord(); + } + } + //$this->time3 = $this->time3 + ($this->mtime() - $st3); + //$this->time = $this->time + ($this->mtime() - $st); + return $word; + } + + /** + * Determine if the next word is an inline tag + * @return boolean + */ + function nextIsObjectOrNonNL() + { + return (($this->size == $this->pos) && isset($this->data[$this->index + 1]) + && is_object($this->data[$this->index + 1])) || + (($this->size > $this->pos) && !in_array($this->data[$this->index]{$this->pos}, array("\n", "\r"))); + } +} + +/** + * Parses a DocBlock description to retrieve abstract representations of + * <<pre>>,<<code>>,<<p>>,<<ul>>,<<ol>>,<<li>>,<<b>>,<<i>> + * @tutorial phpDocumentor.howto.pkg#basics.desc + * @package phpDocumentor + * @subpackage Parsers + * @author Greg Beaver <cellog@php.net> + * @since 1.2 + */ +class parserDescParser extends Parser +{ + /**#@+ + * @access private + */ + /** + * @var array + */ + var $eventHandlers = array(PHPDOCUMENTOR_PDP_EVENT_CODE => 'handleCode', + PHPDOCUMENTOR_PDP_EVENT_PRE => 'handlePre', + PHPDOCUMENTOR_PDP_EVENT_P => 'handleP', + PHPDOCUMENTOR_PDP_EVENT_DOUBLECR => 'handleDoubleCR', + PHPDOCUMENTOR_PDP_EVENT_LIST => 'handleList', + PHPDOCUMENTOR_PDP_EVENT_B => 'handleB', + PHPDOCUMENTOR_PDP_EVENT_I => 'handleI', + PHPDOCUMENTOR_PDP_EVENT_VAR => 'handleVar', + PHPDOCUMENTOR_PDP_EVENT_KBD => 'handleKbd', + PHPDOCUMENTOR_PDP_EVENT_SAMP => 'handleSamp', + PHPDOCUMENTOR_PDP_EVENT_BR => 'handleBr', + PHPDOCUMENTOR_PDP_EVENT_ESCAPE => 'handleEscape', + PHPDOCUMENTOR_PDP_EVENT_ESCAPE_CODE => 'handleEscapeCode', + PHPDOCUMENTOR_PDP_EVENT_ESCAPE_PRE => 'handleEscapePre', + PHPDOCUMENTOR_PDP_EVENT_SIMLIST => 'handleSimpleList', + PARSER_EVENT_NOEVENTS => 'defaultHandler', + ); + + /** + * @var array + */ + var $pars = array(); + /** + * Determines whether parsing of <p> tags will occur, or double CR will + * be used + * @var boolean + */ + var $parse_Ps; + /** + * Context stack. + * + * Values can be 'normal', or any tag container like 'my_i', 'my_b'. This + * is used to determine which tag text or nested tags should be added to + * @var array + */ + var $_context = array('normal'); + /**#@-*/ + + /** + * sets $wp to be a {@link ObjectWordParser} + * + * $wp is the word parser that retrieves tokens + */ + function parserDescParser() + { + $this->wp = new ObjectWordParser; + } + + /** + * Parse a long or short description for tags + * + * @param array array of strings or {@link parserInlineTag}s + * @param boolean true if the description is a short description. (only 1 paragraph allowed in short desc) + * @param string name of the class to instantiate for each paragraph. parserDesc for desc/sdesc, + * parserStringWithInlineTags for tag data + * @staticvar integer used for recursion limiting if a handler for an event is not found + */ + function parse (&$parse_data,$sdesc = false,$ind_type = 'parserDesc') + { + static $endrecur = 0; + global $_phpDocumentor_setting; + if (!is_array($parse_data) || count($parse_data) == 0) + { + return false; + } + $this->p_vars['indtype'] = $ind_type; + $this->setupStates($sdesc); + if (isset($_phpDocumentor_setting['javadocdesc']) && $_phpDocumentor_setting['javadocdesc'] == 'on') + $this->parse_Ps = true; + + // initialize variables so E_ALL error_reporting doesn't complain + $pevent = 0; + $word = 0; + $this->p_vars['curpar'] = 0; + $this->pars = array(); + $this->p_vars['start'] = true; + $this->p_vars['event_stack'] = new EventStack; + + $this->wp->setup($parse_data,$sdesc); + $this->wp->setWhitespace(true); + $this->p_vars['list_count'] = 0; + if ($sdesc) $this->p_vars['start'] = false; + + // beware of infinite loops + $infiniteLoopCatcher = 0; + do + { + $infiniteLoopCatcher++; + if (!isset($this->pars[$this->p_vars['curpar']])) $this->pars[$this->p_vars['curpar']] = new $ind_type; + $lpevent = $pevent; + $pevent = $this->p_vars['event_stack']->getEvent(); + if ($lpevent != $pevent) + { + $this->p_vars['last_pevent'] = $lpevent; + } + + if ($this->p_vars['last_pevent'] != $pevent) + { + // its a new event so the word parser needs to be reconfigured + $this->configWordParser($pevent); + } + + + $this->p_vars['last_word'] = $word; + $word = $this->wp->getWord(); + + if (PHPDOCUMENTOR_DEBUG == true) + { + echo "----------------\n"; + echo "LAST: |" . htmlentities($this->p_vars['last_word']) . "|\n"; +// echo "INDEX: ".$this->p_vars['curpar']."\n"; + echo "PEVENT: " . $this->getParserEventName($pevent) . "\n"; + echo "LASTPEVENT: " . $this->getParserEventName($this->p_vars['last_pevent']) . "\n"; + echo $this->wp->getPos() . " WORD: |".htmlentities($word)."|\n\n"; + var_dump($this->_context); + } + if (isset($this->eventHandlers[$pevent])) + { + $handle = $this->eventHandlers[$pevent]; + if ($word !== false) $this->$handle($word, $pevent); + else + { + if (!count($this->pars[$this->p_vars['curpar']]->value)) unset($this->pars[$this->p_vars['curpar']]); + } + } else + { + debug('WARNING: possible error, no ParserDescParser handler for event number '.$pevent); + if ($endrecur++ == 25) + { + addErrorDie(PDERROR_LOOP_RECURSION_LIMIT_REACHED); + } + } + if (is_object($word) || trim($word) != '') + { + $this->p_vars['start'] = false; + } + + if ($infiniteLoopCatcher > 10000) { + echo PHP_EOL . "FATAL ERROR: Somehow we got into an infinite loop in parserDescCleanup->parse()'s do-while loop..."; + echo PHP_EOL . " The line being parsed was: " . $word . PHP_EOL . PHP_EOL; + addErrorDie(PDERROR_LOOP_RECURSION_LIMIT_REACHED); + } + } while (is_object($word) || !($word === false) && $word != ''); + $context = $this->getContext(); + if ($context != 'normal') + { + if ($context == 'list' && $this->p_flags['simplelist']) + { + $this->p_vars['lists'][0]->addItem($this->p_vars['list_item'][0]); + unset($this->p_vars['list_item'][0]); + $this->setContext('normal'); + $this->addText($this->p_vars['lists'][0]); + } else addError(PDERROR_UNCLOSED_TAG,str_replace('my_','',$context)); + } + if ($this->p_vars['list_count'] > 0) addError(PDERROR_UNMATCHED_LIST_TAG); + if ($sdesc) + $this->publishEvent(2,$this->pars); + else + $this->publishEvent(1,$this->pars); + } + /**#@+ @access private */ + /** + * basic handling + * + * This function checks to see if the first thing in + * a description is the <p> tag. If so, it will switch + * into a mode of parsing out paragraphs by <p> instead + * of a double line-break + * + * It also removes extra whitespace + * @uses doSimpleList() + */ + function defaultHandler($word, $pevent) + { + $context = $this->getContext(); + if ($context != 'normal') $this->setContext('normal'); + if ($this->p_vars['start'] && is_string($word) && strtolower($word) == '<p>') + { + $this->parse_Ps = true; + } + if (is_string($word) && $this->checkEventPush($word, $pevent)) return; +// if (!isset($this->parse_Ps) || !$this->parse_Ps) + { + if (is_string($word) && is_string($this->p_vars['last_word']) && + ($word == ' ' && $this->p_vars['last_word'] == ' ')) return; + if ($pevent == PARSER_EVENT_NOEVENTS) + { + if ($this->doSimpleList($word)) return; + } + $this->addText($word); + } + } + + /** + * Retrieve the current top-level tag to add text into + * @uses $_context + */ + function getContext() + { + array_push($this->_context,$a = array_pop($this->_context)); + return $a; + } + + /** + * Pop a context off of the context stack + * @uses $_context + */ + function dropContext() + { + array_pop($this->_context); + if (count($this->_context) == 0) + $this->_context = array('normal'); + } + + /** + * @uses $_context + * @param string context name + */ + function setContext($context) + { + array_push($this->_context,$context); + } + + /** + * add input as text to the current paragraph or list + * @param string|parserInlineTag + */ + function addText($text) + { + $context = $this->getContext(); + if ($context == 'list') + { +// debug('aded to '.$context); + if (!is_object($this->p_vars['list_item'][$this->p_vars['list_count']])) { + addErrorDie(PDERROR_UL_IN_UL); + } + $this->p_vars['list_item'][$this->p_vars['list_count']]->add($text); + } elseif ($context != 'normal') + { +// debug('added to '.$context); + $this->p_vars[$context]->add($text); + } else + { +// debug('added to normal '); + $indtype = $this->p_vars['indtype']; + if (!isset($this->pars[$this->p_vars['curpar']])) + $this->pars[$this->p_vars['curpar']] = new $indtype; + $this->pars[$this->p_vars['curpar']]->add($text); + } + } + + /**#@-*/ + /**#@+ + * @access private + * @param string|parserInlineTag token from the ObjectWordParser + * @param integer parser event from {@link ParserDescCleanup.inc} + */ + /** + * Handles special case where a description needs the text "<tag>" and tag + * is one of code, b, i, pre, var, or any other valid in-DocBlock html tag. + * + * the text <<<code>>> in a DocBlock will parse out as <<code>>, instead + * of being parsed as markup. + */ + function handleEscape($word, $pevent) + { + $this->p_vars['event_stack']->popEvent(); + if (!in_array($word, $this->tokens[PHPDOCUMENTOR_PDP_STATE_ESCAPE])) + { + if ($word == '<') + { + $this->addText($word); + $this->wp->backupPos($word.$word); + } else { + $this->addText('<<'); + $this->wp->backupPos($word); + } + return; + } + $this->addText('<'.str_replace('>>','>',$word)); + } + + /** + * Just like {@link handleEscape}, except the only valid escape is + * <<</pre>>> + */ + function handleEscapePre($word, $pevent) + { + $this->p_vars['event_stack']->popEvent(); + $this->addText('</pre>'); + } + + /** + * Just like {@link handleEscape}, except the only valid escape is + * <<</code>>> + */ + function handleEscapeCode($word, $pevent) + { + $this->p_vars['event_stack']->popEvent(); + $this->addText('</code>'); + } + + /** + * Handle "<<br>>" + * Add a new {@link parserBr} + * @uses addText() + */ + function handleBr($word, $pevent) + { + if (is_string($word) && $this->checkEventPop($word, $pevent)) + { + $this->addText(new parserBr); + } + } + + /** + * Handles simple lists + * + * phpEdit has an ingenious facility to handle simple lists used in a + * DocBlock like this: + * + * - item 1 + * - item 2 + * - item 3 + * + * The DocBlock is: + * <pre> + * * - item 1 + * * - item 2 + * * - item 3 + * </pre> + * This function converts these simple lists into the parserList class + * @param boolean true if this is the first list item in the list + */ + function handleSimpleList($word, $pevent, $start = false) + { + if (is_object($word) && $this->p_flags['in_item']) + { + $this->p_vars['list_item'][0]->add($word); + return; + } + if (is_string($word) && $this->checkEventPush($word, $pevent)) + { + $this->p_flags['in_event'] = true; + return; + } + $ltrimword = @substr($word, @strpos($word, ltrim($word))); + $is_valid = false; + if (strlen(trim($word)) == 0) + { + if ($this->wp->nextIsObjectOrNonNL()) + { + $is_valid = true; + } + } + if ($word == "\n" && is_string($this->p_vars['last_word']) + && $this->p_vars['last_word']{strlen($this->p_vars['last_word']) - 1} + == "\n") + { + if ($this->p_flags['in_item']) + { + $this->p_vars['lists'][0]->addItem($this->p_vars['list_item'][0]); + unset($this->p_vars['list_item'][0]); + $this->setContext('normal'); + $this->p_flags['simplelist'] = false; + $this->addText($this->p_vars['lists'][0]); + unset($this->p_vars['lists']); + unset($this->p_vars['last_list']); + $this->wp->backuppos($word); + $this->p_vars['event_stack']->popEvent(); + $this->p_flags['in_item'] = false; +// debug('end of list 3'); + return; + } else + { + $this->wp->backuppos($word); + $this->p_vars['event_stack']->popEvent(); + $this->p_flags['in_item'] = false; +// debug('not a list 2'); + return; + } + } + $start_list = $this->getStartList($word); + if (substr($ltrimword,0,strlen($start_list)) != $start_list + || $this->p_flags['in_event'] || is_object($this->p_vars['last_word'])) + { + if (((strlen($this->p_vars['whitespace']) + 1) < strlen(substr($word,0,strpos($word, $ltrimword)))) + || $word == "\n" + || $is_valid + || $this->p_flags['in_event'] + || (is_object($this->p_vars['last_word']) && $this->p_flags['in_item'])) + { + $this->p_vars['list_item'][0]->add($word); + $this->resetStartList($start_list); + $this->p_flags['in_event'] = false; +// debug('middle of list'); + } else + { + if ($this->p_flags['in_item']) + { + $this->p_vars['lists'][0]->addItem($this->p_vars['list_item'][0]); + unset($this->p_vars['list_item'][0]); + $this->setContext('normal'); + $this->p_flags['simplelist'] = false; + $this->addText($this->p_vars['lists'][0]); + unset($this->p_vars['lists']); + unset($this->p_vars['last_list']); + $this->wp->backuppos($word); + $this->p_vars['event_stack']->popEvent(); + $this->p_flags['in_item'] = false; +// debug('end of list 1'); + return; + } else + { + $this->wp->backuppos($word); + $this->p_vars['event_stack']->popEvent(); + $this->p_flags['in_item'] = false; +// debug('not a list'); + return; + } + } + } else + { + if ($this->p_vars['whitespace'] != substr($word,0,strpos($word, $start_list))) + { // if the whitespace is greater than that preceding the list + // delimiter, it's a multi-line list item + $this->setContext('normal'); + $this->p_flags['simplelist'] = false; + $this->addText($this->p_vars['lists'][0]); + unset($this->p_vars['lists']); + $this->wp->backuppos($word); + $this->p_vars['event_stack']->popEvent(); + unset($this->p_vars['last_list']); + $this->p_flags['in_item'] = false; +// debug('end of list 2'); + return; + } else + { + if ($this->p_flags['in_item']) + { + // end of a list item, add it to the list + $this->p_vars['lists'][0]->addItem($this->p_vars['list_item'][0]); + unset($this->p_vars['list_item'][0]); + } +// debug('next list item'); + $this->p_vars['list_item'][0] = new parserStringWithInlineTags; + $this->p_vars['list_item'][0]->add(ltrim(substr($ltrimword,strlen($start_list)))); + $this->p_flags['in_item'] = true; + } + } + } + /**#@-*/ + /** + * Get the next list marker + * + * In unordered lists, this will be something like "o", "-" + * + * In ordered lists, this will be either the number "3", "5" or "3.", "5." + * @return string text of the next list marker to look for + * @param string current word from the parser + * @access private + */ + function getStartList($word) + { + // unordered, return the first marker found + if (!$this->p_flags['orderedlist']) return $this->p_vars['start_list']; + if (isset($this->p_vars['last_list'])) + { + $this->p_vars['save_list'] = $this->p_vars['last_list']; + $next = $this->p_vars['last_list']; + // increment to next list number, convert to string + if (substr($this->p_vars['start_list'], strlen($this->p_vars['start_list']) - 1) == '.') + $next = (substr($next, 0, strpos($next,'.')) + 1) . '.'; + else + $next = ($next + 1) . ''; +// debug("next is '$next'"); + if ($this->p_vars['whitespace'] == substr($word,0,strpos($word, $next))) + return $this->p_vars['last_list'] = $next; + // the next number is not in this word, so return but don't save + return $next; + } else + { + $this->p_vars['last_list'] = $this->p_vars['start_list']; + return $this->p_vars['start_list']; + } + } + + /** + * Set the next list marker to the current list marker + * + * In ordered lists, this will ensure that the next number returned is the + * right number + * @param string token for next list marker + * @access private + */ + function resetStartList($start) + { + if (!isset($this->p_vars['save_list'])) return false; + $this->p_vars['last_list'] = $this->p_vars['save_list']; + } + + /**#@+ + * @access private + * @param string|parserInlineTag token from the ObjectWordParser + * @param integer parser event from {@link ParserDescCleanup.inc} + */ + /** + * Handles <<ol>>,<<li>>,<<ul>> + * + * This allows parsing of lists nested to any level. Using + * the lists and list_item temporary variables and using + * list_count to control nesting, the method creates a {@link parserList} + * for each <<ol>> or <<ul>> tag, and a + * standard {@link parserStringWithInlineTags} for all the text, adding + * in nested lists as if they were inline tags (the conversion interface + * is the same for both object types) + */ + function handleList($word, $pevent) + { + if (is_string($word) && $this->checkEventPush($word, $pevent)) + { + return; + } + $ordered = false; + if (!is_object($this->p_vars['last_word']) && strtolower($this->p_vars['last_word']) == '<ol>') + { + // ordered list + $ordered = true; + } + // start a new list + if (!is_object($this->p_vars['last_word']) && (strtolower($this->p_vars['last_word']) == '<ol>' || strtolower($this->p_vars['last_word']) == '<ul>')) + { + $this->p_flags['in_item'] = false; + $this->setContext('list'); + $this->p_vars['lists'][++$this->p_vars['list_count']] = new parserList($ordered); + } + if (!is_object($word) && strtolower($word) == '<li>') + { + if ($this->p_flags['in_item']) + { + // end of a list item (no end tag), add it to the list + $this->p_vars['lists'][$this->p_vars['list_count']]->addItem($this->p_vars['list_item'][$this->p_vars['list_count']]); + unset($this->p_vars['list_item'][$this->p_vars['list_count']]); + } + // start a new list item + $this->p_vars['list_item'][$this->p_vars['list_count']] = new parserStringWithInlineTags; + $this->p_flags['in_item'] = true; + } else + { + if (is_object($word) || (strtolower($word) != '</li>')) + { + if (is_object($word) || (strtolower($word) != '</ul>' && strtolower($word) != '</ol>')) + { + // item text + if (isset($this->p_vars['list_item'][$this->p_vars['list_count']])) + { + if (is_string($word) && $word == ' ' && + $this->p_vars['last_word'] == ' ') return; + $this->p_vars['list_item'][$this->p_vars['list_count']]->add($word); + } + } else + { + if ($this->p_flags['in_item']) + { + // end the current list item before ending a list + $this->p_vars['lists'][$this->p_vars['list_count']]->addItem($this->p_vars['list_item'][$this->p_vars['list_count']]); + unset($this->p_vars['list_item'][$this->p_vars['list_count']]); + $this->p_flags['in_item'] = false; + } + if (is_string($word) && $this->checkEventPop($word, $pevent)) + { + if ($this->p_vars['list_count'] > 1) + { + // this is a sublist, add it to the list item of the parent list + if (!isset($this->p_vars['list_item'][$this->p_vars['list_count'] - 1])) { + addErrorDie(PDERROR_UL_IN_UL); + } + $this->p_vars['list_item'][$this->p_vars['list_count'] - 1]->add($this->p_vars['lists'][$this->p_vars['list_count']]); + // remove the sublist item and sublist, drop to parent list + unset($this->p_vars['lists'][$this->p_vars['list_count']]); + unset($this->p_vars['lists'][$this->p_vars['list_count']]); + $this->p_vars['list_count']--; + $this->p_flags['in_item'] = true; + } else + { + // this is a primary list and it has concluded + $this->pars[$this->p_vars['curpar']]->add($this->p_vars['lists'][$this->p_vars['list_count']]); + unset($this->p_vars['lists']); + unset($this->p_vars['list_item']); + $this->p_vars['list_count'] = 0; + $this->dropContext(); + } + } + } + } else + { + // check to make sure our list item is not unclosed + if (!$this->p_flags['in_item']) + { + addError(PDERROR_TEXT_OUTSIDE_LI); + } else + { + // end of a list item, add it to the list + $this->p_vars['lists'][$this->p_vars['list_count']]->addItem($this->p_vars['list_item'][$this->p_vars['list_count']]); + unset($this->p_vars['list_item'][$this->p_vars['list_count']]); + $this->p_flags['in_item'] = false; + } + } + } + } + + /** + * Handles <<code>><</code>> blocks + */ + function handleCode($word, $pevent) + { + if (!isset($this->p_vars['my_code'])) + { + $this->setContext('my_code'); + $this->p_vars['my_code'] = new parserCode; + } + if (is_string($word) && $this->checkEventPush($word, $pevent)) return; + if (is_object($word) || strtolower($word) != '</code>') $this->p_vars['my_code']->add($word); + if (is_string($word)) + { + if ($this->checkEventPop($word,$pevent)) + { + $this->dropContext(); + $this->addText($this->p_vars['my_code']); + unset($this->p_vars['my_code']); + } + } + } + + /** + * Handles <<pre>><</pre>> blocks + */ + function handlePre($word, $pevent) + { + if (!isset($this->p_vars['my_pre'])) + { + $this->setContext('my_pre'); + $this->p_vars['my_pre'] = new parserPre; + } + if (is_string($word) && $this->checkEventPush($word, $pevent)) return; + if (is_object($word) || strtolower($word) != '</pre>') $this->p_vars['my_pre']->add($word); + if (is_string($word)) + { + if ($this->checkEventPop($word,$pevent)) + { + $this->dropContext(); + $this->addText($this->p_vars['my_pre']); + unset($this->p_vars['my_pre']); + } + } + } + + /** + * Handles <<b>><</b>> blocks + */ + function handleB($word, $pevent) + { + if (!isset($this->p_vars['my_b'])) + { + $this->setContext('my_b'); + $this->p_vars['my_b'] = new parserB; + } + if (is_string($word)) + { + if ($this->checkEventPop($word,$pevent)) + { + $this->dropContext(); + $this->addText($this->p_vars['my_b']); + unset($this->p_vars['my_b']); + } else + { + $this->p_vars['my_b']->add($word); + } + } else $this->p_vars['my_b']->add($word); + } + + /** + * Handles <<i>><</i>> blocks + */ + function handleI($word, $pevent) + { + if (!isset($this->p_vars['my_i'])) + { + $this->p_vars['my_i'] = new parserI; + $this->setContext('my_i'); + } + if (is_string($word)) + { + if ($this->checkEventPop($word,$pevent)) + { + $this->dropContext(); + $this->addText($this->p_vars['my_i']); + unset($this->p_vars['my_i']); + } else + { + $this->p_vars['my_i']->add($word); + } + } else $this->p_vars['my_i']->add($word); + } + + /** + * Handles <<var>><</var>> blocks + */ + function handleVar($word, $pevent) + { + if (!isset($this->p_vars['my_var'])) + { + $this->setContext('my_var'); + $this->p_vars['my_var'] = new parserDescVar; + } + if (is_string($word)) + { + if ($this->checkEventPop($word,$pevent)) + { + $this->dropContext(); + $this->addText($this->p_vars['my_var']); + unset($this->p_vars['my_var']); + } else + { + $this->p_vars['my_var']->add($word); + } + } else $this->p_vars['my_var']->add($word); + } + + /** + * Handles <<samp>><</samp>> blocks + */ + function handleSamp($word, $pevent) + { + if (!isset($this->p_vars['my_samp'])) + { + $this->setContext('my_samp'); + $this->p_vars['my_samp'] = new parserSamp; + } + if (is_string($word)) + { + if ($this->checkEventPop($word,$pevent)) + { + $this->dropContext(); + $this->addText($this->p_vars['my_samp']); + unset($this->p_vars['my_samp']); + } else + { + $this->p_vars['my_samp']->add($word); + } + } else $this->p_vars['my_samp']->add($word); + } + + /** + * Handles <<kbd>><</kbd>> blocks + */ + function handleKbd($word, $pevent) + { + if (!isset($this->p_vars['my_kbd'])) + { + $this->setContext('my_kbd'); + $this->p_vars['my_kbd'] = new parserKbd; + } + if (is_string($word)) + { + if ($this->checkEventPop($word,$pevent)) + { + $this->dropContext(); + $this->addText($this->p_vars['my_kbd']); + unset($this->p_vars['my_kbd']); + } else + { + $this->p_vars['my_kbd']->add($word); + } + } else $this->p_vars['my_kbd']->add($word); + } + + /** + * Handles <<p>><</p>> blocks + * + * Note that the only time <<p>> will be interpreted as delimiting a + * paragraph is if it is the first thing in the description. + */ + function handleP($word, $pevent) + { + if (!isset($this->parse_Ps)) $this->parse_Ps = false; + if (is_string($word)) + { + if (is_string($word) && $this->checkEventPush($word, $pevent)) return; + } + if (!$this->parse_Ps) + { + $this->p_vars['event_stack']->popEvent(); + if (!is_object($word) && strtolower($this->p_vars['last_word']) == '<p>') $this->addText('<p>'); + $this->addText($word); + return; + } + if (is_string($word) && $word == "\n") $word = " "; + if (is_string($word)) + { + if ($this->checkEventPop($word, $pevent)) + { + $this->p_vars['curpar']++; + return; + } + // if no closing tag, pretend there was one + if (!is_object($word) && strtolower($word) == '<p>' && $this->parse_Ps) + { + $this->p_vars['curpar']++; + return; + } + } + if ($this->p_vars['start']) + { + $this->addText($word); + } else + {// if the <p> is not at the beginning of the desc, then it is not + // possible to parse into paragraphs using this tag + if ($word === ' ' && $this->p_vars['last_word'] === ' ') return; + $this->addText($word); + } + } + + /** + * Handles \n\n as a paragraph marker + * @uses doSimpleList() + */ + function handleDoubleCR($word, $pevent) + { + $this->p_vars['event_stack']->popEvent(); + if ($word == "\n") + { + // only use this if <p> isn't being used + if ((!isset($this->parse_Ps) || !$this->parse_Ps)) + { + if ($this->p_vars['last_word'] == "\n") + { + $this->p_vars['curpar']++; + $this->parse_Ps = false; + } else + { + if (is_string($word) && !$this->checkEventPush($word, $pevent)) + { + if ($word == ' ' && $this->p_vars['last_word'] == ' ') return; + $this->addText($word); + } + } + } else + { + if (is_string($word) && !$this->checkEventPush($word, $pevent)) + { + if ($word == ' ' && $this->p_vars['last_word'] == ' ') return; + $this->addText($word); + } + } + } else + { + if ($this->p_vars['last_word'] == "\n") + { + if ((!isset($this->parse_Ps) || !$this->parse_Ps)) + { + $this->addText(' '); + } + } + if (is_string($word) && !($e = $this->checkEventPush($word, $pevent))) + { + if ($word == ' ' && $this->p_vars['last_word'] == ' ') return; + if ($this->doSimpleList($word)) return; + $this->addText($word); + } + } + } + + /**#@-*/ + /** + * Return a simple list, if found + * + * This helper function extracts a simple list beginning with any of + * 'o','-'.'#','+','0','1','0.','1.' and starts parsing it. + * @param string line that may contain a simple list + * @return boolean true if a list is found, false otherwise + */ + function doSimpleList($word) + { + if ($this->p_flags['in_event']) return true; + if (is_object($word)) return false; + $ltrimword = ltrim($word); + if ((strlen($ltrimword) != strlen($word)) + && strlen($ltrimword) > 1 + && ((in_array($ltrimword{0},array('o','-','1','0','#','+')) && $ltrimword{1} == ' ')) + || ((strlen($ltrimword) >= 2) && (substr($ltrimword,0,2) === '1.' || substr($ltrimword,0,2) === '0.') && $ltrimword{2} == ' ')) + { + // save the whitespace for comparison + $this->p_vars['whitespace'] = substr($word,0,strlen($word) - strlen($ltrimword)); + $this->p_vars['start_list'] = $ltrimword{0}; + if ($this->p_vars['start_list'] != '1' && $this->p_vars['start_list'] != '1.' && + $this->p_vars['start_list'] != '0' && $this->p_vars['start_list'] != '0.') + { + $this->p_flags['orderedlist'] = false; + } else + { + if (substr($ltrimword,0,2) == '1.') + { + $this->p_vars['start_list'] = '1.'; + } + $this->p_flags['orderedlist'] = true; + } + $this->p_vars['event_stack']->pushEvent(PHPDOCUMENTOR_PDP_EVENT_SIMLIST); + $this->setContext('list'); + $this->p_flags['simplelist'] = true; + $this->p_vars['lists'][0] = new parserList($this->p_flags['orderedlist']); + $this->p_vars['list_count'] = 0; + $this->handleSimpleList($word, PHPDOCUMENTOR_PDP_EVENT_SIMLIST, true); + return true; + } + return false; + } + /** + * setup the parser tokens, and the pushEvent/popEvent arrays + * @see $tokens, $pushEvent, $popEvent + * @param boolean determines whether to allow paragraph parsing + * @global boolean used to determine whether to slow things down or not by + * eliminating whitespace from comments + */ + + function setupStates($sdesc) + { + $this->p_flags['in_item'] = false; + $this->p_flags['in_event'] = false; + $this->p_flags['simplelist'] = false; + $this->_context = array('normal'); + $this->tokens[STATE_NOEVENTS] = array("\n", "<code>", "<pre>", "<ol>", "<ul>", + "<b>", "<i>", '<var>', '<kbd>', '<samp>', "<br", '<<'); + if (!$sdesc) + { + $this->tokens[STATE_NOEVENTS][] = "<p>"; + $this->tokens[STATE_NOEVENTS][] = "</p>"; + } + if (PHPDOCUMENTOR_KILL_WHITESPACE) $this->tokens[STATE_NOEVENTS][] = ' '; + $this->tokens[PHPDOCUMENTOR_PDP_STATE_P] = array("</p>","<code>","<pre>","\n","<ol>","<ul>","<b>","<i>","<br","<p>", '<<', + '<var>', '<kbd>', '<samp>'); + if (PHPDOCUMENTOR_KILL_WHITESPACE) $this->tokens[PHPDOCUMENTOR_PDP_STATE_P][] = ' '; + $this->tokens[PHPDOCUMENTOR_PDP_STATE_CODE] = array("</code>", '<</code>>'); + $this->tokens[PHPDOCUMENTOR_PDP_STATE_PRE] = array("</pre>", '<</pre>>'); + $this->tokens[PHPDOCUMENTOR_PDP_STATE_LIST] = array("<ul>","<ol>","</ul>","</ol>","<li>","</li>","<b>","<i>","<br", '<<',"<code>","<pre>","<br", + '<var>', '<kbd>', '<samp>'); + $this->tokens[PHPDOCUMENTOR_PDP_STATE_DOUBLECR] = array("\n","<ol>","<ul>","<code>","<pre>","<b>","<i>","<br","<p>","</p>", + '<var>', '<kbd>', '<samp>', '<<'); + $this->tokens[PHPDOCUMENTOR_PDP_STATE_SIMLIST] = array("\n",'<var>', '<kbd>', '<samp>','<b>','<i>', '<pre>', '<code>', + '<br', '<<'); + + $this->tokens[PHPDOCUMENTOR_PDP_STATE_B] = array("<code>","\n","<pre>","<ol>","<ul>","</b>","<i>","<br", '<<', + '<var>', '<kbd>', '<samp>'); + $this->tokens[PHPDOCUMENTOR_PDP_STATE_KBD] = array("<code>","\n","<pre>","<ol>","<ul>","<b>","<i>","<br", '<<', + '<var>', '</kbd>', '<samp>'); + $this->tokens[PHPDOCUMENTOR_PDP_STATE_VAR] = array("<code>","\n","<pre>","<ol>","<ul>","<b>","<i>","<br", '<<', + '</var>', '<kbd>', '<samp>'); + $this->tokens[PHPDOCUMENTOR_PDP_STATE_SAMP] = array("<code>","\n","<pre>","<ol>","<ul>","<b>","<i>","<br", '<<', + '<var>', '<kbd>', '</samp>'); + $this->tokens[PHPDOCUMENTOR_PDP_STATE_I] = array("<code>","\n","<pre>","<ol>","<ul>","<b>","</i>","<br", '<<', + '<var>', '<kbd>', '<samp>'); + $this->tokens[PHPDOCUMENTOR_PDP_STATE_BR] = array(">","/>"); + $this->tokens[PHPDOCUMENTOR_PDP_STATE_ESCAPE] = array('code>>', '/code>>', 'pre>>', '/pre>>', 'b>>', '/b>>', + 'i>>', '/i>>', 'ol>>', '/ol>>', 'ul>>', '/ul>>', 'li>>', '/li>>', + 'br>>', 'br />>', 'p>>', '/p>>', 'samp>>', '/samp>>', + 'kbd>>', '/kbd>>', 'var>>', '/var>>'); + if (PHPDOCUMENTOR_KILL_WHITESPACE) $this->tokens[PHPDOCUMENTOR_PDP_STATE_DOUBLECR][] = ' '; + + // For each event word to event mapings + $this->pushEvent[PARSER_EVENT_NOEVENTS] = + array( + "<code>" => PHPDOCUMENTOR_PDP_EVENT_CODE, + "<pre>" => PHPDOCUMENTOR_PDP_EVENT_PRE, + "<p>" => PHPDOCUMENTOR_PDP_EVENT_P, + "<var>" => PHPDOCUMENTOR_PDP_EVENT_VAR, + "<samp>" => PHPDOCUMENTOR_PDP_EVENT_SAMP, + "<kbd>" => PHPDOCUMENTOR_PDP_EVENT_KBD, + "<ol>" => PHPDOCUMENTOR_PDP_EVENT_LIST, + "<ul>" => PHPDOCUMENTOR_PDP_EVENT_LIST, + "<b>" => PHPDOCUMENTOR_PDP_EVENT_B, + "<i>" => PHPDOCUMENTOR_PDP_EVENT_I, + "<br" => PHPDOCUMENTOR_PDP_EVENT_BR, + "\n" => PHPDOCUMENTOR_PDP_EVENT_DOUBLECR, + '<<' => PHPDOCUMENTOR_PDP_EVENT_ESCAPE, + ); +########################## + $this->pushEvent[PHPDOCUMENTOR_PDP_EVENT_CODE] = + array( + '<</code>>' => PHPDOCUMENTOR_PDP_EVENT_ESCAPE_CODE, + ); + + $this->popEvent[PHPDOCUMENTOR_PDP_EVENT_CODE] = array("</code>"); +########################## + $this->pushEvent[PHPDOCUMENTOR_PDP_EVENT_PRE] = + array( + '<</pre>>' => PHPDOCUMENTOR_PDP_EVENT_ESCAPE_PRE, + ); + + $this->popEvent[PHPDOCUMENTOR_PDP_EVENT_PRE] = array("</pre>"); +########################## + + $this->popEvent[PHPDOCUMENTOR_PDP_EVENT_BR] = array(">","/>"); +########################## + $this->pushEvent[PHPDOCUMENTOR_PDP_EVENT_P] = + array( + "<code>" => PHPDOCUMENTOR_PDP_EVENT_CODE, + "<ol>" => PHPDOCUMENTOR_PDP_EVENT_LIST, + "<ul>" => PHPDOCUMENTOR_PDP_EVENT_LIST, + "<var>" => PHPDOCUMENTOR_PDP_EVENT_VAR, + "<samp>" => PHPDOCUMENTOR_PDP_EVENT_SAMP, + "<kbd>" => PHPDOCUMENTOR_PDP_EVENT_KBD, + "<pre>" => PHPDOCUMENTOR_PDP_EVENT_PRE, + "<b>" => PHPDOCUMENTOR_PDP_EVENT_B, + "<i>" => PHPDOCUMENTOR_PDP_EVENT_I, + "<br" => PHPDOCUMENTOR_PDP_EVENT_BR, + '<<' => PHPDOCUMENTOR_PDP_EVENT_ESCAPE, + ); + + $this->popEvent[PHPDOCUMENTOR_PDP_EVENT_P] = array("</p>"); +########################## + + $this->pushEvent[PHPDOCUMENTOR_PDP_EVENT_LIST] = + array( + "<ul>" => PHPDOCUMENTOR_PDP_EVENT_LIST, + "<ol>" => PHPDOCUMENTOR_PDP_EVENT_LIST, + "<code>" => PHPDOCUMENTOR_PDP_EVENT_CODE, + "<var>" => PHPDOCUMENTOR_PDP_EVENT_VAR, + "<samp>" => PHPDOCUMENTOR_PDP_EVENT_SAMP, + "<kbd>" => PHPDOCUMENTOR_PDP_EVENT_KBD, + "<b>" => PHPDOCUMENTOR_PDP_EVENT_B, + "<i>" => PHPDOCUMENTOR_PDP_EVENT_I, + "<pre>" => PHPDOCUMENTOR_PDP_EVENT_PRE, + "<br" => PHPDOCUMENTOR_PDP_EVENT_BR, + '<<' => PHPDOCUMENTOR_PDP_EVENT_ESCAPE, + ); + + $this->popEvent[PHPDOCUMENTOR_PDP_EVENT_LIST] = array("</ul>","</ol>"); +########################## + + $this->pushEvent[PHPDOCUMENTOR_PDP_EVENT_SIMLIST] = + array( + "<code>" => PHPDOCUMENTOR_PDP_EVENT_CODE, + "<pre>" => PHPDOCUMENTOR_PDP_EVENT_PRE, + "<p>" => PHPDOCUMENTOR_PDP_EVENT_P, + "<var>" => PHPDOCUMENTOR_PDP_EVENT_VAR, + "<samp>" => PHPDOCUMENTOR_PDP_EVENT_SAMP, + "<kbd>" => PHPDOCUMENTOR_PDP_EVENT_KBD, + "<b>" => PHPDOCUMENTOR_PDP_EVENT_B, + "<i>" => PHPDOCUMENTOR_PDP_EVENT_I, + "<br" => PHPDOCUMENTOR_PDP_EVENT_BR, + '<<' => PHPDOCUMENTOR_PDP_EVENT_ESCAPE, + ); +########################## + + $this->pushEvent[PHPDOCUMENTOR_PDP_EVENT_DOUBLECR] = + array( + "<code>" => PHPDOCUMENTOR_PDP_EVENT_CODE, + "<ol>" => PHPDOCUMENTOR_PDP_EVENT_LIST, + "<ul>" => PHPDOCUMENTOR_PDP_EVENT_LIST, + "<pre>" => PHPDOCUMENTOR_PDP_EVENT_PRE, + "<b>" => PHPDOCUMENTOR_PDP_EVENT_B, + "<i>" => PHPDOCUMENTOR_PDP_EVENT_I, + "<var>" => PHPDOCUMENTOR_PDP_EVENT_VAR, + "<samp>" => PHPDOCUMENTOR_PDP_EVENT_SAMP, + "<kbd>" => PHPDOCUMENTOR_PDP_EVENT_KBD, + "<br" => PHPDOCUMENTOR_PDP_EVENT_BR, + "<p>" => PHPDOCUMENTOR_PDP_EVENT_P, + '<<' => PHPDOCUMENTOR_PDP_EVENT_ESCAPE, + ); + +########################## + $this->pushEvent[PHPDOCUMENTOR_PDP_EVENT_B] = + array( + "<code>" => PHPDOCUMENTOR_PDP_EVENT_CODE, + "<ol>" => PHPDOCUMENTOR_PDP_EVENT_LIST, + "<ul>" => PHPDOCUMENTOR_PDP_EVENT_LIST, + "<pre>" => PHPDOCUMENTOR_PDP_EVENT_PRE, + "<var>" => PHPDOCUMENTOR_PDP_EVENT_VAR, + "<samp>" => PHPDOCUMENTOR_PDP_EVENT_SAMP, + "<kbd>" => PHPDOCUMENTOR_PDP_EVENT_KBD, + "<br" => PHPDOCUMENTOR_PDP_EVENT_BR, + '<i>' => PHPDOCUMENTOR_PDP_EVENT_I, + '<<' => PHPDOCUMENTOR_PDP_EVENT_ESCAPE, + ); + + $this->popEvent[PHPDOCUMENTOR_PDP_EVENT_B] = array("</b>"); + +########################## + $this->pushEvent[PHPDOCUMENTOR_PDP_EVENT_I] = + array( + "<code>" => PHPDOCUMENTOR_PDP_EVENT_CODE, + "<ol>" => PHPDOCUMENTOR_PDP_EVENT_LIST, + "<ul>" => PHPDOCUMENTOR_PDP_EVENT_LIST, + "<pre>" => PHPDOCUMENTOR_PDP_EVENT_PRE, + "<var>" => PHPDOCUMENTOR_PDP_EVENT_VAR, + "<samp>" => PHPDOCUMENTOR_PDP_EVENT_SAMP, + "<kbd>" => PHPDOCUMENTOR_PDP_EVENT_KBD, + "<br" => PHPDOCUMENTOR_PDP_EVENT_BR, + '<b>' => PHPDOCUMENTOR_PDP_EVENT_B, + '<<' => PHPDOCUMENTOR_PDP_EVENT_ESCAPE, + ); + + $this->popEvent[PHPDOCUMENTOR_PDP_EVENT_I] = array("</i>"); + +########################## + $this->pushEvent[PHPDOCUMENTOR_PDP_EVENT_VAR] = + array( + "<code>" => PHPDOCUMENTOR_PDP_EVENT_CODE, + "<ol>" => PHPDOCUMENTOR_PDP_EVENT_LIST, + "<ul>" => PHPDOCUMENTOR_PDP_EVENT_LIST, + "<pre>" => PHPDOCUMENTOR_PDP_EVENT_PRE, + "<i>" => PHPDOCUMENTOR_PDP_EVENT_I, + "<samp>" => PHPDOCUMENTOR_PDP_EVENT_SAMP, + "<kbd>" => PHPDOCUMENTOR_PDP_EVENT_KBD, + "<br" => PHPDOCUMENTOR_PDP_EVENT_BR, + '<b>' => PHPDOCUMENTOR_PDP_EVENT_B, + '<<' => PHPDOCUMENTOR_PDP_EVENT_ESCAPE, + ); + + $this->popEvent[PHPDOCUMENTOR_PDP_EVENT_VAR] = array("</var>"); + +########################## + $this->pushEvent[PHPDOCUMENTOR_PDP_EVENT_SAMP] = + array( + "<code>" => PHPDOCUMENTOR_PDP_EVENT_CODE, + "<ol>" => PHPDOCUMENTOR_PDP_EVENT_LIST, + "<ul>" => PHPDOCUMENTOR_PDP_EVENT_LIST, + "<pre>" => PHPDOCUMENTOR_PDP_EVENT_PRE, + "<var>" => PHPDOCUMENTOR_PDP_EVENT_VAR, + "<i>" => PHPDOCUMENTOR_PDP_EVENT_I, + "<kbd>" => PHPDOCUMENTOR_PDP_EVENT_KBD, + "<br" => PHPDOCUMENTOR_PDP_EVENT_BR, + '<b>' => PHPDOCUMENTOR_PDP_EVENT_B, + '<<' => PHPDOCUMENTOR_PDP_EVENT_ESCAPE, + ); + + $this->popEvent[PHPDOCUMENTOR_PDP_EVENT_SAMP] = array("</samp>"); + +########################## + $this->pushEvent[PHPDOCUMENTOR_PDP_EVENT_KBD] = + array( + "<code" => PHPDOCUMENTOR_PDP_EVENT_CODE, + "<ol>" => PHPDOCUMENTOR_PDP_EVENT_LIST, + "<ul>" => PHPDOCUMENTOR_PDP_EVENT_LIST, + "<pre" => PHPDOCUMENTOR_PDP_EVENT_PRE, + "<var>" => PHPDOCUMENTOR_PDP_EVENT_VAR, + "<samp>" => PHPDOCUMENTOR_PDP_EVENT_SAMP, + "<i>" => PHPDOCUMENTOR_PDP_EVENT_I, + "<br" => PHPDOCUMENTOR_PDP_EVENT_BR, + '<b>' => PHPDOCUMENTOR_PDP_EVENT_B, + '<<' => PHPDOCUMENTOR_PDP_EVENT_ESCAPE, + ); + + $this->popEvent[PHPDOCUMENTOR_PDP_EVENT_KBD] = array("</kbd>"); + } + + function getParserEventName ($value) + { + $lookup = array( + PARSER_EVENT_NOEVENTS => "PARSER_EVENT_NOEVENTS", + PHPDOCUMENTOR_PDP_EVENT_CODE => "PHPDOCUMENTOR_PDP_EVENT_CODE", + PHPDOCUMENTOR_PDP_EVENT_P => "PHPDOCUMENTOR_PDP_EVENT_P", + PHPDOCUMENTOR_PDP_EVENT_B => "PHPDOCUMENTOR_PDP_EVENT_B", + PHPDOCUMENTOR_PDP_EVENT_I => "PHPDOCUMENTOR_PDP_EVENT_I", + PHPDOCUMENTOR_PDP_EVENT_BR => "PHPDOCUMENTOR_PDP_EVENT_BR", + PHPDOCUMENTOR_PDP_EVENT_VAR => "PHPDOCUMENTOR_PDP_EVENT_VAR", + PHPDOCUMENTOR_PDP_EVENT_SAMP => "PHPDOCUMENTOR_PDP_EVENT_SAMP", + PHPDOCUMENTOR_PDP_EVENT_KBD => "PHPDOCUMENTOR_PDP_EVENT_KBD", + PHPDOCUMENTOR_PDP_EVENT_ESCAPE => "PHPDOCUMENTOR_PDP_EVENT_ESCAPE", + PHPDOCUMENTOR_PDP_EVENT_ESCAPE_CODE => "PHPDOCUMENTOR_PDP_EVENT_ESCAPE_CODE", + PHPDOCUMENTOR_PDP_EVENT_ESCAPE_PRE => "PHPDOCUMENTOR_PDP_EVENT_ESCAPE_PRE", + PHPDOCUMENTOR_PDP_EVENT_DOUBLECR => "PHPDOCUMENTOR_PDP_EVENT_DOUBLECR", + PHPDOCUMENTOR_PDP_EVENT_LIST => "PHPDOCUMENTOR_PDP_EVENT_LIST", + PHPDOCUMENTOR_PDP_EVENT_PRE => "PHPDOCUMENTOR_PDP_EVENT_PRE", + PHPDOCUMENTOR_PDP_EVENT_SIMLIST => "PHPDOCUMENTOR_PDP_EVENT_SIMLIST", + ); + if (isset($lookup[$value])) + return $lookup[$value]; + else return $value; + } +} + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/ParserDocBlock.inc b/buildscripts/PhpDocumentor/phpDocumentor/ParserDocBlock.inc new file mode 100755 index 00000000..2e29caeb --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/ParserDocBlock.inc @@ -0,0 +1,1227 @@ +<?php +/** + * DocBlock Parser Classes + * + * phpDocumentor :: automatic documentation generator + * + * PHP versions 4 and 5 + * + * Copyright (c) 2002-2006 Gregory Beaver + * + * LICENSE: + * + * This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General + * Public License as published by the Free Software Foundation; + * either version 2.1 of the License, or (at your option) any + * later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package phpDocumentor + * @subpackage ParserDocBlock + * @author Gregory Beaver <cellog@php.net> + * @copyright 2002-2006 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version CVS: $Id: ParserDocBlock.inc 287886 2009-08-30 05:31:05Z ashnazg $ + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @see Parser, WordParser + * @since 1.0rc1 + */ +/** + * represents a short or long description in a DocBlock ({@link parserDocBlock}) + * @package phpDocumentor + * @subpackage ParserDocBlock + * @author Greg Beaver <cellog@php.net> + * @since 1.0rc1 + * @version $Id: ParserDocBlock.inc 287886 2009-08-30 05:31:05Z ashnazg $ + */ +class parserDesc extends parserStringWithInlineTags +{ + /** + * Type is used by many functions to skip the hassle of if phpDocumentor_get_class($blah) == 'parserBlah' + * always '_desc' + * @var string + */ + var $type = '_desc'; + + /** + * @param mixed like {@link parserStringWithInlineTags::add()}, this can be a string or parserInlineTag, but it can also be a + * parserStringWithInlineTags, and the contents will be merged + */ + function add($stringOrClass) + { + if (is_object($stringOrClass)) + { + if (phpDocumentor_get_class($stringOrClass) == 'parserstringwithinlinetags' || + phpDocumentor_get_class($stringOrClass) == 'parserdesc') + { + for($i=0;$i<count($stringOrClass->value);$i++) + { + parserStringWithInlineTags::add($stringOrClass->value[$i]); + } + } else + { + parserStringWithInlineTags::add($stringOrClass); + } + } else return parserStringWithInlineTags::add($stringOrClass); + } + + /** + * @return boolean whether this desc has an {@}inheritdoc} inline tag + */ + function hasInheritDoc() + { + for($i=0;$i<count($this->value);$i++) + { + if (phpDocumentor_get_class($this->value[$i])=='parserinheritdocinlinetag') return true; + } + } + + /** + * @return boolean whether this desc has an {@}source} inline tag + */ + function hasSource() + { + for($i=0;$i<count($this->value);$i++) + { + if (phpDocumentor_get_class($this->value[$i])=='parsersourceinlinetag') return true; + } + } + + /** + * replaces {@}inheritdoc} with the contents of the parent DocBlock + * @param parserDesc parent parserDesc, used to retrieve the description + */ + function replaceInheritDoc($desc) + { + $value = $this->value; + $this->value = array(); + for($i=0;$i<count($value);$i++) + { + if (phpDocumentor_get_class($value[$i])=='parserinheritdocinlinetag') + { + for($j=0;$j<count($desc->value);$j++) + { + $this->add($desc->value[$j]); + } + } else $this->add($value[$i]); + } + } +} + +/** + * Represents a docblock and its components, {@link $desc}, {@link $sdesc}, {@link $tags}, and also {@link $params} for functions + * @package phpDocumentor + * @subpackage ParserDocBlock + * @author Greg Beaver <cellog@php.net> + * @since 1.0rc1 + * @version $Id: ParserDocBlock.inc 287886 2009-08-30 05:31:05Z ashnazg $ + */ +class parserDocBlock +{ + /** + * @var parserDesc + */ + var $desc = false; + /** + * @var array array of {@link parserDesc}s + */ + var $processed_desc = false; + /** + * @var array array of {@link parserDesc}s + */ + var $processed_sdesc = false; + /** + * @var parserDesc + */ + var $sdesc = false; + /** + * Line number in the source on which this docblock begins + * @since 1.2 + * @var false|integer + */ + var $linenumber = false; + /** + * Line number in the source on which this docblock ends + * @since 1.2 + * @var false|integer + */ + var $endlinenumber = false; + /** + * array of {@link parserTag}s + * @var array + */ + var $tags = array(); + /** + * array of unrecognized {@link parserTag}s + * @var array + */ + var $unknown_tags = array(); + /** + * array of param data. + * Format: + * array(index of param in function parameter list -OR- parameter name => + * parserStringWithInlineTags,...) + * @var array + */ + var $params = array(); + /** + * array of global variable data. + * Format: + * array(index of global variable in @global tag list -OR- global variable name => + * array(datatype,parserStringWithInlineTags),...) + * @var array + */ + var $funcglobals = array(); + + /** + * array of static variable data. + * Format: + * array(index of static variable in @global tag list -OR- static variable name => + * {@link parserStaticvarTag},...) + * @var array + */ + var $statics = array(); + /** + * array of {@link parserPropertyTag}, {@link parserPropertyReadTag}, {@link parserPropertyWriteTag}, {@link parserMethodTag} magic tags + */ + var $properties = array(); + /** + * This is either a {@link parserReturnTag} or false if no return tag is present + * @var mixed + */ + var $return = false; + /** + * This is either a {@link parserVarTag} or false if no var tag is present + * @var mixed + */ + var $var = false; + /** + * fix for bug 591396 + * @var boolean + */ + var $explicitpackage = false; + /** + * fix for bug 708559 + * @var boolean + */ + var $explicitcategory = false; + /** @var string */ + var $category; + /** @var string */ + var $package = 'default'; + /** @var string */ + var $subpackage = ''; + /** + * whether this DocBlock has an @access tag + * @var boolean */ + var $hasaccess = false; + /** + * whether this DocBlock has a @name tag + * @var boolean */ + var $hasname = false; + /** + * description of package parsed from @package tag + * Unused in this version + * @var string + */ + var $packagedescrip = ''; + /** + * description of subpackage parsed from @package tag + * Unused in this version + * @var string + */ + var $subpackagedescrip = ''; + /** + * Determines whether a DocBlock can legally have a {@}source} tag + * @tutorial tags.inlinesource.pkg + * @var boolean + * @access private + */ + var $_canSource = false; + + /** + * sets package to default + * @global string default package name + */ + function parserDocBlock() + { + global $phpDocumentor_DefaultPackageName; + $this->package = $GLOBALS['phpDocumentor_DefaultPackageName']; + $this->category = $GLOBALS['phpDocumentor_DefaultCategoryName']; + } + + /** + * Sets the starting line number for the DocBlock + * @param integer + */ + function setLineNumber($number) + { + $this->linenumber = $number; + } + + /** + * Retrieve starting line number + * @return integer + */ + function getLineNumber() + { + return $this->linenumber; + } + + /** + * Sets the ending line number for the DocBlock + * @param integer + */ + function setEndLineNumber($number) + { + $this->endlinenumber = $number; + } + + /** + * Retrieve ending line number + * @return integer + */ + function getEndLineNumber() + { + return $this->endlinenumber; + } + + /** + * Parse out any html tags from doc comments, and make them into + * abstract structures + * @uses parserDescParser::parse() + */ + function postProcess() + { + if ($this->sdesc) + { + $parser = new parserDescParser; + $parser->subscribe('*',$this); + if ($this->desc) $parser->parse($this->desc->value); + $parser->parse($this->sdesc->value,true); + } + } + + /** + * Tells the DocBlock it can have a @filesource tag + * + * Only page-level DocBlocks may have a @filesource tag + */ + function canSource() + { + $this->_canSource = true; + } + + /** + * Tells the DocBlock it can't have a @filesource tag + * + * Only page-level DocBlocks may have a @filesource tag + */ + function cantSource() + { + $this->_canSource = false; + } + + /** + * Indirectly called after parsing by {@link postProcess} + * + * @param integer either 1 for long desc or 2 for short desc + * @param array data organized into paragraphs. Each entry is a {@link parserStringWithInlineTags} + * @uses $processed_desc sets to the array passed from {@link parserDescParser::parse()} + * @uses $processed_sdesc sets to the array passed from {@link parserDescParser::parse()} + * @access private + */ + function HandleEvent($event,$data) + { + if ($event == 1) + $this->processed_desc = $data; + else + $this->processed_sdesc = $data; + } + + /** + * @param array + */ + function updateModifiers($modifiers) + { + if (is_array($modifiers) && count($modifiers)) + { + foreach ($modifiers as $modifier) + { + switch ($modifier) + { + case 'private' : + case 'public' : + case 'protected' : + unset($this->tags['access']); + $x = new parserAccessTag($modifier); + if ($x->isvalid) + { + $this->hasaccess = true; + $this->tags['access'][] = $x; + } + break; + case 'static' : + case 'abstract' : + unset($this->tags[$modifier]); + $this->addKeyword($modifier, ''); + break; + } + } + } + } + + /** + * Set the short description of the DocBlock + * + * Setting the short description is possible by passing in one of three + * possible parameters: + * <ul> + * <li>another DocBlock's short description</li> + * <li>another DocBlock, the short description will be extracted</li> + * <li>a Zend Studio-compatible @desc tag</li> + * </ul> + * @param parserDesc|parserDocBlock|parserTag sets {@link $sdesc} + */ + function setShortDesc($desc) + { + if (phpDocumentor_get_class($desc) == 'parsertag') + { + $this->sdesc = new parserDesc; + $this->processed_sdesc = $desc->value; + return; + } + if (phpDocumentor_get_class($desc) == 'parserdesc') { + $this->sdesc = $desc; + } else + { + $this->sdesc = $desc->sdesc; + $this->processed_sdesc = $desc->processed_sdesc; + } + + if ($this->sdesc && $this->sdesc->hasSource()) + { + addWarning(PDERROR_SOURCE_TAG_IGNORED,$this->sdesc->getString()); + } + } + + /** + * Passes to {@link parserStringWithInlineTags::setSource()} + * + * After passing, it calls {@link postProcess()} to set up the new + * source + * @param string|array tokenized highlight-ready source code + * @param false|string name of class if this is a method source + */ + function setSource($source, $class = false) + { + if ($this->desc) + { + $this->desc->setSource($source, $class); + $this->postProcess(); + } + } + + /** + * @param parserDesc|parserDocBlock sets {@link $desc} + */ + function setDesc($desc) + { + if (phpDocumentor_get_class($desc) == 'parserdesc') + $this->desc = $desc; + else + { + $this->desc = $desc->desc; + $this->processed_desc = $desc->processed_desc; + } + } + + /** + * Wrapper for {@link parserDesc::hasInheritDoc()} + * @return boolean + */ + function hasInheritDoc() + { + if (!$this->desc) return false; + return $this->desc->hasInheritDoc(); + } + + /** + * Wrapper for {@link parserDesc::replaceInheritDoc()} + * + * Also replaces {@}inheritdoc} in the {@link $processed_desc} + * @param parserDesc + */ + function replaceInheritDoc($desc) + { + if (!$this->desc) return false; + $this->desc->replaceInheritDoc($desc->desc); + $this->postProcess(); + } + + /** + * @param Converter takes {@link $sdesc} and converts it to a string and returns it if present, otherwise returns '' + * @return string + */ + function getSDesc(&$converter) + { + if ($this->sdesc && $this->processed_sdesc) + { + $result = ''; + foreach($this->processed_sdesc as $desc) + { + if (count($desc->value)) + $result .= $desc->Convert($converter); + } + return $result; + } else + { +// var_dump($this->desc,$this->processed_desc); + } + return ''; + } + + /** + * @param Converter takes {@link $desc} and converts it to a string and returns it if present, otherwise returns '' + * @return string + */ + function getDesc(&$converter) + { + if ($this->desc && $this->processed_desc) + { + $result = ''; + foreach($this->processed_desc as $desc) + { + if (count($desc->value)) + $result .= $converter->EncloseParagraph($desc->Convert($converter)); + } + return $result; + } else + { +// var_dump($this->desc,$this->processed_desc); + } + return ''; + } + + /** + * @param string $paramVar if empty, param is indexed in the order received and set using {@link changeParam()} + * @param parserStringWithInlineTags $value + */ + function addParam($paramVar, $paramType, $value) + { + if (empty($paramVar)) + $this->params[count($this->params)] = new parserParamTag($paramType,$value); + else + $this->params[$paramVar] = new parserParamTag($paramType,$value); + } + + function resetParams() + { + $this->params = array(); + } + /** + * @param integer $index index of parameter in the {@link $params} array + * @param string $name name of the parameter to set in the $params array + * @param string|null $type type of the parameter + */ + function changeParam($index, $name, $type) + { + if ($name === $index) { + return; + } + $this->params[$name] = $this->params[$index]; + unset($this->params[$index]); + } + + /** + * replaces nameless parameters in the {@link $params} array with their names + * add @param tags for params in the function with no entry + * @param array $params Format: array(parameter key => + * array(0 => parameter name[,1 => default value][,2 => type hint]),...) + */ + function updateParams($params) + { + $countparams = array_values($params); + reset($params); + for($i=0;$i<count($countparams);$i++, next($params)) + { + if (isset($this->params[$i])) + { + $info = current($params); + $type = isset($info[2]) ? $info[2] : null; + $this->changeParam($i, key($params), $type); + $params[key($params)] = false; + } + } + $blank = new parserStringWithInlineTags; + foreach ($params as $key => $info) { + if (!$info) { + continue; + } + $type = isset($info[2]) ? $info[2] : null; + if (!isset($this->params[$info[0]])) { + $this->addParam($info[0], $type, $blank); + } + } + reset($params); + + if (isset($this->tags)) + unset($this->tags['param']); + } + + /** + * Used to insert DocBlock Template tags into a docblock + * @param parserTag tag + * @global array used to determine whether to add ignored tags, or not + */ + function addTag($tag) + { + global $_phpDocumentor_setting; + if (phpDocumentor_setup::checkIgnoreTag($tag->keyword)) return; + $value = $tag->value; + if (is_array($value)) { + $value = empty($value[0]) ? '' : $value[0]; + } + if ($tag->keyword == 'uses') + { + $this->addUses($value, $tag->_description); + } else + { + $this->addKeyword($tag->keyword, $value); + } + } + + /** + * @param string $keyword tag name + * @param parserStringWithInlineTags $value the contents of the tag + * @global array used to determine whether to add the @internal tag or not + */ + function addKeyword($keyword, $value) + { + global $_phpDocumentor_setting; + $keyword = trim($keyword); + if (phpDocumentor_setup::checkIgnoreTag($keyword)) return; + // don't add the tag at all if it was specified to ignore it with --ignore-tags + if ($keyword == 'package' || $keyword == 'subpackage' || $keyword == 'category') return $this->addPackage($keyword, $value); + if ($keyword == 'access') return $this->addAccess($value); + if ($keyword == 'link') return $this->addLink($value); + if ($keyword == 'see' || $keyword == 'tutorial') return $this->addSee($keyword,$value); + if ($keyword == 'uses') return $this->addUses($keyword, $value); + if ($keyword == 'name') return $this->addName($value); + if (!in_array($keyword,$GLOBALS['_phpDocumentor_tags_allowed'])) + $this->addUnknownTag($keyword,$value); + else + { + if ($keyword == 'internal' && (!isset($_phpDocumentor_setting['parseprivate']) || $_phpDocumentor_setting['parseprivate'] == 'off')) return; + if (!isset($this->tags[$keyword])) { + $this->tags[$keyword] = array(); + } + $ptag = 'parserTag'; + if (class_exists('parser'.$keyword.'tag')) + $ptag = 'parser'.ucfirst($keyword).'Tag'; + array_unshift($this->tags[$keyword], new $ptag($keyword, $value)); + } + } + + /** + * adds an @example tag + * @param string contents of the tag + * @param string path to the file containing this tag + */ + function addExample($value, $path) + { + $this->tags['example'][] = new parserExampleTag($value, $path); + } + + /** + * adds an unknown tag to the {@link $unknown_tags} array for use by custom converters + * @param string tag name + * @param string tag value + */ + function addUnknownTag($keyword, $value) + { + addWarning(PDERROR_UNKNOWN_TAG,$keyword); + $this->unknown_tags[$keyword][] = new parserTag($keyword, $value); + } + + /** + * set the element's package to the passed values. Used in {@link phpDocumentor_IntermediateParser} to align package of + * elements inside a class or procedural page to the package of the class/procedural page + * @param string + * @param string + * @param string + * @param string element name + * @param string element type (include, define, var, method, global, function, const) + */ + function overridePackage($category, $package,$subpackage,$elname,$type) + { + if ($this->package != $GLOBALS['phpDocumentor_DefaultPackageName']) + { + addError(PDERROR_OVERRIDDEN_PACKAGE_TAGS,$elname,$type,$this->package); + $this->explicitpackage = false; + } + if (!empty($this->subpackage)) + addError(PDERROR_OVERRIDDEN_SUBPACKAGE_TAGS,$type,$elname,$this->subpackage); + $this->package = $GLOBALS['phpDocumentor_DefaultPackageName']; + $this->subpackage = ''; + $this->category = $category; + $this->addPackage('package',$package); + $this->addPackage('subpackage',$subpackage); + } + + /** + * Used if this docblock has a @package tag. + * + * phpDocumentor will guess package for DocBlocks that don't have + * a @package tag + * @uses $explicitpackage + */ + function setExplicitPackage() + { + $this->explicitpackage = true; + } + + /** + * If the DocBlock has a @package tag, then this returns true + * @return boolean + */ + function getExplicitPackage() + { + return $this->explicitpackage; + } + + /** + * Used if this docblock has a @category tag. + * + * phpDocumentor will guess category for DocBlocks that don't have + * a @category tag + * @uses $explicitcategory + */ + function setExplicitCategory() + { + $this->explicitcategory = true; + } + + /** + * If the DocBlock has a @category tag, then this returns true + * @return boolean + */ + function getExplicitCategory() + { + return $this->explicitcategory; + } + + /** + * @param string $keyword tag name (either package or subpackage) + * @param mixed $value either a string or a parserStringWithInlineTags. Strips all inline tags and use the text as the package + */ + function addPackage($keyword, $value) + { + if ($keyword == 'package') + { + if (!$this->explicitpackage) + { + if (!is_string($value)) + $value = $value->getString(); + $rest = ''; + $value = explode(' ',$value); + if (count($value) - 1) + { + $rest = $value; + $value = trim($value[0]); + unset($rest[0]); + $rest = implode($rest,' '); + } else + { + $value = explode("\t",$value[0]); + if (count($value) - 1) + { + $rest = $value; + $value = trim($value[0]); + unset($rest[0]); + $rest = implode($rest,"\t"); + } else $value = trim($value[0]); + } + $value = preg_replace('/[^\[\]0-9\-a-zA-Z_\x7f-\xff]/', '-', $value); + $this->packagedescrip = $this->package = trim($value); + if (!empty($rest)) $this->packagedescrip = $rest; + } else + { + if (is_string($value)) + addError(PDERROR_MULTIPLE_PACKAGE_TAGS,$value); + else + addError(PDERROR_MULTIPLE_PACKAGE_TAGS,$value->getString()); + } + } elseif ($keyword == 'subpackage') + { + if (empty($this->subpackage)) + { + if (!is_string($value)) + $value = $value->getString(); + $rest = ''; + $value = explode(' ',$value); + if (count($value) - 1) + { + $rest = $value; + $value = $value[0]; + unset($rest[0]); + $rest = implode($rest,' '); + } else + { + $value = explode("\t",$value[0]); + if (count($value) - 1) + { + $rest = $value; + $value = $value[0]; + unset($rest[0]); + $rest = implode($rest,"\t"); + } else $value = $value[0]; + } + if (!empty($value)) + { + $value = preg_replace('/[^\[\]0-9\-a-zA-Z_\x7f-\xff]/', '-', $value); + } + $this->subpackage = trim($value); + if (!empty($rest)) $this->subpackagedescrip = $rest; + } else + { + if (is_string($value)) + addError(PDERROR_MULTIPLE_SUBPACKAGE_TAGS,$value); + else + addError(PDERROR_MULTIPLE_SUBPACKAGE_TAGS,$value->getString()); + } + } elseif ($keyword == 'category') + { + if (!$this->explicitcategory) + { + if (!is_string($value)) + $value = $value->getString(); + $value = preg_replace('/[^\[\]0-9\-a-zA-Z_\x7f-\xff]/', '-', $value); + $this->category = $value; + } else + { + if (is_string($value)) + addError(PDERROR_MULTIPLE_CATEGORY_TAGS,$value); + else + addError(PDERROR_MULTIPLE_CATEGORY_TAGS,$value->getString()); + } + } + } + + /** + * Adds a @name tag to the tag list + * @param string new name of element + */ + function addName($value) + { + if (is_object($value)) $value = $value->getString(); + if (!$this->hasname) + { + $x = new parserNameTag('name',$value); + $this->hasname = true; + $this->tags['name'][] = $x; + } else + { + addError(PDERROR_MULTIPLE_NAME_TAGS,$value); + } + } + + /** + * @param string if empty, staticvar is indexed in the order received and set using {@link changeStatic()} + * @param string data type + * @param parserStringWithInlineTags + */ + function addStaticVar($staticvar, $type, $descrip) + { + if (empty($staticvar)) + $this->statics[] = new parserStaticvarTag($type,$descrip); + else + $this->statics[$staticvar] = new parserStaticvarTag($type,$descrip); + } + + /** + * adds a function declaration of @global to the {@link $funcglobals} array + * @param string global type + * @param string description of how the global is used in the function + */ + function addFuncGlobal($type,$value) + { + $this->funcglobals[] = array($type,$value); + } + + /** + * @param integer $index index of parameter in the {@link $funcglobals} array + * @param string $name name of the parameter to set in the $funcglobals array + */ + function changeGlobal($index,$name) + { + $this->funcglobals[$name] = $this->funcglobals[$index]; + unset($this->funcglobals[$index]); + } + + /** + * @param integer $index index of parameter in the {@link $statics} array + * @param string $name name of the parameter to set in the $statics array + */ + function changeStatic($index,$name) + { + $this->statics[$name] = $this->statics[$index]; + unset($this->statics[$index]); + } + + /** + * replaces nameless global variables in the {@link $funcglobals} array with their names + * @param array + */ + function updateGlobals($funcs) + { + for($i=0;$i<count($funcs);$i++) + { + if (isset($this->funcglobals[$i])) + { + $this->changeGlobal($i,$funcs[$i]); + } + } + } + + /** + * replaces nameless static variables in the {@link $statics} array with their names + * @param array + */ + function updateStatics($funcs) + { + for($i=0;$i<count($funcs);$i++) + { + if (isset($this->statics[$i])) + { + $this->changeStatic($i,$funcs[$i]); + } + } + } + + /** + * add an @access tag to the {@link tags} array + * @param string should be either public or private + */ + function addAccess($value) + { + if (is_object($value)) $value = $value->getString(); + $value = strtolower($value); + if (!$this->hasaccess) + { + $x = new parserAccessTag($value); + if ($x->isvalid) + { + $this->hasaccess = true; + $this->tags['access'][] = $x; + } + } else + { + if (is_string($value)) + addError(PDERROR_MULTIPLE_ACCESS_TAGS,$value); + else + addError(PDERROR_MULTIPLE_ACCESS_TAGS,$value->getString()); + } + } + + /** + * Adds a new @filesource tag to the DocBlock + * @tutorial tags.filesource.pkg + * @param string full path to the file + * @param array tokenized source code, ordered by line number + */ + function addFileSource($path, $source) + { + if (isset($this->tags['filesource'])) return; + $this->tags['filesource'][] = new parserFileSourceTag($path, $source); + } + + /** + * creates a {@link parserLinkTag} and adds it to the {@link $tags} array + * @param string $link + */ + function addLink($link) + { + if (phpDocumentor_setup::checkIgnoreTag('@link')) return; + $this->tags['link'][] = new parserLinkTag($link); + } + + /** + * creates a {@link parserLinkTag} and adds it to the {@link $tags} array + * @param string either see or uses + * @param string $value + */ + function addSee($keyword,$value) + { + if (phpDocumentor_setup::checkIgnoreTag($keyword)) return; + $tag = 'parser'.ucfirst($keyword).'Tag'; + $this->tags[$keyword][] = new $tag($value); + } + + /** + * creates a {@link parserReturnTag} and adds it to the {@link $tags} array + * @param string $returnType the one-word name of the return type (mixed should be used if more than one type) + * @param parserStringWithInlineTags $value + */ + function addReturn($returnType, $value) + { + // only take the first one + if (!$this->return) + { + $this->return = new parserReturnTag($returnType, $value); + } else + { + addError(PDERROR_MULTIPLE_RETURN_TAGS,$returnType,$value->getString()); + } + } + + /** + * creates a {@link parserVarTag} and adds it to the {@link $tags} array + * @param string $varType the one-word name of the variable type (mixed should be used if more than one type) + * @param parserStringWithInlineTags $value + */ + function addVar($varType, $value) + { + // only take the first one + if (!$this->var) + { + $this->var = new parserVarTag($varType, $value); + } else + { + addError(PDERROR_MULTIPLE_VAR_TAGS,$varType,$value->getString()); + } + } + + /** + * Adds a virtual @usedby tag to output + * @param abstractLink link to the element that has a @uses tag + * @param parserStringWithInlinetags description of how the elements uses + * this one + * @access private + */ + function addUsedBy($link, $descrip) + { + $this->tags['usedby'][] = new parserUsedByTag($link, $descrip); + } + + /** + * Add a @uses tag to the DocBlock + * @param string @see-style text, used for {@link Converter::getLink()} + * @param parserStringWithInlineTags description of how the used element is + * used + * @tutorial tags.uses.pkg + */ + function addUses($seeel, $description) + { + $this->tags['uses'][] = new parserUsesTag($seeel, $description); + usort($this->tags['uses'], array($this, '_sortUses')); + } + + /** + * Adds a @property(-read or -write) or @method magic tag to the DocBlock + */ + function addProperty( $tagName, $propertyName, $propertyType, $value ) + { + if ( empty( $propertyName ) ) + { + addWarning ( PDERROR_MISSING_PROPERTY_TAG_NAME, $tagName, $tagName, $propertyType, $value->getString() ); + } + else + { + switch ( $tagName ) + { + case 'property': + $this->properties[ $propertyName ] = new parserPropertyTag( $propertyType, $value ); + break; + case 'property-read': + $this->properties[ $propertyName ] = new parserPropertyReadTag( $propertyType, $value ); + break; + case 'property-write': + $this->properties[ $propertyName ] = new parserPropertyWriteTag( $propertyType, $value ); + break; + case 'method': + $this->properties[ $propertyName ] = new parserMethodTag( $propertyType, $value ); + break; + } + } + } + + /** + * Custom sorting function for sorting @uses tags + * + * @param parserTag $a + * @param parserTag $b + * @access private + * @return int + */ + function _sortUses($a, $b) + { + return strnatcasecmp($a->getString(), $b->getString()); + } + + /** + * @param string + * @return mixed false if no keyword, unconverted value if one keyword, array of unconverted values if more than one keyword + */ + function getKeyword($keyword) + { + if ($keyword == 'filesource' && !$this->_canSource) return false; + if (isset($this->tags[$keyword])) + { + if (count($this->tags[$keyword]) == 1) + { + return $this->tags[$keyword][0]; + } else return $this->tags[$keyword]; + } else return false; + } + + /** + * @return array Format: array('var' => tag name, 'data' => unconverted tag value) + */ + function listParams() + { + if (isset($this->params)) + { + $ret = array(); + foreach($this->params as $key => $val) + { + $ret[] = array("var" => ucfirst($key),"data" => $val); + } + return $ret; + } else { + return array(); + } + } + + /** + * @return array Format: array('var' => tag name, 'data' => unconverted tag value) + */ + function listProperties() + { + $ret = array(); + if (isset($this->properties)) + { + foreach($this->properties as $key => $val) + { + $ret[] = array("var" => ucfirst($key),"data" => $val); + } + } + return $ret; + } + + /** + * @param Converter + */ + function listTags() + { + $tags = array(); + foreach($this->tags as $keyword => $vals) + { + if ($keyword == 'filesource' && !$this->_canSource) continue; + foreach($vals as $val) + { + $tags[] = $val; + } + } + usort($tags,'tagsort'); + return $tags; + } + + /** @return string always 'docblock' */ + function getType() + { + return 'docblock'; + } +} + +/** + * Determines the arbitrary tag rank value for a given tag + * @access private + */ +function getTagRanking($tag) +{ + switch(phpDocumentor_get_class($tag)) + { + case 'parserreturntag' : + $o = 0; + break; + case 'parservartag' : + $o = 1; + break; + case 'parsertutorialtag' : + $o = 2; + break; + case 'parserstaticvartag' : + $o = 3; + break; + case 'parserseetag' : + $o = 10; + break; + case 'parserlinktag' : + $o = 11; + break; + case 'parsertag' : + switch ($tag->keyword) + { + case 'author' : + $o = 4; + break; + case 'version' : + $o = 5; + break; + case 'copyright' : + $o = 6; + break; + case 'deprecated' : + case 'deprec' : + $o = 12; + break; + case 'todo' : + case 'TODO' : + $o = 13; + break; + case 'abstract' : + $o = 14; + break; + default : + $o = 15; + break; + } + break; + case 'parseraccesstag' : + $o = 18; + break; + case 'parsernametag' : + $o = 19; + break; + default : + $o = 20; + break; + } + return $o; +} + +/** + * Utilizes the getTagRanking method to determine tag sort order of two given tags + * @access private + */ +function tagsort($a, $b) +{ + $returnval = 0; + $o = getTagRanking($a); + $p = getTagRanking($b); + if ($o == $p) return 0; + if ($o < $p) return -1; + if ($o > $p) return 1; +} +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/ParserElements.inc b/buildscripts/PhpDocumentor/phpDocumentor/ParserElements.inc new file mode 100755 index 00000000..b0cdf50e --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/ParserElements.inc @@ -0,0 +1,2287 @@ +<?php +/** + * Parser Elements, all classes representing documentable elements + * + * phpDocumentor :: automatic documentation generator + * + * PHP versions 4 and 5 + * + * Copyright (c) 2002-2006 Gregory Beaver + * + * LICENSE: + * + * This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General + * Public License as published by the Free Software Foundation; + * either version 2.1 of the License, or (at your option) any + * later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package phpDocumentor + * @subpackage ParserElements + * @author Gregory Beaver <cellog@php.net> + * @copyright 2002-2006 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version CVS: $Id: ParserElements.inc 248547 2007-12-19 02:16:49Z ashnazg $ + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @see Parser, WordParser + * @since 1.1 + */ + +/** + * all elements except {@link parserPackagePage} descend from this abstract class + * @abstract + * @package phpDocumentor + * @subpackage ParserElements + * @author Greg Beaver <cellog@php.net> + * @since 1.0rc1 + * @version $Id: ParserElements.inc 248547 2007-12-19 02:16:49Z ashnazg $ + */ +class parserElement extends parserBase +{ + /** + * @var mixed either false or a {@link parserDocBlock} + */ + var $docblock = false; + /** + * name of this element, or include type if element is a {@link parserInclude} + */ + var $name; + + /** + * @var mixed either false or an array of paths to files with conflicts + */ + var $conflicts = false; + + /** + * location of this element (filename) + * @var string + */ + var $file = ''; + + /** + * full path location of this element (filename) + * @var string + */ + var $path = ''; + + /** + * line number on file where this element stops + * @since 1.2 + * @var false|integer + */ + var $endlinenumber = 0; + + /** + * Line number in the source on which this element appears + * @since 1.2 + * @var false|integer + */ + var $linenumber = false; + + /** + * @param parserDocBlock + */ + function setDocBlock($docblock) + { + $this->docblock = $docblock; + } + + /** + * @param string + */ + function setName($name) + { + $this->name = trim($name); + } + + /** + * Set starting line number + * @param integer + */ + function setLineNumber($number) + { + $this->linenumber = $number; + } + + /** + * Sets the ending line number of elements + * @param integer + */ + function setEndLineNumber($l) + { + $this->endlinenumber = $l; + } + + /** + * @return integer + */ + function getLineNumber() + { + return $this->linenumber; + } + + /** + * @return integer + */ + function getEndLineNumber() + { + return $this->endlinenumber; + } + + /** @return string package containing this element */ + function getPackage() + { + if ($this->docblock) + { + return $this->docblock->package; + } else return $GLOBALS['phpDocumentor_DefaultPackageName']; + } + + /** @param string */ + function setFile($file) + { + $this->file = $file; + } + + /** @param string */ + function setPath($file) + { + // look for special windows case + if(SMART_PATH_DELIMITER === '\\') + $this->path = strtr($file,'/','\\'); + else + $this->path = $file; + } + + /** + * @return string + */ + function getName() + { + if (!isset($this->name)) return false; + return $this->name; + } + + /** + * @return string + */ + function getFile() + { + if (!isset($this->file)) return false; + return $this->file; + } + + /** + * @return string + */ + function getPath() + { + if (!isset($this->path)) return false; + return $this->path; + } +} + +/** + * @package phpDocumentor + * @subpackage ParserElements + * @author Greg Beaver <cellog@php.net> + * @since 1.0rc1 + * @version $Id: ParserElements.inc 248547 2007-12-19 02:16:49Z ashnazg $ + */ +class parserInclude extends parserElement +{ + /** + * Type is used by many functions to skip the hassle of if phpDocumentor_get_class($blah) == 'parserBlah' + * @var string always 'include' + */ + var $type = 'include'; +} + +/** + * @package phpDocumentor + * @subpackage ParserElements + * @author Greg Beaver <cellog@php.net> + * @since 1.1 + * @version $Id: ParserElements.inc 248547 2007-12-19 02:16:49Z ashnazg $ + */ +class parserGlobal extends parserElement +{ + /** + * Type is used by many functions to skip the hassle of if phpDocumentor_get_class($blah) == 'parserBlah' + * @var string always 'global' + */ + var $type = 'global'; + + /** + * Name of the global's data type + * @var string + */ + var $datatype = 'mixed'; + + /** + * quick way to link to this element + * @return mixed converter-specific link to this global variable + * @param Converter + * @param string text to display for the link or false for default text + */ + function getLink(&$c, $text = false, $returnobj = false) + { + if ($returnobj) + { + return $c->getLink('global ' . $this->name, $this->docblock->package); + } + return $c->getGlobalLink($this->name, $this->docblock->package, $this->path, $text); + } + + /** + * Returns all global variables in other packages that have the same name as this global variable + * @return mixed false or an array Format: (package => {@link parserGlobal} of conflicting global variable) + * @param Converter + */ + function getConflicts(&$c) + { + $a = $c->proceduralpages->getGlobalConflicts($this->name); + unset($a[$this->docblock->package]); + return $a; + } + + /** + * Sets the name of the global variable's type + * @param string + */ + function setDataType($type) + { + $this->datatype = $type; + } + + /** + * Retrieve converter-specific representation of the data type + * + * If the data type is a documented class name, then this function will + * return a Converter-specific link to that class's documentation, so users + * can click/browse to the documentation directly from the global variable + * declaration + * @return string + * @param Converter + */ + function getDataType(&$converter) + { + $converted_datatype = $this->datatype; + if (strpos($this->datatype,'|')) + { + $my_types = ''; + $types = explode('|',$this->datatype); + foreach($types as $returntype) + { + $a = $converter->getLink($returntype); + if (is_object($a) && phpDocumentor_get_class($a) == 'classlink') + { + if (!empty($my_types)) $my_types .= '|'; + $my_types .= $converter->returnSee($a,$converter->type_adjust($returntype)); + } else + { + if (!empty($my_types)) $my_types .= '|'; + $my_types .= $converter->type_adjust($returntype); + } + } + $converted_datatype = $my_types; + } else + { + $a = $converter->getLink($this->datatype); + if (is_object($a) && phpDocumentor_get_class($a) == 'classlink') + { + $converted_datatype = $converter->returnSee($a,$converter->type_adjust($this->datatype)); + } else + { + $converted_dataype = $converter->type_adjust($this->datatype); + } + } + return $converted_datatype; + } + +} + +/** + * @package phpDocumentor + * @subpackage ParserElements + * @author Greg Beaver <cellog@php.net> + * @since 1.0rc1 + * @version $Id: ParserElements.inc 248547 2007-12-19 02:16:49Z ashnazg $ + */ +class parserFunction extends parserElement +{ + /** + * Type is used by many functions to skip the hassle of if phpDocumentor_get_class($blah) == 'parserBlah' + * @var string always 'function' + */ + var $type = 'function'; + /** + * parameters parsed from function definition. + * + * param name may be null, in which case, updateParams() must be called from the Converter + * @var array Format: array(param name => default value parsed from function definition) + * @see updateParams() + */ + var $params = false; + /** + * Function returns a reference to an element, instead of a value + * + * set to true if function is declared as: + * <code> + * function &func(... + * </code> + * @var boolean + */ + var $returnsreference = false; + /** + * global declarations parsed from function definition + * + * @var array Format: array(globalname1, globalname2,....) + */ + var $globals = false; + /** + * static variable declarations parsed from function definition + * @var array Format: array(array('name' => staticvar1,'val' => '' or default val of staticvar1),...) + */ + var $statics = false; + + var $source = ''; + + /** + * @param string + * @param string default value parsed from function definition + * @param boolean indicates whether this parameter has a default value + * @param null|string class type hint + */ + function addParam($name, $value, $has_default = true, $typehint = null) + { + $this->params[$name] = array($value, $has_default); + if (isset($typehint)) + { + $this->params[$name][2] = $typehint; + } + } + + /** + * Set the source code. Always array in PHP 4.3.0+ + * @param string|array + */ + function addSource($source) + { + $this->source = $source; + } + + /** + * Determine whether the source code has been requested via {@}source} + * @return boolean + */ + function hasSource() + { + if (is_array($this->source)) return true; + return strlen($this->source); + } + + /** + * @return string|array source code ready for highlighting + */ + function getSource() + { + return $this->source; + } + + /** + * quick way to link to this element + * @return mixed converter-specific link to this function + * @param Converter + * @param string text to display for the link or false for default text + */ + function getLink($c, $text = false, $returnobj = false) + { + if ($returnobj) + { + return $c->getLink('function ' . $this->name, $this->docblock->package); + } + return $c->getFunctionLink($this->name, $this->docblock->package, $this->path, $text); + } + + /** + * Returns all functions in other packages that have the same name as this function + * @return mixed false or an array Format: (package => {@link parserFunction} of conflicting functions) + * @param Converter + */ + function getConflicts(&$c) + { + $a = $c->proceduralpages->getFuncConflicts($this->name); + unset($a[$this->docblock->package]); + return $a; + } + + /** + * Add all "global $var, $var2" declarations to this function + * @param array $globals Format: array(globalname1, globalname2,....) + */ + function addGlobals($globals) + { + $this->globals = $globals; + } + + /** + * Add all "static $var, $var2 = 6" declarations to this function + * @param array Format: array(varname1, varname2,...) + * @param array Format: array(default val of var 1, default val of var 2,...) if var 1 has no default, array(default val of var 2,...) + */ + function addStatics($static,$vals) + { + if (count($static)) + { + $this->statics = array(); + for($i=0;$i<count($static);$i++) + { + if (isset($static[$i])) + { + $a = ''; + if (isset($vals[$i])) $a = $vals[$i]; + $this->statics[] = array('name' => $static[$i],'val' => $a); + } + } + } + } + + /** + * @return string default value of param $name + * @param string + */ + function getParam ($name) + { + if (!isset($this->params[$name])) return false; + $test = $this->params[$name]; + if ($test[1]) + { + return $this->params[$name]; + } else + { + return false; + } + } + + /** + * @return array format: array(array(paramname, default value),...) + */ + function listParams () + { + if (isset($this->params)) + { + $ret = array(); + if ($this->params) + foreach($this->params as $key => $val) + { + if ($val[1]) + { + $arr = array($key,$val[0]); + if (isset($val[2])) + { + $arr[2] = $val[2]; + } + $ret[$key] = $arr; + } else + { + $arr = array($key,false); + if (isset($val[2])) + { + $arr[2] = $val[2]; + } + $ret[$key] = $arr; + } + } + return $ret; + } else { + return array(); + } + } + + /** + * @return array format: array(array(index, globalname),...) + */ + function listGlobals () + { + if (isset($this->globals)) + { + $ret = array(); + if ($this->globals) + foreach($this->globals as $key => $val) + { + $ret[] = array($key,$val); + } + return $ret; + } else { + return array(); + } + } + + /** + * @return array format: array(array(static var name, static var default value),...) + */ + function listStatics () + { + if (isset($this->statics)) + { + $ret = array(); + if ($this->statics) + foreach($this->statics as $key => $val) + { + $ret[] = array($val['name'],$val['val']); + } + return $ret; + } else { + return array(); + } + } + + /** + * sets {@link $returnsreference} to true + */ + function setReturnsReference() + { + $this->returnsreference = true; + } + + /** + * @return boolean returns value of {@link $returnsreference} + */ + function getReturnsReference() + { + return $this->returnsreference; + } + + /** + * Get a human-friendly description of the function call + * + * takes declaration like: + * <code> + * /** @returns string ... {rest of docblock} + * function &func($param1, $param2 = 6, + * $param3 = array('20',9 => "heroo")) + * {...} + * </code> + * and returns: + * string &func( $param1, [$param2 = 6], [$param3 = array('20',9 => "heroo")] ) + * @return string stylized function declaration + */ + function getFunctionCall() + { + $a = ''; + if ($this->getReturnsReference()) $a = '&'; + $function_call = $a.$this->getName() . " ( "; + $tmp = 0; + foreach($this->listParams() as $param) + { + if ($tmp == 0) + { + $tmp = 1; + } else { + $function_call .= ", "; + } + if ($param[1] !== false) + { + $function_call .= "[$param[0] = $param[1]]"; + } else { + $function_call .= $param[0]; + } + $update_params[] = $param[0]; + } + $function_call .= " )"; + return $function_call; + } + + /** + * Like getFunctionCall(), but has no English or pre-determined formatting. + * + * Much more flexible. + * @return array Format: + * <code> + * array('name' => function name, + * 'returnsref' => boolean if declared as "function &name()" + * 'params' => array('type' => data type of parameter, + * 'description' => from @param tag, + * 'name' => variable name, + * 'default' => default value if any)) + * </code> + * @see getFunctionCall() + */ + function getIntricateFunctionCall($converter,$paramtags) + { + $a = array(); + if ($this->getReturnsReference()) $a['returnsref'] = true; + $a['name'] = $converter->type_adjust($this->getName()); + $c = $this->listParams(); + foreach($c as $param) + { + $b = array(); + $b['type'] = 'mixed'; + if (isset($paramtags[$param[0]])) + { + $b['type'] = $paramtags[$param[0]]['datatype']; + $b['description'] = $paramtags[$param[0]]['data']; + unset($paramtags[$param[0]]); + } elseif(isset($paramtags[substr($param[0],1)])) + { + $b['type'] = $paramtags[substr($param[0],1)]['datatype']; + $b['description'] = $paramtags[substr($param[0],1)]['data']; + unset($paramtags[substr($param[0],1)]); + } + if (isset($param[2])) + { + $link = $converter->getLink('object ' . $param[2]); + if ($link) { + $link = $converter->returnSee($link, $param[2], true); + $b['type'] = $link; + } else { + $b['type'] = $param[2]; + } + } + $b['name'] = $param[0]; + $b['default'] = $converter->postProcess($param[1]); + $b['hasdefault'] = ($param[1] !== false); + $a['params'][] = $b; + } + // @param tags that don't correspond to actual parameters (like extra function values) + if (count($paramtags)) + { + foreach($paramtags as $param) + { + $b = array(); + $b['type'] = $param['datatype']; + $b['description'] = $param['data']; + $b['name'] = $param['var']; + $b['default'] = ''; + $b['hasdefault'] = false; + $a['params'][] = $b; + } + } + return $a; + } +} + +/** + * @package phpDocumentor + * @subpackage ParserElements + * @author Greg Beaver <cellog@php.net> + * @since 1.0rc1 + * @version $Id: ParserElements.inc 248547 2007-12-19 02:16:49Z ashnazg $ + */ +class parserClass extends parserElement +{ + /** + * Type is used by many functions to skip the hassle of if phpDocumentor_get_class($blah) == 'parserBlah' + * @var string always 'class' + */ + var $type = 'class'; + /** @var string + * @see parserPage::$sourceLocation */ + var $sourceLocation = ''; + /** + * @var mixed false or contents of extends clause in class declaration + */ + var $extends = false; + /** + * @var array a list of interfaces this class implements + */ + var $_implements = array(); + /** + * @var array a list of interfaces this class implements + * @access private + */ + var $_modifiers = false; + /** + * @var boolean determines whether a class is considered to be an interface + * @access private + */ + var $_isInterface = false; + /** + * Format: array(file, parent) where parent class is found or false if no parent + * @var mixed + */ + var $parent = false; + /** + * Used to determine whether a class should be ignored or not. Helps maintain integrity of parsing + * @var boolean + * @see Classes::getParentClass() + */ + var $ignore = false; + + /** + * @var string same as {@link parserElement::$path} + */ + var $curfile = false; + /** + * @var tutorialLink|false either a link to the tutorial associated with this class, or false + */ + var $tutorial = false; + + /** + * Get the PHP5+ modifiers for this class + * (abstract/final/static/private/protected/public) + * @return array|false + */ + function getModifiers() + { + return $this->_modifiers; + } + + /** + * Set the PHP5+ modifiers for this class + * (abstract/final/static/private/protected/public) + * @param string $m + */ + function setModifiers($m) + { + $this->_modifiers = $m; + } + + /** + * @param parserTutorial + * @param Converter + */ + function addTutorial($t,&$c) + { + $this->tutorial = new tutorialLink; + $this->tutorial->addLink('',$t->path,$t->name,$t->package,$t->subpackage,$t->getTitle($c)); + } + + /** + * Get the associated tutorial for this class, if any + * @tutorial tutorials.pkg + * @return parserTutorial + */ + function getTutorial() + { + return $this->tutorial; + } + + /** + * Returns all classes in other packages that have the same name as this class + * @return mixed false or an array Format: (package => {@link parserClass} of conflicting classes) + * @param Converter + */ + function getConflicts(&$c) + { + $a = $c->classes->getConflicts($this->name); + unset($a[$this->docblock->package]); + return $a; + } + + /** + * quick way to link to this element + * @return mixed converter-specific link to this class + * @param Converter + * @param string text to display for the link or false for default text + */ + function getLink($c, $text = false, $returnobj = false) + { + if ($returnobj) + { + return $c->getLink('object ' . $this->name, $this->docblock->package); + } + return $c->getClassLink($this->name, $this->docblock->package, $this->curfile, $text); + } + + /** + * @param string parent class name + * @param string parent class file + * @param Classes {@link Classes} object currently calling setParent + * @see Classes::setClassParent() + */ + + function setParent($p,$f, &$c) + { + $this->parent = array($f, $p); + $p = $c->getClass($p, $f); + // inherit package if no @package tag is in the docblock, fixes 591396 + if (!$this->docblock->getExplicitPackage()) + { + $this->docblock->package = $p->docblock->package; + } + if ($this->docblock->package == $p->docblock->package) + { + if ($this->docblock->subpackage == '') + $this->docblock->subpackage = $p->docblock->subpackage; + } + $author = $p->docblock->getKeyword('author'); + $version = $p->docblock->getKeyword('version'); + $copyright = $p->docblock->getKeyword('copyright'); + // inherit tags + if (!$this->docblock->getKeyword('author')) + { + if ($author && !is_array($author)) $author = array($author); + if ($author) $this->docblock->tags['author'] = $author; + } + if (!$this->docblock->getKeyword('version')) + { + if ($version && !is_array($version)) $version = array($version); + if ($version) $this->docblock->tags['version'] = $version; + } + if (!$this->docblock->getKeyword('copyright')) + { + if ($copyright && !is_array($copyright)) $copyright = array($copyright); + if ($copyright) $this->docblock->tags['copyright'] = $copyright; + } + if (!$this->docblock->sdesc) + { + $this->docblock->setShortDesc($p->docblock); + $this->docblock->setDesc($p->docblock); + } else + { + if ($this->docblock->hasInheritDoc()) + { + $this->docblock->replaceInheritDoc($p->docblock); + } + } + } + + /** + * @param string $par parent class name (used by {@link Classes::setClassParent()} if parent class not found + */ + function setParentNoClass($par) + { + $this->parent = $par; + } + + /** + * Use this method to set the type of class to be an interface + */ + function setInterface() + { + $this->_isInterface = true; + } + + /** + * @return boolean true if this is an interface class + */ + function isInterface() + { + return $this->_isInterface; + } + + /** + * Use this method to set access modifiers for a class + * @param array + */ + function setAccessModifiers($modifiers) + { + $this->_modifiers = $modifiers; + } + + /** + * retrieve object that represents the parent class + * @param Converter this function will not work before the Conversion stage of parsing + * @return mixed returns the {@link parserClass} representation of the parent class, or false if no parent class + */ + function &getParent(&$c) + { + $a = false; + if (!$this->parent) return $a; + if (is_array($this->parent)) + { + return $c->classes->getClass($this->parent[1],$this->parent[0]); + } else return $this->parent; + } + + /** + * @param Converter this function will not work before the Conversion stage of parsing + * @return array returns a simple array of method objects + */ + function getMethods(&$c) + { + return $c->classes->getMethods($this->name,$this->curfile); + } + + /** + * @return mixed {@link parserMethod} or false if not found + * @param Converter this function will not work before the Conversion stage of parsing + * @param string method name in this class + * @param boolean determines whether to search inherited methods as well + */ + function getMethod(&$c, $name, $inherited = false) + { + $ret = $c->classes->getMethod($this->name, $this->curfile, $name); + if ($ret) return $ret; + if ($inherited) { + $x = $this; + while ($x->parent && is_array($x->parent)) { + $par = $x->getParent($c); + $x = $par; + if ($meth = $x->getMethod($c, $name)) return $meth; + } + } + return false; + } + + /** + * @return mixed {@link parserVar} or false if not found + * @param Converter this function will not work before the Conversion stage of parsing + * @param string var name in this class + */ + function getVar(&$c, $name) + { + return $c->classes->getVar($this->name,$this->curfile,$name); + } + + /** + * @param Converter this function will not work before the Conversion stage of parsing + * @return array returns a simple array of method name strings + */ + function getMethodNames(&$c) + { + if (!$c->classes->hasMethods($this->curfile, $this->name)) return array(); + $arr = array(); + $arr1 = $this->getMethods($c); + for($i=0; $i < count($arr1); $i++) + { + $arr[] = $arr1[$i]->name; + } + return $arr; + } + + /** + * @param Converter this function will not work before the Conversion stage of parsing + * @param string method name + * @param boolean determines whether to search inherited methods as well + * @return boolean whether this class has a method of name $name + */ + function hasMethod(&$c, $name, $inherited = false) + { + $ret = $c->classes->hasMethod($this->name, $this->curfile, $name); + if ($ret) return $ret; + if ($inherited) { + $x = $this; + while ($x->parent && is_array($x->parent)) { + $par = $x->getParent($c); + $x = $par; + if ($x->hasMethod($c, $name)) return true; + } + } + return false; + } + + /** + * @param Converter this function will not work before the Conversion stage of parsing + * @param string var name + * @return boolean whether this class has a var of name $name + */ + function hasVar(&$c,$name) + { + return $c->classes->hasVar($this->name, $this->curfile, $name); + } + + /** + * @param Converter this function will not work before the Conversion stage of parsing + * @param string class constant name + * @return boolean whether this class has a constant of name $name + */ + function hasConst(&$c,$name) + { + return $c->classes->hasConst($this->name, $this->curfile, $name); + } + + /** + * @param Converter this function will not work before the Conversion stage of parsing + * @return array returns a simple array of var objects + */ + function getVars(&$c) + { + return $c->classes->getVars($this->name,$this->curfile); + } + + /** + * @param Converter this function will not work before the Conversion stage of parsing + * @return array returns a simple array of const objects + */ + function getConsts(&$c) + { + return $c->classes->getConsts($this->name,$this->curfile); + } + + /** + * @param Converter this function will not work before the Conversion stage of parsing + * @return array returns a simple array of var name strings + */ + function getVarNames(&$c) + { + if (!$c->classes->hasVars($this->curfile, $this->name)) return array(); + $arr = array(); + $arr1 = $this->getVars($c); + for($i=0; $i < count($arr1); $i++) + { + $arr[] = $arr1[$i]->name; + } + return $arr; + } + + /** + * @param Converter this function will not work before the Conversion stage of parsing + * @return array returns a simple array of const name strings + */ + function getConstNames(&$c) + { + if (!$c->classes->hasConsts($this->curfile, $this->name)) return array(); + $arr = array(); + $arr1 = $this->getConsts($c); + for($i=0; $i < count($arr1); $i++) + { + $arr[] = $arr1[$i]->name; + } + return $arr; + } + + /** + * @param Converter this function will not work before the Conversion stage of parsing + * @param boolean determines whether overriden methods should be included in the list of inherited methods + * @return array returns an array of methods by parent classname array(name => array(method1,method2..),name2 => array(method1....)) + */ + function getInheritedMethods(&$c,$override = false) + { + $x = $oldx = $this; + $methods = array(); + $arr = array(); + while ($x->parent && is_array($x->parent)) + { + $methods = array_merge($methods,$x->getMethodNames($c)); + $par = $x->getParent($c); + $parmethodnames = $par->getMethodNames($c); + $parmethods = $par->getMethods($c); + for($i=0; $i<count($parmethodnames); $i++) + { + if ($override) + { + if (!in_array($parmethodnames[$i],$methods)) + { + // fix for bug 587733 + if ($parmethods[$i]->docblock && $parmethods[$i]->docblock->hasaccess && !$c->parseprivate && $parmethods[$i]->docblock->tags['access'][0]->value == 'private') + { + continue; + } + $methods[] = $parmethodnames[$i]; + $arr[$par->getName()]['methods'][] = $parmethods[$i]; + $arr[$par->getName()]['file'] = $par->curfile; + } + } else + { + // fix for bug 587733 + if ($parmethods[$i]->docblock && $parmethods[$i]->docblock->hasaccess && !$c->parseprivate && $parmethods[$i]->docblock->tags['access'][0]->value == 'private') + { + continue; + } + $arr[$par->getName()]['methods'][] = $parmethods[$i]; + $arr[$par->getName()]['file'] = $par->curfile; + } + } + $oldx = $x; + $x = &$par; + } + if (is_a($oldx, 'parserClass') && is_a($oldx->getExtends(true), 'ReflectionClass')) { + $extends = $oldx->getExtends(true); + foreach ($extends->getMethods() as $method) { + $var = new parserMethod($oldx->getExtends()); + if ($method->returnsReference()) { + $var->setReturnsReference(); + } + $doc = new parserDocBlock; + foreach ($method->getParameters() as $param) { + $value = $param->isDefaultValueAvailable() ? var_export($param->getDefaultValue(), true) : null; + if ($param->isPassedByReference()) { + $var->addParam('&$' . $param->getName(), $value, $param->isOptional(), + $param->getClass()); + } else { + $var->addParam('$' . $param->getName(), $value, $param->isOptional(), + $param->getClass()); + } + } + $var->setName($method->getName()); + $doc->addPackage('package', $oldx->getPackage()); + $var->setDocBlock($doc); + $par = $method->getDeclaringClass(); + $var->setLineNumber($par->getStartLine()); + $modifiers = array(); + if ($method->isPrivate()) { + $modifiers[] = 'private'; + } + if ($method->isAbstract()) { + $modifiers[] = 'abstract'; + } + if ($method->isFinal()) { + $modifiers[] = 'final'; + } + if ($method->isProtected()) { + $modifiers[] = 'protected'; + } + if ($method->isPublic()) { + $modifiers[] = 'public'; + } + if ($method->isStatic()) { + $modifiers[] = 'static'; + } + if ($method->isConstructor()) { + $var->setConstructor(); + } + $var->setModifiers($modifiers); + $arr[$oldx->getExtends()]['methods'][] = $var; + $arr[$oldx->getExtends()]['file'] = '(internal)'; + } + } + return $arr; + } + + /** + * @param Converter this function will not work before the Conversion stage of parsing + * @param boolean determines whether overriden vars should be included in the list of inherited vars + * @return array returns an array of vars by parent classname array(name => array(var1,var1..),name2 => array(var1....)) + */ + function getInheritedVars(&$c,$override = true, $vars = false) + { + $x = $oldx = $this; + $vars = array(); + $arr = array(); + while ($x->parent && is_array($x->parent)) + { + $vars = array_merge($vars,$x->getVarNames($c)); + $par = $x->getParent($c); + $parvarnames = $par->getVarNames($c); + $parvars = $par->getVars($c); + for($i=0; $i<count($parvarnames); $i++) + { + if ($override) + { + if (!in_array($parvarnames[$i],$vars)) + { + // fix for bug 587733 + if ($parvars[$i]->docblock && $parvars[$i]->docblock->hasaccess && !$c->parseprivate && $parvars[$i]->docblock->tags['access'][0]->value == 'private') + { + continue; + } + $vars[] = $parvarnames[$i]; + $arr[$par->getName()]['vars'][] = $parvars[$i]; + $arr[$par->getName()]['file'] = $par->curfile; + } + } else + { + // fix for bug 587733 + if ($parvars[$i]->docblock && $parvars[$i]->docblock->hasaccess && !$c->parseprivate && $parvars[$i]->docblock->tags['access'][0]->value == 'private') + { + continue; + } + $arr[$par->getName()]['vars'][] = $parvars[$i]; + $arr[$par->getName()]['file'] = $par->curfile; + } + } + $oldx = $x; + $x = &$par; + } + if (is_a($oldx, 'parserClass') && is_a($oldx->getExtends(true), 'ReflectionClass')) { + $extends = $oldx->getExtends(true); + foreach ($extends->getProperties() as $property) { + $var = new parserVar($oldx->getExtends()); + $doc = new parserDocBlock; + $var->setName('$' . $property->getName()); + $doc->addPackage('package', $oldx->getPackage()); + $par = $property->getDeclaringClass(); + $var->setLineNumber($par->getStartLine()); + $modifiers = array(); + if ($property->isPrivate()) { + $modifiers[] = 'private'; + $doc->addAccess('private'); + } + if ($property->isProtected()) { + $modifiers[] = 'protected'; + $doc->addAccess('protected'); + } + if ($property->isPublic()) { + $modifiers[] = 'public'; + $doc->addAccess('public'); + } + $var->setDocBlock($doc); + $var->setModifiers($modifiers); + $arr[$oldx->getExtends()]['vars'][] = $var; + $arr[$oldx->getExtends()]['file'] = '(internal)'; + } + } + return $arr; + } + + /** + * @param Converter this function will not work before the Conversion stage of parsing + * @param boolean determines whether overriden vars should be included in the list of inherited vars + * @return array returns an array of consts by parent classname array(name => array(const1,const2..),name2 => array(const1....)) + */ + function getInheritedConsts(&$c,$override = false, $consts = false) + { + $x = $oldx = $this; + $consts = array(); + $arr = array(); + while ($x->parent && is_array($x->parent)) + { + $consts = array_merge($consts,$x->getConstNames($c)); + $par = $x->getParent($c); + $parvarnames = $par->getConstNames($c); + $parvars = $par->getConsts($c); + for($i=0; $i<count($parvarnames); $i++) + { + if ($override) + { + if (!in_array($parvarnames[$i],$consts)) + { + // fix for bug 587733 + if ($parvars[$i]->docblock && $parvars[$i]->docblock->hasaccess && !$c->parseprivate && $parvars[$i]->docblock->tags['access'][0]->value == 'private') + { + continue; + } + $consts[] = $parvarnames[$i]; + $arr[$par->getName()]['consts'][] = $parvars[$i]; + $arr[$par->getName()]['file'] = $par->curfile; + } + } else + { + // fix for bug 587733 + if ($parvars[$i]->docblock && $parvars[$i]->docblock->hasaccess && !$c->parseprivate && $parvars[$i]->docblock->tags['access'][0]->value == 'private') + { + continue; + } + $arr[$par->getName()]['consts'][] = $parvars[$i]; + $arr[$par->getName()]['file'] = $par->curfile; + } + } + $oldx = $x; + $x = &$par; + } + if (is_a($oldx, 'parserClass') && is_a($oldx->getExtends(true), 'ReflectionClass')) { + $extends = $oldx->getExtends(true); + if (!$extends->getConstants()) { + return $arr; + } + foreach ($extends->getConstants() as $property => $value) { + $var = new parserConst($oldx->getExtends()); + $doc = new parserDocBlock; + $var->setName($property); + $var->setValue(var_export($value, true)); + $doc->addPackage('package', $oldx->getPackage()); + $var->setLineNumber($extends->getStartLine()); + $var->setDocBlock($doc); + $arr[$oldx->getExtends()]['consts'][] = $var; + $arr[$oldx->getExtends()]['file'] = '(internal)'; + } + } + return $arr; + } + + /** + * @param Converter this function will not work before the Conversion stage of parsing + * @return array Format: array(parentclassname => parserClass/false if no parent, parentclassname2 => ...) + */ + function getParentClassTree(&$c) + { + $result = array(); + $result[$this->name] = $arr = $this->getParent($c); + if (is_string($arr)) $result[$arr] = false; + while ($arr && is_object($arr)) + { + $result[$arr->name] = $arr->getParent($c); + $arr = $arr->getParent($c); + if (is_string($arr)) $result[$arr] = false; + } + return $result; + } + + /** + * returns a list of all child classes of this class + * @param Converter this function will not work before the Conversion stage of parsing + * @return array Format: array(parserClass child1,parserClass child2,...) + */ + function getChildClassList(&$c) + { + $list = array(); + $kids = $c->classes->getDefiniteChildren($this->name,$this->curfile); + if ($kids) + { + foreach($kids as $chile => $file) + { + $list[] = $c->classes->getClass($chile,$file); + } + } + return $list; + } + + /** + * @param string + * @see $sourceLocation + */ + function setSourceLocation($sl) + { + $this->sourceLocation = $sl; + } + + /** + * @param Converter + * @param boolean + * @return string + * @see $sourceLocation + */ + function getSourceLocation($c,$pearize = false) + { + global $_phpDocumentor_options; + if (!isset($this->sourceLocation)) + { + $sl = false; + } + else + { + $sl = $this->sourceLocation; + if ($pearize) + { + if (strpos($sl,'pear/')) + { + $sl = substr($sl,strpos($sl,'pear/') + 5); + } + } + } + return $sl; + } + + /** + * @param string + * @see $extends + */ + function setExtends($extends) + { + $this->extends = $extends; + if (!class_exists('ReflectionClass') || !class_exists($extends)) { + return; + } + // this may throw an exception. Hopefully it won't if the class exists + $parent = new ReflectionClass($extends); + if (!$parent->isInternal()) { + return; + } + $this->extends = $parent; + } + + /** + * @param string + */ + function addImplements($implements) + { + $this->_implements[] = $implements; + } + + /** + * @return array + */ + function getImplements() + { + return $this->_implements; + } + + /** + * @return boolean + * @see $extends + */ + function getExtends($raw = false) + { + if (!isset($this->extends)) return false; + if (!$raw) { + if (is_a($this->extends, 'ReflectionClass')) { + return $this->extends->getName(); + } + } + return $this->extends; + } +} + +/** + * @package phpDocumentor + * @subpackage ParserElements + * @author Greg Beaver <cellog@php.net> + * @since 1.0rc1 + * @version $Id: ParserElements.inc 248547 2007-12-19 02:16:49Z ashnazg $ + */ +class parserVar extends parserElement +{ + /** + * Type is used by many functions to skip the hassle of if phpDocumentor_get_class($blah) == 'parserBlah' + * @var string always 'var' + */ + var $type = 'var'; + /** @var string class that contains this var */ + var $class = ''; + /** @var array */ + var $_modifiers; + + /** + * @param string + */ + function parserVar($class) + { + $this->class = $class; + } + + /** + * Retrieve the class name + * @return string Class name that this var belongs to + */ + function getClass() + { + return $this->class; + } + + /** + * Return a list of access modifiers (static/private/etc.) + * @return array + */ + function getModifiers() + { + return $this->_modifiers; + } + + /** + * Return name of the class that contains this method + * @return string + */ + function setModifiers($m) + { + $this->_modifiers = $m; + } + + /** + * quick way to link to this element + * @return mixed converter-specific link to this var + * @param Converter $c + * @param string $text text to display for the link or false for default text + */ + function getLink($c, $text = false, $returnobj = false) + { + if ($returnobj) + { + return $c->getLink($this->class . '::' . $this->name, $this->docblock->package); + } + return $c->getVarLink($this->name, $this->class, $this->docblock->package, false, $text); + } + + /** + * @param Converter + * @return mixed {@link parserVar} representing var this var overrides from the parent class, or false if none + */ + function getOverrides(&$c) + { + $class = $c->classes->getClass($this->class,$this->path); + $par = $class->getParent($c); + + if (!is_object($par)) { + if (is_a($class->getExtends(true), 'ReflectionClass')) { + $pare = $class->getExtends(true); + if (method_exists($pare, 'hasProperty') && + $pare->hasProperty(substr($this->name, 1))) { + $par = $pare; + $property = $par->getProperty(substr($this->name, 1)); + $ret = new parserVar($par->getName()); + $doc = new parserDocBlock; + $ret->setName('$' . $property->getName()); + $doc->addPackage('package', $class->getPackage()); + $ret->setLineNumber($par->getStartLine()); + $modifiers = array(); + if ($property->isPrivate()) { + if ($c->parseprivate) { + return false; + } + $modifiers[] = 'private'; + $doc->addAccess('private'); + } + if ($property->isProtected()) { + $modifiers[] = 'protected'; + $doc->addAccess('protected'); + } + if ($property->isPublic()) { + $modifiers[] = 'public'; + $doc->addAccess('public'); + } + $ret->setDocBlock($doc); + $ret->setModifiers($modifiers); + return $ret; + } + } + } + while (is_object($par)) + { + if ($par->hasVar($c,$this->name)) + { + $var = $par->getVar($c,$this->name); + if (!($var->docblock && $var->docblock->hasaccess && + !$c->parseprivate && $var->docblock->tags['access'][0]->value == 'private')) { + return $var; + } + } + $par = $par->getParent($c); + } + + return false; + } + + /** + * @param Converter + * @return array an array of parserVars from ALL child classes that override this var + */ + function getOverridingVars(&$c) + { + $class = $c->classes->getClass($this->class,$this->path); + + return $this->getOverridingVarsForClass($c, $class); + } + + /** + * @param Converter + * @param parserClass + * @return array an array of parserVars from ALL child classes that override this var in the given class + */ + function getOverridingVarsForClass(&$c, &$class) + { + $vars = array(); + if (!$class) return $meths; + $kids = $class->getChildClassList($c); + for($i=0; $i<count($kids); $i++) + { + if ($kids[$i]->hasVar($c, $this->name)) + { + $var = $kids[$i]->getVar($c,$this->name); + if (!($var->docblock && $var->docblock->hasaccess && !$c->parseprivate && $var->docblock->tags['access'][0]->value == 'private')) + $vars[] = $var; + } + + $vars = array_merge($vars, $this->getOverridingVarsForClass($c, $kids[$i])); + } + return $vars; + } +} + +/** + * @package phpDocumentor + * @subpackage ParserElements + * @author Greg Beaver <cellog@php.net> + * @since 1.2.4 + */ +class parserConst extends parserElement +{ + /** + * Type is used by many functions to skip the hassle of if phpDocumentor_get_class($blah) == 'parserBlah' + * @var string always 'const' + */ + var $type = 'const'; + /** @var string class that contains this var */ + var $class = ''; + + /** + * @param string + */ + function parserConst($class) + { + $this->class = $class; + } + + /** + * Retrieve the class name + * @return string Class name that this var belongs to + */ + function getClass() + { + return $this->class; + } + + /** + * quick way to link to this element + * @return mixed converter-specific link to this var + * @param Converter $c + * @param string $text text to display for the link or false for default text + */ + function getLink($c, $text = false, $returnobj = false) + { + if ($returnobj) + { + return $c->getLink($this->class . '::'. $this->name, $this->docblock->package); + } + return $c->getConstLink($this->name, $this->class, $this->docblock->package, false, $text); + } +} + +/** + * @package phpDocumentor + * @subpackage ParserElements + * @author Greg Beaver <cellog@php.net> + * @since 1.0rc1 + * @version $Id: ParserElements.inc 248547 2007-12-19 02:16:49Z ashnazg $ + */ +class parserMethod extends parserFunction +{ + /** + * Type is used by many functions to skip the hassle of if phpDocumentor_get_class($blah) == 'parserBlah' + * @var string always 'method' + */ + var $type = 'method'; + /** @var boolean whether this method is a constructor */ + var $isConstructor = false; + /** @var boolean whether this method is a destructor by PEAR standards */ + var $isDestructor = false; + /** @var string class that contains this method */ + var $class = ''; + var $_modifiers = array(); + + /** + * @param string + */ + function parserMethod($class) + { + $this->class = $class; + } + + /** + * @param string + * @param string default value parsed from function definition + * @param boolean indicates whether this parameter has a default value + * @param null|string class type hint + */ + function addParam($name, $value, $has_default = true, $typehint = null) + { + $this->params[$name] = array($value, $has_default); + if (isset($typehint)) + { + $this->params[$name][2] = $typehint; + } + } + + /** + * adds "constructor " to start of function call if {@link $isConstructor} is true + * @return string + * @see parent::getFunctionCall() + */ + function getFunctionCall() + { + $a = parserFunction::getFunctionCall(); + if ($this->isConstructor) $a = "constructor $a"; + return $a; + } + + function getIntricateFunctionCall($converter,$paramtags) + { + $a = parserFunction::getIntricateFunctionCall($converter,$paramtags); + if ($this->isConstructor) $a['constructor'] = true; + if ($this->isDestructor) $a['destructor'] = true; + return $a; + } + + /** + * Return name of the class that contains this method + * @return string + */ + function getClass() + { + return $this->class; + } + + /** + * Return name of the class that contains this method + * @return string + */ + function getModifiers() + { + return $this->_modifiers; + } + + /** + * Return name of the class that contains this method + * @return string + */ + function setModifiers($m) + { + $this->_modifiers = $m; + } + + /** + * @param Converter + * @return mixed {@link parserMethod} representing method this method + * overrides from the parent class, or false if none + */ + function getOverrides(&$c) + { + $class = $c->classes->getClass($this->class,$this->path); + + $par = $class->getParent($c); + if (!is_object($par)) { + if (is_a($class->getExtends(true), 'ReflectionClass')) { + $pare = $class->getExtends(true); + if (method_exists($pare, 'hasMethod') && $pare->hasMethod($this->name)) { + $par = $pare; + $method = $par->getMethod($this->name); + $var = new parserMethod($par->getName()); + if ($method->returnsReference()) { + $var->setReturnsReference(); + } + $doc = new parserDocBlock; + foreach ($method->getParameters() as $param) { + $value = ($param->isOptional() && !$method->isInternal()) ? var_export($param->getDefaultValue(), true) : null; + if ($param->isPassedByReference()) { + $var->addParam('&$' . $param->getName(), $value, $param->isOptional(), + $param->getClass()); + } else { + $var->addParam('$' . $param->getName(), $value, $param->isOptional(), + $param->getClass()); + } + } + $var->setName($method->getName()); + $doc->addPackage('package', $this->getPackage()); + $par = $method->getDeclaringClass(); + $var->setLineNumber($par->getStartLine()); + $modifiers = array(); + if ($method->isPrivate()) { + $modifiers[] = 'private'; + $doc->addAccess('private'); + } + $blank = new parserStringWithInlineTags; + if ($method->isAbstract()) { + $modifiers[] = 'abstract'; + $doc->addKeyword('abstract', $blank); + } + if ($method->isFinal()) { + $modifiers[] = 'final'; + $doc->addKeyword('final', $blank); + } + if ($method->isProtected()) { + $modifiers[] = 'protected'; + $doc->addAccess('protected'); + } + if ($method->isPublic()) { + $modifiers[] = 'public'; + $doc->addAccess('public'); + } + if ($method->isStatic()) { + $modifiers[] = 'static'; + $doc->addKeyword('static', $blank); + } + if ($method->isConstructor()) { + $var->setConstructor(); + } + $var->setDocBlock($doc); + $var->setModifiers($modifiers); + return $var; + } + } + } + + while (is_object($par)) + { + if ($par->hasMethod($c,$this->name)) + { + $meth = $par->getMethod($c,$this->name); + if (!($meth->docblock && $meth->docblock->hasaccess && + !$c->parseprivate && $meth->docblock->tags['access'][0]->value == 'private')) { + return $meth; + } + } + + $par = $par->getParent($c); + } + + return false; + } + /** + * @param Converter + * @return mixed {@link parserMethod} representing method this method implements + * from an interface, or false if none + */ + function getImplements(&$c) + { + $class = $c->classes->getClass($this->class,$this->path); + + $implements = $class->getImplements(); + if (!count($implements)) { + return false; + } + $ret = array(); + $haveAlready = array(); + foreach ($implements as $interface) { + $interface_link = $c->getLink('object ' . $interface); + if (is_a($interface_link, 'classlink')) { + $par = $c->classes->getClass($interface_link->name, + $interface_link->path); + if (is_object($par)) { + if ($par->hasMethod($c, $this->name, true)) + { + $meth = $par->getMethod($c, $this->name); + if (!$meth) { + $meth = $par->getMethod($c, $this->name, true); + } + if (!($meth->docblock && $meth->docblock->hasaccess && + !$c->parseprivate && $meth->docblock->tags['access'][0]->value == 'private')) { + if (isset($haveAlready[$meth->getClass()])) { + // this ensures extended interfaces don't cause + // 2 links to the same method + if ($haveAlready[$meth->getClass()] == $this->name) { + continue; + } + } + $ret[] = $meth; + $haveAlready = array($meth->getClass() => $this->name); + } + } + } + continue; + } + if (class_exists('ReflectionClass')) { + if (interface_exists($interface)) { + $info = new ReflectionClass($interface); + if (method_exists($info, 'hasMethod') && $info->hasMethod($this->name)) { + $par = $info; + $method = $par->getMethod($this->name); + $var = new parserMethod($par->getName()); + if ($method->returnsReference()) { + $var->setReturnsReference(); + } + $doc = new parserDocBlock; + foreach ($method->getParameters() as $param) { + $value = $param->isOptional() ? var_export($param->getDefaultValue(), true) : null; + if ($param->isPassedByReference()) { + $var->addParam('&$' . $param->getName(), $value, $param->isOptional(), + $param->getClass()); + } else { + $var->addParam('$' . $param->getName(), $value, $param->isOptional(), + $param->getClass()); + } + } + $var->setName($method->getName()); + $doc->addPackage('package', $this->getPackage()); + $par = $method->getDeclaringClass(); + $var->setLineNumber($par->getStartLine()); + $modifiers = array(); + if ($method->isPrivate()) { + $modifiers[] = 'private'; + $doc->addAccess('private'); + } + $blank = new parserStringWithInlineTags; + if ($method->isAbstract()) { + $modifiers[] = 'abstract'; + $doc->addKeyword('abstract', $blank); + } + if ($method->isFinal()) { + $modifiers[] = 'final'; + $doc->addKeyword('final', $blank); + } + if ($method->isProtected()) { + $modifiers[] = 'protected'; + $doc->addAccess('protected'); + } + if ($method->isPublic()) { + $modifiers[] = 'public'; + $doc->addAccess('public'); + } + if ($method->isStatic()) { + $modifiers[] = 'static'; + $doc->addKeyword('static', $blank); + } + if ($method->isConstructor()) { + $var->setConstructor(); + } + $var->setDocBlock($doc); + $var->setModifiers($modifiers); + $ret[] = $var; + continue; + } + } + } + } + + return $ret; + } + + /** + * quick way to link to this element + * @return mixed converter-specific link to this method + * @param Converter $c + * @param string $text text to display for the link or false for default text + */ + function getLink($c, $text = false, $returnobj = false) + { + if ($returnobj) + { + return $c->getLink($this->class . '::' . $this->name . '()', $this->docblock->package); + } + return $c->getMethodLink($this->name, $this->class, $this->docblock->package, false, $text); + } + + /** + * Use this method to tell the parser that this method is the class constructor + */ + function setConstructor() + { + $this->isConstructor = true; + } + + /** + * Use this method to tell the parser that this method is the class constructor + */ + function setDestructor() + { + $this->isDestructor = true; + } + + /** + * @param Converter + * @return array an array of parserMethods from child classes that override this method + */ + function getOverridingMethods(&$c) + { + $class = $c->classes->getClass($this->class,$this->path); + + return $this->getOverridingMethodsForClass($c, $class); + } + + /** + * @param Converter + * @param parserClass + * @return array an array of parserMethods from ALL child classes that override this method in the given class + */ + function getOverridingMethodsForClass(&$c, &$class) + { + $meths = array(); + if (!$class) return $meths; + $kids = $class->getChildClassList($c); + for($i=0; $i<count($kids); $i++) + { + if ($kids[$i]->hasMethod($c, $this->name)) + { + $meth = $kids[$i]->getMethod($c,$this->name); + if (!($meth->docblock && $meth->docblock->hasaccess && !$c->parseprivate && $meth->docblock->tags['access'][0]->value == 'private')) + $meths[] = $meth; + } + + $meths = array_merge($meths, $this->getOverridingMethodsForClass($c, $kids[$i])); + } + return $meths; + } +} + +/** + * @package phpDocumentor + * @subpackage ParserElements + * @author Greg Beaver <cellog@php.net> + * @since 1.0rc1 + * @version $Id: ParserElements.inc 248547 2007-12-19 02:16:49Z ashnazg $ + */ +class parserDefine extends parserElement +{ + /** + * Type is used by many functions to skip the hassle of if phpDocumentor_get_class($blah) == 'parserBlah' + * @var string always 'define' + */ + var $type = 'define'; + + /** + * quick way to link to this element + * @return mixed converter-specific link to this define + * @param Converter $c + * @param string $text text to display for the link or false for default text + */ + function getLink($c, $text = false, $returnobj = false) + { + if ($returnobj) + { + return $c->getLink('constant ' . $this->name, $this->docblock->package); + } + return $c->getDefineLink($this->name, $this->docblock->package, false, $text); + } + + /** + * Returns all defines in other packages that have the same name as this define + * @return mixed false or an array Format: (package => {@link parserDefine} of conflicting defines) + * @param Converter + */ + function getConflicts(&$c) + { + $a = $c->proceduralpages->getDefineConflicts($this->name); + unset($a[$this->docblock->package]); + return $a; + } + +} + +/** + * @package phpDocumentor + * @subpackage ParserElements + * @author Greg Beaver <cellog@php.net> + * @since 1.0rc1 + * @version $Id: ParserElements.inc 248547 2007-12-19 02:16:49Z ashnazg $ + */ +class parserPackagePage extends parserStringWithInlineTags +{ + /** + * Type is used by many functions to skip the hassle of if phpDocumentor_get_class($blah) == 'parserBlah' + * @var string always 'packagepage' + */ + var $type = 'packagepage'; + /** @var string */ + var $package = 'default'; + + /** + * @param string + */ + function parserPackagePage($package) + { + $this->package = $package; + } + + /** + * @param Converter + */ + function Convert(&$c) + { + return parent::Convert($c,false); + } +} + +/** + * @package phpDocumentor + * @subpackage ParserElements + * @since 1.2 + */ +class parserTutorial extends parserPackagePage +{ + /** + * Type is used by many functions to skip the hassle of if phpDocumentor_get_class($blah) == 'parserBlah' + * @var string always 'tutorial' + */ + var $type = 'tutorial'; + /** @var string */ + var $package = 'default'; + /** + * Either cls, pkg, or proc + * @var string + */ + var $tutorial_type; + /** + * The documentable element this tutorial is linked to + * + * Can be a parserData, parserClass, or nothing for package/subpackage docs + */ + var $linked_element; + /** + * path to the tutorial page + * @var string + */ + var $path; + /** + * filename minus extension of this tutorial (used for @tutorial tag) + * @var string + */ + var $name; + /** @var boolean */ + var $_xml = true; + /** + * output from tutorialname.ext.ini + * + * an array generated by {@link phpDocumentor_parse_ini_file()} containing + * an index 'Linked Tutorials' with an array of tutorial names in the order + * they should appear. This is used to generate a linked list of tutorials like + * {@tutorial phpDocumentor/tags.pkg} + * @var array + */ + var $ini = false; + /** + * link to the next tutorial in a document series, or false if none + * @var tutorialLink + */ + var $next = false; + /** + * link to the previous tutorial in a document series, or false if none + * @var tutorialLink + */ + var $prev = false; + /** + * link to the parent tutorial in a document series, or false if none + * + * This is used to generate an "Up" or "Home" link like the php manual. + * The parent is defined as a tutorial that has a parenttutorialname.ext.ini + * file and is not contained by any other tutorial's tutorialname.ext.ini + * @var tutorialLink + */ + var $parent = false; + /** + * links to the child tutorials, or false if none + * @var array + */ + var $children = false; + + /** + * @param parserXMLDocBookTag top-level tag (<refentry> for 1.2.0) + * @param information about the tutorial file. Format: + * + * <pre> + * array('tutename' => tutorial name, + * 'path' => relative path of tutorial to tutorials/ directory + * 'ini' => contents of the tutorial .ini file, if any) + * </pre> + */ + function parserTutorial($data, $info) + { + $this->value = $data; + $this->package = $info['package']; + $this->subpackage = $info['subpackage']; + $this->tutorial_type = $info['tutetype']; + $this->name = $info['tutename']; + $this->path = $info['path']; + $this->ini = $info['ini']; + } + + /** + * Retrieve the title of the tutorial, or of any subsection + * @param Converter + * @param string which subsection to retrieve the title from, if any + * @uses parserXMLDocBookTag::getSubSection() retrieve the subsection to + * to get a title from + */ + function getTitle(&$c,$subsection = '') + { + if (!empty($subsection)) + { + $z = $this->value->getSubSection($c,$subsection); + if (!$z) + { + addWarning(PDERROR_TUTORIAL_SUBSECTION_NOT_FOUND,$this->name,$subsection); + return $subsection; + } + return $z->getTitle($c); + } + return $this->value->getTitle($c); + } + + /** + * @param Converter + * @param boolean determines whether character data is postprocessed to be + * Converter-friendly or not. + */ + function Convert(&$c, $postprocess = true) + { + return $this->value->Convert($c, $postprocess); + } + + /** + * @uses $parent creates a link to the documentation for the parent tutorial + * @param parserTutorial + * @param Converter + */ + function setParent($parent,&$c) + { + $this->parent = new tutorialLink; + $this->parent->addLink('', $parent->path, $parent->name, $parent->package, $parent->subpackage, $parent->getTitle($c)); + } + + /** + * Determine if this parserTutorial object is a child of another + * + * WARNING: This method can enter an infinite loop when run on PHP v5.2.1... + * see {@link http://bugs.php.net/bug.php?id=40608 PHP Bug #40608} + * and {@link http://pear.php.net/bugs/bug.php?id=10289 PEAR Bug #10289} + * @param array $parents array of parserTutorials that have child tutorials + * @return boolean whether or not this tutorial is a child of the any of the parents + */ + function isChildOf($parents) + { + // avoid infinite loop PHP bug #40608 in PHP v5.2.1, see PEAR #10289 + checkForBugCondition('5.2.1', '40608', '10289'); + + foreach($parents as $i => $parent) + { + if ($parent->path == $this->path) continue; + if ($parent->ini && ($parent->package == $this->package) && ($parent->subpackage == $this->subpackage) && ($parent->tutorial_type == $this->tutorial_type)) + { + foreach($parent->ini['Linked Tutorials'] as $child) + { + if ($child . '.' . $this->tutorial_type == $this->name) return true; + } + } + } + } + + /** + * Retrieve converter-specific link to the parent tutorial's documentation + * @param Converter + */ + function getParent(&$c) + { + if (!$this->parent) return false; + return $c->returnSee($this->parent); + } + + /** + * @uses $next creates a link to the documentation for the next tutorial + * @param parserTutorial + * @param Converter + */ + function setNext($next,&$c) + { + if (phpDocumentor_get_class($next) == 'tutoriallink') return $this->next = $next; + $this->next = new tutorialLink; + $this->next->addLink('', $next->path, $next->name, $next->package, $next->subpackage, $next->getTitle($c)); + } + + /** + * Retrieve converter-specific link to the next tutorial's documentation + * @param Converter + */ + function getNext(&$c) + { + if (!$this->next) return false; + return $c->returnSee($this->next); + } + + /** + * @uses $prev creates a link to the documentation for the previous tutorial + * @param parserTutorial + * @param Converter + */ + function setPrev($prev,&$c) + { + if (phpDocumentor_get_class($prev) == 'tutoriallink') return $this->prev = $prev; + $this->prev = new tutorialLink; + $this->prev->addLink('', $prev->path, $prev->name, $prev->package, $prev->subpackage, $prev->getTitle($c)); + } + + /** + * Retrieve converter-specific link to the previous tutorial's documentation + * @param Converter + */ + function getPrev(&$c) + { + if (!$this->prev) return false; + return $c->returnSee($this->prev); + } + + /** + * Get a link to this tutorial, or to any subsection of this tutorial + * @param Converter + * @param boolean if true, returns a {@link tutorialLink} instead of a string + * @param string section name to link to + * @return string|tutorialLink + */ + function getLink(&$c,$pure = false,$section = '') + { + $link = new tutorialLink; + $link->addLink($section, $this->path, $this->name, $this->package, $this->subpackage, $this->getTitle($c), $this->category); + if ($pure) return $link; + return $c->returnSee($link); + } +} + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/ProceduralPages.inc b/buildscripts/PhpDocumentor/phpDocumentor/ProceduralPages.inc new file mode 100755 index 00000000..21cd4f18 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/ProceduralPages.inc @@ -0,0 +1,1067 @@ +<?php +/** + * Intermediate procedural page parsing structure. + * This structure parses defines, functions, and global variables by file, + * and then iterates over the elements to document conflicts. + * + * phpDocumentor :: automatic documentation generator + * + * PHP versions 4 and 5 + * + * Copyright (c) 2002-2008 Gregory Beaver + * + * LICENSE: + * + * This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General + * Public License as published by the Free Software Foundation; + * either version 2.1 of the License, or (at your option) any + * later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @author Gregory Beaver <cellog@php.net> + * @copyright 2002-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version CVS: $Id: ProceduralPages.inc 253641 2008-02-24 02:35:44Z ashnazg $ + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @since 1.1 + * @todo CS cleanup - change package to PhpDocumentor + */ + +/** + * Intermediate procedural page parsing structure. + * This structure parses defines, functions, and global variables by file, + * and then iterates over the elements to document conflicts. + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @author Greg Beaver <cellog@php.net> + * @copyright 2002-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @since 1.1 + * @todo CS cleanup - change package to PhpDocumentor + */ +class ProceduralPages +{ + /** + * file being parsed, used in every add function + * to match up elements with the file that contains them + * + * @see addClass(), addMethod(), addVar(), nextFile() + * @var string + */ + var $curfile; + /** + * array of all procedural pages ordered by name + * Format: + * <pre> + * array( + * name => array( + * fullpath => parserPage, + * fullpath => parserPage2 [if there are name conflicts], + * ... + * ) + * ) + * </pre> + * + * @var array + */ + var $pages = array(); + /** + * array of all procedural pages ordered by name + * that have been ignored via -po or @access private or @ignore + * Format: + * <pre> + * array( + * name => array( + * fullpath => parserPage, + * fullpath => parserPage2 [if there are name conflicts], + * ... + * ) + * ) + * </pre> + * + * @var array + */ + var $ignorepages = array(); + /** + * array of all procedural page names ordered by full path to the file + * Format: + * <pre> + * array( + * fullpath => name + * ) + * </pre> + * + * @var array + */ + var $pathpages = array(); + /** + * array of parsed includes organized by the full path + * of the file that contains the include. + * Format: + * <pre> + * array( + * full path => array( + * includename => {@link parserInclude} + * ) + * ) + * </pre> + * + * @var array + */ + var $includesbyfile = array(); + /** + * array of parsed functions organized by the full path + * of the file that contains the function. + * Format: + * <pre> + * array( + * full path => array( + * functionname => {@link parserFunction} + * ) + * ) + * </pre> + * + * @var array + */ + var $functionsbyfile = array(); + /** + * array of parsed defines organized by the full path + * of the file that contains the define. + * Format: + * <pre> + * array( + * full path => array( + * definename => {@link parserDefine} + * ) + * ) + * </pre> + * + * @var array + */ + var $definesbyfile = array(); + /** + * array of parsed global variables organized by the full path + * of the file that contains the global variable definition. + * Format: + * <pre> + * array( + * full path => array( + * globalname => {@link parserGlobal} + * ) + * ) + * </pre> + * + * @var array + */ + var $globalsbyfile = array(); + /** + * array of file names organized by functions that are in the file. + * + * This structure is designed to handle name conflicts. Two files can contain + * functions with the same name, and this array will record both filenames to + * help control namespace errors + * Format: + * <pre> + * array( + * functionname => array( + * full path of file containing functionname, + * full path of file 2 containing functionname, + * ... + * ) + * ) + * </pre> + * + * @var array + */ + var $functionsbynamefile = array(); + /** + * array of file names organized by defines that are in the file. + * This structure is designed to handle name conflicts. Two files + * can contain defines with the same name, and this array will + * record both filenames to help control namespace errors + * Format: + * <pre> + * array( + * definename => array( + * full path of file containing definename, + * full path of file 2 containing definename, + * ... + * ) + * ) + * </pre> + * + * @var array + */ + var $definesbynamefile = array(); + /** + * array of file names organized by global variables that are in the file. + * + * This structure is designed to handle name conflicts. Two files can + * contain global variables with the same name, and this array will + * record both filenames to help control namespace errors + * Format: + * <pre> + * array( + * global variablename => array( + * full path of file containing global variablename, + * full path of file 2 containing global variablename, + * ... + * ) + * ) + * </pre> + * + * @var array + */ + var $globalsbynamefile = array(); + /** + * array of packages ordered by full path + * Format: + * <pre> + * array( + * fullpath => array( + * packagename, + * subpackagename + * ) + * ) + * </pre> + * + * @var array + */ + var $pagepackages = array(); + /** + * array of packages assigned to classes in a file, ordered by fullpath + * Format: + * <pre> + * array( + * fullpath => array( + * packagename => array( + * subpackagename => 1, + * subpackagename => 1, + * .. + * ), + * packagename2 => array(... + * ) + * ) + * ) + * </pre> + * + * @var array + */ + var $pageclasspackages = array(); + /** + * Namespace conflicts within all documented packages of functions + * Format: + * <pre> + * array( + * functionname => array( + * full path, + * full path, + * ... + * ) + * ) + * </pre> + * + * @var array + */ + var $functionconflicts = array(); + /** + * Namespace conflicts within all documented pages + * Format: + * <pre> + * array( + * pagename => array( + * fullpath, + * fullpath, + * ... + * ) + * ) + * </pre> + * + * @var array + */ + var $pageconflicts = array(); + /** + * Namespace conflicts within all documented packages of functions + * Format: + * <pre> + * array( + * functionname => array( + * full path, + * full path, + * ... + * ) + * ) + * </pre> + * + * @var array + */ + var $defineconflicts = array(); + /** + * Namespace conflicts within all documented packages of functions + * Format: + * <pre> + * array( + * functionname => array( + * full path, + * full path, + * ... + * ) + * ) + * </pre> + * + * @var array + */ + var $globalconflicts = array(); + /** + * @access private + * @var array + */ + var $revcpbf = array(); + /** + * @access private + * @var boolean + */ + var $packagesetup = false; + + /** + * sets up the {@link $pages} array + * + * @param parserPage &$element the parser page element + * + * @return void + */ + function addPage(&$element) + { + $this->curfile + = $element->getPath(); + $this->pages[$element->getFile()][$element->getPath()] + = $element; + $this->pathpages[$this->curfile] + = $element->getFile(); + $this->addPagePackage($this->curfile, + $element->package, $element->subpackage); + } + + /** + * moves a page from the {@link $pages} array to the {@link $ignorepages} array + * + * @param parserPage &$element the parser page element + * + * @return void + */ + function ignorePage(&$element) + { + $this->ignorepages[$element->getFile()][$element->getPath()] + = $this->pages[$element->getFile()][$element->getPath()]; + unset($this->pages[$element->getFile()][$element->getPath()]); + } + + /** + * gathers path-related info about a given element + * + * @param string $path path to the element + * @param mixed &$c ??? + * + * @return array|bool an array of path info, + * or FALSE + * @todo figure out what &$c is and update the param tag + */ + function getPathInfo($path, &$c) + { + $path = str_replace('/', SMART_PATH_DELIMITER, $path); + $info = array(); + if (!isset($this->pathpages[$path])) { + return false; + } + + $p = $this->pages[$this->pathpages[$path]][$path]; + // fixes [ 1391432 ] Too many underscores in include links. + $p->name = $p->origName; + $p->name = $c->getPageName($p); + + $info['package'] = $p->package; + $info['subpackage'] = $p->subpackage; + $info['name'] = $p->getFile(); + $info['source_loc'] = $p->getSourceLocation($c); + + $x = new pageLink; + $x->addLink($p->path, $p->name, $p->file, $p->package, $p->subpackage); + + $info['docs'] = $c->returnSee($x); + $p->name = $p->origName; + + return $info; + } + + /** + * Change a page's name from its file to alias $name + * + * This function is used to handle a @name tag in a page-level DocBlock + * + * @param string $name the alias + * + * @return void + */ + function setName($name) + { + if ($this->pages[$name][$this->curfile]->file == $name) { + addWarning(PDERROR_NAME_ALIAS_SAME_AS_TARGET,''); + + } else { + $this->pages[$name][$this->curfile] + = $this->pages[$this->pathpages[$this->curfile]][$this->curfile]; + $this->pages[$name][$this->curfile]->file + = $name; + + unset($this->pages[$this->pathpages[$this->curfile]][$this->curfile]); + + $this->pathpages[$this->curfile] = $name; + } + } + + /** + * Changes the package of the page represented by $path + * + * changes package in both the {@link $pages} array + * and the {@link pagepackages} array + * + * @param string $path full path + * @param string $package the package name + * @param string $subpackage the subpackage name + * + * @return void + */ + function addPagePackage($path, $package, $subpackage) + { + $this->pages[$this->pathpages[$path]][$path]->package + = $package; + $this->pages[$this->pathpages[$path]][$path]->subpackage + = $subpackage; + $this->pagepackages[$path] + = array($package, $subpackage); + + if (isset($this->includesbyfile[$path])) { + foreach ($this->includesbyfile[$path] as $i => $el) { + $el->package = $package; + $el->subpackage = $subpackage; + $this->includesbyfile[$path][$i] = $el; + } + } + if (isset($this->functionsbyfile[$path])) { + foreach ($this->functionsbyfile[$path] as $i => $el) { + $el->package = $package; + $el->subpackage = $subpackage; + $this->functionsbyfile[$path][$i] = $el; + } + } + if (isset($this->definesbyfile[$path])) { + foreach ($this->definesbyfile[$path] as $i => $el) { + $el->package = $package; + $el->subpackage = $subpackage; + $this->definesbyfile[$path][$i] = $el; + } + } + if (isset($this->globalsbyfile[$path])) { + foreach ($this->globalsbyfile[$path] as $i => $el) { + $el->package = $package; + $el->subpackage = $subpackage; + $this->globalsbyfile[$path][$i] = $el; + } + } + } + + /** + * sets up the {@link $includesbyfile} array using {@link $curfile} + * + * @param parserInclude &$element the "include" element object + * + * @return void + */ + function addInclude(&$element) + { + $this->includesbyfile[$this->curfile][] = $element; + } + + /** + * sets up the {@link $functionsbyfile} array using {@link $curfile} + * + * @param parserFunction &$element the "function" object + * + * @return void + */ + function addFunction(&$element) + { + if (isset($this->functionsbyfile[$this->curfile])) { + foreach ($this->functionsbyfile[$this->curfile] as $i => $function) { + if ($function->getName() == $element->getName()) { + addWarning(PDERROR_ELEMENT_IGNORED, 'function', + $element->getName(), $this->curfile); + return; + } + } + } + $this->functionsbyfile[$this->curfile][] = $element; + $this->functionsbynamefile[$element->getName()][] = $this->curfile; + } + + /** + * sets up the {@link $globalsbyfile} array using {@link $curfile} + * + * @param parserGlobal &$element the "global" element + * + * @return void + */ + function addGlobal(&$element) + { + if (isset($this->globalsbyfile[$this->curfile])) { + foreach ($this->globalsbyfile[$this->curfile] as $i => $global) { + if ($global->getName() == $element->getName()) { + addWarning(PDERROR_ELEMENT_IGNORED, 'global variable', + $element->getName(), $this->curfile); + return; + } + } + } + $this->globalsbyfile[$this->curfile][] = $element; + $this->globalsbynamefile[$element->getName()][] = $this->curfile; + } + + /** + * sets up the {@link $definesbyfile} array using {@link $curfile} + * + * @param parserDefine &$element the "define" element + * + * @return void + */ + function addDefine(&$element) + { + if (isset($this->definesbyfile[$this->curfile])) { + foreach ($this->definesbyfile[$this->curfile] as $i => $define) { + if ($define->getName() == $element->getName()) { + addWarning(PDERROR_ELEMENT_IGNORED, 'define', + $element->getName(), $this->curfile); + return; + } + } + } + $this->definesbyfile[$this->curfile][] = $element; + $this->definesbynamefile[$element->getName()][] = $this->curfile; + } + + /** + * Used to align an element with the package of its parent page + * prior to Conversion. + * + * @param parserElement &$element the element to align + * + * @return void + */ + function replaceElement(&$element) + { + if ($element->type == 'define') { + foreach ($this->definesbyfile[$element->getPath()] as $i => $el) { + if ($el->getName() == $element->getName()) { + $this->definesbyfile[$element->getPath()][$i] = &$element; + } + } + } elseif ($element->type == 'global') { + foreach ($this->globalsbyfile[$element->getPath()] as $i => $el) { + if ($el->getName() == $element->getName()) { + $this->globalsbyfile[$element->getPath()][$i] = &$element; + } + } + } elseif ($element->type == 'include') { + foreach ($this->includesbyfile[$element->getPath()] as $i => $el) { + if ($el->getName() == $element->getName()) { + $this->includesbyfile[$element->getPath()][$i] = &$element; + } + } + } elseif ($element->type == 'function') { + foreach ($this->functionsbyfile[$element->getPath()] as $i => $el) { + if ($el->getName() == $element->getName()) { + $this->functionsbyfile[$element->getPath()][$i] = &$element; + } + } + } + } + + /** + * adds a package from a class to the current file + * + * @param string $file full path to the file that contains the class + * @param string $package package name + * @param string $subpackage subpackage name + * + * @return void + */ + function addClassPackageToFile($file, $package, $subpackage) + { + if (!isset($this->revcpbf[$file][$package][$subpackage])) { + $this->pageclasspackages[$file][$package][$subpackage] = 1; + } + $this->revcpbf[$file][$package][$subpackage] = 1; + } + + /** + * if there is one class package in a file, + * the parent path inherits the package if its package is default. + * helps with -po to avoid dumb bugs + * + * @return void + */ + function setupPagePackages() + { + if ($this->packagesetup) { + return; + } + foreach ($this->pageclasspackages as $fullpath => $packages) { + if (isset($this->pagepackages[$fullpath])) { + if ($this->pagepackages[$fullpath][0] + == $GLOBALS['phpDocumentor_DefaultPackageName'] + ) { + if (count($packages) == 1) { + list($package, $subpackage) = each($packages); + if (count($subpackage) == 1) { + list($subpackage,) = each($subpackage); + } else { + $subpackage = ''; + } + $this->addPagePackage($fullpath, $package, $subpackage); + } + } + } + } + $this->packagesetup = true; + } + + /** + * extracts function, define, and global variable name conflicts within the + * same package and between different packages. No two elements with the same + * name are allowed in the same package, to keep automatic linking possible. + * + * @param mixed &$render the renderer object + * + * @return void + * @access private + * @todo functions, defines, and globals are coded, + * but pages section is empty... does it need to be coded? + */ + function setupConflicts(&$render) + { + foreach ($this->functionsbynamefile as $function => $paths) { + if (count($paths) - 1) { + //conflict + $package = array(); + foreach ($paths as $path) { + // create a list of conflicting functions in each package + $package[$this->pagepackages[$path][0]][] = $path; + } + foreach ($package as $pathpackages) { + // if at least 2 functions exist in the same package, + // delete all but the first one and add warnings + if (count($pathpackages) - 1) { + for ($i=1; $i < count($pathpackages); $i++) { + addWarning(PDERROR_ELEMENT_IGNORED, 'function', + $function, $pathpackages[$i]); + foreach ($this->functionsbyfile[$pathpackages[$i]] + as $j => $blah + ) { + if ($this->functionsbyfile[$pathpackages[$i]][$j] + ->getName() == $function + ) { + unset($this + ->functionsbyfile[$pathpackages[$i]][$j]); + } + } + $oth = array_flip($paths); + unset($paths[$oth[$pathpackages[$i]]]); + } + } + } + $this->functionconflicts[$function] = $paths; + } + } + + foreach ($this->definesbynamefile as $define => $paths) { + if (count($paths) - 1) { + //conflict + $package = array(); + foreach ($paths as $path) { + // create a list of conflicting functions in each package + $package[$this->pagepackages[$path][0]][] = $path; + } + foreach ($package as $pathpackages) { + // if at least 2 functions exist in the same package, + // delete all but the first one and add warnings + if (count($pathpackages) - 1) { + for ($i=1; $i < count($pathpackages); $i++) { + addWarning(PDERROR_ELEMENT_IGNORED, 'define', + $define, $pathpackages[$i]); + foreach ($this->definesbyfile[$pathpackages[$i]] + as $j => $blah + ) { + if ($this->definesbyfile[$pathpackages[$i]][$j] + ->getName() == $define + ) { + unset($this + ->definesbyfile[$pathpackages[$i]][$j]); + } + } + $oth = array_flip($paths); + unset($paths[$oth[$pathpackages[$i]]]); + } + } + } + $this->defineconflicts[$define] = $paths; + } + } + + foreach ($this->globalsbynamefile as $global => $paths) { + if (count($paths) - 1) { + //conflict + $package = array(); + foreach ($paths as $path) { + // create a list of conflicting functions in each package + $package[$this->pagepackages[$path][0]][] = $path; + } + foreach ($package as $pathpackages) { + // if at least 2 functions exist in the same package, + // delete all but the first one and add warnings + if (count($pathpackages) - 1) { + for ($i=1; $i < count($pathpackages); $i++) { + addWarning(PDERROR_ELEMENT_IGNORED, 'global variable', + $global, $pathpackages[$i]); + foreach ($this->globalsbyfile[$pathpackages[$i]] + as $j => $blah + ) { + if ($this->globalsbyfile[$pathpackages[$i]][$j] + ->getName() == $global + ) { + unset($this + ->globalsbyfile[$pathpackages[$i]][$j]); + } + } + $oth = array_flip($paths); + unset($paths[$oth[$pathpackages[$i]]]); + } + } + } + $this->globalconflicts[$global] = $paths; + } + } + + /* + * @todo does this section still need to be coded??? + */ + foreach ($this->pages as $name => $pages) { + if (count($pages) - 1) { + // possible conflict + } + } + } + + /** + * called by {@link parserFunction::getConflicts()} to get + * inter-package conflicts, should not be called directly + * + * @param string $name the function name to check + * + * @access private + * @return array|bool Format: (package => {@link parserFunction} + * of conflicting function) + * or FALSE if the function is not recorded as a conflict + */ + function getFuncConflicts($name) + { + if (!isset($this->functionconflicts[$name])) { + return false; + } + $a = array(); + foreach ($this->functionconflicts[$name] as $conflict) { + foreach ($this->functionsbyfile[$conflict] as $i => $func) { + if ($func->getName() == $name) { + $a[$this->functionsbyfile[$conflict][$i]->docblock->package] + = $this->functionsbyfile[$conflict][$i]; + } + } + } + return $a; + } + + /** + * called by {@link parserGlobal::getConflicts()} + * to get inter-package conflicts, should not be called directly + * + * @param string $name the global name to check + * + * @access private + * @return array|bool Format: (package => {@link parserGlobal} + * of conflicting global variable) + * or FALSE if the global is not recorded as a conflict + */ + function getGlobalConflicts($name) + { + if (!isset($this->globalconflicts[$name])) { + return false; + } + $a = array(); + foreach ($this->globalconflicts[$name] as $conflict) { + foreach ($this->globalsbyfile[$conflict] as $i => $func) { + if ($func->getName() == $name) { + $a[$this->globalsbyfile[$conflict][$i]->docblock->package] + = $this->globalsbyfile[$conflict][$i]; + } + } + } + return $a; + } + + /** + * called by {@link parserDefine::getConflicts()} + * to get inter-package conflicts, should not be called directly + * + * @param string $name the define name to check + * + * @access private + * @return array|bool Format: (package => {@link parserDefine} + * of conflicting define) + * or FALSE if the define is not recorded as a conflict + */ + function getDefineConflicts($name) + { + if (!isset($this->defineconflicts[$name])) { + return false; + } + $a = array(); + foreach ($this->defineconflicts[$name] as $conflict) { + foreach ($this->definesbyfile[$conflict] as $i => $func) { + if ($func->getName() == $name) { + $a[$this->definesbyfile[$conflict][$i]->docblock->package] + = $this->definesbyfile[$conflict][$i]; + } + } + } + return $a; + } + + /** + * Adjusts packages of all pages and removes name conflicts within a package + * + * Automatic linking requires that each linkable name have exactly one element + * associated with it. In other words, there cannot be two functions named + * foo() in the same package. + * + * This also adheres to php rules with one exception: + * + * <code> + * if ($test == 3) { + * define('whatever', 'this thing'); + * } else { + * define('whatever', 'this other thing'); + * } + * </code> + * + * phpDocumentor is not aware of conditional control structures because it + * would slow things down considerably. So, what phpDocumentor does is + * automatically ignore the second define and raise a warning. The warning can + * be eliminated with an @ignore tag on the second element like so: + * + * <code> + * if ($test == 3) { + * define('whatever', 'this thing'); + * } else { + * /** + * * @ignore + * {@*} + * define('whatever', 'this other thing'); + * } + * </code> + * + * If there are two files that contain the same procedural elements in the + * same package (for example, a common configuration file common.php), they + * will also be ignored as if they were in the same file. The reasoning + * behind this is simple. A package is an indivisible set of files and + * classes that a user will include in their code. Name conflicts must be + * avoided to allow successful execution. + * + * This function also plays the all-important role of calling + * {@link phpDocumentor_IntermediateParser::addElementToPage()} in order to add + * processed elements to their pages for Conversion. + * + * @param phpDocumentor_IntermediateParser &$render the parser + * + * @return void + */ + function setupPages(&$render) + { + global $_phpDocumentor_setting; + phpDocumentor_out("\nProcessing Procedural Page Element Name Conflicts\n\n"); + flush(); + $this->setupPagePackages(); + $this->setupConflicts($render); + // phpDocumentor_out("\nProcessing Procedural Pages\n\n"); + foreach ($this->pathpages as $path => $name) { + // phpDocumentor_out("Processing $path\n"); + $a = $this->pagepackages[$path]; + $b = &$this->pages[$name][$path]; + $render->addPage($b, $path); + $render->addUses($b, $path); + if (isset($this->includesbyfile[$path])) { + foreach ($this->includesbyfile[$path] as $include) { + $include->docblock->package = $a[0]; + $include->docblock->subpackage = $a[1]; + $render->addElementToPage($include, $path); + } + } + + if (isset($this->functionsbyfile[$path])) { + foreach ($this->functionsbyfile[$path] as $function) { + $function->docblock->package = $a[0]; + $function->docblock->subpackage = $a[1]; + $render->addElementToPage($function, $path); + $render->addUses($function, $path); + } + } + + if (isset($this->definesbyfile[$path])) { + foreach ($this->definesbyfile[$path] as $define) { + $define->docblock->package = $a[0]; + $define->docblock->subpackage = $a[1]; + $render->addElementToPage($define, $path); + $render->addUses($define, $path); + } + } + + if (isset($this->globalsbyfile[$path])) { + foreach ($this->globalsbyfile[$path] as $global) { + $global->docblock->package = $a[0]; + $global->docblock->subpackage = $a[1]; + $render->addElementToPage($global, $path); + $render->addUses($global, $path); + } + } + } + } + + /** + * sets the parser base + * + * @param mixed $pbase the parser base + * + * @return void + */ + function setParseBase($pbase) + { + $this->_parsedbase = $pbase; + } + + /** + * checks to see if the parsed file matches the given path + * + * @param string $path the path to look for + * @param string $infile the file to check + * + * @return parserPage|bool matched parserPage if found, + * or FALSE if not found + */ + function pathMatchesParsedFile($path, $infile) + { + $test = $this->getRealPath($path, $infile); + if (is_string($test)) { + if (isset($this->pathpages[$test])) { + return $this->pages[$this->pathpages[$test]][$test]; + } + if (PHPDOCUMENTOR_WINDOWS) { + $test = str_replace('/', '\\', $test); + } + if (isset($this->pathpages[$test])) { + $a = $this->pages[$this->pathpages[$test]][$test]; + if (is_array($a->packageOutput) + && !in_array($a->package, $a->packageOutput) + ) { + return false; + } + return $this->pages[$this->pathpages[$test]][$test]; + } + } else { + foreach ($test as $file) { + if (isset($this->pathpages[$file])) { + return $this->pages[$this->pathpages[$file]][$file]; + } + if (PHPDOCUMENTOR_WINDOWS) { + $file = str_replace('/', '\\', $file); + } + if (isset($this->pathpages[$file])) { + $a = $this->pages[$this->pathpages[$file]][$file]; + if (is_array($a->packageOutput) + && !in_array($a->package, $a->packageOutput) + ) { + return false; + } + return $this->pages[$this->pathpages[$file]][$file]; + } + } + } + return false; + } + + /** + * Ensures the path to the file is an absolute path + * + * @param string $path path to the file + * @param string $file the file name + * + * @return array|string returns an array of possible file locations or + * a string if there is an exact match + */ + function getRealPath($path, $file) + { + $curdir = str_replace('\\', '/', dirname($file)); + $path = str_replace('\\', '/', $path); + if (strpos($path, ':') !== false) { + // windows, and we have a drive letter + return $path; + } elseif (strpos($path, '/') === 0) { + return $path; + } + // not an absolute path + $path = explode('/', $path); + if ($path[0] == '.') { + $path[0] = dirname($file); + return join($path, '/'); + } elseif ($path[0] == '..') { + $dirfile = explode('/', dirname(str_replace('\\', '/', $file))); + // remove the current directory + array_pop($dirfile); + if (!count($dirfile)) { + // we were at a top-level dir! + return false; + } + // replace .. with parent dirname + $path[0] = join($dirfile, '/'); + return join($path, '/'); + } else { + $path = join($path, '/'); + return array($curdir . PATH_DELIMITER . $path, + str_replace('\\', '/', PHPDOCUMENTOR_BASE) + . PATH_DELIMITER . $path); + } + } +} +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Publisher.inc b/buildscripts/PhpDocumentor/phpDocumentor/Publisher.inc new file mode 100755 index 00000000..f0c78eb2 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Publisher.inc @@ -0,0 +1,110 @@ +<?php +/** + * a class for handling the publishing of data + * + * phpDocumentor :: automatic documentation generator + * + * PHP versions 4 and 5 + * + * Copyright (c) 2000-2007 Kellin, Joshua Eichorn + * + * LICENSE: + * + * This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General + * Public License as published by the Free Software Foundation; + * either version 2.1 of the License, or (at your option) any + * later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @author Kellin <passionplay@hotmail.com> + * @author Joshua Eichorn <jeichorn@phpdoc.org> + * @copyright 2000-2007 Kellin, Joshua Eichorn + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version CVS: $Id: Publisher.inc 244033 2007-10-11 03:30:34Z ashnazg $ + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @since 0.1 + * @todo CS cleanup - change package to PhpDocumentor + */ +/** + * a class for handling the publishing of data + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @author Kellin <passionplay@hotmail.com> + * @author Joshua Eichorn <jeichorn@phpdoc.org> + * @copyright 2000-2007 Kellin, Joshua Eichorn + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @todo CS cleanup - change package to PhpDocumentor + */ +class Publisher +{ + /**#@+ + * @var array + */ + /** + * Array of references objects that have Subscribed to this publisher + */ + var $subscriber = array(); + + var $tokens = array(); + + var $pushEvent = array(); + var $popEvent = array(); + /**#@-*/ + + + /** + * Adds a subscriber to the {@link $subscriber} array(). + * if $event is '*', the publisher will use $object as the default event handler + * + * @param integer $event see {@link Parser.inc} PARSER_EVENT_* constants + * @param class &$object any class that has a HandleEvent() method like + * {@link phpDocumentor_IntermediateParser::HandleEvent()} + * or {@link Classes::HandleEvent()} + * + * @return void + * @todo CS Cleanup - there's no way I can get the &$object desc under 85 chars + */ + function subscribe($event, &$object) + { + $this->subscriber[$event] =& $object; + } + + /** + * Publish an event + * + * @param integer $event see {@link Parser.inc} PARSER_EVENT_* constants + * @param mixed $data anything the subscribed event handler is expecting + * + * @return void + */ + function publishEvent($event,$data) + { + + // see if there is a specific event handler + if (!empty($this->subscriber[$event])) { + $this->subscriber[$event]->HandleEvent($event, $data); + } else if (isset($this->subscriber['*']) + && is_object($this->subscriber['*'])) { + // check to see if a generic handler exists + + $this->subscriber['*']->HandleEvent($event, $data); + } + } +} +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Setup.inc.php b/buildscripts/PhpDocumentor/phpDocumentor/Setup.inc.php new file mode 100755 index 00000000..db5b722f --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Setup.inc.php @@ -0,0 +1,978 @@ +<?php +/** + * This was all in {@link phpdoc.inc}, and now encapsulates the complexity + * + * phpDocumentor :: automatic documentation generator + * + * PHP versions 4 and 5 + * + * Copyright (c) 2002-2006 Gregory Beaver + * + * LICENSE: + * + * This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General + * Public License as published by the Free Software Foundation; + * either version 2.1 of the License, or (at your option) any + * later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package phpDocumentor + * @author Gregory Beaver <cellog@php.net> + * @copyright 2002-2006 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version CVS: $Id: Setup.inc.php 258122 2008-04-22 15:48:55Z ashnazg $ + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @since 1.2 + */ +error_reporting(E_ALL); + +/** ensure top-level PhpDocumentor dir is in include path */ +set_include_path(get_include_path() . PATH_SEPARATOR . dirname(dirname(__FILE__))); + +/** common settings */ +include_once("phpDocumentor/common.inc.php"); + +include_once("phpDocumentor/Io.inc"); +include_once("phpDocumentor/Publisher.inc"); +include_once("phpDocumentor/Classes.inc"); +include_once("phpDocumentor/ProceduralPages.inc"); +include_once("phpDocumentor/IntermediateParser.inc"); +include_once("phpDocumentor/WordParser.inc"); +include_once("phpDocumentor/EventStack.inc"); +include_once("phpDocumentor/ParserData.inc"); +include_once("phpDocumentor/InlineTags.inc"); +include_once("phpDocumentor/DocBlockTags.inc"); +include_once("phpDocumentor/DescHTML.inc"); +include_once("phpDocumentor/ParserDocBlock.inc"); +include_once("phpDocumentor/ParserElements.inc"); +include_once("phpDocumentor/Parser.inc"); +include_once("phpDocumentor/phpDocumentorTWordParser.inc"); +include_once("phpDocumentor/phpDocumentorTParser.inc"); +include_once("phpDocumentor/HighlightParser.inc"); +include_once("phpDocumentor/TutorialHighlightParser.inc"); +include_once("phpDocumentor/ParserDescCleanup.inc"); +include_once("phpDocumentor/PackagePageElements.inc"); +include_once("phpDocumentor/XMLpackagePageParser.inc"); +include_once("phpDocumentor/LinkClasses.inc"); +include_once("phpDocumentor/Converter.inc"); +include_once("phpDocumentor/Errors.inc"); +if (isset($_GET)) +{ +/** + * $interface is either 'web' or is not set at all + * @global array $interface + */ + if (isset($_GET['interface'])) $interface = $_GET['interface']; +/** + * $_phpDocumentor_setting is either the value from the web interface, or is set up by {@link Io::parseArgv()} + * @global array $_phpDocumentor_setting + */ + if (isset($_GET['setting'])) $_phpDocumentor_setting = $_GET['setting']; +} + +/** + * default package name, set using -dn --defaultpackagename + * @global string $GLOBALS['phpDocumentor_DefaultPackageName'] + * @name $phpDocumentor_DefaultPackageName + */ +$GLOBALS['phpDocumentor_DefaultPackageName'] = 'default'; + +/** + * default package name, set using -dn --defaultcategoryname + * @global string $GLOBALS['phpDocumentor_DefaultCategoryName'] + * @name $phpDocumentor_DefaultCategoryName + */ +$GLOBALS['phpDocumentor_DefaultCategoryName'] = 'default'; + +/** + * @package phpDocumentor + */ +class phpDocumentor_setup +{ + /** + * The main parser + * @var Parser|phpDocumentorTParser + */ + var $parse; + /** + * Used to parse command-line options + * @var Io + */ + var $setup; + /** + * Used to organize output from the Parser before Conversion + * @var phpDocumentor_IntermediateParser + */ + var $render = false; + /** + * Packages to create documentation for + * @var string + */ + var $packages = false; + /** + * contents of --filename commandline + * @tutorial phpDocumentor.howto.pkg#using.command-line.filename + * @var string + */ + var $files = ''; + /** + * contents of --directory commandline + * @tutorial phpDocumentor.howto.pkg#using.command-line.directory + * @var string + */ + var $dirs = ''; + /** + * contents of --hidden commandline + * @tutorial phpDocumentor.howto.pkg#using.command-line.hidden + * @var boolean + */ + var $hidden = false; + /** + * time that parsing was started, used for informative timing of output + * @access private + */ + var $parse_start_time; + /** + * contents of --ignore commandline + * @tutorial phpDocumentor.howto.pkg#using.command-line.ignore + * @var string + */ + var $ignore_files = array(); + /** + * contents of --ignoresymlinks commandline + * @var boolean + */ + var $ignoresymlinks = false; + + /** + * Checks PHP version, makes sure it is 4.2.0+, and chooses the + * phpDocumentorTParser if version is 4.3.0+ + * @uses parseIni() + */ + function phpDocumentor_setup() + { + global $_phpDocumentor_cvsphpfile_exts, $_phpDocumentor_setting; + if (!function_exists('is_a')) + { + print "phpDocumentor requires PHP version 4.2.0 or greater to function"; + exit; + } + + $this->setup = new Io; + if (!isset($interface) && !isset($_GET['interface']) && !isset($_phpDocumentor_setting)) + { + // Parse the argv settings + $_phpDocumentor_setting = $this->setup->parseArgv(); + } + if (isset($_phpDocumentor_setting['useconfig']) && + !empty($_phpDocumentor_setting['useconfig'])) { + $this->readConfigFile($_phpDocumentor_setting['useconfig']); + } + + // set runtime to a large value since this can take quite a while + // we can only set_time_limit when not in safe_mode bug #912064 + if (!ini_get('safe_mode')) + { + set_time_limit(0); // unlimited runtime + } else + { + phpDocumentor_out("time_limit cannot be set since your in safe_mode, please edit time_limit in your php.ini to allow enough time for phpDocumentor to run"); + } + + $phpver = phpversion(); + $phpdocver = PHPDOCUMENTOR_VER; + if (isset($_GET['interface'])) { + $phpver = "<b>$phpver</b>"; + $phpdocver = "<b>$phpdocver</b>"; + } + phpDocumentor_out("PHP Version $phpver\n"); + phpDocumentor_out("phpDocumentor version $phpdocver\n\n"); + + $this->parseIni(); + $this->setMemoryLimit(); + + /* + * NOTE: + * It is possible for the tokenizer extension to be loaded, + * but actually be broken in the OS, and therefore not working... + * the conditional below will NOT recognize this scenario. + * You can separately run the {@link tokenizer_test.php} to + * verify that the tokenizer library is working correctly + * from the OS perspective. + */ + if (tokenizer_ext) { + phpDocumentor_out("using tokenizer Parser\n"); + $this->parse = new phpDocumentorTParser; + } else { + phpDocumentor_out("No Tokenizer support detected, so using default (slower) Parser..." . PHP_EOL); + + if (version_compare(phpversion(), '4.3.0', '<')) { + phpDocumentor_out(" for faster parsing, recompile PHP with --enable-tokenizer." . PHP_EOL ); + } else { + phpDocumentor_out(" for faster parsing, recompile PHP without --disable-tokenizer." . PHP_EOL ); + } + + $this->parse = new Parser; + } + } + + /** + * Get phpDocumentor settings from a user configuration file + * @param string user configuration file + */ + function readConfigFile($file) + { + global $_phpDocumentor_setting, $_phpDocumentor_options; + // security + $file = str_replace(array('..','.ini','\\'),array('','','/'),$file); + if (is_file($file . '.ini')) + { + $_phpDocumentor_setting = phpDocumentor_parse_ini_file($file.'.ini'); + } else + { + if ('@DATA-DIR@' != '@'.'DATA-DIR@') + { + $configdir = str_replace('\\','/', '@DATA-DIR@/PhpDocumentor') . PATH_DELIMITER . 'user' . PATH_DELIMITER; + } else { + $configdir = str_replace('\\','/',$GLOBALS['_phpDocumentor_install_dir']) . PATH_DELIMITER . 'user' . PATH_DELIMITER; + } + if (isset($_phpDocumentor_options['userdir'])) $configdir = $_phpDocumentor_options['userdir']; + if (substr($configdir,-1) != '/') + { + $configdir .= '/'; + } + $_phpDocumentor_setting = phpDocumentor_parse_ini_file( $configdir . $file . '.ini'); + if (empty($_phpDocumentor_setting['defaultpackagename'])) + { + $_phpDocumentor_setting['defaultpackagename'] = 'default'; + } + } + // don't want a loop condition! + unset($_phpDocumentor_setting['useconfig']); + } + + /** + * Get phpDocumentor settings from command-line or web interface + */ + function readCommandLineSettings() + { + global $_phpDocumentor_setting,$interface,$_phpDocumentor_RIC_files; + // subscribe $render class to $parse class events + if (!isset($_phpDocumentor_setting['junk'])) $_phpDocumentor_setting['junk'] = ''; + if (!isset($_phpDocumentor_setting['title'])) $_phpDocumentor_setting['title'] = 'Generated Documentation'; + $temp_title = $_phpDocumentor_setting['title']; + $this->render = new phpDocumentor_IntermediateParser($temp_title); + if (isset($_phpDocumentor_setting['help']) || $_phpDocumentor_setting['junk'] == "-h" || $_phpDocumentor_setting['junk'] == "--help") + { + echo $this->setup->displayHelpMsg(); + die(); + } + + // set to parse hidden files + $this->hidden = (isset($_phpDocumentor_setting['hidden'])) ? decideOnOrOff($_phpDocumentor_setting['hidden']) : false; + + // set to parse through symlinks + $this->ignoresymlinks = (isset($_phpDocumentor_setting['ignoresymlinks'])) ? decideOnOrOff($_phpDocumentor_setting['ignoresymlinks']) : false; + + // set to parse elements marked private with @access private + $this->render->setParsePrivate((isset($_phpDocumentor_setting['parseprivate'])) ? decideOnOrOff($_phpDocumentor_setting['parseprivate']) : false); + + // set to print warnings when undocumented elements are spotted + $this->render->setUndocumentedElementWarningsMode((isset($_phpDocumentor_setting['undocumentedelements'])) ? decideOnOrOff($_phpDocumentor_setting['undocumentedelements']) : false); + + if (isset($_phpDocumentor_setting['ignoretags'])) + { + $ignoretags = explode(',', $_phpDocumentor_setting['ignoretags']); + $ignoretags = array_map('trim', $ignoretags); + $tags = array(); + foreach($ignoretags as $tag) + { + if (!in_array($tag,array('@global', '@access', '@package', '@ignore', '@name', '@param', '@return', '@staticvar', '@var'))) + $tags[] = $tag; + } + $_phpDocumentor_setting['ignoretags'] = $tags; + } + + if (isset($_phpDocumentor_setting['readmeinstallchangelog'])) + { + $_phpDocumentor_setting['readmeinstallchangelog'] = explode(',',str_replace(' ','',$_phpDocumentor_setting['readmeinstallchangelog'])); + $rics = array(); + foreach($_phpDocumentor_setting['readmeinstallchangelog'] as $ric) + { + $rics[] = strtoupper(trim($ric)); + } + $_phpDocumentor_RIC_files = $rics; + } + + if (isset($_phpDocumentor_setting['javadocdesc']) && $_phpDocumentor_setting['javadocdesc'] == 'on') + { + $this->parse->eventHandlers[PARSER_EVENT_DOCBLOCK] = 'JavaDochandleDocblock'; + } + if (tokenizer_ext) + { + if (isset($_phpDocumentor_setting['sourcecode']) && $_phpDocumentor_setting['sourcecode'] == 'on') + { + $_phpDocumentor_setting['sourcecode'] = true; + } else + { + $_phpDocumentor_setting['sourcecode'] = false; + } + } else + { + if (isset($_phpDocumentor_setting['sourcecode']) && $_phpDocumentor_setting['sourcecode'] == 'on') + { + addWarning(PDERROR_SOURCECODE_IGNORED); + } + $_phpDocumentor_setting['sourcecode'] = false; + } + if (isset($_phpDocumentor_setting['converterparams'])) + { + $_phpDocumentor_setting['converterparams'] = explode($_phpDocumentor_setting['converterparams']); + foreach($_phpDocumentor_setting['converterparams'] as $i => $p) + { + $_phpDocumentor_setting['converterparams'][$i] = trim($p); + } + } + if (isset($_phpDocumentor_setting['customtags']) && !empty($_phpDocumentor_setting['customtags'])) + { + $c = explode(',',$_phpDocumentor_setting['customtags']); + for($i=0;$i<count($c); $i++) + { + $GLOBALS['_phpDocumentor_tags_allowed'][] = trim($c[$i]); + } + } + if (isset($_phpDocumentor_setting['pear'])) + { + if ($_phpDocumentor_setting['pear'] === 'off') $_phpDocumentor_setting['pear'] = false; + if ($_phpDocumentor_setting['pear'] === 'on') $_phpDocumentor_setting['pear'] = true; + } + if (!isset($_phpDocumentor_setting['pear'])) $_phpDocumentor_setting['pear'] = false; + // set to change the default package name from "default" to whatever you want + if (isset($_phpDocumentor_setting['defaultpackagename'])) + { + $GLOBALS['phpDocumentor_DefaultPackageName'] = trim($_phpDocumentor_setting['defaultpackagename']); + } + // set to change the default category name from "default" to whatever you want + if (isset($_phpDocumentor_setting['defaultcategoryname'])) + { + $GLOBALS['phpDocumentor_DefaultCategoryName'] = trim($_phpDocumentor_setting['defaultcategoryname']); + } + + // set the mode (quiet or verbose) + $this->render->setQuietMode((isset($_phpDocumentor_setting['quiet'])) ? decideOnOrOff($_phpDocumentor_setting['quiet']) : false); + + // Setup the different classes + if (isset($_phpDocumentor_setting['templatebase'])) + { + $this->render->setTemplateBase(trim($_phpDocumentor_setting['templatebase'])); + } + if (isset($_phpDocumentor_setting['target']) && !empty($_phpDocumentor_setting['target'])) + { + $this->render->setTargetDir(trim($_phpDocumentor_setting['target'])); + } + else + { + echo "a target directory must be specified\n try phpdoc -h\n"; + die(); + } + if (!empty($_phpDocumentor_setting['packageoutput'])) + { + $this->packages = explode(",",trim($_phpDocumentor_setting['packageoutput'])); + foreach($this->packages as $p => $v) + { + $this->packages[$p] = trim($v); + } + } + if (!empty($_phpDocumentor_setting['filename'])) { + $this->files = trim($_phpDocumentor_setting['filename']); + } + if (!empty($_phpDocumentor_setting['directory'])) { + $this->dirs = trim($_phpDocumentor_setting['directory']); + } + } + + function checkIgnoreTag($tagname, $inline = false) + { + global $_phpDocumentor_setting; + $tagname = '@'.$tagname; + if (!isset($_phpDocumentor_setting['ignoretags'])) return false; + if ($inline) $tagname = '{'.$tagname.'}'; + return in_array($tagname, $_phpDocumentor_setting['ignoretags']); + } + + /** + * Allow a memory_limit setting in phpDocumentor.ini to override php.ini or default memory limit + * @todo recognize "K" and "G" in memory_limit settings, rather than just "M" + */ + function setMemoryLimit() { + global $_phpDocumentor_options; + $DEFAULT_MEMORY_SIZE_MINIMUM = 256; + + // PhpDoc memory_limit from phpDocumentor.ini overrides all other considerations + if (isset($_phpDocumentor_options['memory_limit'])) { + $phpdoc_ini_setting = str_replace('M', '', $_phpDocumentor_options['memory_limit']); + + // allow phpdoc.ini to DISABLE the setting via "= -1" + if ($phpdoc_ini_setting == -1) + { + $memory_setting_to_use = $phpdoc_ini_setting; + $max_mem_log_message = "setting disabled by phpDocumentor.ini...\n"; + } + else + { + $memory_setting_to_use = $phpdoc_ini_setting . "M"; + $max_mem_log_message = "set at " . $memory_setting_to_use . " by phpDocumentor.ini...\n"; + } + } else { + $php_ini_setting = str_replace('M', '', ini_get('memory_limit')); + + // allow php.ini to DISABLE the setting via "= -1" + if ($php_ini_setting == -1) + { + // allow it to remain disabled + $memory_setting_to_use = $php_ini_setting; + $max_mem_log_message = "setting disabled by php.ini...\n"; + } + else + { + // memory_limit from php.ini must be at least the default minimum + $memory_setting_to_use = ($php_ini_setting > $DEFAULT_MEMORY_SIZE_MINIMUM) ? $php_ini_setting . "M" : $DEFAULT_MEMORY_SIZE_MINIMUM . "M"; + $max_mem_log_message = "set at " . $memory_setting_to_use . " after considering php.ini...\n"; + } + } + if (ini_set("memory_limit", $memory_setting_to_use)) + { + // PHP had to have been compiled with "--enable-memory-limit" to allow setting the value explicitly + phpDocumentor_out("Maximum memory usage " . $max_mem_log_message); + } + else + { + // PHP must not have been compiled with "--enable-memory-limit", so we cannot modify it... + // no need to notify user of this unless they tried using memory_limit in their phpDocumentor.ini... + if (isset($phpdoc_ini_setting)) + { + phpDocumentor_out("Unable to alter memory_limit via your phpDocumentor.ini... perhaps PHP wasn't compiled with \"--enable-memory-limit\"?\n"); + } + } + } + + function setJavadocDesc() + { + $this->parse->eventHandlers[PARSER_EVENT_DOCBLOCK] = 'JavaDochandleDocblock'; + } + + function setParsePrivate($flag = true) + { + $this->render->setParsePrivate($flag); + } + + function setQuietMode($flag = true) + { + $this->render->setQuietMode($flag); + } + + function setUndocumentedElementWarnings($flag = true) + { + $this->render->setUndocumentedElementWarnings($flag); + } + + function setTargetDir($target) + { + $this->render->setTargetDir($target); + } + + function setTemplateBase($dir) + { + $this->render->setTemplateBase($dir); + } + + function setPackageOutput($po) + { + $this->packages = explode(",",$po); + array_map('trim', $this->packages); + } + + function setTitle($ti) + { + $this->render = new phpDocumentor_IntermediateParser($ti); + } + + function setFilesToParse($files) + { + $this->files = $files; + } + + function setDirectoriesToParse($dirs) + { + $this->dirs = $dirs; + } + + function parseHiddenFiles($flag = true) + { + $this->hidden = $flag; + } + + function setIgnore($ig) + { + if (strstr($ig,",")) + { + $this->ignore_files = explode(",",$ig); + } else { + if (!empty($ig)) + $this->ignore_files = array($ig); + } + $this->ignore_files = array_map('trim', $this->ignore_files); + } + + function createDocs($title = false) + { + $this->parse_start_time = time(); + global $_phpDocumentor_setting; + if (!$this->render) + { + $this->render = new phpDocumentor_IntermediateParser($title); + } + // setup ignore list + $this->ignore_files =array(); + if(isset($_phpDocumentor_setting['ignore'])) + { + $this->setIgnore($_phpDocumentor_setting['ignore']); + } + $this->parse->subscribe("*",$this->render); + // parse the directory + if (!empty($this->files)) + { + $files = explode(",",$this->files); + foreach($files as $file) + { + $file = trim($file); + $test = $this->setup->getAllFiles($file); + if ($test) + { + foreach($test as $file) + { + $file = trim($file); + $dir = realpath(dirname($file)); + $dir = strtr($dir, "\\", "/"); + $dir = str_replace('//','/',$dir); + // strip trailing directory seperator + if (substr($dir,-1) == "/" || substr($dir,-1) == "\\") + { + $dir = substr($dir,0,-1); + } + $file = strtr(realpath($file), "\\", "/"); + $file = str_replace('//','/',$file); + + if (!$this->setup->checkIgnore(basename($file),dirname($file),$this->ignore_files,true,$this->ignoresymlinks)) + { + $filelist[] = str_replace('\\','/',$file); + } else { + phpDocumentor_out("File $file Ignored\n"); + flush(); + } + } + } else + { + $dir = dirname(realpath($file)); + $dir = strtr($dir, "\\", "/"); + $dir = str_replace('//','/',$dir); + // strip trailing directory seperator + if (substr($dir,-1) == "/" || substr($dir,-1) == "\\") + { + $dir = substr($dir,0,-1); + } + $base = count(explode("/",$dir)); + $file = strtr(realpath($file), "\\", "/"); + $file = str_replace('//','/',$file); + flush(); + + if (!$this->setup->checkIgnore(basename($file),dirname($file),$this->ignore_files,true,$this->ignoresymlinks)) + { + $filelist[] = str_replace('\\','/',$file); + } else { + phpDocumentor_out("File $file Ignored\n"); + flush(); + } + } + } + } + if (!empty($this->dirs)) + { + $dirs = explode(",",$this->dirs); + foreach($dirs as $dir) + { + $olddir = $dir; + $dir = realpath($dir); + if (!$dir) { + phpDocumentor_out('ERROR: "' . $olddir . '" does not exist, skipping'); + continue; + } + $dir = trim($dir); + $dir = strtr($dir, "\\", "/"); + $dir = str_replace('//','/',$dir); + // strip trailing directory seperator + if (substr($dir,-1) == "/" || substr($dir,-1) == "\\") + { + $dir = substr($dir,0,-1); + } + $files = $this->setup->dirList($dir,$this->hidden,$this->ignoresymlinks); + if (is_array($files)) + { + foreach($files as $file) + { + $file = strtr($file, '\\', '/'); + // file's subpath, relative to $dir + $file_subpath = str_replace('\\', '/', realpath(dirname($file))); + $file_subpath = preg_replace('[\\/]', DIRECTORY_SEPARATOR, $file_subpath); + $file_subpath = preg_replace('~^' . preg_quote($dir, '~') . '~', '', $file_subpath); + + if (!$this->setup->checkIgnore(basename($file), $file_subpath, $this->ignore_files,true,$this->ignoresymlinks)) + { + $filelist[] = $file; + } else { + phpDocumentor_out("File $file Ignored\n"); + flush(); + } + } + } + } + } + if (isset($filelist)) + { + if (PHPDOCUMENTOR_WINDOWS) + { + // case insensitive array_unique + usort($filelist,'strnatcasecmp'); + reset($filelist); + + $newarray = array(); + $i = 0; + + $element = current($filelist); + for ($n=0;$n<sizeof($filelist);$n++) + { + if (strtolower(next($filelist)) != strtolower($element)) + { + $newarray[$i] = $element; + $element = current($filelist); + $i++; + } + } + $filelist = $newarray; + } else $filelist = array_unique($filelist); + + $base = count(explode("/",$source_base = $this->setup->getBase($filelist))); + define("PHPDOCUMENTOR_BASE",$source_base); + list($filelist,$ric) = $this->setup->getReadmeInstallChangelog($source_base, $filelist); + phpDocumentor_out("\n\nGrabbing README/INSTALL/CHANGELOG\n"); + flush(); + foreach($ric as $file) + { + phpDocumentor_out(basename($file).'...'); + flush(); + $fp = fopen($file,'r'); + $contents = fread($fp,filesize($file)); + $this->render->HandleEvent(PHPDOCUMENTOR_EVENT_README_INSTALL_CHANGELOG, array(basename($file),$contents)); + fclose($fp); + } + phpDocumentor_out("\ndone\n"); + flush(); + list($filelist,$tutorials) = $this->setup->getTutorials($filelist); + phpDocumentor_out("\n\nTutorial/Extended Documentation Parsing Stage\n\n"); + flush(); + if (count($tutorials)) + { + $tuteparser = new XMLPackagePageParser; + $tuteparser->subscribe('*',$this->render); + foreach($tutorials as $tutorial) + { + switch($tutorial['tutetype']) + { + case 'pkg' : + case 'cls' : + case 'proc' : + switch($tutorial['tutetype']) + { + case 'pkg' : + $ptext = 'Package-level Docs '; + if (!empty($tutorial['subpackage'])) + $ptext = 'Sub-Package Docs '; + break; + case 'cls' : + $ptext = 'Class-level Docs '; + break; + case 'proc' : + $ptext = 'Procedural-level Docs '; + break; + } + $fp = @fopen($tutorial['path'],"r"); + if ($fp) + { + $ret = fread($fp,filesize($tutorial['path'])); + // fix 1151650 + if (stristr($ret, "utf-8") !== "") + { + $ret = utf8_decode($ret); + } + fclose($fp); + unset($fp); + phpDocumentor_out('Parsing '.$ptext.$tutorial['path'].'...'); + flush(); + $tuteparser->parse($ret,$tutorial); + phpDocumentor_out("done\n"); + flush(); + } else + { + phpDocumentor_out('Error '.$ptext.$tutorial['path'].' doesn\'t exist'."\n"); + flush(); + } + default : + break; + } + } + } + phpDocumentor_out("done\n"); + flush(); + phpDocumentor_out("\n\nGeneral Parsing Stage\n\n"); + flush(); + foreach($filelist as $file) + { + phpDocumentor_out("Reading file $file"); + flush(); + $this->parse->parse($a = $this->setup->readPhpFile($file, $this->render->quietMode),$file,$base,$this->packages); + + } + $b = (time() - $this->parse_start_time); + phpDocumentor_out("done\n"); + flush(); + // render output + phpDocumentor_out("\nConverting From Abstract Parsed Data\n"); + flush(); + $this->render->output(); + $a = (time() - $this->parse_start_time); + $c = ($a - $b); + phpDocumentor_out("\nParsing time: $b seconds\n"); + phpDocumentor_out("\nConversion time: $c seconds\n"); + phpDocumentor_out("\nTotal Documentation Time: $a seconds\n"); + phpDocumentor_out("done\n"); + flush(); + } else + { + print "\nERROR: nothing parsed\n"; + exit; + } + } + /** + * Parse configuration file phpDocumentor.ini + */ + function parseIni() + { + phpDocumentor_out("Parsing configuration file phpDocumentor.ini...\n"); + flush(); + if ('@DATA-DIR@' != '@'.'DATA-DIR@') + { + $options = phpDocumentor_parse_ini_file(str_replace('\\','/', '@DATA-DIR@/PhpDocumentor') . PATH_DELIMITER . 'phpDocumentor.ini',true); + phpDocumentor_out(" (found in " . '@DATA-DIR@/PhpDocumentor' . PATH_DELIMITER . ")...\n"); + } else { + $options = phpDocumentor_parse_ini_file(str_replace('\\','/',$GLOBALS['_phpDocumentor_install_dir']) . PATH_DELIMITER . 'phpDocumentor.ini',true); + phpDocumentor_out(" (found in " . $GLOBALS['_phpDocumentor_install_dir'] . PATH_DELIMITER . ")...\n"); + } + + if (!$options) + { + print "ERROR: cannot open phpDocumentor.ini in directory " . $GLOBALS['_phpDocumentor_install_dir']."\n"; + print "-Is phpdoc in either the path or include_path in your php.ini file?"; + exit; + } + + foreach($options as $var => $values) + { + if ($var != 'DEBUG') + { +// phpDocumentor_out("\n$var"); + if ($var != '_phpDocumentor_setting' && $var != '_phpDocumentor_options' && $var != '_phpDocumentor_install_dir' ) $values = array_values($values); +// fancy_debug("\n$var",$values); + $GLOBALS[$var] = $values; + } + } + phpDocumentor_out("\ndone\n"); + flush(); + /** Debug Constant */ + if (!defined('PHPDOCUMENTOR_DEBUG')) define("PHPDOCUMENTOR_DEBUG",$options['DEBUG']['PHPDOCUMENTOR_DEBUG']); + if (!defined('PHPDOCUMENTOR_KILL_WHITESPACE')) define("PHPDOCUMENTOR_KILL_WHITESPACE",$options['DEBUG']['PHPDOCUMENTOR_KILL_WHITESPACE']); + $GLOBALS['_phpDocumentor_cvsphpfile_exts'] = $GLOBALS['_phpDocumentor_phpfile_exts']; + foreach($GLOBALS['_phpDocumentor_cvsphpfile_exts'] as $key => $val) + { + $GLOBALS['_phpDocumentor_cvsphpfile_exts'][$key] = "$val,v"; + } + // none of this stuff is used anymore + if (isset($GLOBALS['_phpDocumentor_html_allowed'])) + { + $___htmltemp = array_flip($GLOBALS['_phpDocumentor_html_allowed']); + $___html1 = array(); + foreach($___htmltemp as $tag => $trans) + { + $___html1['<'.$tag.'>'] = htmlentities('<'.$tag.'>'); + $___html1['</'.$tag.'>'] = htmlentities('</'.$tag.'>'); + } + $GLOBALS['phpDocumentor___html'] = array_flip($___html1); + } + } + + /** + * Performs character-based validation of Output Converter Template name pieces + * @param string the name piece (just ONE of either Output, Converter, or Template piece) + * @param string any extra characters to allow beyond the default character set + * @return string|bool the clean name, or FALSE if piece is deemed invalid + * @access private + */ + function cleanConverterNamePiece($name, $extra_characters_to_allow = '') + { + $name = str_replace("\\", "/", $name); + // security: ensure no opportunity exists to use "../.." pathing in this value + $name = preg_replace('/[^a-zA-Z0-9' . $extra_characters_to_allow . '_-]/', "", $name); + + // absolutely positively do NOT allow two consecutive dots ".." + if (strpos($name, '..') > -1) $name = false; + return $name; + } + + /** + * Figures out what output converter to use + * @param string Output Converter Template name + * @access private + * @global array + * @uses cleanConverterNamePieces + * @uses phpDocumentor_out + */ + function setupConverters($output = false) + { + global $_phpDocumentor_setting; + if ($output) + { + $_phpDocumentor_setting['output'] = $output; + } + if (isset($_phpDocumentor_setting['output']) && !empty($_phpDocumentor_setting['output'])) + { + $c = explode(',',$_phpDocumentor_setting['output']); + for($i=0; $i< count($c); $i++) + { + $c[$i] = explode(':',$c[$i]); + $a = $c[$i][0]; + if (isset($c[$i][0])) + { + $a = $this->cleanConverterNamePiece($c[$i][0]); + } + else + { + $a = false; + } + if (isset($c[$i][1])) + { + /* + * must allow "/" due to options like "DocBook/peardoc2" + */ + $b = $this->cleanConverterNamePiece($c[$i][1], '\/'); + } + else + { + $b = false; + } + if (isset($c[$i][2])) + { + /* + * must allow "." due to options like "phpdoc.de" + * must allow "/" due to options like "DOM/default" + */ + $d = $this->cleanConverterNamePiece($c[$i][2], '.\/'); + if (substr($d,-1) != "/") + { + $d .= "/"; + } + else + { + $d = 'default/'; + } + } + if (strtoupper(trim($a)) == 'HTML' && (trim($b) == 'default')) + { + phpDocumentor_out("WARNING: HTMLdefaultConverter is deprecated, using HTMLframesConverter.\n"); + phpDocumentor_out("WARNING: template output is identical, HTMLframes is more flexible.\n"); + phpDocumentor_out("WARNING: please adjust your usage\n"); + flush(); + $b = 'frames'; // change default to frames. + } + $this->render->addConverter(strtoupper(trim($a)),trim($b),trim($d)); + } + } else + { + $this->render->addConverter('HTML','frames','default/'); + } + if (empty($this->render->converters)) addErrorDie(PDERROR_NO_CONVERTERS); + } +} + +/** + * Fuzzy logic to interpret the boolean args' intent + * @param string the command-line option to analyze + * @return boolean our best guess of the value's boolean intent + */ +function decideOnOrOff($value_to_guess = 'NO VALUE WAS PASSED') +{ + $these_probably_mean_yes = array( + '', // "--hidden" with no value + 'on', // "--hidden on" + 'y', 'yes', // "--hidden y" + 'true', // "--hidden true" + '1' // "--hidden 1" + ); + $best_guess = false; // default to "false", "off", "no", "take a hike" + + if (in_array(strtolower(trim($value_to_guess)), $these_probably_mean_yes)) + { + $best_guess = true; + } + return $best_guess; +} + +/** + * Print parse information if quiet setting is off + */ +function phpDocumentor_out($string) +{ + global $_phpDocumentor_setting; + if ((isset($_phpDocumentor_setting['quiet'])) ? !decideOnOrOff($_phpDocumentor_setting['quiet']) : true) + { + print $string; + } + +} + +/** + * Crash in case of known, dangerous bug condition + * + * Checks the PHP version that is executing PhpDocumentor, + * in case a known PHP/PEAR bug condition could be triggered + * by the PhpDocumentor execution. + * @param string $php_version the PHP version that contains the bug + * @param string $php_bug_number the PHP bug number (if any) + * @param string $pear_bug_number the PEAR bug number (if any) + */ +function checkForBugCondition($php_version, $php_bug_number = 'none', $pear_bug_number = 'none') +{ + if (version_compare(phpversion(), $php_version) == 0) + { + addErrorDie(PDERROR_DANGEROUS_PHP_BUG_EXISTS, $php_version, $php_bug_number, $pear_bug_number); + } +} +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/BUGS b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/BUGS new file mode 100644 index 00000000..9f1a80f3 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/BUGS @@ -0,0 +1,7 @@ +Smarty is supported only in PHP 4.0.6 or later. + +Smarty versions previous to 2.0 require the PEAR libraries. Be sure to include +the path to the PEAR libraries in your php include_path. Config_file.class.php +uses the PEAR library for its error handling routines. PEAR comes with the PHP +distribution. Unix users check /usr/local/lib/php, windows users check +C:/php/pear. diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/COPYING.lib b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/COPYING.lib new file mode 100644 index 00000000..3b204400 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/COPYING.lib @@ -0,0 +1,458 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/ChangeLog b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/ChangeLog new file mode 100644 index 00000000..4dc232e8 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/ChangeLog @@ -0,0 +1,5421 @@ +2003-11-18 Messju Mohr <messju@lammfellpuschen.de> + + * NEWS + libs/Smarty.class.php + libs/Smarty_Compiler.class.php: + move Smarty::quote_replace() to Smarty_Compiler::_quote_replace() + + * libs/Smarty.class.php: + removed extract-calls from _include()- and _eval()-wrappers + variables passed with {include_php} have to accessed as members of $params + now + +2003-11-17 Messju Mohr <messju@lammfellpuschen.de> + + * docs/designers.sgml: + fixed typo + +2003-11-13 Messju Mohr <messju@lammfellpuschen.de> + + * libs/Config_File.class.php: + fix occasional notice + +2003-11-13 andreas halter <phpcvs@andreashalter.ch> + + * docs/de/designers.sgml: + - added cat modifier, thanks messju :-) + +2003-11-13 Monte Ohrt <monte@ispi.net> + + * (Smarty_2_6_0-RC3) + NEWS + libs/Config_File.class.php + libs/Smarty.class.php + libs/Smarty_Compiler.class.php: + commit RC3 tags + +2003-11-13 Messju Mohr <messju@lammfellpuschen.de> + + * NEWS + libs/Smarty_Compiler.class.php: + fix handling of $var.key inside [] + + * libs/Smarty.class.php: + fix unnecessary loading of core.load_resource_plugin.php + + * (Smarty_2_6_0-RC3) + docs/fr/designers.sgml: + fixed example of html_table + +2003-11-11 Messju Mohr <messju@lammfellpuschen.de> + + * NEWS + libs/core/core.process_cached_inserts.php: + fix handling of assign inside {insert}-tags + +2003-11-06 Messju Mohr <messju@lammfellpuschen.de> + + * libs/core/core.read_cache_file.php: + added $exp_time-parameter + + * docs/programmers.sgml: + added $exp_time to cache_handler_func-example + + * libs/Smarty.class.php + libs/core/core.write_cache_file.php: + added $exp_time-parameter of clear_cache() and clear_all_cache() to + cache_handler_func. + +2003-11-05 Messju Mohr <messju@lammfellpuschen.de> + + * NEWS + libs/Config_File.class.php: + fix handling if [...] inside triple-quotes in config-files + +2003-11-04 Messju Mohr <messju@lammfellpuschen.de> + + * libs/Smarty.class.php: + fixed little bug in _parse_resource_name() (jlgunter, messju) + +2003-11-03 andreas halter <phpcvs@andreashalter.ch> + + * docs/designers.sgml + docs/de/designers.sgml + docs/fr/designers.sgml: + - changed Smarty.php.class occurences to Smarty.class.php + +2003-10-29 boots <jayboots@yahoo.com> + + * docs/appendixes.sgml + docs/designers.sgml + docs/manual.sgml + docs/programmers.sgml + docs/de/appendixes.sgml + docs/de/designers.sgml + docs/de/programmers.sgml + docs/fr/appendixes.sgml + docs/fr/designers.sgml + docs/fr/getting-started.sgml + docs/fr/manual.sgml + docs/fr/preface.sgml + docs/fr/programmers.sgml: + Fixes to documentation syntax so that all content can be processed used + xsltproc docbook-xsl tools. In particular, fixes unescaped entities, + broken tags, unquoted attributes. + +2003-10-27 Messju Mohr <messju@lammfellpuschen.de> + + * NEWS + libs/Smarty_Compiler.class.php: + fix handling of simple-math-operators inside modifiers + +2003-10-25 Messju Mohr <messju@lammfellpuschen.de> + + * libs/Smarty_Compiler.class.php: + removed unused property _output_type + removed unused param $tag_attrs of _parse_var_props() + cleaned up alignment of class-properties + +2003-10-23 Messju Mohr <messju@lammfellpuschen.de> + + * libs/Smarty_Compiler.class.php: + removed notice in php-tag handling in Smarty_Compiler::_compile_file() + + * libs/Smarty_Compiler.class.php: + removed two occasional E_NOTICES from + Smarty_Compiler::_compile_include_php_tag() + + * NEWS + libs/core/core.create_dir_structure.php: + fix handling of trailing-slashes in open_basedir in + smarty_core_create_dir_structure() + +2003-10-20 Messju Mohr <messju@lammfellpuschen.de> + + * libs/Smarty_Compiler.class.php: + elements inside `` are bracketed now inside the compiled-tpl. this + fixes some issues with simple-math inside backticks. + +2003-10-16 Monte Ohrt <monte@ispi.net> + + * docs/designers.sgml: + update overlib docs, no working examples + +2003-10-12 Messju Mohr <messju@lammfellpuschen.de> + + * libs/Smarty.class.php + libs/core/core.is_secure.php: + move check for template_dir in secure_dir-array into core.is_secure.php + + this makes template_exists() work correctly with security=true even if + template_dir is not inside the secure_dir-array + +2003-10-11 Messju Mohr <messju@lammfellpuschen.de> + + * libs/plugins/shared.make_timestamp.php: + tightened check for YYYYMMDDHHMMSS-format. thanks konstantin for + pointing this out. + + removed a few tabs. + + * libs/Smarty_Compiler.class.php: + fix precedence of simple-math-operators before modifiers. + thanks dominik! + + * libs/Config_File.class.php + libs/Smarty.class.php + libs/Smarty_Compiler.class.php + libs/core/core.assemble_plugin_filepath.php + libs/core/core.assign_smarty_interface.php + libs/core/core.create_dir_structure.php + libs/core/core.display_debug_console.php + libs/core/core.get_include_path.php + libs/core/core.get_microtime.php + libs/core/core.get_php_resource.php + libs/core/core.is_secure.php + libs/core/core.is_trusted.php + libs/core/core.load_plugins.php + libs/core/core.load_resource_plugin.php + libs/core/core.process_cached_inserts.php + libs/core/core.process_compiled_include.php + libs/core/core.read_cache_file.php + libs/core/core.rm_auto.php + libs/core/core.rmdir.php + libs/core/core.run_insert_handler.php + libs/core/core.smarty_include_php.php + libs/core/core.write_compiled_include.php + libs/core/core.write_compiled_resource.php + libs/core/core.write_file.php: + removed tabs from the main and the core/*.php files + +2003-10-08 Monte Ohrt <monte@ispi.net> + + * (Smarty_2_6_0-RC2) + NEWS + libs/Config_File.class.php + libs/Smarty.class.php + libs/Smarty_Compiler.class.php: + update version numbers to RC2 + +2003-09-18 Messju Mohr <messju@lammfellpuschen.de> + + * docs/designers.sgml + docs/de/designers.sgml: + fixed description of cycle's advance-attribute + +2003-09-16 Messju Mohr <messju@lammfellpuschen.de> + + * NEWS + libs/Smarty_Compiler.class.php: + apply modifiers only once to section-loop and foreach-from attributes + +2003-09-15 Messju Mohr <messju@lammfellpuschen.de> + + * libs/Smarty.class.php + libs/Smarty_Compiler.class.php + libs/core/core.write_cache_paths_file.php: + backed out _smarty_cached_paths-file-handling + + * libs/Smarty.class.php + libs/core/core.rm_auto.php: + fixed clear_compiled_tpl with explicit $tpl_file given + fixed return value of smarty_core_rm_auto() + Smarty::_unlink() + + * libs/Smarty.class.php: + little fix in _get_auto_filename() + +2003-09-14 Messju Mohr <messju@lammfellpuschen.de> + + * libs/Smarty.class.php + libs/core/core.assemble_auto_filename.php: + removed auto-filenames from path-cache. merged assemble_auto_filename + back into Smarty::_get_auto_filename() + +2003-09-12 Messju Mohr <messju@lammfellpuschen.de> + + * libs/Smarty_Compiler.class.php: + fixed quoting of modifier parameters + + * NEWS + libs/Smarty.class.php + libs/Smarty_Compiler.class.php + libs/core/core.get_php_resource.php + libs/core/core.load_plugins.php + libs/core/core.load_resource_plugin.php: + remove Smarty::_plugin_implementation_exists() - use php's native + is_callable() + +2003-09-11 Messju Mohr <messju@lammfellpuschen.de> + + * libs/Smarty.class.php: + silenced two notices acces HTTP_SERVER_VARS + +2003-09-10 andreas halter <phpcvs@andreashalter.ch> + + * docs/de/designers.sgml + docs/de/getting-started.sgml + docs/de/programmers.sgml: + - minor fixes (2 rep), slight wording changes + - jade transform problem fixed + +2003-09-08 andreas halter <phpcvs@andreashalter.ch> + + * docs/de/designers.sgml + docs/de/getting-started.sgml + docs/de/manual.sgml + docs/de/preface.sgml + docs/de/programmers.sgml: + all updated for 2.6.0 release, translated everything from 2_5_0 branch to + 20030908 + +2003-09-04 Messju Mohr <messju@lammfellpuschen.de> + + * libs/Smarty.class.php: + proper checking for files in _fetch_resource_info() + +2003-09-02 Messju Mohr <messju@lammfellpuschen.de> + + * NEWS + libs/Smarty_Compiler.class.php: + ignore {strip}/{/strip) inside {strip}-blocks + + * libs/plugins/function.mailto.php: + fixed 2 notices in smarty_function_mailto() + +2003-09-01 Messju Mohr <messju@lammfellpuschen.de> + + * libs/Smarty.class.php: + re-include cache_paths on multiple calls to fetch() to avoid + inconsistencies + at multiple calls to fetch() in one script + + * libs/Smarty_Compiler.class.php: + fixed handling of \r in {strip} + renamed $_trailing_lf to $_additional_newline + + * libs/Smarty_Compiler.class.php: + the weekly fix for {strip} :) + + * docs/designers.sgml: + fixed example for simple math. + +2003-08-29 Messju Mohr <messju@lammfellpuschen.de> + + * libs/core/core.assign_smarty_interface.php + libs/core/core.display_debug_console.php + libs/plugins/function.assign.php + libs/plugins/function.html_options.php + libs/plugins/function.html_table.php: + fixed PHPDocumentor-comments (thanks Konstantin) + + * libs/core/core.rmdir.php: + made rmdir a bit more optimistic. especially it now removes + directories correctly that where created accidently by "safe_mode=On + && $use_sub_dirs=true" + +2003-08-27 Messju Mohr <messju@lammfellpuschen.de> + + * NEWS + libs/Smarty_Compiler.class.php: + fixed removal of leading/trailing newlines in {strip}-blocks + +2003-08-25 Messju Mohr <messju@lammfellpuschen.de> + + * INSTALL: + added note emphasizing the introduction of "libs/" with 2.5.0 + + * NEWS + libs/plugins/modifier.escape.php: + fixed proper escaping of " and ' with escape:javascript + +2003-08-22 Messju Mohr <messju@lammfellpuschen.de> + + * NEWS + libs/core/core.assemble_plugin_filepath.php: + fixed bug in traversal of $smarty->plugins_dir-array in + smarty_core_assemble_plugin_filepath(). the first matching plugin in + the path should be used, not the last one. + + * libs/core/core.read_cache_file.php: + discard $_cache_info when the cache should be regenerated + +2003-08-20 Messju Mohr <messju@lammfellpuschen.de> + + * NEWS + libs/Smarty_Compiler.class.php + libs/plugins/block.strip.php: + reverted {strip} from a block-plugin back into the compiler + + * docs/programmers.sgml: + fixed examples for register_function() and register_block() + + * libs/Smarty.class.php: + made template_exists() quiet when the template does not exist (thanks + to konstatin for pointing this out) + +2003-08-18 Monte Ohrt <monte@ispi.net> + + * docs/getting-started.sgml: + fix example title + + * docs/README + docs/getting-started.sgml: + change installation wording confusion + +2003-08-18 Messju Mohr <messju@lammfellpuschen.de> + + * libs/Smarty.class.php + libs/core/core.read_cache_file.php: + fixed unnecessary load of source in template_exists() and the + compile-check of smarty_core_read_cache_file() + + * libs/Smarty_Compiler.class.php: + allow section-, array- and object-dereference in $smarty-references + +2003-08-15 Messju Mohr <messju@lammfellpuschen.de> + + * docs/designers.sgml: + added parameter-descriptions for count_characters (thanks Konstantin + A. Pelepelin) + + fixed docs for {html_checkboxes} + +2003-08-14 Messju Mohr <messju@lammfellpuschen.de> + + * libs/Smarty.class.php + libs/core/core.read_cache_file.php: + fixed timestamp-check of config-files in smarty_core_read_cache_file() + + * libs/Smarty.class.php: + fixed typecasting for arrays in _parse_resource_name() + + * NEWS + libs/plugins/function.config_load.php: + fixes in config_load: + - handling of section-attribute + - reusing the same config-file multiple times + - serialization of config-data for php<4.2.0 (no var_export) + + many thanks to atu for pointing this out and for testing + +2003-08-13 Messju Mohr <messju@lammfellpuschen.de> + + * libs/Smarty.class.php + libs/core/core.smarty_include_php.php: + fixed problem with vars as attributes in {include_php} + +2003-08-13 Monte Ohrt <monte@ispi.net> + + * docs/README: + commit README file for documentation compiling + +2003-08-13 Messju Mohr <messju@lammfellpuschen.de> + + * libs/debug.tpl + libs/plugins/modifier.debug_print_var.php: + removed '\r' from debug_print_vars' output + properly escape vars in javascript-version of debug.tpl + +2003-08-11 Monte Ohrt <monte@ispi.net> + + * (Smarty_2_6_0_RC1) + NEWS + docs/designers.sgml + docs/html.dsl + docs/php.dsl + libs/Config_File.class.php + libs/Smarty.class.php + libs/Smarty_Compiler.class.php: + get ready for 2.6.0-RC1 release + +2003-08-10 Messju Mohr <messju@lammfellpuschen.de> + + * NEWS + libs/Smarty.class.php: + fixed status-header for cache_modified_check under cgi-sapi + +2003-08-09 Messju Mohr <messju@lammfellpuschen.de> + + * libs/core/core.is_secure.php + libs/core/core.is_trusted.php: + synced secure_dir-checking with trusted_dir-checking + + * libs/core/core.is_secure.php: + tightenend path checking in smarty_core_is_secure() + +2003-08-08 Messju Mohr <messju@lammfellpuschen.de> + + * libs/Smarty.class.php: + fix: proper nesting of $smarty->_cache_including flag in cascaded + cached/not-cached/fetched/inserted/foo-templates + + * libs/debug.tpl: + better escaping for $_debug_tpls[templates].filenames + + * libs/Smarty.class.php + libs/Smarty_Compiler.class.php: + removed redundant $smarty from Smarty::_smarty_include() + + * libs/debug.tpl: + proper escaping of filenames in debug-console (thanks to prossel). + +2003-08-07 Messju Mohr <messju@lammfellpuschen.de> + + * docs/programmers.sgml: + added docs for block-methods of registered objects + + * docs/programmers.sgml: + fixed typo in example for registered objects + + * docs/designers.sgml: + fixed exampls of html_image and html_checkboxes + + * libs/plugins/function.debug.php: + fixed {debug} and removed tabs in function.debug.php + + * docs/programmers.sgml: + fixed example for register_object + + * docs/designers.sgml + docs/programmers.sgml: + updated docs for capture, html_table, html_image and register_object + +2003-08-07 Monte Ohrt <monte@ispi.net> + + * docs/designers.sgml + docs/programmers.sgml: + add math and default_resource_type to docs + + * docs/getting-started.sgml: + add core to example, add tech note + +2003-08-07 Messju Mohr <messju@lammfellpuschen.de> + + * docs/manual.sgml + docs/fr/manual.sgml: + upd copyright in the docs + +2003-08-07 Monte Ohrt <monte@ispi.net> + + * docs/getting-started.sgml: + added core directory to install instructions + +2003-08-07 Messju Mohr <messju@lammfellpuschen.de> + + * docs/designers.sgml + docs/programmers.sgml: + added docs for php-functions as modifiers + + * libs/Smarty.class.php + libs/Smarty_Compiler.class.php: + better caching of attributes for $cacheable=false-plugins + + * docs/programmers.sgml: + added section "caching.cacheable" to the docs, explaining the usage of + the $cacheable-flag of the register_(block|compiler|function)-functions + + * libs/Smarty_Compiler.class.php: + fixed output of custom-functions with cached attributes + + * docs/programmers.sgml: + docs update on callbacks to the register_*-functions + +2003-08-06 Messju Mohr <messju@lammfellpuschen.de> + + * NEWS + libs/Smarty.class.php + libs/Smarty_Compiler.class.php + libs/core/core.process_compiled_include.php: + added optional parameter $cache_attrs to register_function() and + register_block(). $cache_attrs is an array containing attribute- names + that should be cached on calls to functions that have $cacheable set + to false. + + * libs/Smarty.class.php: + fixed bug in _run_mod_handler + + * libs/Smarty_Compiler.class.php: + fixed bug with autoload-handling of modifiers. thanks ándre. + +2003-08-05 Messju Mohr <messju@lammfellpuschen.de> + + * libs/Config_File.class.php + libs/Smarty.class.php + libs/Smarty_Compiler.class.php: + updated copyright notice + + * libs/Smarty.class.php + libs/core/core.load_plugins.php: + fixed bug that occurred when using the same not-cacheable plugin in + multiple includes + + * docs/programmers.sgml: + docs-update for plugins.writing + +2003-08-04 Messju Mohr <messju@lammfellpuschen.de> + + * docs/designers.sgml + docs/programmers.sgml: + updated docs for register_block_function(), block-functions, + $request_use_auto_globals and html_checkboxes + +2003-07-31 Messju Mohr <messju@lammfellpuschen.de> + + * NEWS + libs/Smarty.class.php + libs/Smarty_Compiler.class.php: + enabled registration of class-methods as callbacks for the + register_*-functions + + use: array('classname', 'method_name')) as callback + +2003-07-29 Messju Mohr <messju@lammfellpuschen.de> + + * libs/Smarty.class.php + libs/Smarty_Compiler.class.php: + modifiers are resolved at compile-time now. _run_mod_handler() is + still used for modifiers with map_array=true (== no preceeding '@') + + * libs/Smarty.class.php + libs/Smarty_Compiler.class.php + libs/core/core.smarty_include.php: + moved _smarty_include() back into Smarty.class.php + + * libs/Smarty.class.php + libs/core/core.load_plugins.php: + prevent unnecessary calls to _read_file() in _is_compiled() + converted method-call to internal function-call in + smarty_core_load_plugins() + +2003-07-28 Messju Mohr <messju@lammfellpuschen.de> + + * libs/Smarty_Compiler.class.php: + quote smarty-header properly to prevent resource-names from escaping from + the comment + +2003-07-25 Messju Mohr <messju@lammfellpuschen.de> + + * libs/core/core.create_dir_structure.php: + weakend race-condition and removed bogus error-message caused by that + in smarty_core_create_dir_structure(). + +2003-07-23 Messju Mohr <messju@lammfellpuschen.de> + + * libs/Smarty.class.php + libs/core/core.display_debug_console.php + libs/core/core.fetch_resource_info.php + libs/core/core.get_php_resource.php + libs/core/core.parse_resource_name.php + libs/core/core.process_cached_inserts.php + libs/core/core.read_cache_file.php + libs/core/core.run_insert_handler.php + libs/core/core.smarty_include.php + libs/core/core.smarty_include_php.php + libs/plugins/function.eval.php: + moved _fetch_resource_info and _parse_resource_name back into + Smarty.class.php + renamed smarty_include and smarty_eval wrappers to _include and _eval + +2003-07-17 Messju Mohr <messju@lammfellpuschen.de> + + * libs/core/core.process_compiled_include.php + libs/core/core.read_cache_file.php: + improved checking of compiled_include against cached-template with + non-cached-chunks + + * libs/core/core.write_compiled_include.php: + fixed too short open-tag + + * libs/plugins/function.eval.php: + fixed assign parameter for eval (must have gotton lost on its way to 2.5.0) + cleaned up indentiation + +2003-07-03 Messju Mohr <messju@lammfellpuschen.de> + + * libs/Smarty_Compiler.class.php: + resurrected $foo->$bar syntax + + * libs/Smarty_Compiler.class.php: + i'm so stupid. kick me. + + * libs/Smarty_Compiler.class.php: + fixed initialisation of $this->_plugins in compile_block_tag() + +2003-07-03 Monte Ohrt <monte@ispi.net> + + * libs/Config_File.class.php: + add preg_quote delimiter + +2003-07-03 Messju Mohr <messju@lammfellpuschen.de> + + * libs/Smarty_Compiler.class.php: + applied fix for {$var1->p1|modifier:$var2->p2}-syntax - thanks Dominik + +2003-07-02 Messju Mohr <messju@lammfellpuschen.de> + + * libs/Smarty_Compiler.class.php: + fixed duplicate generation of arg-list in _compile_block_tag() + + * libs/Smarty_Compiler.class.php: + fixed off-by-one-error in nocache-tag-handling + +2003-06-30 Messju Mohr <messju@lammfellpuschen.de> + + * libs/Smarty_Compiler.class.php: + backed out errornously committed support for $foo->$bar + + * libs/core/core.write_file.php: + fixed indentiation, silenced occasional warning + + * libs/plugins/function.html_image.php: + match first character of file-attribute against "/" instead of + DIRECTORY_SEPARATOR since it is a url-path and not a file-path. + + * libs/Smarty_Compiler.class.php + libs/core/core.write_file.php + libs/plugins/function.html_image.php: + libs/plugins/function.html_image.php + + * libs/Smarty_Compiler.class.php: + re-fixed cacheable_state-handling + + * libs/core/core.display_debug_console.php + libs/core/core.process_cached_inserts.php + libs/core/core.process_compiled_include.php + libs/core/core.run_insert_handler.php: + extincting $this out of smarty_core_*-functions + + * libs/Smarty.class.php + libs/Smarty_Compiler.class.php: + fixed handling of nocache-state + +2003-06-29 Messju Mohr <messju@lammfellpuschen.de> + + * libs/Smarty.class.php + libs/core/core.smarty_include.php + libs/core/core.smarty_include_php.php + libs/plugins/function.eval.php: + removed $this from smarty_include and smarty_include_php + added cleaner handling of $this to {eval} + + * libs/core/core.load_resource_plugin.php: + fixed inlude_once-call + + * docs/de/designers.sgml + docs/fr/designers.sgml: + fixed examples of html_radios and html_checkboxes in german and french docs + +2003-06-25 Monte Ohrt <monte@ispi.net> + + * libs/core/core.assemble_auto_filename.php + libs/core/core.write_cache_paths_file.php: + fix typo, fix write_cache_paths logic + + * libs/Smarty.class.php + libs/core/core.assemble_auto_filename.php: + fix SMARTY_COMPILE_DIR_SEP problem, make local var + +2003-06-24 Monte Ohrt <monte@ispi.net> + + * libs/Smarty.class.php + libs/core/core.assemble_auto_filename.php + libs/core/core.write_cache_paths_file.php: + fixed cache_paths bug, simplified filename assembly logic + +2003-06-24 Messju Mohr <messju@lammfellpuschen.de> + + * libs/plugins/function.html_image.php: + added parsing of forgotton param "basedir" + + * libs/Smarty_Compiler.class.php: + fixed $smarty.get-reference + + * libs/plugins/block.textformat.php: + removed warning + + * libs/Smarty_Compiler.class.php: + fixed value of _cacheable_state on compiler-startup + +2003-06-23 Monte Ohrt <monte@ispi.net> + + * libs/Smarty.class.php + libs/Smarty_Compiler.class.php + libs/core/core.write_cache_paths_file.php: + make cache_path per resource, fix a couple directory path issues + +2003-06-23 Messju Mohr <messju@lammfellpuschen.de> + + * libs/Smarty_Compiler.class.php: + removed warning when compiling empty template + + * libs/core/core.write_compiled_include.php: + fixed bug in write_compiled_include + + * libs/core/core.assemble_plugin_filepath.php: + fixed warning + +2003-06-22 Messju Mohr <messju@lammfellpuschen.de> + + * libs/plugins/function.eval.php: + fixed propagation of $this into evald code in smarty_function_eval() + + * libs/core/core.write_cache_paths_file.php + libs/core/core.write_compiled_include.php: + fix in compiled-include-handling + + * libs/core/core.assemble_auto_filename.php + libs/core/core.assemble_plugin_filepath.php + libs/core/core.assign_smarty_interface.php + libs/core/core.create_dir_structure.php + libs/core/core.fetch_resource_info.php + libs/core/core.get_include_path.php + libs/core/core.get_microtime.php + libs/core/core.get_php_resource.php + libs/core/core.is_secure.php + libs/core/core.is_trusted.php + libs/core/core.load_plugins.php + libs/core/core.load_resource_plugin.php + libs/core/core.parse_resource_name.php + libs/core/core.read_cache_file.php + libs/core/core.rm_auto.php + libs/core/core.rmdir.php + libs/core/core.write_cache_file.php + libs/core/core.write_cache_paths_file.php + libs/core/core.write_compiled_include.php + libs/core/core.write_compiled_resource.php + libs/core/core.write_file.php + libs/plugins/modifier.date_format.php: + started moving from $this to $smarty in core.*.php + +2003-06-21 Monte Ohrt <monte@ispi.net> + + * libs/core/core.create_dir_structure.php + libs/core/core.write_file.php + libs/plugins/function.config_load.php: + fix more dir paths + + * NEWS + libs/Smarty.class.php + libs/core/core.assemble_auto_filename.php + libs/core/core.assemble_plugin_filepath.php + libs/core/core.fetch_resource_info.php + libs/core/core.get_php_resource.php + libs/core/core.parse_resource_name.php + libs/core/core.process_cached_inserts.php + libs/core/core.read_cache_file.php + libs/core/core.rm_auto.php + libs/core/core.rmdir.php + libs/core/core.run_insert_handler.php + libs/core/core.smarty_include.php + libs/core/core.smarty_include_php.php + libs/core/core.write_cache_file.php + libs/core/core.write_cache_paths_file.php + libs/core/core.write_compiled_include.php + libs/core/core.write_compiled_resource.php + libs/core/core.write_file.php + libs/plugins/function.config_load.php + libs/plugins/function.fetch.php + libs/plugins/function.html_image.php: + fix filepaths to core files to use DIRECTORY_SEPARATOR + +2003-06-21 Messju Mohr <messju@lammfellpuschen.de> + + * libs/Smarty_Compiler.class.php: + fixed {plugin|modifier} syntax + + * libs/Smarty.class.php + libs/core/core.write_compiled_include.php: + fixed compiled include handling + +2003-06-21 Monte Ohrt <monte@ispi.net> + + * libs/Smarty.class.php + libs/Smarty_Compiler.class.php + libs/core/core.assemble_auto_filename.php + libs/core/core.assemble_plugin_filepath.php + libs/core/core.write_cache_paths_file.php: + added filepath caching + +2003-06-20 Monte Ohrt <monte@ispi.net> + + * libs/Smarty_Compiler.class.php: + update more varnames + + * libs/Smarty.class.php + libs/core/core.display_debug_console.php + libs/core/core.fetch_file_info.php + libs/core/core.fetch_resource_info.php + libs/core/core.get_php_resource.php + libs/core/core.parse_file_path.php + libs/core/core.parse_resource_name.php + libs/core/core.process_cached_inserts.php + libs/core/core.read_cache_file.php + libs/core/core.run_insert_handler.php + libs/core/core.smarty_include.php + libs/core/core.smarty_include_php.php + libs/core/core.write_compiled_resource.php + libs/core/core.write_compiled_template.php + libs/plugins/function.config_load.php: + refactored var naming to better reflect "resource" instead of "file" where + appropriate + +2003-06-19 Messju Mohr <messju@lammfellpuschen.de> + + * libs/Smarty.class.php: + updated version-number to 2.5.0-cvs + + * libs/core/core.write_cache_file.php: + omit is-cache_dir-writable-check if a cache_handler_function is in use + + * libs/core/core.smarty_include_php.php: + fixed comments in smarty_include_php + +2003-06-19 Monte Ohrt <monte@ispi.net> + + * libs/Smarty.class.php + libs/Smarty_Compiler.class.php + libs/core/core.display_debug_console.php + libs/core/core.smarty_include.php + libs/plugins/function.eval.php: + split up _compile_template to _compile_file and _compile_source, fix eval + function + VS: ---------------------------------------------------------------------- + + * libs/plugins/function.config_load.php: + fix logic for _is_compiled() + +2003-06-19 Messju Mohr <messju@lammfellpuschen.de> + + * NEWS + libs/Smarty_Compiler.class.php: + added optional assign-attribute to {capture}-tag + + * NEWS + libs/Smarty.class.php: + added $cacheable-parameter to register_compiler_function() + +2003-06-18 Messju Mohr <messju@lammfellpuschen.de> + + * NEWS + libs/Smarty.class.php + libs/Smarty_Compiler.class.php + libs/core/core.load_plugins.php + libs/core/core.process_compiled_include.php + libs/core/core.read_cache_file.php + libs/core/core.write_cache_file.php + libs/core/core.write_compiled_include.php: + added $cacheable-parameter to register_function() and register_block() + + * libs/Smarty.class.php: + append '.php' to all compiled templates regardless of the settings of + $use_sub_dirs + + * libs/Smarty.class.php + libs/core/core.read_cache_file.php: + fixed $file_path-parameters passed to smarty_core_fetch_file_info() + +2003-06-17 Monte Ohrt <monte@ispi.net> + + * NEWS: + fix name + + * libs/Smarty_Compiler.class.php: + change varnames to follow coding methods + + * NEWS + libs/Smarty_Compiler.class.php: + add math patch to core + +2003-06-17 Messju Mohr <messju@lammfellpuschen.de> + + * libs/core/core.smarty_include.php: + switched _process_template() to _is_compiled()-logic + +2003-06-17 Monte Ohrt <monte@ispi.net> + + * libs/Smarty.class.php: + fix _is_compiled logic + + * NEWS: + update news file + + * libs/Smarty.class.php + libs/Smarty_Compiler.class.php: + fix _run_mod_handler routine + + * libs/Smarty.class.php + libs/Smarty_Compiler.class.php + libs/core/core.display_debug_console.php + libs/core/core.fetch_file_info.php + libs/core/core.parse_file_path.php + libs/core/core.write_compiled_template.php + libs/plugins/function.config_load.php: + fix path problems, rename some varibles from "template" to "file" + +2003-06-16 Monte Ohrt <monte@ispi.net> + + * libs/core/core.fetch_file_info.php + libs/core/core.fetch_template_info.php: + rename file, commit + + * libs/Smarty.class.php + libs/Smarty_Compiler.class.php + libs/core/core.parse_file_path.php + libs/core/core.read_cache_file.php + libs/plugins/block.strip.php + libs/plugins/block.textformat.php + libs/plugins/compiler.config_load.php + libs/plugins/function.config_load.php + libs/plugins/function.eval.php + libs/plugins/function.fetch.php + libs/plugins/function.html_image.php: + fix config_load, compile fetched arrays to compile_dir, switch display + back to runtime. clean up var names and function names, split up compile + testing and compiling to separate funcs, rename some template_* functions + to + file_* functions and update logic so they can be used for file resources + other than templates. + +2003-06-16 Messju Mohr <messju@lammfellpuschen.de> + + * libs/Smarty_Compiler.class.php: + fixed little bug in _compile_custom_tag() + +2003-06-16 Monte Ohrt <monte@ispi.net> + + * NEWS + libs/Smarty.class.php + libs/Smarty_Compiler.class.php + libs/core/core.assign_smarty_interface.php + libs/core/core.create_dir_structure.php + libs/core/core.display_debug_console.php + libs/core/core.fetch_template_info.php + libs/core/core.get_include_path.php + libs/core/core.get_microtime.php + libs/core/core.get_php_resource.php + libs/core/core.is_secure.php + libs/core/core.is_trusted.php + libs/core/core.load_plugins.php + libs/core/core.load_resource_plugin.php + libs/core/core.parse_file_path.php + libs/core/core.process_cached_inserts.php + libs/core/core.read_cache_file.php + libs/core/core.rm_auto.php + libs/core/core.rmdir.php + libs/core/core.run_insert_handler.php + libs/core/core.smarty_include.php + libs/core/core.smarty_include_php.php + libs/core/core.write_cache_file.php + libs/core/core.write_compiled_template.php + libs/core/core.write_file.php + libs/plugins/core.assign_smarty_interface.php + libs/plugins/core.create_dir_structure.php + libs/plugins/core.display_debug_console.php + libs/plugins/core.fetch_template_info.php + libs/plugins/core.get_include_path.php + libs/plugins/core.get_microtime.php + libs/plugins/core.get_php_resource.php + libs/plugins/core.is_secure.php + libs/plugins/core.is_trusted.php + libs/plugins/core.load_plugins.php + libs/plugins/core.load_resource_plugin.php + libs/plugins/core.parse_file_path.php + libs/plugins/core.process_cached_inserts.php + libs/plugins/core.read_cache_file.php + libs/plugins/core.rm_auto.php + libs/plugins/core.rmdir.php + libs/plugins/core.run_insert_handler.php + libs/plugins/core.smarty_include.php + libs/plugins/core.smarty_include_php.php + libs/plugins/core.write_cache_file.php + libs/plugins/core.write_compiled_template.php + libs/plugins/core.write_file.php: + move core files into their own directory under SMARTY_DIR, + remove abstraction function _execute_core_function + + * libs/Smarty_Compiler.class.php: + fix newline handling for template for all template tags + +2003-06-11 Monte Ohrt <monte@ispi.net> + + * libs/plugins/compiler.config_load.php: + add compiler function to cvs repository + +2003-06-11 Messju Mohr <messju@lammfellpuschen.de> + + * NEWS + libs/Smarty.class.php + libs/Smarty_Compiler.class.php: + added config-option "request_use_auto_globals" to make auto-globals be + used as request vars instead of HTTP_*_VARS + +2003-06-11 Monte Ohrt <monte@ispi.net> + + * NEWS + libs/Smarty.class.php + libs/Smarty_Compiler.class.php + libs/plugins/function.config_load.php: + make config vars compile statically + +2003-06-11 Messju Mohr <messju@lammfellpuschen.de> + + * NEWS + libs/Smarty_Compiler.class.php: + backed out newlines patch + + * NEWS + libs/Smarty_Compiler.class.php: + removed newlines in compiled templates after closing tags + +2003-06-10 Messju Mohr <messju@lammfellpuschen.de> + + * docs/de/designers.sgml: + fixed german note on html_image and disk-access + +2003-06-10 Monte Ohrt <monte@ispi.net> + + * libs/plugins/core.parse_file_path.php: + fix bug with resource_type resolving + +2003-06-09 Monte Ohrt <monte@ispi.net> + + * docs/designers.sgml: + replace example with more practical one + +2003-06-08 Messju Mohr <messju@lammfellpuschen.de> + + * NEWS + libs/Smarty.class.php + libs/Smarty_Compiler.class.php: + added block-methods for registered objects + +2003-06-07 Messju Mohr <messju@lammfellpuschen.de> + + * docs/programmers.sgml: + fixed bug in documentation for $smarty->default_modifiers + +2003-06-06 Monte Ohrt <monte@ispi.net> + + * libs/plugins/core.parse_file_path.php: + fix problem with new default_resource_type changes + + * NEWS: + update NEWS file info + + * NEWS + libs/Smarty.class.php + libs/plugins/core.parse_file_path.php: + add default_resource_type, ignore 1 char resource names + + * NEWS + libs/Config_File.class.php: + fix bug where config file starts with hidden section + +2003-06-04 Monte Ohrt <monte@ispi.net> + + * NEWS + libs/Smarty.class.php: + -** empty log message *** + +2003-06-03 Monte Ohrt <monte@ispi.net> + + * libs/plugins/function.html_image.php: + fix example in code comments + +2003-06-03 Messju Mohr <messju@lammfellpuschen.de> + + * NEWS + libs/plugins/function.counter.php: + fixed behaviour of start=... for {counter} + +2003-06-02 Messju Mohr <messju@lammfellpuschen.de> + + * NEWS + libs/plugins/function.counter.php: + fixed assign for {counter} + +2003-05-30 Monte Ohrt <monte@ispi.net> + + * libs/plugins/core.write_cache_file.php + libs/plugins/core.write_compiled_template.php: + add discrete error checking pertaining to $cache_dir + and $compile_dir, their existance and writability + +2003-05-28 Messju Mohr <messju@lammfellpuschen.de> + + * NEWS + libs/plugins/function.html_table.php: + added params vdir, hdir and inner to html_table to allow looping over + the data in various directions + +2003-05-28 Monte Ohrt <monte@ispi.net> + + * libs/plugins/core.compile_template.php + libs/plugins/core.display_debug_console.php: + fix problem with security and debug.tpl file + +2003-05-23 Monte Ohrt <monte@ispi.net> + + * NEWS: + upd NEWS file + + * libs/Smarty_Compiler.class.php: + allow spaces in literal tags + +2003-05-22 Monte Ohrt <monte@ispi.net> + + * docs/fr/programmers.sgml: + fix special chars + +2003-05-19 Monte Ohrt <monte@ispi.net> + + * NEWS + libs/Smarty_Compiler.class.php: + speed up compiled templates, hardcode plugin filepaths instead of + recalculate at runtime + +2003-05-19 Messju Mohr <messju@lammfellpuschen.de> + + * docs/designers.sgml: + fixed example of {html_image} + + * docs/designers.sgml: + fixed typo + +2003-05-12 Messju Mohr <messju@lammfellpuschen.de> + + * libs/Smarty.class.php + libs/plugins/core.read_cache_file.php + libs/plugins/core.smarty_include.php + libs/plugins/function.config_load.php: + fixed multiple redundant occurrences for 'config' and 'template' in + $smarty->_cache_info + +2003-05-10 Messju Mohr <messju@lammfellpuschen.de> + + * libs/plugins/core.create_dir_structure.php: + refurbished create_dir_structure to use '/' internally + + * libs/plugins/core.create_dir_structure.php: + fixed windows absolute-paths in smarty_core_create_dir_structure() + + * libs/plugins/core.create_dir_structure.php: + fixed error-message + +2003-05-09 Messju Mohr <messju@lammfellpuschen.de> + + * libs/Smarty_Compiler.class.php: + fixed warning due to missing param to _execute_core_function() + + * libs/Smarty_Compiler.class.php: + fixed quoting in _compile_include_php + + * libs/Smarty_Compiler.class.php: + fixed quoting of "file"-parameter in _compile_include_tag() + +2003-05-08 Monte Ohrt <monte@ispi.net> + + * docs/programmers.sgml: + fix typo + + * libs/Smarty.class.php + libs/Smarty_Compiler.class.php + libs/plugins/core.compile_template.php + libs/plugins/core.create_dir_structure.php + libs/plugins/core.fetch_template_info.php + libs/plugins/core.get_include_path.php + libs/plugins/core.get_microtime.php + libs/plugins/core.get_php_resource.php + libs/plugins/core.is_secure.php + libs/plugins/core.is_trusted.php + libs/plugins/core.load_plugins.php + libs/plugins/core.load_resource_plugin.php + libs/plugins/core.parse_file_path.php + libs/plugins/core.process_cached_inserts.php + libs/plugins/core.read_cache_file.php + libs/plugins/core.rm_auto.php + libs/plugins/core.rmdir.php + libs/plugins/core.run_insert_handler.php + libs/plugins/core.smarty_include.php + libs/plugins/core.smarty_include_php.php + libs/plugins/core.write_cache_file.php + libs/plugins/core.write_compiled_template.php + libs/plugins/core.write_file.php + libs/plugins/function.config_load.php + libs/plugins/function.fetch.php + libs/plugins/function.html_image.php: + abstract more private functions to plugin directory + + * libs/Config_File.class.php: + only add DIRECTORY_SEPARATOR if it isn't already present + + * libs/Config_File.class.php: + fix directory separator code, use DIRECTORY_SEPARATOR + +2003-05-08 Messju Mohr <messju@lammfellpuschen.de> + + * docs/designers.sgml: + fixed example of html_checkboxes + + * NEWS + libs/Smarty.class.php: + fixed bug in _create_dir_structure() when used with + open_basedir-restriction and relative paths + + * docs/designers.sgml: + fixed example for html_radios + +2003-05-07 Monte Ohrt <monte@ispi.net> + + * libs/Smarty.class.php + libs/Smarty_Compiler.class.php + libs/plugins/core.assign_smarty_interface.php + libs/plugins/core.display_debug_console.php + libs/plugins/function.display_debug_console.php: + abstracted display_debug_console and assign_smarty_interface to plugin dir + as a test + + * libs/Smarty.class.php + libs/plugins/function.display_debug_console.php: + correct misc varnames, abstract debug console display to plugin function + + * libs/plugins/modifier.escape.php: + fix typo + +2003-05-05 Monte Ohrt <monte@ispi.net> + + * libs/Smarty_Compiler.class.php: + add % to math + + * libs/Smarty.class.php: + clean up comments, formatting + + * NEWS + libs/Smarty.class.php: + keep DIR_SEP for 3rd party compatability + + * NEWS + libs/Smarty.class.php: + remove DIR_SEP, use DIRECTORY_SEPARATOR exclusively + + * libs/Smarty_Compiler.class.php: + remove ++ and -- math operators on template vars + +2003-05-04 Messju Mohr <messju@lammfellpuschen.de> + + * libs/Smarty_Compiler.class.php: + removed unused parameter $quote from Smarty_Compiler::_parse_attrs() + + * libs/plugins/function.html_image.php: + fixed DIR_SEP in html_image-plugin + +2003-05-04 Monte Ohrt <monte@ispi.net> + + * NEWS + libs/Smarty.class.php: + rename DIR_SEP to SMARTY_DIR_SEP to avoid varname collisions + +2003-05-04 Messju Mohr <messju@lammfellpuschen.de> + + * NEWS + libs/plugins/function.html_image.php: + changed "link" to "href" in html_image. "link" is still working but + deprecated + html_image always renders an alt-tag now (default alt="") + cleaned up indentiation of function.html_image.php + +2003-05-03 Monte Ohrt <monte@ispi.net> + + * libs/debug.tpl: + fix typo + +2003-05-02 Messju Mohr <messju@lammfellpuschen.de> + + * NEWS + libs/plugins/function.counter.php: + fixed assign attribute for multiple counters + +2003-05-02 Monte Ohrt <monte@ispi.net> + + * libs/Smarty_Compiler.class.php: + allow math on negative number + + * NEWS + libs/Smarty_Compiler.class.php: + added simple math operators to variables + +2003-05-02 Messju Mohr <messju@lammfellpuschen.de> + + * docs/designers.sgml: + fixed typos + +2003-04-30 Monte Ohrt <monte@ispi.net> + + * docs/fr/appendixes.sgml + docs/fr/common.dsl + docs/fr/designers.sgml + docs/fr/getting-started.sgml + docs/fr/html-common.dsl + docs/fr/html.dsl + docs/fr/manual.sgml + docs/fr/php.dsl + docs/fr/preface.sgml + docs/fr/programmers.sgml: + add frech docs to cvs repository + +2003-04-29 Messju Mohr <messju@lammfellpuschen.de> + + * NEWS + libs/Smarty.class.php + libs/Smarty_Compiler.class.php: + reverted patch for case-insensitive tag-names + +2003-04-28 Messju Mohr <messju@lammfellpuschen.de> + + * docs/programmers.sgml: + reverted back to humerous redundancy in the docs :). although we all + know we are here to generate template-based output, and not to have + fun ;-) + + * docs/getting-started.sgml: + fixed default user and group for max os x installation + + * libs/Smarty.class.php: + made $function[2] and $function[3] options for register_resource + + * libs/Smarty.class.php: + fixed issue with object-callback when fetching a php-resource + + * NEWS + libs/Smarty.class.php: + enabled array(&$obj. 'source', 'timestamp', 'secure', 'trusted') as + callback for register_resource() + + enabled array(&$obj, 'method') as callback for + $default_template_handler_func + +2003-04-27 Messju Mohr <messju@lammfellpuschen.de> + + * docs/designers.sgml + docs/programmers.sgml: + fixed some typos, thank to mehdi + + * libs/plugins/function.counter.php: + prevent assign from overruling print-attribute in function.counter.php + + * libs/plugins/function.counter.php: + fixed problem with counter and assign + + * libs/Smarty.class.php: + fixed notice in _load_plugins() + + * NEWS + libs/Smarty.class.php + libs/Smarty_Compiler.class.php: + made plugin-names case-insensitive. this affects + compiler/block/custom-functions and modifers. + +2003-04-26 Monte Ohrt <monte@ispi.net> + + * NEWS + libs/Smarty_Compiler.class.php: + remove unnecessary close/open tags from compiled templates + +2003-04-26 Messju Mohr <messju@lammfellpuschen.de> + + * docs/designers.sgml: + added documentation for foreach.property.* + +2003-04-24 Messju Mohr <messju@lammfellpuschen.de> + + * docs/designers.sgml: + fixed example table_attr and tr_attr in html_table-example + +2003-04-21 Greg Beaver <greg@chiaraquartet.net> + + * libs/Smarty.class.php: + fixed small bug in doc comments + +2003-04-21 Messju Mohr <messju@lammfellpuschen.de> + + * NEWS + libs/plugins/function.html_image.php: + fixed errornous creation of '//' in image_path in html_image + +2003-04-21 Monte Ohrt <monte@ispi.net> + + * libs/plugins/modifier.debug_print_var.php: + fix htmlspecialchars() conflict + + * NEWS + libs/plugins/modifier.debug_print_var.php: + fix escapement of special chars in key values of debug console + + * NEWS + libs/plugins/function.config_load.php: + fixed debug timing logic for config_load + + * docs/designers.sgml: + fix example text + + +2003-04-20 Greg Beaver <cellog@php.net> + * plugins/* + Smarty.class.php + Smarty_Compiler.class.php + Config_File.class.php: + updated all doc comments to phpDocumentor format (whew!) + +2003-04-06 Messju Mohr <messju@lammfellpuschen.de> + + * libs/plugins/function.math.php: + allowed "_" in the name of variable-parameters to {math}-function + +2003-04-04 Monte Ohrt <monte@ispi.net> + + * NEWS + docs/designers.sgml + libs/Smarty_Compiler.class.php: + change backtic syntax from $`foo` to `$foo` + + * NEWS + libs/Smarty_Compiler.class.php: + recognize $foo[][] syntax in embedded quotes without backticks + +2003-04-03 Messju Mohr <messju@lammfellpuschen.de> + + * NEWS + libs/Smarty_Compiler.class.php: + name=123 is passed as an integer (not a string) to plugins now + +2003-04-01 Messju Mohr <messju@lammfellpuschen.de> + + * libs/Smarty.class.php + libs/Smarty_Compiler.class.php: + added CVS $Id: ChangeLog 234145 2007-04-19 20:20:57Z ashnazg $ + +2003-03-31 Messju Mohr <messju@lammfellpuschen.de> + + * libs/Smarty.class.php: + added missing compile_id inside Smarty_Compiler + + * libs/Smarty_Compiler.class.php: + fixed flaw when generating an error for missing postfilter + +2003-03-31 Monte Ohrt <monte@ispi.net> + + * docs/getting-started.sgml + docs/programmers.sgml: + fix typos + +2003-03-27 Messju Mohr <messju@lammfellpuschen.de> + + * NEWS + libs/plugins/modifier.debug_print_var.php: + $length is now propagated to sub-values in debug_print_var + +2003-03-26 Monte Ohrt <monte@ispi.net> + + * NEWS: + update header + + * RELEASE_NOTES: + commit changes to release notes + + * (Smarty_2_5_0_RC2) + libs/Config_File.class.php + libs/Smarty.class.php + libs/Smarty_Compiler.class.php: + committing RC2 + +2003-03-24 Messju Mohr <messju@lammfellpuschen.de> + + * NEWS + libs/Smarty.class.php: + made clear_cache() ignore compile_id when clearing cache_groups + + * libs/plugins/function.popup.php: + made onmouseout XHTML-compatible in function.popup.php + +2003-03-21 Messju Mohr <messju@lammfellpuschen.de> + + * NEWS + libs/Smarty.class.php: + applied new var-names to fetch() + + * NEWS + libs/Smarty.class.php: + renamed $localvars to $_localvars in cache-file-handling-functions, + added _get_auto_id()-function + +2003-03-21 Monte Ohrt <monte@ispi.net> + + * libs/plugins/function.mailto.php + libs/plugins/function.popup.php: + update functions for XHTML compatability + +2003-03-21 Messju Mohr <messju@lammfellpuschen.de> + + * libs/Smarty.class.php: + fixed wrong $auto_id in _read_cache_file() + + * NEWS + libs/Smarty.class.php: + swapped compile_id and cache_id in read_cache_file and write_cache_file + + * libs/Smarty.class.php: + reverted patch for ignoring compile-id back to -r1.364, due to problems + + * NEWS + libs/plugins/function.html_checkboxes.php + libs/plugins/function.html_radios.php: + html_radios and html_checkboxes accept "selected" instead of "checked" + optionally now + + * NEWS + libs/Smarty.class.php: + swapped compile_id and cache_id for cache-file-handling again + +2003-03-20 Monte Ohrt <monte@ispi.net> + + * libs/Smarty_Compiler.class.php: + fix notice when no parameter is passed to default + +2003-03-20 Messju Mohr <messju@lammfellpuschen.de> + + * NEWS + libs/Smarty.class.php: + removed notice of undefined var in _rm_auto() + +2003-03-19 Monte Ohrt <monte@ispi.net> + + * libs/plugins/function.html_checkboxes.php + libs/plugins/function.html_radios.php + libs/plugins/function.html_table.php: + fix a few error messages, follow consistancy format plugin_name: errormsg + + * libs/plugins/function.html_radios.php: + update error messages + + * NEWS + libs/plugins/function.html_radios.php: + add a warning when an array is passed as the 'checked' value of html_radios + +2003-03-19 Messju Mohr <messju@lammfellpuschen.de> + + * NEWS + libs/Smarty_Compiler.class.php: + fixed errormessage in _compile_smarty_ref() + + * NEWS + docs/designers.sgml: + updated docs for html_image + +2003-03-18 Messju Mohr <messju@lammfellpuschen.de> + + * NEWS + libs/Smarty.class.php: + cleaned up calls to readdir() + + * libs/plugins/function.html_options.php: + fixed label for optgroup in html_options + +2003-03-18 Monte Ohrt <monte@ispi.net> + + * NEWS + libs/Smarty_Compiler.class.php: + fix (newly introduced) bug with passing multiple modifiers to a parameter + +2003-03-18 Messju Mohr <messju@lammfellpuschen.de> + + * NEWS + docs/designers.sgml: + updated docs for html_checkboxes, html_options and html_radios + + * libs/plugins/function.html_options.php: + fixed wrong default-"name" in function.html_options.php + + * NEWS + libs/plugins/function.html_checkboxes.php + libs/plugins/function.html_radios.php: + renamed "checkbox" and "radios" to "options" in {html_checkboxes} and + {html_radios} + + * libs/plugins/outputfilter.trimwhitespace.php: + tried to optimize re-replacement in outputfilter.trimwhitespace.php a + little + + * libs/plugins/outputfilter.trimwhitespace.php: + fixed greedy str_replace in outputfilter.trimwhitespace.php + + * NEWS + libs/plugins/function.html_checkboxes.php + libs/plugins/function.html_options.php + libs/plugins/function.html_radios.php: + html_options, html_checkboxes and html_radios now pass-thru all unknown + paramters + +2003-03-17 Messju Mohr <messju@lammfellpuschen.de> + + * NEWS + libs/plugins/function.html_options.php: + html_options passthru all unknown paramters now + +2003-03-17 Monte Ohrt <monte@ispi.net> + + * NEWS + libs/plugins/function.html_image.php: + Fix link bug in html_image function, also make output XHTML compatible + + * libs/Smarty_Compiler.class.php: + fix issue of embedded var and escaped double quotes + +2003-03-15 Monte Ohrt <monte@ispi.net> + + * NEWS + libs/Smarty_Compiler.class.php: + back out "@" logic, apply only to default modifier special case + + * libs/Smarty_Compiler.class.php: + fix @ logic, only use upon an echo + + * NEWS + libs/Smarty_Compiler.class.php: + append "@" to template var echoes to supress possible notices + + * NEWS + libs/Smarty_Compiler.class.php: + append "@" to _run_mod_handler to supress warnings + +2003-03-14 Monte Ohrt <monte@ispi.net> + + * NEWS + libs/Smarty_Compiler.class.php: + fix problem with escaped double quotes + + * NEWS + libs/plugins/function.html_radios.php: + fixed html_options to not return an array + +2003-03-12 Messju Mohr <messju@lammfellpuschen.de> + + * NEWS + libs/plugins/modifier.truncate.php: + fixed length in modifier.truncate.php + + * NEWS + libs/plugins/outputfilter.trimwhitespace.php: + fixed handling of '$'-signs in trimwhitespace outputfilter (messju) + +2003-03-12 Monte Ohrt <monte@ispi.net> + + * docs/programmers.sgml: + update technical explanation of assign_by_ref and append_by_ref + +2003-03-11 Monte Ohrt <monte@ispi.net> + + * NEWS + libs/Smarty.class.php: + fix config file recompiling code + +2003-03-07 Monte Ohrt <monte@ispi.net> + + * libs/plugins/function.html_image.php: + change E_USER_ERROR to E_USER_NOTICE + + * libs/plugins/function.html_image.php: + suppress warning in html_image + + * NEWS + libs/plugins/function.html_image.php: + update changes to html_image + +2003-03-06 Monte Ohrt <monte@ispi.net> + + * docs/designers.sgml + docs/de/appendixes.sgml + docs/de/common.dsl + docs/de/designers.sgml + docs/de/getting-started.sgml + docs/de/html-common.dsl + docs/de/html.dsl + docs/de/manual.sgml + docs/de/preface.sgml + docs/de/programmers.sgml: + add german docs to dist + + * NEWS: + update news file + + * libs/plugins/function.html_image.php: + fix width/height parameter index + + * NEWS + libs/Smarty.class.php: + get rid of unsetting name and script attributes to insert tags + +2003-03-05 Monte Ohrt <monte@ispi.net> + + * NEWS + RELEASE_NOTES: + update NEWS file + + * libs/plugins/modifier.string_format.php: + fix argument order, erroneously swapped a while back + + * (Smarty_2_5_0_RC1) + NEWS + README + RELEASE_NOTES + libs/Config_File.class.php + libs/Smarty.class.php + libs/Smarty_Compiler.class.php: + commit final changes for 2.5.0-RC1 + +2003-03-04 Monte Ohrt <monte@ispi.net> + + * docs/programmers.sgml: + remove $show_info_header and $show_info_include property vars from docs + +2003-03-03 Monte Ohrt <monte@ispi.net> + + * NEWS + libs/plugins/function.popup.php: + fixed PHP notice + +2003-02-28 Monte Ohrt <monte@ispi.net> + + * libs/Smarty_Compiler.class.php: + simplify smarty.const.foo and smarty.const.$foo logic + + * libs/Smarty_Compiler.class.php: + only allow $foo syntax in embedded quotes, unless escaped with backticks + then allow any dollar var + + * NEWS + libs/Smarty_Compiler.class.php: + fix "once" var compiling to work with new attr compiling methods for + include_php + + * FAQ + NEWS + README + docs/designers.sgml + docs/getting-started.sgml + libs/Smarty_Compiler.class.php + libs/plugins/function.html_checkboxes.php + libs/plugins/function.html_image.php + libs/plugins/function.html_options.php + libs/plugins/function.html_radios.php + libs/plugins/function.html_select_date.php + libs/plugins/function.html_select_time.php + libs/plugins/function.html_table.php: + fix $smarty.const.foo compiling, clean up double quoted strings, + allow full dollar var syntax in quotes again + +2003-02-27 Monte Ohrt <monte@ispi.net> + + * docs/designers.sgml + docs/programmers.sgml + libs/Smarty_Compiler.class.php: + update docs, fix smarty var compiling, allow any $smarty.*.$foo syntax, + add $`foobar` for embedded variables + + * libs/plugins/function.html_image.php: + update functionality + +2003-02-26 Monte Ohrt <monte@ispi.net> + + * NEWS + libs/plugins/modifier.nl2br.php: + add nl2br modifier + + * libs/plugins/function.html_image.php: + add link parameter + +2003-02-24 Monte Ohrt <monte@ispi.net> + + * libs/Smarty.class.php + libs/plugins/function.html_image.php: + fix rename problem in windows, unlink first + + * libs/plugins/function.html_checkboxes.php + libs/plugins/function.html_image.php + libs/plugins/function.html_options.php + libs/plugins/function.html_radios.php + libs/plugins/shared.escape_special_chars.php: + update functions with separate escape_special_chars routine + + * NEWS + libs/plugins/function.html_checkboxes.php + libs/plugins/function.html_radios.php: + commit checkboxes, update radios + + * NEWS + libs/Smarty.class.php + libs/plugins/function.html_image.php: + fix bug with get_registered_object + + * NEWS + libs/plugins/modifier.cat.php: + added cat modifier to distribution + + * NEWS + libs/Smarty_Compiler.class.php: + added << >> <> support to IF statements + + * libs/plugins/function.html_radios.php: + apply patch to initial html_radios function + + * NEWS + libs/Smarty.class.php: + fix _assign_smarty_interface to not overwrite keys other than 'request' + + * NEWS + libs/plugins/function.html_radios.php: + added html_radios to distribution + + * NEWS + libs/plugins/modifier.string_format.php: + fixed arg order of string_format + + * NEWS + libs/Smarty.class.php: + use tmp file for file writes, avoid race condition + + * NEWS + libs/Smarty_Compiler.class.php: + add $smarty.config.foo var, handle embedded smarty var correctly + + * NEWS + libs/plugins/function.fetch.php: + silence warnings in fetch plugin + +2003-02-21 Monte Ohrt <monte@ispi.net> + + * INSTALL: + update wording + + * INSTALL: + update install instructions + + * AUTHORS + BUGS + CREDITS + QUICKSTART + README + RESOURCES + TESTIMONIALS: + remove some files already in docs or elsewhere + + * demo/index.php: + add templates_c to repository + + * index.php: + move demo files to demo directory + + * Config_File.class.php + Smarty.class.php + Smarty_Compiler.class.php + debug.tpl: + moved lib files under libs directory + +2003-02-20 Monte Ohrt <monte@ispi.net> + + * NEWS + Smarty.class.php: + add get_config_vars() method, update get_template_vars() functionality + + * NEWS + Smarty.class.php: + fix minor logic in _fetch_template_info() + + * NEWS + Smarty.class.php: + support merging appended vars + + * NEWS + Smarty.class.php: + fix cache groups behavior with compile_id set + +2003-02-19 Monte Ohrt <monte@ispi.net> + + * Smarty.class.php: + back out third parameter, extend functionality of append + + * NEWS + Smarty_Compiler.class.php: + update imbedded vars, allow special $smarty vars + + * plugins/function.html_table.php: + add plugin html_table + + * NEWS + Smarty.class.php: + support appending key=>val pairs + + * NEWS + Smarty_Compiler.class.php: + change embedded variable logic to only recognize $foo and $foo[0][bar] + syntax + + * NEWS + Smarty_Compiler.class.php: + allow null as function attribute value + +2003-02-18 Monte Ohrt <monte@ispi.net> + + * NEWS + Smarty.class.php + Smarty_Compiler.class.php: + support foo->bar[index] syntax + + * Smarty_Compiler.class.php: + allow $foo->bar[0] syntax + +2003-02-17 Monte Ohrt <monte@ispi.net> + + * plugins/modifier.escape.php: + fix syntax error from previous commit + + * NEWS + Smarty.class.php: + add error msgs to get_registered_object + + * Smarty.class.php: + add function for getting reference to registered object + + * Smarty_Compiler.class.php: + back out patches for object and objref calls on $smarty var + + * NEWS + Smarty_Compiler.class.php: + treat unrecognized param attribute syntax as a string + + * NEWS + Smarty_Compiler.class.php: + support $smarty.const.$foo syntax + + * NEWS + debug.tpl + plugins/modifier.count_words.php + plugins/modifier.escape.php: + fix E_NOTICE messages + + * NEWS + Smarty.class.php + Smarty_Compiler.class.php: + add @ and === to if tokens, few param cleanups + +2003-02-16 Greg Beaver <greg@chiaraquartet.net> + + * ChangeLog + Smarty.class.php + Smarty_Compiler.class.php: + many more phpdoc comment upgrades + +2003-02-15 Greg Beaver <cellog@sourceforge.net> + * Smarty.class.php + Smarty_Compiler.class.php + continue cleaning of phpdoc comments. All that is needed is the + addition of @return tags and perhaps a bit more verbose comments + and they are finished. + +2003-02-14 Monte Ohrt <monte@ispi.net> + + * NEWS + Smarty.class.php: + enable config_load error messages + + * NEWS + plugins/function.html_options.php: + fix html_options to not escape already escaped entities + + * NEWS + Smarty.class.php: + send Last-Modified header on cache creation, misc tab/spacing cleanup + +2003-02-13 Monte Ohrt <monte@ispi.net> + + * Smarty_Compiler.class.php + docs/designers.sgml: + allow dash in plain text + + * NEWS + Smarty_Compiler.class.php: + check strict syntax of function attributes + +2003-02-12 Monte Ohrt <monte@ispi.net> + + * NEWS + Smarty_Compiler.class.php: + dropped support for modifiers on object parameters, + added support for objects as modifier parameters + + * NEWS + Smarty_Compiler.class.php + docs/designers.sgml: + fix bug with decimal numbers in if statements, misc doc updates + +2003-02-11 Monte Ohrt <monte@ispi.net> + + * (Smarty_2_4_2) + Config_File.class.php + NEWS + README + RELEASE_NOTES + Smarty.class.php + Smarty_Compiler.class.php: + update version numbers + +2003-02-10 Monte Ohrt <monte@ispi.net> + + * NEWS + Smarty_Compiler.class.php: + add support for $foo->$bar syntax + + * NEWS: + update NEWS file + + * NEWS + Smarty_Compiler.class.php: + support full var syntax in quoted text, fix problem with const var access, + clean up some more regex code, fix object problem with no properties + +2003-02-06 Monte Ohrt <monte@ispi.net> + + * (Smarty_2_4_1) + Config_File.class.php + NEWS + README + RELEASE_NOTES + Smarty.class.php + Smarty_Compiler.class.php: + committed 2.4.1 changes + + * NEWS + Smarty_Compiler.class.php: + ignore case in IF statements + +2003-02-05 Monte Ohrt <monte@ispi.net> + + * NEWS + Smarty_Compiler.class.php: + treat undefined constants as null + + * NEWS + Smarty.class.php: + fix problem with inserts and nested fetches + + * Smarty_Compiler.class.php: + fix "if" regex for math tokens + + * NEWS + Smarty.class.php + Smarty_Compiler.class.php + docs/getting-started.sgml: + added support for extracting params to include_php + +2003-02-04 Monte Ohrt <monte@ispi.net> + + * RELEASE_NOTES: + reformat text + +2003-02-03 Monte Ohrt <monte@ispi.net> + + * NEWS: + update news file + +2003-02-03 Greg Beaver <greg@chiaraquartet.net> + + * ChangeLog + Smarty.class.php: + begin fixing phpdoc comments in Smarty.class.php + + * ChangeLog + Config_File.class.php: + fixed phpdoc comments + +2003-02-03 Monte Ohrt <monte@ispi.net> + + * Smarty_Compiler.class.php: + allow $foo->bar[$x].foo syntax + + * Smarty_Compiler.class.php + index.php + configs/test.conf + templates/index.tpl: + fix accidental commit + + * index.php + configs/test.conf + templates/index.tpl: + allow $foo->bar[$j].blah type of syntax + +2003-02-02 Greg Beaver <cellog@php.net> + + * Smarty.class.php + begin fixing of phpdoc comments + + * Config_File.class.php + fix phpdoc comments, add phpDocumentor docblock templates + +2003-02-02 Monte Ohrt <monte@ispi.net> + + * Smarty.class.php + docs/html.dsl + docs/php.dsl: + fix version number + + * (Smarty_2_4_0) + Config_File.class.php + NEWS + README + RELEASE_NOTES + Smarty.class.php + Smarty_Compiler.class.php + docs/appendixes.sgml + docs/designers.sgml + docs/programmers.sgml: + update Smarty version numbers + +2003-01-30 Monte Ohrt <monte@ispi.net> + + * NEWS + Smarty_Compiler.class.php + TODO: + fix order of php tag comparisons + + * NEWS + Smarty_Compiler.class.php: + fix known php tag handling problems + +2003-01-29 Monte Ohrt <monte@ispi.net> + + * Smarty.class.php + Smarty_Compiler.class.php: + change comments to phpdoc style + +2003-01-28 Monte Ohrt <monte@ispi.net> + + * Smarty.class.php + docs/programmers.sgml: + make separate var for compiler file + + * plugins/function.fetch.php: + fix error call + +2003-01-25 Monte Ohrt <monte@ispi.net> + + * Smarty.class.php + Smarty_Compiler.class.php: + add support for restriction to registered methods + + * plugins/outputfilter.trimwhitespace.php: + update with textarea support + +2003-01-24 Monte Ohrt <monte@ispi.net> + + * Smarty_Compiler.class.php: + fix compiling problem with {foreach} tags + + * Smarty.class.php + Smarty_Compiler.class.php: + put objects in own array, add object param format support, change + object syntax from foo.bar to foo->bar + +2003-01-23 Monte Ohrt <monte@ispi.net> + + * NEWS + Smarty.class.php + Smarty_Compiler.class.php: + add support for object registration + +2003-01-22 Monte Ohrt <monte@ispi.net> + + * Smarty.class.php: + add file & line number of calling error to error message + +2003-01-21 Monte Ohrt <monte@ispi.net> + + * Smarty_Compiler.class.php: + put php style object syntax back in + +2003-01-20 Monte Ohrt <monte@ispi.net> + + * Smarty.class.php: + move security settings to fetch function for template_dir + + * NEWS + Smarty.class.php: + fix debug template and security, add template_dir to secure_dir at runtime + +2003-01-17 Monte Ohrt <monte@ispi.net> + + * NEWS + Smarty.class.php + Smarty_Compiler.class.php: + added new object support without new template syntax + +2003-01-15 Monte Ohrt <monte@ispi.net> + + * NEWS + Smarty.class.php + Smarty_Compiler.class.php: + fix if statement syntax for negative integers, fix issue with directories + named '0' + +2003-01-08 Monte Ohrt <monte@ispi.net> + + * Smarty.class.php + plugins/function.counter.php + plugins/function.cycle.php + plugins/function.debug.php + plugins/function.eval.php + plugins/function.fetch.php + plugins/function.html_options.php + plugins/function.html_select_date.php + plugins/function.html_select_time.php + plugins/function.mailto.php + plugins/function.math.php + plugins/function.popup.php + plugins/function.popup_init.php: + update plugins to return values instead of echo, fix config file cache + to include global config variables in cache file + + * Smarty_Compiler.class.php: + fix bug with >= tests in if statements, comment out full object support + +2003-01-06 Monte Ohrt <monte@ispi.net> + + * NEWS + docs/html.dsl + plugins/modifier.escape.php: + add javascript escape parameter to escape modifier + +2003-01-02 Monte Ohrt <monte@ispi.net> + + * templates/header.tpl: + move the title into head where it should be + +2002-12-24 Monte Ohrt <monte@ispi.net> + + * Smarty_Compiler.class.php: + added correct line numbers to smarty syntax error messages + + * docs/programmers.sgml: + update append documentation, make more clear on its function + + * Smarty_Compiler.class.php: + fix modifier matching regexp + +2002-12-23 Monte Ohrt <monte@ispi.net> + + * Smarty_Compiler.class.php: + support nested function calls in IF statements + +2002-12-20 Monte Ohrt <monte@ispi.net> + + * Smarty_Compiler.class.php: + few more fixes, spaces around function parameters + + * Smarty_Compiler.class.php: + fix misc syntax issues with {if} tags + +2002-12-20 Monte Ohrt <monte@ispi.net> + + * Smarty_Compiler.class.php: + fix misc syntax issues with {if} tags + +2002-12-19 Monte Ohrt <monte@ispi.net> + + * Smarty_Compiler.class.php: + commit updates, passes all smoke tests + + * NEWS: + update NEWS file + + * Smarty_Compiler.class.php: + fixed literal string not in quotes as parameters + + * NEWS + Smarty_Compiler.class.php: + fix misc syntax issues, add ability to pass modifiers to functions + +2002-12-18 Monte Ohrt <monte@ispi.net> + + * NEWS: + update NEWS + + * NEWS + Smarty.class.php + Smarty_Compiler.class.php: + update compiler code, clean up regex, add new syntax features + +2002-12-16 Monte Ohrt <monte@ispi.net> + + * NEWS: + update NEWS file + + * Smarty_Compiler.class.php: + commit updates for objects + +2002-12-14 Monte Ohrt <monte@ispi.net> + + * Smarty.class.php + Smarty_Compiler.class.php: + fix bug with compiling config files with caching on + +2002-12-13 Monte Ohrt <monte@ispi.net> + + * Smarty_Compiler.class.php: + fix problem with matching single quoted strings + + * Smarty_Compiler.class.php: + update embedded variable logic, get rid of ."" at end of output + + * NEWS + docs/designers.sgml + plugins/function.html_select_date.php: + add day_value_format to html_select_date + +2002-12-12 Monte Ohrt <monte@ispi.net> + + * plugins/modifier.debug_print_var.php: + fix bug, double escaped values in display + + * Smarty.class.php: + move debug test back into fetch() + + * NEWS + Smarty.class.php + Smarty_Compiler.class.php + plugins/outputfilter.trimwhitespace.php: + assigned vars are no longer in global name space, few debug cleanups + +2002-12-11 Monte Ohrt <monte@ispi.net> + + * plugins/function.popup.php: + fix error in newline code + + * plugins/function.popup.php: + fix popup to allow newlines in text data + +2002-12-10 Monte Ohrt <monte@ispi.net> + + * Smarty.class.php: + fix plugin error logic + + * docs/designers.sgml + docs/programmers.sgml: + edit examples, make more verbose + + * NEWS + plugins/function.html_options.php: + escape html entities in the option values and output + + * NEWS + plugins/function.html_options.php: + fixed bug with label of html_options + +2002-12-09 Monte Ohrt <monte@ispi.net> + + * Smarty.class.php: + add support for var_export() + + * Config_File.class.php + Smarty.class.php: + clean up code, respect force_compile and compile_check flags + + * NEWS + Smarty.class.php + Smarty_Compiler.class.php + docs/designers.sgml + plugins/function.mailto.php: + add caching feature to config loading, document update, add mailto plugin + +2002-12-08 Monte Ohrt <monte@ispi.net> + + * plugins/function.fetch.php: + fix query part of URL + +2002-12-05 Monte Ohrt <monte@ispi.net> + + * docs/designers.sgml: + fix typos + +2002-11-22 Monte Ohrt <monte@ispi.net> + + * Smarty_Compiler.class.php: + patch for warning message + +2002-11-21 Monte Ohrt <monte@ispi.net> + + * RELEASE_NOTES + Smarty.class.php: + get rid of testing for a set value with assign function, just set to + whatever is passed into the template + + * docs/programmers.sgml: + fix typo + +2002-11-19 Monte Ohrt <monte@ispi.net> + + * Config_File.class.php + NEWS + README + RELEASE_NOTES + Smarty.class.php + Smarty_Compiler.class.php: + commit changes, ready for 2.3.1 release + +2002-11-01 Monte Ohrt <monte@ispi.net> + + * plugins/function.html_options.php: + added label attribute to all option outputs, cover w3c spec. + + * NEWS: update NEWS file + + * docs/designers.sgml: update docs for optgroup output + + * plugins/function.html_options.php: + make html_options work with optgroup, make func modular and recursive. + +2002-10-29 Monte Ohrt <monte@ispi.net> + + * NEWS + Smarty.class.php: set mtime on compile files so they match source files + +2002-10-18 Monte Ohrt <monte@ispi.net> + + * NEWS + Smarty.class.php: added proper support for open_basedir setting + + * docs/designers.sgml: clear up docs on index, iteration and rownum + +2002-10-16 Monte Ohrt <monte@ispi.net> + + * plugins/modifier.default.php: fix warning message in default modifier + +2002-09-25 Monte Ohrt <monte@ispi.net> + + * docs/designers.sgml + plugins/modifier.strip.php + NEWS: added strip variable modifier + +2002-09-24 Andrei Zmievski <andrei@php.net> + + * NEWS: *** empty log message *** + + * Smarty_Compiler.class.php: + Fix to be able to use $smarty.x variables as arrays. + +2002-09-23 Monte Ohrt <monte@ispi.net> + + * Config_File.class.php: + add support for mac/dos formatted config files (fix newlines) + + * docs/programmers.sgml: add optional tags to clear_cache parameters + + * docs/designers.sgml: + fix error with include_php description, add $this to description + +2002-09-20 Monte Ohrt <monte@ispi.net> + + * NEWS + docs/getting-started.sgml: fixed errors with example setup docs + +2002-09-16 Monte Ohrt <monte@ispi.net> + + * plugins/block.textformat.php + docs/designers.sgml + NEWS: add textformat block function + +2002-09-10 Monte Ohrt <monte@ispi.net> + + * docs/designers.sgml: + add assign attribute to cycle function documentation + + * docs/designers.sgml + docs/programmers.sgml: fix typos + +2002-09-09 Monte Ohrt <monte@ispi.net> + + * plugins/function.debug.php + templates/header.tpl: + fix header in debug template, fix typo in header.tpl example + +2002-08-15 mohrt <mohrt@pb1.pair.com> + + * docs/programmers.sgml: fix typos + +2002-08-08 mohrt <mohrt@pb1.pair.com> + + * RELEASE_NOTES + Smarty.class.php: + supress warnings from unlink() and is_dir(), let error handler deal with it + +2002-08-07 mohrt <mohrt@pb1.pair.com> + + * docs/appendixes.sgml + docs/designers.sgml + docs/programmers.sgml + Config_File.class.php + NEWS + README + RELEASE_NOTES + Smarty.class.php + Smarty_Compiler.class.php: update files with new version numbers + +2002-08-02 mohrt <mohrt@pb1.pair.com> + + * NEWS: update NEWS file with credits + + * NEWS + Smarty.class.php: added assign_by_ref() and append_by_ref() functions + +2002-08-01 mohrt <mohrt@pb1.pair.com> + + * TODO + NEWS + Smarty.class.php: + changed default warning type for plugin errors from E_USER_WARNING to E_USER_ERROR + +2002-07-29 mohrt <mohrt@pb1.pair.com> + + * plugins/function.html_select_time.php + docs/designers.sgml + NEWS: added paramters to html_select_time plugin + +2002-07-25 Andrei Zmievski <andrei@pb1.pair.com> + + * TODO: *** empty log message *** + +2002-07-24 mohrt <mohrt@pb1.pair.com> + + * QUICKSTART: update QUICKSTART guide + + * NEWS + debug.tpl + plugins/modifier.debug_print_var.php: + update debug console to show objects, fix warning in debug.tpl + +2002-07-23 mohrt <mohrt@pb1.pair.com> + + * docs/programmers.sgml: fix load_filter examples + + * Config_File.class.php + NEWS: fix error when there are no sections in config file + +2002-07-19 mohrt <mohrt@pb1.pair.com> + + * docs/getting-started.sgml: fix error in install guide + +2002-07-18 mohrt <mohrt@pb1.pair.com> + + * Smarty_Compiler.class.php: + correct the expression match for smarty:nodefaults + +2002-07-17 mohrt <mohrt@pb1.pair.com> + + * Smarty_Compiler.class.php: fix default modifier to work with config vars + + * Smarty_Compiler.class.php: got args to strstr backwards... + + * NEWS + Smarty.class.php + Smarty_Compiler.class.php: + change default modifiers to array instead of string + + * Smarty_Compiler.class.php + docs/designers.sgml + Smarty.class.php: add default modifier logic, minor doc updates + + * NEWS + Smarty.class.php + plugins/function.popup_init.php: + make popup_init xhtml compliant, minor variable name changes for consistancy + +2002-07-16 mohrt <mohrt@pb1.pair.com> + + * NEWS: update NEWS file + + * plugins/function.debug.php + Smarty.class.php + debug.tpl + NEWS: + fix problem with filenames on windows, add ability to supply expire time in seconds when clearing cache or compiled files + +2002-07-15 mohrt <mohrt@pb1.pair.com> + + * Smarty.class.php: + fixed problem with insert tags when loading function from script attribute + and caching enabled (Monte) + +2002-07-14 mohrt <mohrt@pb1.pair.com> + + * NEWS + Smarty.class.php: fix bug with debug_tpl file path for Windows + +2002-07-12 Monte Ohrt <monte@ispi.net> + + * Smarty.class.php: fix append function with array/string issue + +2002-07-11 Monte Ohrt <monte@ispi.net> + + * RELEASE_NOTES: update release notes + + * NEWS + README + RELEASE_NOTES + Smarty.class.php + Smarty_Compiler.class.php + Config_File.class.php: update files to 2.2.0 tags, get ready for release + +2002-07-09 Monte Ohrt <monte@ispi.net> + + * NEWS + Smarty.class.php: make debug.tpl work with any delimiter + + * NEWS + Smarty.class.php: + change tests in append and assign to != '' instead of empty(), which is more accurate + +2002-07-08 Monte Ohrt <monte@ispi.net> + + * docs/designers.sgml: minor doc update + + * Smarty.class.php: + cast var as an array, simplify and get rid of PHP warning messages + +2002-07-03 Monte Ohrt <monte@ispi.net> + + * Smarty.class.php: one more N + + * Smarty.class.php: + prepend "N" to filenames to avoid possible OS issues with dir names starting with "-" + + * Smarty.class.php: only set $debug_tpl in constructor if empty + + * Smarty.class.php + docs/designers.sgml + docs/getting-started.sgml + docs/programmers.sgml: + make use_sub_dirs go back to crc32 for subdir separation + +2002-06-29 Monte Ohrt <monte@ispi.net> + + * plugins/function.eval.php: do nothing if $val is empty + + * TODO + plugins/function.eval.php + plugins/function.popup_init.php: + add zindex to popup init, fix error message for eval. + +2002-06-27 Monte Ohrt <monte@ispi.net> + + * Smarty.class.php: + only loop through relative paths for PHP include_path, remove $_relative variable + + * Smarty_Compiler.class.php: added {$smarty.version} variable + +2002-06-26 Monte Ohrt <monte@ispi.net> + + * docs/appendixes.sgml + docs/designers.sgml + docs/getting-started.sgml + docs/programmers.sgml + Smarty.class.php: + update plugin loading logic, look in SMARTY_DIR, then cwd. If all fail, then retry all with include_path + + * templates/header.tpl + Smarty.class.php: update get_include_path, get _path_array only once + + * Smarty.class.php: fix get_include_path function for windows + + * Smarty.class.php: update plugin search logic + + * Smarty.class.php: only search include_path if relative path + + * plugins/function.html_select_date.php + plugins/function.html_select_time.php + plugins/modifier.date_format.php + Smarty_Compiler.class.php + NEWS + Smarty.class.php: allow plugins_dir to be an array of directories + +2002-06-25 Monte Ohrt <monte@ispi.net> + + * docs/programmers.sgml + docs/getting-started.sgml: update installation docs + + * debug.tpl + docs/getting-started.sgml + templates/debug.tpl + NEWS + Smarty.class.php: move debug.tpl to SMARTY_DIR, add to constructor + +2002-06-24 Monte Ohrt <monte@ispi.net> + + * plugins/function.assign_debug_info.php + NEWS: fixed warning message in function.assign_debug_info + + * Smarty.class.php: update include_path fixes + + * NEWS: + fixed $template_dir, $compile_dir, $cache_dir, $config_dir to respect include_path + +2002-06-23 Monte Ohrt <monte@ispi.net> + + * plugins/shared.make_timestamp.php: + update timestamp plugin to work when passed a timestamp + +2002-06-19 Monte Ohrt <monte@ispi.net> + + * NEWS: update NEWS file + + * plugins/modifier.date_format.php + docs/designers.sgml: + update date_format, allow optional 2nd paramater as default date if passed date is empty. update docs. + + * plugins/modifier.date_format.php: + fix date_format modifier, return nothing if given empty string + +2002-06-18 Monte Ohrt <monte@ispi.net> + + * NEWS + plugins/function.cycle.php: + gave $reset a default value in cycle function + + * plugins/function.html_select_date.php + plugins/shared.make_timestamp.php + NEWS: + corrected warnings in html_select_time function, made make timestamp always return a timestamp + +2002-06-17 Monte Ohrt <monte@ispi.net> + + * Smarty.class.php: swapped around cache_id and compile_id order + +2002-06-14 Monte Ohrt <monte@ispi.net> + + * docs/programmers.sgml + plugins/function.popup_init.php + Smarty.class.php: + change directory delimiter to "^" for cache and compile files + +2002-06-13 Andrei Zmievski <andrei@php.net> + + * TODO: done. + + * Smarty_Compiler.class.php: + Optimize the calculation of section 'total' property. + +2002-06-11 Monte Ohrt <monte@ispi.net> + + * NEWS + Smarty.class.php: + added support for subdir exclusion, deletion by full or partial cache_id and compile_id, change file format to urlencoded values instead of crc32 + +2002-06-07 Monte Ohrt <monte@ispi.net> + + * Smarty.class.php: fix bug with last_modified_check code + + * NEWS + Smarty.class.php: + updated $GLOBALS refererence for HTTP_IF_MODIFIED_SINCE + +2002-06-06 Monte Ohrt <monte@ispi.net> + + * docs/designers.sgml + overlib.js: + remove overlib.js file from distribution, update plugin and docs + +2002-06-05 Monte Ohrt <monte@ispi.net> + + * docs/designers.sgml + NEWS + Smarty.class.php: fix 304 Not Modified, don't send content + +2002-06-03 Monte Ohrt <monte@ispi.net> + + * plugins/function.cycle.php: update version number + + * plugins/function.cycle.php + NEWS: + fixed cycle function to respect delimiter setting after initial setting + + * Smarty.class.php + NEWS: + update $GLOBALS references to work properly with track_globals settings + + * plugins/function.math.php: fixed bug with call $assign + + * docs/appendixes.sgml + docs/designers.sgml + plugins/function.html_options.php + plugins/function.html_select_time.php + NEWS + Smarty.class.php + Smarty_Compiler.class.php: + optimized for loops with count() function calls + +2002-06-01 Andrei Zmievski <andrei@php.net> + + * TODO: *** empty log message *** + +2002-05-21 Monte Ohrt <monte@ispi.net> + + * NEWS: update NEWS file + + * plugins/function.html_select_date.php + RESOURCES + docs/designers.sgml + Config_File.class.php: + update html_select_date with month_value_format attribute for controlling the format of the month values. + +2002-05-17 Andrei Zmievski <andrei@php.net> + + * NEWS + Smarty_Compiler.class.php: + Made it possible to use simple variables inside [] for indexing. + +2002-05-16 Monte Ohrt <monte@ispi.net> + + * docs/designers.sgml + docs/getting-started.sgml + NEWS + Smarty.class.php + Smarty_Compiler.class.php + TESTIMONIALS: add "once" attribute to php_include, update docs + +2002-05-09 Andrei Zmievski <andrei@ispi.net> + + * NEWS + TODO: *** empty log message *** + +2002-05-07 Monte Ohrt <monte@ispi.net> + + * plugins/function.cycle.php: remove \n from cycle function + + * docs/designers.sgml + plugins/function.cycle.php + README + RELEASE_NOTES + Smarty.class.php + Smarty_Compiler.class.php + NEWS: + update cycle function to handle array as input, update files to 2.1.1 + +2002-05-06 Monte Ohrt <monte@ispi.net> + + * plugins/function.fetch.php: + update fetch function with more error checking + +2002-05-03 Monte Ohrt <monte@ispi.net> + + * docs/designers.sgml + plugins/function.counter.php: + update counter to use name instead of id (id still works though) + + * plugins/function.cycle.php + docs/designers.sgml: rename id to name for cycle function + + * plugins/function.cycle.php: + update cycle function to allow blank values parameter after initialized + + * plugins/function.cycle.php: fix syntax error + +2002-05-02 Monte Ohrt <monte@ispi.net> + + * plugins/function.cycle.php: ugh, another typo + + * plugins/function.cycle.php: update comments + + * docs/designers.sgml + plugins/function.cycle.php + NEWS: added function cycle + + * FAQ + Smarty.class.php: fix register_outputfilter function + +2002-05-01 Monte Ohrt <monte@ispi.net> + + * docs/designers.sgml + NEWS + Smarty.class.php: fixed bug with resource testing and include_path + +2002-04-30 Monte Ohrt <monte@ispi.net> + + * NEWS + README + RELEASE_NOTES + Smarty.class.php + Smarty_Compiler.class.php: update files for 2.1.0 release + +2002-04-30 Andrei Zmievski <andrei@ispi.net> + + * plugins/function.fetch.php + docs/programmers.sgml + Smarty.class.php: Fix. + +2002-04-29 Andrei Zmievski <andrei@ispi.net> + + * docs/programmers.sgml + docs/designers.sgml: A whole bunch of docs. + +2002-04-26 Monte Ohrt <monte@ispi.net> + + * FAQ + QUICKSTART + docs/programmers.sgml: update FAQ, QUICKSTART, small doc syntax fix + +2002-04-24 Monte Ohrt <monte@ispi.net> + + * docs/programmers.sgml + templates/debug.tpl + Smarty.class.php: changed doc structure a bit + +2002-04-16 Andrei Zmievski <andrei@php.net> + + * Smarty.class.php: Add register/unregister API for output filters. + + * NEWS + Smarty.class.php + Smarty_Compiler.class.php + TODO: + Changed the way filters are loaded, which now has to be done explicitly, + either through load_filter() API or by filling in $autoload_filters variable. + Also renamed internal variable to avoid namespace pollution. + +2002-04-15 Andrei Zmievski <andrei@php.net> + + * Smarty.class.php: + Fixed _get_php_resource() to take include_path into account. + +2002-04-15 Monte Ohrt <monte@ispi.net> + + * docs/designers.sgml: + update docs, get modifiers and functions into index for easy access + + * docs/programmers.sgml + NEWS + Smarty.class.php: update caching documentation + +2002-04-15 Andrei Zmievski <andrei@php.net> + + * NEWS: *** empty log message *** + + * Smarty.class.php: Only turn down error notices if $debugging is false. + +2002-04-15 Monte Ohrt <monte@ispi.net> + + * NEWS: update NEWS file + + * plugins/function.html_select_date.php: + fixed logic so this works right when field_separator = "/" + + * plugins/function.html_select_date.php: + fix regular expression for matching date + +2002-04-13 Monte Ohrt <monte@ispi.net> + + * docs/designers.sgml: updated html_select_date docs to reflect changes + + * NEWS + plugins/function.html_select_date.php: + added YYYY-MM-DD support to html_select_date + +2002-04-12 Andrei Zmievski <andrei@php.net> + + * TESTIMONIALS: New entry. + +2002-04-12 Monte Ohrt <monte@ispi.net> + + * plugins/modifier.strip_tags.php: back out changes to strip_tags + + * docs/programmers.sgml: update docs regarding cache_lifetime + + * plugins/modifier.strip_tags.php + Smarty.class.php: + update cache_lifetime logic: -1 = never expire, 0 = always expire + +2002-04-11 Andrei Zmievski <andrei@php.net> + + * BUGS + FAQ + INSTALL + NEWS + Smarty.class.php + Smarty_Compiler.class.php + docs/getting-started.sgml: + Fixed directory separtor issue. Requiring PHP 4.0.6 now. + + * NEWS + Smarty_Compiler.class.php: + Added ability to use simple variables for array indices or object properties. + + * TESTIMONIALS: Another one. + + * TESTIMONIALS: Adding one from Mark P. + +2002-04-05 Andrei Zmievski <andrei@php.net> + + * Smarty_Compiler.class.php + NEWS + Smarty.class.php: Make it possible to unregister pre/postfilter plugins. + +2002-04-05 Monte Ohrt <monte@ispi.net> + + * INSTALL: Remove addons file from INSTALL instructions + +2002-04-04 Monte Ohrt <monte@ispi.net> + + * docs/designers.sgml: update doc error + + * docs/designers.sgml + plugins/modifier.escape.php + NEWS + Smarty.class.php: added htmlall attribute to escape modifier + +2002-04-03 Andrei Zmievski <andrei@php.net> + + * Smarty_Compiler.class.php: Fixed undefined offset warning in {if} tag. + + * Smarty.class.php + NEWS: Added template_exists() API. + + * Smarty.class.php + Smarty_Compiler.class.php + NEWS: + - Added $smarty.template variable. + - Fixed {include_php} tag when dynamic values were used for 'file' attribute. + + * Config_File.class.php: Separator setting fix. + +2002-03-28 Monte Ohrt <monte@ispi.net> + + * FAQ + README: add digest address + + * FAQ + README + Smarty.class.php: update mailing list addresses + +2002-03-28 Andrei Zmievski <andrei@php.net> + + * NEWS: *** empty log message *** + + * plugins/function.html_select_date.php + plugins/function.html_select_time.php + plugins/modifier.date_format.php: + Fix for when plugins directory is not the default one. + +2002-03-28 Andrei Zmievski <andrei@ispi.net> + + * NEWS: *** empty log message *** + + * plugins/function.html_select_date.php + plugins/function.html_select_time.php + plugins/modifier.date_format.php: + Fix for when plugins directory is not the default one. + +2002-03-27 Monte Ohrt <monte@ispi.net> + + * FAQ: update FAQ page + +2002-03-26 Andrei Zmievski <andrei@ispi.net> + + * CREDITS + NEWS + Smarty.class.php + Smarty_Compiler.class.php + TODO: Block functions changes. + + * Config_File.class.php: *** empty log message *** + +2002-03-25 Andrei Zmievski <andrei@php.net> + + * Smarty.class.php + Smarty_Compiler.class.php: Initial implementation of block functions. + +2002-03-22 Monte Ohrt <monte@ispi.net> + + * docs/designers.sgml: fix documentation error in capture + +2002-03-22 Andrei Zmievski <andrei@php.net> + + * Smarty.class.php: *** empty log message *** + + * Smarty.class.php: Turn off notices. + +2002-03-21 Andrei Zmievski <andrei@php.net> + + * Smarty_Compiler.class.php: Make _current_file available to prefilters. + + * NEWS + Smarty.class.php: + Made is possible to assign variables in pre/postfilters. + +2002-03-20 Andrei Zmievski <andrei@php.net> + + * plugins/function.html_select_date.php: Fixed +/- functionality. + + * NEWS: *** empty log message *** + +2002-03-20 Monte Ohrt <monte@ispi.net> + + * Config_File.class.php + NEWS + README + RELEASE_NOTES + Smarty.class.php + Smarty_Compiler.class.php: update version numbers + + * plugins/function.html_select_date.php + plugins/function.html_select_time.php + plugins/modifier.date_format.php: + move .make_timestamp.php to shared.make_timestamp.php + + * NEWS + Smarty.class.php + docs/designers.sgml + plugins/function.fetch.php + plugins/function.html_select_date.php: + update file generation, replace crc32() '-' with 'N' + +2002-03-20 Andrei Zmievski <andrei@php.net> + + * Smarty_Compiler.class.php: *** empty log message *** + +2002-03-19 Andrei Zmievski <andrei@php.net> + + * NEWS: *** empty log message *** + + * Smarty.class.php + Smarty_Compiler.class.php: + Fix plugin behavior for inserts with script attribute. + + * NEWS: *** empty log message *** + + * Smarty_Compiler.class.php: Fix bug with $smarty.cookies. + + * TESTIMONIALS: *** empty log message *** + +2002-03-15 Monte Ohrt <monte@ispi.net> + + * NEWS + docs/designers.sgml: update Changelog + + * plugins/modifier.indent.php + plugins/modifier.wordwrap.php: add wordwrap and indent to repository + +2002-03-14 Monte Ohrt <monte@ispi.net> + + * Smarty.class.php: + remove show_info_include and show_info_header functions + +2002-03-13 Monte Ohrt <monte@ispi.net> + + * plugins/function.fetch.php: update fetch function + + * plugins/function.fetch.php: update fetch function with new parameters + +2002-03-12 Monte Ohrt <monte@ispi.net> + + * docs/designers.sgml: update doc tables + + * docs/designers.sgml: update docs columns + + * docs/getting-started.sgml + docs/appendixes.sgml: update docs + + * TESTIMONIALS + docs/appendixes.sgml: update syntax error in docs, add to testimonials + +2002-03-04 Monte Ohrt <monte@ispi.net> + + * FAQ + README: update FAQ, README with digest mode info + +2002-03-02 Monte Ohrt <monte@ispi.net> + + * QUICKSTART: update quickstart + + * Smarty.class.php: + change behavior so cache_lifetime = 0 never expires (instead of always regenerate) + +2002-03-01 Monte Ohrt <monte@ispi.net> + + * docs/designers.sgml: update doc example + +2002-03-01 Andrei Zmievski <andrei@php.net> + + * CREDITS + RELEASE_NOTES + TODO + NEWS: *** empty log message *** + +2002-03-01 Monte Ohrt <monte@ispi.net> + + * docs/appendixes.sgml + docs/designers.sgml + docs/getting-started.sgml + docs/programmers.sgml: update document id tags + + * docs.sgml: remove docs.sgml + + * RESOURCES + Smarty.class.php: update resources + +2002-02-28 Andrei Zmievski <andrei@php.net> + + * TESTIMONIALS + docs/appendixes.sgml + docs/designers.sgml + docs/programmers.sgml: *** empty log message *** + +2002-02-27 Andrei Zmievski <andrei@php.net> + + * plugins/function.eval.php + docs/designers.sgml: *** empty log message *** + +2002-02-27 Monte Ohrt <monte@ispi.net> + + * plugins/function.eval.php: added eval function to plugin dir + +2002-02-27 Andrei Zmievski <andrei@php.net> + + * NEWS: *** empty log message *** + +2002-02-27 Monte Ohrt <monte@ispi.net> + + * docs/designers.sgml: fix syntax error + + * docs/appendixes.sgml + docs/designers.sgml + docs/getting-started.sgml + docs/programmers.sgml: convert technical notes to docbook format + + * NEWS + docs/designers.sgml: added "eval" plugin docs + +2002-02-26 Andrei Zmievski <andrei@php.net> + + * docs/programmers.sgml + docs/designers.sgml + docs/appendixes.sgml + docs/getting-started.sgml + docs/html-common.dsl + docs/.cvsignore: *** empty log message *** + + * docs/appendixes.sgml + docs/common.dsl + docs/designers.sgml + docs/getting-started.sgml + docs/html-common.dsl + docs/html.dsl + docs/manual.sgml + docs/preface.sgml + docs/programmers.sgml: Split up docs. + +2002-02-25 Andrei Zmievski <andrei@php.net> + + * docs.sgml: *** empty log message *** + +2002-02-22 Monte Ohrt <monte@ispi.net> + + * docs.sgml: update docs + +2002-02-22 Andrei Zmievski <andrei@php.net> + + * docs.sgml + AUTHORS + NEWS: *** empty log message *** + +2002-02-21 Monte Ohrt <monte@ispi.net> + + * Config_File.class.php + NEWS + Smarty.class.php + Smarty_Compiler.class.php + docs.sgml: update misc changes + +2002-02-21 Andrei Zmievski <andrei@php.net> + + * docs.sgml: *** empty log message *** + +2002-02-20 Monte Ohrt <monte@ispi.net> + + * docs.sgml: misc updates + +2002-02-20 Andrei Zmievski <andrei@php.net> + + * docs.sgml: *** empty log message *** + + * Smarty.class.php + plugins/function.assign.php + plugins/function.assign_debug_info.php + plugins/function.counter.php + plugins/function.fetch.php + plugins/function.math.php + plugins/function.popup.php + plugins/function.popup_init.php + plugins/modifier.escape.php: Fixup some naming. + +2002-02-20 Monte Ohrt <monte@ispi.net> + + * docs.sgml: update docs + +2002-02-20 Andrei Zmievski <andrei@php.net> + + * docs.sgml: *** empty log message *** + +2002-02-20 Monte Ohrt <monte@ispi.net> + + * NEWS + docs.sgml + plugins/modifier.escape.php: + removed global vars from fetch function, added attrs to escape modifier + + * docs.sgml: add plugin chapter outline + +2002-02-19 Monte Ohrt <monte@ispi.net> + + * README + RELEASE_NOTES + RESOURCES + Smarty.class.php + docs.sgml + BUGS + FAQ + INSTALL + QUICKSTART: update docs + +2002-02-19 Andrei Zmievski <andrei@php.net> + + * docs.sgml: Updated resources docs. + + * README: *** empty log message *** + + * docs.sgml: Updated description of {$smarty} variable. + + * BUGS + FAQ + INSTALL + QUICKSTART + RELEASE_NOTES + docs.sgml: Remove PEAR notes. + +2002-02-18 Andrei Zmievski <andrei@php.net> + + * Config_File.class.php + NEWS: Removed dependency on PEAR. + +2002-02-18 Monte Ohrt <monte@ispi.net> + + * NEWS + docs.sgml + plugins/function.popup_init.php: add src attribute to popup_init + +2002-02-15 Andrei Zmievski <andrei@php.net> + + * Smarty_Compiler.class.php + plugins/modifier.debug_print_var.php + NEWS + Smarty.class.php: Performance enhancements. + +2002-02-06 Andrei Zmievski <andrei@php.net> + + * plugins/function.html_options.php: + Fix html_options output to be XHTML compatible. + +2002-02-05 Andrei Zmievski <andrei@php.net> + + * Smarty.class.php + Smarty_Compiler.class.php: Fix up plugin inclusion. + + * Smarty.class.php + Smarty_Compiler.class.php + TODO + plugins/function.html_select_date.php + plugins/function.html_select_time.php + plugins/modifier.date_format.php: Fix plugin directory access. + +2002-02-04 Andrei Zmievski <andrei@php.net> + + * .cvsignore + Smarty_Compiler.class.php: *** empty log message *** + +2002-01-31 Andrei Zmievski <andrei@php.net> + + * NEWS: *** empty log message *** + + * Smarty.addons.php + Smarty.class.php + Smarty_Compiler.class.php + TODO + plugins/function.assign.php + plugins/function.assign_debug_info.php + plugins/function.counter.php + plugins/function.fetch.php + plugins/function.html_options.php + plugins/function.html_select_date.php + plugins/function.html_select_time.php + plugins/function.math.php + plugins/function.popup.php + plugins/function.popup_init.php + plugins/modifier.capitalize.php + plugins/modifier.count_characters.php + plugins/modifier.count_paragraphs.php + plugins/modifier.count_sentences.php + plugins/modifier.count_words.php + plugins/modifier.date_format.php + plugins/modifier.debug_print_var.php + plugins/modifier.default.php + plugins/modifier.escape.php + plugins/modifier.lower.php + plugins/modifier.regex_replace.php + plugins/modifier.replace.php + plugins/modifier.spacify.php + plugins/modifier.string_format.php + plugins/modifier.strip_tags.php + plugins/modifier.truncate.php + plugins/modifier.upper.php + plugins/shared.make_timestamp.php + templates/index.tpl + AUTHORS + CREDITS + Config_File.class.php + README: Implemented plugin architecture. + + * NEWS: *** empty log message *** + +2002-01-30 Monte Ohrt <monte@ispi.net> + + * NEWS + Smarty.addons.php + Smarty.class.php + docs.sgml: added modifiers wordwrap and indent + +2002-01-28 Monte Ohrt <monte@ispi.net> + + * Smarty.class.php + docs.sgml: + add support for is-modified-since headers, adjust a doc example + +2002-01-24 Monte Ohrt <monte@ispi.net> + + * Smarty.class.php: cleanup formatting + + * NEWS + Smarty.class.php + docs.sgml: update ChangeLog, remove insert_tag_check parameter + +2002-01-24 Andrei Zmievski <andrei@php.net> + + * plugins/standard.plugin.php: *** empty log message *** + +2002-01-24 Monte Ohrt <monte@ispi.net> + + * Smarty.class.php: fix syntax error + + * Smarty.class.php: removed unneccesary test from fetch() + +2002-01-23 Monte Ohrt <monte@ispi.net> + + * Smarty.addons.php: update overlib fixes + + * NEWS: update changelog + + * FAQ + NEWS + RESOURCES + Smarty.addons.php: updated overlib fixes + +2001-12-31 Andrei Zmievski <andrei@php.net> + + * NEWS + Smarty.class.php: Fixed compile_id problem. + +2001-12-28 Monte Ohrt <monte@ispi.net> + + * NEWS + Smarty.class.php + Smarty_Compiler.class.php: + fixed problem with using assigned var with include_php filepath + +2001-12-21 Monte Ohrt <monte@ispi.net> + + * RESOURCES: update RESOURCES + +2001-12-20 Monte Ohrt <monte@ispi.net> + + * FAQ + README: update FAQ + +2001-12-18 Monte Ohrt <monte@ispi.net> + + * Smarty_Compiler.class.php + docs.sgml + Config_File.class.php + NEWS + README + RELEASE_NOTES + Smarty.addons.php + Smarty.class.php: update version numbers + +2001-12-18 Andrei Zmievski <andrei@php.net> + + * NEWS + Smarty.class.php: Fixed clear_cache(). + +2001-12-14 Monte Ohrt <monte@ispi.net> + + * NEWS + Smarty.addons.php: + fixed bug in smarty_make_timestamp introduced in PHP 4.1.0 + +2001-12-13 Monte Ohrt <monte@ispi.net> + + * NEWS + Smarty.class.php + docs.sgml: update default function args, fix cached insert debug timing + +2001-12-12 Monte Ohrt <monte@ispi.net> + + * docs.sgml: fix syntax error in documentation + + * Smarty.class.php: update default template handling functionality + +2001-12-11 Monte Ohrt <monte@ispi.net> + + * Smarty.class.php + Smarty_Compiler.class.php: update file fetching logic + +2001-12-11 Andrei Zmievski <andrei@php.net> + + * NEWS + Smarty.class.php: Added 'script' attribute to {insert..}. + +2001-12-10 Monte Ohrt <monte@ispi.net> + + * NEWS + Smarty.class.php: added default template function handler + + * Config_File.class.php + NEWS + README + RELEASE_NOTES + Smarty.addons.php + Smarty.class.php + Smarty_Compiler.class.php: update version numbers in files to 1.5.1 + +2001-12-10 Andrei Zmievski <andrei@php.net> + + * NEWS + Smarty.class.php: Removed error message from the _read_file() method. + + * Smarty.class.php: Fix check for compile and cache IDs. + +2001-12-06 Monte Ohrt <monte@ispi.net> + + * QUICKSTART: fix spelling error in QUICKSTART + + * docs.sgml: fixed spelling errors in documenation + + * Smarty_Compiler.class.php + docs.sgml + Config_File.class.php + NEWS + README + RELEASE_NOTES + Smarty.addons.php + Smarty.class.php: commit 1.5.0 release + + * RESOURCES + docs.sgml: added RESOURCES file + +2001-12-05 Andrei Zmievski <andrei@php.net> + + * Smarty_Compiler.class.php: Refactor. + +2001-12-05 Monte Ohrt <monte@ispi.net> + + * NEWS + Smarty_Compiler.class.php + docs.sgml: added assign to include and php_include + + * Smarty.class.php + Smarty_Compiler.class.php + docs.sgml: *** empty log message *** + +2001-12-04 Andrei Zmievski <andrei@php.net> + + * NEWS + Smarty_Compiler.class.php: Formatting. + +2001-12-04 Monte Ohrt <monte@ispi.net> + + * Smarty_Compiler.class.php + NEWS + Smarty.class.php: update ChangeLog + +2001-12-04 Andrei Zmievski <andrei@php.net> + + * NEWS + Smarty.class.php: Formatting. + +2001-12-04 Monte Ohrt <monte@ispi.net> + + * Smarty.class.php: removed SMARTY_DIR setting in constructor + + * Smarty.class.php: fix Smarty.class.php indention error + + * Smarty.class.php: update trusted logic + +2001-12-03 Monte Ohrt <monte@ispi.net> + + * Smarty.class.php: + fix up is_secure, is_trusted, make _parse_tpl_path function + + * Smarty.class.php: fix problem with testing SMARTY_DIR as empty + + * NEWS + docs.sgml: update documentation, change log + + * Smarty.class.php: + update constructor to check for SMARTY_DIR before assigning + +2001-12-03 Andrei Zmievski <andrei@php.net> + + * NEWS + Smarty.class.php: *** empty log message *** + +2001-12-03 Monte Ohrt <monte@ispi.net> + + * FAQ + INSTALL + RELEASE_NOTES: update a few files + + * NEWS + QUICKSTART + Smarty.class.php + docs.sgml: added trusted_dir functionality, cleaned up secure_dir logic + +2001-12-03 Andrei Zmievski <andrei@php.net> + + * NEWS: *** empty log message *** + + * NEWS + Smarty.class.php: - Introduced $compile_id class variable. + - Fixed a situation where if $cache_id and $compile_id were both null + they were passed to auto functions as empty string instead of null. + +2001-11-30 Monte Ohrt <monte@ispi.net> + + * NEWS + Smarty.class.php: + change variable names in fetch() fuction to smarty_* to avoid namespace conflicts + + * NEWS + Smarty.class.php: fixed bug in _rm_auto with catenated null values + +2001-11-29 Andrei Zmievski <andrei@php.net> + + * NEWS + Smarty_Compiler.class.php: Added $smarty.section.* syntax. + + * Smarty_Compiler.class.php: Made 'name' attribute optional for {foreach}. + +2001-11-29 Monte Ohrt <monte@ispi.net> + + * Smarty.class.php + index.php: remove assign "now" in index.tpl + +2001-11-29 Andrei Zmievski <andrei@php.net> + + * NEWS + Smarty.addons.php + Smarty.class.php: Fix formatting. + +2001-11-28 Monte Ohrt <monte@ispi.net> + + * NEWS + Smarty.class.php + docs.sgml: + removed return statements from _read_cache_file (how did they get in there?) + +2001-11-27 Monte Ohrt <monte@ispi.net> + + * docs.sgml + NEWS + Smarty.addons.php + Smarty.class.php: + fixed bugs and added assign attribute to several functions + +2001-11-27 Andrei Zmievski <andrei@php.net> + + * NEWS: Some rewording. + + * Smarty_Compiler.class.php: Fix $smarty.capture access. + + * TODO: *** empty log message *** + + * NEWS + Smarty.class.php + Smarty_Compiler.class.php: + Made {config_load ..} merge globals from each config file only once per scope. + + * NEWS + Smarty.class.php + Smarty_Compiler.class.php: - Added {foreach ...}. + - Made certain $smarty.* references handled at compilation time. + +2001-11-26 Monte Ohrt <monte@ispi.net> + + * Config_File.class.php + NEWS + Smarty.class.php + Smarty_Compiler.class.php + docs.sgml: commit cache handler functionality + +2001-11-20 Andrei Zmievski <andrei@php.net> + + * NEWS + Smarty.addons.php + Smarty_Compiler.class.php: Various fixes and additions. + + * NEWS + index.php: *** empty log message *** + +2001-11-05 Monte Ohrt <monte@ispi.net> + + * Smarty.class.php: changed _read_file parameter from $end to $lines + + * NEWS + Smarty.class.php: fixed is_cache, make cache reading more efficient + +2001-11-02 Monte Ohrt <monte@ispi.net> + + * FAQ + NEWS: update FAQ with mailing list Reply-To header FAQ + + * NEWS + Smarty.class.php + index.php: supress fopen errors, return false if cache file won't load + +2001-11-01 Monte Ohrt <monte@ispi.net> + + * QUICKSTART + docs.sgml + index.php: update QUICKSTART guide with index key example + + * Config_File.class.php + NEWS + README + RELEASE_NOTES + Smarty.addons.php + Smarty.class.php + Smarty_Compiler.class.php + docs.sgml: commit all updates for 1.4.6 + +2001-11-01 Andrei Zmievski <andrei@php.net> + + * NEWS: *** empty log message *** + +2001-10-30 Monte Ohrt <monte@ispi.net> + + * Smarty.addons.php: fix assign function problem with empty value passed + + * NEWS + Smarty.addons.php + Smarty.class.php + Smarty_Compiler.class.php + templates/debug.tpl: + fixed bug in assign function when passing an empty value + +2001-10-26 Monte Ohrt <monte@ispi.net> + + * Smarty.addons.php + Smarty.class.php + index.php: fix minor typo in debug code + +2001-10-26 Andrei Zmievski <andrei@php.net> + + * Smarty.class.php: Typo. + +2001-10-26 Monte Ohrt <monte@ispi.net> + + * Smarty.addons.php: + update debug console output, handle html encoding correctly + +2001-10-26 Andrei Zmievski <andrei@php.net> + + * Smarty.addons.php + templates/debug.tpl: Debug formatting. + + * Smarty.class.php: Disable rmdir warning. + +2001-10-26 Monte Ohrt <monte@ispi.net> + + * Smarty.addons.php + Smarty.class.php + templates/debug.tpl: update debugging to expand array variables + + * Smarty.class.php + docs.sgml: + update docs for fetching only timestamp with custom template source functions + + * Smarty.addons.php: fix debug console error + +2001-10-26 Andrei Zmievski <andrei@php.net> + + * docs.sgml: Typos. + + * Smarty.addons.php: Cleanup whitespace. + + * Smarty_Compiler.class.php: Clean up whitespace. + + * Smarty.class.php: Cleaning up code, formatting mostly. + + * NEWS: *** empty log message *** + +2001-10-25 Monte Ohrt <monte@ispi.net> + + * NEWS + docs.sgml: update documentation to current version + + * NEWS + Smarty.addons.php: + updated fetch to give proper warning when fetching unreadable or nonexistant files + + * NEWS + Smarty.class.php + Smarty_Compiler.class.php: + fixed problem with newline at the end of compiled templates + + * NEWS + Smarty.class.php: recompile cache if config file gets modified too. + + * NEWS + Smarty.class.php: + added feature to regenerate cache if compile_check is enabled and an + involved template is modified + +2001-10-23 Monte Ohrt <monte@ispi.net> + + * Smarty.class.php: fix indent for insert tags in debug console + + * templates/debug.tpl: update debug.tpl file format + + * NEWS + Smarty.addons.php + Smarty.class.php + templates/debug.tpl: + update execution time debugging, move into include list + +2001-10-10 Monte Ohrt <monte@ispi.net> + + * NEWS + Smarty.addons.php + Smarty.class.php + Smarty_Compiler.class.php: + fixed up execution time output in debug console + +2001-10-09 Andrei Zmievski <andrei@php.net> + + * Config_File.class.php + NEWS + Smarty.class.php + TODO: Added support for hidden config vars. + +2001-10-04 Monte Ohrt <monte@ispi.net> + + * NEWS + Smarty.addons.php + Smarty.class.php + templates/debug.tpl: added execution times to debug console + +2001-10-02 Andrei Zmievski <andrei@php.net> + + * Smarty_Compiler.class.php: Add space. + +2001-10-01 Andrei Zmievski <andrei@php.net> + + * Smarty.class.php: Fix reference to compile_id. + +2001-09-28 Andrei Zmievski <andrei@php.net> + + * NEWS + Smarty.class.php + Smarty_Compiler.class.php: Added postfilter functions. + +2001-09-26 Andrei Zmievski <andrei@php.net> + + * NEWS + Smarty.class.php + docs.sgml: Rename to clear_compiled_tpl(). + +2001-09-25 Andrei Zmievski <andrei@php.net> + + * NEWS + Smarty_Compiler.class.php: + Fixed line number reporting when removing comments. + +2001-09-20 Monte Ohrt <monte@ispi.net> + + * NEWS + RELEASE_NOTES + Smarty.addons.php: made html_options output xhtml compatible + +2001-09-19 Monte Ohrt <monte@ispi.net> + + * Config_File.class.php + NEWS + README + RELEASE_NOTES + Smarty.addons.php + Smarty.class.php + Smarty_Compiler.class.php + templates/debug.tpl: updated version numbers + +2001-09-16 Monte Ohrt <monte@ispi.net> + + * FAQ + NEWS + docs.sgml: fix doc error with insert function + +2001-09-06 Andrei Zmievski <andrei@php.net> + + * NEWS: *** empty log message *** + +2001-08-31 Monte Ohrt <monte@ispi.net> + + * NEWS: update ChangeLog + + * overlib.js + Smarty.addons.php + Smarty.class.php + docs.sgml: + update overlib to 3.50, adjust addon code so that the overlib.js file isn't modified + +2001-08-31 Andrei Zmievski <andrei@php.net> + + * Smarty.class.php: - compile_id changes + + * NEWS + Smarty.addons.php: - compile_id support + - new options for html_select_date + +2001-08-23 Andrei Zmievski <andrei@php.net> + + * TODO: *** empty log message *** + +2001-08-10 Andrei Zmievski <andrei@php.net> + + * NEWS + Smarty.addons.php + Smarty.class.php + Smarty_Compiler.class.php: + Modified to pass Smarty object as second parameter to insert functions. + Also moved _smarty_mod_handler() and _smarty_insert_handler() into the class. + + * NEWS + Smarty_Compiler.class.php: + Passing Smarty as second parameter to prefilter functions. + +2001-08-09 Andrei Zmievski <andrei@php.net> + + * NEWS: *** empty log message *** + +2001-08-09 Monte Ohrt <monte@ispi.net> + + * templates/index.tpl + Smarty.class.php: add smarty.now variable to template + +2001-08-06 Monte Ohrt <monte@ispi.net> + + * templates/index.tpl: change config_load section back to setup + +2001-08-06 Andrei Zmievski <andrei@php.net> + + * Smarty.addons.php: Optimize a bit. + +2001-08-04 Monte Ohrt <monte@ispi.net> + + * docs.sgml: update capture documentation + +2001-08-03 Monte Ohrt <monte@ispi.net> + + * FAQ + NEWS + Smarty.class.php: + fix bug with URL controlled debugging, works now (Monte) + +2001-08-01 Andrei Zmievski <andrei@php.net> + + * Config_File.class.php: *** empty log message *** + + * Smarty_Compiler.class.php + Smarty.class.php: - Fixed some E_NOTICE stuff in compiler. + - Generalized assign_smarty_interface() a bit. + +2001-07-24 Andrei Zmievski <andrei@php.net> + + * NEWS + Smarty_Compiler.class.php + TODO: See ChangeLog for details. + +2001-07-20 Andrei Zmievski <andrei@php.net> + + * Config_File.class.php: Booleanize case-insensitively. + +2001-07-17 Monte Ohrt <monte@ispi.net> + + * NEWS: update ChangeLog + + * Smarty.class.php + docs.sgml: put SMARTY_DIR on Config_File require + +2001-07-11 Monte Ohrt <monte@ispi.net> + + * docs.sgml + FAQ + NEWS + Smarty.class.php: + updated security to not include insecure docs, only warning + +2001-07-10 Andrei Zmievski <andrei@php.net> + + * Smarty.class.php: Adding 'sizeof' as an allowed {if} function. + +2001-07-06 Andrei Zmievski <andrei@php.net> + + * NEWS: *** empty log message *** + +2001-07-06 Monte Ohrt <monte@ispi.net> + + * Config_File.class.php + NEWS + README + RELEASE_NOTES + Smarty.addons.php + Smarty.class.php + Smarty_Compiler.class.php: update version number to 1.4.4 + + * NEWS + Smarty.addons.php + Smarty_Compiler.class.php + docs.sgml + templates/header.tpl + templates/index.tpl: update documenatation, template examples + +2001-07-03 Andrei Zmievski <andrei@php.net> + + * NEWS + Smarty.class.php: Implemented access to request vars via $smarty var. + + * NEWS + Smarty_Compiler.class.php: + Fixed a bug with parsing function arguments in {if} tags. + +2001-06-30 Monte Ohrt <monte@ispi.net> + + * NEWS: update ChangeLog + +2001-06-29 Monte Ohrt <monte@ispi.net> + + * Smarty.addons.php + Smarty.class.php + docs.sgml + overlib.js: + moved overlib to separate file, added SMARTY_DIR, documented. added much documentation + +2001-06-29 Andrei Zmievski <andrei@php.net> + + * NEWS + RELEASE_NOTES + TODO: *** empty log message *** + +2001-06-29 Monte Ohrt <monte@ispi.net> + + * NEWS + README + RELEASE_NOTES + Smarty.addons.php + Smarty.class.php + docs.sgml + index.php + templates/debug.tpl + templates/header.tpl + templates/index.tpl: update release notes + +2001-06-27 Andrei Zmievski <andrei@php.net> + + * Smarty_Compiler.class.php: *** empty log message *** + + * NEWS + Smarty_Compiler.class.php: Implemented 'step' section attribute. + + * Smarty_Compiler.class.php: Negative values of 'max' will mean no max. + + * AUTHORS + NEWS: *** empty log message *** + +2001-06-26 Andrei Zmievski <andrei@php.net> + + * NEWS + Smarty.class.php + Smarty_Compiler.class.php + index.php: Added 'max' and 'start' section attributes. + Added 'total' and 'iteration' section properties. + +2001-06-25 Andrei Zmievski <andrei@php.net> + + * Config_File.class.php + RELEASE_NOTES + Smarty.addons.php + Smarty.class.php + Smarty_Compiler.class.php: Update version numbers. + +2001-06-23 Andrei Zmievski <andrei@php.net> + + * TODO: *** empty log message *** + +2001-06-21 Andrei Zmievski <andrei@php.net> + + * Config_File.class.php + NEWS: Fixed booleanization bug. + +2001-06-20 Monte Ohrt <monte@ispi.net> + + * docs.sgml: + update documents to reflect changes to cached content & debugging + +2001-06-20 Andrei Zmievski <andrei@php.net> + + * Smarty.addons.php + Smarty.class.php: Remove debug output for cached and fetched cases. + +2001-06-20 Monte Ohrt <monte@ispi.net> + + * Smarty.class.php: update include_info to false + + * Smarty.class.php + docs.sgml + index.php + templates/footer.tpl: + moved debug logic into Smarty completely, created flags for it + +2001-06-19 Andrei Zmievski <andrei@php.net> + + * Smarty.addons.php + Smarty.class.php + templates/debug.tpl: *** empty log message *** + + * NEWS + Smarty.class.php: Remove unneeded debug functions. + +2001-06-19 Monte Ohrt <monte@ispi.net> + + * NEWS + Smarty.addons.php + Smarty.class.php + docs.sgml + templates/debug.tpl + templates/footer.tpl: commit updates, add debug template + +2001-06-19 Andrei Zmievski <andrei@php.net> + + * Smarty.class.php + Smarty_Compiler.class.php + TODO: + Moved config loading code inside main class, the compiled template now + simply calls that method. + +2001-06-15 Andrei Zmievski <andrei@php.net> + + * NEWS + Smarty.class.php + Smarty_Compiler.class.php + templates/index.tpl: * moved config array into class itself + * added 'scope' attribute for config_load + + * Smarty_Compiler.class.php + Smarty.addons.php + Smarty.class.php: Finishing up secure mode. + +2001-06-15 Monte Ohrt <monte@ispi.net> + + * NEWS: update ChangeLog + + * Smarty_Compiler.class.php: cleaned up logic of if statement security + + * Smarty_Compiler.class.php: update if logic to cover more situations + + * Smarty_Compiler.class.php + docs.sgml: update if statement security feature + +2001-06-14 Andrei Zmievski <andrei@php.net> + + * Smarty.addons.php + Smarty.class.php: *** empty log message *** + + * NEWS + Smarty_Compiler.class.php: + Fixed a bug with quoted strings inside if statements. + +2001-06-13 Monte Ohrt <monte@ispi.net> + + * Smarty.addons.php + Smarty.class.php: added secure_dir array for multiple secure directories + + * Smarty.addons.php: update fetch funtion to respect security setting + + * NEWS + Smarty.addons.php + Smarty.class.php + docs.sgml: update documentation, changelog + + * Smarty.addons.php + Smarty.class.php: moved _extract setting to assign functions + + * Smarty.addons.php + Smarty.class.php + Smarty_Compiler.class.php: + added assign/unassign custom functions, ability to re-extract tpl_vars + + * Smarty.class.php + Smarty_Compiler.class.php + docs.sgml + index.php: commit security features + +2001-06-11 Andrei Zmievski <andrei@php.net> + + * Smarty.class.php: Version variable typo. + +2001-06-05 Andrei Zmievski <andrei@php.net> + + * Smarty.class.php: + Create config object in fetch() or just set the config path if it already + exists. + +2001-06-04 Andrei Zmievski <andrei@php.net> + + * Smarty.class.php: *** empty log message *** + + * NEWS + Smarty_Compiler.class.php: + Fixed a problem with $<number> inside strip tags. + +2001-05-31 Andrei Zmievski <andrei@php.net> + + * NEWS: *** empty log message *** + + * Config_File.class.php: Allow empty config_path. + +2001-05-29 Monte Ohrt <monte@ispi.net> + + * Smarty_Compiler.class.php + docs.sgml + NEWS + README + RELEASE_NOTES + Smarty.addons.php + Smarty.class.php: update version numbers + + * NEWS + Smarty.class.php + Smarty_Compiler.class.php + docs.sgml: moved version variable to internal variable + +2001-05-22 Andrei Zmievski <andrei@php.net> + + * NEWS + Smarty.class.php + Smarty_Compiler.class.php: + Moved $_smarty_sections and $_smarty_conf_obj into Smarty class. + +2001-05-18 Monte Ohrt <monte@ispi.net> + + * NEWS: update ChangeLog + + * FAQ + QUICKSTART: update FAQ, QUICKSTART for windows include_path setup + + * configs/test.conf: added configs directory to cvs + +2001-05-18 Andrei Zmievski <andrei@php.net> + + * Smarty.class.php: Use compiler_class for including the file. + +2001-05-18 Monte Ohrt <monte@ispi.net> + + * docs.sgml: fix typo + +2001-05-16 Monte Ohrt <monte@ispi.net> + + * README + RELEASE_NOTES + Smarty.addons.php + Smarty.class.php + Smarty_Compiler.class.php: update files to version 1.4.1 + + * NEWS: update ChangeLog + +2001-05-15 Andrei Zmievski <andrei@php.net> + + * NEWS: *** empty log message *** + + * index.php: forget that! + + * NEWS + Smarty_Compiler.class.php + index.php: Fixed a few E_NOTICE warnings. + +2001-05-09 Monte Ohrt <monte@ispi.net> + + * NEWS + RELEASE_NOTES + Smarty.addons.php + Smarty.class.php + docs.sgml: update dates versions + +2001-05-09 Andrei Zmievski <andrei@php.net> + + * NEWS: *** empty log message *** + + * Smarty.class.php: + Use absolute paths when requiring/including Smart components. + + * NEWS: *** empty log message *** + + * Smarty.class.php: Use write mode instead of append. + +2001-05-02 Andrei Zmievski <andrei@php.net> + + * NEWS + Smarty_Compiler.class.php: Fix indexing by section properties. + +2001-05-02 Monte Ohrt <monte@ispi.net> + + * NEWS: update changelog + + * Smarty.class.php: remove period from syntax error + +2001-05-02 Andrei Zmievski <andrei@php.net> + + * Smarty_Compiler.class.php: Double-quote the attribute values by default. + +2001-04-30 Monte Ohrt <monte@ispi.net> + + * Smarty_Compiler.class.php + NEWS: added simple {capture} logic + +2001-04-30 Andrei Zmievski <andrei@php.net> + + * TODO: *** empty log message *** + + * Smarty_Compiler.class.php + Smarty.class.php: Fix passing config vars to included files. + + * Smarty.class.php + Smarty_Compiler.class.php: Fix inclusion again. + +2001-04-30 Monte Ohrt <monte@ispi.net> + + * FAQ + RELEASE_NOTES + Smarty.class.php + misc/fix_vars.php + NEWS: update paths for windows (c:) + +2001-04-28 Andrei Zmievski <andrei@php.net> + + * Smarty.class.php + Smarty_Compiler.class.php: Fix passing variables to included files. + + * templates/index.tpl: *** empty log message *** + +2001-04-27 Andrei Zmievski <andrei@php.net> + + * Smarty_Compiler.class.php: Fix includes. + +2001-04-26 Andrei Zmievski <andrei@php.net> + + * Smarty_Compiler.class.php + docs.sgml + Smarty.class.php: Formatting mostly. + + * Smarty_Compiler.class.php + Config_File.class.php: *** empty log message *** + +2001-04-26 Monte Ohrt <monte@ispi.net> + + * Smarty_Compiler.class.php + docs.sgml + FAQ + NEWS + QUICKSTART + RELEASE_NOTES + Smarty.class.php: update docs with new changes + +2001-04-26 Andrei Zmievski <andrei@php.net> + + * RELEASE_NOTES: *** empty log message *** + + * docs.sgml + templates/index.tpl + NEWS + Smarty_Compiler.class.php: Added ability to reference object properties. + +2001-04-25 Andrei Zmievski <andrei@php.net> + + * README + Smarty.addons.php + Smarty.class.php + Smarty_Compiler.class.php + docs.sgml + AUTHORS + Config_File.class.php + CREDITS + RELEASE_NOTES + NEWS: *** empty log message *** + + * docs.sgml: Docs on new parameter to custom functions. + + * NEWS: *** empty log message *** + + * Smarty_Compiler.class.php: + Changing the way tpl vars are referenced and passing smarty object + to custom functions. + + * RELEASE_NOTES + docs.sgml: Fixing docs a bit. + +2001-04-24 Andrei Zmievski <andrei@php.net> + + * docs.sgml: Docs for $compiler_class and compiler functions. + + * templates/index.tpl: *** empty log message *** + + * Smarty_Compiler.class.php: Remove debugging. + +2001-04-24 Monte Ohrt <monte@ispi.net> + + * docs.sgml: update compiler function docs + +2001-04-24 Andrei Zmievski <andrei@php.net> + + * NEWS + Smarty.class.php + Smarty_Compiler.class.php + templates/index.tpl: Added compiler function support. + +2001-04-24 Monte Ohrt <monte@ispi.net> + + * RELEASE_NOTES + Smarty.class.php: + update notes, change show_info_header to false by default + + * Smarty.class.php + Smarty_Compiler.class.php + docs.sgml + CREDITS + FAQ + NEWS + README + RELEASE_NOTES: update documenation, bug fixes + +2001-04-24 Andrei Zmievski <andrei@php.net> + + * misc/fix_vars.php: Hopefully fix for sure. + +2001-04-23 Monte Ohrt <monte@ispi.net> + + * misc/fix_vars.php: uncomment copy/unlink + +2001-04-23 Andrei Zmievski <andrei@php.net> + + * misc/fix_vars.php: Do it more thoroughly. + + * misc/fix_vars.php: check for } + +2001-04-22 Andrei Zmievski <andrei@php.net> + + * misc/fix_vars.php: Fix variable parsing. + +2001-04-20 Monte Ohrt <monte@ispi.net> + + * misc/fix_vars.php: fix problem with 4.0.5-dev and preg_replace_callback + +2001-04-19 Monte Ohrt <monte@ispi.net> + + * Smarty_Compiler.class.php + docs.sgml + misc/fix_vars.php + NEWS + RELEASE_NOTES + Smarty.class.php: update notes/documentation + + * NEWS + README + RELEASE_NOTES + Smarty.addons.php + Smarty.class.php + Smarty_Compiler.class.php + docs.sgml: update files for 1.4.0 release + +2001-04-16 Andrei Zmievski <andrei@php.net> + + * misc/fix_vars.php: Added fix_vars.php script. + +2001-04-16 Monte Ohrt <monte@ispi.net> + + * QUICKSTART + RELEASE_NOTES + docs.sgml + templates/index.tpl: + update RELEASE_NOTES & scripts with new section var syntax + +2001-04-13 Andrei Zmievski <andrei@php.net> + + * Smarty_Compiler.class.php: * Implement new variable format parser. + * Optimizing config load a bit. + +2001-04-13 Monte Ohrt <monte@ispi.net> + + * FAQ + NEWS + RELEASE_NOTES + Smarty.class.php: + added $check_cached_insert_tags to speed up cached pages if + {insert ...} is not used (Monte) + +2001-04-12 Andrei Zmievski <andrei@php.net> + + * NEWS + Smarty.class.php + RELEASE_NOTES: *** empty log message *** + + * Smarty_Compiler.class.php: Remove redundant functions. + + * Smarty.class.php: Formatting. + +2001-04-12 Monte Ohrt <monte@ispi.net> + + * Smarty.class.php: update file: parsing + + * Smarty.class.php + docs.sgml: update documentation + +2001-04-12 Andrei Zmievski <andrei@php.net> + + * Smarty.class.php + Smarty_Compiler.class.php + TODO: *** empty log message *** + +2001-04-11 Monte Ohrt <monte@ispi.net> + + * FAQ + QUICKSTART + RELEASE_NOTES: added RELEASE_NOTES file to cvs + + * NEWS + docs.sgml: update ChangeLog, update documentation + + * Smarty.class.php + Smarty_Compiler.class.php + templates/index.tpl: + update Smarty to compile at run-time. added ability to get files from + absolute paths, added work around for LOCK_EX and windows, changed a few + file permissions to be more secure. + +2001-03-29 Monte Ohrt <monte@ispi.net> + + * NEWS + Smarty.addons.php: + allow arbitrary date strings instead of just timestamps + +2001-03-28 Monte Ohrt <monte@ispi.net> + + * Smarty.class.php + Smarty_Compiler.class.php + docs.sgml + FAQ + NEWS + README + Smarty.addons.php: + update version in class, update docs for count_ and new vars + + * templates/index.tpl + docs.sgml: update docs, example template + +2001-03-28 Andrei Zmievski <andrei@php.net> + + * Smarty_Compiler.class.php: Some variable renaming. + +2001-03-23 Andrei Zmievski <andrei@php.net> + + * Smarty_Compiler.class.php + NEWS: Fixed nested include infinite repeat bug. + +2001-03-23 Monte Ohrt <monte@ispi.net> + + * Smarty.class.php: fix version number + + * Smarty.class.php + NEWS: added optional HTML header to output + +2001-03-22 Andrei Zmievski <andrei@php.net> + + * Smarty_Compiler.class.php: Fixed inclusion of dynamic files. + +2001-03-16 Andrei Zmievski <andrei@php.net> + + * Smarty_Compiler.class.php: Fixing the config_load scoping. + + * Smarty_Compiler.class.php: making config variables global for now. + +2001-03-15 Andrei Zmievski <andrei@php.net> + + * NEWS: *** empty log message *** + + * Smarty_Compiler.class.php: + * Includes are now always done via generated function call to protect + namespace. + * config_load now always uses global config object to improve + performance. + +2001-03-13 Monte Ohrt <monte@ispi.net> + + * docs.sgml: update math documentation with format attribute + +2001-03-11 Monte Ohrt <monte@ispi.net> + + * docs.sgml + NEWS + Smarty.addons.php + Smarty.class.php + Smarty_Compiler.class.php: update math function with format attribute + +2001-03-10 Andrei Zmievski <andrei@php.net> + + * Smarty.addons.php: *** empty log message *** + + * NEWS + Smarty.addons.php + Smarty.class.php: Added html_select_time custom function. + +2001-03-08 Monte Ohrt <monte@ispi.net> + + * Smarty.class.php + Smarty_Compiler.class.php + NEWS + README + Smarty.addons.php: rename 1.3.1b to 1.3.1pl1 + + * NEWS + Smarty.addons.php + Smarty.class.php + Smarty_Compiler.class.php: update version numbers, changelog + + * Smarty.class.php + Smarty_Compiler.class.php: + moved _syntax_error to Smarty_Compiler.class.php + + * Smarty.class.php + docs.sgml: + missing _syntax_error function recovered. fixed minor syntax in docs + +2001-03-07 Monte Ohrt <monte@ispi.net> + + * QUICKSTART + README + Smarty.addons.php + Smarty.class.php + Smarty_Compiler.class.php + BUGS + INSTALL + NEWS: update everything to 1.3.1 + +2001-03-03 Monte Ohrt <monte@ispi.net> + + * Smarty_Compiler.class.php + Smarty.class.php: fixed bug with cached insert tags + +2001-03-02 Monte Ohrt <monte@ispi.net> + + * Smarty.class.php + Smarty_Compiler.class.php: + fix cache fuctions with separated compiled class + + * FAQ + NEWS + docs.sgml: update changelog + +2001-03-02 Andrei Zmievski <andrei@php.net> + + * NEWS + Smarty_Compiler.class.php: Added 'first' and 'last' section properties. + +2001-03-02 Monte Ohrt <monte@ispi.net> + + * TODO: remove compiling separation TODO + + * Smarty_Compiler.class.php + Smarty.addons.php + Smarty.class.php: update function headers + + * templates/index.tpl + NEWS + Smarty.class.php + Smarty_Compiler.class.php + index.php: split out compiling code for faster execution + + * Smarty.class.php: fixed a few warning messages + + * Smarty.addons.php + Smarty.class.php + docs.sgml + NEWS: added fetch, unregister mod/fun, updated docs + +2001-03-01 Monte Ohrt <monte@ispi.net> + + * Smarty.addons.php: added "int" to available list + + * docs.sgml + FAQ + Smarty.class.php: update FAQ, add math functions & update documetation + + * index.php + Smarty.addons.php + Smarty.class.php + docs.sgml: fixed literal tags and other optional delimiters + +2001-02-26 Andrei Zmievski <andrei@php.net> + + * NEWS + Smarty.class.php: + Added index_prev, index_next section properties and ability to + index by them. + + * NEWS + Smarty.addons.php + Smarty.class.php: Reverting the plugins patch - needs more thought. + + * Smarty.class.php: Fixing plugin loading. + +2001-02-23 Andrei Zmievski <andrei@php.net> + + * Smarty.addons.php + Smarty.class.php + plugins/standard.plugin.php + NEWS: Added plugin functionality. + +2001-02-22 Monte Ohrt <monte@ispi.net> + + * docs.sgml + templates/index.tpl + NEWS + README + Smarty.class.php: fixed issue with php tags executed in literal blocks + +2001-02-21 Monte Ohrt <monte@ispi.net> + + * NEWS: update changelog for LGPL change + + * Smarty.class.php + docs.sgml + README + Smarty.addons.php: updated version numbers to 1.3.0 + + * NEWS + templates/index.tpl: update changelog, rearrange index.tpl file + +2001-02-21 Andrei Zmievski <andrei@php.net> + + * NEWS + Smarty.class.php: *** empty log message *** + +2001-02-21 Monte Ohrt <monte@ispi.net> + + * docs.sgml: update parameters for is_cached and fetch + +2001-02-21 Andrei Zmievski <andrei@php.net> + + * NEWS + Smarty.class.php: *** empty log message *** + +2001-02-21 Monte Ohrt <monte@ispi.net> + + * NEWS + Smarty.addons.php + docs.sgml: update docs, remove header function from addons + +2001-02-20 Monte Ohrt <monte@ispi.net> + + * FAQ + NEWS: update changelog + + * TODO: update todo + + * TODO: update todo list + + * Smarty.class.php: update php tag handling logic + +2001-02-19 Monte Ohrt <monte@ispi.net> + + * index.php + Config_File.class.php + FAQ + Smarty.class.php + docs.sgml: fixed <?php tag at beginning of files, updated docs + +2001-02-19 Andrei Zmievski <andrei@php.net> + + * Smarty.addons.php: *** empty log message *** + +2001-02-13 Andrei Zmievski <andrei@php.net> + + * TODO: *** empty log message *** + +2001-02-12 Andrei Zmievski <andrei@php.net> + + * templates/index.tpl + Smarty.class.php: *** empty log message *** + +2001-02-10 Monte Ohrt <monte@ispi.net> + + * Smarty.class.php: remove unneeded preg_match + + * Smarty.class.php: remove comment + + * Smarty.class.php: updated php escape to handle <script language="php"> + + * NEWS + Smarty.class.php: fix php tag escapement logic + + * NEWS: commit changelog + + * docs.sgml: update header docs + + * docs.sgml + Smarty.addons.php + Smarty.class.php: added header custom function + +2001-02-09 Monte Ohrt <monte@ispi.net> + + * index.php + templates/header.tpl + templates/index.tpl + INSTALL + QUICKSTART + docs.sgml: update documentation, add examples to test script. + +2001-02-08 Andrei Zmievski <andrei@php.net> + + * Smarty.class.php: *** empty log message *** + +2001-02-08 Monte Ohrt <monte@ispi.net> + + * COPYING.lib: added COPYING.lib + + * COPYING + Config_File.class.php + Smarty.addons.php + Smarty.class.php + docs.sgml: changed license to LGPL for commercial use + + * docs.sgml + Smarty.class.php: fix clear_assign syntax error + +2001-02-07 Monte Ohrt <monte@ispi.net> + + * Smarty.class.php: added ability to pass array to clear_assign + + * index.php + templates/index.tpl + docs.sgml: + update documentation, remove tests from index file and template + +2001-02-07 Andrei Zmievski <andrei@php.net> + + * NEWS + Smarty.class.php: Adding file locking. + + * templates/index.tpl + Smarty.addons.php + Smarty.class.php + index.php: More cache work. + +2001-02-06 Monte Ohrt <monte@ispi.net> + + * docs.sgml + Smarty.class.php: + change register_ function names, update documents with tables + +2001-02-06 Andrei Zmievski <andrei@php.net> + + * NEWS + Smarty.class.php + templates/index.tpl: Reworking and optimizing the cache system. + + * Smarty.class.php: Restoring ?> in patterns. + +2001-02-05 Monte Ohrt <monte@ispi.net> + + * Smarty.class.php + docs.sgml: update cache directory creation logic + +2001-02-05 Andrei Zmievski <andrei@php.net> + + * Smarty.class.php: Removing once-only subpattern for now.. + + * Smarty.class.php: Fix modifier arg parsing. + +2001-02-02 Andrei Zmievski <andrei@php.net> + + * NEWS + Smarty.class.php + templates/index.tpl: See changelog. + +2001-02-01 Andrei Zmievski <andrei@php.net> + + * README: *** empty log message *** + + * Smarty.class.php: Use 'echo' instead of 'print'. + + * Smarty.addons.php: *** empty log message *** + +2001-02-01 Monte Ohrt <monte@ispi.net> + + * Smarty.class.php: rearranged variables at top of script + +2001-02-01 Andrei Zmievski <andrei@php.net> + + * Smarty.class.php: Retabbing. + + * templates/index.tpl + Smarty.class.php + index.php: *** empty log message *** + +2001-02-01 Monte Ohrt <monte@ispi.net> + + * Smarty.class.php: update caching logic + + * Smarty.class.php: fixed clear_all_cache bugs + + * Smarty.class.php: fix .cache check + + * docs.sgml + FAQ + Smarty.class.php: update .che to .cache + + * FAQ + Smarty.class.php + docs.sgml: updated docs for caching, added clear_all_cache() directive + +2001-01-31 Monte Ohrt <monte@ispi.net> + + * index.php + templates/index.tpl + docs.sgml: upated docs for date_format and html_options + +2001-01-31 Andrei Zmievski <andrei@php.net> + + * NEWS: *** empty log message *** + + * Smarty.addons.php + index.php: Added ability to pass 'options' attribute to html_options. + + * Smarty.addons.php + Smarty.class.php + docs.sgml + index.php + templates/index.tpl + Config_File.class.php + NEWS + README: Reworking, simplifying, and speeding up cache implementation. + Fixing the infelicity where you couldn't have '|' and ':' inside + quoted modifier arguments. + +2001-01-31 Monte Ohrt <monte@ispi.net> + + * Smarty.class.php + index.php + templates/index.tpl: removed DEBUG lines + +2001-01-30 Monte Ohrt <monte@ispi.net> + + * Smarty.class.php: changed default expire to 3600 + + * Config_File.class.php + NEWS + README + Smarty.addons.php + Smarty.class.php: updated version numbers + + * docs.sgml + NEWS + Smarty.class.php: + added caching, force compile, force cache, misc performance updates + +2001-01-30 Andrei Zmievski <andrei@php.net> + + * NEWS: *** empty log message *** + + * Smarty.class.php + templates/index.tpl: Remove debug message. + + * Smarty.class.php + templates/index.tpl: Fixing the compile directory mayhem... + + * Smarty.class.php: + Fix problem with {strip} around {section} and {include} + + * Smarty.addons.php: *** empty log message *** + +2001-01-29 Monte Ohrt <monte@ispi.net> + + * FAQ + NEWS + README + Smarty.class.php: fixed PHP_VERSION check, misc doc updates + + * index.php + Config_File.class.php + NEWS + QUICKSTART + README + Smarty.addons.php + Smarty.class.php + docs.sgml: updated for 1.2.1 compile_dir changes, misc doc updates + +2001-01-26 Monte Ohrt <monte@ispi.net> + + * BUGS + README: update BUGS and README files + + * FAQ: updated FAQ + + * Config_File.class.php + FAQ + NEWS + README + Smarty.addons.php + docs.sgml + templates/index.tpl + AUTHORS: update again + +2001-01-26 Andrei Zmievski <andrei@php.net> + + * docs.sgml + NEWS + README + Smarty.class.php + templates/index.tpl: *** empty log message *** + + * Smarty.class.php + index.php + templates/index.tpl: Added ability to index by key. + +2001-01-25 Monte Ohrt <monte@ispi.net> + + * NEWS: update changelog + + * README + Smarty.addons.php + Smarty.class.php + docs.sgml + AUTHORS: updated versions to 1.1.0 + + * docs.sgml + templates/index.tpl + Config_File.class.php + Smarty.addons.php + Smarty.class.php: update copyright notice + + * Config_File.class.php + Smarty.addons.php + Smarty.class.php + docs.sgml: added misc info + +2001-01-24 Monte Ohrt <monte@ispi.net> + + * Smarty.addons.php + index.php + templates/index.tpl + Config_File.class.php: initial commit + +2001-01-23 Monte Ohrt <monte@ispi.net> + + * docs.sgml: fix typo + +2001-01-22 Monte Ohrt <monte@ispi.net> + + * doc.sgm + docs.sgml: updated docs, renamed file + + * FAQ: updated FAQ + + * NEWS + README: updated Changelog and Readme + + * doc.sgm: updated doc.sgm error + + * AUTHORS + COPYING + INSTALL + NEWS + QUICKSTART: misc doc changes, added AUTHORS, COPYING + +2001-01-22 Andrei Zmievski <andrei@php.net> + + * NEWS + templates/index.tpl: *** empty log message *** + + * Smarty.class.php + templates/index.tpl: + Fixed bug that wouldn't let you do specify non-array values for 'loop' + attribute. + +2001-01-22 Monte Ohrt <monte@ispi.net> + + * QUICKSTART: updated QUICKSTART + + * BUGS + FAQ + INSTALL + README + doc.sgm: added BUGS and INSTALL, updated docs, FAQ, README + +2001-01-21 Monte Ohrt <monte@ispi.net> + + * FAQ + doc.sgm: updates to FAQ and docs + +2001-01-19 Monte Ohrt <monte@ispi.net> + + * FAQ: initial commit of FAQ + + * QUICKSTART + README + doc.sgm + index.php: + updated README, doc.sgm with preg_replace() parameter issue. also removed "./" from index.php file + + * NEWS: initial commit of changelog + + * doc.sgm + QUICKSTART: update quickstart text + +2001-01-19 Andrei Zmievski <andrei@php.net> + + * Smarty.class.php: Fix the compiled template check. + +2001-01-18 Andrei Zmievski <andrei@php.net> + + * doc.sgm: *** empty log message *** + +2001-01-18 Monte Ohrt <monte@ispi.net> + + * index.php + templates/index.tpl + QUICKSTART + Smarty.addons.php + Smarty.class.php + doc.sgm: update changes + +2001-01-18 Andrei Zmievski <andrei@php.net> + + * QUICKSTART + Smarty.addons.php: *** empty log message *** + +2001-01-18 Monte Ohrt <monte@ispi.net> + + * QUICKSTART + doc.sgm: add QUICKSTART, update docs for default modifier + + * Smarty.addons.php + Smarty.class.php: added default modifier + + * README + Smarty.addons.php + Smarty.class.php + doc.sgm + templates/index.tpl: added dislaimers + +2001-01-18 Andrei Zmievski <andrei@php.net> + + * Smarty.class.php: *** empty log message *** + +2001-01-16 Andrei Zmievski <andrei@php.net> + + * Smarty.class.php + templates/index.tpl: Implement 'div by'. + +2001-01-12 Monte Ohrt <monte@ispi.net> + + * doc.sgm: update docs + + * doc.sgm: doc changes + + * doc.sgm: update docs + +2001-01-12 Andrei Zmievski <andrei@php.net> + + * Smarty.class.php + doc.sgm: *** empty log message *** + + * Smarty.class.php: Fix template traversal. + +2001-01-11 Andrei Zmievski <andrei@php.net> + + * Smarty.class.php: *** empty log message *** + +2001-01-09 Andrei Zmievski <andrei@php.net> + + * Smarty.addons.php + Smarty.class.php: *** empty log message *** + +2001-01-09 Monte Ohrt <monte@ispi.net> + + * doc.sgm: update manual + +2001-01-05 Monte Ohrt <monte@ispi.net> + + * doc.sgm + Smarty.addons.php: commit changes + +2001-01-04 Monte Ohrt <monte@ispi.net> + + * doc.sgm + templates/index.tpl + Smarty.class.php: update changes + + * index.php + Smarty.addons.php + doc.sgm: add documentation + +2001-01-02 Monte Ohrt <monte@ispi.net> + + * index.php + templates/index.tpl + Smarty.addons.php + Smarty.class.php: prepend insert_ to insert tag functions + + * Smarty.class.php + index.php + templates/index.tpl: remove caching logic + + * README + Smarty.class.php + index.php + templates/index.tpl: update changes + +2000-12-27 Andrei Zmievski <andrei@php.net> + + * Smarty.class.php + templates/header.tpl + templates/index.tpl + Smarty.addons.php: *** empty log message *** + +2000-12-21 Andrei Zmievski <andrei@php.net> + + * Smarty.class.php: Fix access to template variables. + + * Smarty.class.php + templates/header.tpl: + Added support for passing variables to included files. + +2000-12-20 Andrei Zmievski <andrei@php.net> + + * Smarty.class.php: + Added support for inserting results of function processing a template. + +2000-12-18 Monte Ohrt <monte@ispi.net> + + * Smarty.class.php: added string_format function + + * Smarty.addons.php: update format to string_format + + * README + Smarty.addons.php + Smarty.class.php: added format addon function + +2000-12-13 Andrei Zmievski <andrei@php.net> + + * Smarty.addons.php + Smarty.class.php: Fix sectionelse. + +2000-12-07 Andrei Zmievski <andrei@php.net> + + * Smarty.addons.php + Smarty.class.php + templates/index.tpl: *** empty log message *** + +2000-12-04 Andrei Zmievski <andrei@php.net> + + * Smarty.class.php + templates/index.tpl + Smarty.addons.php: *** empty log message *** + +2000-11-27 Andrei Zmievski <andrei@php.net> + + * templates/index.tpl + Smarty.class.php: *** empty log message *** + +2000-11-22 Andrei Zmievski <andrei@php.net> + + * Smarty.class.php + templates/index.tpl: *** empty log message *** + +2000-11-21 Andrei Zmievski <andrei@php.net> + + * Smarty.class.php + templates/index.tpl + Smarty.addons.php: *** empty log message *** + +2000-11-20 Andrei Zmievski <andrei@php.net> + + * templates/index.tpl + Smarty.class.php + Smarty.addons.php + index.php: *** empty log message *** + + * Smarty.class.php + index.php + templates/index.tpl: Made sections work mostly. + +2000-11-19 Andrei Zmievski <andrei@php.net> + + * index.php + templates/index.tpl: *** empty log message *** + +2000-11-17 Andrei Zmievski <andrei@php.net> + + * Smarty.class.php + Smarty.addons.php: *** empty log message *** + +2000-11-15 Monte Ohrt <monte@ispi.net> + + * index.php + templates/footer.tpl + templates/header.tpl + templates/index.tpl: added template files to cvs dir + + * README + Smarty.class.php: commit changes + +2000-08-08 Monte Ohrt <monte@ispi.net> + + * README + Smarty.class.php: update include path bug + + * README: add README file + + * Smarty.class.php: New file. + + * Smarty.class.php: initial import + diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/FAQ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/FAQ new file mode 100644 index 00000000..1860678e --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/FAQ @@ -0,0 +1,284 @@ +QUESTION INDEX +-------------- + +GENERAL + +Q: What is Smarty? +Q: What's the difference between Smarty and other template engines? +Q: What do you mean "Compiled PHP Scripts" ? +Q: Why can't I just use PHPA (http://php-accelerator.co.uk) or Zend Cache? +Q: Why does smarty have a built in cache? Wouldn't it be better to handle this + in a separate class? +Q: Is Smarty faster than <insert other PHP template engine>? +Q: How can I be sure to get the best performance from Smarty? +Q: Do you have a mailing list? +Q: Can you change the mailing list so reply-to sends to the list and not the + user? + +TROUBLESHOOTING + +Q: Smarty doesn't work. +Q: I get the following error when running Smarty: + Warning: Smarty error: problem creating directory "templates_c/239/239105369" + in /path/to/Smarty.class.php on line 542 +Q: I get the following error when running Smarty: + Warning: Wrong parameter count for preg_replace() in + Smarty.class.php on line 371 +Q: I get this error when passing variables to {include}: + Fatal error: Call to undefined function: get_defined_vars() in + /path/to/Smarty/templates_c/index.tpl.php on line 8 +Q: I get PHP errors in my {if} tag logic. +Q: I'm changing my php code and/or templates, and my results are not getting + updated. +Q: I'm running Windows 2000 and I get blank content. My compiled PHP files are + also zero length. +Q: The template goes into an infinite loop when I include included templates + that pass local variables +Q: Javascript is causing Smarty errors in my templates. +Q: I get "SAFE MODE Restriction in effect. ..."-errors when running smarty. + +MISC + +Q: Can I use Macromedia's Dreamweaver to edit my templates? +Q: Dreamweaver is urlencoding the template delimiters when they are in a SRC or + HREF link. How do I get around this? + +HOWTO + +Q: How do I generate different cache files per template based on arguments + passed to the page? +Q: How do I pass a template variable as a parameter? {function param={$varname}} + does not work. +Q: How do I include cached template(s) within a non-cached template? + + +GENERAL +------- + +Q: What is Smarty? +A: Smarty is a template engine for PHP... but be aware this isn't just another + PHP template engine. It's much more than that. + +Q: What's the difference between Smarty and other template engines? +A: Most other template engines for PHP provide basic variable substitution and + dynamic block functionality. Smarty takes a step further to be a "smart" + template engine, adding features such as configuration files, template + functions, variable modifiers (see the docs!) and making all of this + functionality as easy as possible to use for both programmers and template + designers. Smarty also compiles the templates into PHP scripts, eliminating + the need to parse the templates on every invocation, making Smarty extremely + scalable and manageable for large application needs. + +Q: What do you mean "Compiled PHP Scripts" ? +A: Smarty reads the template files and creates PHP scripts from them. Once + these PHP scripts are created, Smarty executes these, never having to parse + the template files again. If you change a template file, Smarty will + recreate the PHP script for it. All this is done automatically by Smarty. + Template designers never need to mess with the generated PHP scripts or even + know of their existance. (NOTE: you can turn off this compile checking step + in Smarty for increased performance.) + +Q: Why can't I just use PHPA (http://php-accelerator.co.uk) or Zend Cache? +A: You certainly can, and we highly recommend it! What PHPA does is caches + compiled bytecode of your PHP scripts in shared memory or in a file. This + speeds up server response and saves the compilation step. Smarty creates PHP + scripts, which PHPA will cache nicely. Now, Smarty's built-in cache is + something completely different. It caches the _output_ of the template + contents. For example, if you have a template that requires several database + queries, Smarty can cache this output, saving the need to call the database + every time. Smarty and PHPA (or Zend Cache) complement each other nicely. If + performance is of the utmost importance, we would recommend using one of + these with any PHP application, using Smarty or not. As you can see in the + benchmarks, Smartys performance _really_ excels in combination with a PHP + accelerator. + +Q: Why does Smarty have a built in cache? Wouldn't it be better to handle this + in a separate class? +A: Smarty's caching functionality is tightly integrated with the template + engine, making it quite a bit more flexible than a simple caching wrapper. + For instance, you can cache select portions of a template page. Let's say + you have a polling box on your site. With Smarty, you can leave the poll + dynamic and cache the rest of the page. You can also pass templates + multiple cache ids, meaning that a template can have several caches + depending on URL, cookies, etc. + +Q: Is Smarty faster than <insert other PHP template engine>? +A: See the benchmark page for some performance comparisons. Smarty's approach + to templates is a bit different from some languages: it compiles templates + into PHP scripts instead of parsing them on each invocation. This usually + results in great performance gains, especially with complex templates. + Coupled with the built-in caching of Smarty templates, the performance is + outstanding. + +Q: How can I be sure to get the best performance from Smarty? +A: Be sure you set $compile_check=false once your templates are initially + compiled. This will skip the unneeded step of testing if the template has + changed since it was last compiled. If you have complex pages that don't + change too often, turn on the caching engine and adjust your application so + it doesn't do unnecessary work (like db calls) if a cached page is + available. See the documentation for examples. + +Q: Do you have a mailing list? +A: We have a few mailing lists. "general" for you to share your ideas or ask + questions, "dev" for those interested in the development efforts of Smarty, + and "cvs" for those that would like to track the updates made in the cvs + repository. + + send a blank e-mail message to: + smarty-general-subscribe@lists.php.net (subscribe to the general list) + smarty-general-unsubscribe@lists.php.net (unsubscribe from the general list) + smarty-general-digest-subscribe@lists.php.net (subscribe to digest) + smarty-general-digest-unsubscribe@lists.php.net (unsubscribe from digest) + smarty-dev-subscribe@lists.php.net (subscribe to the dev list) + smarty-dev-unsubscribe@lists.php.net (unsubscribe from the dev list) + smarty-cvs-subscribe@lists.php.net (subscribe to the cvs list) + smarty-cvs-unsubscribe@lists.php.net (unsubscribe from the cvs list) + You can also browse the mailing list archives at + http://marc.theaimsgroup.com/?l=smarty&r=1&w=2 + + + +Q: Can you change the mailing list so Reply-To sends to the list and not the + user? +A: Yes we could, but no we won't. Use "Reply-All" in your e-mail client to send + to the list. http://www.unicom.com/pw/reply-to-harmful.html + +TROUBLESHOOTING +--------------- + +Q: Smarty doesn't work. +A: You must be using PHP 4.0.6 or later if you use any version of Smarty + past 2.0.1. Read the BUGS file for more info. + +Q: I get the following error when running Smarty: + Warning: Smarty error: problem creating directory "templates_c/239/239105369" + in /path/to/Smarty.class.php on line 542 +A: Your web server user does not have permission to write to the templates_c + directory, or is unable to create the templates_c directory. Be sure the + templates_c directory exists in the location defined in Smarty.class.php, + and the web server user can write to it. If you do not know the web server + user, chmod 777 the templates_c directory, reload the page, then check the + file ownership of the files created in templates_c. Or, you can check the + httpd.conf (usually in /usr/local/apache/conf) file for this setting: + User nobody + Group nobody + +Q: I get the following error when running Smarty: Warning: Wrong parameter + count for preg_replace() in Smarty.class.php on line 371 +A: preg_replace had a parameter added in PHP 4.0.2 that Smarty + requires. Upgrade to at least 4.0.6 to fix all known PHP issues with + Smarty. + +Q: I get this error when passing variables to {include}: + Fatal error: Call to undefined function: get_defined_vars() in + /path/to/Smarty/templates_c/index.tpl.php on line 8 +A: get_defined_vars() was added to PHP 4.0.4. If you plan on passing + variables to included templates, you will need PHP 4.0.6 or later. + +Q: I get PHP errors in my {if} tag logic. +A: All conditional qualifiers must be separated by spaces. This syntax will not + work: {if $name=="Wilma"} You must instead do this: {if $name == "Wilma"}. + The reason for this is syntax ambiguity. Both "==" and "eq" are equivalent + in the template parser, so something like {if $nameeq"Wilma"} wouldn't be + parsable by the tokenizer. + +Q: I'm changing my php code and/or templates, and my results are not getting + updated. +A: This may be the result of your compile or cache settings. If you are + changing your php code, your templates will not necessarily get recompiled + to reflect the changes. Use $force_compile during develpment to avoid these + situations. Also turn off caching during development when you aren't + specifically testing it. You can also remove everything from your + compile_dir and cache_dir and reload the page to be sure everything gets + regenerated. + +Q: I'm running Windows 2000 and I get blank content. My compiled PHP files are + also zero length. +A: There seems to be a problem with some W2k machines and exclusive file + locking. Comment out the flock() call in _write_file to get around this, + although be aware this could possibly cause a problem with simultaneous + writes to a file, especially with caching turned on. NOTE: As of Smarty + 1.4.0, a workaround was put in place that should solve this. + +Q: The template goes into an infinite loop when I include included templates + that pass local variables +A: This was fixed in 1.3.2 (new global attribute) + +Q: Javascript is causing Smarty errors in my templates. +A: Surround your javascript with {literal}{/literal} tags. See the docs. + +Q: I get "SAFE MODE Restriction in effect. ..."-errors when running smarty. +A: Use $smarty->use_sub_dirs = false when running php in safe mode. + +MISC +---- + +Q: Can I use Macromedia's Dreamweaver to edit my templates? +A: Certainly. You might want to change your tag delimiters from {} to something + that resembles valid HTML, like <!--{ }--> or <{ }> or something similar. + This way the editor won't view the template tags as errors. + +Q: Dreamweaver is urlencoding the template delimiters when they are in a SRC or + HREF link. How do I get around this? +A: In Edit - Properties - Rewrite HTML you can specify if Dreamweaver should + change special letters to %-equivalent or not. The default is on which + produces this error. + +HOWTO +----- + +Q: How do I generate different cache files per template based on arguments + passed to the page? +A: Use your $REQUEST_URI as the cache_id when fetching the page: + + global $REQUEST_URI; // if not already present + $smarty->display('index.tpl',$REQUEST_URI); + + This will create a separate cache file for each unique URL when you call + index.tpl. See the documentation for display() and fetch() + +Q: How do I pass a template variable as a parameter? {function param={$varname}} + does not work. +A: {function param=$varname} (You cannot nest template delimiters.) + +Q: How do I include cached template(s) within a non-cached template? +A: One way to do it: + + $smarty->caching = true; + $tpl1 = $smarty->fetch("internal1.tpl"); + $tpl2 = $smarty->fetch("internal2.tpl"); + $tpl3 = $smarty->fetch("internal3.tpl"); + + $smarty->assign("tpl1_contents",$tpl1); + $smarty->assign("tpl2_contents",$tpl2); + $smarty->assign("tpl3_contents",$tpl3); + + $smarty->caching = false; + $smarty->display('index.tpl'); + + index.tpl + --------- + + <table> + <tr> + <td>{$tpl1_contents}</td> + <td>{$tpl2_contents}</td> + <td>{$tpl3_contents}</td> + </tr> + </table> + + + + + Another approach: + + You could write a custom insert function to fetch your internal + templates: + + <table> + <tr> + <td>{insert name=fetch_tpl tpl="internal1.tpl"}</td> + <td>{insert name=fetch_tpl tpl="internal2.tpl"}</td> + <td>{insert name=fetch_tpl tpl="internal3.tpl"}</td> + </tr> + </table> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/INSTALL b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/INSTALL new file mode 100644 index 00000000..f622ee8f --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/INSTALL @@ -0,0 +1,29 @@ +REQUIREMENTS: + +Smarty requires PHP 4.0.6 or later. +See the on-line documentation for complete install instructions. + +INSTALLATION (quick): + +* copy the files under the libs/ directory to a directory that is in your PHP + include_path, or set the SMARTY_DIR constant and put them in this directory. + (if you upgrade from versions before 2.5.0 be aware that up to Smarty 2.4.2 + all necessary files where in the distribution's root directory, but are now + in libs/.) + +* for each application using Smarty, create a "templates", "configs", and a + "templates_c" directory, be sure to set the appropriate directory settings in + Smarty for them. If they are located in the same directory as your + application, they shouldn't need to be modified. Be sure the "templates_c" + directory is writable by your web server user (usually nobody). chown + nobody:nobody templates_c; chmod 700 templates_c You can also chmod 777 this + directory, but be aware of security issues for multi-user systems. If you are + using Smarty's built-in caching, create a "cache" directory and also chown + nobody:nobody. + +* setup your php and template files. A good working example is in the on-line + documentation. + +* TECHNICAL NOTE: If you do not have access to the php.ini file, you can change + non-server settings (such as your include_path) with the ini_set() command. + example: ini_set("include_path",".:/usr/local/lib/php"); diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/NEWS b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/NEWS new file mode 100644 index 00000000..6de5e691 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/NEWS @@ -0,0 +1,733 @@ +Version 2.6.0 (Nov 19, 2003) +---------------------------- + + - move Smarty::quote_replace() to Smarty_Compiler::_quote_replace() (messju) + - remove import of of attributes of {include_php} to php's namespace. + use $params[name] instead (messju) + +Version 2.6.0-RC3 (Nov 13, 2003) +-------------------------------- + + - fix handling of $var.key inside [] (messju) + - fix handling of assign inside {insert}-tags (messju) + - fix handling if [...] inside triple-quotes in config-files (messju) + - fix handling of simple-math-operators inside modifiers (Dominik, messju) + - fix handling of trailing-slashes in open_basedir in + smarty_core_create_dir_structure() (packman, messju) + +Version 2.6.0-RC2 (Oct 8, 2003) +------------------------------- + + - apply modifiers only once to section-loop and foreach-from attrs (messju) + - remove use of _smarty_cached_paths-files (messju) + - remove Smarty::_plugin_implementation_exists() - use is_callable() (messju) + - ignore {strip}/{/strip) inside {strip}-blocks (messju) + - fixed removal of leading/trailing newlines in {strip}-blocks (messju) + - fixed proper escaping of " and ' with escape:javascript (messju) + - fixed bug in traversal of $smarty->plugins_dir-array. now the + first matching plugin is taken (messju) + - moved {strip} back into the compiler (messju) + - fixed config_load: handling of section-attribute and use of + multiple config-files in one template (atu, messju) + +Version 2.6.0-RC1 (August 11, 2003) +----------------------------------- + + - fixed status-header for cache_modified_check under cgi-sapi (messju) + - added optional parameter $cache_attrs to register_function() and + register_block(). $cache_attrs is an array containing attribute- + names that should be cached on calls to functions that have + $cacheable set to false. (messju) + - enabled registration of class-methods as callbacks for the register_*- + functions (use: array('classname', 'method_name')) as callback) (messju) + - added filepath caching (Monte) + - added optional assign-attribute to {capture}-tag (messju) + - added $cacheable-parameter to register_compiler_function() (messju) + - added $cacheable-parameter with default=true to register_function() + and register_block() (messju) + - add math speedup to core (Dominik, Monte) + - fix newlines for tags without template output (Monte) + - added config-option "request_use_auto_globals" to make auto-globals be + used as request vars instead of HTTP_*_VARS (messju) + - speed up config_load, simplify compiling (Monte) + - added block-methods for registered objects (Bharat Mediratta, messju) + - ignore one char resource names like c:foo.tpl (Monte) + - added default_resource_type feature (Monte) + - fix bug where config file starts with hidden section (boots, Monte) + - add discrete error checking pertaining to $cache_dir + and $compile_dir, their existance and writability (Monte) + - fixed behaviour of start=... for {counter} (messju) + - fixed assign for {counter} (messju) + - added params vdir, hdir and inner to html_table to allow looping + over the data in various directions (messju) + - allow spaces in literal tags (Paul Lockaby, Monte) + - speed up compiled templates, hardcode plugin filepaths + instead of dynamically calculate at runtime. (Monte) + - abstract many core components from Smarty.class.php, + speeding up core class instantiation (Monte) + - fixed bug in _create_dir_structure() when used with open_basedir- + restriction and relative paths (messju) + - use DIRECTORY_SEPARATOR exclusively, keep DIR_SEP for BC (Monte) + - changed "link" to "href" in html_image. "link" is still working + but deprecated (messju) + - html_image always renders an alt-tag now (default alt="") (messju) + - fixed assign attribute for multiple counters (messju) + - added simple math operators to variables (Monte) + - enabled array(&$obj. 'source', 'timestamp', 'secure', 'trusted') + as callback for register_resource() (messju); + - enabled array(&$obj, 'method') as callback for + $default_template_handler_func (messju) + - remove unnecessary close/open tags from compiled templates + (Monte) + - fixed errornous creation of '//' in image_path in html_image (messju) + - fix escapement of special chars for key vals in debug + console (Monte) + - fixed debug timing logic for config_load (Tom Sommer, Monte) + - all in-code doc comments converted to phpDocumentor format (Greg) + - moved strip from smarty core to plugin (Monte) + - moved config_load from smarty core to plugin (Monte) + - added &$repeat-parameter to block-functions (messju) + - enabled hex-constants in function.math.php (messju) + - enabled hex-constants (0x...) as function-attributes, inside if-statements + and as modifier-parameters (messju) + - fixed bug with passing $smarty as reference in Smarty.compiler.class + (messju) + - corrected output with {strip} and PHP tag newlines (Monte) + - added possibility to register function-callbacks as "array(&$obj, 'method)" + this affects register_function(), -block, -compiler_function, -modifier, + -prefilter, -postfilter, -outputfilter-functions() and $cache_handler_func + (messju) + - added <labels> to html_checkboxes and html_radios (Philippe, messju) + - added "labels"-options to turn off labels in html_checkboxes and _radios + (messju) + +Version 2.5.0 (April 11, 2003) +------------------------------ + + - fixed bug with default modifier when passing integer 0 + (Monte) + - change backtic syntax from $`foo` to `$foo` (Monte) + - recognize $foo[][] syntax inside embedded quotes without + backtics (Monte) + - name=123 is passed as an integer (not a string) to plugins now (messju) + - $length is now propagated to sub-values in debug_print_var (messju) + +Version 2.5.0-RC2 (March 26, 2003) +---------------------------------- + + - made clear_cache() ignore compile_id, when clearing cache-groups (this + is when no $tpl_file is supplied) (messju) + - made onmouseout XHTML-compliant in function.popup.php (messju) + - applied local-var-naming-scheme to fetch() (messju) + - renamed $localvars to $_localvars in cache-file-handling-functions, + added _get_auto_id()-function (messju) + - swapped compile_id and cache_id in read_cache_file and write_cache_file + (messju) + - reverted patch for cache-file-handling (messju) + - made html_radios and html_checkboxes accept "selected" instead + of "checked" optionally. (messju) + - made compile_id ignored in clear_cache, made order of + auto_file_name $cache_id.$compile_id again, applied the the new + variable-naming-scheme for cache_file_handing functions (messju) + - removed notice of undefined var in _rm_auto() (messju) + - added warning message when an array is passed as + the "checked" value of html_radios (Monte) + - fixed errormessage in _compile_smarty_ref() (messju) + - updated docs for html_image "name" -> "file" (messju) + - fixed bug with html_options-optgroups (Nichlas Löfdahl, messju) + - cleaned up calls to readdir() (messju) + - fixed bug with passing multiple modifiers to a parameter + (Monte) + - updated docs for html_checkboxes, html_options and html_radios (messju) + - fixed wrong default "name" attribute for html_options (messju) + - html_checkboxes now expect the options as attribute "options" instead + of "checkboxes. html_radios expect "options" instead of "radios". + cleaned up indentiation (messju) + - fixed too greedy str_replace in trimwhitespace outputfilter (messju) + - html_checkboxes and html_radios passthru all unknown paramters now + additionally their output is now XHTML compliant (messju) + - html_options passthru all unknown paramters now (messju) + - fix link functionality of html_image, also make + output XHTML compatible (Hinrich Donner, Monte) + - append "@" to default modifier vars/args + supress possible warnings (Monte) + - fix problem with escaped double quotes (Monte) + - fix html_radios to not return an array (Monte) + - fixed length in modifier.truncate.php (messju) + - fixed handling of '$'-signs in trimwhitespace outputfilter (messju) + - fix bug that makes config files recompile every time + (Nagger, Monte) + - add dpi functionality to html_image, change "name" + parameter to "file" (Thomas Shulz, Monte) + - fix height/width parameter index in html_image (Gerard, + Monte) + - get rid of unsetting name and script attributes + to insert tag (Thomas Schulz, Monte) + - changed argument order of string_format modifier back, + was right in the first place (Monte) + +Version 2.5.0-RC1 (March 5, 2003) +--------------------------------- + + - fixed notice in popup function (Nagger, Monte) + - fix "once" var compiling for include_php (Monte) + - added nl2br modifier to distribution (Monte) + - added html_image to distribution (Monte) + - added cat modifier to distribution (Monte) + - added html_table to distribution (Monte) + - added << >> <> support to if statments (SMK, Monte) + - fix _assign_smarty_interface to not overwrite keys + other than 'request' (Jerome Poudevigne, Monte) + - added html_checkboxes to distribution (Christopher Kvarme, Monte) + - added html_radios to distribution (Christopher Kvarme, Monte) + - fixed string_format modifier args (wrong order) (Paul + Lockaby, Monte) + - use tmp file for file writes, avoid file lock race (Monte) + - support syntax "$`smarty.config.foo`.tpl" for embedded + vars in quotes, and allow full dollar var syntax (Monte) + - add $smarty.config.varname variable for accessing config vars (Paul + Lockaby, Monte) + - silence PHP warnings in function.fetch.php (Eduardo, + Monte) + - added get_config_vars(), same basic functionality as + get_template_vars() (Monte) + - update get_template_vars() to be able to get + individual vars (Monte) + - fix minor logic in _fetch_template_info (Dennis Gearon, + Monte) + - fix cache groups with compile_id set (Monte) + - add support for merging appended vars (messju, Monte) + - allow null as function attribute value + (André Rabold, Monte) + - support $foo->bar[index] syntax (Monte) + - add get_registered_object function (messju, Monte) + - treat unrecognized param attribute syntax as string (Monte) + - support $smarty.const.$foo syntax (messju, Monte) + - remove E_NOTICE warnings from debug.tpl, + escape modifier (Kanstantin, Monte) + - don't count non-ascii chars in count_words modifier + (Kanstantin, Monte) + - clean up param calls to _parse_var and _parse_attrs (Monte) + - define $template_source var, elude possible warning + (Monte) + - fix syntax problem with evaluating PHP constants (Monte) + - add @ and === as valid if statement tokens (Monte) + - enable error messages for config_load errors, + use $this->config_class for loading class name (Monte) + - fix html_options to not escape already escaped entities (Monte) + - send Last-Modified header on cache creation (Monte) + - check strict syntax of function attributes (Monte) + - dropped support for modifers on object parameters, + added support for objects as modifier parameters (Monte) + - fixed bug with decimal numbers in if statements (Monte) + +Version 2.4.2 (Feb 11, 2003) +---------------------------- + - support embedded variables in objects (Monte) + - fix bug with objects with no properties (M Mohr, Monte) + - support full dollar var syntax in quoted text (Monte) + - fixed bug in $smarty.const.FOO introduced in 2.4.1 (M + Mohr, Monte) + +Version 2.4.1 (Feb 6, 2003) +--------------------------- + + - ignore case in IF statements (Rainer Collet, Monte) + - treat undefined constants as null (Ferdinand Beyer, Monte) + - fix problem with inserts and nested fetches + (Rainer Collet, Monte) + - added support for passing params to include_php + (Tim Riley, Monte) + - added support for math operators in if statements (Monte) + - added support for $foo->bar[$x].blah syntax (Monte) + +Version 2.4.0 (Feb 2, 2003) +--------------------------- + + - fix known problems with php tag handling in templates + (recursion, echoing xml tags) (Monte) + - add support for object registration (Monte) + - add debug template to secure_dir, add template_dir + to secure_dir by default (Ferdinand Beyer, Monte) + - added support for assigned object access (Monte) + - fixed bug with directories named '0' (Frank Bauer, Monte) + - add javascript parameter to escape modifier (Monte) + - added calling function line numbers to syntax error + messages in compiler (Monte) + - added support for modifiers to function calls (Monte) + - support return value for custom functions + instead of echoing (but echo still works) (Monte) + - added direct access to constants + via $smarty.const.FOO (Monte) + - added support for passing modifiers + to static values (Monte) + - fix up regex code in compiler, more accurate and + maintainable (Monte) + - added day_value_format to html_select_date (Marcus + Bointon, Monte) + - assigned variables are no longer in global + namespace, saving extract() calls and speeding + up fetch() and display() linearly with no. of + assigned variables (Monte) + - added trimwhitespace output filter to dist. (Monte) + - fix popup function to allow newlines in text (Monte) + - escape html entities in html_options (Monte) + - fixed bug with label for html_options (Monte) + - added config_load API function (Monte) + - added caching to config file loading (Monte) + - added "extra" parameter to mailto function (Monte, + Massimiliano Perantoni) + - added mailto plugin to dist. (Monte) + +Version 2.3.1 (Nov 19, 2002) +---------------------------- + + - added optgroup support to html_options (Monte, Robert + Amos) + - set mtime on compile files so they match source + files (Monte, Peter Bowen) + - added proper support for open_basedir setting + (Monte, Alessandro Astarita) + - added strip variable modifier, updated docs (Monte) + - fixed access to $smarty.x variables as arrays. (Andrei) + - fixed errors with example setup docs (Monte, Matthew + Hagerty) + - added textformat block function (Monte) + +Version 2.3.0 (Aug 7, 2002) +--------------------------- + + - added assign_by_ref() and append_by_ref() functions + (Bob Silva, Monte) + - changed default warning type for plugin errors from + E_USER_WARNING to E_USER_ERROR (Monte) + - added $all_extra, $hour_extra, $minute_extra, + $second_extra and $meridian_extra parameters to + html_select_time function (Rainer Collet, Monte) + - update debug console to print objects (Simon Willison, + Monte) + - fix Config_File class to not error when there are no + sections (Peter Kmet, Monte) + - add default modifier logic (Monte) + - updated popup_init to be xhtml compliant (Tom Oram, Monte) + - fix filename bug with windows (Gary Loescher, Monte) + - add ability to supply expire time in seconds when clearing + cache or compile files (Monte) + - add {debug} plugin to distribution (Monte) + - fixed bug with insert tags, loading from "script" attribute + when caching is enabled (Monte) + - fix bug with debug_tpl file path with Windows (.SMK., Monte) + - fix append() function with string/array problem (Monte) + +Version 2.2.0 (July 11, 2002) +----------------------------- + + - make debug.tpl work with any delimiter (Monte) + - change logic in assign() and append() to test var names + against != '' instead of empty() (Monte) + - fix PHP notice in append() function (Monte) + - allow $plugins_dir to be an array of directories + (Andreas Kossmeier, Monte) + - move debug.tpl to SMARTY_DIR, add to constructor (Monte) + - fixed warning message in function.assign_debug_info (Monte) + - fixed $template_dir, $compile_dir, $cache_dir, $config_dir, + $plugin_dir to respect include_path (Monte) + - fixed warning message with output filter array (Monte) + - add optional 2nd parameter to date_format, used as + the default date if the passed date is empty (Monte) + - gave $reset a default value in cycle plugin (Monte) + - fixed warnings with html_select_date and timestamp + functions (Monte) + - added support for sub directory exlusion format (Monte) + - added support for grouping by cache_id, compile_id + and segments thereof (Monte) + - changed cache and compile files to human readable + format (Monte) + - remove overlib.js file from distribution (Monte) + - fixed bug with 304 Not Modified response sending + content (Monte) + - fixed cycle function to respect delimiter after + initial setting (Monte) + - update $GLOBALS references to work properly with + track_globals settings (Michal Prinke, Monte) + - fixed bug in math function with call to assign + (Grigory V. Kareev, Monte) + - optimized for loops with count() function calls (Monte) + - add month_value_format attribute to html_select_date + plugin (Gary Loescher, Monte) + - made it possible to use simple variables inside [] for + indexing. (Andrei) + - added "once" attribute to {include_php}. (Monte) + +Version 2.1.1 +------------- + - added cycle function. (Monte) + - fixed bug with resource testing, and include_path. (Monte) + - fixed a bug with register_outputfilter function. (Monte) + +Version 2.1.0 +------------- + + - introduced output filters. (Andrei) + - changed the way filters are loaded, added load_filter() + API function and $autoload_filters variable. (Andrei) + - added caching logic for expire times per cache file + (Norbert Rocher, Monte) + - fixed html_select_date when field separator is "/" + (Roberto Berto, Monte) + - added YYYY-MM-DD format support to html_select_date + (Jan Rosier, Monte) + - fixed cache_lifetime logic bug, also made -1 = never + expire (Monte) + - fixed directory separator issue for Windows. (Andrei) + - added ability to use simple variables as array indices or + object properties. (Andrei) + - added ability to unregister pre/postfilters plugins at + runtime. (Andrei) + - added 'htmlall' attribute to escape modifier. (Monte) + - added template_exists() API function. (Andrei) + - fixed a problem with using dynamic values for 'file' + attribute of {include_php} tag. (Andrei) + - added $smarty.template variable. (Andrei) + - fixed several plugins that would not work if the plugin + directory was not the default one. (Andrei) + - implemented support for block functions. (Andrei) + - made it possible to assign variables in pre/postfilter + plugins. (Andrei) + +Version 2.0.1 +------------- + - rename plugin .make_timestamp.php to shared.make_timestamp.php. + (Monte) + - changed crc32() generated values, replace '-' with 'N'. (Monte) + - added support for +/- N syntax in html_select_date year values. + (Monte) + - fixed behavior of inserts with script attribute. (Andrei) + - fixed bug with $smarty.cookies and $smarty.server. (Andrei) + - wordwrap and indent are missing from 2.0 release, now fixed. + (Monte) + - removed show_info_header and show_info_include variables. (Monte) + +Version 2.0.0 +------------- + - added "eval" function plugin for evaluating variables as + templates. (Monte) + - removed $tpl_file_ext class variable, no longer used. (Monte) + - added "hex" and "hexentity" escape types to escape modifier. + (Monte) + - removed dependency on PEAR. (Andrei) + - update popup_init to accept src attribute. (Monte, Duncan Forrest) + - implemented several optimizations, speeding up Smarty + significantly in most cases. (Andrei,Monte) + - implemented plugin architecture. (Andrei) + - added wordwrap and indent modifiers. (Monte) + - added support for 'If-Modified-Since' headers for cached content. + (Monte) + - removed insert_tag_check class variable, no longer needed. (Monte) + - optimized cache fetches by scanning for insert tags only if they + exist. (Monte) + - fixed bugs in overlib. (Monte, Duncan Forrest) + - fixed a problem with compile_id usage. (Andrei) + - fixed problem with using assigned vars with {include_php ...} + filepath. (Monte) + +Version 1.5.2 +------------- + - added Smarty object as fifth argument for template resource functions. + (Monte) + - fixed a bug with incorrectly combined cache and compile id in + clear_cache(). (Andrei) + - fixed bug in smarty_make_timestamp introduced in PHP 4.1.0. (Monte) + - fixed bug with cached insert debug timing. (Monte) + - added 'script' attribute to {insert..} which specifies the script that + the insert function can be found in. (Andrei) + - added default template function handler. (Monte) + +Version 1.5.1 +------------- + - removed error message from the generic _read_file() method, the caller + should take care of that. (Andrei) + - fixed a bug with incorrectly combined cache and compile id. (Andrei) + +Version 1.5.0 +------------- + - added include_php built-in function, documented. (Monte) + - added trusted_dir functionality, documented. (Monte) + - consolidated secure_dir tests to one function. (Monte) + - prepended _smarty_ to variable names in fetch() class function to avoid + namespace conflicts. (Monte) + - introduced $compile_id class variable that can be used to set persistent + compile identifier across multiple display calls, documented. (Andrei) + - fixed bug with concatenated null cache and compile identifiers. (Andrei) + - added $smarty.section.* syntax for accessing section properties, + documented. (Andrei) + - added custom cache handling function ability, documented. (Monte) + - added assign attribute to include, include_php, insert, fetch, math, and + counter functions, documented. (Monte) + - fixed bug with fetch testing for local file when http address. (Monte) + - fixed bug with counter and skipval setting. (Monte) + - made {config_load ...} merge globals from each config file only once per + scope, thus avoiding several problems. (Andrei) + - added {foreach ...} tag that can be used to iterate through + non-sequential and associative arrays, documented. (Andrei) + - speeded up section property access a bit. (Andrei) + - removed $smarty variable from storage used by normal template variables, + to prevent any problems. (Andrei) + - fixed a bug that could cause parse error with quotes inside literal + blocks. (Andrei, Alexander Belonosov) + - added 'field_array' attribute to html_select_time function, documented. + (Andrei, Michael Caplan) + - documented {section} "max" attribute. (Monte) + - fixed notice message in Smarty_Compiler.class.php. (Monte) + - fixed bug with clear_cache introduced in 1.4.6, third parameter should + default to null. (Monte) + - updated Config_File class to support '\' path separator in OS/2. (Monte, + Francesco Cipriani) + - removed secure_ext setting (not used). (Monte) + - made cache reading process more efficient. (Monte) + - fixed bug, is_cached() now supports new 1.4.6 caching behavior. (Monte) + - update FAQ with mailing list Reply-To header FAQ. (Monte) + - supress error messages for fopen(), fix cache to regenerate if cache + file is not available (i.e. cluster race condition). (Monte) + - added index key example to QUICKSTART guide. (Monte) + +Version 1.4.6 +------------- + - fixed bug with {assign ...} when passing an empty value. (Monte) + - add more warning message fixes. (Monte, Tara Johnson) + - documentation updates. (Monte) + - update fetch function to give proper warning when fetching a non-readable + or non-existant file. (Monte) + - fixed problem with newline at the end of included templates (Monte, Andrei) + - added feature to regenerate cache if compile_check is enabled and an + involved template or config file gets modified. (Monte) + - added DEBUG execution times to included files: REQUIRES updated debug.tpl + file! (Monte) + - added support for hidden config variables that cannot be read by + templates. (Andrei) + - added execution time to DEBUG console, total and inserts. (Monte) + - fixed bug where DEBUG console would not appear with cached content. (Monte) + - added support for postfilter functions that are applied to compiled + template right after compilation. (Andrei) + - fixed the name of clear_compile_tpl() API function to clear_compiled_tpl. + (Andrei) + - added fix for removing comments so that the line numbers are reported + correctly in case of errors. (patch from Anders Janson) + - made html_options output xhtml compatible code. (Monte, Arnaud Limbourg) + +Version 1.4.5 +------------- + - update FAQ with index of questions at the top + - update overlib to 3.50, adjust addon code so that the overlib.js + file isn't modified, and not using the mini one. (Monte) + - added many more options to html_select_date. (Alexander Skwar, Andrei) + - added support for generating different compiled templates from the same + source template. (Hans-Peter Oeri, Andrei) + - modified Smarty to pass itself to insert functions as the second + parameter. (Andrei) + - modified Smarty to pass itself to prefilter functions as the second + parameter. (Andrei) + - fixed syntax error when including a non-existant template with security + enabled. (Monte) + - fixed comments handling to allow commenting out template blocks. (Andrei) + - implemented named capture buffers, with results accessible via + $smarty.capture.<name>. (Andrei) + - added ability to index arrays directly by numbers. (Andrei) + - fixed bug with SMARTY_DIR not prepended to Config_File include. (Monte) + +Version 1.4.4 +------------- + - fixed problem with including insecure templates with security enabled. + (Monte) + - numerous documentation updates. (Monte) + - added ENT_QUOTES to escapement of html. (Monte, Sam Beckwith) + - implemented access to request variables via auto-assigned $smarty + template variable. (Andrei) + - fixed a bug with parsing function arguments inside {if} tags if a comma + was present. (Andrei) + - updated debug console with config file vars. (Monte) + - added SMARTY_DIR constant as an alternative to relying on include_path. + (Monte) + - added popup_init and popup functions (requires overlib.js). (Monte) + - updated debug console with config file vars. (Monte) + - added debugging url control. (Monte) + - added 'quotes' type to escape modifier. (Monte, Mike Krus) + - added 'total' and 'iteration' section properties. (Andrei) + - added 'start', 'max', and 'step' section attributes/properties. (Andrei) + - fixed a bug with security checking of functions inside {if} tags. + (Andrei) + - fixed a bug in Config_File that would incorrectly booleanize values that + weren't really booleans. (Andrei) + +Version 1.4.3 +------------- + - added regex_replace modifier, documented. (Monte) + - added debugging console feature and custom function assign_debug_info, + documented. (Monte) + - added 'scope' attribute for {config_load}, 'global' is now deprecated but + is still supported. (Andrei) + - reduced template symbol table pollution by moving config array into the + class itself. (Andrei) + - fixed a bug with passing quoted arguments to modifiers inside {if} + statements. (Andrei, Sam Beckwith) + - added security features for third party template editing, documented + (Monte) + - added assign custom function, documented. (Monte) + - fixed bug with template header using version instead of _version. (Monte) + - fixed a problem with putting $ followed by numbers inside {strip} and + {/strip} tags. (Andrei) + - fixed Config_File class to allow empty config paths (defaults to current + directory). (Andrei) + +Version 1.4.2 +------------- + - move $version to internal variable, remove from docs. (Monte) + - cleaned up compiled templates global scope by moving some variables into + the class itself. (Andrei) + - fixed a bug that would not allow referring to a section in the including + file from the included file. (Andrei) + - configs directory missing from 1.4.1 release, added back in. (Monte) + - added windows include_path setup instructions to FAQ & QUICKSTART. + (Monte) + +Version 1.4.1 +------------- + - fix LOCK_EX logic for all windows platforms (Monte) + - fixed indexing by section properties with the new syntax. (Andrei) + - updated Smarty to use absolute paths when requiring/including Smarty + components. (Andrei, John Lim) + +Version 1.4.0 +------------- + - added {capture}{/capture} function, documented (Monte) + - added {counter} function, documented (Monte) + +Version 1.4.0b2 +--------------- + - fixed issue in Config_File.class with referencing blank sections (Andrei) + - fixed problem with passing variables to included files (Andrei) + - fixed resource path recognition for windows (Monte) + +Version 1.4.0b1 +--------------- + - added "componentized templates" tip into documentation (Monte) + - added {php}{/php} tags for embedding php code into templates (Monte) + - changed default value of $show_info_header to false (Monte) + - implemented '->' syntax for accessing properties of objects passed to the + template. (Andrei) + - allowed custom functions to receive Smarty object as the second + parameter; this can be used to dynamically change template variables, for + example. (Andrei) + - added custom compiler functions support, register_compiler_function() and + unregister_compiler_function() API functions. (Andrei, Ivo Jansch). + - updated GLOBAL_ASSIGN to take SCRIPT_NAME from HTTP_SERVER_VARS + instead of global variable. You can also assign several variables + in one shot with an array. (Monte, Roman Neuhauser) + - added template prefilters, register_prefilter() and + unregister_prefilter() API functions. (Monte) + - added RELEASE_NOTES file to distribution. (Monte) + - moved CREDITS out of manual into its own file. (Monte) + - added register_resource() and unregister_resource() API functions. (Monte) + - changed the syntax of indexing template variables, thus supporting + structures of arbitrary complexity; supplied fix_vars.php script to fix + old syntax. (Andrei) + - added $insert_tag_check to speed up cached pages if {insert ...} is not + used. (Monte) + - added $compiler_class variable to allow specifying a different compiler + class. (Andrei) + - changed Smarty to compile templates at runtime, allowing for arbitrary + template resources. (Monte) + - added fix for LOCK_EX under Windows and changed a couple of file + permissions for security. (Monte, Fernando Nunes) + - allow arbitrary date strings to date_format, html_select_date and + html_select_time (Monte) + +Version 1.3.2 +------------- + - fixed a bug that caused some nested includes to loop infinitely. (Andrei) + - added optional HTML header to output. (Monte) + - significantly improved config_load performance. (Andrei) + - added format attribute to math function. (Monte) + - added html_select_time custom function. (Andrei) + - fixed minor PHP warning when attempting to unset an unset variable + (Monte) + - added count_characters, count_words, count_sentences, count_paragraphs + modifiers (Monte) + +Version 1.3.1pl1 +-------------- + - bug fix, recovered missing _syntax_error function (Monte) + +Version 1.3.1 +------------- + - document first, last, index_prev, index_next (Monte) + - added 'first' and 'last' section properties. (Andrei) + - split out compiling code to separate class for faster template execution + time (Monte) + - fixed a couple of minor PHP warnings (Monte) + - added and documented unregister_modifier() and unregister_function() API + calls. (Monte) + - added and documented 'fetch' and 'math' functions. (Monte) + - added ability to index looped variables by section properties, e.g. + $foo.index_prev/bar. (Andrei) + - added index_prev and index_next section properties. (Andrei) + - fixed issue with php executing in literal blocks. (Monte) + +Version 1.3.0 +------------- + - moved license from GPL to LGPL (Monte) + - implemented workaround for PHP "feature" that eats carriage returns + if the PHP tag is at the end of the line. (Andrei) + - removed $allow_php, added $php_handling logic (Monte) + - added file locking to prevent reader/writer problem. (Andrei) + - made Smarty catch unimplemented modifiers and custom functions and output + error messages during compilation instead of failing during run time. + (Andrei) + - removed short-tags at the top of the smarty scripts (Monte) + - added register_function() and register_modifier() API calls to make + registering stuff easier. (Andrei) + - added template results caching capability. (Monte, Andrei) + - added optional 'options' attribute to html_options custom function + that allows passing associative arrays for values/output. (Andrei) + - modifier arguments can now contain '|' and ':' characters inside quoted + strings. (Andrei) + +Version 1.2.2 +------------- + - fixed bug that would not respect nested template directories and would + put all compiled files into top-level one. (Andrei) + - fixed bug using $PHP_VERSION instead of environment var PHP_VERSION. + (Monte) + - a couple small warning fixes. (Monte) + +Version 1.2.1 +------------- + - added $compile_dir, removed $compile_dir_ext, simplified usage. (Monte) + - added tips & tricks chapter to documentation. (Monte) + - misc documentation updates. (Monte) + +Version 1.2.0 +------------- + - updated documentation (Monte) + - added file and line number information to syntax error messages. (Andrei) + - added ability to index template vars by a key. (Andrei) + +Version 1.1.0 +------------- + - misc documentation changes, official stable release + +Version 1.0b +------------ + - fixed the bug that prevented using non-array values for 'loop' attribute. + (Andrei) + - many misc documentation changes & additions (Monte) + +Version 1.0a +------------ + - fixed bug that caused templates to recompile every time (Monte) + +Version 1.0 +------------ + - initial release + +/* vim: set et tw=64 ft=changelog: */ diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/README b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/README new file mode 100644 index 00000000..2f44088c --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/README @@ -0,0 +1,80 @@ +NAME: + + Smarty - the PHP compiling template engine + +VERSION: 2.5.0 + +AUTHORS: + + Monte Ohrt <monte@ispi.net> + Andrei Zmievski <andrei@php.net> + +MAILING LISTS: + + We have a few mailing lists. "general" for you to share your ideas or ask + questions, "dev" for those interested in the development efforts of Smarty, + and "cvs" for those that would like to track the updates made in the cvs + repository. + + send a blank e-mail message to: + smarty-general-subscribe@lists.php.net (subscribe to the general list) + smarty-general-unsubscribe@lists.php.net (unsubscribe from the general list) + smarty-general-digest-subscribe@lists.php.net (subscribe to digest) + smarty-general-digest-unsubscribe@lists.php.net (unsubscribe from digest) + smarty-dev-subscribe@lists.php.net (subscribe to the dev list) + smarty-dev-unsubscribe@lists.php.net (unsubscribe from the dev list) + smarty-cvs-subscribe@lists.php.net (subscribe to the cvs list) + smarty-cvs-unsubscribe@lists.php.net (unsubscribe from the cvs list) + You can also browse the mailing list archives at + http://marc.theaimsgroup.com/?l=smarty&r=1&w=2 + +SYNOPSIS: + + require("Smarty.class.php"); + + $smarty = new Smarty; + + $smarty->assign("Title","My Homepage"); + $smarty->assign("Names",array("John","Gary","Gregg","James")); + + $smarty->display("index.tpl"); + + +DESCRIPTION: + + What is Smarty? + + Smarty is a template engine for PHP. Many other template engines for PHP + provide basic variable substitution and dynamic block functionality. + Smarty takes a step further to be a "smart" template engine, adding + features such as configuration files, template functions, and variable + modifiers, and making all of this functionality as easy as possible to + use for both programmers and template designers. Smarty also converts + the templates into PHP scripts, eliminating the need to parse the + templates on every invocation. This makes Smarty extremely scalable and + manageable for large application needs. + + Some of Smarty's features: + + * it is extremely fast + * no template parsing overhead, only compiles once. + * it is smart about recompiling only the template files that have + changed. + * the template language is remarkably extensible via the plugin + architecture. + * configurable template delimiter tag syntax, so you can use + {}, {{}}, <!--{}-->, or whatever you like. + * built-in caching of template output. + * arbitrary template sources (filesystem, databases, etc.) + * template if/elseif/else/endif constructs are passed to the PHP parser, + so the if syntax can be as simple or as complex as you like. + * unlimited nesting of sections, conditionals, etc. allowed + * it is possible to embed PHP code right in your template files, + although not recommended and doubtfully needed since the engine + is so customizable. + * and many more. + +COPYRIGHT: + Copyright (c) 2001,2002 ispi of Lincoln, Inc. All rights reserved. + This software is released under the GNU Lesser General Public License. + Please read the disclaimer at the top of the Smarty.class.php file. diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/RELEASE_NOTES b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/RELEASE_NOTES new file mode 100644 index 00000000..d5e95f5a --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/RELEASE_NOTES @@ -0,0 +1,423 @@ +2.5.0 +----- + +Very minor adjustments since RC2, see the NEWS file for details. + +2.5.0-RC2 +--------- + +Many fixes since the RC1 release. This one is as close to production quality as +they come, so this will be the last release before 2.5.0. The SGML documentation +files have also been removed from the tarball. If you want them, get them from +the CVS repository. + +2.5.0-RC1 +--------- + +Release Candidate 1. All $smarty vars can now be dynamic, such as +$smarty.get.$foo. A new class function get_function_object() gets you a +reference to an assigned object, useful within your own custom functions. +append() can now merge as well as append with a third optional attribute. A new +class function get_config_vars() was added, and get_template_vars() can now be +used to get individual vars. Full variable syntax is now supported within +double quotes via a backtick (`) syntax. Files created by smarty are now +written to a tmp file then renamed to avoid file lock retention. html_radios, +html_checkboxes, html_table, html_image, nl2br functions added, see the NEWS +file for full details. + +2.4.2 +----- +Another point release. Added support for dynamic object reference syntax +($foo->$bar), support for full variable syntax within quotes ("$foo[0].bar"), +and other minor fixes. See the NEWS file for full details. + +2.4.1 +----- + +This is basically a point release, cleaning up a few things caught +in the 2.4.0 release. See the NEWS file for full details. + +2.4.0 +----- + +Smarty now supports the ability to access objects within the templates. Two +methods are available, one which closely follows Smartys conventions, and +another that follows more traditional object syntax for those familiar with +PHP. + +The internal compiling engine has also undergone some major work. The regex +parsing was rewritten to be much more strict, more secure and more +maintainable. Config files are now compiled, which can speed up pages quite a +bit that use config files extensively. Assigned variables are no longer +extracted to PHP namespace, saving an extract call for every template. There is +now support for applying modifiers to static values and functions. You can now +access constants with $smarty.const.VAR. See the NEWS file for complete +changes. + +2.3.1 +----- + +The mtime on compiled files will now match the source files, in the case where +the source file may not get the current timestamp, recompiling will still work +as expected. Proper support for open_basedir has been added, so Smarty should +work correctly in safe mode. Added a few new features such as textformat block +function, strip variable modifier and optgroup support for html_options. Also +other minor bug fixes, see the Change Log. + +2.3.0 +----- + +Smarty now has a {debug} template function that brings up the debugging console +right where {debug} is called, regardless of $debugging settings. This works a +little different than turning on $debugging in the sense that it shows all the +template variables available at the time {debug} is called, including local +scope vars. It does not show the templates names however, since this +executed during runtime of the template. + +You can now supply an expire time when clearing cache or compile files. This is +mostly useful for removing stale files via the API. + +Plugins now stop execution upon error, instead of outputting a warning and +continuing. + +Two new API functions, assign_by_ref() and append_by_ref() were added. They +allow assigning template variables by reference. This can make a significant +performance gain, especially if you are assigning large arrays of data. PHP 5.0 +will do this implicitly, so these functions are basically workarounds. + +Several misc bug fixes, see the Change Log for information. + + +2.2.0 +----- + +Smarty now allows an array of paths for the $plugin_dir class variable. The +directories will be searched in the order they are given, so for efficiency keep +the most-used plugins at the top. Also, absolute paths to the plugin directories are +more efficient than relying on the PHP include_path. + +Cache files can now be grouped with the cache_id. See the documentation under +the new "Caching" section for details. compile_id also respects the same +grouping syntax. The cache/compile file structure changed, so be sure to clear +out all your cache and compile files when upgrading Smarty. Also if you are +using PHP-accelerator, restart apache. I've seen some quirky things happen if +the phpa files do not get cleared (known issue with phpa and parent +class-member changes, so just clear 'em.) + +Smarty now correctly respects the PHP include_path for $template_dir, $compile_dir, +$cache_dir, $config_dir and $plugin_dir. Be aware that relying on the +include_path is an overhead, try to use absolute pathnames when possible +(or relative to working directory.) + +Documentation has been updated and rearranged a bit. Most notably, the +installation instructions are completely revamped, and a new Caching section +explains Smarty's caching in detail along with the new grouping functionality. + +Many misc. bug fixes and enhancements, see the full ChangeLog (NEWS file) for +details. + +2.1.1 +----- + +There was a bug with template paths and the include_path, this has been fixed. +Also register_outputfilter() did not work, this is fixed. A new template +function named "cycle" has been added to the distribution, nice for cycling +through a list (or array) of values. + +2.1.0 +----- + +This release has quite a few new features and fixes. Most notable are the +introduction of block functions, so you can write plugins that work on a block +of text with {func}{/func} notation. Also output filters were added, so you can +apply a function against the output of your templates. This differs from the +postfilter function, which works on the compiled template at compile time, and +output filters work on the template output at runtime. + +Many other features and bug fixes are noted in the NEWS file. + + +2.0.1 +----- + +This is a point release, fixing a few bugs and cleaning things up. A plugin +was renamed, the dash "-" was removed from compiled template and cached file +names. If you're upgrading, you might want to clear them out first. See the +ChangeLog for details. + +2.0.0 +----- + +This release is a huge milestone for Smarty. Most notable new things are a +plugin architecture, removal of PEAR dependency, and optimizations that +drastically improve the performance of Smarty in most cases. + +The plugin architecture allows modifiers, custom functions, compiler functions, +prefilters, postfilters, resources, and insert functions to be added by +simply dropping a file into the plugins directory. Once dropped in, they are +automatically registered by the template engine. This makes user-contributed +plugins easy to manage, as well as the internal workings of Smarty easy to +control and customize. This new architecture depends on the __FILE__ constant, +which contains the full path to the executing script. Some older versions of +PHP incorrectly gave the script name and not the full filesystem path. Be sure +your version of PHP populates __FILE__ correctly. If you use custom template +resource functions, the format of these changed with the plugin architecture. +Be sure to update your functions accordingly. See the template resource section +of the documentation. + +The PEAR dependancy was removed from Smarty. The Config_File class that comes +with Smarty was actually what needed PEAR for error handling which Smarty didn't +use, but now everything is self-contained. + +Performance improvements are graphed on the benchmark page, you will see that +overall performance has been sped up by as much as 80% in some cases. + +Smarty-cached pages now support If-Modified-Since headers, meaning that if a +cached template page has not changed since the last request, a "304 Not +Modified" header will be sent instead of resending the same page. This is +disabled by default, change the setting of $cache_modified_check. + + +1.5.2 +----- + +Mostly bug fixes, added a default template resource handler. + + +1.5.1 +----- + +Critical bug fix release. If you use caching, you'll need to upgrade. + + +1.5.0 +----- + +Several feature enhancements were made to this version, most notably the +{foreach ...} command which is an alternative to {section ...} with an easier +syntax for looping through a single array of values. Several functions were +enhanced so that the output can be automatically assigned to a template +variable instead of displayed (assign attribute). Cache files can now be +controlled with a custom function as an alternative to the built-in file based +method. Many code cleanups and bug fixed went into this release as well. + + +1.4.6 +----- + +The behavior with caching and compile_check has been slightly enhanced. If +caching is enabled AND compile_check is enabled, the cache will immediately get +regenerated if _any_ involved template or config file is updated. This imposes +a slight performance hit because it must check all the files for changes, so be +sure to run live sites with caching enabled and compile_check disabled for best +performance. If you update a template or config file, simply turn on +compile_check, load the page, then turn it back off. This will update the cache +file with the new content. This is accomplished by maintaining a list of +included/loaded templates and config files at the beginning of the cache file. +Therefore it is advisable to remove all cache files after upgrading to 1.4.6 +(although not absolutely necessary, old cache files will regenerate) + +The debug console now has script timing and array values printed. You MUST +update your debug.tpl file with this version of Smarty. Also, the new debug.tpl +will not work with older versions of Smarty. + + +1.4.5 +----- + +Mostly bug fixes and minor improvements. Added compile id for separate compiled +versions of the same script. The directory format and filename convention for +the files in templates_c has changed, so you may want to remove all of the +existing ones before you upgrade. + + +1.4.4 +----- + +A few bug fixes, new section looping attributes and properties, debugging +console function for control via URL, and overLib integration and access +to request variables from within the template. + + +1.4.3 +----- + +This release has a few bug fixes and several enhancements. Smarty now supports +template security for third-party template editing. These features disallow the +ability for someone to execute commands or PHP code from the template language. +Smarty also now has a built-in debugging console, which is a javascript pop-up +window that displays all the included template names and assigned variables. + + +1.4.2 +----- + +This was mostly one bug fix with variable scoping within included templates +and a few documentation changes and updates. See the ChangeLog file for full +details. + + +1.4.1 +----- + +It seems that the EX_LOCK logic from the previous release didn't fix all the +problems with windows platforms. Hopefully this one does. It basically +disables file locking on windows, so there is a potential that two programs +could write over the same file at the same time, fyi. + +The reset is minor bug fixes, please refer to the ChangeLog file. + + +1.4.0 +----- + +IMPORTANT NOTICE + +Smarty now has a new syntax for accessing elements within section loops. The +new syntax is easier to use and nicely handles data structures of any +complexity. Consequently, this breaks the old syntax. + +Here is an example of the syntax change: + +old syntax: +{$sec1/sec2/sec3/customer.phone} + +new syntax: +{$customer[$sec1][$sec2][$sec3].phone} + +The section names used to come first, followed by the variable name. Now the +variable name always comes first, followed by the section names in brackets. +You can access variable indexes anywhere, depending on how you passed the +variables in. + +To fix your current templates, we have provided a script that will adjust the +syntax for you. Located in misc/fix_vars.php, run this script from the the +command line, giving each template as an argument. Be sure to use absolute +pathnames, or pathnames relative to the executing script. Probably the easiest +way to do this is to copy the fix_vars.php script into your template directory +and run 'php -q fix_vars.php *.tpl' Be sure you have proper write permission, +and backup your scripts first to be safe! The examples in the 1.4.0 +documentation have been updated to reflect the changes. + +cd /path/to/templates +cp /path/to/fix_vars.php . +find . -name "*.tpl" -exec php -q ./fix_vars.php {} \; + +NEW AND IMPROVED COMPILATION PROCESS + +Smarty 1.4.0 also has a new compilation process. Instead of compiling all the +templates up front, it now compiles them at runtime. This has several +advantages. First of all, there is no longer a need to have a single template +directory. You can now have arbitrary template sources, such as multiple +directories or even database calls. This also speeds the performance of Smarty +when $compile_check is enabled, since it is only checking the template that is +being executed instead of everything found in the template directory. The +$tpl_file_ext is no longer needed, but kept for backward compatability. +Templates can now be named anything you like with any extension. + +MINOR FIXES + +A workaround for LOCK_EX on Windows systems was added, and changed a couple of +file permissions for better security on public servers. + +$show_info_header is now defaulted to false instead of true. This header causes +problems when displaying content other than HTML, so now you must explicitly +set this flag to true to show the header information (or change the default in +your copy of Smarty.) + +Documentation is written in docbook format. I updated the docbook -> HTML +generating software & style-sheets, and consequently the examples are no longer +in a different background color. If anyone wants to contribute a better +stylesheet or help with documentation, drop me a line. <monte@ispi.net> + +CHANGES/ENHANCEMENTS/UPDATES + +date_format, html_select_date and html_select_time used to require a unix +timestamp as the format of the date passed into the template. Smarty is now a +bit smarter at this. It will take a unix timestamp, a mysql timestamp, or any +date string that is parsable by strtotime, such as 10/01/2001 or 2001-10-01, +etc. Just give some formats a try and see what works. + +Smarty now has template prefilters, meaning that you can run your templates +through custom functions before they are compiled. This is good for things like +removing unwanted comments, keeping an eye on words or functionality people are +putting in templates, translating XML -> HTML, etc. See the register_prefilter +documentation for more info. + +Another addition are the so-called compiler functions. These are custom +functions registered by the user that are executed at compilation time of the +template. They can be used to inject PHP code or time-sensitive static content +into the compiled template. + +The run-time custom functions are now passed the Smarty object as the second +parameter. This can be used, for example, to assign or clear template variables +from inside the custom function. + +clear_compile_dir() was added for clearing out compiled versions of your +templates. Not something normally needed, but you may have a need for this if +you have $compile_check set to false and you periodically update templates via +some automated process. As of 1.4.0, uncompiled templates _always_ get +compiled regardless of $compile_check setting, although they won't be checked +for recompile if $compile_check is set to false. + +You can now refer to properties of objects assigned from PHP by using the '->' +symbol and specifying the property name after it, e.g. $foo->bar. + +{php}{/php} tags were added to embed php into the templates. Not normally +needed, but some circumstances may call for it. Check out the "componentized +templates" tip in the documentation for an example. + +{capture}{/capture} and {counter} functions were added. See the documentation +for a complete description and examples. + +UPGRADE NOTES + +The format of the files created in the $compile_dir are now a bit different. +The compiled template filename is the template resource name url-encoded. +Therefore, all compiled files are now in the top directory of $compile_dir. +This was done to make way for arbitrary template resources. Each compiled +template also has a header that states what template resource was used to +create it. From a unix command prompt, you can use "head -2 *" to see the first +two lines of each file. + +When upgrading to 1.4.0, you will want to clear out all your old files in the +$compile_dir. If you have $compile_check set to false and the compiled template +does not yet exist, it will compile it regardless of this setting. This way you +can clear out the $compile_dir and not worry about setting $compile_check to +true to get the inital compilation under way. + + +1.3.2 +----- + +Smarty now has (an optional) header prepended to the output of the Smarty +templates. This displays the Smarty version and the date/time when the page was +generated. This is useful for debugging your cache routines, and purely +informational so there is evidence that the page was generated by Smarty. Set +$show_info_header to false to disable it. + +{config_load ...} performance was tuned by placing the loaded variables into a +global array, so basically a config file is read from the file system and +placed into a php array structure only once, no matter how many times it is +called in any of the templates. The scope of the loaded variables has changed a +bit as well. Variables loaded by config_load used to be treated as global +variables, meaning that parent templates (templates that included the current +template) could see them. Now the default behavior is such that loaded +variables are only visible by the current template and child templates (all +templates included after the {config_load ...} is called.) To mimic the +original behavior, provide the attribute "global=yes" like so: {config_load +file="mystuff.conf" global=yes}. Now when you load in mystuff.conf, the +variables will be visible to parent templates (merged with any existing config +variables.) + +A formatting attribute was added to the {math ...} function, adding the ability +to control the format of the output. Use the same formatting syntax as the PHP +function sprintf(). + +{html_select_time ...} was added, a custom function that works much like +{html_select_date ...} except it displays time elements instead of dates. + +A few custom modifiers were added: count_characters, count_words, +count_sentences, count_paragraphs. All pretty self-explanatory. + +/* vim: set et: */ diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/TODO b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/TODO new file mode 100644 index 00000000..4699b021 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/TODO @@ -0,0 +1,12 @@ +* handle asp style tags in $php_handler +* support implementations of prefiltes, mods, and others as class methods. +* ability to concatenate values/strings together +* fix all E_NOTICE warnings +* make simple math easier +* caching all but parts of the template +* change plugins so $smarty variable always comes first +* get cache ttl with function call +FIX: make inserts use normal functions before plugins +UPD: change it so that if template comes from some resource, + that resource stays as the default, no need to specify it + in includes. diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Config_File.class.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Config_File.class.php new file mode 100644 index 00000000..e6e82b00 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Config_File.class.php @@ -0,0 +1,365 @@ +<?php + +/** + * Config_File class. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * You may contact the author of Config_File by e-mail at: + * {@link andrei@php.net} + * + * The latest version of Config_File can be obtained from: + * http://smarty.php.net/ + * + * @link http://smarty.php.net/ + * @version 2.6.0 + * @copyright Copyright: 2001-2003 ispi of Lincoln, Inc. + * @author Andrei Zmievski <andrei@php.net> + * @access public + * @package Smarty + */ + +/* $Id: Config_File.class.php 198623 2005-10-17 18:37:50Z jeichorn $ */ +/** + * Config file reading class + * @package Smarty + */ +class Config_File { + /**#@+ + * Options + * @var boolean + */ + /** + * Controls whether variables with the same name overwrite each other. + */ + var $overwrite = true; + + /** + * Controls whether config values of on/true/yes and off/false/no get + * converted to boolean values automatically. + */ + var $booleanize = true; + + /** + * Controls whether hidden config sections/vars are read from the file. + */ + var $read_hidden = true; + + /** + * Controls whether or not to fix mac or dos formatted newlines. + * If set to true, \r or \r\n will be changed to \n. + */ + var $fix_newlines = true; + /**#@-*/ + + /** @access private */ + var $_config_path = ""; + var $_config_data = array(); + /**#@-*/ + + /** + * Constructs a new config file class. + * + * @param string $config_path (optional) path to the config files + */ + function Config_File($config_path = NULL) + { + if (isset($config_path)) + $this->set_path($config_path); + } + + + /** + * Set the path where configuration files can be found. + * + * @param string $config_path path to the config files + */ + function set_path($config_path) + { + if (!empty($config_path)) { + if (!is_string($config_path) || !file_exists($config_path) || !is_dir($config_path)) { + $this->_trigger_error_msg("Bad config file path '$config_path'"); + return; + } + if(substr($config_path, -1) != DIRECTORY_SEPARATOR) { + $config_path .= DIRECTORY_SEPARATOR; + } + + $this->_config_path = $config_path; + } + } + + + /** + * Retrieves config info based on the file, section, and variable name. + * + * @param string $file_name config file to get info for + * @param string $section_name (optional) section to get info for + * @param string $var_name (optional) variable to get info for + * @return string|array a value or array of values + */ + function &get($file_name, $section_name = NULL, $var_name = NULL) + { + if (empty($file_name)) { + $this->_trigger_error_msg('Empty config file name'); + return; + } else { + $file_name = $this->_config_path . $file_name; + if (!isset($this->_config_data[$file_name])) + $this->load_file($file_name, false); + } + + if (!empty($var_name)) { + if (empty($section_name)) { + return $this->_config_data[$file_name]["vars"][$var_name]; + } else { + if(isset($this->_config_data[$file_name]["sections"][$section_name]["vars"][$var_name])) + return $this->_config_data[$file_name]["sections"][$section_name]["vars"][$var_name]; + else + return array(); + } + } else { + if (empty($section_name)) { + return (array)$this->_config_data[$file_name]["vars"]; + } else { + if(isset($this->_config_data[$file_name]["sections"][$section_name]["vars"])) + return (array)$this->_config_data[$file_name]["sections"][$section_name]["vars"]; + else + return array(); + } + } + } + + + /** + * Retrieves config info based on the key. + * + * @param $file_name string config key (filename/section/var) + * @return string|array same as get() + * @uses get() retrieves information from config file and returns it + */ + function &get_key($config_key) + { + list($file_name, $section_name, $var_name) = explode('/', $config_key, 3); + $result = &$this->get($file_name, $section_name, $var_name); + return $result; + } + + /** + * Get all loaded config file names. + * + * @return array an array of loaded config file names + */ + function get_file_names() + { + return array_keys($this->_config_data); + } + + + /** + * Get all section names from a loaded file. + * + * @param string $file_name config file to get section names from + * @return array an array of section names from the specified file + */ + function get_section_names($file_name) + { + $file_name = $this->_config_path . $file_name; + if (!isset($this->_config_data[$file_name])) { + $this->_trigger_error_msg("Unknown config file '$file_name'"); + return; + } + + return array_keys($this->_config_data[$file_name]["sections"]); + } + + + /** + * Get all global or section variable names. + * + * @param string $file_name config file to get info for + * @param string $section_name (optional) section to get info for + * @return array an array of variables names from the specified file/section + */ + function get_var_names($file_name, $section = NULL) + { + if (empty($file_name)) { + $this->_trigger_error_msg('Empty config file name'); + return; + } else if (!isset($this->_config_data[$file_name])) { + $this->_trigger_error_msg("Unknown config file '$file_name'"); + return; + } + + if (empty($section)) + return array_keys($this->_config_data[$file_name]["vars"]); + else + return array_keys($this->_config_data[$file_name]["sections"][$section]["vars"]); + } + + + /** + * Clear loaded config data for a certain file or all files. + * + * @param string $file_name file to clear config data for + */ + function clear($file_name = NULL) + { + if ($file_name === NULL) + $this->_config_data = array(); + else if (isset($this->_config_data[$file_name])) + $this->_config_data[$file_name] = array(); + } + + + /** + * Load a configuration file manually. + * + * @param string $file_name file name to load + * @param boolean $prepend_path whether current config path should be + * prepended to the filename + */ + function load_file($file_name, $prepend_path = true) + { + if ($prepend_path && $this->_config_path != "") + $config_file = $this->_config_path . $file_name; + else + $config_file = $file_name; + + ini_set('track_errors', true); + $fp = @fopen($config_file, "r"); + if (!is_resource($fp)) { + $this->_trigger_error_msg("Could not open config file '$config_file'"); + return false; + } + + $contents = fread($fp, filesize($config_file)); + fclose($fp); + + if($this->fix_newlines) { + // fix mac/dos formatted newlines + $contents = preg_replace('!\r\n?!',"\n",$contents); + } + + $config_data = array(); + + /* replace all multi-line values by placeholders */ + if (preg_match_all('/"""(.*)"""/Us', $contents, $match)) { + $_triple_quotes = $match[1]; + $_i = 0; + $contents = preg_replace('/""".*"""/Use', '"\x1b\x1b\x1b".$_i++."\x1b\x1b\x1b"', $contents); + } else { + $_triple_quotes = null; + } + + /* Get global variables first. */ + if ($contents{0} != '[' && preg_match("/^(.*?)(\n\[|\Z)/s", $contents, $match)) + $config_data["vars"] = $this->_parse_config_block($match[1], $_triple_quotes); + + /* Get section variables. */ + $config_data["sections"] = array(); + preg_match_all("/^\[(.*?)\]/m", $contents, $match); + foreach ($match[1] as $section) { + if ($section{0} == '.' && !$this->read_hidden) + continue; + if (preg_match("/\[".preg_quote($section, '/')."\](.*?)(\n\[|\Z)/s", $contents, $match)) + if ($section{0} == '.') + $section = substr($section, 1); + $config_data["sections"][$section]["vars"] = $this->_parse_config_block($match[1], $_triple_quotes); + } + + $this->_config_data[$config_file] = $config_data; + + return true; + } + + /**#@+ @access private */ + /** + * @var string $config_block + */ + function _parse_config_block($config_block, $triple_quotes) + { + $vars = array(); + + /* First we grab the multi-line values. */ + if (preg_match_all("/^([^=\n]+)=\s*\x1b\x1b\x1b(\d+)\x1b\x1b\x1b\s*$/ms", $config_block, $match, PREG_SET_ORDER)) { + for ($i = 0; $i < count($match); $i++) { + $this->_set_config_var($vars, trim($match[$i][1]), $triple_quotes[$match[$i][2]], false); + } + $config_block = preg_replace("/^[^=\n]+=\s*\x1b\x1b\x1b\d+\x1b\x1b\x1b\s*$/ms", "", $config_block); + } + + + $config_lines = preg_split("/\n+/", $config_block); + + foreach ($config_lines as $line) { + if (preg_match("/^\s*(\.?\w+)\s*=(.*)/", $line, $match)) { + $var_value = preg_replace('/^([\'"])(.*)\1$/', '\2', trim($match[2])); + $this->_set_config_var($vars, trim($match[1]), $var_value, $this->booleanize); + } + } + + return $vars; + } + + /** + * @param array &$container + * @param string $var_name + * @param mixed $var_value + * @param boolean $booleanize determines whether $var_value is converted to + * to true/false + */ + function _set_config_var(&$container, $var_name, $var_value, $booleanize) + { + if ($var_name{0} == '.') { + if (!$this->read_hidden) + return; + else + $var_name = substr($var_name, 1); + } + + if (!preg_match("/^[a-zA-Z_]\w*$/", $var_name)) { + $this->_trigger_error_msg("Bad variable name '$var_name'"); + return; + } + + if ($booleanize) { + if (preg_match("/^(on|true|yes)$/i", $var_value)) + $var_value = true; + else if (preg_match("/^(off|false|no)$/i", $var_value)) + $var_value = false; + } + + if (!isset($container[$var_name]) || $this->overwrite) + $container[$var_name] = $var_value; + else { + settype($container[$var_name], 'array'); + $container[$var_name][] = $var_value; + } + } + + /** + * @uses trigger_error() creates a PHP warning/error + * @param string $error_msg + * @param integer $error_type one of + */ + function _trigger_error_msg($error_msg, $error_type = E_USER_WARNING) + { + trigger_error("Config_File error: $error_msg", $error_type); + } + /**#@-*/ +} + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty.class.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty.class.php new file mode 100644 index 00000000..1c954ffc --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty.class.php @@ -0,0 +1,2010 @@ +<?php + +/** + * Project: Smarty: the PHP compiling template engine + * File: Smarty.class.php + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * For questions, help, comments, discussion, etc., please join the + * Smarty mailing list. Send a blank e-mail to + * smarty-general-subscribe@lists.php.net + * + * You may contact the authors of Smarty by e-mail at: + * monte@ispi.net + * andrei@php.net + * + * Or, write to: + * Monte Ohrt + * Director of Technology, ispi + * 237 S. 70th suite 220 + * Lincoln, NE 68510 + * + * The latest version of Smarty can be obtained from: + * http://smarty.php.net/ + * + * @link http://smarty.php.net/ + * @copyright 2001-2003 ispi of Lincoln, Inc. + * @author Monte Ohrt <monte@ispi.net> + * @author Andrei Zmievski <andrei@php.net> + * @package Smarty + * @version 2.6.0 + */ + +/* $Id: Smarty.class.php 198623 2005-10-17 18:37:50Z jeichorn $ */ + +/** + * DIR_SEP isn't used anymore, but third party apps might + */ +if(!defined('DIR_SEP')) { + define('DIR_SEP', DIRECTORY_SEPARATOR); +} + +/** + * set SMARTY_DIR to absolute path to Smarty library files. + * if not defined, include_path will be used. Sets SMARTY_DIR only if user + * application has not already defined it. + */ + +if (!defined('SMARTY_DIR')) { + define('SMARTY_DIR', dirname(__FILE__) . DIRECTORY_SEPARATOR); +} + +define('SMARTY_PHP_PASSTHRU', 0); +define('SMARTY_PHP_QUOTE', 1); +define('SMARTY_PHP_REMOVE', 2); +define('SMARTY_PHP_ALLOW', 3); + +/** + * @package Smarty + */ +class Smarty +{ + /**#@+ + * Smarty Configuration Section + */ + + /** + * The name of the directory where templates are located. + * + * @var string + */ + var $template_dir = 'templates'; + + /** + * The directory where compiled templates are located. + * + * @var string + */ + var $compile_dir = 'templates_c'; + + /** + * The directory where config files are located. + * + * @var string + */ + var $config_dir = 'configs'; + + /** + * An array of directories searched for plugins. + * + * @var array + */ + var $plugins_dir = array('plugins'); + + /** + * If debugging is enabled, a debug console window will display + * when the page loads (make sure your browser allows unrequested + * popup windows) + * + * @var boolean + */ + var $debugging = false; + + /** + * This is the path to the debug console template. If not set, + * the default one will be used. + * + * @var string + */ + var $debug_tpl = ''; + + /** + * This determines if debugging is enable-able from the browser. + * <ul> + * <li>NONE => no debugging control allowed</li> + * <li>URL => enable debugging when SMARTY_DEBUG is found in the URL.</li> + * </ul> + * @link http://www.foo.dom/index.php?SMARTY_DEBUG + * @var string + */ + var $debugging_ctrl = 'NONE'; + + /** + * This tells Smarty whether to check for recompiling or not. Recompiling + * does not need to happen unless a template or config file is changed. + * Typically you enable this during development, and disable for + * production. + * + * @var boolean + */ + var $compile_check = true; + + /** + * This forces templates to compile every time. Useful for development + * or debugging. + * + * @var boolean + */ + var $force_compile = false; + + /** + * This enables template caching. + * <ul> + * <li>0 = no caching</li> + * <li>1 = use class cache_lifetime value</li> + * <li>2 = use cache_lifetime in cache file</li> + * </ul> + * @var integer + */ + var $caching = 0; + + /** + * The name of the directory for cache files. + * + * @var string + */ + var $cache_dir = 'cache'; + + /** + * This is the number of seconds cached content will persist. + * <ul> + * <li>0 = always regenerate cache</li> + * <li>-1 = never expires</li> + * </ul> + * + * @var integer + */ + var $cache_lifetime = 3600; + + /** + * Only used when $caching is enabled. If true, then If-Modified-Since headers + * are respected with cached content, and appropriate HTTP headers are sent. + * This way repeated hits to a cached page do not send the entire page to the + * client every time. + * + * @var boolean + */ + var $cache_modified_check = false; + + /** + * This determines how Smarty handles "<?php ... ?>" tags in templates. + * possible values: + * <ul> + * <li>SMARTY_PHP_PASSTHRU -> print tags as plain text</li> + * <li>SMARTY_PHP_QUOTE -> escape tags as entities</li> + * <li>SMARTY_PHP_REMOVE -> remove php tags</li> + * <li>SMARTY_PHP_ALLOW -> execute php tags</li> + * </ul> + * + * @var integer + */ + var $php_handling = SMARTY_PHP_PASSTHRU; + + /** + * This enables template security. When enabled, many things are restricted + * in the templates that normally would go unchecked. This is useful when + * untrusted parties are editing templates and you want a reasonable level + * of security. (no direct execution of PHP in templates for example) + * + * @var boolean + */ + var $security = false; + + /** + * This is the list of template directories that are considered secure. This + * is used only if {@link $security} is enabled. One directory per array + * element. {@link $template_dir} is in this list implicitly. + * + * @var array + */ + var $secure_dir = array(); + + /** + * These are the security settings for Smarty. They are used only when + * {@link $security} is enabled. + * + * @var array + */ + var $security_settings = array( + 'PHP_HANDLING' => false, + 'IF_FUNCS' => array('array', 'list', + 'isset', 'empty', + 'count', 'sizeof', + 'in_array', 'is_array', + 'true','false'), + 'INCLUDE_ANY' => false, + 'PHP_TAGS' => false, + 'MODIFIER_FUNCS' => array('count'), + 'ALLOW_CONSTANTS' => false + ); + + /** + * This is an array of directories where trusted php scripts reside. + * {@link $security} is disabled during their inclusion/execution. + * + * @var array + */ + var $trusted_dir = array(); + + /** + * The left delimiter used for the template tags. + * + * @var string + */ + var $left_delimiter = '{'; + + /** + * The right delimiter used for the template tags. + * + * @var string + */ + var $right_delimiter = '}'; + + /** + * The order in which request variables are registered, similar to + * variables_order in php.ini E = Environment, G = GET, P = POST, + * C = Cookies, S = Server + * + * @var string + */ + var $request_vars_order = "EGPCS"; + + /** + * Indicates wether $HTTP_*_VARS[] (request_use_auto_globals=false) + * are uses as request-vars or $_*[]-vars. note: if + * request_use_auto_globals is true, then $request_vars_order has + * no effect, but the php-ini-value "gpc_order" + * + * @var boolean + */ + var $request_use_auto_globals = false; + + /** + * Set this if you want different sets of compiled files for the same + * templates. This is useful for things like different languages. + * Instead of creating separate sets of templates per language, you + * set different compile_ids like 'en' and 'de'. + * + * @var string + */ + var $compile_id = null; + + /** + * This tells Smarty whether or not to use sub dirs in the cache/ and + * templates_c/ directories. sub directories better organized, but + * may not work well with PHP safe mode enabled. + * + * @var boolean + * + */ + var $use_sub_dirs = true; + + /** + * This is a list of the modifiers to apply to all template variables. + * Put each modifier in a separate array element in the order you want + * them applied. example: <code>array('escape:"htmlall"');</code> + * + * @var array + */ + var $default_modifiers = array(); + + /** + * This is the resource type to be used when not specified + * at the beginning of the resource path. examples: + * $smarty->display('file:index.tpl'); + * $smarty->display('db:index.tpl'); + * $smarty->display('index.tpl'); // will use default resource type + * {include file="file:index.tpl"} + * {include file="db:index.tpl"} + * {include file="index.tpl"} {* will use default resource type *} + * + * @var array + */ + var $default_resource_type = 'file'; + + /** + * The function used for cache file handling. If not set, built-in caching is used. + * + * @var null|string function name + */ + var $cache_handler_func = null; + + /** + * These are the variables from the globals array that are + * assigned to all templates automatically. This isn't really + * necessary any more, you can use the $smarty var to access them + * directly. + * + * @var array + */ + var $global_assign = array('HTTP_SERVER_VARS' => array('SCRIPT_NAME')); + + /** + * The value of "undefined". Leave it alone :-) + * + * @var null + */ + var $undefined = null; + + /** + * This indicates which filters are automatically loaded into Smarty. + * + * @var array array of filter names + */ + var $autoload_filters = array(); + + /**#@+ + * @var boolean + */ + /** + * This tells if config file vars of the same name overwrite each other or not. + * if disabled, same name variables are accumulated in an array. + */ + var $config_overwrite = true; + + /** + * This tells whether or not to automatically booleanize config file variables. + * If enabled, then the strings "on", "true", and "yes" are treated as boolean + * true, and "off", "false" and "no" are treated as boolean false. + */ + var $config_booleanize = true; + + /** + * This tells whether hidden sections [.foobar] are readable from the + * tempalates or not. Normally you would never allow this since that is + * the point behind hidden sections: the application can access them, but + * the templates cannot. + */ + var $config_read_hidden = false; + + /** + * This tells whether or not automatically fix newlines in config files. + * It basically converts \r (mac) or \r\n (dos) to \n + */ + var $config_fix_newlines = true; + /**#@-*/ + + /** + * If a template cannot be found, this PHP function will be executed. + * Useful for creating templates on-the-fly or other special action. + * + * @var string function name + */ + var $default_template_handler_func = ''; + + /** + * The file that contains the compiler class. This can a full + * pathname, or relative to the php_include path. + * + * @var string + */ + var $compiler_file = 'Smarty_Compiler.class.php'; + + /** + * The class used for compiling templates. + * + * @var string + */ + var $compiler_class = 'Smarty_Compiler'; + + /** + * The class used to load config vars. + * + * @var string + */ + var $config_class = 'Config_File'; + +/**#@+ + * END Smarty Configuration Section + * There should be no need to touch anything below this line. + * @access private + */ + /** + * error messages. true/false + * + * @var boolean + */ + var $_error_msg = false; + + /** + * where assigned template vars are kept + * + * @var array + */ + var $_tpl_vars = array(); + + /** + * stores run-time $smarty.* vars + * + * @var null|array + */ + var $_smarty_vars = null; + + /** + * keeps track of sections + * + * @var array + */ + var $_sections = array(); + + /** + * keeps track of foreach blocks + * + * @var array + */ + var $_foreach = array(); + + /** + * keeps track of tag hierarchy + * + * @var array + */ + var $_tag_stack = array(); + + /** + * configuration object + * + * @var Config_file + */ + var $_conf_obj = null; + + /** + * loaded configuration settings + * + * @var array + */ + var $_config = array(array('vars' => array(), 'files' => array())); + + /** + * md5 checksum of the string 'Smarty' + * + * @var string + */ + var $_smarty_md5 = 'f8d698aea36fcbead2b9d5359ffca76f'; + + /** + * Smarty version number + * + * @var string + */ + var $_version = '2.6.0'; + + /** + * current template inclusion depth + * + * @var integer + */ + var $_inclusion_depth = 0; + + /** + * for different compiled templates + * + * @var string + */ + var $_compile_id = null; + + /** + * text in URL to enable debug mode + * + * @var string + */ + var $_smarty_debug_id = 'SMARTY_DEBUG'; + + /** + * debugging information for debug console + * + * @var array + */ + var $_smarty_debug_info = array(); + + /** + * info that makes up a cache file + * + * @var array + */ + var $_cache_info = array(); + + /** + * default file permissions + * + * @var integer + */ + var $_file_perms = 0644; + + /** + * default dir permissions + * + * @var integer + */ + var $_dir_perms = 0771; + + /** + * registered objects + * + * @var array + */ + var $_reg_objects = array(); + + /** + * table keeping track of plugins + * + * @var array + */ + var $_plugins = array( + 'modifier' => array(), + 'function' => array(), + 'block' => array(), + 'compiler' => array(), + 'prefilter' => array(), + 'postfilter' => array(), + 'outputfilter' => array(), + 'resource' => array(), + 'insert' => array()); + + + /** + * cache serials + * + * @var array + */ + var $_cache_serials = array(); + + /** + * name of optional cache include file + * + * @var string + */ + var $_cache_include = null; + + /** + * indicate if the current code is used in a compiled + * include + * + * @var string + */ + var $_cache_including = false; + + /**#@-*/ + /** + * The class constructor. + * + * @uses $global_assign uses {@link assign()} to assign each corresponding + * value from $GLOBALS to the template vars + */ + function Smarty() + { + foreach ($this->global_assign as $key => $var_name) { + if (is_array($var_name)) { + foreach ($var_name as $var) { + if (isset($GLOBALS[$key][$var])) { + $this->assign($var, $GLOBALS[$key][$var]); + } else { + $this->assign($var, $this->undefined); + } + } + } else { + if (isset($GLOBALS[$var_name])) { + $this->assign($var_name, $GLOBALS[$var_name]); + } else { + $this->assign($var_name, $this->undefined); + } + } + } + } + + + /** + * assigns values to template variables + * + * @param array|string $tpl_var the template variable name(s) + * @param mixed $value the value to assign + */ + function assign($tpl_var, $value = null) + { + if (is_array($tpl_var)){ + foreach ($tpl_var as $key => $val) { + if ($key != '') { + $this->_tpl_vars[$key] = $val; + } + } + } else { + if ($tpl_var != '') + $this->_tpl_vars[$tpl_var] = $value; + } + } + + /** + * assigns values to template variables by reference + * + * @param string $tpl_var the template variable name + * @param mixed $value the referenced value to assign + */ + function assign_by_ref($tpl_var, &$value) + { + if ($tpl_var != '') + $this->_tpl_vars[$tpl_var] = &$value; + } + + /** + * appends values to template variables + * + * @param array|string $tpl_var the template variable name(s) + * @param mixed $value the value to append + */ + function append($tpl_var, $value=null, $merge=false) + { + if (is_array($tpl_var)) { + // $tpl_var is an array, ignore $value + foreach ($tpl_var as $_key => $_val) { + if ($_key != '') { + if(!@is_array($this->_tpl_vars[$_key])) { + settype($this->_tpl_vars[$_key],'array'); + } + if($merge && is_array($_val)) { + foreach($_val as $_mkey => $_mval) { + $this->_tpl_vars[$_key][$_mkey] = $_mval; + } + } else { + $this->_tpl_vars[$_key][] = $_val; + } + } + } + } else { + if ($tpl_var != '' && isset($value)) { + if(!@is_array($this->_tpl_vars[$tpl_var])) { + settype($this->_tpl_vars[$tpl_var],'array'); + } + if($merge && is_array($value)) { + foreach($value as $_mkey => $_mval) { + $this->_tpl_vars[$tpl_var][$_mkey] = $_mval; + } + } else { + $this->_tpl_vars[$tpl_var][] = $value; + } + } + } + } + + /** + * appends values to template variables by reference + * + * @param string $tpl_var the template variable name + * @param mixed $value the referenced value to append + */ + function append_by_ref($tpl_var, &$value, $merge=false) + { + if ($tpl_var != '' && isset($value)) { + if(!@is_array($this->_tpl_vars[$tpl_var])) { + settype($this->_tpl_vars[$tpl_var],'array'); + } + if ($merge && is_array($value)) { + foreach($value as $_key => $_val) { + $this->_tpl_vars[$tpl_var][$_key] = &$value[$_key]; + } + } else { + $this->_tpl_vars[$tpl_var][] = &$value; + } + } + } + + + /** + * clear the given assigned template variable. + * + * @param string $tpl_var the template variable to clear + */ + function clear_assign($tpl_var) + { + if (is_array($tpl_var)) + foreach ($tpl_var as $curr_var) + unset($this->_tpl_vars[$curr_var]); + else + unset($this->_tpl_vars[$tpl_var]); + } + + + /** + * Registers custom function to be used in templates + * + * @param string $function the name of the template function + * @param string $function_impl the name of the PHP function to register + */ + function register_function($function, $function_impl, $cacheable=true, $cache_attrs=null) + { + $this->_plugins['function'][$function] = + array($function_impl, null, null, false, $cacheable, $cache_attrs); + + } + + /** + * Unregisters custom function + * + * @param string $function name of template function + */ + function unregister_function($function) + { + unset($this->_plugins['function'][$function]); + } + + /** + * Registers object to be used in templates + * + * @param string $object name of template object + * @param object &$object_impl the referenced PHP object to register + * @param null|array $allowed list of allowed methods (empty = all) + * @param boolean $smarty_args smarty argument format, else traditional + * @param null|array $block_functs list of methods that are block format + */ + function register_object($object, &$object_impl, $allowed = array(), $smarty_args = true, $block_methods = array()) + { + settype($allowed, 'array'); + settype($smarty_args, 'boolean'); + $this->_reg_objects[$object] = + array(&$object_impl, $allowed, $smarty_args, $block_methods); + } + + /** + * Unregisters object + * + * @param string $object name of template object + */ + function unregister_object($object) + { + unset($this->_reg_objects[$object]); + } + + + /** + * Registers block function to be used in templates + * + * @param string $block name of template block + * @param string $block_impl PHP function to register + */ + function register_block($block, $block_impl, $cacheable=true, $cache_attrs=null) + { + $this->_plugins['block'][$block] = + array($block_impl, null, null, false, $cacheable, $cache_attrs); + } + + /** + * Unregisters block function + * + * @param string $block name of template function + */ + function unregister_block($block) + { + unset($this->_plugins['block'][$block]); + } + + /** + * Registers compiler function + * + * @param string $function name of template function + * @param string $function_impl name of PHP function to register + */ + function register_compiler_function($function, $function_impl, $cacheable=true) + { + $this->_plugins['compiler'][$function] = + array($function_impl, null, null, false, $cacheable); + } + + /** + * Unregisters compiler function + * + * @param string $function name of template function + */ + function unregister_compiler_function($function) + { + unset($this->_plugins['compiler'][$function]); + } + + /** + * Registers modifier to be used in templates + * + * @param string $modifier name of template modifier + * @param string $modifier_impl name of PHP function to register + */ + function register_modifier($modifier, $modifier_impl) + { + $this->_plugins['modifier'][$modifier] = + array($modifier_impl, null, null, false); + } + + /** + * Unregisters modifier + * + * @param string $modifier name of template modifier + */ + function unregister_modifier($modifier) + { + unset($this->_plugins['modifier'][$modifier]); + } + + /** + * Registers a resource to fetch a template + * + * @param string $type name of resource + * @param array $functions array of functions to handle resource + */ + function register_resource($type, $functions) + { + if (count($functions)==4) { + $this->_plugins['resource'][$type] = + array($functions, false); + + } elseif (count($functions)==5) { + $this->_plugins['resource'][$type] = + array(array(array(&$functions[0], $functions[1]) + ,array(&$functions[0], $functions[2]) + ,array(&$functions[0], $functions[3]) + ,array(&$functions[0], $functions[4])) + ,false); + + } else { + $this->trigger_error("malformed function-list for '$type' in register_resource"); + + } + } + + /** + * Unregisters a resource + * + * @param string $type name of resource + */ + function unregister_resource($type) + { + unset($this->_plugins['resource'][$type]); + } + + /** + * Registers a prefilter function to apply + * to a template before compiling + * + * @param string $function name of PHP function to register + */ + function register_prefilter($function) + { + $_name = (is_array($function)) ? $function[1] : $function; + $this->_plugins['prefilter'][$_name] + = array($function, null, null, false); + } + + /** + * Unregisters a prefilter function + * + * @param string $function name of PHP function + */ + function unregister_prefilter($function) + { + unset($this->_plugins['prefilter'][$function]); + } + + /** + * Registers a postfilter function to apply + * to a compiled template after compilation + * + * @param string $function name of PHP function to register + */ + function register_postfilter($function) + { + $_name = (is_array($function)) ? $function[1] : $function; + $this->_plugins['postfilter'][$_name] + = array($function, null, null, false); + } + + /** + * Unregisters a postfilter function + * + * @param string $function name of PHP function + */ + function unregister_postfilter($function) + { + unset($this->_plugins['postfilter'][$function]); + } + + /** + * Registers an output filter function to apply + * to a template output + * + * @param string $function name of PHP function + */ + function register_outputfilter($function) + { + $_name = (is_array($function)) ? $function[1] : $function; + $this->_plugins['outputfilter'][$_name] + = array($function, null, null, false); + } + + /** + * Unregisters an outputfilter function + * + * @param string $function name of PHP function + */ + function unregister_outputfilter($function) + { + unset($this->_plugins['outputfilter'][$function]); + } + + /** + * load a filter of specified type and name + * + * @param string $type filter type + * @param string $name filter name + */ + function load_filter($type, $name) + { + switch ($type) { + case 'output': + $_params = array('plugins' => array(array($type . 'filter', $name, null, null, false))); + require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.load_plugins.php'); + smarty_core_load_plugins($_params, $this); + break; + + case 'pre': + case 'post': + if (!isset($this->_plugins[$type . 'filter'][$name])) + $this->_plugins[$type . 'filter'][$name] = false; + break; + } + } + + /** + * clear cached content for the given template and cache id + * + * @param string $tpl_file name of template file + * @param string $cache_id name of cache_id + * @param string $compile_id name of compile_id + * @param string $exp_time expiration time + * @return boolean + */ + function clear_cache($tpl_file = null, $cache_id = null, $compile_id = null, $exp_time = null) + { + + if (!isset($compile_id)) + $compile_id = $this->compile_id; + + if (!isset($tpl_file)) + $compile_id = null; + + $_auto_id = $this->_get_auto_id($cache_id, $compile_id); + + if (!empty($this->cache_handler_func)) { + return call_user_func_array($this->cache_handler_func, + array('clear', &$this, &$dummy, $tpl_file, $cache_id, $compile_id, $exp_time)); + } else { + $_params = array('auto_base' => $this->cache_dir, + 'auto_source' => $tpl_file, + 'auto_id' => $_auto_id, + 'exp_time' => $exp_time); + require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.rm_auto.php'); + return smarty_core_rm_auto($_params, $this); + } + + } + + + /** + * clear the entire contents of cache (all templates) + * + * @param string $exp_time expire time + * @return boolean results of {@link smarty_core_rm_auto()} + */ + function clear_all_cache($exp_time = null) + { + if (!empty($this->cache_handler_func)) { + $dummy = null; + call_user_func_array($this->cache_handler_func, + array('clear', &$this, &$dummy, null, null, null, $exp_time)); + } else { + $_params = array('auto_base' => $this->cache_dir, + 'auto_source' => null, + 'auto_id' => null, + 'exp_time' => $exp_time); + require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.rm_auto.php'); + return smarty_core_rm_auto($_params, $this); + } + } + + + /** + * test to see if valid cache exists for this template + * + * @param string $tpl_file name of template file + * @param string $cache_id + * @param string $compile_id + * @return string|false results of {@link _read_cache_file()} + */ + function is_cached($tpl_file, $cache_id = null, $compile_id = null) + { + if (!$this->caching) + return false; + + if (!isset($compile_id)) + $compile_id = $this->compile_id; + + $_params = array( + 'tpl_file' => $tpl_file, + 'cache_id' => $cache_id, + 'compile_id' => $compile_id + ); + require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.read_cache_file.php'); + return smarty_core_read_cache_file($_params, $this); + } + + + /** + * clear all the assigned template variables. + * + */ + function clear_all_assign() + { + $this->_tpl_vars = array(); + } + + /** + * clears compiled version of specified template resource, + * or all compiled template files if one is not specified. + * This function is for advanced use only, not normally needed. + * + * @param string $tpl_file + * @param string $compile_id + * @param string $exp_time + * @return boolean results of {@link smarty_core_rm_auto()} + */ + function clear_compiled_tpl($tpl_file = null, $compile_id = null, $exp_time = null) + { + if (!isset($compile_id)) { + $compile_id = $this->compile_id; + } + $_params = array('auto_base' => $this->compile_dir, + 'auto_source' => $tpl_file, + 'auto_id' => $compile_id, + 'exp_time' => $exp_time, + 'extensions' => array('.inc', '.php')); + require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.rm_auto.php'); + return smarty_core_rm_auto($_params, $this); + } + + /** + * Checks whether requested template exists. + * + * @param string $tpl_file + * @return boolean + */ + function template_exists($tpl_file) + { + $_params = array('resource_name' => $tpl_file, 'quiet'=>true, 'get_source'=>false); + return $this->_fetch_resource_info($_params); + } + + /** + * Returns an array containing template variables + * + * @param string $name + * @param string $type + * @return array + */ + function &get_template_vars($name=null) + { + if(!isset($name)) { + return $this->_tpl_vars; + } + if(isset($this->_tpl_vars[$name])) { + return $this->_tpl_vars[$name]; + } + } + + /** + * Returns an array containing config variables + * + * @param string $name + * @param string $type + * @return array + */ + function &get_config_vars($name=null) + { + if(!isset($name) && is_array($this->_config[0])) { + return $this->_config[0]['vars']; + } else if(isset($this->_config[0]['vars'][$name])) { + return $this->_config[0]['vars'][$name]; + } + } + + /** + * trigger Smarty error + * + * @param string $error_msg + * @param integer $error_type + */ + function trigger_error($error_msg, $error_type = E_USER_WARNING) + { + trigger_error("Smarty error: $error_msg", $error_type); + } + + + /** + * executes & displays the template results + * + * @param string $resource_name + * @param string $cache_id + * @param string $compile_id + */ + function display($resource_name, $cache_id = null, $compile_id = null) + { + $this->fetch($resource_name, $cache_id, $compile_id, true); + } + + /** + * executes & returns or displays the template results + * + * @param string $resource_name + * @param string $cache_id + * @param string $compile_id + * @param boolean $display + */ + function fetch($resource_name, $cache_id = null, $compile_id = null, $display = false) + { + static $_cache_info = array(); + + $_smarty_old_error_level = $this->debugging ? error_reporting() : error_reporting(error_reporting() & ~E_NOTICE); + + if (!$this->debugging && $this->debugging_ctrl == 'URL' + && @strstr($GLOBALS['HTTP_SERVER_VARS']['QUERY_STRING'], $this->_smarty_debug_id)) { + // enable debugging from URL + $this->debugging = true; + } + + if ($this->debugging) { + // capture time for debugging info + $_params = array(); + require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.get_microtime.php'); + $_debug_start_time = smarty_core_get_microtime($_params, $this); + $this->_smarty_debug_info[] = array('type' => 'template', + 'filename' => $resource_name, + 'depth' => 0); + $_included_tpls_idx = count($this->_smarty_debug_info) - 1; + } + + if (!isset($compile_id)) { + $compile_id = $this->compile_id; + } + + $this->_compile_id = $compile_id; + $this->_inclusion_depth = 0; + + if ($this->caching) { + // save old cache_info, initialize cache_info + array_push($_cache_info, $this->_cache_info); + $this->_cache_info = array(); + $_params = array( + 'tpl_file' => $resource_name, + 'cache_id' => $cache_id, + 'compile_id' => $compile_id, + 'results' => null + ); + require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.read_cache_file.php'); + if (smarty_core_read_cache_file($_params, $this)) { + $_smarty_results = $_params['results']; + if (@count($this->_cache_info['insert_tags'])) { + $_params = array('plugins' => $this->_cache_info['insert_tags']); + require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.load_plugins.php'); + smarty_core_load_plugins($_params, $this); + $_params = array('results' => $_smarty_results); + require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.process_cached_inserts.php'); + $_smarty_results = smarty_core_process_cached_inserts($_params, $this); + } + if (@count($this->_cache_info['cache_serials'])) { + $_params = array('results' => $_smarty_results); + require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.process_compiled_include.php'); + $_smarty_results = smarty_core_process_compiled_include($_params, $this); + } + + + if ($display) { + if ($this->debugging) + { + // capture time for debugging info + $_params = array(); + require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.get_microtime.php'); + $this->_smarty_debug_info[$_included_tpls_idx]['exec_time'] = smarty_core_get_microtime($_params, $this) - $_debug_start_time; + require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.display_debug_console.php'); + $_smarty_results .= smarty_core_display_debug_console($_params, $this); + } + if ($this->cache_modified_check) { + $_last_modified_date = @substr($GLOBALS['HTTP_SERVER_VARS']['HTTP_IF_MODIFIED_SINCE'], 0, strpos($GLOBALS['HTTP_SERVER_VARS']['HTTP_IF_MODIFIED_SINCE'], 'GMT') + 3); + $_gmt_mtime = gmdate('D, d M Y H:i:s', $this->_cache_info['timestamp']).' GMT'; + if (@count($this->_cache_info['insert_tags']) == 0 + && !$this->_cache_serials + && $_gmt_mtime == $_last_modified_date) { + if (php_sapi_name()=='cgi') + header("Status: 304 Not Modified"); + else + header("HTTP/1.1 304 Not Modified"); + + } else { + header("Last-Modified: ".$_gmt_mtime); + echo $_smarty_results; + } + } else { + echo $_smarty_results; + } + error_reporting($_smarty_old_error_level); + // restore initial cache_info + $this->_cache_info = array_pop($_cache_info); + return true; + } else { + error_reporting($_smarty_old_error_level); + // restore initial cache_info + $this->_cache_info = array_pop($_cache_info); + return $_smarty_results; + } + } else { + $this->_cache_info['template'][$resource_name] = true; + if ($this->cache_modified_check) { + header("Last-Modified: ".gmdate('D, d M Y H:i:s', time()).' GMT'); + } + } + } + + // load filters that are marked as autoload + if (count($this->autoload_filters)) { + foreach ($this->autoload_filters as $_filter_type => $_filters) { + foreach ($_filters as $_filter) { + $this->load_filter($_filter_type, $_filter); + } + } + } + + $_smarty_compile_path = $this->_get_compile_path($resource_name); + + // if we just need to display the results, don't perform output + // buffering - for speed + $_cache_including = $this->_cache_including; + $this->_cache_including = false; + if ($display && !$this->caching && count($this->_plugins['outputfilter']) == 0) { + if ($this->_is_compiled($resource_name, $_smarty_compile_path) + || $this->_compile_resource($resource_name, $_smarty_compile_path)) + { + include($_smarty_compile_path); + } + } else { + ob_start(); + if ($this->_is_compiled($resource_name, $_smarty_compile_path) + || $this->_compile_resource($resource_name, $_smarty_compile_path)) + { + include($_smarty_compile_path); + } + $_smarty_results = ob_get_contents(); + ob_end_clean(); + + foreach ((array)$this->_plugins['outputfilter'] as $_output_filter) { + $_smarty_results = call_user_func_array($_output_filter[0], array($_smarty_results, &$this)); + } + } + + if ($this->caching) { + $_params = array('tpl_file' => $resource_name, + 'cache_id' => $cache_id, + 'compile_id' => $compile_id, + 'results' => $_smarty_results); + require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.write_cache_file.php'); + smarty_core_write_cache_file($_params, $this); + require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.process_cached_inserts.php'); + $_smarty_results = smarty_core_process_cached_inserts($_params, $this); + + if ($this->_cache_serials) { + // strip nocache-tags from output + $_smarty_results = preg_replace('!(\{/?nocache\:[0-9a-f]{32}#\d+\})!s' + ,'' + ,$_smarty_results); + } + // restore initial cache_info + $this->_cache_info = array_pop($_cache_info); + } + $this->_cache_including = $_cache_including; + + if ($display) { + if (isset($_smarty_results)) { echo $_smarty_results; } + if ($this->debugging) { + // capture time for debugging info + $_params = array(); + require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.get_microtime.php'); + $this->_smarty_debug_info[$_included_tpls_idx]['exec_time'] = (smarty_core_get_microtime($_params, $this) - $_debug_start_time); + require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.display_debug_console.php'); + echo smarty_core_display_debug_console($_params, $this); + } + error_reporting($_smarty_old_error_level); + return; + } else { + error_reporting($_smarty_old_error_level); + if (isset($_smarty_results)) { return $_smarty_results; } + } + } + + /** + * load configuration values + * + * @param string $file + * @param string $section + * @param string $scope + */ + function config_load($file, $section = null, $scope = 'global') + { + require_once($this->_get_plugin_filepath('function', 'config_load')); + smarty_function_config_load(array('file' => $file, 'section' => $section, 'scope' => $scope), $this); + } + + /** + * return a reference to a registered object + * + * @param string $name + * @return object + */ + function &get_registered_object($name) { + if (!isset($this->_reg_objects[$name])) + $this->_trigger_fatal_error("'$name' is not a registered object"); + + if (!is_object($this->_reg_objects[$name][0])) + $this->_trigger_fatal_error("registered '$name' is not an object"); + + return $this->_reg_objects[$name][0]; + } + + /** + * clear configuration values + * + * @param string $var + */ + function clear_config($var = null) + { + if(!isset($var)) { + // clear all values + $this->_config = array(array('vars' => array(), + 'files' => array())); + } else { + unset($this->_config[0]['vars'][$var]); + } + } + + /** + * get filepath of requested plugin + * + * @param string $type + * @param string $name + * @return string|false + */ + function _get_plugin_filepath($type, $name) + { + $_params = array('type' => $type, 'name' => $name); + require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.assemble_plugin_filepath.php'); + return smarty_core_assemble_plugin_filepath($_params, $this); + } + + /** + * test if resource needs compiling + * + * @param string $resource_name + * @param string $compile_path + * @return boolean + */ + function _is_compiled($resource_name, $compile_path) + { + if (!$this->force_compile && file_exists($compile_path)) { + if (!$this->compile_check) { + // no need to check compiled file + return true; + } else { + // get file source and timestamp + $_params = array('resource_name' => $resource_name, 'get_source'=>false); + if (!$this->_fetch_resource_info($_params, $this)) { + return false; + } + if ($_params['resource_timestamp'] <= filemtime($compile_path)) { + // template not expired, no recompile + return true; + } else { + // compile template + return false; + } + } + } else { + // compiled template does not exist, or forced compile + return false; + } + } + + /** + * compile the template + * + * @param string $resource_name + * @param string $compile_path + * @return boolean + */ + function _compile_resource($resource_name, $compile_path) + { + + $_params = array('resource_name' => $resource_name); + if (!$this->_fetch_resource_info($_params)) { + return false; + } + + $_source_content = $_params['source_content']; + $_resource_timestamp = $_params['resource_timestamp']; + $_cache_include = substr($compile_path, 0, -4).'.inc'; + + if ($this->_compile_source($resource_name, $_source_content, $_compiled_content, $_cache_include)) { + // if a _cache_serial was set, we also have to write an include-file: + if ($this->_cache_include_info) { + require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.write_compiled_include.php'); + smarty_core_write_compiled_include(array_merge($this->_cache_include_info, array('compiled_content'=>$_compiled_content)), $this); + } + + $_params = array('compile_path'=>$compile_path, 'compiled_content' => $_compiled_content, 'resource_timestamp' => $_resource_timestamp); + require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.write_compiled_resource.php'); + smarty_core_write_compiled_resource($_params, $this); + + return true; + } else { + $this->trigger_error($smarty_compiler->_error_msg); + return false; + } + + } + + /** + * compile the given source + * + * @param string $resource_name + * @param string $source_content + * @param string $compiled_content + * @return boolean + */ + function _compile_source($resource_name, &$source_content, &$compiled_content, $cache_include_path=null) + { + if (file_exists(SMARTY_DIR . $this->compiler_file)) { + require_once(SMARTY_DIR . $this->compiler_file); + } else { + // use include_path + require_once($this->compiler_file); + } + + + $smarty_compiler = new $this->compiler_class; + + $smarty_compiler->template_dir = $this->template_dir; + $smarty_compiler->compile_dir = $this->compile_dir; + $smarty_compiler->plugins_dir = $this->plugins_dir; + $smarty_compiler->config_dir = $this->config_dir; + $smarty_compiler->force_compile = $this->force_compile; + $smarty_compiler->caching = $this->caching; + $smarty_compiler->php_handling = $this->php_handling; + $smarty_compiler->left_delimiter = $this->left_delimiter; + $smarty_compiler->right_delimiter = $this->right_delimiter; + $smarty_compiler->_version = $this->_version; + $smarty_compiler->security = $this->security; + $smarty_compiler->secure_dir = $this->secure_dir; + $smarty_compiler->security_settings = $this->security_settings; + $smarty_compiler->trusted_dir = $this->trusted_dir; + $smarty_compiler->_reg_objects = &$this->_reg_objects; + $smarty_compiler->_plugins = &$this->_plugins; + $smarty_compiler->_tpl_vars = &$this->_tpl_vars; + $smarty_compiler->default_modifiers = $this->default_modifiers; + $smarty_compiler->compile_id = $this->_compile_id; + $smarty_compiler->_config = $this->_config; + $smarty_compiler->request_use_auto_globals = $this->request_use_auto_globals; + + $smarty_compiler->_cache_serial = null; + $smarty_compiler->_cache_include = $cache_include_path; + + + $_results = $smarty_compiler->_compile_file($resource_name, $source_content, $compiled_content); + + if ($smarty_compiler->_cache_serial) { + $this->_cache_include_info = array( + 'cache_serial'=>$smarty_compiler->_cache_serial + ,'plugins_code'=>$smarty_compiler->_plugins_code + ,'include_file_path' => $cache_include_path); + + } else { + $this->_cache_include_info = null; + + } + + return $_results; + } + + /** + * Get the compile path for this resource + * + * @param string $resource_name + * @return string results of {@link _get_auto_filename()} + */ + function _get_compile_path($resource_name) + { + return $this->_get_auto_filename($this->compile_dir, $resource_name, + $this->_compile_id) . '.php'; + } + + /** + * fetch the template info. Gets timestamp, and source + * if get_source is true + * + * sets $source_content to the source of the template, and + * $resource_timestamp to its time stamp + * @param string $resource_name + * @param string $source_content + * @param integer $resource_timestamp + * @param boolean $get_source + * @param boolean $quiet + * @return boolean + */ + + function _fetch_resource_info(&$params) + { + if(!isset($params['get_source'])) { $params['get_source'] = true; } + if(!isset($params['quiet'])) { $params['quiet'] = false; } + + $_return = false; + $_params = array('resource_name' => $params['resource_name']) ; + if (isset($params['resource_base_path'])) + $_params['resource_base_path'] = $params['resource_base_path']; + + if ($this->_parse_resource_name($_params)) { + $_resource_type = $_params['resource_type']; + $_resource_name = $_params['resource_name']; + switch ($_resource_type) { + case 'file': + if ($params['get_source']) { + $params['source_content'] = $this->_read_file($_resource_name); + } + $params['resource_timestamp'] = filemtime($_resource_name); + $_return = is_file($_resource_name); + break; + + default: + // call resource functions to fetch the template source and timestamp + if ($params['get_source']) { + $_source_return = isset($this->_plugins['resource'][$_resource_type]) && + call_user_func_array($this->_plugins['resource'][$_resource_type][0][0], + array($_resource_name, &$params['source_content'], &$this)); + } else { + $_source_return = true; + } + + $_timestamp_return = isset($this->_plugins['resource'][$_resource_type]) && + call_user_func_array($this->_plugins['resource'][$_resource_type][0][1], + array($_resource_name, &$params['resource_timestamp'], &$this)); + + $_return = $_source_return && $_timestamp_return; + break; + } + } + + if (!$_return) { + // see if we can get a template with the default template handler + if (!empty($this->default_template_handler_func)) { + if (!is_callable($this->default_template_handler_func)) { + $this->trigger_error("default template handler function \"$this->default_template_handler_func\" doesn't exist."); + } else { + $_return = call_user_func_array( + $this->default_template_handler_func, + array($_params['resource_type'], $_params['resource_name'], &$params['source_content'], &$params['resource_timestamp'], &$this)); + } + } + } + + if (!$_return) { + if (!$params['quiet']) { + $this->trigger_error('unable to read resource: "' . $params['resource_name'] . '"'); + } + } else if ($_return && $this->security) { + require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.is_secure.php'); + if (!smarty_core_is_secure($_params, $this)) { + if (!$params['quiet']) + $this->trigger_error('(secure mode) accessing "' . $params['resource_name'] . '" is not allowed'); + $params['source_content'] = null; + $params['resource_timestamp'] = null; + return false; + } + } + return $_return; + } + + + /** + * parse out the type and name from the resource + * + * @param string $resource_base_path + * @param string $resource_name + * @param string $resource_type + * @param string $resource_name + * @return boolean + */ + + function _parse_resource_name(&$params) + { + + // split tpl_path by the first colon + $_resource_name_parts = explode(':', $params['resource_name'], 2); + + if (count($_resource_name_parts) == 1) { + // no resource type given + $params['resource_type'] = $this->default_resource_type; + $params['resource_name'] = $_resource_name_parts[0]; + } else { + if(strlen($_resource_name_parts[0]) == 1) { + // 1 char is not resource type, but part of filepath + $params['resource_type'] = $this->default_resource_type; + $params['resource_name'] = $params['resource_name']; + } else { + $params['resource_type'] = $_resource_name_parts[0]; + $params['resource_name'] = $_resource_name_parts[1]; + } + } + + if ($params['resource_type'] == 'file') { + if (!preg_match("/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/", $params['resource_name'])) { + // relative pathname to $params['resource_base_path'] + // use the first directory where the file is found + if (isset($params['resource_base_path'])) { + $_resource_base_path = (array)$params['resource_base_path']; + } else { + $_resource_base_path = (array)$this->template_dir; + $_resource_base_path[] = '.'; + } + foreach ($_resource_base_path as $_curr_path) { + $_fullpath = $_curr_path . DIRECTORY_SEPARATOR . $params['resource_name']; + if (file_exists($_fullpath) && is_file($_fullpath)) { + $params['resource_name'] = $_fullpath; + return true; + } + // didn't find the file, try include_path + $_params = array('file_path' => $_fullpath); + require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.get_include_path.php'); + if(smarty_core_get_include_path($_params, $this)) { + $params['resource_name'] = $_params['new_file_path']; + return true; + } + } + return false; + } + } elseif (empty($this->_plugins['resource'][$params['resource_type']])) { + $_params = array('type' => $params['resource_type']); + require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.load_resource_plugin.php'); + smarty_core_load_resource_plugin($_params, $this); + } + + return true; + } + + + /** + * Handle modifiers + * + * @param string|null $modifier_name + * @param array|null $map_array + * @return string result of modifiers + */ + function _run_mod_handler() + { + $_args = func_get_args(); + list($_modifier_name, $_map_array) = array_splice($_args, 0, 2); + list($_func_name, $_tpl_file, $_tpl_line) = + $this->_plugins['modifier'][$_modifier_name]; + + $_var = $_args[0]; + foreach ($_var as $_key => $_val) { + $_args[0] = $_val; + $_var[$_key] = call_user_func_array($_func_name, $_args); + } + return $_var; + } + + /** + * Remove starting and ending quotes from the string + * + * @param string $string + * @return string + */ + function _dequote($string) + { + if (($string{0} == "'" || $string{0} == '"') && + $string{strlen($string)-1} == $string{0}) + return substr($string, 1, -1); + else + return $string; + } + + + /** + * read in a file from line $start for $lines. + * read the entire file if $start and $lines are null. + * + * @param string $filename + * @param integer $start + * @param integer $lines + * @return string + */ + function _read_file($filename, $start=null, $lines=null) + { + if (!($fd = @fopen($filename, 'r'))) { + return false; + } + flock($fd, LOCK_SH); + if ($start == null && $lines == null) { + // read the entire file + $contents = fread($fd, filesize($filename)); + } else { + if ( $start > 1 ) { + // skip the first lines before $start + for ($loop=1; $loop < $start; $loop++) { + fgets($fd, 65536); + } + } + if ( $lines == null ) { + // read the rest of the file + while (!feof($fd)) { + $contents .= fgets($fd, 65536); + } + } else { + // read up to $lines lines + for ($loop=0; $loop < $lines; $loop++) { + $contents .= fgets($fd, 65536); + if (feof($fd)) { + break; + } + } + } + } + fclose($fd); + return $contents; + } + + /** + * get a concrete filename for automagically created content + * + * @param string $auto_base + * @param string $auto_source + * @param string $auto_id + * @return string + * @staticvar string|null + * @staticvar string|null + */ + function _get_auto_filename($auto_base, $auto_source = null, $auto_id = null) + { + $_compile_dir_sep = $this->use_sub_dirs ? DIRECTORY_SEPARATOR : '^'; + + if(@is_dir($auto_base)) { + $_return = $auto_base . DIRECTORY_SEPARATOR; + } else { + // auto_base not found, try include_path + $_params = array('file_path' => $auto_base); + require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.get_include_path.php'); + smarty_core_get_include_path($_params, $this); + $_return = isset($_params['new_file_path']) ? $_params['new_file_path'] . DIRECTORY_SEPARATOR : null; + } + + if(isset($auto_id)) { + // make auto_id safe for directory names + $auto_id = str_replace('%7C',$_compile_dir_sep,(urlencode($auto_id))); + // split into separate directories + $_return .= $auto_id . $_compile_dir_sep; + } + + if(isset($auto_source)) { + // make source name safe for filename + $_filename = urlencode(basename($auto_source)); + $_crc32 = crc32($auto_source) . $_compile_dir_sep; + // prepend %% to avoid name conflicts with + // with $params['auto_id'] names + $_crc32 = '%%' . substr($_crc32,0,3) . $_compile_dir_sep . '%%' . $_crc32; + $_return .= $_crc32 . $_filename; + } + + return $_return; + } + + /** + * unlink a file, possibly using expiration time + * + * @param string $resource + * @param integer $exp_time + */ + function _unlink($resource, $exp_time = null) + { + if(isset($exp_time)) { + if(time() - @filemtime($resource) >= $exp_time) { + return @unlink($resource); + } + } else { + return @unlink($resource); + } + } + + /** + * returns an auto_id for auto-file-functions + * + * @param string $cache_id + * @param string $compile_id + * @return string|null + */ + function _get_auto_id($cache_id=null, $compile_id=null) { + if (isset($cache_id)) + return (isset($compile_id)) ? $cache_id . '|' . $compile_id : $cache_id; + elseif(isset($compile_id)) + return $compile_id; + else + return null; + } + + /** + * trigger Smarty plugin error + * + * @param string $error_msg + * @param string $tpl_file + * @param integer $tpl_line + * @param string $file + * @param integer $line + * @param integer $error_type + */ + function _trigger_fatal_error($error_msg, $tpl_file = null, $tpl_line = null, + $file = null, $line = null, $error_type = E_USER_ERROR) + { + if(isset($file) && isset($line)) { + $info = ' ('.basename($file).", line $line)"; + } else { + $info = null; + } + if (isset($tpl_line) && isset($tpl_file)) { + trigger_error("Smarty error: [in " . $tpl_file . " line " . + $tpl_line . "]: $error_msg$info", $error_type); + } else { + trigger_error("Smarty error: $error_msg$info", $error_type); + } + } + + + /** + * callback function for preg_replace, to call a non-cacheable block + * @return string + */ + function _process_compiled_include_callback($match) { + $_func = '_smarty_tplfunc_'.$match[2].'_'.$match[3]; + ob_start(); + $_func($this); + $_ret = ob_get_contents(); + ob_end_clean(); + return $_ret; + } + + + /** + * called for included templates + * + * @param string $_smarty_include_tpl_file + * @param string $_smarty_include_vars + */ + + // $_smarty_include_tpl_file, $_smarty_include_vars + + function _smarty_include($params) + { + if ($this->debugging) { + $_params = array(); + require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.get_microtime.php'); + $debug_start_time = smarty_core_get_microtime($_params, $this); + $this->_smarty_debug_info[] = array('type' => 'template', + 'filename' => $params['smarty_include_tpl_file'], + 'depth' => ++$this->_inclusion_depth); + $included_tpls_idx = count($this->_smarty_debug_info) - 1; + } + + $this->_tpl_vars = array_merge($this->_tpl_vars, $params['smarty_include_vars']); + + // config vars are treated as local, so push a copy of the + // current ones onto the front of the stack + array_unshift($this->_config, $this->_config[0]); + + $_smarty_compile_path = $this->_get_compile_path($params['smarty_include_tpl_file']); + + + if ($this->_is_compiled($params['smarty_include_tpl_file'], $_smarty_compile_path) + || $this->_compile_resource($params['smarty_include_tpl_file'], $_smarty_compile_path)) + { + include($_smarty_compile_path); + } + + // pop the local vars off the front of the stack + array_shift($this->_config); + + $this->_inclusion_depth--; + + if ($this->debugging) { + // capture time for debugging info + $_params = array(); + require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.get_microtime.php'); + $this->_smarty_debug_info[$included_tpls_idx]['exec_time'] = smarty_core_get_microtime($_params, $this) - $debug_start_time; + } + + if ($this->caching) { + $this->_cache_info['template'][$params['smarty_include_tpl_file']] = true; + } + } + + + /** + * get or set an array of cached attributes for function that is + * not cacheable + * @return array + */ + function &_smarty_cache_attrs($cache_serial, $count) { + $_cache_attrs =& $this->_cache_info['cache_attrs'][$cache_serial][$count]; + + if ($this->_cache_including) { + /* return next set of cache_attrs */ + $_return =& current($_cache_attrs); + next($_cache_attrs); + return $_return; + + } else { + /* add a reference to a new set of cache_attrs */ + $_cache_attrs[] = array(); + return $_cache_attrs[count($_cache_attrs)-1]; + + } + + } + + + /** + * wrapper for include() retaining $this + * @return mixed + */ + function _include($filename, $once=false, $params=null) + { + if ($once) { + return include_once($filename); + } else { + return include($filename); + } + } + + + /** + * wrapper for eval() retaining $this + * @return mixed + */ + function _eval($code, $params=null) + { + return eval($code); + } + /**#@-*/ + +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php new file mode 100644 index 00000000..a3592001 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php @@ -0,0 +1,2123 @@ +<?php + +/** + * Project: Smarty: the PHP compiling template engine + * File: Smarty_Compiler.class.php + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * You may contact the authors of Smarty by e-mail at: + * monte@ispi.net + * andrei@php.net + * + * Or, write to: + * Monte Ohrt + * Director of Technology, ispi + * 237 S. 70th suite 220 + * Lincoln, NE 68510 + * + * The latest version of Smarty can be obtained from: + * http://smarty.php.net/ + * + * @link http://smarty.php.net/ + * @author Monte Ohrt <monte@ispi.net> + * @author Andrei Zmievski <andrei@php.net> + * @version 2.6.0 + * @copyright 2001-2003 ispi of Lincoln, Inc. + * @package Smarty + */ + +/* $Id: Smarty_Compiler.class.php 198623 2005-10-17 18:37:50Z jeichorn $ */ + +/** + * Template compiling class + * @package Smarty + */ +class Smarty_Compiler extends Smarty { + + // internal vars + /**#@+ + * @access private + */ + var $_sectionelse_stack = array(); // keeps track of whether section had 'else' part + var $_foreachelse_stack = array(); // keeps track of whether foreach had 'else' part + var $_literal_blocks = array(); // keeps literal template blocks + var $_php_blocks = array(); // keeps php code blocks + var $_current_file = null; // the current template being compiled + var $_current_line_no = 1; // line number for error messages + var $_capture_stack = array(); // keeps track of nested capture buffers + var $_plugin_info = array(); // keeps track of plugins to load + var $_init_smarty_vars = false; + var $_permitted_tokens = array('true','false','yes','no','on','off','null'); + var $_db_qstr_regexp = null; // regexps are setup in the constructor + var $_si_qstr_regexp = null; + var $_qstr_regexp = null; + var $_func_regexp = null; + var $_var_bracket_regexp = null; + var $_dvar_guts_regexp = null; + var $_dvar_regexp = null; + var $_cvar_regexp = null; + var $_svar_regexp = null; + var $_avar_regexp = null; + var $_mod_regexp = null; + var $_var_regexp = null; + var $_parenth_param_regexp = null; + var $_func_call_regexp = null; + var $_obj_ext_regexp = null; + var $_obj_start_regexp = null; + var $_obj_params_regexp = null; + var $_obj_call_regexp = null; + var $_cacheable_state = 0; + var $_cache_attrs_count = 0; + var $_nocache_count = 0; + var $_cache_serial = null; + var $_cache_include = null; + + var $_strip_depth = 0; + var $_additional_newline = "\n"; + + /**#@-*/ + /** + * The class constructor. + */ + function Smarty_Compiler() + { + // matches double quoted strings: + // "foobar" + // "foo\"bar" + $this->_db_qstr_regexp = '"[^"\\\\]*(?:\\\\.[^"\\\\]*)*"'; + + // matches single quoted strings: + // 'foobar' + // 'foo\'bar' + $this->_si_qstr_regexp = '\'[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*\''; + + // matches single or double quoted strings + $this->_qstr_regexp = '(?:' . $this->_db_qstr_regexp . '|' . $this->_si_qstr_regexp . ')'; + + // matches bracket portion of vars + // [0] + // [foo] + // [$bar] + $this->_var_bracket_regexp = '\[\$?[\w\.]+\]'; + + // matches $ vars (not objects): + // $foo + // $foo.bar + // $foo.bar.foobar + // $foo[0] + // $foo[$bar] + // $foo[5][blah] + // $foo[5].bar[$foobar][4] + $this->_dvar_math_regexp = '[\+\-\*\/\%]'; + $this->_dvar_math_var_regexp = '[\$\w\.\+\-\*\/\%\d\>\[\]]'; + $this->_dvar_num_var_regexp = '\-?\d+(?:\.\d+)?' . $this->_dvar_math_var_regexp; + $this->_dvar_guts_regexp = '\w+(?:' . $this->_var_bracket_regexp + . ')*(?:\.\$?\w+(?:' . $this->_var_bracket_regexp . ')*)*(?:' . $this->_dvar_math_regexp . '(?:\-?\d+(?:\.\d+)?|' . $this->_dvar_math_var_regexp . ')*)?'; + $this->_dvar_regexp = '\$' . $this->_dvar_guts_regexp; + + // matches config vars: + // #foo# + // #foobar123_foo# + $this->_cvar_regexp = '\#\w+\#'; + + // matches section vars: + // %foo.bar% + $this->_svar_regexp = '\%\w+\.\w+\%'; + + // matches all valid variables (no quotes, no modifiers) + $this->_avar_regexp = '(?:' . $this->_dvar_regexp . '|' + . $this->_cvar_regexp . '|' . $this->_svar_regexp . ')'; + + // matches valid variable syntax: + // $foo + // $foo + // #foo# + // #foo# + // "text" + // "text" + $this->_var_regexp = '(?:' . $this->_avar_regexp . '|' . $this->_qstr_regexp . ')'; + + // matches valid object call (no objects allowed in parameters): + // $foo->bar + // $foo->bar() + // $foo->bar("text") + // $foo->bar($foo, $bar, "text") + // $foo->bar($foo, "foo") + // $foo->bar->foo() + // $foo->bar->foo->bar() + $this->_obj_ext_regexp = '\->(?:\$?' . $this->_dvar_guts_regexp . ')'; + $this->_obj_params_regexp = '\((?:\w+|' + . $this->_var_regexp . '(?:\s*,\s*(?:(?:\w+|' + . $this->_var_regexp . ')))*)?\)'; + $this->_obj_start_regexp = '(?:' . $this->_dvar_regexp . '(?:' . $this->_obj_ext_regexp . ')+)'; + $this->_obj_call_regexp = '(?:' . $this->_obj_start_regexp . '(?:' . $this->_obj_params_regexp . ')?)'; + + // matches valid modifier syntax: + // |foo + // |@foo + // |foo:"bar" + // |foo:$bar + // |foo:"bar":$foobar + // |foo|bar + // |foo:$foo->bar + $this->_mod_regexp = '(?:\|@?\w+(?::(?>-?\w+|' + . $this->_obj_call_regexp . '|' . $this->_avar_regexp . '|' . $this->_qstr_regexp .'))*)'; + + // matches valid function name: + // foo123 + // _foo_bar + $this->_func_regexp = '[a-zA-Z_]\w*'; + + // matches valid registered object: + // foo->bar + $this->_reg_obj_regexp = '[a-zA-Z_]\w*->[a-zA-Z_]\w*'; + + // matches valid parameter values: + // true + // $foo + // $foo|bar + // #foo# + // #foo#|bar + // "text" + // "text"|bar + // $foo->bar + $this->_param_regexp = '(?:\s*(?:' . $this->_obj_call_regexp . '|' + . $this->_var_regexp . '|\w+)(?>' . $this->_mod_regexp . '*)\s*)'; + + // matches valid parenthesised function parameters: + // + // "text" + // $foo, $bar, "text" + // $foo|bar, "foo"|bar, $foo->bar($foo)|bar + $this->_parenth_param_regexp = '(?:\((?:\w+|' + . $this->_param_regexp . '(?:\s*,\s*(?:(?:\w+|' + . $this->_param_regexp . ')))*)?\))'; + + // matches valid function call: + // foo() + // foo_bar($foo) + // _foo_bar($foo,"bar") + // foo123($foo,$foo->bar(),"foo") + $this->_func_call_regexp = '(?:' . $this->_func_regexp . '\s*(?:' + . $this->_parenth_param_regexp . '))'; + } + + /** + * compile a resource + * + * sets $compiled_content to the compiled source + * @param string $resource_name + * @param string $source_content + * @param string $compiled_content + * @return true + */ + function _compile_file($resource_name, $source_content, &$compiled_content) + { + + if ($this->security) { + // do not allow php syntax to be executed unless specified + if ($this->php_handling == SMARTY_PHP_ALLOW && + !$this->security_settings['PHP_HANDLING']) { + $this->php_handling = SMARTY_PHP_PASSTHRU; + } + } + + $this->_load_filters(); + + $this->_current_file = $resource_name; + $this->_current_line_no = 1; + $ldq = preg_quote($this->left_delimiter, '!'); + $rdq = preg_quote($this->right_delimiter, '!'); + + // run template source through prefilter functions + if (count($this->_plugins['prefilter']) > 0) { + foreach ($this->_plugins['prefilter'] as $filter_name => $prefilter) { + if ($prefilter === false) continue; + if ($prefilter[3] || is_callable($prefilter[0])) { + $source_content = call_user_func_array($prefilter[0], + array($source_content, &$this)); + $this->_plugins['prefilter'][$filter_name][3] = true; + } else { + $this->_trigger_fatal_error("[plugin] prefilter '$filter_name' is not implemented"); + } + } + } + + /* Annihilate the comments. */ + $source_content = preg_replace("!({$ldq})\*(.*?)\*({$rdq})!se", + "'\\1*'.str_repeat(\"\n\", substr_count('\\2', \"\n\")) .'*\\3'", + $source_content); + + /* Pull out the literal blocks. */ + preg_match_all("!{$ldq}\s*literal\s*{$rdq}(.*?){$ldq}\s*/literal\s*{$rdq}!s", $source_content, $_match); + $this->_literal_blocks = $_match[1]; + $source_content = preg_replace("!{$ldq}\s*literal\s*{$rdq}(.*?){$ldq}\s*/literal\s*{$rdq}!s", + $this->_quote_replace($this->left_delimiter.'literal'.$this->right_delimiter), $source_content); + + /* Pull out the php code blocks. */ + preg_match_all("!{$ldq}php{$rdq}(.*?){$ldq}/php{$rdq}!s", $source_content, $_match); + $this->_php_blocks = $_match[1]; + $source_content = preg_replace("!{$ldq}php{$rdq}(.*?){$ldq}/php{$rdq}!s", + $this->_quote_replace($this->left_delimiter.'php'.$this->right_delimiter), $source_content); + + /* Gather all template tags. */ + preg_match_all("!{$ldq}\s*(.*?)\s*{$rdq}!s", $source_content, $_match); + $template_tags = $_match[1]; + /* Split content by template tags to obtain non-template content. */ + $text_blocks = preg_split("!{$ldq}.*?{$rdq}!s", $source_content); + + /* loop through text blocks */ + for ($curr_tb = 0, $for_max = count($text_blocks); $curr_tb < $for_max; $curr_tb++) { + /* match anything resembling php tags */ + if (preg_match_all('!(<\?(?:\w+|=)?|\?>|language\s*=\s*[\"\']?php[\"\']?)!is', $text_blocks[$curr_tb], $sp_match)) { + /* replace tags with placeholders to prevent recursive replacements */ + $sp_match[1] = array_unique($sp_match[1]); + usort($sp_match[1], '_smarty_sort_length'); + for ($curr_sp = 0, $for_max2 = count($sp_match[1]); $curr_sp < $for_max2; $curr_sp++) { + $text_blocks[$curr_tb] = str_replace($sp_match[1][$curr_sp],'%%%SMARTYSP'.$curr_sp.'%%%',$text_blocks[$curr_tb]); + } + /* process each one */ + for ($curr_sp = 0, $for_max2 = count($sp_match[1]); $curr_sp < $for_max2; $curr_sp++) { + if ($this->php_handling == SMARTY_PHP_PASSTHRU) { + /* echo php contents */ + $text_blocks[$curr_tb] = str_replace('%%%SMARTYSP'.$curr_sp.'%%%', '<?php echo \''.str_replace("'", "\'", $sp_match[1][$curr_sp]).'\'; ?>'."\n", $text_blocks[$curr_tb]); + } else if ($this->php_handling == SMARTY_PHP_QUOTE) { + /* quote php tags */ + $text_blocks[$curr_tb] = str_replace('%%%SMARTYSP'.$curr_sp.'%%%', htmlspecialchars($sp_match[1][$curr_sp]), $text_blocks[$curr_tb]); + } else if ($this->php_handling == SMARTY_PHP_REMOVE) { + /* remove php tags */ + $text_blocks[$curr_tb] = str_replace('%%%SMARTYSP'.$curr_sp.'%%%', '', $text_blocks[$curr_tb]); + } else { + /* SMARTY_PHP_ALLOW, but echo non php starting tags */ + $sp_match[1][$curr_sp] = preg_replace('%(<\?(?!php|=|$))%i', '<?php echo \'\\1\'?>'."\n", $sp_match[1][$curr_sp]); + $text_blocks[$curr_tb] = str_replace('%%%SMARTYSP'.$curr_sp.'%%%', $sp_match[1][$curr_sp], $text_blocks[$curr_tb]); + } + } + } + } + + /* Compile the template tags into PHP code. */ + $compiled_tags = array(); + for ($i = 0, $for_max = count($template_tags); $i < $for_max; $i++) { + $this->_current_line_no += substr_count($text_blocks[$i], "\n"); + $compiled_tags[] = $this->_compile_tag($template_tags[$i]); + $this->_current_line_no += substr_count($template_tags[$i], "\n"); + } + + $compiled_content = ''; + + /* Interleave the compiled contents and text blocks to get the final result. */ + for ($i = 0, $for_max = count($compiled_tags); $i < $for_max; $i++) { + if ($compiled_tags[$i] == '') { + // tag result empty, remove first newline from following text block + $text_blocks[$i+1] = preg_replace('!^(\r\n|\r|\n)!', '', $text_blocks[$i+1]); + } + $compiled_content .= $text_blocks[$i].$compiled_tags[$i]; + } + $compiled_content .= $text_blocks[$i]; + + /* Reformat data between 'strip' and '/strip' tags, removing spaces, tabs and newlines. */ + if (preg_match_all("!{$ldq}strip{$rdq}.*?{$ldq}/strip{$rdq}!s", $compiled_content, $_match)) { + $strip_tags = $_match[0]; + $strip_tags_modified = preg_replace("!{$ldq}/?strip{$rdq}|[\t ]+$|^[\t ]+!m", '', $strip_tags); + $strip_tags_modified = preg_replace('![\r\n]+!m', '', $strip_tags_modified); + for ($i = 0, $for_max = count($strip_tags); $i < $for_max; $i++) + $compiled_content = preg_replace("!{$ldq}strip{$rdq}.*?{$ldq}/strip{$rdq}!s", + $this->_quote_replace($strip_tags_modified[$i]), + $compiled_content, 1); + } + + // remove \n from the end of the file, if any + if (($_len=strlen($compiled_content)) && ($compiled_content{$_len - 1} == "\n" )) { + $compiled_content = substr($compiled_content, 0, -1); + } + + if (!empty($this->_cache_serial)) { + $compiled_content = "<?php \$this->_cache_serials['".$this->_cache_include."'] = '".$this->_cache_serial."'; ?>" . $compiled_content; + } + + // remove unnecessary close/open tags + $compiled_content = preg_replace('!\?>\n?<\?php!', '', $compiled_content); + + // run compiled template through postfilter functions + if (count($this->_plugins['postfilter']) > 0) { + foreach ($this->_plugins['postfilter'] as $filter_name => $postfilter) { + if ($postfilter === false) continue; + if ($postfilter[3] || is_callable($postfilter[0])) { + $compiled_content = call_user_func_array($postfilter[0], + array($compiled_content, &$this)); + $this->_plugins['postfilter'][$filter_name][3] = true; + } else { + $this->_trigger_fatal_error("Smarty plugin error: postfilter '$filter_name' is not implemented"); + } + } + } + + // put header at the top of the compiled template + $template_header = "<?php /* Smarty version ".$this->_version.", created on ".strftime("%Y-%m-%d %H:%M:%S")."\n"; + $template_header .= " compiled from ".strtr(urlencode($resource_name), array('%2F'=>'/', '%3A'=>':'))." */ ?>\n"; + + /* Emit code to load needed plugins. */ + $this->_plugins_code = ''; + if (count($this->_plugin_info)) { + $_plugins_params = "array('plugins' => array("; + foreach ($this->_plugin_info as $plugin_type => $plugins) { + foreach ($plugins as $plugin_name => $plugin_info) { + $_plugins_params .= "array('$plugin_type', '$plugin_name', '$plugin_info[0]', $plugin_info[1], "; + $_plugins_params .= $plugin_info[2] ? 'true),' : 'false),'; + } + } + $_plugins_params .= '))'; + $plugins_code = "<?php require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.load_plugins.php');\nsmarty_core_load_plugins($_plugins_params, \$this); ?>\n"; + $template_header .= $plugins_code; + $this->_plugin_info = array(); + $this->_plugins_code = $plugins_code; + } + + if ($this->_init_smarty_vars) { + $template_header .= "<?php require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.assign_smarty_interface.php');\nsmarty_core_assign_smarty_interface(null, \$this); ?>\n"; + $this->_init_smarty_vars = false; + } + + $compiled_content = $template_header . $compiled_content; + + return true; + } + + /** + * Compile a template tag + * + * @param string $template_tag + * @return string + */ + function _compile_tag($template_tag) + { + /* Matched comment. */ + if ($template_tag{0} == '*' && $template_tag{strlen($template_tag) - 1} == '*') + return ''; + + /* Split tag into two three parts: command, command modifiers and the arguments. */ + if(! preg_match('/^(?:(' . $this->_obj_call_regexp . '|' . $this->_var_regexp + . '|\/?' . $this->_reg_obj_regexp . '|\/?' . $this->_func_regexp . ')(' . $this->_mod_regexp . '*)) + (?:\s+(.*))?$ + /xs', $template_tag, $match)) { + $this->_syntax_error("unrecognized tag: $template_tag", E_USER_ERROR, __FILE__, __LINE__); + } + + $tag_command = $match[1]; + $tag_modifier = isset($match[2]) ? $match[2] : null; + $tag_args = isset($match[3]) ? $match[3] : null; + + if (preg_match('!^' . $this->_obj_call_regexp . '|' . $this->_var_regexp . '$!', $tag_command)) { + /* tag name is a variable or object */ + $_return = $this->_parse_var_props($tag_command . $tag_modifier, $this->_parse_attrs($tag_args)); + if(isset($_tag_attrs['assign'])) { + return "<?php \$this->assign('" . $this->_dequote($_tag_attrs['assign']) . "', $_return ); ?>\n"; + } else { + return "<?php echo $_return; ?>" . $this->_additional_newline; + } + } + + /* If the tag name is a registered object, we process it. */ + if (preg_match('!^\/?' . $this->_reg_obj_regexp . '$!', $tag_command)) { + return $this->_compile_registered_object_tag($tag_command, $this->_parse_attrs($tag_args), $tag_modifier); + } + + switch ($tag_command) { + case 'include': + return $this->_compile_include_tag($tag_args); + + case 'include_php': + return $this->_compile_include_php_tag($tag_args); + + case 'if': + return $this->_compile_if_tag($tag_args); + + case 'else': + return '<?php else: ?>'; + + case 'elseif': + return $this->_compile_if_tag($tag_args, true); + + case '/if': + return '<?php endif; ?>'; + + case 'capture': + return $this->_compile_capture_tag(true, $tag_args); + + case '/capture': + return $this->_compile_capture_tag(false); + + case 'ldelim': + return $this->left_delimiter; + + case 'rdelim': + return $this->right_delimiter; + + case 'section': + array_push($this->_sectionelse_stack, false); + return $this->_compile_section_start($tag_args); + + case 'sectionelse': + $this->_sectionelse_stack[count($this->_sectionelse_stack)-1] = true; + return "<?php endfor; else: ?>"; + + case '/section': + if (array_pop($this->_sectionelse_stack)) + return "<?php endif; ?>"; + else + return "<?php endfor; endif; ?>"; + + case 'foreach': + array_push($this->_foreachelse_stack, false); + return $this->_compile_foreach_start($tag_args); + break; + + case 'foreachelse': + $this->_foreachelse_stack[count($this->_foreachelse_stack)-1] = true; + return "<?php endforeach; unset(\$_from); else: ?>"; + + case '/foreach': + if (array_pop($this->_foreachelse_stack)) + return "<?php endif; ?>"; + else + return "<?php endforeach; unset(\$_from); endif; ?>"; + + case 'strip': + case '/strip': + if ($tag_command{0}=='/') { + if (--$this->_strip_depth==0) { /* outermost closing {/strip} */ + $this->_additional_newline = "\n"; + return $this->left_delimiter.$tag_command.$this->right_delimiter; + } + } else { + if ($this->_strip_depth++==0) { /* outermost opening {strip} */ + $this->_additional_newline = ""; + return $this->left_delimiter.$tag_command.$this->right_delimiter; + } + } + return ''; + + case 'literal': + list (,$literal_block) = each($this->_literal_blocks); + $this->_current_line_no += substr_count($literal_block, "\n"); + return "<?php echo '".str_replace("'", "\'", str_replace("\\", "\\\\", $literal_block))."'; ?>" . $this->_additional_newline; + + case 'php': + if ($this->security && !$this->security_settings['PHP_TAGS']) { + $this->_syntax_error("(secure mode) php tags not permitted", E_USER_WARNING, __FILE__, __LINE__); + return; + } + list (,$php_block) = each($this->_php_blocks); + $this->_current_line_no += substr_count($php_block, "\n"); + return '<?php '.$php_block.' ?>'; + + case 'insert': + return $this->_compile_insert_tag($tag_args); + + default: + if ($this->_compile_compiler_tag($tag_command, $tag_args, $output)) { + return $output; + } else if ($this->_compile_block_tag($tag_command, $tag_args, $tag_modifier, $output)) { + return $output; + } else { + return $this->_compile_custom_tag($tag_command, $tag_args, $tag_modifier); + } + } + } + + + /** + * compile the custom compiler tag + * + * sets $output to the compiled custom compiler tag + * @param string $tag_command + * @param string $tag_args + * @param string $output + * @return boolean + */ + function _compile_compiler_tag($tag_command, $tag_args, &$output) + { + $found = false; + $have_function = true; + + /* + * First we check if the compiler function has already been registered + * or loaded from a plugin file. + */ + if (isset($this->_plugins['compiler'][$tag_command])) { + $found = true; + $plugin_func = $this->_plugins['compiler'][$tag_command][0]; + if (!is_callable($plugin_func)) { + $message = "compiler function '$tag_command' is not implemented"; + $have_function = false; + } + } + /* + * Otherwise we need to load plugin file and look for the function + * inside it. + */ + else if ($plugin_file = $this->_get_plugin_filepath('compiler', $tag_command)) { + $found = true; + + include_once $plugin_file; + + $plugin_func = 'smarty_compiler_' . $tag_command; + if (!is_callable($plugin_func)) { + $message = "plugin function $plugin_func() not found in $plugin_file\n"; + $have_function = false; + } else { + $this->_plugins['compiler'][$tag_command] = array($plugin_func, null, null, null, true); + } + } + + /* + * True return value means that we either found a plugin or a + * dynamically registered function. False means that we didn't and the + * compiler should now emit code to load custom function plugin for this + * tag. + */ + if ($found) { + if ($have_function) { + $output = call_user_func_array($plugin_func, array($tag_args, &$this)); + if($output != '') { + $output = '<?php ' . $this->_push_cacheable_state('compiler', $tag_command) + . $output + . $this->_pop_cacheable_state('compiler', $tag_command) . ' ?>'; + } + } else { + $this->_syntax_error($message, E_USER_WARNING, __FILE__, __LINE__); + } + return true; + } else { + return false; + } + } + + + /** + * compile block function tag + * + * sets $output to compiled block function tag + * @param string $tag_command + * @param string $tag_args + * @param string $tag_modifier + * @param string $output + * @return boolean + */ + function _compile_block_tag($tag_command, $tag_args, $tag_modifier, &$output) + { + if ($tag_command{0} == '/') { + $start_tag = false; + $tag_command = substr($tag_command, 1); + } else + $start_tag = true; + + $found = false; + $have_function = true; + + /* + * First we check if the block function has already been registered + * or loaded from a plugin file. + */ + if (isset($this->_plugins['block'][$tag_command])) { + $found = true; + $plugin_func = $this->_plugins['block'][$tag_command][0]; + if (!is_callable($plugin_func)) { + $message = "block function '$tag_command' is not implemented"; + $have_function = false; + } + } + /* + * Otherwise we need to load plugin file and look for the function + * inside it. + */ + else if ($plugin_file = $this->_get_plugin_filepath('block', $tag_command)) { + $found = true; + + include_once $plugin_file; + + $plugin_func = 'smarty_block_' . $tag_command; + if (!function_exists($plugin_func)) { + $message = "plugin function $plugin_func() not found in $plugin_file\n"; + $have_function = false; + } else { + $this->_plugins['block'][$tag_command] = array($plugin_func, null, null, null, true); + + } + } + + if (!$found) { + return false; + } else if (!$have_function) { + $this->_syntax_error($message, E_USER_WARNING, __FILE__, __LINE__); + return true; + } + + /* + * Even though we've located the plugin function, compilation + * happens only once, so the plugin will still need to be loaded + * at runtime for future requests. + */ + $this->_add_plugin('block', $tag_command); + + if ($start_tag) { + $output = '<?php ' . $this->_push_cacheable_state('block', $tag_command); + $attrs = $this->_parse_attrs($tag_args); + $arg_list = $this->_compile_arg_list('block', $tag_command, $attrs, $_cache_attrs=''); + $output .= "$_cache_attrs\$_params = \$this->_tag_stack[] = array('$tag_command', array(".implode(',', $arg_list).')); '; + $output .= $this->_compile_plugin_call('block', $tag_command).'($_params[1], null, $this, $_block_repeat=true); unset($_params);'; + $output .= 'while ($_block_repeat) { ob_start(); ?>'; + } else { + $output = '<?php $this->_block_content = ob_get_contents(); ob_end_clean(); '; + $_out_tag_text = $this->_compile_plugin_call('block', $tag_command).'($this->_tag_stack[count($this->_tag_stack)-1][1], $this->_block_content, $this, $_block_repeat=false)'; + if ($tag_modifier != '') { + $this->_parse_modifiers($_out_tag_text, $tag_modifier); + } + $output .= 'echo '.$_out_tag_text.'; } '; + $output .= " array_pop(\$this->_tag_stack); " . $this->_pop_cacheable_state('block', $tag_command) . '?>'; + } + + return true; + } + + + /** + * compile custom function tag + * + * @param string $tag_command + * @param string $tag_args + * @param string $tag_modifier + * @return string + */ + function _compile_custom_tag($tag_command, $tag_args, $tag_modifier) + { + $this->_add_plugin('function', $tag_command); + + $_cacheable_state = $this->_push_cacheable_state('function', $tag_command); + $attrs = $this->_parse_attrs($tag_args); + $arg_list = $this->_compile_arg_list('function', $tag_command, $attrs, $_cache_attrs=''); + + $_return = $this->_compile_plugin_call('function', $tag_command).'(array('.implode(',', $arg_list)."), \$this)"; + if($tag_modifier != '') { + $this->_parse_modifiers($_return, $tag_modifier); + } + + if($_return != '') { + $_return = '<?php ' . $_cacheable_state . $_cache_attrs . 'echo ' . $_return . ';' + . $this->_pop_cacheable_state('function', $tag_command) . "?>" . $this->_additional_newline; + } + + return $_return; + } + + /** + * compile a registered object tag + * + * @param string $tag_command + * @param array $attrs + * @param string $tag_modifier + * @return string + */ + function _compile_registered_object_tag($tag_command, $attrs, $tag_modifier) + { + if ($tag_command{0} == '/') { + $start_tag = false; + $tag_command = substr($tag_command, 1); + } else { + $start_tag = true; + } + + list($object, $obj_comp) = explode('->', $tag_command); + + $arg_list = array(); + if(count($attrs)) { + $_assign_var = false; + foreach ($attrs as $arg_name => $arg_value) { + if($arg_name == 'assign') { + $_assign_var = $arg_value; + unset($attrs['assign']); + continue; + } + if (is_bool($arg_value)) + $arg_value = $arg_value ? 'true' : 'false'; + $arg_list[] = "'$arg_name' => $arg_value"; + } + } + + if($this->_reg_objects[$object][2]) { + // smarty object argument format + $args = "array(".implode(',', (array)$arg_list)."), \$this"; + } else { + // traditional argument format + $args = implode(',', array_values($attrs)); + if (empty($args)) { + $args = 'null'; + } + } + + $prefix = ''; + $postfix = ''; + $newline = ''; + if(!is_object($this->_reg_objects[$object][0])) { + $this->_trigger_fatal_error("registered '$object' is not an object"); + } elseif(!empty($this->_reg_objects[$object][1]) && !in_array($obj_comp, $this->_reg_objects[$object][1])) { + $this->_trigger_fatal_error("'$obj_comp' is not a registered component of object '$object'"); + } elseif(method_exists($this->_reg_objects[$object][0], $obj_comp)) { + // method + if(in_array($obj_comp, $this->_reg_objects[$object][3])) { + // block method + if ($start_tag) { + $prefix = "\$this->_tag_stack[] = array('$obj_comp', $args); "; + $prefix .= "\$this->_reg_objects['$object'][0]->$obj_comp(\$this->_tag_stack[count(\$this->_tag_stack)-1][1], null, \$this, \$_block_repeat=true); "; + $prefix .= "while (\$_block_repeat) { ob_start();"; + $return = null; + $postfix = ''; + } else { + $prefix = "\$this->_obj_block_content = ob_get_contents(); ob_end_clean(); "; + $return = "\$this->_reg_objects['$object'][0]->$obj_comp(\$this->_tag_stack[count(\$this->_tag_stack)-1][1], \$this->_obj_block_content, \$this, \$_block_repeat=false)"; + $postfix = "} array_pop(\$this->_tag_stack);"; + } + } else { + // non-block method + $return = "\$this->_reg_objects['$object'][0]->$obj_comp($args)"; + } + } else { + // property + $return = "\$this->_reg_objects['$object'][0]->$obj_comp"; + } + + if($return != null) { + if($tag_modifier != '') { + $this->_parse_modifiers($return, $tag_modifier); + } + + if(!empty($_assign_var)) { + $output = "\$this->assign('" . $this->_dequote($_assign_var) ."', $return);"; + } else { + $output = 'echo ' . $return . ';'; + $newline = $this->_additional_newline; + } + } else { + $output = ''; + } + + return '<?php ' . $prefix . $output . $postfix . "?>" . $newline; + } + + /** + * Compile {insert ...} tag + * + * @param string $tag_args + * @return string + */ + function _compile_insert_tag($tag_args) + { + $attrs = $this->_parse_attrs($tag_args); + $name = $this->_dequote($attrs['name']); + + if (empty($name)) { + $this->_syntax_error("missing insert name", E_USER_ERROR, __FILE__, __LINE__); + } + + if (!empty($attrs['script'])) { + $delayed_loading = true; + } else { + $delayed_loading = false; + } + + foreach ($attrs as $arg_name => $arg_value) { + if (is_bool($arg_value)) + $arg_value = $arg_value ? 'true' : 'false'; + $arg_list[] = "'$arg_name' => $arg_value"; + } + + $this->_add_plugin('insert', $name, $delayed_loading); + + $_params = "array('args' => array(".implode(', ', (array)$arg_list)."))"; + + return "<?php require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.run_insert_handler.php');\necho smarty_core_run_insert_handler($_params, \$this); ?>" . $this->_additional_newline; + } + + /** + * Compile {include ...} tag + * + * @param string $tag_args + * @return string + */ + function _compile_include_tag($tag_args) + { + $attrs = $this->_parse_attrs($tag_args); + $arg_list = array(); + + if (empty($attrs['file'])) { + $this->_syntax_error("missing 'file' attribute in include tag", E_USER_ERROR, __FILE__, __LINE__); + } + + foreach ($attrs as $arg_name => $arg_value) { + if ($arg_name == 'file') { + $include_file = $arg_value; + continue; + } else if ($arg_name == 'assign') { + $assign_var = $arg_value; + continue; + } + if (is_bool($arg_value)) + $arg_value = $arg_value ? 'true' : 'false'; + $arg_list[] = "'$arg_name' => $arg_value"; + } + + $output = '<?php '; + + if (isset($assign_var)) { + $output .= "ob_start();\n"; + } + + $output .= + "\$_smarty_tpl_vars = \$this->_tpl_vars;\n"; + + + $_params = "array('smarty_include_tpl_file' => " . $include_file . ", 'smarty_include_vars' => array(".implode(',', (array)$arg_list)."))"; + $output .= "\$this->_smarty_include($_params);\n" . + "\$this->_tpl_vars = \$_smarty_tpl_vars;\n" . + "unset(\$_smarty_tpl_vars);\n"; + + if (isset($assign_var)) { + $output .= "\$this->assign(" . $assign_var . ", ob_get_contents()); ob_end_clean();\n"; + } + + $output .= ' ?>'; + + return $output; + + } + + /** + * Compile {include ...} tag + * + * @param string $tag_args + * @return string + */ + function _compile_include_php_tag($tag_args) + { + $attrs = $this->_parse_attrs($tag_args); + + if (empty($attrs['file'])) { + $this->_syntax_error("missing 'file' attribute in include_php tag", E_USER_ERROR, __FILE__, __LINE__); + } + + $assign_var = (empty($attrs['assign'])) ? '' : $this->_dequote($attrs['assign']); + $once_var = (empty($attrs['once']) || $attrs['once']=='false') ? 'false' : 'true'; + + foreach($attrs as $arg_name => $arg_value) { + if($arg_name != 'file' AND $arg_name != 'once' AND $arg_name != 'assign') { + if(is_bool($arg_value)) + $arg_value = $arg_value ? 'true' : 'false'; + $arg_list[] = "'$arg_name' => $arg_value"; + } + } + + $_params = "array('smarty_file' => " . $attrs['file'] . ", 'smarty_assign' => '$assign_var', 'smarty_once' => $once_var, 'smarty_include_vars' => array(".implode(',', (array)$arg_list)."))"; + + return "<?php require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.smarty_include_php.php');\nsmarty_core_smarty_include_php($_params, \$this); ?>" . $this->_additional_newline; + } + + + /** + * Compile {section ...} tag + * + * @param string $tag_args + * @return string + */ + function _compile_section_start($tag_args) + { + $attrs = $this->_parse_attrs($tag_args); + $arg_list = array(); + + $output = '<?php '; + $section_name = $attrs['name']; + if (empty($section_name)) { + $this->_syntax_error("missing section name", E_USER_ERROR, __FILE__, __LINE__); + } + + $output .= "if (isset(\$this->_sections[$section_name])) unset(\$this->_sections[$section_name]);\n"; + $section_props = "\$this->_sections[$section_name]"; + + foreach ($attrs as $attr_name => $attr_value) { + switch ($attr_name) { + case 'loop': + $output .= "{$section_props}['loop'] = is_array(\$_loop=$attr_value) ? count(\$_loop) : max(0, (int)\$_loop); unset(\$_loop);\n"; + break; + + case 'show': + if (is_bool($attr_value)) + $show_attr_value = $attr_value ? 'true' : 'false'; + else + $show_attr_value = "(bool)$attr_value"; + $output .= "{$section_props}['show'] = $show_attr_value;\n"; + break; + + case 'name': + $output .= "{$section_props}['$attr_name'] = $attr_value;\n"; + break; + + case 'max': + case 'start': + $output .= "{$section_props}['$attr_name'] = (int)$attr_value;\n"; + break; + + case 'step': + $output .= "{$section_props}['$attr_name'] = ((int)$attr_value) == 0 ? 1 : (int)$attr_value;\n"; + break; + + default: + $this->_syntax_error("unknown section attribute - '$attr_name'", E_USER_ERROR, __FILE__, __LINE__); + break; + } + } + + if (!isset($attrs['show'])) + $output .= "{$section_props}['show'] = true;\n"; + + if (!isset($attrs['loop'])) + $output .= "{$section_props}['loop'] = 1;\n"; + + if (!isset($attrs['max'])) + $output .= "{$section_props}['max'] = {$section_props}['loop'];\n"; + else + $output .= "if ({$section_props}['max'] < 0)\n" . + " {$section_props}['max'] = {$section_props}['loop'];\n"; + + if (!isset($attrs['step'])) + $output .= "{$section_props}['step'] = 1;\n"; + + if (!isset($attrs['start'])) + $output .= "{$section_props}['start'] = {$section_props}['step'] > 0 ? 0 : {$section_props}['loop']-1;\n"; + else { + $output .= "if ({$section_props}['start'] < 0)\n" . + " {$section_props}['start'] = max({$section_props}['step'] > 0 ? 0 : -1, {$section_props}['loop'] + {$section_props}['start']);\n" . + "else\n" . + " {$section_props}['start'] = min({$section_props}['start'], {$section_props}['step'] > 0 ? {$section_props}['loop'] : {$section_props}['loop']-1);\n"; + } + + $output .= "if ({$section_props}['show']) {\n"; + if (!isset($attrs['start']) && !isset($attrs['step']) && !isset($attrs['max'])) { + $output .= " {$section_props}['total'] = {$section_props}['loop'];\n"; + } else { + $output .= " {$section_props}['total'] = min(ceil(({$section_props}['step'] > 0 ? {$section_props}['loop'] - {$section_props}['start'] : {$section_props}['start']+1)/abs({$section_props}['step'])), {$section_props}['max']);\n"; + } + $output .= " if ({$section_props}['total'] == 0)\n" . + " {$section_props}['show'] = false;\n" . + "} else\n" . + " {$section_props}['total'] = 0;\n"; + + $output .= "if ({$section_props}['show']):\n"; + $output .= " + for ({$section_props}['index'] = {$section_props}['start'], {$section_props}['iteration'] = 1; + {$section_props}['iteration'] <= {$section_props}['total']; + {$section_props}['index'] += {$section_props}['step'], {$section_props}['iteration']++):\n"; + $output .= "{$section_props}['rownum'] = {$section_props}['iteration'];\n"; + $output .= "{$section_props}['index_prev'] = {$section_props}['index'] - {$section_props}['step'];\n"; + $output .= "{$section_props}['index_next'] = {$section_props}['index'] + {$section_props}['step'];\n"; + $output .= "{$section_props}['first'] = ({$section_props}['iteration'] == 1);\n"; + $output .= "{$section_props}['last'] = ({$section_props}['iteration'] == {$section_props}['total']);\n"; + + $output .= "?>"; + + return $output; + } + + + /** + * Compile {foreach ...} tag. + * + * @param string $tag_args + * @return string + */ + function _compile_foreach_start($tag_args) + { + $attrs = $this->_parse_attrs($tag_args); + $arg_list = array(); + + if (empty($attrs['from'])) { + $this->_syntax_error("missing 'from' attribute", E_USER_ERROR, __FILE__, __LINE__); + } + + if (empty($attrs['item'])) { + $this->_syntax_error("missing 'item' attribute", E_USER_ERROR, __FILE__, __LINE__); + } + + $from = $attrs['from']; + $item = $this->_dequote($attrs['item']); + if (isset($attrs['name'])) + $name = $attrs['name']; + + $output = '<?php '; + if (isset($name)) { + $output .= "if (isset(\$this->_foreach[$name])) unset(\$this->_foreach[$name]);\n"; + $foreach_props = "\$this->_foreach[$name]"; + } + + $key_part = ''; + + foreach ($attrs as $attr_name => $attr_value) { + switch ($attr_name) { + case 'key': + $key = $this->_dequote($attrs['key']); + $key_part = "\$this->_tpl_vars['$key'] => "; + break; + + case 'name': + $output .= "{$foreach_props}['$attr_name'] = $attr_value;\n"; + break; + } + } + + if (isset($name)) { + $output .= "{$foreach_props}['total'] = count(\$_from = (array)$from);\n"; + $output .= "{$foreach_props}['show'] = {$foreach_props}['total'] > 0;\n"; + $output .= "if ({$foreach_props}['show']):\n"; + $output .= "{$foreach_props}['iteration'] = 0;\n"; + $output .= " foreach (\$_from as $key_part\$this->_tpl_vars['$item']):\n"; + $output .= " {$foreach_props}['iteration']++;\n"; + $output .= " {$foreach_props}['first'] = ({$foreach_props}['iteration'] == 1);\n"; + $output .= " {$foreach_props}['last'] = ({$foreach_props}['iteration'] == {$foreach_props}['total']);\n"; + } else { + $output .= "if (count(\$_from = (array)$from)):\n"; + $output .= " foreach (\$_from as $key_part\$this->_tpl_vars['$item']):\n"; + } + $output .= '?>'; + + return $output; + } + + + /** + * Compile {capture} .. {/capture} tags + * + * @param boolean $start true if this is the {capture} tag + * @param string $tag_args + * @return string + */ + + function _compile_capture_tag($start, $tag_args = '') + { + $attrs = $this->_parse_attrs($tag_args); + + if ($start) { + if (isset($attrs['name'])) + $buffer = $attrs['name']; + else + $buffer = "'default'"; + + if (isset($attrs['assign'])) + $assign = $attrs['assign']; + else + $assign = null; + $output = "<?php ob_start(); ?>"; + $this->_capture_stack[] = array($buffer, $assign); + } else { + list($buffer, $assign) = array_pop($this->_capture_stack); + $output = "<?php \$this->_smarty_vars['capture'][$buffer] = ob_get_contents(); "; + if (isset($assign)) { + $output .= " \$this->assign($assign, ob_get_contents());"; + } + $output .= "ob_end_clean(); ?>"; + } + + return $output; + } + + /** + * Compile {if ...} tag + * + * @param string $tag_args + * @param boolean $elseif if true, uses elseif instead of if + * @return string + */ + function _compile_if_tag($tag_args, $elseif = false) + { + + /* Tokenize args for 'if' tag. */ + preg_match_all('/(?> + ' . $this->_obj_call_regexp . '(?:' . $this->_mod_regexp . '*)? | # valid object call + ' . $this->_var_regexp . '(?:' . $this->_mod_regexp . '*)? | # var or quoted string + \-?0[xX][0-9a-fA-F]+|\-?\d+(?:\.\d+)?|\.\d+|!==|===|==|!=|<>|<<|>>|<=|>=|\&\&|\|\||\(|\)|,|\!|\^|=|\&|\~|<|>|\||\%|\+|\-|\/|\*|\@ | # valid non-word token + \b\w+\b | # valid word token + \S+ # anything else + )/x', $tag_args, $match); + + $tokens = $match[0]; + + // make sure we have balanced parenthesis + $token_count = array_count_values($tokens); + if(isset($token_count['(']) && $token_count['('] != $token_count[')']) { + $this->_syntax_error("unbalanced parenthesis in if statement", E_USER_ERROR, __FILE__, __LINE__); + } + + $is_arg_stack = array(); + + for ($i = 0; $i < count($tokens); $i++) { + + $token = &$tokens[$i]; + + switch (strtolower($token)) { + case '!': + case '%': + case '!==': + case '==': + case '===': + case '>': + case '<': + case '!=': + case '<>': + case '<<': + case '>>': + case '<=': + case '>=': + case '&&': + case '||': + case '|': + case '^': + case '&': + case '~': + case ')': + case ',': + case '+': + case '-': + case '*': + case '/': + case '@': + break; + + case 'eq': + $token = '=='; + break; + + case 'ne': + case 'neq': + $token = '!='; + break; + + case 'lt': + $token = '<'; + break; + + case 'le': + case 'lte': + $token = '<='; + break; + + case 'gt': + $token = '>'; + break; + + case 'ge': + case 'gte': + $token = '>='; + break; + + case 'and': + $token = '&&'; + break; + + case 'or': + $token = '||'; + break; + + case 'not': + $token = '!'; + break; + + case 'mod': + $token = '%'; + break; + + case '(': + array_push($is_arg_stack, $i); + break; + + case 'is': + /* If last token was a ')', we operate on the parenthesized + expression. The start of the expression is on the stack. + Otherwise, we operate on the last encountered token. */ + if ($tokens[$i-1] == ')') + $is_arg_start = array_pop($is_arg_stack); + else + $is_arg_start = $i-1; + /* Construct the argument for 'is' expression, so it knows + what to operate on. */ + $is_arg = implode(' ', array_slice($tokens, $is_arg_start, $i - $is_arg_start)); + + /* Pass all tokens from next one until the end to the + 'is' expression parsing function. The function will + return modified tokens, where the first one is the result + of the 'is' expression and the rest are the tokens it + didn't touch. */ + $new_tokens = $this->_parse_is_expr($is_arg, array_slice($tokens, $i+1)); + + /* Replace the old tokens with the new ones. */ + array_splice($tokens, $is_arg_start, count($tokens), $new_tokens); + + /* Adjust argument start so that it won't change from the + current position for the next iteration. */ + $i = $is_arg_start; + break; + + default: + if(preg_match('!^' . $this->_func_regexp . '$!', $token) ) { + // function call + if($this->security && + !in_array($token, $this->security_settings['IF_FUNCS'])) { + $this->_syntax_error("(secure mode) '$token' not allowed in if statement", E_USER_ERROR, __FILE__, __LINE__); + } + } elseif(preg_match('!^' . $this->_obj_call_regexp . '|' . $this->_var_regexp . '(?:' . $this->_mod_regexp . '*)$!', $token)) { + // object or variable + $token = $this->_parse_var_props($token); + } elseif(is_numeric($token)) { + // number, skip it + } else { + $this->_syntax_error("unidentified token '$token'", E_USER_ERROR, __FILE__, __LINE__); + } + break; + } + } + + if ($elseif) + return '<?php elseif ('.implode(' ', $tokens).'): ?>'; + else + return '<?php if ('.implode(' ', $tokens).'): ?>'; + } + + + function _compile_arg_list($type, $name, $attrs, &$cache_code) { + $arg_list = array(); + + if (isset($type) && isset($name) + && isset($this->_plugins[$type]) + && isset($this->_plugins[$type][$name]) + && empty($this->_plugins[$type][$name][4]) + && is_array($this->_plugins[$type][$name][5]) + ) { + /* we have a list of parameters that should be cached */ + $_cache_attrs = $this->_plugins[$type][$name][5]; + $_count = $this->_cache_attrs_count++; + $cache_code = "\$_cache_attrs =& \$this->_smarty_cache_attrs('$this->_cache_serial','$_count');"; + + } else { + /* no parameters are cached */ + $_cache_attrs = null; + } + + foreach ($attrs as $arg_name => $arg_value) { + if (is_bool($arg_value)) + $arg_value = $arg_value ? 'true' : 'false'; + if (is_null($arg_value)) + $arg_value = 'null'; + if ($_cache_attrs && in_array($arg_name, $_cache_attrs)) { + $arg_list[] = "'$arg_name' => (\$this->_cache_including) ? \$_cache_attrs['$arg_name'] : (\$_cache_attrs['$arg_name']=$arg_value)"; + } else { + $arg_list[] = "'$arg_name' => $arg_value"; + } + } + return $arg_list; + } + + /** + * Parse is expression + * + * @param string $is_arg + * @param array $tokens + * @return array + */ + function _parse_is_expr($is_arg, $tokens) + { + $expr_end = 0; + $negate_expr = false; + + if (($first_token = array_shift($tokens)) == 'not') { + $negate_expr = true; + $expr_type = array_shift($tokens); + } else + $expr_type = $first_token; + + switch ($expr_type) { + case 'even': + if (@$tokens[$expr_end] == 'by') { + $expr_end++; + $expr_arg = $tokens[$expr_end++]; + $expr = "!(($is_arg / $expr_arg) % " . $this->_parse_var_props($expr_arg) . ")"; + } else + $expr = "!($is_arg % 2)"; + break; + + case 'odd': + if (@$tokens[$expr_end] == 'by') { + $expr_end++; + $expr_arg = $tokens[$expr_end++]; + $expr = "(($is_arg / $expr_arg) % ". $this->_parse_var_props($expr_arg) . ")"; + } else + $expr = "($is_arg % 2)"; + break; + + case 'div': + if (@$tokens[$expr_end] == 'by') { + $expr_end++; + $expr_arg = $tokens[$expr_end++]; + $expr = "!($is_arg % " . $this->_parse_var_props($expr_arg) . ")"; + } else { + $this->_syntax_error("expecting 'by' after 'div'", E_USER_ERROR, __FILE__, __LINE__); + } + break; + + default: + $this->_syntax_error("unknown 'is' expression - '$expr_type'", E_USER_ERROR, __FILE__, __LINE__); + break; + } + + if ($negate_expr) { + $expr = "!($expr)"; + } + + array_splice($tokens, 0, $expr_end, $expr); + + return $tokens; + } + + + /** + * Parse attribute string + * + * @param string $tag_args + * @return array + */ + function _parse_attrs($tag_args) + { + + /* Tokenize tag attributes. */ + preg_match_all('/(?:' . $this->_obj_call_regexp . '|' . $this->_qstr_regexp . ' | (?>[^"\'=\s]+) + )+ | + [=] + /x', $tag_args, $match); + $tokens = $match[0]; + + $attrs = array(); + /* Parse state: + 0 - expecting attribute name + 1 - expecting '=' + 2 - expecting attribute value (not '=') */ + $state = 0; + + foreach ($tokens as $token) { + switch ($state) { + case 0: + /* If the token is a valid identifier, we set attribute name + and go to state 1. */ + if (preg_match('!^\w+$!', $token)) { + $attr_name = $token; + $state = 1; + } else + $this->_syntax_error("invalid attribute name: '$token'", E_USER_ERROR, __FILE__, __LINE__); + break; + + case 1: + /* If the token is '=', then we go to state 2. */ + if ($token == '=') { + $state = 2; + } else + $this->_syntax_error("expecting '=' after attribute name '$last_token'", E_USER_ERROR, __FILE__, __LINE__); + break; + + case 2: + /* If token is not '=', we set the attribute value and go to + state 0. */ + if ($token != '=') { + /* We booleanize the token if it's a non-quoted possible + boolean value. */ + if (preg_match('!^(on|yes|true)$!', $token)) { + $token = 'true'; + } else if (preg_match('!^(off|no|false)$!', $token)) { + $token = 'false'; + } else if ($token == 'null') { + $token = 'null'; + } else if (preg_match('!^-?([0-9]+|0[xX][0-9a-fA-F]+)$!', $token)) { + /* treat integer literally */ + } else if (!preg_match('!^' . $this->_obj_call_regexp . '|' . $this->_var_regexp . '(?:' . $this->_mod_regexp . ')*$!', $token)) { + /* treat as a string, double-quote it escaping quotes */ + $token = '"'.addslashes($token).'"'; + } + + $attrs[$attr_name] = $token; + $state = 0; + } else + $this->_syntax_error("'=' cannot be an attribute value", E_USER_ERROR, __FILE__, __LINE__); + break; + } + $last_token = $token; + } + + if($state != 0) { + if($state == 1) { + $this->_syntax_error("expecting '=' after attribute name '$last_token'", E_USER_ERROR, __FILE__, __LINE__); + } else { + $this->_syntax_error("missing attribute value", E_USER_ERROR, __FILE__, __LINE__); + } + } + + $this->_parse_vars_props($attrs); + + return $attrs; + } + + /** + * compile multiple variables and section properties tokens into + * PHP code + * + * @param array $tokens + */ + function _parse_vars_props(&$tokens) + { + foreach($tokens as $key => $val) { + $tokens[$key] = $this->_parse_var_props($val); + } + } + + /** + * compile single variable and section properties token into + * PHP code + * + * @param string $val + * @param string $tag_attrs + * @return string + */ + function _parse_var_props($val) + { + $val = trim($val); + + if(preg_match('!^(' . $this->_obj_call_regexp . '|' . $this->_dvar_regexp . ')(' . $this->_mod_regexp . '*)$!', $val, $match)) { + // $ variable or object + $return = $this->_parse_var($match[1]); + if($match[2] != '') { + $this->_parse_modifiers($return, $match[2]); + } + return $return; + } + elseif(preg_match('!^' . $this->_db_qstr_regexp . '(?:' . $this->_mod_regexp . '*)$!', $val)) { + // double quoted text + preg_match('!^(' . $this->_db_qstr_regexp . ')('. $this->_mod_regexp . '*)$!', $val, $match); + $return = $this->_expand_quoted_text($match[1]); + if($match[2] != '') { + $this->_parse_modifiers($return, $match[2]); + } + return $return; + } + elseif(preg_match('!^' . $this->_si_qstr_regexp . '(?:' . $this->_mod_regexp . '*)$!', $val)) { + // single quoted text + preg_match('!^(' . $this->_si_qstr_regexp . ')('. $this->_mod_regexp . '*)$!', $val, $match); + if($match[2] != '') { + $this->_parse_modifiers($match[1], $match[2]); + return $match[1]; + } + } + elseif(preg_match('!^' . $this->_cvar_regexp . '(?:' . $this->_mod_regexp . '*)$!', $val)) { + // config var + return $this->_parse_conf_var($val); + } + elseif(preg_match('!^' . $this->_svar_regexp . '(?:' . $this->_mod_regexp . '*)$!', $val)) { + // section var + return $this->_parse_section_prop($val); + } + elseif(!in_array($val, $this->_permitted_tokens) && !is_numeric($val)) { + // literal string + return $this->_expand_quoted_text('"' . $val .'"'); + } + return $val; + } + + /** + * expand quoted text with embedded variables + * + * @param string $var_expr + * @return string + */ + function _expand_quoted_text($var_expr) + { + // if contains unescaped $, expand it + if(preg_match_all('%(?:\`(?<!\\\\)\$' . $this->_dvar_guts_regexp . '\`)|(?:(?<!\\\\)\$\w+(\[[a-zA-Z0-9]+\])*)%', $var_expr, $_match)) { + $_match = $_match[0]; + rsort($_match); + reset($_match); + foreach($_match as $_var) { + $var_expr = str_replace ($_var, '".(' . $this->_parse_var(str_replace('`','',$_var)) . ')."', $var_expr); + } + $_return = preg_replace('%\.""|(?<!\\\\)""\.%', '', $var_expr); + } else { + $_return = $var_expr; + } + // replace double quoted literal string with single quotes + $_return = preg_replace('!^"([\s\w]+)"$!',"'\\1'",$_return); + return $_return; + } + + /** + * parse variable expression into PHP code + * + * @param string $var_expr + * @param string $output + * @return string + */ + function _parse_var($var_expr) + { + $_has_math = false; + $_math_vars = preg_split('!('.$this->_dvar_math_regexp.'|'.$this->_qstr_regexp.')!', $var_expr, -1, PREG_SPLIT_DELIM_CAPTURE); + + if(count($_math_vars) > 1) { + $_first_var = ""; + $_complete_var = ""; + // simple check if there is any math, to stop recursion (due to modifiers with "xx % yy" as parameter) + foreach($_math_vars as $_k => $_math_var) { + $_math_var = $_math_vars[$_k]; + + if(!empty($_math_var) || is_numeric($_math_var)) { + // hit a math operator, so process the stuff which came before it + if(preg_match('!^' . $this->_dvar_math_regexp . '$!', $_math_var)) { + $_has_math = true; + if(!empty($_complete_var) || is_numeric($_complete_var)) { + $_output .= $this->_parse_var($_complete_var); + } + + // just output the math operator to php + $_output .= $_math_var; + + if(empty($_first_var)) + $_first_var = $_complete_var; + + $_complete_var = ""; + } else { + // fetch multiple -> (like $foo->bar->baz ) which wouldn't get fetched else, because it would only get $foo->bar and treat the ->baz as "-" ">baz" then + for($_i = $_k + 1; $_i <= count($_math_vars); $_i += 2) { + // fetch -> because it gets splitted at - and move it back together + if( /* prevent notice */ (isset($_math_vars[$_i]) && isset($_math_vars[$_i+1])) && ($_math_vars[$_i] === '-' && $_math_vars[$_i+1]{0} === '>')) { + $_math_var .= $_math_vars[$_i].$_math_vars[$_i+1]; + $_math_vars[$_i] = $_math_vars[$_i+1] = ''; + } else { + break; + } + } + $_complete_var .= $_math_var; + } + } + } + if($_has_math) { + if(!empty($_complete_var) || is_numeric($_complete_var)) + $_output .= $this->_parse_var($_complete_var, true); + + // get the modifiers working (only the last var from math + modifier is left) + $var_expr = $_complete_var; + } + } + + // prevent cutting of first digit in the number (we _definitly_ got a number if the first char is a digit) + if(is_numeric($var_expr{0})) + $_var_ref = $var_expr; + else + $_var_ref = substr($var_expr, 1); + + if(!$_has_math) { + // get [foo] and .foo and ->foo and (...) pieces + preg_match_all('!(?:^\w+)|' . $this->_obj_params_regexp . '|(?:' . $this->_var_bracket_regexp . ')|->\$?\w+|\.\$?\w+|\S+!', $_var_ref, $match); + + $_indexes = $match[0]; + $_var_name = array_shift($_indexes); + + /* Handle $smarty.* variable references as a special case. */ + if ($_var_name == 'smarty') { + /* + * If the reference could be compiled, use the compiled output; + * otherwise, fall back on the $smarty variable generated at + * run-time. + */ + if (($smarty_ref = $this->_compile_smarty_ref($_indexes)) !== null) { + $_output = $smarty_ref; + } else { + $_var_name = substr(array_shift($_indexes), 1); + $_output = "\$this->_smarty_vars['$_var_name']"; + } + } elseif(is_numeric($_var_name) && is_numeric($var_expr{0})) { + // because . is the operator for accessing arrays thru inidizes we need to put it together again for floating point numbers + if(count($_indexes) > 0) + { + $_var_name .= implode("", $_indexes); + $_indexes = array(); + } + $_output = $_var_name; + } else { + $_output = "\$this->_tpl_vars['$_var_name']"; + } + + foreach ($_indexes as $_index) { + if ($_index{0} == '[') { + $_index = substr($_index, 1, -1); + if (is_numeric($_index)) { + $_output .= "[$_index]"; + } elseif ($_index{0} == '$') { + if (strpos($_index, '.') !== false) { + $_output .= '[' . $this->_parse_var($_index) . ']'; + } else { + $_output .= "[\$this->_tpl_vars['" . substr($_index, 1) . "']]"; + } + } else { + $_var_parts = explode('.', $_index); + $_var_section = $_var_parts[0]; + $_var_section_prop = isset($_var_parts[1]) ? $_var_parts[1] : 'index'; + $_output .= "[\$this->_sections['$_var_section']['$_var_section_prop']]"; + } + } else if ($_index{0} == '.') { + if ($_index{1} == '$') + $_output .= "[\$this->_tpl_vars['" . substr($_index, 2) . "']]"; + else + $_output .= "['" . substr($_index, 1) . "']"; + } else if (substr($_index,0,2) == '->') { + if(substr($_index,2,2) == '__') { + $this->_syntax_error('call to internal object members is not allowed', E_USER_ERROR, __FILE__, __LINE__); + } elseif($this->security && substr($_index, 2, 1) == '_') { + $this->_syntax_error('(secure) call to private object member is not allowed', E_USER_ERROR, __FILE__, __LINE__); + } elseif ($_index{2} == '$') { + if ($this->security) { + $this->_syntax_error('(secure) call to dynamic object member is not allowed', E_USER_ERROR, __FILE__, __LINE__); + } else { + $_output .= '->{(($_var=$this->_tpl_vars[\''.substr($_index,3).'\']) && substr($_var,0,2)!=\'__\') ? $_var : $this->trigger_error("cannot access property \\"$_var\\"")}'; + } + } else { + $_output .= $_index; + } + } elseif ($_index{0} == '(') { + $_index = $this->_parse_parenth_args($_index); + $_output .= $_index; + } else { + $_output .= $_index; + } + } + } + + return $_output; + } + + /** + * parse arguments in function call parenthesis + * + * @param string $parenth_args + * @return string + */ + function _parse_parenth_args($parenth_args) + { + preg_match_all('!' . $this->_param_regexp . '!',$parenth_args, $match); + $match = $match[0]; + rsort($match); + reset($match); + $orig_vals = $match; + $this->_parse_vars_props($match); + return str_replace($orig_vals, $match, $parenth_args); + } + + /** + * parse configuration variable expression into PHP code + * + * @param string $conf_var_expr + */ + function _parse_conf_var($conf_var_expr) + { + $parts = explode('|', $conf_var_expr, 2); + $var_ref = $parts[0]; + $modifiers = isset($parts[1]) ? $parts[1] : ''; + + $var_name = substr($var_ref, 1, -1); + + $output = "\$this->_config[0]['vars']['$var_name']"; + + $this->_parse_modifiers($output, $modifiers); + + return $output; + } + + /** + * parse section property expression into PHP code + * + * @param string $section_prop_expr + * @return string + */ + function _parse_section_prop($section_prop_expr) + { + $parts = explode('|', $section_prop_expr, 2); + $var_ref = $parts[0]; + $modifiers = isset($parts[1]) ? $parts[1] : ''; + + preg_match('!%(\w+)\.(\w+)%!', $var_ref, $match); + $section_name = $match[1]; + $prop_name = $match[2]; + + $output = "\$this->_sections['$section_name']['$prop_name']"; + + $this->_parse_modifiers($output, $modifiers); + + return $output; + } + + + /** + * parse modifier chain into PHP code + * + * sets $output to parsed modified chain + * @param string $output + * @param string $modifier_string + */ + function _parse_modifiers(&$output, $modifier_string) + { + preg_match_all('!\|(@?\w+)((?>:(?:'. $this->_qstr_regexp . '|[^|]+))*)!', '|' . $modifier_string, $_match); + list(, $_modifiers, $modifier_arg_strings) = $_match; + + for ($_i = 0, $_for_max = count($_modifiers); $_i < $_for_max; $_i++) { + $_modifier_name = $_modifiers[$_i]; + + if($_modifier_name == 'smarty') { + // skip smarty modifier + continue; + } + + preg_match_all('!:(' . $this->_qstr_regexp . '|[^:]+)!', $modifier_arg_strings[$_i], $_match); + $_modifier_args = $_match[1]; + + if ($_modifier_name{0} == '@') { + $_map_array = false; + $_modifier_name = substr($_modifier_name, 1); + } else { + $_map_array = true; + } + + $this->_add_plugin('modifier', $_modifier_name); + if (empty($this->_plugins['modifier'][$_modifier_name]) + && !$this->_get_plugin_filepath('modifier', $_modifier_name) + && function_exists($_modifier_name)) { + if ($this->security && !in_array($_modifier_name, $this->security_settings['MODIFIER_FUNCS'])) { + $this->_trigger_fatal_error("[plugin] (secure mode) modifier '$_modifier_name' is not allowed" , $_tpl_file, $_tpl_line, __FILE__, __LINE__); + } else { + $this->_plugins['modifier'][$_modifier_name] = array($_modifier_name, null, null, false); + } + } + + $this->_parse_vars_props($_modifier_args); + + if($_modifier_name == 'default') { + // supress notifications of default modifier vars and args + if($output{0} == '$') { + $output = '@' . $output; + } + if(isset($_modifier_args[0]) && $_modifier_args[0]{0} == '$') { + $_modifier_args[0] = '@' . $_modifier_args[0]; + } + } + if (count($_modifier_args) > 0) + $_modifier_args = ', '.implode(', ', $_modifier_args); + else + $_modifier_args = ''; + + if ($_map_array) { + $output = "((is_array(\$_tmp=$output)) ? \$this->_run_mod_handler('$_modifier_name', true, \$_tmp$_modifier_args) : " . $this->_compile_plugin_call('modifier', $_modifier_name) . "(\$_tmp$_modifier_args))"; + + } else { + + $output = $this->_compile_plugin_call('modifier', $_modifier_name)."($output$_modifier_args)"; + + } + } + } + + + /** + * add plugin + * + * @param string $type + * @param string $name + * @param boolean? $delayed_loading + */ + function _add_plugin($type, $name, $delayed_loading = null) + { + if (!isset($this->_plugin_info[$type])) { + $this->_plugin_info[$type] = array(); + } + if (!isset($this->_plugin_info[$type][$name])) { + $this->_plugin_info[$type][$name] = array($this->_current_file, + $this->_current_line_no, + $delayed_loading); + } + } + + + /** + * Compiles references of type $smarty.foo + * + * @param string $indexes + * @return string + */ + function _compile_smarty_ref(&$indexes) + { + /* Extract the reference name. */ + $_ref = substr($indexes[0], 1); + foreach($indexes as $_index_no=>$_index) { + if ($_index{0} != '.' && $_index_no<2 || !preg_match('!^(\.|\[|->)!', $_index)) { + $this->_syntax_error('$smarty' . implode('', array_slice($indexes, 0, 2)) . ' is an invalid reference', E_USER_ERROR, __FILE__, __LINE__); + } + } + + switch ($_ref) { + case 'now': + $compiled_ref = 'time()'; + $_max_index = 1; + break; + + case 'foreach': + case 'section': + array_shift($indexes); + $_var = $this->_parse_var_props(substr($indexes[0], 1)); + if ($_ref == 'foreach') + $compiled_ref = "\$this->_foreach[$_var]"; + else + $compiled_ref = "\$this->_sections[$_var]"; + break; + + case 'get': + $compiled_ref = ($this->request_use_auto_globals) ? '$_GET' : "\$GLOBALS['HTTP_GET_VARS']"; + break; + + case 'post': + $compiled_ref = ($this->request_use_auto_globals) ? '$_POST' : "\$GLOBALS['HTTP_POST_VARS']"; + break; + + case 'cookies': + $compiled_ref = ($this->request_use_auto_globals) ? '$_COOKIE' : "\$GLOBALS['HTTP_COOKIE_VARS']"; + break; + + case 'env': + $compiled_ref = ($this->request_use_auto_globals) ? '$_ENV' : "\$GLOBALS['HTTP_ENV_VARS']"; + break; + + case 'server': + $compiled_ref = ($this->request_use_auto_globals) ? '$_SERVER' : "\$GLOBALS['HTTP_SERVER_VARS']"; + break; + + case 'session': + $compiled_ref = ($this->request_use_auto_globals) ? '$_SESSION' : "\$GLOBALS['HTTP_SESSION_VARS']"; + break; + + /* + * These cases are handled either at run-time or elsewhere in the + * compiler. + */ + case 'request': + if ($this->request_use_auto_globals) { + $compiled_ref = '$_REQUEST'; + break; + } else { + $this->_init_smarty_vars = true; + } + return null; + + case 'capture': + return null; + + case 'template': + $compiled_ref = "'$this->_current_file'"; + $_max_index = 1; + break; + + case 'version': + $compiled_ref = "'$this->_version'"; + $_max_index = 1; + break; + + case 'const': + array_shift($indexes); + $_val = $this->_parse_var_props(substr($indexes[0],1)); + $compiled_ref = '@constant(' . $_val . ')'; + $_max_index = 1; + break; + + case 'config': + $compiled_ref = "\$this->_config[0]['vars']"; + $_max_index = 2; + break; + + default: + $this->_syntax_error('$smarty.' . $_ref . ' is an unknown reference', E_USER_ERROR, __FILE__, __LINE__); + break; + } + + if (isset($_max_index) && count($indexes) > $_max_index) { + $this->_syntax_error('$smarty' . implode('', $indexes) .' is an invalid reference', E_USER_ERROR, __FILE__, __LINE__); + } + + array_shift($indexes); + return $compiled_ref; + } + + /** + * compiles call to plugin of type $type with name $name + * returns a string containing the function-name or method call + * without the paramter-list that would have follow to make the + * call valid php-syntax + * + * @param string $type + * @param string $name + * @return string + */ + function _compile_plugin_call($type, $name) { + if (isset($this->_plugins[$type][$name])) { + /* plugin loaded */ + if (is_array($this->_plugins[$type][$name][0])) { + return ((is_object($this->_plugins[$type][$name][0][0])) ? + "\$this->_plugins['$type']['$name'][0][0]->" /* method callback */ + : (string)($this->_plugins[$type][$name][0][0]).'::' /* class callback */ + ). $this->_plugins[$type][$name][0][1]; + + } else { + /* function callback */ + return $this->_plugins[$type][$name][0]; + + } + } else { + /* plugin not loaded -> auto-loadable-plugin */ + return 'smarty_'.$type.'_'.$name; + + } + } + + /** + * load pre- and post-filters + */ + function _load_filters() + { + if (count($this->_plugins['prefilter']) > 0) { + foreach ($this->_plugins['prefilter'] as $filter_name => $prefilter) { + if ($prefilter === false) { + unset($this->_plugins['prefilter'][$filter_name]); + $_params = array('plugins' => array(array('prefilter', $filter_name, null, null, false))); + require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.load_plugins.php'); + smarty_core_load_plugins($_params, $this); + } + } + } + if (count($this->_plugins['postfilter']) > 0) { + foreach ($this->_plugins['postfilter'] as $filter_name => $postfilter) { + if ($postfilter === false) { + unset($this->_plugins['postfilter'][$filter_name]); + $_params = array('plugins' => array(array('postfilter', $filter_name, null, null, false))); + require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.load_plugins.php'); + smarty_core_load_plugins($_params, $this); + } + } + } + } + + + /** + * Quote subpattern references + * + * @param string $string + * @return string + */ + function _quote_replace($string) + { + return preg_replace('![\\$]\d!', '\\\\\\0', $string); + } + + /** + * display Smarty syntax error + * + * @param string $error_msg + * @param integer $error_type + * @param string $file + * @param integer $line + */ + function _syntax_error($error_msg, $error_type = E_USER_ERROR, $file=null, $line=null) + { + if(isset($file) && isset($line)) { + $info = ' ('.basename($file).", line $line)"; + } else { + $info = null; + } + trigger_error('Smarty: [in ' . $this->_current_file . ' line ' . + $this->_current_line_no . "]: syntax error: $error_msg$info", $error_type); + } + + + /** + * check if the compilation changes from cacheable to + * non-cacheable state with the beginning of the current + * plugin. return php-code to reflect the transition. + * @return string + */ + function _push_cacheable_state($type, $name) { + $_cacheable = !isset($this->_plugins[$type][$name]) || $this->_plugins[$type][$name][4]; + if ($_cacheable + || 0<$this->_cacheable_state++) return ''; + if (!isset($this->_cache_serial)) $this->_cache_serial = md5(uniqid('Smarty')); + $_ret = 'if ($this->caching) { echo \'{nocache:' + . $this->_cache_serial . '#' . $this->_nocache_count + . '}\';}'; + return $_ret; + } + + + /** + * check if the compilation changes from non-cacheable to + * cacheable state with the end of the current plugin return + * php-code to reflect the transition. + * @return string + */ + function _pop_cacheable_state($type, $name) { + $_cacheable = !isset($this->_plugins[$type][$name]) || $this->_plugins[$type][$name][4]; + if ($_cacheable + || --$this->_cacheable_state>0) return ''; + return 'if ($this->caching) { echo \'{/nocache:' + . $this->_cache_serial . '#' . ($this->_nocache_count++) + . '}\';}'; + } + +} + +/** + * compare to values by their string length + * + * @access private + * @param string $a + * @param string $b + * @return 0|-1|1 + */ +function _smarty_sort_length($a, $b) +{ + if($a == $b) + return 0; + + if(strlen($a) == strlen($b)) + return ($a > $b) ? -1 : 1; + + return (strlen($a) > strlen($b)) ? -1 : 1; +} + + +/* vim: set et: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.assemble_plugin_filepath.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.assemble_plugin_filepath.php new file mode 100644 index 00000000..ec44f8e4 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.assemble_plugin_filepath.php @@ -0,0 +1,62 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + +/** + * assemble filepath of requested plugin + * + * @param string $type + * @param string $name + * @return string|false + */ +function smarty_core_assemble_plugin_filepath($params, &$smarty) +{ + + $_plugin_filename = $params['type'] . '.' . $params['name'] . '.php'; + $_return = false; + + foreach ((array)$smarty->plugins_dir as $_plugin_dir) { + + $_plugin_filepath = $_plugin_dir . DIRECTORY_SEPARATOR . $_plugin_filename; + + // see if path is relative + if (!preg_match("/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/", $_plugin_dir)) { + $_relative_paths[] = $_plugin_dir; + // relative path, see if it is in the SMARTY_DIR + if (@is_readable(SMARTY_DIR . $_plugin_filepath)) { + $_return = SMARTY_DIR . $_plugin_filepath; + break; + } + } + // try relative to cwd (or absolute) + if (@is_readable($_plugin_filepath)) { + $_return = $_plugin_filepath; + break; + } + } + + if($_return === false) { + // still not found, try PHP include_path + if(isset($_relative_paths)) { + foreach ((array)$_relative_paths as $_plugin_dir) { + + $_plugin_filepath = $_plugin_dir . DIRECTORY_SEPARATOR . $_plugin_filename; + + $_params = array('file_path' => $_plugin_filepath); + require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.get_include_path.php'); + if(smarty_core_get_include_path($_params, $smarty)) { + return $_params['new_file_path']; + } + } + } + } + + return $_return; +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.assign_smarty_interface.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.assign_smarty_interface.php new file mode 100644 index 00000000..7e65a73e --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.assign_smarty_interface.php @@ -0,0 +1,43 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + +/** + * Smarty assign_smarty_interface core plugin + * + * Type: core<br> + * Name: assign_smarty_interface<br> + * Purpose: assign the $smarty interface variable + * @param array Format: null + * @param Smarty + */ +function smarty_core_assign_smarty_interface($params, &$smarty) +{ + if (isset($smarty->_smarty_vars) && isset($smarty->_smarty_vars['request'])) { + return; + } + + $_globals_map = array('g' => 'HTTP_GET_VARS', + 'p' => 'HTTP_POST_VARS', + 'c' => 'HTTP_COOKIE_VARS', + 's' => 'HTTP_SERVER_VARS', + 'e' => 'HTTP_ENV_VARS'); + + $_smarty_vars_request = array(); + + foreach (preg_split('!!', strtolower($smarty->request_vars_order)) as $_c) { + if (isset($_globals_map[$_c])) { + $_smarty_vars_request = array_merge($_smarty_vars_request, $GLOBALS[$_globals_map[$_c]]); + } + } + $_smarty_vars_request = @array_merge($_smarty_vars_request, $GLOBALS['HTTP_SESSION_VARS']); + + $smarty->_smarty_vars['request'] = $_smarty_vars_request; +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.create_dir_structure.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.create_dir_structure.php new file mode 100644 index 00000000..999cf593 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.create_dir_structure.php @@ -0,0 +1,79 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + +/** + * create full directory structure + * + * @param string $dir + */ + +// $dir + +function smarty_core_create_dir_structure($params, &$smarty) +{ + if (!file_exists($params['dir'])) { + $_open_basedir_ini = ini_get('open_basedir'); + + if (DIRECTORY_SEPARATOR=='/') { + /* unix-style paths */ + $_dir = $params['dir']; + $_dir_parts = preg_split('!/+!', $_dir, -1, PREG_SPLIT_NO_EMPTY); + $_new_dir = ($_dir{0}=='/') ? '/' : getcwd().'/'; + if($_use_open_basedir = !empty($_open_basedir_ini)) { + $_open_basedirs = explode(':', $_open_basedir_ini); + } + + } else { + /* other-style paths */ + $_dir = str_replace('\\','/', $params['dir']); + $_dir_parts = preg_split('!/+!', $_dir, -1, PREG_SPLIT_NO_EMPTY); + if (preg_match('!^((//)|([a-zA-Z]:/))!', $_dir, $_root_dir)) { + /* leading "//" for network volume, or "[letter]:/" for full path */ + $_new_dir = $_root_dir[1]; + /* remove drive-letter from _dir_parts */ + if (isset($_root_dir[3])) array_shift($_dir_parts); + + } else { + $_new_dir = str_replace('\\', '/', getcwd()).'/'; + + } + + if($_use_open_basedir = !empty($_open_basedir_ini)) { + $_open_basedirs = explode(';', str_replace('\\', '/', $_open_basedir_ini)); + } + + } + + /* all paths use "/" only from here */ + foreach ($_dir_parts as $_dir_part) { + $_new_dir .= $_dir_part; + + if ($_use_open_basedir) { + // do not attempt to test or make directories outside of open_basedir + $_make_new_dir = false; + foreach ($_open_basedirs as $_open_basedir) { + if (substr($_new_dir, 0, strlen($_open_basedir)) == $_open_basedir) { + $_make_new_dir = true; + break; + } + } + } else { + $_make_new_dir = true; + } + + if ($_make_new_dir && !file_exists($_new_dir) && !@mkdir($_new_dir, $smarty->_dir_perms) && !is_dir($_new_dir)) { + $smarty->trigger_error("problem creating directory '" . $_new_dir . "'"); + return false; + } + $_new_dir .= '/'; + } + } +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.display_debug_console.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.display_debug_console.php new file mode 100644 index 00000000..c509ff72 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.display_debug_console.php @@ -0,0 +1,60 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + +/** + * Smarty debug_console function plugin + * + * Type: core<br> + * Name: display_debug_console<br> + * Purpose: display the javascript debug console window + * @param array Format: null + * @param Smarty + */ +function smarty_core_display_debug_console($params, &$smarty) +{ + // we must force compile the debug template in case the environment + // changed between separate applications. + + if(empty($smarty->debug_tpl)) { + // set path to debug template from SMARTY_DIR + $smarty->debug_tpl = SMARTY_DIR . 'debug.tpl'; + if($smarty->security && is_file($smarty->debug_tpl)) { + $smarty->secure_dir[] = dirname(realpath($smarty->debug_tpl)); + } + } + + $_ldelim_orig = $smarty->left_delimiter; + $_rdelim_orig = $smarty->right_delimiter; + + $smarty->left_delimiter = '{'; + $smarty->right_delimiter = '}'; + + $_compile_id_orig = $smarty->_compile_id; + $smarty->_compile_id = null; + + $_compile_path = $smarty->_get_compile_path($smarty->debug_tpl); + if ($smarty->_compile_resource($smarty->debug_tpl, $_compile_path)) + { + ob_start(); + $smarty->_include($_compile_path); + $_results = ob_get_contents(); + ob_end_clean(); + } else { + $_results = ''; + } + + $smarty->_compile_id = $_compile_id_orig; + + $smarty->left_delimiter = $_ldelim_orig; + $smarty->right_delimiter = $_rdelim_orig; + + return $_results; +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.get_include_path.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.get_include_path.php new file mode 100644 index 00000000..eb7188cd --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.get_include_path.php @@ -0,0 +1,44 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + +/** + * Get path to file from include_path + * + * @param string $file_path + * @param string $new_file_path + * @return boolean + * @staticvar array|null + */ + +// $file_path, &$new_file_path + +function smarty_core_get_include_path(&$params, &$smarty) +{ + static $_path_array = null; + + if(!isset($_path_array)) { + $_ini_include_path = ini_get('include_path'); + + if(strstr($_ini_include_path,';')) { + // windows pathnames + $_path_array = explode(';',$_ini_include_path); + } else { + $_path_array = explode(':',$_ini_include_path); + } + } + foreach ($_path_array as $_include_path) { + if (file_exists($_include_path . DIRECTORY_SEPARATOR . $params['file_path'])) { + $params['new_file_path'] = $_include_path . DIRECTORY_SEPARATOR . $params['file_path']; + return true; + } + } + return false; +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.get_microtime.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.get_microtime.php new file mode 100644 index 00000000..f1a28e04 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.get_microtime.php @@ -0,0 +1,23 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + +/** + * Get seconds and microseconds + * @return double + */ +function smarty_core_get_microtime($params, &$smarty) +{ + $mtime = microtime(); + $mtime = explode(" ", $mtime); + $mtime = (double)($mtime[1]) + (double)($mtime[0]); + return ($mtime); +} + + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.get_php_resource.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.get_php_resource.php new file mode 100644 index 00000000..8121acf8 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.get_php_resource.php @@ -0,0 +1,80 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + +/** + * Retrieves PHP script resource + * + * sets $php_resource to the returned resource + * @param string $resource + * @param string $resource_type + * @param $php_resource + * @return boolean + */ + +function smarty_core_get_php_resource(&$params, &$smarty) +{ + + $params['resource_base_path'] = $smarty->trusted_dir; + $smarty->_parse_resource_name($params, $smarty); + + /* + * Find out if the resource exists. + */ + + if ($params['resource_type'] == 'file') { + $_readable = false; + if(file_exists($params['resource_name']) && is_readable($params['resource_name'])) { + $_readable = true; + } else { + // test for file in include_path + $_params = array('file_path' => $params['resource_name']); + require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.get_include_path.php'); + if(smarty_core_get_include_path($_params, $smarty)) { + $_include_path = $_params['new_file_path']; + $_readable = true; + } + } + } else if ($params['resource_type'] != 'file') { + $_template_source = null; + $_readable = is_callable($smarty->_plugins['resource'][$params['resource_type']][0][0]) + && call_user_func_array($smarty->_plugins['resource'][$params['resource_type']][0][0], + array($params['resource_name'], &$_template_source, &$smarty)); + } + + /* + * Set the error function, depending on which class calls us. + */ + if (method_exists($smarty, '_syntax_error')) { + $_error_funcc = '_syntax_error'; + } else { + $_error_funcc = 'trigger_error'; + } + + if ($_readable) { + if ($smarty->security) { + require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.is_trusted.php'); + if (!smarty_core_is_trusted($params, $smarty)) { + $smarty->$_error_funcc('(secure mode) ' . $params['resource_type'] . ':' . $params['resource_name'] . ' is not trusted'); + return false; + } + } + } else { + $smarty->$_error_funcc($params['resource_type'] . ':' . $params['resource_name'] . ' is not readable'); + return false; + } + + if ($params['resource_type'] == 'file') { + $params['php_resource'] = $params['resource_name']; + } else { + $params['php_resource'] = $_template_source; + } + return true; +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.is_secure.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.is_secure.php new file mode 100644 index 00000000..877886b8 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.is_secure.php @@ -0,0 +1,59 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + +/** + * determines if a resource is secure or not. + * + * @param string $resource_type + * @param string $resource_name + * @return boolean + */ + +// $resource_type, $resource_name + +function smarty_core_is_secure($params, &$smarty) +{ + static $check_template_dir = true; + + if (!$smarty->security || $smarty->security_settings['INCLUDE_ANY']) { + return true; + } + + $_smarty_secure = false; + if ($params['resource_type'] == 'file') { + if($check_template_dir) { + if (!in_array($smarty->template_dir, $smarty->secure_dir)) + // add template_dir to secure_dir array + array_unshift($smarty->secure_dir, $smarty->template_dir); + $check_template_dir = false; + } + if (!empty($smarty->secure_dir)) { + $_rp = realpath($params['resource_name']); + foreach ((array)$smarty->secure_dir as $curr_dir) { + if ( !empty($curr_dir) && is_readable ($curr_dir)) { + $_cd = realpath($curr_dir); + if (strncmp($_rp, $_cd, strlen($_cd)) == 0 + && $_rp{strlen($_cd)} == DIRECTORY_SEPARATOR ) { + $_smarty_secure = true; + break; + } + } + } + } + } else { + // resource is not on local file system + $_smarty_secure = call_user_func_array( + $smarty->_plugins['resource'][$params['resource_type']][0][2], + array($params['resource_name'], &$_smarty_secure, &$smarty)); + } + + return $_smarty_secure; +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.is_trusted.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.is_trusted.php new file mode 100644 index 00000000..452e8dc6 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.is_trusted.php @@ -0,0 +1,50 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + +/** + * @access private + */ +/** + * determines if a resource is trusted or not + * + * @param string $resource_type + * @param string $resource_name + * @return boolean + */ + + // $resource_type, $resource_name + +function smarty_core_is_trusted($params, &$smarty) +{ + $_smarty_trusted = false; + if ($params['resource_type'] == 'file') { + if (!empty($smarty->trusted_dir)) { + $_rp = realpath($params['resource_name']); + foreach ((array)$smarty->trusted_dir as $curr_dir) { + if (!empty($curr_dir) && is_readable ($curr_dir)) { + $_cd = realpath($curr_dir); + if (strncmp($_rp, $_cd, strlen($_cd)) == 0 + && $_rp{strlen($_cd)} == DIRECTORY_SEPARATOR ) { + $_smarty_trusted = true; + break; + } + } + } + } + + } else { + // resource is not on local file system + $_smarty_trusted = call_user_func_array($smarty->_plugins['resource'][$params['resource_type']][0][3], + array($params['resource_name'], $smarty)); + } + + return $_smarty_trusted; +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.load_plugins.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.load_plugins.php new file mode 100644 index 00000000..6db1dc51 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.load_plugins.php @@ -0,0 +1,125 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + +/** + * Load requested plugins + * + * @param array $plugins + */ + +// $plugins + +function smarty_core_load_plugins($params, &$smarty) +{ + + foreach ($params['plugins'] as $_plugin_info) { + list($_type, $_name, $_tpl_file, $_tpl_line, $_delayed_loading) = $_plugin_info; + $_plugin = &$smarty->_plugins[$_type][$_name]; + + /* + * We do not load plugin more than once for each instance of Smarty. + * The following code checks for that. The plugin can also be + * registered dynamically at runtime, in which case template file + * and line number will be unknown, so we fill them in. + * + * The final element of the info array is a flag that indicates + * whether the dynamically registered plugin function has been + * checked for existence yet or not. + */ + if (isset($_plugin)) { + if (empty($_plugin[3])) { + if (!is_callable($_plugin[0])) { + $smarty->_trigger_fatal_error("[plugin] $_type '$_name' is not implemented", $_tpl_file, $_tpl_line, __FILE__, __LINE__); + } else { + $_plugin[1] = $_tpl_file; + $_plugin[2] = $_tpl_line; + $_plugin[3] = true; + if (!isset($_plugin[4])) $_plugin[4] = true; /* cacheable */ + } + } + continue; + } else if ($_type == 'insert') { + /* + * For backwards compatibility, we check for insert functions in + * the symbol table before trying to load them as a plugin. + */ + $_plugin_func = 'insert_' . $_name; + if (function_exists($_plugin_func)) { + $_plugin = array($_plugin_func, $_tpl_file, $_tpl_line, true, false); + continue; + } + } + + $_plugin_file = $smarty->_get_plugin_filepath($_type, $_name); + + if (! $_found = ($_plugin_file != false)) { + $_message = "could not load plugin file '$_type.$_name.php'\n"; + } + + /* + * If plugin file is found, it -must- provide the properly named + * plugin function. In case it doesn't, simply output the error and + * do not fall back on any other method. + */ + if ($_found) { + include_once $_plugin_file; + + $_plugin_func = 'smarty_' . $_type . '_' . $_name; + if (!function_exists($_plugin_func)) { + $smarty->_trigger_fatal_error("[plugin] function $_plugin_func() not found in $_plugin_file", $_tpl_file, $_tpl_line, __FILE__, __LINE__); + continue; + } + } + /* + * In case of insert plugins, their code may be loaded later via + * 'script' attribute. + */ + else if ($_type == 'insert' && $_delayed_loading) { + $_plugin_func = 'smarty_' . $_type . '_' . $_name; + $_found = true; + } + + /* + * Plugin specific processing and error checking. + */ + if (!$_found) { + if ($_type == 'modifier') { + /* + * In case modifier falls back on using PHP functions + * directly, we only allow those specified in the security + * context. + */ + if ($smarty->security && !in_array($_name, $smarty->security_settings['MODIFIER_FUNCS'])) { + $_message = "(secure mode) modifier '$_name' is not allowed"; + } else { + if (!function_exists($_name)) { + $_message = "modifier '$_name' is not implemented"; + } else { + $_plugin_func = $_name; + $_found = true; + } + } + } else if ($_type == 'function') { + /* + * This is a catch-all situation. + */ + $_message = "unknown tag - '$_name'"; + } + } + + if ($_found) { + $smarty->_plugins[$_type][$_name] = array($_plugin_func, $_tpl_file, $_tpl_line, true, true); + } else { + // output error + $smarty->_trigger_fatal_error('[plugin] ' . $_message, $_tpl_file, $_tpl_line, __FILE__, __LINE__); + } + } +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.load_resource_plugin.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.load_resource_plugin.php new file mode 100644 index 00000000..a7d37d1a --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.load_resource_plugin.php @@ -0,0 +1,74 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + +/** + * load a resource plugin + * + * @param string $type + */ + +// $type + +function smarty_core_load_resource_plugin($params, &$smarty) +{ + /* + * Resource plugins are not quite like the other ones, so they are + * handled differently. The first element of plugin info is the array of + * functions provided by the plugin, the second one indicates whether + * all of them exist or not. + */ + + $_plugin = &$smarty->_plugins['resource'][$params['type']]; + if (isset($_plugin)) { + if (!$_plugin[1] && count($_plugin[0])) { + $_plugin[1] = true; + foreach ($_plugin[0] as $_plugin_func) { + if (!is_callable($_plugin_func)) { + $_plugin[1] = false; + break; + } + } + } + + if (!$_plugin[1]) { + $smarty->_trigger_fatal_error("[plugin] resource '" . $params['type'] . "' is not implemented", null, null, __FILE__, __LINE__); + } + + return; + } + + $_plugin_file = $smarty->_get_plugin_filepath('resource', $params['type']); + $_found = ($_plugin_file != false); + + if ($_found) { /* + * If the plugin file is found, it -must- provide the properly named + * plugin functions. + */ + include_once($_plugin_file); + + /* + * Locate functions that we require the plugin to provide. + */ + $_resource_ops = array('source', 'timestamp', 'secure', 'trusted'); + $_resource_funcs = array(); + foreach ($_resource_ops as $_op) { + $_plugin_func = 'smarty_resource_' . $params['type'] . '_' . $_op; + if (!function_exists($_plugin_func)) { + $smarty->_trigger_fatal_error("[plugin] function $_plugin_func() not found in $_plugin_file", null, null, __FILE__, __LINE__); + return; + } else { + $_resource_funcs[] = $_plugin_func; + } + } + + $smarty->_plugins['resource'][$params['type']] = array($_resource_funcs, true); + } +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.process_cached_inserts.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.process_cached_inserts.php new file mode 100644 index 00000000..0e368fdd --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.process_cached_inserts.php @@ -0,0 +1,71 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + +/** + * Replace cached inserts with the actual results + * + * @param string $results + * @return string + */ +function smarty_core_process_cached_inserts($params, &$smarty) +{ + preg_match_all('!'.$smarty->_smarty_md5.'{insert_cache (.*)}'.$smarty->_smarty_md5.'!Uis', + $params['results'], $match); + list($cached_inserts, $insert_args) = $match; + + for ($i = 0, $for_max = count($cached_inserts); $i < $for_max; $i++) { + if ($smarty->debugging) { + $_params = array(); + require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.get_microtime.php'); + $debug_start_time = smarty_core_get_microtime($_params, $smarty); + } + + $args = unserialize($insert_args[$i]); + $name = $args['name']; + + if (isset($args['script'])) { + $_params = array('resource_name' => $smarty->_dequote($args['script'])); + require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.get_php_resource.php'); + if(!smarty_core_get_php_resource($_params, $smarty)) { + return false; + } + $resource_type = $_params['resource_type']; + $php_resource = $_params['php_resource']; + + + if ($resource_type == 'file') { + $smarty->_include($php_resource, true); + } else { + $smarty->_eval($php_resource); + } + } + + $function_name = $smarty->_plugins['insert'][$name][0]; + if (empty($args['assign'])) { + $replace = $function_name($args, $smarty); + } else { + $smarty->assign($args['assign'], $function_name($args, $smarty)); + $replace = ''; + } + + $params['results'] = str_replace($cached_inserts[$i], $replace, $params['results']); + if ($smarty->debugging) { + $_params = array(); + require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.get_microtime.php'); + $smarty->_smarty_debug_info[] = array('type' => 'insert', + 'filename' => 'insert_'.$name, + 'depth' => $smarty->_inclusion_depth, + 'exec_time' => smarty_core_get_microtime($_params, $smarty) - $debug_start_time); + } + } + + return $params['results']; +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.process_compiled_include.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.process_compiled_include.php new file mode 100644 index 00000000..3e1d4c15 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.process_compiled_include.php @@ -0,0 +1,32 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + +/** + * Replace nocache-tags by results of the corresponding non-cacheable + * functions and return it + * + * @param string $compiled_tpl + * @param string $cached_source + * @return string + */ + +function smarty_core_process_compiled_include($params, &$smarty) +{ + $_cache_including = $smarty->_cache_including; + $smarty->_cache_including = true; + + $_return = $params['results']; + foreach ($smarty->_cache_serials as $_include_file_path=>$_cache_serial) { + $_return = preg_replace_callback('!(\{nocache\:('.$_cache_serial.')#(\d+)\})!s', + array(&$smarty, '_process_compiled_include_callback'), + $_return); + } + $smarty->_cache_including = $_cache_including; + return $_return; +} + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.read_cache_file.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.read_cache_file.php new file mode 100644 index 00000000..2ab42811 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.read_cache_file.php @@ -0,0 +1,111 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + +/** + * read a cache file, determine if it needs to be + * regenerated or not + * + * @param string $tpl_file + * @param string $cache_id + * @param string $compile_id + * @param string $results + * @return boolean + */ + +// $tpl_file, $cache_id, $compile_id, &$results + +function smarty_core_read_cache_file(&$params, &$smarty) +{ + static $content_cache = array(); + + if ($smarty->force_compile) { + // force compile enabled, always regenerate + return false; + } + + if (isset($content_cache[$params['tpl_file'].','.$params['cache_id'].','.$params['compile_id']])) { + list($params['results'], $smarty->_cache_info) = $content_cache[$params['tpl_file'].','.$params['cache_id'].','.$params['compile_id']]; + return true; + } + + if (!empty($smarty->cache_handler_func)) { + // use cache_handler function + call_user_func_array($smarty->cache_handler_func, + array('read', &$smarty, &$params['results'], $params['tpl_file'], $params['cache_id'], $params['compile_id'], null)); + } else { + // use local cache file + $_auto_id = $smarty->_get_auto_id($params['cache_id'], $params['compile_id']); + $_cache_file = $smarty->_get_auto_filename($smarty->cache_dir, $params['tpl_file'], $_auto_id); + $params['results'] = $smarty->_read_file($_cache_file); + } + + if (empty($params['results'])) { + // nothing to parse (error?), regenerate cache + return false; + } + + $cache_split = explode("\n", $params['results'], 2); + $cache_header = $cache_split[0]; + + $_cache_info = unserialize($cache_header); + + if ($smarty->caching == 2 && isset ($_cache_info['expires'])){ + // caching by expiration time + if ($_cache_info['expires'] > -1 && (time() > $_cache_info['expires'])) { + // cache expired, regenerate + return false; + } + } else { + // caching by lifetime + if ($smarty->cache_lifetime > -1 && (time() - $_cache_info['timestamp'] > $smarty->cache_lifetime)) { + // cache expired, regenerate + return false; + } + } + + if ($smarty->compile_check) { + $_params = array('get_source' => false, 'quiet'=>true); + foreach (array_keys($_cache_info['template']) as $_template_dep) { + $_params['resource_name'] = $_template_dep; + if (!$smarty->_fetch_resource_info($_params) || $_cache_info['timestamp'] < $_params['resource_timestamp']) { + // template file has changed, regenerate cache + return false; + } + } + + if (isset($_cache_info['config'])) { + $_params = array('resource_base_path' => $smarty->config_dir, 'get_source' => false, 'quiet'=>true); + foreach (array_keys($_cache_info['config']) as $_config_dep) { + $_params['resource_name'] = $_config_dep; + if (!$smarty->_fetch_resource_info($_params) || $_cache_info['timestamp'] < $_params['resource_timestamp']) { + // config file has changed, regenerate cache + return false; + } + } + } + } + + foreach ($_cache_info['cache_serials'] as $_include_file_path=>$_cache_serial) { + if (empty($smarty->_cache_serials[$_include_file_path])) { + $smarty->_include($_include_file_path, true); + } + + if ($smarty->_cache_serials[$_include_file_path] != $_cache_serial) { + /* regenerate */ + return false; + } + } + $params['results'] = $cache_split[1]; + $content_cache[$params['tpl_file'].','.$params['cache_id'].','.$params['compile_id']] = array($params['results'], $_cache_info); + + $smarty->_cache_info = $_cache_info; + return true; +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.rm_auto.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.rm_auto.php new file mode 100644 index 00000000..b7cdaf8c --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.rm_auto.php @@ -0,0 +1,71 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + +/** + * delete an automagically created file by name and id + * + * @param string $auto_base + * @param string $auto_source + * @param string $auto_id + * @param integer $exp_time + * @return boolean + */ + +// $auto_base, $auto_source = null, $auto_id = null, $exp_time = null + +function smarty_core_rm_auto($params, &$smarty) +{ + if (!@is_dir($params['auto_base'])) + return false; + + if(!isset($params['auto_id']) && !isset($params['auto_source'])) { + $_params = array( + 'dirname' => $params['auto_base'], + 'level' => 0, + 'exp_time' => $params['exp_time'] + ); + require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.rmdir.php'); + $_res = smarty_core_rmdir($_params, $smarty); + } else { + $_tname = $smarty->_get_auto_filename($params['auto_base'], $params['auto_source'], $params['auto_id']); + + if(isset($params['auto_source'])) { + if (isset($params['extensions'])) { + $_res = false; + foreach ((array)$params['extensions'] as $_extension) + $_res |= $smarty->_unlink($_tname.$_extension, $params['exp_time']); + } else { + $_res = $smarty->_unlink($_tname, $params['exp_time']); + } + } elseif ($smarty->use_sub_dirs) { + $_params = array( + 'dirname' => $_tname, + 'level' => 1, + 'exp_time' => $params['exp_time'] + ); + require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.rmdir.php'); + $_res = smarty_core_rmdir($_params, $smarty); + } else { + // remove matching file names + $_handle = opendir($params['auto_base']); + $_res = true; + while (false !== ($_filename = readdir($_handle))) { + if($_filename == '.' || $_filename == '..') { + continue; + } elseif (substr($params['auto_base'] . DIRECTORY_SEPARATOR . $_filename, 0, strlen($_tname)) == $_tname) { + $_res &= (bool)$smarty->_unlink($params['auto_base'] . DIRECTORY_SEPARATOR . $_filename, $params['exp_time']); + } + } + } + } + + return $_res; +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.rmdir.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.rmdir.php new file mode 100644 index 00000000..38df822c --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.rmdir.php @@ -0,0 +1,55 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + +/** + * delete a dir recursively (level=0 -> keep root) + * WARNING: no tests, it will try to remove what you tell it! + * + * @param string $dirname + * @param integer $level + * @param integer $exp_time + * @return boolean + */ + +// $dirname, $level = 1, $exp_time = null + +function smarty_core_rmdir($params, &$smarty) +{ + if(!isset($params['level'])) { $params['level'] = 1; } + if(!isset($params['exp_time'])) { $params['exp_time'] = null; } + + if($_handle = @opendir($params['dirname'])) { + + while (false !== ($_entry = readdir($_handle))) { + if ($_entry != '.' && $_entry != '..') { + if (@is_dir($params['dirname'] . DIRECTORY_SEPARATOR . $_entry)) { + $_params = array( + 'dirname' => $params['dirname'] . DIRECTORY_SEPARATOR . $_entry, + 'level' => $params['level'] + 1, + 'exp_time' => $params['exp_time'] + ); + require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.rmdir.php'); + smarty_core_rmdir($_params, $smarty); + } + else { + $smarty->_unlink($params['dirname'] . DIRECTORY_SEPARATOR . $_entry, $params['exp_time']); + } + } + } + closedir($_handle); + } + + if ($params['level']) { + return @rmdir($params['dirname']); + } + return (bool)$_handle; + +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.run_insert_handler.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.run_insert_handler.php new file mode 100644 index 00000000..aa391ab3 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.run_insert_handler.php @@ -0,0 +1,71 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + +/** + * Handle insert tags + * + * @param array $args + * @return string + */ +function smarty_core_run_insert_handler($params, &$smarty) +{ + + require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.get_microtime.php'); + if ($smarty->debugging) { + $_params = array(); + $_debug_start_time = smarty_core_get_microtime($_params, $smarty); + } + + if ($smarty->caching) { + $_arg_string = serialize($params['args']); + $_name = $params['args']['name']; + if (!isset($smarty->_cache_info['insert_tags'][$_name])) { + $smarty->_cache_info['insert_tags'][$_name] = array('insert', + $_name, + $smarty->_plugins['insert'][$_name][1], + $smarty->_plugins['insert'][$_name][2], + !empty($params['args']['script']) ? true : false); + } + return $smarty->_smarty_md5."{insert_cache $_arg_string}".$smarty->_smarty_md5; + } else { + if (isset($params['args']['script'])) { + $_params = array('resource_name' => $smarty->_dequote($params['args']['script'])); + require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.get_php_resource.php'); + if(!smarty_core_get_php_resource($_params, $smarty)) { + return false; + } + + if ($_params['resource_type'] == 'file') { + $smarty->_include($_params['php_resource'], true); + } else { + $smarty->_eval($_params['php_resource']); + } + unset($params['args']['script']); + } + + $_funcname = $smarty->_plugins['insert'][$params['args']['name']][0]; + $_content = $_funcname($params['args'], $smarty); + if ($smarty->debugging) { + $_params = array(); + require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.get_microtime.php'); + $smarty->_smarty_debug_info[] = array('type' => 'insert', + 'filename' => 'insert_'.$params['args']['name'], + 'depth' => $smarty->_inclusion_depth, + 'exec_time' => smarty_core_get_microtime($_params, $smarty) - $_debug_start_time); + } + + if (!empty($params['args']["assign"])) { + $smarty->assign($params['args']["assign"], $_content); + } else { + return $_content; + } + } +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.smarty_include_php.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.smarty_include_php.php new file mode 100644 index 00000000..4b316480 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.smarty_include_php.php @@ -0,0 +1,50 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + +/** + * called for included php files within templates + * + * @param string $smarty_file + * @param string $smarty_assign variable to assign the included template's + * output into + * @param boolean $smarty_once uses include_once if this is true + * @param array $smarty_include_vars associative array of vars from + * {include file="blah" var=$var} + */ + +// $file, $assign, $once, $_smarty_include_vars + +function smarty_core_smarty_include_php($params, &$smarty) +{ + $_params = array('resource_name' => $params['smarty_file']); + require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.get_php_resource.php'); + smarty_core_get_php_resource($_params, $smarty); + $_smarty_resource_type = $_params['resource_type']; + $_smarty_php_resource = $_params['php_resource']; + + if (!empty($params['smarty_assign'])) { + ob_start(); + if ($_smarty_resource_type == 'file') { + $smarty->_include($_smarty_php_resource, $params['smarty_once'], $params['smarty_include_vars']); + } else { + $smarty->_eval($_smarty_php_resource, $params['smarty_include_vars']); + } + $smarty->assign($params['smarty_assign'], ob_get_contents()); + ob_end_clean(); + } else { + if ($_smarty_resource_type == 'file') { + $smarty->_include($_smarty_php_resource, $params['smarty_once'], $params['smarty_include_vars']); + } else { + $smarty->_eval($_smarty_php_resource, $params['smarty_include_vars']); + } + } +} + + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.write_cache_file.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.write_cache_file.php new file mode 100644 index 00000000..7429ad98 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.write_cache_file.php @@ -0,0 +1,73 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + +/** + * Prepend the cache information to the cache file + * and write it + * + * @param string $tpl_file + * @param string $cache_id + * @param string $compile_id + * @param string $results + * @return true|null + */ + + // $tpl_file, $cache_id, $compile_id, $results + +function smarty_core_write_cache_file($params, &$smarty) +{ + + // put timestamp in cache header + $smarty->_cache_info['timestamp'] = time(); + if ($smarty->cache_lifetime > -1){ + // expiration set + $smarty->_cache_info['expires'] = $smarty->_cache_info['timestamp'] + $smarty->cache_lifetime; + } else { + // cache will never expire + $smarty->_cache_info['expires'] = -1; + } + + // collapse {nocache...}-tags + $params['results'] = preg_replace('!((\{nocache\:([0-9a-f]{32})#(\d+)\})' + .'.*' + .'{/nocache\:\\3#\\4\})!Us' + ,'\\2' + ,$params['results']); + $smarty->_cache_info['cache_serials'] = $smarty->_cache_serials; + + // prepend the cache header info into cache file + $params['results'] = serialize($smarty->_cache_info)."\n".$params['results']; + + if (!empty($smarty->cache_handler_func)) { + // use cache_handler function + call_user_func_array($smarty->cache_handler_func, + array('write', &$smarty, &$params['results'], $params['tpl_file'], $params['cache_id'], $params['compile_id'], null)); + } else { + // use local cache file + + if(!@is_writable($smarty->cache_dir)) { + // cache_dir not writable, see if it exists + if(!@is_dir($smarty->cache_dir)) { + $smarty->trigger_error('the $cache_dir \'' . $smarty->cache_dir . '\' does not exist, or is not a directory.', E_USER_ERROR); + return false; + } + $smarty->trigger_error('unable to write to $cache_dir \'' . realpath($smarty->cache_dir) . '\'. Be sure $cache_dir is writable by the web server user.', E_USER_ERROR); + return false; + } + + $_auto_id = $smarty->_get_auto_id($params['cache_id'], $params['compile_id']); + $_cache_file = $smarty->_get_auto_filename($smarty->cache_dir, $params['tpl_file'], $_auto_id); + $_params = array('filename' => $_cache_file, 'contents' => $params['results'], 'create_dirs' => true); + require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.write_file.php'); + smarty_core_write_file($_params, $smarty); + return true; + } +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.write_compiled_include.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.write_compiled_include.php new file mode 100644 index 00000000..9c6a4919 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.write_compiled_include.php @@ -0,0 +1,59 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + +/** + * Extract non-cacheable parts out of compiled template and write it + * + * @param string $compile_path + * @param string $template_compiled + * @param integer $template_timestamp + * @return boolean + */ + +function smarty_core_write_compiled_include($params, &$smarty) +{ + $_tag_start = 'if \(\$this->caching\) \{ echo \'\{nocache\:('.$params['cache_serial'].')#(\d+)\}\';\}'; + $_tag_end = 'if \(\$this->caching\) \{ echo \'\{/nocache\:(\\2)#(\\3)\}\';\}'; + + preg_match_all('!('.$_tag_start.'(.*)'.$_tag_end.')!Us', + $params['compiled_content'], $_match_source, PREG_SET_ORDER); + + // no nocache-parts found: done + if (count($_match_source)==0) return; + + // convert the matched php-code to functions + $_include_compiled = "<?php /* funky header here */\n\n"; + + $_compile_path = $params['include_file_path']; + + $smarty->_cache_serials[$_compile_path] = $params['cache_serial']; + $_include_compiled .= "\$this->_cache_serials['".$_compile_path."'] = '".$params['cache_serial']."';\n\n?>"; + + $_include_compiled .= $params['plugins_code']; + $_include_compiled .= "<?php"; + for ($_i = 0, $_for_max = count($_match_source); $_i < $_for_max; $_i++) { + $_match =& $_match_source[$_i]; + $_include_compiled .= " +function _smarty_tplfunc_$_match[2]_$_match[3](&\$this) +{ +$_match[4] +} + +"; + } + $_include_compiled .= "\n\n?>\n"; + + $_params = array('filename' => $_compile_path, + 'contents' => $_include_compiled, 'create_dirs' => true); + + require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.write_file.php'); + smarty_core_write_file($_params, $smarty); + return true; +} + + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.write_compiled_resource.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.write_compiled_resource.php new file mode 100644 index 00000000..09b50d3b --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.write_compiled_resource.php @@ -0,0 +1,37 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + +/** + * write the compiled resource + * + * @param string $compile_path + * @param string $compiled_content + * @param integer $resource_timestamp + * @return true + */ +function smarty_core_write_compiled_resource($params, &$smarty) +{ + if(!@is_writable($smarty->compile_dir)) { + // compile_dir not writable, see if it exists + if(!@is_dir($smarty->compile_dir)) { + $smarty->trigger_error('the $compile_dir \'' . $smarty->compile_dir . '\' does not exist, or is not a directory.', E_USER_ERROR); + return false; + } + $smarty->trigger_error('unable to write to $compile_dir \'' . realpath($smarty->compile_dir) . '\'. Be sure $compile_dir is writable by the web server user.', E_USER_ERROR); + return false; + } + + $_params = array('filename' => $params['compile_path'], 'contents' => $params['compiled_content'], 'create_dirs' => true); + require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.write_file.php'); + smarty_core_write_file($_params, $smarty); + touch($params['compile_path'], $params['resource_timestamp']); + return true; +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.write_file.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.write_file.php new file mode 100644 index 00000000..c92454d4 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.write_file.php @@ -0,0 +1,48 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + +/** + * write out a file to disk + * + * @param string $filename + * @param string $contents + * @param boolean $create_dirs + * @return boolean + */ +function smarty_core_write_file($params, &$smarty) +{ + $_dirname = dirname($params['filename']); + + if ($params['create_dirs']) { + $_params = array('dir' => $_dirname); + require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.create_dir_structure.php'); + smarty_core_create_dir_structure($_params, $smarty); + } + + // write to tmp file, then rename it to avoid + // file locking race condition + $_tmp_file = $_dirname . DIRECTORY_SEPARATOR . uniqid(''); + + if (!($fd = @fopen($_tmp_file, 'w'))) { + $smarty->trigger_error("problem writing temporary file '$_tmp_file'"); + return false; + } + + fwrite($fd, $params['contents']); + fclose($fd); + if(file_exists($params['filename'])) { + @unlink($params['filename']); + } + @rename($_tmp_file, $params['filename']); + @chmod($params['filename'], $smarty->_file_perms); + + return true; +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/debug.tpl b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/debug.tpl new file mode 100644 index 00000000..01265fb4 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/debug.tpl @@ -0,0 +1,64 @@ +{* Smarty *} + +{* debug.tpl, last updated version 2.0.1 *} + +{assign_debug_info} + +{if isset($_smarty_debug_output) and $_smarty_debug_output eq "html"} + <table border=0 width=100%> + <tr bgcolor=#cccccc><th colspan=2>Smarty Debug Console</th></tr> + <tr bgcolor=#cccccc><td colspan=2><b>included templates & config files (load time in seconds):</b></td></tr> + {section name=templates loop=$_debug_tpls} + <tr bgcolor={if %templates.index% is even}#eeeeee{else}#fafafa{/if}><td colspan=2><tt>{section name=indent loop=$_debug_tpls[templates].depth} {/section}<font color={if $_debug_tpls[templates].type eq "template"}brown{elseif $_debug_tpls[templates].type eq "insert"}black{else}green{/if}>{$_debug_tpls[templates].filename|escape:html}</font>{if isset($_debug_tpls[templates].exec_time)} <font size=-1><i>({$_debug_tpls[templates].exec_time|string_format:"%.5f"}){if %templates.index% eq 0} (total){/if}</i></font>{/if}</tt></td></tr> + {sectionelse} + <tr bgcolor=#eeeeee><td colspan=2><tt><i>no templates included</i></tt></td></tr> + {/section} + <tr bgcolor=#cccccc><td colspan=2><b>assigned template variables:</b></td></tr> + {section name=vars loop=$_debug_keys} + <tr bgcolor={if %vars.index% is even}#eeeeee{else}#fafafa{/if}><td valign=top><tt><font color=blue>{ldelim}${$_debug_keys[vars]}{rdelim}</font></tt></td><td nowrap><tt><font color=green>{$_debug_vals[vars]|@debug_print_var}</font></tt></td></tr> + {sectionelse} + <tr bgcolor=#eeeeee><td colspan=2><tt><i>no template variables assigned</i></tt></td></tr> + {/section} + <tr bgcolor=#cccccc><td colspan=2><b>assigned config file variables (outer template scope):</b></td></tr> + {section name=config_vars loop=$_debug_config_keys} + <tr bgcolor={if %config_vars.index% is even}#eeeeee{else}#fafafa{/if}><td valign=top><tt><font color=maroon>{ldelim}#{$_debug_config_keys[config_vars]}#{rdelim}</font></tt></td><td><tt><font color=green>{$_debug_config_vals[config_vars]|@debug_print_var}</font></tt></td></tr> + {sectionelse} + <tr bgcolor=#eeeeee><td colspan=2><tt><i>no config vars assigned</i></tt></td></tr> + {/section} + </table> +</BODY></HTML> +{else} +<SCRIPT language=javascript> + if( self.name == '' ) {ldelim} + var title = 'Console'; + {rdelim} + else {ldelim} + var title = 'Console_' + self.name; + {rdelim} + _smarty_console = window.open("",title.value,"width=680,height=600,resizable,scrollbars=yes"); + _smarty_console.document.write("<HTML><TITLE>Smarty Debug Console_"+self.name+"</TITLE><BODY bgcolor=#ffffff>"); + _smarty_console.document.write("<table border=0 width=100%>"); + _smarty_console.document.write("<tr bgcolor=#cccccc><th colspan=2>Smarty Debug Console</th></tr>"); + _smarty_console.document.write("<tr bgcolor=#cccccc><td colspan=2><b>included templates & config files (load time in seconds):</b></td></tr>"); + {section name=templates loop=$_debug_tpls} + _smarty_console.document.write("<tr bgcolor={if %templates.index% is even}#eeeeee{else}#fafafa{/if}><td colspan=2><tt>{section name=indent loop=$_debug_tpls[templates].depth} {/section}<font color={if $_debug_tpls[templates].type eq "template"}brown{elseif $_debug_tpls[templates].type eq "insert"}black{else}green{/if}>{$_debug_tpls[templates].filename|escape:html|escape:javascript}</font>{if isset($_debug_tpls[templates].exec_time)} <font size=-1><i>({$_debug_tpls[templates].exec_time|string_format:"%.5f"}){if %templates.index% eq 0} (total){/if}</i></font>{/if}</tt></td></tr>"); + {sectionelse} + _smarty_console.document.write("<tr bgcolor=#eeeeee><td colspan=2><tt><i>no templates included</i></tt></td></tr>"); + {/section} + _smarty_console.document.write("<tr bgcolor=#cccccc><td colspan=2><b>assigned template variables:</b></td></tr>"); + {section name=vars loop=$_debug_keys} + _smarty_console.document.write("<tr bgcolor={if %vars.index% is even}#eeeeee{else}#fafafa{/if}><td valign=top><tt><font color=blue>{ldelim}${$_debug_keys[vars]}{rdelim}</font></tt></td><td nowrap><tt><font color=green>{$_debug_vals[vars]|@debug_print_var|escape:javascript}</font></tt></td></tr>"); + {sectionelse} + _smarty_console.document.write("<tr bgcolor=#eeeeee><td colspan=2><tt><i>no template variables assigned</i></tt></td></tr>"); + {/section} + _smarty_console.document.write("<tr bgcolor=#cccccc><td colspan=2><b>assigned config file variables (outer template scope):</b></td></tr>"); + {section name=config_vars loop=$_debug_config_keys} + _smarty_console.document.write("<tr bgcolor={if %config_vars.index% is even}#eeeeee{else}#fafafa{/if}><td valign=top><tt><font color=maroon>{ldelim}#{$_debug_config_keys[config_vars]}#{rdelim}</font></tt></td><td><tt><font color=green>{$_debug_config_vals[config_vars]|@debug_print_var|escape:javascript}</font></tt></td></tr>"); + {sectionelse} + _smarty_console.document.write("<tr bgcolor=#eeeeee><td colspan=2><tt><i>no config vars assigned</i></tt></td></tr>"); + {/section} + _smarty_console.document.write("</table>"); + _smarty_console.document.write("</BODY></HTML>"); + _smarty_console.document.close(); +</SCRIPT> +{/if} diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/block.strip.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/block.strip.php new file mode 100644 index 00000000..b03ce78c --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/block.strip.php @@ -0,0 +1,35 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + +/** + * Smarty {strip}{/strip} block plugin + * + * Type: block function<br> + * Name: strip<br> + * Purpose: strip unwanted white space from text<br> + * @link http://smarty.php.net/manual/en/language.function.strip.php {strip} + * (Smarty online manual) + * @param array unused, no parameters for this block + * @param string content of {strip}{/strip} tags + * @param Smarty clever method emulation + * @return string $content stripped of whitespace + */ +function smarty_block_strip($params, $content, &$this) +{ + /* Reformat data between 'strip' and '/strip' tags, removing spaces, tabs and newlines. */ + $_strip_search = array( + "![\t ]+$|^[\t ]+!m", // remove leading/trailing space chars + '%[\r\n]+%m'); // remove CRs and newlines + $_strip_replace = array( + '', + ''); + return preg_replace($_strip_search, $_strip_replace, $content); +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/block.textformat.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/block.textformat.php new file mode 100644 index 00000000..7ddccc70 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/block.textformat.php @@ -0,0 +1,83 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + +/** + * Smarty {textformat}{/textformat} block plugin + * + * Type: block function<br> + * Name: textformat<br> + * Purpose: format text a certain way with preset styles + * or custom wrap/indent settings<br> + * @link http://smarty.php.net/manual/en/language.function.textformat.php {textformat} + * (Smarty online manual) + * @param array + * <pre> + * Params: style: string (email) + * indent: integer (0) + * wrap: integer (80) + * wrap_char string ("\n") + * indent_char: string (" ") + * wrap_boundary: boolean (true) + * </pre> + * @param string contents of the block + * @param Smarty clever simulation of a method + * @return string string $content re-formatted + */ +function smarty_block_textformat($params, $content, &$smarty) +{ + $style = null; + $indent = 0; + $indent_first = 0; + $indent_char = ' '; + $wrap = 80; + $wrap_char = "\n"; + $wrap_cut = false; + $assign = null; + + if($content == null) { + return true; + } + + extract($params); + + if($style == 'email') { + $wrap = 72; + } + + // split into paragraphs + $paragraphs = preg_split('![\r\n][\r\n]!',$content); + $output = ''; + + foreach($paragraphs as $paragraph) { + if($paragraph == '') { + continue; + } + // convert mult. spaces & special chars to single space + $paragraph = preg_replace(array('!\s+!','!(^\s+)|(\s+$)!'),array(' ',''),$paragraph); + // indent first line + if($indent_first > 0) { + $paragraph = str_repeat($indent_char,$indent_first) . $paragraph; + } + // wordwrap sentences + $paragraph = wordwrap($paragraph, $wrap - $indent, $wrap_char, $wrap_cut); + // indent lines + if($indent > 0) { + $paragraph = preg_replace('!^!m',str_repeat($indent_char,$indent),$paragraph); + } + $output .= $paragraph . $wrap_char . $wrap_char; + } + + if($assign != null) { + $smarty->assign($assign,$output); + } else { + return $output; + } +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.assign.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.assign.php new file mode 100644 index 00000000..ad23f043 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.assign.php @@ -0,0 +1,38 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + +/** + * Smarty {assign} function plugin + * + * Type: function<br> + * Name: assign<br> + * Purpose: assign a value to a template variable + * @link http://smarty.php.net/manual/en/language.custom.functions.php#LANGUAGE.FUNCTION.ASSIGN {assign} + * (Smarty online manual) + * @param array Format: array('var' => variable name, 'value' => value to assign) + * @param Smarty + */ +function smarty_function_assign($params, &$smarty) +{ + extract($params); + + if (empty($var)) { + $smarty->trigger_error("assign: missing 'var' parameter"); + return; + } + + if (!in_array('value', array_keys($params))) { + $smarty->trigger_error("assign: missing 'value' parameter"); + return; + } + + $smarty->assign($var, $value); +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.assign_debug_info.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.assign_debug_info.php new file mode 100644 index 00000000..c281ce87 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.assign_debug_info.php @@ -0,0 +1,39 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + +/** + * Smarty {assign_debug_info} function plugin + * + * Type: function<br> + * Name: assign_debug_info<br> + * Purpose: assign debug info to the template<br> + * @param array unused in this plugin, this plugin uses {@link Smarty::$_config}, + * {@link Smarty::$_tpl_vars} and {@link Smarty::$_smarty_debug_info} + * @param Smarty + */ +function smarty_function_assign_debug_info($params, &$smarty) +{ + $assigned_vars = $smarty->_tpl_vars; + ksort($assigned_vars); + if (@is_array($smarty->_config[0])) { + $config_vars = $smarty->_config[0]; + ksort($config_vars); + $smarty->assign("_debug_config_keys", array_keys($config_vars)); + $smarty->assign("_debug_config_vals", array_values($config_vars)); + } + + $included_templates = $smarty->_smarty_debug_info; + + $smarty->assign("_debug_keys", array_keys($assigned_vars)); + $smarty->assign("_debug_vals", array_values($assigned_vars)); + + $smarty->assign("_debug_tpls", $included_templates); +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.config_load.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.config_load.php new file mode 100644 index 00000000..12b74620 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.config_load.php @@ -0,0 +1,130 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + +/** + * Smarty {config_load} function plugin + * + * Type: function<br> + * Name: config_load<br> + * Purpose: load config file vars + * @link http://smarty.php.net/manual/en/language.function.config.load.php {config_load} + * (Smarty online manual) + * @param array Format: + * <pre> + * array('file' => required config file name, + * 'section' => optional config file section to load + * 'scope' => local/parent/global + * 'global' => overrides scope, setting to parent if true) + * </pre> + * @param Smarty + */ +function smarty_function_config_load($params, &$smarty) +{ + if ($smarty->debugging) { + $_params = array(); + require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.get_microtime.php'); + $_debug_start_time = smarty_core_get_microtime($_params, $smarty); + } + + $_file = isset($params['file']) ? $smarty->_dequote($params['file']) : null; + $_section = isset($params['section']) ? $smarty->_dequote($params['section']) : null; + $_scope = isset($params['scope']) ? $smarty->_dequote($params['scope']) : 'global'; + $_global = isset($params['global']) ? $smarty->_dequote($params['global']) : false; + + if (!isset($_file) || strlen($_file) == 0) { + $smarty->_syntax_error("missing 'file' attribute in config_load tag", E_USER_ERROR, __FILE__, __LINE__); + } + + if (isset($_scope)) { + if ($_scope != 'local' && + $_scope != 'parent' && + $_scope != 'global') { + $smarty->_syntax_error("invalid 'scope' attribute value", E_USER_ERROR, __FILE__, __LINE__); + } + } else { + if ($_global) { + $_scope = 'parent'; + } else { + $_scope = 'local'; + } + } + + if(@is_dir($smarty->config_dir)) { + $_config_dir = $smarty->config_dir; + } else { + // config_dir not found, try include_path + $_params = array('file_path' => $smarty->config_dir); + require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.get_include_path.php'); + smarty_core_get_include_path($_params, $smarty); + $_config_dir = $_params['new_file_path']; + } + + $_file_path = $_config_dir . DIRECTORY_SEPARATOR . $_file; + if (isset($_section)) + $_compile_file = $smarty->_get_compile_path($_file_path.'|'.$_section); + else + $_compile_file = $smarty->_get_compile_path($_file_path); + + if($smarty->force_compile + || !file_exists($_compile_file) + || ($smarty->compile_check + && !$smarty->_is_compiled($_file_path, $_compile_file))) { + // compile config file + if(!is_object($smarty->_conf_obj)) { + require_once SMARTY_DIR . $smarty->config_class . '.class.php'; + $smarty->_conf_obj = new $smarty->config_class($_config_dir); + $smarty->_conf_obj->overwrite = $smarty->config_overwrite; + $smarty->_conf_obj->booleanize = $smarty->config_booleanize; + $smarty->_conf_obj->read_hidden = $smarty->config_read_hidden; + $smarty->_conf_obj->fix_newlines = $smarty->config_fix_newlines; + $smarty->_conf_obj->set_path = $_config_dir; + } + $_config_vars = array_merge($smarty->_conf_obj->get($_file), + $smarty->_conf_obj->get($_file, $_section)); + if(function_exists('var_export')) { + $_output = '<?php $_config_vars = ' . var_export($_config_vars, true) . '; ?>'; + } else { + $_output = '<?php $_config_vars = unserialize(\'' . strtr(serialize($_config_vars),array('\''=>'\\\'', '\\'=>'\\\\')) . '\'); ?>'; + } + $_params = (array('compile_path' => $_compile_file, 'compiled_content' => $_output, 'resource_timestamp' => filemtime($_file_path))); + require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.write_compiled_resource.php'); + smarty_core_write_compiled_resource($_params, $smarty); + } else { + include($_compile_file); + } + + if ($smarty->caching) { + $smarty->_cache_info['config'][$_file] = true; + } + + $smarty->_config[0]['vars'] = @array_merge($smarty->_config[0]['vars'], $_config_vars); + $smarty->_config[0]['files'][$_file] = true; + + if ($_scope == 'parent') { + $smarty->_config[1]['vars'] = @array_merge($smarty->_config[1]['vars'], $_config_vars); + $smarty->_config[1]['files'][$_file] = true; + } else if ($_scope == 'global') { + for ($i = 1, $for_max = count($smarty->_config); $i < $for_max; $i++) { + $smarty->_config[$i]['vars'] = @array_merge($smarty->_config[$i]['vars'], $_config_vars); + $smarty->_config[$i]['files'][$_file] = true; + } + } + + if ($smarty->debugging) { + $_params = array(); + require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.get_microtime.php'); + $smarty->_smarty_debug_info[] = array('type' => 'config', + 'filename' => $_file.' ['.$_section.'] '.$_scope, + 'depth' => $smarty->_inclusion_depth, + 'exec_time' => smarty_core_get_microtime($_params, $smarty) - $_debug_start_time); + } + +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.counter.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.counter.php new file mode 100644 index 00000000..2536c14e --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.counter.php @@ -0,0 +1,88 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + + +/** + * Smarty {counter} function plugin + * + * Type: function<br> + * Name: counter<br> + * Purpose: print out a counter value + * @link http://smarty.php.net/manual/en/language.function.counter.php {counter} + * (Smarty online manual) + * @param array parameters + * @param Smarty + * @return string|null + */ +function smarty_function_counter($params, &$smarty) +{ + static $counters = array(); + + extract($params); + + if (!isset($name)) { + if(isset($id)) { + $name = $id; + } else { + $name = "default"; + } + } + + if (!isset($counters[$name])) { + $counters[$name] = array( + 'start'=>1, + 'skip'=>1, + 'direction'=>'up', + 'count'=>1 + ); + } + $counter =& $counters[$name]; + + if (isset($start)) { + $counter['start'] = $counter['count'] = $start; + } + + if (!empty($assign)) { + $counter['assign'] = $assign; + } + + if (isset($counter['assign'])) { + $smarty->assign($counter['assign'], $counter['count']); + } + + if (isset($print)) { + $print = (bool)$print; + } else { + $print = empty($counter['assign']); + } + + if ($print) { + $retval = $counter['count']; + } else { + $retval = null; + } + + if (isset($skip)) { + $counter['skip'] = $skip; + } + + if (isset($direction)) { + $counter['direction'] = $direction; + } + + if ($counter['direction'] == "down") + $counter['count'] -= $counter['skip']; + else + $counter['count'] += $counter['skip']; + + return $retval; + +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.cycle.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.cycle.php new file mode 100644 index 00000000..d5909a61 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.cycle.php @@ -0,0 +1,119 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + +/** + * Smarty {cycle} function plugin + * + * Type: function<br> + * Name: cycle<br> + * Date: May 3, 2002<br> + * Purpose: cycle through given values<br> + * Input: + * - name = name of cycle (optional) + * - values = comma separated list of values to cycle, + * or an array of values to cycle + * (this can be left out for subsequent calls) + * - reset = boolean - resets given var to true + * - print = boolean - print var or not. default is true + * - advance = boolean - whether or not to advance the cycle + * - delimiter = the value delimiter, default is "," + * - assign = boolean, assigns to template var instead of + * printed. + * + * Examples:<br> + * <pre> + * {cycle values="#eeeeee,#d0d0d0d"} + * {cycle name=row values="one,two,three" reset=true} + * {cycle name=row} + * </pre> + * @link http://smarty.php.net/manual/en/language.function.cycle.php {cycle} + * (Smarty online manual) + * @author Monte Ohrt <monte@ispi.net> + * @author credit to Mark Priatel <mpriatel@rogers.com> + * @author credit to Gerard <gerard@interfold.com> + * @author credit to Jason Sweat <jsweat_php@yahoo.com> + * @version 1.3 + * @param array + * @param Smarty + * @return string|null + */ +function smarty_function_cycle($params, &$smarty) +{ + static $cycle_vars; + + extract($params); + + if (empty($name)) { + $name = 'default'; + } + + if (!isset($print)) { + $print = true; + } + + if (!isset($advance)) { + $advance = true; + } + + if (!isset($reset)) { + $reset = false; + } + + if (!in_array('values', array_keys($params))) { + if(!isset($cycle_vars[$name]['values'])) { + $smarty->trigger_error("cycle: missing 'values' parameter"); + return; + } + } else { + if(isset($cycle_vars[$name]['values']) + && $cycle_vars[$name]['values'] != $values ) { + $cycle_vars[$name]['index'] = 0; + } + $cycle_vars[$name]['values'] = $values; + } + + if (isset($delimiter)) { + $cycle_vars[$name]['delimiter'] = $delimiter; + } elseif (!isset($cycle_vars[$name]['delimiter'])) { + $cycle_vars[$name]['delimiter'] = ','; + } + + if(!is_array($cycle_vars[$name]['values'])) { + $cycle_array = explode($cycle_vars[$name]['delimiter'],$cycle_vars[$name]['values']); + } else { + $cycle_array = $cycle_vars[$name]['values']; + } + + if(!isset($cycle_vars[$name]['index']) || $reset ) { + $cycle_vars[$name]['index'] = 0; + } + + if (isset($assign)) { + $print = false; + $smarty->assign($assign, $cycle_array[$cycle_vars[$name]['index']]); + } + + if($print) { + $retval = $cycle_array[$cycle_vars[$name]['index']]; + } else { + $retval = null; + } + + if($advance) { + if ( $cycle_vars[$name]['index'] >= count($cycle_array) -1 ) { + $cycle_vars[$name]['index'] = 0; + } else { + $cycle_vars[$name]['index']++; + } + } + + return $retval; +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.debug.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.debug.php new file mode 100644 index 00000000..2452d625 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.debug.php @@ -0,0 +1,35 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + + +/** + * Smarty {debug} function plugin + * + * Type: function<br> + * Name: debug<br> + * Date: July 1, 2002<br> + * Purpose: popup debug window + * @link http://smarty.php.net/manual/en/language.function.debug.php {debug} + * (Smarty online manual) + * @author Monte Ohrt <monte@ispi.net> + * @version 1.0 + * @param array + * @param Smarty + * @return string output from {@link Smarty::_generate_debug_output()} + */ +function smarty_function_debug($params, &$smarty) +{ + if($params['output']) { + $smarty->assign('_smarty_debug_output',$params['output']); + } + require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.display_debug_console.php'); + return smarty_core_display_debug_console(null, $smarty); +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.eval.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.eval.php new file mode 100644 index 00000000..3a4b8b2b --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.eval.php @@ -0,0 +1,48 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + + +/** + * Smarty {eval} function plugin + * + * Type: function<br> + * Name: eval<br> + * Purpose: evaluate a template variable as a template<br> + * @link http://smarty.php.net/manual/en/language.function.eval.php {eval} + * (Smarty online manual) + * @param array + * @param Smarty + */ +function smarty_function_eval($params, &$smarty) +{ + + if (!isset($params['var'])) { + $smarty->trigger_error("eval: missing 'var' parameter"); + return; + } + + if($params['var'] == '') { + return; + } + + $smarty->_compile_source('evaluated template', $params['var'], $_var_compiled); + + ob_start(); + $smarty->_eval('?>' . $_var_compiled); + $_contents = ob_get_contents(); + ob_end_clean(); + + if (!empty($params['assign'])) { + $smarty->assign($params['assign'], $_contents); + } else { + return $_contents; + } +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.fetch.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.fetch.php new file mode 100644 index 00000000..264e78d2 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.fetch.php @@ -0,0 +1,217 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + + +/** + * Smarty {fetch} plugin + * + * Type: function<br> + * Name: fetch<br> + * Purpose: fetch file, web or ftp data and display results + * @link http://smarty.php.net/manual/en/language.function.fetch.php {fetch} + * (Smarty online manual) + * @param array + * @param Smarty + * @return string|null if the assign parameter is passed, Smarty assigns the + * result to a template variable + */ +function smarty_function_fetch($params, &$smarty) +{ + if (empty($params['file'])) { + $smarty->_trigger_fatal_error("[plugin] parameter 'file' cannot be empty"); + return; + } + + if ($smarty->security && !preg_match('!^(http|ftp)://!i', $params['file'])) { + $_params = array('resource_type' => 'file', 'resource_name' => $params['file']); + require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.is_secure.php'); + if(!smarty_core_is_secure($_params, $smarty)) { + $smarty->_trigger_fatal_error('[plugin] (secure mode) fetch \'' . $params['file'] . '\' is not allowed'); + return; + } + + // fetch the file + if($fp = @fopen($params['file'],'r')) { + while(!feof($fp)) { + $content .= fgets ($fp,4096); + } + fclose($fp); + } else { + $smarty->_trigger_fatal_error('[plugin] fetch cannot read file \'' . $params['file'] . '\''); + return; + } + } else { + // not a local file + if(preg_match('!^http://!i',$params['file'])) { + // http fetch + if($uri_parts = parse_url($params['file'])) { + // set defaults + $host = $server_name = $uri_parts['host']; + $timeout = 30; + $accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*"; + $agent = "Smarty Template Engine ".$smarty->_version; + $referer = ""; + $uri = !empty($uri_parts['path']) ? $uri_parts['path'] : '/'; + $uri .= !empty($uri_parts['query']) ? '?' . $uri_parts['query'] : ''; + $_is_proxy = false; + if(empty($uri_parts['port'])) { + $port = 80; + } else { + $port = $uri_parts['port']; + } + if(empty($uri_parts['user'])) { + $user = ''; + } + // loop through parameters, setup headers + foreach($params as $param_key => $param_value) { + switch($param_key) { + case "file": + case "assign": + case "assign_headers": + break; + case "user": + if(!empty($param_value)) { + $user = $param_value; + } + break; + case "pass": + if(!empty($param_value)) { + $pass = $param_value; + } + break; + case "accept": + if(!empty($param_value)) { + $accept = $param_value; + } + break; + case "header": + if(!empty($param_value)) { + if(!preg_match('![\w\d-]+: .+!',$param_value)) { + $smarty->_trigger_fatal_error("[plugin] invalid header format '".$param_value."'"); + return; + } else { + $extra_headers[] = $param_value; + } + } + break; + case "proxy_host": + if(!empty($param_value)) { + $proxy_host = $param_value; + } + break; + case "proxy_port": + if(!preg_match('!\D!', $param_value)) { + $proxy_port = (int) $param_value; + } else { + $smarty->_trigger_fatal_error("[plugin] invalid value for attribute '".$param_key."'"); + return; + } + break; + case "agent": + if(!empty($param_value)) { + $agent = $param_value; + } + break; + case "referer": + if(!empty($param_value)) { + $referer = $param_value; + } + break; + case "timeout": + if(!preg_match('!\D!', $param_value)) { + $timeout = (int) $param_value; + } else { + $smarty->_trigger_fatal_error("[plugin] invalid value for attribute '".$param_key."'"); + return; + } + break; + default: + $smarty->_trigger_fatal_error("[plugin] unrecognized attribute '".$param_key."'"); + return; + } + } + if(!empty($proxy_host) && !empty($proxy_port)) { + $_is_proxy = true; + $fp = fsockopen($proxy_host,$proxy_port,$errno,$errstr,$timeout); + } else { + $fp = fsockopen($server_name,$port,$errno,$errstr,$timeout); + } + + if(!$fp) { + $smarty->_trigger_fatal_error("[plugin] unable to fetch: $errstr ($errno)"); + return; + } else { + if($_is_proxy) { + fputs($fp, 'GET ' . $params['file'] . " HTTP/1.0\r\n"); + } else { + fputs($fp, "GET $uri HTTP/1.0\r\n"); + } + if(!empty($host)) { + fputs($fp, "Host: $host\r\n"); + } + if(!empty($accept)) { + fputs($fp, "Accept: $accept\r\n"); + } + if(!empty($agent)) { + fputs($fp, "User-Agent: $agent\r\n"); + } + if(!empty($referer)) { + fputs($fp, "Referer: $referer\r\n"); + } + if(isset($extra_headers) && is_array($extra_headers)) { + foreach($extra_headers as $curr_header) { + fputs($fp, $curr_header."\r\n"); + } + } + if(!empty($user) && !empty($pass)) { + fputs($fp, "Authorization: BASIC ".base64_encode("$user:$pass")."\r\n"); + } + + $content = ''; + fputs($fp, "\r\n"); + while(!feof($fp)) { + $content .= fgets($fp,4096); + } + fclose($fp); + $csplit = explode("\r\n\r\n", $content, 2); + + $content = $csplit[1]; + + if(!empty($params['assign_headers'])) { + $smarty->assign($params['assign_headers'], explode("\r\n", $csplit[0])); + } + } + } else { + $smarty->_trigger_fatal_error("[plugin] unable to parse URL, check syntax"); + return; + } + } else { + // ftp fetch + if($fp = @fopen($params['file'],'r')) { + while(!feof($fp)) { + $content .= fgets ($fp,4096); + } + fclose($fp); + } else { + $smarty->_trigger_fatal_error('[plugin] fetch cannot read file \'' . $params['file'] .'\''); + return; + } + } + + } + + + if (!empty($params['assign'])) { + $smarty->assign($params['assign'],$content); + } else { + return $content; + } +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.html_checkboxes.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.html_checkboxes.php new file mode 100644 index 00000000..c146fc19 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.html_checkboxes.php @@ -0,0 +1,135 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + + +/** + * Smarty {html_checkboxes} function plugin + * + * File: function.html_checkboxes.php<br> + * Type: function<br> + * Name: html_checkboxes<br> + * Date: 24.Feb.2003<br> + * Purpose: Prints out a list of checkbox input types<br> + * Input:<br> + * - name (optional) - string default "checkbox" + * - values (required) - array + * - options (optional) - associative array + * - checked (optional) - array default not set + * - separator (optional) - ie <br> or + * - output (optional) - without this one the buttons don't have names + * Examples: + * <pre> + * {html_checkboxes values=$ids output=$names} + * {html_checkboxes values=$ids name='box' separator='<br>' output=$names} + * {html_checkboxes values=$ids checked=$checked separator='<br>' output=$names} + * </pre> + * @link http://smarty.php.net/manual/en/language.function.html.checkboxes.php {html_checkboxes} + * (Smarty online manual) + * @author Christopher Kvarme <christopher.kvarme@flashjab.com> + * @author credits to Monte Ohrt <monte@ispi.net> + * @version 1.0 + * @param array + * @param Smarty + * @return string + * @uses smarty_function_escape_special_chars() + */ +function smarty_function_html_checkboxes($params, &$smarty) +{ + require_once $smarty->_get_plugin_filepath('shared','escape_special_chars'); + + $name = 'checkbox'; + $values = null; + $options = null; + $selected = null; + $separator = ''; + $labels = true; + $output = null; + + $extra = ''; + + foreach($params as $_key => $_val) { + switch($_key) { + case 'name': + case 'separator': + $$_key = $_val; + break; + + case 'labels': + $$_key = (bool)$_val; + break; + + case 'options': + $$_key = (array)$_val; + break; + + case 'values': + case 'output': + $$_key = array_values((array)$_val); + break; + + case 'checked': + case 'selected': + $selected = array_values((array)$_val); + break; + + case 'checkboxes': + $smarty->trigger_error('html_checkboxes: the use of the "checkboxes" attribute is deprecated, use "options" instead', E_USER_WARNING); + $options = (array)$_val; + break; + + default: + if(!is_array($_val)) { + $extra .= ' '.$_key.'="'.smarty_function_escape_special_chars($_val).'"'; + } else { + $smarty->trigger_error("html_checkboxes: extra attribute '$_key' cannot be an array", E_USER_NOTICE); + } + break; + } + } + + if (!isset($options) && !isset($values)) + return ''; /* raise error here? */ + + settype($selected, 'array'); + $_html_result = ''; + + if (is_array($options)) { + + foreach ($options as $_key=>$_val) + $_html_result .= smarty_function_html_checkboxes_output($name, $_key, $_val, $selected, $extra, $separator, $labels); + + + } else { + foreach ($values as $_i=>$_key) { + $_val = isset($output[$_i]) ? $output[$_i] : ''; + $_html_result .= smarty_function_html_checkboxes_output($name, $_key, $_val, $selected, $extra, $separator, $labels); + } + + } + + return $_html_result; + +} + +function smarty_function_html_checkboxes_output($name, $value, $output, $selected, $extra, $separator, $labels) { + $_output = ''; + if ($labels) $_output .= '<label>'; + $_output .= '<input type="checkbox" name="' + . smarty_function_escape_special_chars($name) . '[]" value="' + . smarty_function_escape_special_chars($value) . '"'; + + if (in_array($value, $selected)) { + $_output .= ' checked="checked"'; + } + $_output .= $extra . ' />' . $output; + if ($labels) $_output .= '</label>'; + $_output .= $separator . "\n"; + + return $_output; +} + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.html_image.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.html_image.php new file mode 100644 index 00000000..2fcdb4e1 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.html_image.php @@ -0,0 +1,143 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + + +/** + * Smarty {html_image} function plugin + * + * Type: function<br> + * Name: html_image<br> + * Date: Feb 24, 2003<br> + * Purpose: format HTML tags for the image<br> + * Input:<br> + * - file = file (and path) of image (required) + * - border = border width (optional, default 0) + * - height = image height (optional, default actual height) + * - image =image width (optional, default actual width) + * - basedir = base directory for absolute paths, default + * is environment variable DOCUMENT_ROOT + * + * Examples: {html_image file="images/masthead.gif"} + * Output: <img src="images/masthead.gif" border=0 width=400 height=23> + * @link http://smarty.php.net/manual/en/language.function.html.image.php {html_image} + * (Smarty online manual) + * @author Monte Ohrt <monte@ispi.net> + * @author credits to Duda <duda@big.hu> - wrote first image function + * in repository, helped with lots of functionality + * @version 1.0 + * @param array + * @param Smarty + * @return string + * @uses smarty_function_escape_special_chars() + */ +function smarty_function_html_image($params, &$smarty) +{ + require_once $smarty->_get_plugin_filepath('shared','escape_special_chars'); + + $alt = ''; + $file = ''; + $border = 0; + $height = ''; + $width = ''; + $extra = ''; + $prefix = ''; + $suffix = ''; + $basedir = isset($GLOBALS['HTTP_SERVER_VARS']['DOCUMENT_ROOT']) + ? $GLOBALS['HTTP_SERVER_VARS']['DOCUMENT_ROOT'] : ''; + if(strstr($GLOBALS['HTTP_SERVER_VARS']['HTTP_USER_AGENT'], 'Mac')) { + $dpi_default = 72; + } else { + $dpi_default = 96; + } + + foreach($params as $_key => $_val) { + switch($_key) { + case 'file': + case 'border': + case 'height': + case 'width': + case 'dpi': + case 'basedir': + $$_key = $_val; + break; + + case 'alt': + if(!is_array($_val)) { + $$_key = smarty_function_escape_special_chars($_val); + } else { + $smarty->trigger_error("html_image: extra attribute '$_key' cannot be an array", E_USER_NOTICE); + } + break; + + case 'link': + case 'href': + $prefix = '<a href="' . $_val . '">'; + $suffix = '</a>'; + break; + + default: + if(!is_array($_val)) { + $extra .= ' '.$_key.'="'.smarty_function_escape_special_chars($_val).'"'; + } else { + $smarty->trigger_error("html_image: extra attribute '$_key' cannot be an array", E_USER_NOTICE); + } + break; + } + } + + if (empty($file)) { + $smarty->trigger_error("html_image: missing 'file' parameter", E_USER_NOTICE); + return; + } + + if (substr($file,0,1) == '/') { + $_image_path = $basedir . $file; + } else { + $_image_path = $file; + } + + if(!isset($params['width']) || !isset($params['height'])) { + if(!$_image_data = @getimagesize($_image_path)) { + if(!file_exists($_image_path)) { + $smarty->trigger_error("html_image: unable to find '$_image_path'", E_USER_NOTICE); + return; + } else if(!is_readable($_image_path)) { + $smarty->trigger_error("html_image: unable to read '$_image_path'", E_USER_NOTICE); + return; + } else { + $smarty->trigger_error("html_image: '$_image_path' is not a valid image file", E_USER_NOTICE); + return; + } + } + $_params = array('resource_type' => 'file', 'resource_name' => $_image_path); + require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.is_secure.php'); + if(!$smarty->security && !smarty_core_is_secure($_params, $smarty)) { + $smarty->trigger_error("html_image: (secure) '$_image_path' not in secure directory", E_USER_NOTICE); + return; + } + + if(!isset($params['width'])) { + $width = $_image_data[0]; + } + if(!isset($params['height'])) { + $height = $_image_data[1]; + } + + } + + if(isset($params['dpi'])) { + $_resize = $dpi_default/$params['dpi']; + $width = round($width * $_resize); + $height = round($height * $_resize); + } + + return $prefix . '<img src="'.$file.'" alt="'.$alt.'" border="'.$border.'" width="'.$width.'" height="'.$height.'"'.$extra.' />' . $suffix; +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.html_options.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.html_options.php new file mode 100644 index 00000000..1b10653c --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.html_options.php @@ -0,0 +1,118 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + + +/** + * Smarty {html_options} function plugin + * + * Type: function<br> + * Name: html_options<br> + * Input:<br> + * - name (optional) - string default "select" + * - values (required if no options supplied) - array + * - options (required if no values supplied) - associative array + * - selected (optional) - string default not set + * - output (required if not options supplied) - array + * Purpose: Prints the list of <option> tags generated from + * the passed parameters + * @link http://smarty.php.net/manual/en/language.function.html.options.php {html_image} + * (Smarty online manual) + * @param array + * @param Smarty + * @return string + * @uses smarty_function_escape_special_chars() + */ +function smarty_function_html_options($params, &$smarty) +{ + require_once $smarty->_get_plugin_filepath('shared','escape_special_chars'); + + $name = null; + $values = null; + $options = null; + $selected = array(); + $output = null; + + $extra = ''; + + foreach($params as $_key => $_val) { + switch($_key) { + case 'name': + $$_key = (string)$_val; + break; + + case 'options': + $$_key = (array)$_val; + break; + + case 'selected': + case 'values': + case 'output': + $$_key = array_values((array)$_val); + break; + + default: + if(!is_array($_val)) { + $extra .= ' '.$_key.'="'.smarty_function_escape_special_chars($_val).'"'; + } else { + $smarty->trigger_error("html_options: extra attribute '$_key' cannot be an array", E_USER_NOTICE); + } + break; + } + } + + if (!isset($options) && !isset($values)) + return ''; /* raise error here? */ + + $_html_result = ''; + + if (is_array($options)) { + + foreach ($options as $_key=>$_val) + $_html_result .= smarty_function_html_options_optoutput($_key, $_val, $selected); + + } else { + + foreach ((array)$values as $_i=>$_key) { + $_val = isset($output[$_i]) ? $output[$_i] : ''; + $_html_result .= smarty_function_html_options_optoutput($_key, $_val, $selected); + } + + } + + if(!empty($name)) { + $_html_result = '<select name="' . $name . '"' . $extra . '>' . "\n" . $_html_result . '</select>' . "\n"; + } + + return $_html_result; + +} + +function smarty_function_html_options_optoutput($key, $value, $selected) { + if(!is_array($value)) { + $_html_result = '<option label="' . smarty_function_escape_special_chars($value) . '" value="' . + smarty_function_escape_special_chars($key) . '"'; + if (in_array($key, $selected)) + $_html_result .= ' selected="selected"'; + $_html_result .= '>' . smarty_function_escape_special_chars($value) . '</option>' . "\n"; + } else { + $_html_result = smarty_function_html_options_optgroup($key, $value, $selected); + } + return $_html_result; +} + +function smarty_function_html_options_optgroup($key, $values, $selected) { + $optgroup_html = '<optgroup label="' . smarty_function_escape_special_chars($key) . '">' . "\n"; + foreach ($values as $key => $value) { + $optgroup_html .= smarty_function_html_options_optoutput($key, $value, $selected); + } + $optgroup_html .= "</optgroup>\n"; + return $optgroup_html; +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.html_radios.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.html_radios.php new file mode 100644 index 00000000..b80e9bc2 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.html_radios.php @@ -0,0 +1,138 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + + +/** + * Smarty {html_radios} function plugin + * + * File: function.html_radios.php<br> + * Type: function<br> + * Name: html_radios<br> + * Date: 24.Feb.2003<br> + * Purpose: Prints out a list of radio input types<br> + * Input:<br> + * - name (optional) - string default "radio" + * - values (required) - array + * - options (optional) - associative array + * - checked (optional) - array default not set + * - separator (optional) - ie <br> or + * - output (optional) - without this one the buttons don't have names + * Examples: + * <pre> + * {html_radios values=$ids output=$names} + * {html_radios values=$ids name='box' separator='<br>' output=$names} + * {html_radios values=$ids checked=$checked separator='<br>' output=$names} + * </pre> + * @link http://smarty.php.net/manual/en/language.function.html.radios.php {html_radios} + * (Smarty online manual) + * @author Christopher Kvarme <christopher.kvarme@flashjab.com> + * @author credits to Monte Ohrt <monte@ispi.net> + * @version 1.0 + * @param array + * @param Smarty + * @return string + * @uses smarty_function_escape_special_chars() + */ +function smarty_function_html_radios($params, &$smarty) +{ + require_once $smarty->_get_plugin_filepath('shared','escape_special_chars'); + + $name = 'radio'; + $values = null; + $options = null; + $selected = null; + $separator = ''; + $labels = true; + $output = null; + $extra = ''; + + foreach($params as $_key => $_val) { + switch($_key) { + case 'name': + case 'separator': + $$_key = (string)$_val; + break; + + case 'checked': + case 'selected': + if(is_array($_val)) { + $smarty->trigger_error('html_radios: the "' . $_key . '" attribute cannot be an array', E_USER_WARNING); + } else { + $selected = (string)$_val; + } + break; + + case 'labels': + $$_key = (bool)$_val; + break; + + case 'options': + $$_key = (array)$_val; + break; + + case 'values': + case 'output': + $$_key = array_values((array)$_val); + break; + + case 'radios': + $smarty->trigger_error('html_radios: the use of the "radios" attribute is deprecated, use "options" instead', E_USER_WARNING); + $options = (array)$_val; + break; + + + default: + if(!is_array($_val)) { + $extra .= ' '.$_key.'="'.smarty_function_escape_special_chars($_val).'"'; + } else { + $smarty->trigger_error("html_radios: extra attribute '$_key' cannot be an array", E_USER_NOTICE); + } + break; + } + } + + if (!isset($options) && !isset($values)) + return ''; /* raise error here? */ + + $_html_result = ''; + + if (isset($options) && is_array($options)) { + + foreach ((array)$options as $_key=>$_val) + $_html_result .= smarty_function_html_radios_output($name, $_key, $_val, $selected, $extra, $separator, $labels); + + } else { + + foreach ((array)$values as $_i=>$_key) { + $_val = isset($output[$_i]) ? $output[$_i] : ''; + $_html_result .= smarty_function_html_radios_output($name, $_key, $_val, $selected, $extra, $separator, $labels); + } + + } + + return $_html_result; + +} + +function smarty_function_html_radios_output($name, $value, $output, $selected, $extra, $separator, $labels) { + $_output = ''; + if ($labels) $_output .= '<label>'; + $_output .= '<input type="radio" name="' + . smarty_function_escape_special_chars($name) . '" value="' + . smarty_function_escape_special_chars($value) . '"'; + + if ($value==$selected) { + $_output .= ' checked="checked"'; + } + $_output .= $extra . ' />' . $output; + if ($labels) $_output .= '</label>'; + $_output .= $separator . "\n"; + + return $_output; +} + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.html_select_date.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.html_select_date.php new file mode 100644 index 00000000..dd90e921 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.html_select_date.php @@ -0,0 +1,243 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + +/** + * Smarty {html_select_date} plugin + * + * Type: function<br> + * Name: html_select_date<br> + * Purpose: Prints the dropdowns for date selection. + * + * ChangeLog:<br> + * - 1.0 initial release + * - 1.1 added support for +/- N syntax for begin + * and end year values. (Monte) + * - 1.2 added support for yyyy-mm-dd syntax for + * time value. (Jan Rosier) + * - 1.3 added support for choosing format for + * month values (Gary Loescher) + * - 1.3.1 added support for choosing format for + * day values (Marcus Bointon) + * @link http://smarty.php.net/manual/en/language.function.html.select.date.php {html_select_date} + * (Smarty online manual) + * @version 1.3 + * @author Andrei Zmievski + * @param array + * @param Smarty + * @return string + */ +function smarty_function_html_select_date($params, &$smarty) +{ + require_once $smarty->_get_plugin_filepath('shared','make_timestamp'); + require_once $smarty->_get_plugin_filepath('function','html_options'); + /* Default values. */ + $prefix = "Date_"; + $start_year = strftime("%Y"); + $end_year = $start_year; + $display_days = true; + $display_months = true; + $display_years = true; + $month_format = "%B"; + /* Write months as numbers by default GL */ + $month_value_format = "%m"; + $day_format = "%02d"; + /* Write day values using this format MB */ + $day_value_format = "%d"; + $year_as_text = false; + /* Display years in reverse order? Ie. 2000,1999,.... */ + $reverse_years = false; + /* Should the select boxes be part of an array when returned from PHP? + e.g. setting it to "birthday", would create "birthday[Day]", + "birthday[Month]" & "birthday[Year]". Can be combined with prefix */ + $field_array = null; + /* <select size>'s of the different <select> tags. + If not set, uses default dropdown. */ + $day_size = null; + $month_size = null; + $year_size = null; + /* Unparsed attributes common to *ALL* the <select>/<input> tags. + An example might be in the template: all_extra ='class ="foo"'. */ + $all_extra = null; + /* Separate attributes for the tags. */ + $day_extra = null; + $month_extra = null; + $year_extra = null; + /* Order in which to display the fields. + "D" -> day, "M" -> month, "Y" -> year. */ + $field_order = 'MDY'; + /* String printed between the different fields. */ + $field_separator = "\n"; + $time = time(); + + + extract($params); + + // If $time is not in format yyyy-mm-dd + if (!preg_match('/^\d{4}-\d{2}-\d{2}$/', $time)) { + // then $time is empty or unix timestamp or mysql timestamp + // using smarty_make_timestamp to get an unix timestamp and + // strftime to make yyyy-mm-dd + $time = strftime('%Y-%m-%d', smarty_make_timestamp($time)); + } + // Now split this in pieces, which later can be used to set the select + $time = explode("-", $time); + + // make syntax "+N" or "-N" work with start_year and end_year + if (preg_match('!^(\+|\-)\s*(\d+)$!', $end_year, $match)) { + if ($match[1] == '+') { + $end_year = strftime('%Y') + $match[2]; + } else { + $end_year = strftime('%Y') - $match[2]; + } + } + if (preg_match('!^(\+|\-)\s*(\d+)$!', $start_year, $match)) { + if ($match[1] == '+') { + $start_year = strftime('%Y') + $match[2]; + } else { + $start_year = strftime('%Y') - $match[2]; + } + } + + $field_order = strtoupper($field_order); + + $html_result = $month_result = $day_result = $year_result = ""; + + if ($display_months) { + $month_names = array(); + $month_values = array(); + + for ($i = 1; $i <= 12; $i++) { + $month_names[] = strftime($month_format, mktime(0, 0, 0, $i, 1, 2000)); + $month_values[] = strftime($month_value_format, mktime(0, 0, 0, $i, 1, 2000)); + } + + $month_result .= '<select name='; + if (null !== $field_array){ + $month_result .= '"' . $field_array . '[' . $prefix . 'Month]"'; + } else { + $month_result .= '"' . $prefix . 'Month"'; + } + if (null !== $month_size){ + $month_result .= ' size="' . $month_size . '"'; + } + if (null !== $month_extra){ + $month_result .= ' ' . $month_extra; + } + if (null !== $all_extra){ + $month_result .= ' ' . $all_extra; + } + $month_result .= '>'."\n"; + + $month_result .= smarty_function_html_options(array('output' => $month_names, + 'values' => $month_values, + 'selected' => $month_values[$time[1]-1], + 'print_result' => false), + $smarty); + + $month_result .= '</select>'; + } + + if ($display_days) { + $days = array(); + for ($i = 1; $i <= 31; $i++) { + $days[] = sprintf($day_format, $i); + $day_values[] = sprintf($day_value_format, $i); + } + + $day_result .= '<select name='; + if (null !== $field_array){ + $day_result .= '"' . $field_array . '[' . $prefix . 'Day]"'; + } else { + $day_result .= '"' . $prefix . 'Day"'; + } + if (null !== $day_size){ + $day_result .= ' size="' . $day_size . '"'; + } + if (null !== $all_extra){ + $day_result .= ' ' . $all_extra; + } + if (null !== $day_extra){ + $day_result .= ' ' . $day_extra; + } + $day_result .= '>'."\n"; + $day_result .= smarty_function_html_options(array('output' => $days, + 'values' => $day_values, + 'selected' => $time[2], + 'print_result' => false), + $smarty); + $day_result .= '</select>'; + } + + if ($display_years) { + if (null !== $field_array){ + $year_name = $field_array . '[' . $prefix . 'Year]'; + } else { + $year_name = $prefix . 'Year'; + } + if ($year_as_text) { + $year_result .= '<input type="text" name="' . $year_name . '" value="' . $time[0] . '" size="4" maxlength="4"'; + if (null !== $all_extra){ + $year_result .= ' ' . $all_extra; + } + if (null !== $year_extra){ + $year_result .= ' ' . $year_extra; + } + $year_result .= '>'; + } else { + $years = range((int)$start_year, (int)$end_year); + if ($reverse_years) { + rsort($years, SORT_NUMERIC); + } + + $year_result .= '<select name="' . $year_name . '"'; + if (null !== $year_size){ + $year_result .= ' size="' . $year_size . '"'; + } + if (null !== $all_extra){ + $year_result .= ' ' . $all_extra; + } + if (null !== $year_extra){ + $year_result .= ' ' . $year_extra; + } + $year_result .= '>'."\n"; + $year_result .= smarty_function_html_options(array('output' => $years, + 'values' => $years, + 'selected' => $time[0], + 'print_result' => false), + $smarty); + $year_result .= '</select>'; + } + } + + // Loop thru the field_order field + for ($i = 0; $i <= 2; $i++){ + $c = substr($field_order, $i, 1); + switch ($c){ + case 'D': + $html_result .= $day_result; + break; + + case 'M': + $html_result .= $month_result; + break; + + case 'Y': + $html_result .= $year_result; + break; + } + // Add the field seperator + if($i != 2) { + $html_result .= $field_separator; + } + } + + return $html_result; +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.html_select_time.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.html_select_time.php new file mode 100644 index 00000000..969c13e6 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.html_select_time.php @@ -0,0 +1,163 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + + +/** + * Smarty {html_select_time} function plugin + * + * Type: function<br> + * Name: html_select_time<br> + * Purpose: Prints the dropdowns for time selection + * @link http://smarty.php.net/manual/en/language.function.html.select.time.php {html_select_time} + * (Smarty online manual) + * @param array + * @param Smarty + * @return string + * @uses smarty_make_timestamp() + */ +function smarty_function_html_select_time($params, &$smarty) +{ + require_once $smarty->_get_plugin_filepath('shared','make_timestamp'); + require_once $smarty->_get_plugin_filepath('function','html_options'); + /* Default values. */ + $prefix = "Time_"; + $time = time(); + $display_hours = true; + $display_minutes = true; + $display_seconds = true; + $display_meridian = true; + $use_24_hours = true; + $minute_interval = 1; + $second_interval = 1; + /* Should the select boxes be part of an array when returned from PHP? + e.g. setting it to "birthday", would create "birthday[Hour]", + "birthday[Minute]", "birthday[Seconds]" & "birthday[Meridian]". + Can be combined with prefix. */ + $field_array = null; + $all_extra = null; + $hour_extra = null; + $minute_extra = null; + $second_extra = null; + $meridian_extra = null; + + extract($params); + + $time = smarty_make_timestamp($time); + + $html_result = ''; + + if ($display_hours) { + $hours = $use_24_hours ? range(0, 23) : range(1, 12); + $hour_fmt = $use_24_hours ? '%H' : '%I'; + for ($i = 0, $for_max = count($hours); $i < $for_max; $i++) + $hours[$i] = sprintf('%02d', $hours[$i]); + $html_result .= '<select name='; + if (null !== $field_array) { + $html_result .= '"' . $field_array . '[' . $prefix . 'Hour]"'; + } else { + $html_result .= '"' . $prefix . 'Hour"'; + } + if (null !== $hour_extra){ + $html_result .= ' ' . $hour_extra; + } + if (null !== $all_extra){ + $html_result .= ' ' . $all_extra; + } + $html_result .= '>'."\n"; + $html_result .= smarty_function_html_options(array('output' => $hours, + 'values' => $hours, + 'selected' => strftime($hour_fmt, $time), + 'print_result' => false), + $smarty); + $html_result .= "</select>\n"; + } + + if ($display_minutes) { + $all_minutes = range(0, 59); + for ($i = 0, $for_max = count($all_minutes); $i < $for_max; $i+= $minute_interval) + $minutes[] = sprintf('%02d', $all_minutes[$i]); + $selected = intval(floor(strftime('%M', $time) / $minute_interval) * $minute_interval); + $html_result .= '<select name='; + if (null !== $field_array) { + $html_result .= '"' . $field_array . '[' . $prefix . 'Minute]"'; + } else { + $html_result .= '"' . $prefix . 'Minute"'; + } + if (null !== $minute_extra){ + $html_result .= ' ' . $minute_extra; + } + if (null !== $all_extra){ + $html_result .= ' ' . $all_extra; + } + $html_result .= '>'."\n"; + + $html_result .= smarty_function_html_options(array('output' => $minutes, + 'values' => $minutes, + 'selected' => $selected, + 'print_result' => false), + $smarty); + $html_result .= "</select>\n"; + } + + if ($display_seconds) { + $all_seconds = range(0, 59); + for ($i = 0, $for_max = count($all_seconds); $i < $for_max; $i+= $second_interval) + $seconds[] = sprintf('%02d', $all_seconds[$i]); + $selected = intval(floor(strftime('%S', $time) / $second_interval) * $second_interval); + $html_result .= '<select name='; + if (null !== $field_array) { + $html_result .= '"' . $field_array . '[' . $prefix . 'Second]"'; + } else { + $html_result .= '"' . $prefix . 'Second"'; + } + + if (null !== $second_extra){ + $html_result .= ' ' . $second_extra; + } + if (null !== $all_extra){ + $html_result .= ' ' . $all_extra; + } + $html_result .= '>'."\n"; + + $html_result .= smarty_function_html_options(array('output' => $seconds, + 'values' => $seconds, + 'selected' => $selected, + 'print_result' => false), + $smarty); + $html_result .= "</select>\n"; + } + + if ($display_meridian && !$use_24_hours) { + $html_result .= '<select name='; + if (null !== $field_array) { + $html_result .= '"' . $field_array . '[' . $prefix . 'Meridian]"'; + } else { + $html_result .= '"' . $prefix . 'Meridian"'; + } + + if (null !== $meridian_extra){ + $html_result .= ' ' . $meridian_extra; + } + if (null !== $all_extra){ + $html_result .= ' ' . $all_extra; + } + $html_result .= '>'."\n"; + + $html_result .= smarty_function_html_options(array('output' => array('AM', 'PM'), + 'values' => array('am', 'pm'), + 'selected' => strtolower(strftime('%p', $time)), + 'print_result' => false), + $smarty); + $html_result .= "</select>\n"; + } + + return $html_result; +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.html_table.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.html_table.php new file mode 100644 index 00000000..33be01aa --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.html_table.php @@ -0,0 +1,113 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + + +/** + * Smarty {html_table} function plugin + * + * Type: function<br> + * Name: html_table<br> + * Date: Feb 17, 2003<br> + * Purpose: make an html table from an array of data<br> + * Input:<br> + * - loop = array to loop through + * - cols = number of columns + * - rows = number of rows + * - table_attr = table attributes + * - tr_attr = table row attributes (arrays are cycled) + * - td_attr = table cell attributes (arrays are cycled) + * - trailpad = value to pad trailing cells with + * - vdir = vertical direction (default: "down", means top-to-bottom) + * - hdir = horizontal direction (default: "right", means left-to-right) + * - inner = inner loop (default "cols": print $loop line by line, + * $loop will be printed column by column otherwise) + * + * + * Examples: + * <pre> + * {table loop=$data} + * {table loop=$data cols=4 tr_attr='"bgcolor=red"'} + * {table loop=$data cols=4 tr_attr=$colors} + * </pre> + * @author Monte Ohrt <monte@ispi.net> + * @version 1.0 + * @link http://smarty.php.net/manual/en/language.function.html.table.php {html_table} + * (Smarty online manual) + * @param array + * @param Smarty + * @return string + */ +function smarty_function_html_table($params, &$smarty) +{ + $table_attr = 'border="1"'; + $tr_attr = ''; + $td_attr = ''; + $cols = 3; + $rows = 3; + $trailpad = ' '; + $vdir = 'down'; + $hdir = 'right'; + $inner = 'cols'; + + extract($params); + + if (!isset($loop)) { + $smarty->trigger_error("html_table: missing 'loop' parameter"); + return; + } + + $loop_count = count($loop); + if (empty($params['rows'])) { + /* no rows specified */ + $rows = ceil($loop_count/$cols); + } elseif (empty($params['cols'])) { + if (!empty($params['rows'])) { + /* no cols specified, but rows */ + $cols = ceil($loop_count/$rows); + } + } + + $output = "<table $table_attr>\n"; + + for ($r=0; $r<$rows; $r++) { + $output .= "<tr" . smarty_function_html_table_cycle('tr', $tr_attr, $r) . ">\n"; + $rx = ($vdir == 'down') ? $r*$cols : ($rows-1-$r)*$cols; + + for ($c=0; $c<$cols; $c++) { + $x = ($hdir == 'right') ? $rx+$c : $rx+$cols-1-$c; + if ($inner!='cols') { + /* shuffle x to loop over rows*/ + $x = floor($x/$cols) + ($x%$cols)*$rows; + } + + if ($x<$loop_count) { + $output .= "<td" . smarty_function_html_table_cycle('td', $td_attr, $c) . ">" . $loop[$x] . "</td>\n"; + } else { + $output .= "<td" . smarty_function_html_table_cycle('td', $td_attr, $c) . ">$trailpad</td>\n"; + } + } + $output .= "</tr>\n"; + } + $output .= "</table>\n"; + + return $output; +} + +function smarty_function_html_table_cycle($name, $var, $no) { + if(!is_array($var)) { + $ret = $var; + } else { + $ret = $var[$no % count($var)]; + } + + return ($ret) ? ' '.$ret : ''; +} + + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.mailto.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.mailto.php new file mode 100644 index 00000000..f6e3de0c --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.mailto.php @@ -0,0 +1,140 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + + +/** + * Smarty {mailto} function plugin + * + * Type: function<br> + * Name: mailto<br> + * Date: May 21, 2002 + * Purpose: automate mailto address link creation, and optionally + * encode them.<br> + * Input:<br> + * - address = e-mail address + * - text = (optional) text to display, default is address + * - encode = (optional) can be one of: + * * none : no encoding (default) + * * javascript : encode with javascript + * * hex : encode with hexidecimal (no javascript) + * - cc = (optional) address(es) to carbon copy + * - bcc = (optional) address(es) to blind carbon copy + * - subject = (optional) e-mail subject + * - newsgroups = (optional) newsgroup(s) to post to + * - followupto = (optional) address(es) to follow up to + * - extra = (optional) extra tags for the href link + * + * Examples: + * <pre> + * {mailto address="me@domain.com"} + * {mailto address="me@domain.com" encode="javascript"} + * {mailto address="me@domain.com" encode="hex"} + * {mailto address="me@domain.com" subject="Hello to you!"} + * {mailto address="me@domain.com" cc="you@domain.com,they@domain.com"} + * {mailto address="me@domain.com" extra='class="mailto"'} + * </pre> + * @link http://smarty.php.net/manual/en/language.function.mailto.php {mailto} + * (Smarty online manual) + * @version 1.2 + * @author Monte Ohrt <monte@ispi.net> + * @author credits to Jason Sweat (added cc, bcc and subject functionality) + * @param array + * @param Smarty + * @return string + */ +function smarty_function_mailto($params, &$smarty) +{ + $extra = ''; + extract($params); + + if (empty($address)) { + $smarty->trigger_error("mailto: missing 'address' parameter"); + return; + } + + if (empty($text)) { + $text = $address; + } + + // netscape and mozilla do not decode %40 (@) in BCC field (bug?) + // so, don't encode it. + + $mail_parms = array(); + if (!empty($cc)) { + $mail_parms[] = 'cc='.str_replace('%40','@',rawurlencode($cc)); + } + + if (!empty($bcc)) { + $mail_parms[] = 'bcc='.str_replace('%40','@',rawurlencode($bcc)); + } + + if (!empty($subject)) { + $mail_parms[] = 'subject='.rawurlencode($subject); + } + + if (!empty($newsgroups)) { + $mail_parms[] = 'newsgroups='.rawurlencode($newsgroups); + } + + if (!empty($followupto)) { + $mail_parms[] = 'followupto='.str_replace('%40','@',rawurlencode($followupto)); + } + + $mail_parm_vals = ''; + for ($i=0; $i<count($mail_parms); $i++) { + $mail_parm_vals .= (0==$i) ? '?' : '&'; + $mail_parm_vals .= $mail_parms[$i]; + } + $address .= $mail_parm_vals; + + if (empty($encode)) { + $encode = 'none'; + } elseif (!in_array($encode,array('javascript','hex','none')) ) { + $smarty->trigger_error("mailto: 'encode' parameter must be none, javascript or hex"); + return; + } + + if ($encode == 'javascript' ) { + $string = 'document.write(\'<a href="mailto:'.$address.'" '.$extra.'>'.$text.'</a>\');'; + + for ($x=0; $x < strlen($string); $x++) { + $js_encode .= '%' . bin2hex($string[$x]); + } + + return '<script type="text/javascript" language="javascript">eval(unescape(\''.$js_encode.'\'))</script>'; + + } elseif ($encode == 'hex') { + + preg_match('!^(.*)(\?.*)$!',$address,$match); + if(!empty($match[2])) { + $smarty->trigger_error("mailto: hex encoding does not work with extra attributes. Try javascript."); + return; + } + for ($x=0; $x < strlen($address); $x++) { + if(preg_match('!\w!',$address[$x])) { + $address_encode .= '%' . bin2hex($address[$x]); + } else { + $address_encode .= $address[$x]; + } + } + for ($x=0; $x < strlen($text); $x++) { + $text_encode .= '&#x' . bin2hex($text[$x]).';'; + } + + return '<a href="mailto:'.$address_encode.'" '.$extra.'>'.$text_encode.'</a>'; + + } else { + // no encoding + return '<a href="mailto:'.$address.'" '.$extra.'>'.$text.'</a>'; + + } + +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.math.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.math.php new file mode 100644 index 00000000..c080d4df --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.math.php @@ -0,0 +1,82 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + + +/** + * Smarty {math} function plugin + * + * Type: function<br> + * Name: math<br> + * Purpose: handle math computations in template<br> + * @link http://smarty.php.net/manual/en/language.function.math.php {math} + * (Smarty online manual) + * @param array + * @param Smarty + * @return string + */ +function smarty_function_math($params, &$smarty) +{ + // be sure equation parameter is present + if (empty($params['equation'])) { + $smarty->trigger_error("math: missing equation parameter"); + return; + } + + $equation = $params['equation']; + + // make sure parenthesis are balanced + if (substr_count($equation,"(") != substr_count($equation,")")) { + $smarty->trigger_error("math: unbalanced parenthesis"); + return; + } + + // match all vars in equation, make sure all are passed + preg_match_all("!\!(0x)([a-zA-Z][a-zA-Z0-9_]*)!",$equation, $match); + $allowed_funcs = array('int','abs','ceil','cos','exp','floor','log','log10', + 'max','min','pi','pow','rand','round','sin','sqrt','srand','tan'); + foreach($match[2] as $curr_var) { + if (!in_array($curr_var,array_keys($params)) && !in_array($curr_var, $allowed_funcs)) { + $smarty->trigger_error("math: parameter $curr_var not passed as argument"); + return; + } + } + + foreach($params as $key => $val) { + if ($key != "equation" && $key != "format" && $key != "assign") { + // make sure value is not empty + if (strlen($val)==0) { + $smarty->trigger_error("math: parameter $key is empty"); + return; + } + if (!is_numeric($val)) { + $smarty->trigger_error("math: parameter $key: is not numeric"); + return; + } + $equation = preg_replace("/\b$key\b/",$val, $equation); + } + } + + eval("\$smarty_math_result = ".$equation.";"); + + if (empty($params['format'])) { + if (empty($params['assign'])) { + return $smarty_math_result; + } else { + $smarty->assign($params['assign'],$smarty_math_result); + } + } else { + if (empty($params['assign'])){ + printf($params['format'],$smarty_math_result); + } else { + $smarty->assign($params['assign'],sprintf($params['format'],$smarty_math_result)); + } + } +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.popup.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.popup.php new file mode 100644 index 00000000..d1030a7a --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.popup.php @@ -0,0 +1,87 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + + +/** + * Smarty {popup} function plugin + * + * Type: function<br> + * Name: popup<br> + * Purpose: make text pop up in windows via overlib + * @link http://smarty.php.net/manual/en/language.function.popup.php {popup} + * (Smarty online manual) + * @param array + * @param Smarty + * @return string + */ +function smarty_function_popup($params, &$smarty) +{ + extract($params); + + if (empty($text) && !isset($inarray) && empty($function)) { + $smarty->trigger_error("overlib: attribute 'text' or 'inarray' or 'function' required"); + return false; + } + + if (empty($trigger)) { $trigger = "onmouseover"; } + + $retval = $trigger . '="return overlib(\''.preg_replace(array("!'!","![\r\n]!"),array("\'",'\r'),$text).'\''; + if ($sticky) { $retval .= ",STICKY"; } + if (!empty($caption)) { $retval .= ",CAPTION,'".str_replace("'","\'",$caption)."'"; } + if (!empty($fgcolor)) { $retval .= ",FGCOLOR,'$fgcolor'"; } + if (!empty($bgcolor)) { $retval .= ",BGCOLOR,'$bgcolor'"; } + if (!empty($textcolor)) { $retval .= ",TEXTCOLOR,'$textcolor'"; } + if (!empty($capcolor)) { $retval .= ",CAPCOLOR,'$capcolor'"; } + if (!empty($closecolor)) { $retval .= ",CLOSECOLOR,'$closecolor'"; } + if (!empty($textfont)) { $retval .= ",TEXTFONT,'$textfont'"; } + if (!empty($captionfont)) { $retval .= ",CAPTIONFONT,'$captionfont'"; } + if (!empty($closefont)) { $retval .= ",CLOSEFONT,'$closefont'"; } + if (!empty($textsize)) { $retval .= ",TEXTSIZE,$textsize"; } + if (!empty($captionsize)) { $retval .= ",CAPTIONSIZE,$captionsize"; } + if (!empty($closesize)) { $retval .= ",CLOSESIZE,$closesize"; } + if (!empty($width)) { $retval .= ",WIDTH,$width"; } + if (!empty($height)) { $retval .= ",HEIGHT,$height"; } + if (!empty($left)) { $retval .= ",LEFT"; } + if (!empty($right)) { $retval .= ",RIGHT"; } + if (!empty($center)) { $retval .= ",CENTER"; } + if (!empty($above)) { $retval .= ",ABOVE"; } + if (!empty($below)) { $retval .= ",BELOW"; } + if (isset($border)) { $retval .= ",BORDER,$border"; } + if (isset($offsetx)) { $retval .= ",OFFSETX,$offsetx"; } + if (isset($offsety)) { $retval .= ",OFFSETY,$offsety"; } + if (!empty($fgbackground)) { $retval .= ",FGBACKGROUND,'$fgbackground'"; } + if (!empty($bgbackground)) { $retval .= ",BGBACKGROUND,'$bgbackground'"; } + if (!empty($closetext)) { $retval .= ",CLOSETEXT,'".str_replace("'","\'",$closetext)."'"; } + if (!empty($noclose)) { $retval .= ",NOCLOSE"; } + if (!empty($status)) { $retval .= ",STATUS,'".str_replace("'","\'",$status)."'"; } + if (!empty($autostatus)) { $retval .= ",AUTOSTATUS"; } + if (!empty($autostatuscap)) { $retval .= ",AUTOSTATUSCAP"; } + if (isset($inarray)) { $retval .= ",INARRAY,'$inarray'"; } + if (isset($caparray)) { $retval .= ",CAPARRAY,'$caparray'"; } + if (!empty($capicon)) { $retval .= ",CAPICON,'$capicon'"; } + if (!empty($snapx)) { $retval .= ",SNAPX,$snapx"; } + if (!empty($snapy)) { $retval .= ",SNAPY,$snapy"; } + if (isset($fixx)) { $retval .= ",FIXX,$fixx"; } + if (isset($fixy)) { $retval .= ",FIXY,$fixy"; } + if (!empty($background)) { $retval .= ",BACKGROUND,'$background'"; } + if (!empty($padx)) { $retval .= ",PADX,$padx"; } + if (!empty($pady)) { $retval .= ",PADY,$pady"; } + if (!empty($fullhtml)) { $retval .= ",FULLHTML"; } + if (!empty($frame)) { $retval .= ",FRAME,'$frame'"; } + if (isset($timeout)) { $retval .= ",TIMEOUT,$timeout"; } + if (!empty($function)) { $retval .= ",FUNCTION,'$function'"; } + if (isset($delay)) { $retval .= ",DELAY,$delay"; } + if (!empty($hauto)) { $retval .= ",HAUTO"; } + if (!empty($vauto)) { $retval .= ",VAUTO"; } + $retval .= ');" onmouseout="nd();"'; + + return $retval; +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.popup_init.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.popup_init.php new file mode 100644 index 00000000..d9b42bd0 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.popup_init.php @@ -0,0 +1,39 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + + +/** + * Smarty {popup_init} function plugin + * + * Type: function<br> + * Name: popup_init<br> + * Purpose: initialize overlib + * @link http://smarty.php.net/manual/en/language.function.popup.init.php {popup_init} + * (Smarty online manual) + * @param array + * @param Smarty + * @return string + */ +function smarty_function_popup_init($params, &$smarty) +{ + $zindex = 1000; + + if (!empty($params['zindex'])) { + $zindex = $params['zindex']; + } + + if (!empty($params['src'])) { + return '<div id="overDiv" style="position:absolute; visibility:hidden; z-index:'.$zindex.';"></div>' . "\n" + . '<script type="text/javascript" language="JavaScript" src="'.$params['src'].'"></script>' . "\n"; + } else { + $smarty->trigger_error("popup_init: missing src parameter"); + } +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.var_dump.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.var_dump.php new file mode 100644 index 00000000..4278b378 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.var_dump.php @@ -0,0 +1,20 @@ +<?php +/** @package Smarty +* @subpackage plugins */ + +/** + * Smarty plugin + * ------------------------------------------------------------- + * Type: function + * Name: assign + * Purpose: assign a value to a template variable + * ------------------------------------------------------------- + */ +function smarty_function_var_dump($params, &$smarty) +{ + var_dump('<pre>',$params,'</pre>'); +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.capitalize.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.capitalize.php new file mode 100644 index 00000000..41d63eda --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.capitalize.php @@ -0,0 +1,25 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + + +/** + * Smarty capitalize modifier plugin + * + * Type: modifier<br> + * Name: capitalize<br> + * Purpose: capitalize words in the string + * @link http://smarty.php.net/manual/en/language.modifiers.php#LANGUAGE.MODIFIER.CAPITALIZE + * capitalize (Smarty online manual) + * @param string + * @return string + */ +function smarty_modifier_capitalize($string) +{ + return ucwords($string); +} + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.cat.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.cat.php new file mode 100644 index 00000000..8dc73240 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.cat.php @@ -0,0 +1,33 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + + +/** + * Smarty cat modifier plugin + * + * Type: modifier<br> + * Name: cat<br> + * Date: Feb 24, 2003 + * Purpose: catenate a value to a variable + * Input: string to catenate + * Example: {$var|cat:"foo"} + * @link http://smarty.php.net/manual/en/language.modifier.cat.php cat + * (Smarty online manual) + * @author Monte Ohrt <monte@ispi.net> + * @version 1.0 + * @param string + * @param string + * @return string + */ +function smarty_modifier_cat($string, $cat) +{ + return $string . $cat; +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.count_characters.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.count_characters.php new file mode 100644 index 00000000..49ce655e --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.count_characters.php @@ -0,0 +1,31 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + + +/** + * Smarty count_characters modifier plugin + * + * Type: modifier<br> + * Name: count_characteres<br> + * Purpose: count the number of characters in a text + * @link http://smarty.php.net/manual/en/language.modifier.count.characters.php + * count_characters (Smarty online manual) + * @param string + * @param boolean include whitespace in the character count + * @return integer + */ +function smarty_modifier_count_characters($string, $include_spaces = false) +{ + if ($include_spaces) + return(strlen($string)); + + return preg_match_all("/[^\s]/",$string, $match); +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.count_paragraphs.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.count_paragraphs.php new file mode 100644 index 00000000..6a9833c9 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.count_paragraphs.php @@ -0,0 +1,28 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + + +/** + * Smarty count_paragraphs modifier plugin + * + * Type: modifier<br> + * Name: count_paragraphs<br> + * Purpose: count the number of paragraphs in a text + * @link http://smarty.php.net/manual/en/language.modifier.count.paragraphs.php + * count_paragraphs (Smarty online manual) + * @param string + * @return integer + */ +function smarty_modifier_count_paragraphs($string) +{ + // count \r or \n characters + return count(preg_split('/[\r\n]+/', $string)); +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.count_sentences.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.count_sentences.php new file mode 100644 index 00000000..0c210f08 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.count_sentences.php @@ -0,0 +1,28 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + + +/** + * Smarty count_sentences modifier plugin + * + * Type: modifier<br> + * Name: count_sentences + * Purpose: count the number of sentences in a text + * @link http://smarty.php.net/manual/en/language.modifier.count.paragraphs.php + * count_sentences (Smarty online manual) + * @param string + * @return integer + */ +function smarty_modifier_count_sentences($string) +{ + // find periods with a word before but not after. + return preg_match_all('/[^\s]\.(?!\w)/', $string, $match); +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.count_words.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.count_words.php new file mode 100644 index 00000000..42c8a741 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.count_words.php @@ -0,0 +1,32 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + + +/** + * Smarty count_words modifier plugin + * + * Type: modifier<br> + * Name: count_words<br> + * Purpose: count the number of words in a text + * @link http://smarty.php.net/manual/en/language.modifier.count.words.php + * count_words (Smarty online manual) + * @param string + * @return integer + */ +function smarty_modifier_count_words($string) +{ + // split text by ' ',\r,\n,\f,\t + $split_array = preg_split('/\s+/',$string); + // count matches that contain alphanumerics + $word_count = preg_grep('/[a-zA-Z0-9\\x80-\\xff]/', $split_array); + + return count($word_count); +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.date_format.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.date_format.php new file mode 100644 index 00000000..dbe26a55 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.date_format.php @@ -0,0 +1,43 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + +/** + * Include the {@link shared.make_timestamp.php} plugin + */ +require_once $smarty->_get_plugin_filepath('shared','make_timestamp'); +/** + * Smarty date_format modifier plugin + * + * Type: modifier<br> + * Name: date_format<br> + * Purpose: format datestamps via strftime<br> + * Input:<br> + * - string: input date string + * - format: strftime format for output + * - default_date: default date if $string is empty + * @link http://smarty.php.net/manual/en/language.modifier.date.format.php + * date_format (Smarty online manual) + * @param string + * @param string + * @param string + * @return string|void + * @uses smarty_make_timestamp() + */ +function smarty_modifier_date_format($string, $format="%b %e, %Y", $default_date=null) +{ + if($string != '') { + return strftime($format, smarty_make_timestamp($string)); + } elseif (isset($default_date) && $default_date != '') { + return strftime($format, smarty_make_timestamp($default_date)); + } else { + return; + } +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.debug_print_var.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.debug_print_var.php new file mode 100644 index 00000000..35283113 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.debug_print_var.php @@ -0,0 +1,57 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + + +/** + * Smarty debug_print_var modifier plugin + * + * Type: modifier<br> + * Name: debug_print_var<br> + * Purpose: formats variable contents for display in the console + * @link http://smarty.php.net/manual/en/language.modifier.debug.print.var.php + * debug_print_var (Smarty online manual) + * @param array|object + * @param integer + * @param integer + * @return string + */ +function smarty_modifier_debug_print_var($var, $depth = 0, $length = 40) +{ + $_replace = array("\n"=>'<i>\n</i>', "\r"=>'<i>\r</i>', "\t"=>'<i>\t</i>'); + if (is_array($var)) { + $results = "<b>Array (".count($var).")</b>"; + foreach ($var as $curr_key => $curr_val) { + $return = smarty_modifier_debug_print_var($curr_val, $depth+1, $length); + $results .= "<br>".str_repeat(' ', $depth*2)."<b>".strtr($curr_key, $_replace)."</b> => $return"; + } + return $results; + } else if (is_object($var)) { + $object_vars = get_object_vars($var); + $results = "<b>".get_class($var)." Object (".count($object_vars).")</b>"; + foreach ($object_vars as $curr_key => $curr_val) { + $return = smarty_modifier_debug_print_var($curr_val, $depth+1, $length); + $results .= "<br>".str_repeat(' ', $depth*2)."<b>$curr_key</b> => $return"; + } + return $results; + } else { + if (empty($var) && $var != "0") { + return '<i>empty</i>'; + } + if (strlen($var) > $length ) { + $results = substr($var, 0, $length-3).'...'; + } else { + $results = $var; + } + $results = htmlspecialchars($results); + $results = strtr($results, $_replace); + return $results; + } +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.default.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.default.php new file mode 100644 index 00000000..8268e396 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.default.php @@ -0,0 +1,31 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + + +/** + * Smarty default modifier plugin + * + * Type: modifier<br> + * Name: default<br> + * Purpose: designate default value for empty variables + * @link http://smarty.php.net/manual/en/language.modifier.default.php + * default (Smarty online manual) + * @param string + * @param string + * @return string + */ +function smarty_modifier_default($string, $default = '') +{ + if (!isset($string) || $string === '') + return $default; + else + return $string; +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.escape.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.escape.php new file mode 100644 index 00000000..f9d0eed9 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.escape.php @@ -0,0 +1,63 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + + +/** + * Smarty escape modifier plugin + * + * Type: modifier<br> + * Name: escape<br> + * Purpose: Escape the string according to escapement type + * @link http://smarty.php.net/manual/en/language.modifier.escape.php + * escape (Smarty online manual) + * @param string + * @param html|htmlall|url|quotes|hex|hexentity|javascript + * @return string + */ +function smarty_modifier_escape($string, $esc_type = 'html') +{ + switch ($esc_type) { + case 'html': + return htmlspecialchars($string, ENT_QUOTES); + + case 'htmlall': + return htmlentities($string, ENT_QUOTES); + + case 'url': + return urlencode($string); + + case 'quotes': + // escape unescaped single quotes + return preg_replace("%(?<!\\\\)'%", "\\'", $string); + + case 'hex': + // escape every character into hex + $return = ''; + for ($x=0; $x < strlen($string); $x++) { + $return .= '%' . bin2hex($string[$x]); + } + return $return; + + case 'hexentity': + $return = ''; + for ($x=0; $x < strlen($string); $x++) { + $return .= '&#x' . bin2hex($string[$x]) . ';'; + } + return $return; + + case 'javascript': + // escape quotes and backslashes and newlines + return strtr($string, array('\\'=>'\\\\',"'"=>"\\'",'"'=>'\\"',"\r"=>'\\r',"\n"=>'\\n')); + + default: + return $string; + } +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.htmlentities.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.htmlentities.php new file mode 100644 index 00000000..0a106b03 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.htmlentities.php @@ -0,0 +1,18 @@ +<?php +/** @package Smarty +* @subpackage plugins */ + +/** + * Smarty plugin + * ------------------------------------------------------------- + * Type: modifier + * Name: upper + * Purpose: convert string to uppercase + * ------------------------------------------------------------- + */ +function smarty_modifier_htmlentities($string) +{ + return htmlentities($string); +} + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.indent.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.indent.php new file mode 100644 index 00000000..552c3e19 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.indent.php @@ -0,0 +1,27 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + + +/** + * Smarty indent modifier plugin + * + * Type: modifier<br> + * Name: indent<br> + * Purpose: indent lines of text + * @link http://smarty.php.net/manual/en/language.modifier.indent.php + * indent (Smarty online manual) + * @param string + * @param integer + * @param string + * @return string + */ +function smarty_modifier_indent($string,$chars=4,$char=" ") +{ + return preg_replace('!^!m',str_repeat($char,$chars),$string); +} + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.lower.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.lower.php new file mode 100644 index 00000000..ee374233 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.lower.php @@ -0,0 +1,25 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + + +/** + * Smarty lower modifier plugin + * + * Type: modifier<br> + * Name: lower<br> + * Purpose: convert string to lowercase + * @link http://smarty.php.net/manual/en/language.modifier.lower.php + * lower (Smarty online manual) + * @param string + * @return string + */ +function smarty_modifier_lower($string) +{ + return strtolower($string); +} + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.nl2br.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.nl2br.php new file mode 100644 index 00000000..5a9b7445 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.nl2br.php @@ -0,0 +1,35 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + + +/** + * Smarty plugin + * + * Type: modifier<br> + * Name: nl2br<br> + * Date: Feb 26, 2003 + * Purpose: convert \r\n, \r or \n to <<br>> + * Input:<br> + * - contents = contents to replace + * - preceed_test = if true, includes preceeding break tags + * in replacement + * Example: {$text|nl2br} + * @link http://smarty.php.net/manual/en/language.modifier.nl2br.php + * nl2br (Smarty online manual) + * @version 1.0 + * @author Monte Ohrt <monte@ispi.net> + * @param string + * @return string + */ +function smarty_modifier_nl2br($string) +{ + return nl2br($string); +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.rawurlencode.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.rawurlencode.php new file mode 100644 index 00000000..dca02d1b --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.rawurlencode.php @@ -0,0 +1,18 @@ +<?php +/** @package Smarty +* @subpackage plugins */ + +/** + * Smarty plugin + * ------------------------------------------------------------- + * Type: modifier + * Name: rawurlencode + * Purpose: encode string for use in PDFdefaultConverter TOC + * ------------------------------------------------------------- + */ +function smarty_modifier_rawurlencode($string) +{ + return rawurlencode($string); +} + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.regex_replace.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.regex_replace.php new file mode 100644 index 00000000..b9cc865e --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.regex_replace.php @@ -0,0 +1,29 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + + +/** + * Smarty regex_replace modifier plugin + * + * Type: modifier<br> + * Name: regex_replace<br> + * Purpose: regular epxression search/replace + * @link http://smarty.php.net/manual/en/language.modifier.regex.replace.php + * regex_replace (Smarty online manual) + * @param string + * @param string|array + * @param string|array + * @return string + */ +function smarty_modifier_regex_replace($string, $search, $replace) +{ + return preg_replace($search, $replace, $string); +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.replace.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.replace.php new file mode 100644 index 00000000..2a43515f --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.replace.php @@ -0,0 +1,29 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + + +/** + * Smarty replace modifier plugin + * + * Type: modifier<br> + * Name: replace<br> + * Purpose: simple search/replace + * @link http://smarty.php.net/manual/en/language.modifier.replace.php + * replace (Smarty online manual) + * @param string + * @param string + * @param string + * @return string + */ +function smarty_modifier_replace($string, $search, $replace) +{ + return str_replace($search, $replace, $string); +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.spacify.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.spacify.php new file mode 100644 index 00000000..dad057f9 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.spacify.php @@ -0,0 +1,29 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + + +/** + * Smarty spacify modifier plugin + * + * Type: modifier<br> + * Name: spacify<br> + * Purpose: add spaces between characters in a string + * @link http://smarty.php.net/manual/en/language.modifier.spacify.php + * spacify (Smarty online manual) + * @param string + * @param string + * @return string + */ +function smarty_modifier_spacify($string, $spacify_char = ' ') +{ + return implode($spacify_char, + preg_split('//', $string, -1, PREG_SPLIT_NO_EMPTY)); +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.string_format.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.string_format.php new file mode 100644 index 00000000..efd62150 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.string_format.php @@ -0,0 +1,28 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + + +/** + * Smarty string_format modifier plugin + * + * Type: modifier<br> + * Name: string_format<br> + * Purpose: format strings via sprintf + * @link http://smarty.php.net/manual/en/language.modifier.string.format.php + * string_format (Smarty online manual) + * @param string + * @param string + * @return string + */ +function smarty_modifier_string_format($string, $format) +{ + return sprintf($format, $string); +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.strip.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.strip.php new file mode 100644 index 00000000..0db2f8ae --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.strip.php @@ -0,0 +1,33 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + + +/** + * Smarty strip modifier plugin + * + * Type: modifier<br> + * Name: strip<br> + * Purpose: Replace all repeated spaces, newlines, tabs + * with a single space or supplied replacement string.<br> + * Example: {$var|strip} {$var|strip:" "} + * Date: September 25th, 2002 + * @link http://smarty.php.net/manual/en/language.modifier.strip.php + * strip (Smarty online manual) + * @author Monte Ohrt <monte@ispi.net> + * @version 1.0 + * @param string + * @param string + * @return string + */ +function smarty_modifier_strip($text, $replace = ' ') +{ + return preg_replace('!\s+!', $replace, $text); +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.strip_tags.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.strip_tags.php new file mode 100644 index 00000000..45f1ec14 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.strip_tags.php @@ -0,0 +1,31 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + + +/** + * Smarty strip_tags modifier plugin + * + * Type: modifier<br> + * Name: strip_tags<br> + * Purpose: strip html tags from text + * @link http://smarty.php.net/manual/en/language.modifier.strip.tags.php + * strip_tags (Smarty online manual) + * @param string + * @param boolean + * @return string + */ +function smarty_modifier_strip_tags($string, $replace_with_space = true) +{ + if ($replace_with_space) + return preg_replace('!<[^>]*?>!', ' ', $string); + else + return strip_tags($string); +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.truncate.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.truncate.php new file mode 100644 index 00000000..c82b14a3 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.truncate.php @@ -0,0 +1,43 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + + +/** + * Smarty truncate modifier plugin + * + * Type: modifier<br> + * Name: truncate<br> + * Purpose: Truncate a string to a certain length if necessary, + * optionally splitting in the middle of a word, and + * appending the $etc string. + * @link http://smarty.php.net/manual/en/language.modifier.truncate.php + * truncate (Smarty online manual) + * @param string + * @param integer + * @param string + * @param boolean + * @return string + */ +function smarty_modifier_truncate($string, $length = 80, $etc = '...', + $break_words = false) +{ + if ($length == 0) + return ''; + + if (strlen($string) > $length) { + $length -= strlen($etc); + if (!$break_words) + $string = preg_replace('/\s+?(\S+)?$/', '', substr($string, 0, $length+1)); + + return substr($string, 0, $length).$etc; + } else + return $string; +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.upper.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.upper.php new file mode 100644 index 00000000..9d9ef356 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.upper.php @@ -0,0 +1,25 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + + +/** + * Smarty upper modifier plugin + * + * Type: modifier<br> + * Name: upper<br> + * Purpose: convert string to uppercase + * @link http://smarty.php.net/manual/en/language.modifier.upper.php + * upper (Smarty online manual) + * @param string + * @return string + */ +function smarty_modifier_upper($string) +{ + return strtoupper($string); +} + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.wordwrap.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.wordwrap.php new file mode 100644 index 00000000..55b4a1df --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.wordwrap.php @@ -0,0 +1,28 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + + +/** + * Smarty wordwrap modifier plugin + * + * Type: modifier<br> + * Name: wordwrap<br> + * Purpose: wrap a string of text at a given length + * @link http://smarty.php.net/manual/en/language.modifier.wordwrap.php + * wordwrap (Smarty online manual) + * @param string + * @param integer + * @param string + * @param boolean + * @return string + */ +function smarty_modifier_wordwrap($string,$length=80,$break="\n",$cut=false) +{ + return wordwrap($string,$length,$break,$cut); +} + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/outputfilter.trimwhitespace.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/outputfilter.trimwhitespace.php new file mode 100644 index 00000000..e82acc1c --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/outputfilter.trimwhitespace.php @@ -0,0 +1,75 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + +/** + * Smarty trimwhitespace outputfilter plugin + * + * File: outputfilter.trimwhitespace.php<br> + * Type: outputfilter<br> + * Name: trimwhitespace<br> + * Date: Jan 25, 2003<br> + * Purpose: trim leading white space and blank lines from + * template source after it gets interpreted, cleaning + * up code and saving bandwidth. Does not affect + * <<PRE>></PRE> and <SCRIPT></SCRIPT> blocks.<br> + * Install: Drop into the plugin directory, call + * <code>$smarty->load_filter('output','trimwhitespace');</code> + * from application. + * @author Monte Ohrt <monte@ispi.net> + * @author Contributions from Lars Noschinski <lars@usenet.noschinski.de> + * @version 1.3 + * @param string + * @param Smarty + */ + function smarty_outputfilter_trimwhitespace($source, &$smarty) + { + // Pull out the script blocks + preg_match_all("!<script[^>]+>.*?</script>!is", $source, $match); + $_script_blocks = $match[0]; + $source = preg_replace("!<script[^>]+>.*?</script>!is", + '@@@SMARTY:TRIM:SCRIPT@@@', $source); + + // Pull out the pre blocks + preg_match_all("!<pre>.*?</pre>!is", $source, $match); + $_pre_blocks = $match[0]; + $source = preg_replace("!<pre>.*?</pre>!is", + '@@@SMARTY:TRIM:PRE@@@', $source); + + // Pull out the textarea blocks + preg_match_all("!<textarea[^>]+>.*?</textarea>!is", $source, $match); + $_textarea_blocks = $match[0]; + $source = preg_replace("!<textarea[^>]+>.*?</textarea>!is", + '@@@SMARTY:TRIM:TEXTAREA@@@', $source); + + // remove all leading spaces, tabs and carriage returns NOT + // preceeded by a php close tag. + $source = trim(preg_replace('/((?<!\?>)\n)[\s]+/m', '\1', $source)); + + // replace script blocks + smarty_outputfilter_trimwhitespace_replace("@@@SMARTY:TRIM:SCRIPT@@@",$_script_blocks, $source); + + // replace pre blocks + smarty_outputfilter_trimwhitespace_replace("@@@SMARTY:TRIM:PRE@@@",$_pre_blocks, $source); + + // replace textarea blocks + smarty_outputfilter_trimwhitespace_replace("@@@SMARTY:TRIM:TEXTAREA@@@",$_textarea_blocks, $source); + + return $source; + } + +function smarty_outputfilter_trimwhitespace_replace($search_str, $replace, &$subject) { + $_len = strlen($search_str); + $_pos = 0; + for ($_i=0, $_count=count($replace); $_i<$_count; $_i++) + if (($_pos=strpos($subject, $search_str, $_pos))!==false) + $subject = substr_replace($subject, $replace[$_i], $_pos, $_len); + else + break; + +} + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/shared.escape_special_chars.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/shared.escape_special_chars.php new file mode 100644 index 00000000..090ee9cd --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/shared.escape_special_chars.php @@ -0,0 +1,30 @@ +<?php +/** + * Smarty shared plugin + * @package Smarty + * @subpackage plugins + */ + + +/** + * escape_special_chars common function + * + * Function: smarty_function_escape_special_chars<br> + * Purpose: used by other smarty functions to escape + * special chars except for already escaped ones + * @param string + * @return string + */ +function smarty_function_escape_special_chars($string) +{ + if(!is_array($string)) { + $string = preg_replace('!&(#?\w+);!', '%%%SMARTY_START%%%\\1%%%SMARTY_END%%%', $string); + $string = htmlspecialchars($string); + $string = str_replace(array('%%%SMARTY_START%%%','%%%SMARTY_END%%%'), array('&',';'), $string); + } + return $string; +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/shared.make_timestamp.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/shared.make_timestamp.php new file mode 100644 index 00000000..acdd7773 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/shared.make_timestamp.php @@ -0,0 +1,43 @@ +<?php +/** + * Smarty shared plugin + * @package Smarty + * @subpackage plugins + */ + + +/** + * Function: smarty_make_timestamp<br> + * Purpose: used by other smarty functions to make a timestamp + * from a string. + * @param string + * @return string + */ +function smarty_make_timestamp($string) +{ + if(empty($string)) { + $string = "now"; + } + $time = strtotime($string); + if (is_numeric($time) && $time != -1) + return $time; + + // is mysql timestamp format of YYYYMMDDHHMMSS? + if (preg_match('/^\d{14}$/', $string)) { + $time = mktime(substr($string,8,2),substr($string,10,2),substr($string,12,2), + substr($string,4,2),substr($string,6,2),substr($string,0,4)); + + return $time; + } + + // couldn't recognize it, try to return a time + $time = (int) $string; + if ($time > 0) + return $time; + else + return time(); +} + +/* vim: set expandtab: */ + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/misc/smarty_icon.README b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/misc/smarty_icon.README new file mode 100644 index 00000000..a5b4d05c --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/misc/smarty_icon.README @@ -0,0 +1,6 @@ +Feel free to put the smarty icon on your site. +You can cut-and-paste the following code, be sure +to adjust the path to the image: + +<a href="http://smarty.php.net/"> +<img src="smarty_icon.gif" border="0" height="31" width="88" /></a> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/misc/smarty_icon.gif b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/misc/smarty_icon.gif Binary files differnew file mode 100644 index 00000000..5d519699 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/misc/smarty_icon.gif diff --git a/buildscripts/PhpDocumentor/phpDocumentor/TutorialHighlightParser.inc b/buildscripts/PhpDocumentor/phpDocumentor/TutorialHighlightParser.inc new file mode 100644 index 00000000..1300e748 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/TutorialHighlightParser.inc @@ -0,0 +1,620 @@ +<?php +/** + * Source Code Highlighting + * + * The classes in this file are responsible for the dynamic @example, and + * <programlisting role="tutorial"> tags output. Using the + * WordParser, the phpDocumentor_TutorialHighlightParser + * retrieves PHP tokens one by one from the array generated by + * {@link WordParser} source retrieval functions + * and then highlights them individually. + * + * It accomplishes this highlighting through the assistance of methods in + * the output Converter passed to its parse() method, and then returns the + * fully highlighted source as a string + * + * phpDocumentor :: automatic documentation generator + * + * PHP versions 4 and 5 + * + * Copyright (c) 2003-2007 Gregory Beaver + * + * LICENSE: + * + * This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General + * Public License as published by the Free Software Foundation; + * either version 2.1 of the License, or (at your option) any + * later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage Parsers + * @author Gregory Beaver <cellog@php.net> + * @copyright 2003-2007 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version CVS: $Id: TutorialHighlightParser.inc 246148 2007-11-14 01:57:04Z ashnazg $ + * @tutorial tags.example.pkg, tags.filesource.pkg + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @since 1.3.0 + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - PHPCS needs to ignore CVS Id length + */ + +/** + * Highlights source code using {@link parse()} + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage Parsers + * @author Gregory Beaver <cellog@php.net> + * @copyright 2003-2007 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - change classname to PhpDocumentor_* + */ +class phpDocumentor_TutorialHighlightParser extends Parser +{ + /**#@+ @access private */ + /** + * Highlighted source is built up in this string + * @var string + */ + var $_output; + /** + * contents of the current source code line as it is parsed + * @var string + */ + var $_line; + /** + * Used to retrieve highlighted tokens + * @var Converter a descendant of Converter + */ + var $_converter; + /** + * Path to file being highlighted, if this is from a @filesource tag + * @var false|string full path + */ + var $_filesourcepath; + /** + * @var array + */ + var $eventHandlers = array( + TUTORIAL_EVENT_NOEVENTS => 'defaultHandler', + TUTORIAL_EVENT_ITAG => 'defaultHandler', + TUTORIAL_EVENT_ATTRIBUTE => 'attrHandler', + TUTORIAL_EVENT_OPENTAG => 'defaultHandler', + TUTORIAL_EVENT_CLOSETAG => 'defaultHandler', + TUTORIAL_EVENT_ENTITY => 'defaultHandler', + TUTORIAL_EVENT_COMMENT => 'defaultHandler', + TUTORIAL_EVENT_SINGLEQUOTE => 'defaultHandler', + TUTORIAL_EVENT_DOUBLEQUOTE => 'defaultHandler', + ); + /**#@-*/ + + /** + * advances output to a new line + * + * @return void + * @uses Converter::SourceLine() encloses {@link $_line} in a + * converter-specific format + */ + function newLineNum() + { + $this->_line .= $this->_converter->flushHighlightCache(); + $this->_output .= $this->_converter->SourceLine($this->_pv_curline + 1, + $this->_line, $this->_path); + $this->_line = ''; + } + + /** + * Start the parsing at a certain line number + * + * @param int $num the line number + * + * @return void + */ + function setLineNum($num) + { + $this->_wp->linenum = $num; + } + + /** + * Parse a new file + * + * The parse() method is a do...while() loop that retrieves tokens one by + * one from the {@link $_event_stack}, and uses the token event array set up + * by the class constructor to call event handlers. + * + * The event handlers each process the tokens passed to them, and use the + * {@link _addoutput()} method to append the processed tokens to the + * {@link $_line} variable. The word parser calls {@link newLineNum()} + * every time a line is reached. + * + * In addition, the event handlers use special linking functions + * {@link _link()} and its cousins (_classlink(), etc.) to create in-code + * hyperlinks to the documentation for source code elements that are in the + * source code. + * + * @param string $parse_data blah + * @param Converter &$converter blah + * @param false|string $filesourcepath full path to file with @filesource tag, + * if this is a @filesource parse + * @param false|integer $linenum starting line number from + * {@}source linenum} + * + * @staticvar integer used for recursion limiting if a handler for + * an event is not found + * @return bool + * @uses setupStates() initialize parser state variables + * @uses configWordParser() pass $parse_data to prepare retrieval of tokens + * @todo CS cleanup - unable to get function signature below 85char wide + */ + function parse($parse_data, &$converter, $filesourcepath = false, $linenum = false) + { + static $endrecur = 0; + $parse_data = + str_replace(array("\r\n", "\t"), array("\n", ' '), $parse_data); + $this->_converter = &$converter; + $converter->startHighlight(); + $this->_path = $filesourcepath; + $this->setupStates($parse_data); + + $this->configWordParser(TUTORIAL_EVENT_NOEVENTS); + if ($linenum !== false) { + $this->setLineNum($linenum); + } + // initialize variables so E_ALL error_reporting doesn't complain + $pevent = 0; + $word = 0; + + do { + $lpevent = $pevent; + $pevent = $this->_event_stack->getEvent(); + if ($lpevent != $pevent) { + $this->_last_pevent = $lpevent; + $this->configWordParser($pevent); + } + $this->_wp->setWhitespace(true); + + $dbg_linenum = $this->_wp->linenum; + $dbg_pos = $this->_wp->getPos(); + $this->_pv_last_word = $word; + $this->_pv_curline = $this->_wp->linenum; + $word = $this->_wp->getWord(); + + if (PHPDOCUMENTOR_DEBUG == true) { + echo "LAST: "; + echo "|" . $this->_pv_last_word; + echo "|\n"; + echo "PEVENT: " . $this->getParserEventName($pevent) . "\n"; + echo "LASTPEVENT: " . + $this->getParserEventName($this->_last_pevent) . "\n"; + //DEBUG echo "LINE: " . $this->_line . "\n"; + //DEBUG echo "OUTPUT: " . $this->_output . "\n"; + echo $dbg_linenum.'-'.$dbg_pos . ": "; + echo '|'.htmlspecialchars($word); + echo "|\n"; + echo "-------------------\n\n\n"; + flush(); + } + if (isset($this->eventHandlers[$pevent])) { + $handle = $this->eventHandlers[$pevent]; + $this->$handle($word, $pevent); + } else { + debug('WARNING: possible error, no handler for event number ' + . $pevent); + if ($endrecur++ == 25) { + die("FATAL ERROR, recursion limit reached"); + } + } + } while (!($word === false)); + if (strlen($this->_line)) { + $this->newLineNum(); + } + return $this->_output; + } + + /**#@+ + * Event Handlers + * + * All Event Handlers use {@link checkEventPush()} and + * {@link checkEventPop()} to set up the event stack and parser state. + * + * @param string|array $word token value + * @param integer $pevent parser event from {@link Parser.inc} + * + * @return void + * @access private + */ + /** + * Most tokens only need highlighting, and this method handles them + * + * @todo CS cleanup - PHPCS needs to recognize docblock template tags + */ + function defaultHandler($word, $pevent) + { + if ($word == "\n") { + $this->newLineNum(); + return; + } + if ($this->checkEventPush($word, $pevent)) { + $this->_wp->backupPos($word); + return; + } + $this->_addoutput($word); + $this->checkEventPop($word, $pevent); + } + + /** + * Most tokens only need highlighting, and this method handles them + * + * @todo CS cleanup - PHPCS needs to recognize docblock template tags + */ + function attrHandler($word, $pevent) + { + if ($word == "\n") { + $this->newLineNum(); + return; + } + if ($e = $this->checkEventPush($word, $pevent)) { + if ($e == TUTORIAL_EVENT_SINGLEQUOTE + || $e == TUTORIAL_EVENT_DOUBLEQUOTE + ) { + $this->_addoutput($word); + } + return; + } + if ($this->checkEventPop($word, $pevent)) { + $this->_wp->backupPos($word); + return; + } + $this->_addoutput($word); + } + /**#@-*/ + + /**#@+ + * Output Methods + * @access private + */ + /** + * This method adds output to {@link $_line} + * + * If a string with variables like "$test this" is present, then special + * handling is used to allow processing of the variable in context. + * + * @param string $word the output to add + * @param bool $preformatted whether or not its preformatted + * + * @return void + * @see _flush_save() + */ + function _addoutput($word, $preformatted = false) + { + $type = array( + TUTORIAL_EVENT_ATTRIBUTE => 'attribute', + TUTORIAL_EVENT_SINGLEQUOTE => 'attributevalue', + TUTORIAL_EVENT_DOUBLEQUOTE => 'attributevalue', + TUTORIAL_EVENT_CLOSETAG => 'closetag', + TUTORIAL_EVENT_ENTITY => 'entity', + TUTORIAL_EVENT_ITAG => 'itag', + TUTORIAL_EVENT_OPENTAG => 'opentag', + TUTORIAL_EVENT_COMMENT => 'comment', + ); + + $a = $this->_event_stack->getEvent(); + if (in_array($a, array_keys($type))) { + $this->_line .= + $this->_converter->highlightTutorialSource($type[$a], $word); + } else { + $this->_line .= $this->_converter->flushHighlightCache(); + $this->_line .= $this->_converter->postProcess($word); + } + } + /**#@-*/ + + /** + * Tell the parser's WordParser {@link $wp} to set up tokens to parse words by. + * + * Tokens are word separators. In English, a space or punctuation are + * examples of tokens. In PHP, a token can be a ;, a parenthesis, or + * even the word "function" + * + * @param integer $e an event number + * + * @return void + * @see WordParser + */ + function configWordParser($e) + { + $this->_wp->setSeperator($this->tokens[($e + 100)]); + } + + /**#@+ + * @param string|array $word token value + * @param integer $pevent parser event from {@link Parser.inc} + * + * @return mixed returns false, or the event number + */ + /** + * This function checks whether parameter $word is a token + * for pushing a new event onto the Event Stack. + * + * @todo CS cleanup - PHPCS needs to recognize docblock template tags + */ + function checkEventPush($word, $pevent) + { + $e = false; + if (isset($this->pushEvent[$pevent])) { + if (isset($this->pushEvent[$pevent][strtolower($word)])) { + $e = $this->pushEvent[$pevent][strtolower($word)]; + } + } + if ($e) { + $this->_event_stack->pushEvent($e); + return $e; + } else { + return false; + } + } + + /** + * This function checks whether parameter $word is a token + * for popping the current event off of the Event Stack. + * + * @todo CS cleanup - PHPCS needs to recognize docblock template tags + */ + function checkEventPop($word, $pevent) + { + if (!isset($this->popEvent[$pevent])) { + return false; + } + if (in_array(strtolower($word), $this->popEvent[$pevent])) { + return $this->_event_stack->popEvent(); + } else { + return false; + } + } + /**#@-*/ + + /** + * Initialize all parser state variables + * + * @param bool|string $parsedata true if we are highlighting an inline {@}source} + * tag's output, or the name of class we are going + * to start from + * + * @return void + * @uses $_wp sets to a new {@link phpDocumentor_HighlightWordParser} + */ + function setupStates($parsedata) + { + $this->_output = ''; + $this->_line = ''; + + unset($this->_wp); + $this->_wp = new WordParser; + $this->_wp->setup($parsedata); + + $this->_event_stack = new EventStack; + $this->_event_stack->popEvent(); + $this->_event_stack->pushEvent(TUTORIAL_EVENT_NOEVENTS); + + $this->_pv_linenum = null; + $this->_pv_next_word = false; + } + + /** + * Initialize the {@link $tokenpushEvent, $wordpushEvent} arrays + */ + function phpDocumentor_TutorialHighlightParser() + { + $this->allowableInlineTags = + $GLOBALS['_phpDocumentor_inline_tutorial_tags_allowed'] + ; + $this->inlineTagHandlers = + array('*' => 'handleDefaultInlineTag') + ; + $this->tokens[STATE_TUTORIAL_NOEVENTS] = + array("\n",'{@', '<!--', '</', '<', '&'); + $this->tokens[STATE_TUTORIAL_ITAG] = array("\n","}"); + $this->tokens[STATE_TUTORIAL_OPENTAG] = array("\n","\t"," ", '>', '/>'); + $this->tokens[STATE_TUTORIAL_CLOSETAG] = array("\n",'>'); + $this->tokens[STATE_TUTORIAL_COMMENT] = array("\n",'-->'); + $this->tokens[STATE_TUTORIAL_ENTITY] = array("\n",';'); + $this->tokens[STATE_TUTORIAL_ATTRIBUTE] = array("\n",'"',"'",'>','/>'); + $this->tokens[STATE_TUTORIAL_DOUBLEQUOTE] = array("\n",'"','&','{@'); + $this->tokens[STATE_TUTORIAL_SINGLEQUOTE] = array("\n","'",'&','{@'); + /**************************************************************/ + + $this->pushEvent[TUTORIAL_EVENT_NOEVENTS] = array( + "{@" => TUTORIAL_EVENT_ITAG, + '<' => TUTORIAL_EVENT_OPENTAG, + '</' => TUTORIAL_EVENT_CLOSETAG, + '&' => TUTORIAL_EVENT_ENTITY, + '<!--' => TUTORIAL_EVENT_COMMENT, + ); + /**************************************************************/ + + $this->pushEvent[TUTORIAL_EVENT_OPENTAG] = array( + " " => TUTORIAL_EVENT_ATTRIBUTE, + "\n" => TUTORIAL_EVENT_ATTRIBUTE, + ); + /**************************************************************/ + + $this->pushEvent[TUTORIAL_EVENT_ATTRIBUTE] = array( + "'" => TUTORIAL_EVENT_SINGLEQUOTE, + '"' => TUTORIAL_EVENT_DOUBLEQUOTE, + ); + /**************************************************************/ + + $this->pushEvent[TUTORIAL_EVENT_SINGLEQUOTE] = array( + '&' => TUTORIAL_EVENT_ENTITY, + '{@' => TUTORIAL_EVENT_ITAG, + ); + /**************************************************************/ + + $this->pushEvent[TUTORIAL_EVENT_DOUBLEQUOTE] = array( + '&' => TUTORIAL_EVENT_ENTITY, + '{@' => TUTORIAL_EVENT_ITAG, + ); + /**************************************************************/ + + $this->popEvent[TUTORIAL_EVENT_ENTITY] = array(';'); + /**************************************************************/ + + $this->popEvent[TUTORIAL_EVENT_SINGLEQUOTE] = array("'"); + /**************************************************************/ + + $this->popEvent[TUTORIAL_EVENT_DOUBLEQUOTE] = array('"'); + /**************************************************************/ + + $this->popEvent[TUTORIAL_EVENT_OPENTAG] = array('>', '/>'); + /**************************************************************/ + + $this->popEvent[TUTORIAL_EVENT_CLOSETAG] = array('>'); + /**************************************************************/ + + $this->popEvent[TUTORIAL_EVENT_COMMENT] = array('-->'); + /**************************************************************/ + + $this->popEvent[TUTORIAL_EVENT_ATTRIBUTE] = array('>','/>'); + /**************************************************************/ + + $this->popEvent[TUTORIAL_EVENT_ITAG] = array('}'); + /**************************************************************/ + } + + /** + * searches for a parser event name based on its number + * + * @param int $value the event number + * + * @return string|int the event name, or the original value + */ + function getParserEventName ($value) + { + $lookup = array( + TUTORIAL_EVENT_NOEVENTS => "TUTORIAL_EVENT_NOEVENTS", + TUTORIAL_EVENT_ITAG => "TUTORIAL_EVENT_ITAG", + TUTORIAL_EVENT_OPENTAG => "TUTORIAL_EVENT_OPENTAG", + TUTORIAL_EVENT_ATTRIBUTE => "TUTORIAL_EVENT_ATTRIBUTE", + TUTORIAL_EVENT_CLOSETAG => "TUTORIAL_EVENT_CLOSETAG", + TUTORIAL_EVENT_ENTITY => "TUTORIAL_EVENT_ENTITY", + TUTORIAL_EVENT_COMMENT => "TUTORIAL_EVENT_COMMENT", + TUTORIAL_EVENT_SINGLEQUOTE => "TUTORIAL_EVENT_SINGLEQUOTE", + TUTORIAL_EVENT_DOUBLEQUOTE => "TUTORIAL_EVENT_DOUBLEQUOTE", + ); + if (isset($lookup[$value])) { + return $lookup[$value]; + } else { + return $value; + } + } +} + + +/** + * starting state + */ +define("TUTORIAL_EVENT_NOEVENTS", 1); + +/** + * currently in starting state + */ +define("STATE_TUTORIAL_NOEVENTS", 101); + +/** + * used when an {@}inline tag} is found + */ +define("TUTORIAL_EVENT_ITAG", 2); + +/** + * currently parsing an {@}inline tag} + */ +define("STATE_TUTORIAL_ITAG", 102); + +/** + * used when an open <tag> is found + */ +define("TUTORIAL_EVENT_OPENTAG", 3); + +/** + * currently parsing an open <tag> + */ +define("STATE_TUTORIAL_OPENTAG", 103); + +/** + * used when a <tag attr="attribute"> is found + */ +define("TUTORIAL_EVENT_ATTRIBUTE", 4); + +/** + * currently parsing an open <tag> + */ +define("STATE_TUTORIAL_ATTRIBUTE", 104); + +/** + * used when a close </tag> is found + */ +define("TUTORIAL_EVENT_CLOSETAG", 5); + +/** + * currently parsing a close </tag> + */ +define("STATE_TUTORIAL_CLOSETAG", 105); + +/** + * used when an &entity; is found + */ +define("TUTORIAL_EVENT_ENTITY", 6); + +/** + * currently parsing an &entity; + */ +define("STATE_TUTORIAL_ENTITY", 106); + +/** + * used when a <!-- comment --> is found + */ +define("TUTORIAL_EVENT_COMMENT", 7); + +/** + * currently parsing a <!-- comment --> + */ +define("STATE_TUTORIAL_COMMENT", 107); + +/** + * used when a <!-- comment --> is found + */ +define("TUTORIAL_EVENT_SINGLEQUOTE", 8); + +/** + * currently parsing a <!-- comment --> + */ +define("STATE_TUTORIAL_SINGLEQUOTE", 108); + +/** + * used when a <!-- comment --> is found + */ +define("TUTORIAL_EVENT_DOUBLEQUOTE", 9); + +/** + * currently parsing a <!-- comment --> + */ +define("STATE_TUTORIAL_DOUBLEQUOTE", 109); + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/WordParser.inc b/buildscripts/PhpDocumentor/phpDocumentor/WordParser.inc new file mode 100755 index 00000000..a755d24a --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/WordParser.inc @@ -0,0 +1,365 @@ +<?php +/** + * a generic lexer + * + * phpDocumentor :: automatic documentation generator + * + * PHP versions 4 and 5 + * + * Copyright (c) 2000-2007 Joshua Eichorn + * + * LICENSE: + * + * This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General + * Public License as published by the Free Software Foundation; + * either version 2.1 of the License, or (at your option) any + * later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage WordParsers + * @author Joshua Eichorn <jeichorn@phpdoc.org> + * @copyright 2000-2007 Joshua Eichorn + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version CVS: $Id: WordParser.inc 246145 2007-11-14 01:37:03Z ashnazg $ + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @since 0.1 + * @todo CS cleanup - change package to PhpDocumentor + */ + +/** + * Retrieves tokens from source code for use by the Parser + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage WordParsers + * @author Joshua Eichorn <jeichorn@phpdoc.org> + * @copyright 2000-2007 Joshua Eichorn + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @see Parser + * @todo CS cleanup - change package to PhpDocumentor + */ +class WordParser +{ + /* + New lines around the world + Macintosh: \r + Unix : \n + Windows : \r\n + */ + + /**#@+ + * @access private + */ + /** + * List of text that separates tokens, used to retrieve tokens + * @var array + */ + var $wordseperators = array(); + + /** + * Position within input of the cursor pointing to the next text to be + * retrieved as a token + * @var integer + */ + var $pos = 0; + + /** + * Size of the input source code + * @var integer + */ + var $size; + + /** + * Source code + * @var string + */ + var $data; + + var $cache; + /** + * Current line number + * @var integer + */ + var $linenum = 0; + /** + * Position the cursor was at the last time line numbers were counted, used + * to guarantee that line numbers are incremented + * @var integer + */ + var $linenumpos = 0; + + /** + * Used for {@}source} tag, contains currently parsed function source + * @var string + */ + var $source = ''; + /** + * flag, determines whether tokens are added to {@link $source} + * @var boolean + */ + var $getsource = false; + + /** + * If true, then white space is returned as a part of tokens, otherwise + * tokens are trimmed + * @var boolean + */ + var $returnWhiteSpace = false; + /**#@-*/ + + /** + * Initialize the WordParser + * + * @param string &$input source code + * + * @return void + */ + function setup(&$input) + { + $this->size = strlen($input); + $this->data = & $input; + $this->pos = 0; + $this->linenum = 0; + $this->linenumpos = 0; + $this->cache = array(); + //$this->run = 0; + //$this->word = WORD_PARSER_RET_WORD; + } + + /** + * Retrieve source code for the last function/method + * + * @return string + */ + function getSource() + { + $source = $this->source; + $this->source = ''; + $this->getsource = false; + return $source; + } + + /** + * Used to tell the WordParser to start retrieving source code + * + * @param string $word source code + * + * @return void + * @access private + */ + function retrievesource($word = '') + { + $this->source = $word; + $this->getsource = true; + } + + /** + * Retrieve a token from the token list + * + * The {@link Parser} class relies upon this method to retrieve the next + * token. The {@link $wordseperators} array is a collection of strings + * that delineate tokens for the current parser state. $wordseperators + * is set by the parser with a call to {@link Parser::configWordParser()} + * every time a new parser state is reached. + * + * For example, while parsing the source code for a class, the word + * <code>var</code> is a token, and <code>global</code> is not, + * but inside a function, the reverse is true. The parser state + * {@link PARSER_STATE_CLASS} has a token list that includes whitespace, + * code delimiters like ; and {}, and comment/DocBlock indicators + * + * If the whitespace option has been turned off using + * {@link setWhitespace()}, then no whitespace is returned with tokens + * + * {@internal + * In the first segment of the function, the code attempts to find the next + * token. A cache is used to speed repetitious tasks. The $tpos variable + * is used to hold the position of the next token. $npos is used to + * hold the end of the token, and so $npos - $tpos will give the length + * of the token. This is used to allow tokens that contain whitespace, + * should that option be desired. + * + * {@link $data} is of course the string containing the PHP code to be + * parsed, and {@link $pos} is the cursor, or current location within the + * parsed data. + * }} + * + * @return string|false the next token, an empty string if there are no + * token separators in the $wordseperators array, + * or false if the end of input has been reached + */ + function getWord() + { + //$st = $this->mtime(); + if ($this->size == $this->pos) { + return false; + } + + // assume, for starting, that the token is from $this->pos to the end + $npos = $this->size; + if (is_array($this->wordseperators)) { + //$this->wordseperators = array(); + foreach ($this->wordseperators as $sep) { + // cache is set if this separator has been tested + if (isset($this->cache[$sep])) { + $tpos = $this->cache[$sep]; + } else { + $tpos = false; + } + if ($tpos < $this->pos || !is_int($tpos)) { + // find the position of the next token separator + $tpos = strpos($this->data, $sep, $this->pos); + } + + // was a token separator found + // that is closer to the current location? + if ( ($tpos < $npos) && !($tpos === false)) { + //echo trim($sep) . "=$tpos\n"; + // set the length of the token + // to be from $this->pos to + // the next token separator + $npos = $tpos; + $seplen = strlen($sep); + } else if (!($tpos === false)) { + $this->cache[$sep] = $tpos; + } + } + } else { + // no token separators, tell the parser to choose a new state + return ""; + } + + $len = $npos - $this->pos; + if ($len == 0) { + $len = $seplen; + } + + //$st3 = $this->mtime(); + $word = substr($this->data, $this->pos, $len); + + // Change random other os newlines to the unix one + if ($word == "\r" || $word == "\r\n") { + $word = "\n"; + } + + if ($this->linenumpos <= $this->pos) { + $this->linenumpos = $this->pos + $len; + $this->linenum += count(explode("\n", $word)) - 1; + } + + if ($this->getsource) { + $this->source .= $word; + } + $this->pos = $this->pos + $len; + //$this->word = WORD_PARSER_RET_SEP; + + // Things like // commenats rely on the newline + // to find their end so im going to have to return them + // never return worthless white space /t ' ' + if ($this->returnWhiteSpace == false) { + if (strlen(trim($word)) == 0 && $word != "\n") { + $word = $this->getWord(); + } + } + //$this->time3 = $this->time3 + ($this->mtime() - $st3); + //$this->time = $this->time + ($this->mtime() - $st); + return $word; + } + + + /** + * Returns the current pointer position, or 1 character after the end of the word + * + * @return int the position + */ + function getPos() + { + return $this->pos; + } + + /** + * Unused + * + * {@source} + * + * @param integer $start starting position + * @param integer $len length of block to retrieve + * + * @return string the requested block of characters + */ + function getBlock($start, $len) + { + return substr($this->data, $start, $len); + } + + /** + * Sets the list of possible separator tokens + * + * @param array &$seps array of strings that separate tokens + * + * @return void + * @uses $wordseperators + */ + function setSeperator(&$seps) + { + $this->wordseperators = &$seps; + } + + /** + * Set the internal cursor within the source code + * + * @param integer $pos the position + * + * @return void + */ + function setPos($pos) + { + $this->pos = $pos; + } + + /** + * Backup to the previous token so that it can be retrieved again in a new + * context. + * + * Occasionally, a word will be passed to an event handler that should be + * handled by another event handler. This method allows that to happen. + * + * @param string $word token to back up to + * + * @return void + */ + function backupPos($word) + { + if ($this->getsource) $this->source = + substr($this->source, 0, strlen($this->source) - 1); + $this->pos = $this->pos - strlen($word); + } + + /** + * set parser to return or strip whitespace + * + * @param boolean $val flag to return or strip whitespace + * + * @return void + */ + function setWhitespace($val = false) + { + $this->returnWhiteSpace = $val; + } +} +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/XMLpackagePageParser.inc b/buildscripts/PhpDocumentor/phpDocumentor/XMLpackagePageParser.inc new file mode 100755 index 00000000..95740f2a --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/XMLpackagePageParser.inc @@ -0,0 +1,644 @@ +<?php +/** + * Parser for XML DocBook-based phpDocumentor tutorials + * + * phpDocumentor :: automatic documentation generator + * + * PHP versions 4 and 5 + * + * Copyright (c) 2002-2007 Gregory Beaver + * + * LICENSE: + * + * This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General + * Public License as published by the Free Software Foundation; + * either version 2.1 of the License, or (at your option) any + * later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage Parsers + * @author Gregory Beaver <cellog@php.net> + * @copyright 2002-2007 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version CVS: $Id: XMLpackagePageParser.inc 246143 2007-11-14 01:31:24Z ashnazg $ + * @tutorial tutorials.pkg + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @since 1.2 + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - PHPCS needs to ignore CVS Id length + */ +/** + * when <programlisting> is found + */ +define('PHPDOCUMENTOR_PDP_EVENT_PROGRAMLISTING', 600); +/** + * when <programlisting> is found + */ +define('PHPDOCUMENTOR_PDP_STATE_PROGRAMLISTING', 700); +/** + * when a DocBook <tag> is found + */ +define('PHPDOCUMENTOR_PDP_EVENT_TAG', 601); +/** + * when a DocBook <tag> is found + */ +define('PHPDOCUMENTOR_PDP_STATE_TAG', 701); +/** + * when <![CDATA[ ]]> is found + */ +define('PHPDOCUMENTOR_PDP_EVENT_CDATA', 602); +/** + * when <![CDATA[ ]]> is found + */ +define('PHPDOCUMENTOR_PDP_STATE_CDATA', 702); +/** + * when tag attributes name="value" are found + */ +define('PHPDOCUMENTOR_PDP_EVENT_ATTRIBUTES', 603); +/** + * when tag attributes name="value" are found + */ +define('PHPDOCUMENTOR_PDP_STATE_ATTRIBUTES', 703); +/** + * when tag attributes name="value" are found + */ +define('PHPDOCUMENTOR_PDP_EVENT_ENTITY', 604); +/** + * when tag attributes name="value" are found + */ +define('PHPDOCUMENTOR_PDP_STATE_ENTITY', 704); + +/** + * Used to parse XML DocBook-based tutorials + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage Parsers + * @author Gregory Beaver <cellog@php.net> + * @copyright 2002-2007 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @since 1.2 + * @todo CS cleanup - change package to PhpDocumentor + */ +class XMLPackagePageParser extends Parser +{ + /** + * @var array + */ + var $eventHandlers = array( + PHPDOCUMENTOR_PDP_EVENT_TAG => 'handleTag', + PHPDOCUMENTOR_PDP_EVENT_ATTRIBUTES => 'handleAttributes', + PHPDOCUMENTOR_PDP_EVENT_CDATA => 'handleCData', + PARSER_EVENT_NOEVENTS => 'defaultHandler', + PARSER_EVENT_COMMENTBLOCK => 'ignoreHandler', + PARSER_EVENT_OUTPHP => 'ignoreHandler', + PARSER_EVENT_QUOTE => 'handleQuote', + PHPDOCUMENTOR_PDP_EVENT_ENTITY => 'handleEntity', + ); + + /** + * @var array + */ + var $pars = array(); + + var $refsect1id = false; + var $refsect2id = false; + var $refsect3id = false; + /** + * @var array the tag stack + */ + var $context; + /**#@+ @access private */ + var $_gettoc = false; + var $_toc = array(); + var $_cursection = 0; + /**#@-*/ + /** + * Set up the wordparser + * + * {@source} + * + * @uses ObjectWordParser + */ + function XMLPackagePageParser() + { + $this->wp = new ObjectWordParser(true); + } + /** + * Parse a new file + * + * @param string $parse_data the parse data + * @param array $tutorial for format, see {@link Io::getTutorials()} + * + * @return bool + * @staticvar integer used for recursion limiting + * if a handler for an event is not found + * @uses parserTutorial using {@link Publisher::PublishEvent()}, a new tutorial + * is created from the file parsed, and passed to the + * Intermediate Parser + */ + function parse ($parse_data, $tutorial) + { + $tempparse = new ppageParser; + $parse_data = $tempparse-> + parse($parse_data, true, $tutorial['package'], + $tutorial['subpackage'], basename($tutorial['path']), + $tutorial['category'], $tutorial['path']); + unset($tempparse); + static $endrecur = 0; + if (!is_array($parse_data) || count($parse_data) == 0) { + return false; + } + $this->setupStates(); + + // initialize variables so E_ALL error_reporting doesn't complain + $pevent = 0; + $word = 0; + $this->p_vars['start'] = true; + $this->p_vars['event_stack'] = new EventStack; + + $this->wp->setup($parse_data, false); + $this->wp->setWhitespace(true); + $this->context = array(); + if (isset($this->curtag)) { + unset($this->curtag); + } + + do { + $lpevent = $pevent; + $pevent = $this->p_vars['event_stack']->getEvent(); + if ($lpevent != $pevent) { + $this->p_vars['last_pevent'] = $lpevent; + } + + if ($this->p_vars['last_pevent'] != $pevent) { + // its a new event so the word parser needs to be reconfigured + $this->configWordParser($pevent); + } + + + $this->p_vars['last_word'] = $word; + $word = $this->wp->getWord(); + + if (PHPDOCUMENTOR_DEBUG == true) { + echo "----------------\n"; + echo "LAST: |" . $this->p_vars['last_word'] . "|\n"; + echo "INDEX: ".$this->p_vars['curpar']."\n"; + echo "PEVENT: " . $this->getParserEventName($pevent) . "\n"; + echo "LASTPEVENT: " . + $this->getParserEventName($this->p_vars['last_pevent']) . "\n"; + echo $this->wp->getPos() . " WORD: |$word|\n\n"; + echo '"'.$this->p_vars['quote_data']."\"\n"; + } + if (isset($this->eventHandlers[$pevent])) { + $handle = $this->eventHandlers[$pevent]; + if ($word !== false) { + $this->$handle($word, $pevent); + } + } else { + debug('WARNING: possible error, ' . + 'no XMLPackagePageParser handler for event number '. $pevent); + if ($endrecur++ == 25) { + die("FATAL ERROR, recursion limit reached"); + } + } + $this->p_vars['start'] = false; + } while (!($word === false)); + if (count($this->_toc) && isset($this->p_vars['toc'])) { + $a = $this->curtag->getTOC($this->p_vars['toc']); + $a->setTOC($this->_toc); + $a->setPath($tutorial['path']); + $this->curtag->setTOC($this->p_vars['toc'], $a); + } + $this->PublishEvent(PHPDOCUMENTOR_EVENT_TUTORIAL, + new parserTutorial($this->curtag, $tutorial)); + return $this->curtag; + } + + /**#@+ + * @param string|parserInlineTag $word token + * @param integer $token parser event + * @return void + * @access private + * @todo CS cleanup - PHPCS needs to recognize docblock template tags + */ + /** + * handler for default events + */ + function defaultHandler($word, $pevent) + { + if (is_string($word) && $this->checkEventPush($word, $pevent)) { + return; + } + } + + /** + * handler for ignore events + */ + function ignoreHandler($word, $pevent) + { + $this->checkEventPop($word, $pevent); + } + + /** + * handler for QUOTE + * + * this handler recognizes strings defined with + * double quotation marks (") and handles them correctly + * in any place that they legally appear in php code + */ + function handleQuote($word, $pevent) + { + if ($this->p_flags['reset_quote_data'] === true) { + $this->p_flags['reset_quote_data'] = false; + $this->p_vars['quote_data'] = ""; + } + if (!is_object($word)) { + $this->checkEventPush($word, $pevent); + } + if (is_object($word)) { + $this->p_vars['quote_data'] = $word; + } else { + if ($word != "\"") { + if (!is_object($this->p_vars['quote_data'])) { + $this->p_vars['quote_data'] .= $word; + } + } + if ($word == '>') { + if (is_object($this->p_vars['quote_data'])) { + $this->p_vars['quote_data'] = + '{@id '.$this->p_vars['quote_data']->id.'}'; + } + addErrorDie(PDERROR_UNTERMINATED_ATTRIB, $this->curtag->name, + $this->p_vars['attrname'], $this->p_vars['quote_data']); + } + if ($this->checkEventPop($word, $pevent)) { + $this->p_flags['reset_quote_data'] = true; + } + } + } + + /** + * Handles all XML DocBook tags + * + * @todo replace commented-out debug lines with debug() func + */ + function handleTag($word, $pevent) + { + if (isset($this->curtag) && $this->curtag->hasTitle() && + $this->_gettoc && $this->_gettoc->name == $this->curtag->name + ) { + if (isset($this->_toc[$this->_cursection])) { + $this->_toc[$this->_cursection]['title'] = $this->curtag->_title; + $this->_cursection++; + } + $this->_gettoc = false; + } + if ($this->p_vars['last_word'] == '<') { + // get tag name + $this->p_flags['begin_tag'] = true; + array_push($this->context, $word); + //DEBUG if (isset($this->curtag)) debug("pushed " . $this->curtag->name); + if (isset($this->curtag)) { + array_push($this->pars, $this->curtag); + } + $this->curtag = new parserXMLDocBookTag($word); + } elseif ($this->p_vars['last_word'] == '</' || $word == '/>') { + $tag = array_pop($this->context); + if ($word == '/>') { + // all is OK + $this->checkEventPop($word, $pevent); + $word = $tag; + } + if ($tag != $word) { + addErrorDie(PDERROR_UNMATCHED_TUTORIAL_TAG, + $tag, $word, $this->curtag->getString()); + } + if (in_array($this->curtag->name, + array('refentry', 'refsect1', 'refsect2', 'refsect3')) + ) { + if (!isset($this->curtag->_id)) { + $title = ''; + if (isset($this->curtag->_title)) { + $title = $this->curtag->_title->getString(); + } + addWarning(PDERROR_NO_DOCBOOK_ID, $this->curtag->name, $title); + } + } + $this->p_flags['begin_tag'] = false; + $curtag = @array_pop($this->pars); + //DEBUG debug("popped $tag ".$curtag->name.' I am '.$this->curtag->name); + if ($curtag) { + if ($this->curtag->name == 'refsect1') $this->refsect1id = false; + if ($this->curtag->name == 'refsect2') $this->refsect2id = false; + if ($this->curtag->name == 'refsect3') $this->refsect3id = false; + $curtag->add($this->curtag); + //DEBUG debug("added " . $this->curtag->name . + //DEBUG " to " . $curtag->name . ' ' . $curtag->id); + $this->curtag = $curtag; + } else { + //DEBUG debug("here"); + } + } elseif (is_string($word)) { + if (!($e = $this->checkEventPush($word, $pevent))) { + if ($this->checkEventPop($word, $pevent)) { + if ($this->p_flags['begin_tag']) { + $this->p_vars['event_stack']-> + pushEvent(PHPDOCUMENTOR_PDP_EVENT_TAG); + $this->p_vars['event_stack']-> + pushEvent(PHPDOCUMENTOR_PDP_EVENT_CDATA); + $this->p_vars['last_tag'] = array_pop($this->context); + array_push($this->context, $this->p_vars['last_tag']); + $this->p_flags['in_cdata'] = false; + } + return; + } + } else { + $this->p_flags['start_attr'] = true; + $this->p_flags['end_attr'] = false; + } + } else { + addErrorDie(PDERROR_CANT_HAVE_INLINE_IN_TAGNAME); + } + } + + /** + * Handle CData sections + */ + function handleCData($word, $pevent) + { + if ($this->curtag->name == 'refentry' && + phpDocumentor_get_class($word) == 'parsertocinlinetag' + ) { + $this->p_vars['toc'] = $this->curtag->getTOC(); + } + if (is_string($word) && !$this->p_flags['in_cdata']) { + if ($this->checkEventPop($word, $pevent)) { + return; + } + if ($this->checkEventPush($word, $pevent)) { + return; + } + } + if (is_string($word) && $word == '<![CDATA[') { + $this->curtag->startCData(); + $this->p_flags['in_cdata'] = true; + } elseif ($this->p_flags['in_cdata'] && + is_string($word) && $word == ']]>' + ) { + $this->curtag->endCData(); + $this->p_flags['in_cdata'] = false; + } else { + if ($this->p_flags['in_cdata']) { + $this->curtag->addCData($word); + } else { + $this->curtag->add($word); + } + } + } + + /** + * Handle Entities like ” + */ + function handleEntity($word, $pevent) + { + if (!$word) { + if (!isset($this->p_vars['entity_name'])) { + $this->p_vars['entity_name'] = ''; + } + addErrorDie(PDERROR_UNTERMINATED_ENTITY, $this->p_vars['entity_name']); + } + $e = $this->checkEventPop($word, $pevent); + if ($word && !$e) { + $this->p_vars['entity_name'] = $word; + } + if ($e) { + $entity = new parserEntity($this->p_vars['entity_name']); + unset($this->p_vars['entity_name']); + $this->curtag->add($entity); + } + } + + /** + * Handle Tag attributes name="value" + * + * @todo replace commented-out debug lines with debug() func + */ + function handleAttributes($word, $pevent) + { + if ($this->checkEventPush($word, $pevent)) { + return; + } + if ($word == '=') { + $this->p_flags['start_attr'] = false; + $this->p_vars['end_attr'] = true; + } else { + if ($this->p_flags['start_attr']) { + $this->p_vars['attrname'] = $word; + } else { + if (isset($this->p_vars['attrname'])) { + $value = $this->p_vars['quote_data']; + if (phpDocumentor_get_class($value) == 'parseridinlinetag') { + // "inherit" the parent section's id, so + + // <!-- id is 'test' --> + // <refsect1 id="{@id test"}> + // ... + // <!-- id is 'test.me' --> + // <refsect2 id="{@id me}"> + // ... + // <!-- id is 'test.me.out' --> + // <refsect3 id="{@id out}"> + // ... + // <!-- id is 'test.me.out.withexample' --> + // <example id="{@id withexample}"> + + $a = ($this->refsect1id ? $this->refsect1id . '.' : ''); + $a .= ($this->refsect2id ? $this->refsect2id . '.' : ''); + $a .= ($this->refsect3id ? $this->refsect3id . '.' : ''); + if ($this->curtag->name == 'refsect1') { + $this->refsect1id = $value->id; + } + if ($this->curtag->name == 'refsect2') { + $this->refsect2id = $value->id; + } + if ($this->curtag->name == 'refsect3') { + $this->refsect3id = $value->id; + } + //DEBUG debug($value->id . ' is now ' . $a . $value->id); + $value->id = $a . $value->id; + if ($value->id != '') { + if (isset($this->_toc[$this->_cursection])) { + $this->_cursection++; + } + $this->_toc[$this->_cursection]['id'] = $value; + $this->_toc[$this->_cursection]['tag'] = + new parserXMLDocBookTag($this->curtag->name); + //DEBUG debug("set gettoc to " . $this->curtag->name . + //DEBUG ' ' . $value->id); + $this->_gettoc = $this->curtag; + } + } + $this->curtag->addAttribute($this->p_vars['attrname'], $value); + unset($this->p_vars['attrname']); + if (is_string($word) && $this->checkEventPop($word, $pevent)) { + $this->p_flags['start_attr'] = true; + $this->p_flags['end_attr'] = false; + $this->wp->setPos($this->wp->getPos() - strlen($word)); + } else { + $this->wp->setPos($this->wp->getPos() - strlen($word)); + } + return; + } + } + } + if (is_string($word) && $this->checkEventPop($word, $pevent)) { + $this->p_flags['start_attr'] = true; + $this->p_flags['end_attr'] = false; + $this->wp->setPos($this->wp->getPos() - strlen($word)); + } + } + /**#@-*/ + + /** + * setup the parser tokens, and the pushEvent/popEvent arrays + * + * @return void + * @see $tokens, $pushEvent, $popEvent + */ + function setupStates() + { + $this->_gettoc = false; + $this->_toc = array(); + $this->_cursection = 0; + if (isset($this->p_vars['toc'])) { + unset($this->p_vars['toc']); + } + + $this->tokens[STATE_NOEVENTS] + = array('</','<!--','<!','<?','<'); + $this->tokens[STATE_COMMENTBLOCK] + = array('-->'); + $this->tokens[STATE_OUTPHP] + = array('?>','>'); + $this->tokens[STATE_QUOTE] + = array("\\\"","\\\\","\"",'>'); + $this->tokens[STATE_ESCAPE] + = false;// this tells the word parser to just cycle + $this->tokens[PHPDOCUMENTOR_PDP_STATE_TAG] + = array('>',' ','/>'); + $this->tokens[PHPDOCUMENTOR_PDP_STATE_CDATA] + = array('&','<!--','</','<![CDATA[','<',']]>'); + $this->tokens[PHPDOCUMENTOR_PDP_STATE_ATTRIBUTES] + = array('=','>','/>','"'); + $this->tokens[PHPDOCUMENTOR_PDP_STATE_ENTITY] + = array(';'); + + // For each event word to event mapings + $this->pushEvent[PARSER_EVENT_NOEVENTS] = + array( + '<!--' => PARSER_EVENT_COMMENTBLOCK, + '<!' => PARSER_EVENT_OUTPHP, + "</" => PHPDOCUMENTOR_PDP_EVENT_TAG, + '<?' => PARSER_EVENT_OUTPHP, + "<" => PHPDOCUMENTOR_PDP_EVENT_TAG, + '&' => PHPDOCUMENTOR_PDP_EVENT_ENTITY, + ); + //########################## + + $this->pushEvent[PHPDOCUMENTOR_PDP_EVENT_TAG] = + array( + ' ' => PHPDOCUMENTOR_PDP_EVENT_ATTRIBUTES, + ); + + $this->popEvent[PHPDOCUMENTOR_PDP_EVENT_TAG] = array(">","/>"); + //########################## + $this->pushEvent[PHPDOCUMENTOR_PDP_EVENT_ATTRIBUTES] = + array( + '"' => PARSER_EVENT_QUOTE, + ); + + $this->popEvent[PHPDOCUMENTOR_PDP_EVENT_ATTRIBUTES] = array(">","/>"); + //########################## + + $this->popEvent[PARSER_EVENT_COMMENTBLOCK] = array("-->"); + //########################## + $this->pushEvent[PARSER_EVENT_QUOTE] = + array( + "\\" => PARSER_EVENT_ESCAPE + ); + $this->popEvent[PARSER_EVENT_QUOTE] = array("\""); + //########################## + + $this->popEvent[PARSER_EVENT_OUTPHP] = array("?>",">"); + //########################## + + $this->popEvent[PHPDOCUMENTOR_PDP_EVENT_ENTITY] = array(";"); + //########################## + + $this->pushEvent[PHPDOCUMENTOR_PDP_EVENT_CDATA] = + array( + "<" => PHPDOCUMENTOR_PDP_EVENT_TAG, + '<!--' => PARSER_EVENT_COMMENTBLOCK, + '<?' => PARSER_EVENT_OUTPHP, + '&' => PHPDOCUMENTOR_PDP_EVENT_ENTITY, + ); + $this->popEvent[PHPDOCUMENTOR_PDP_EVENT_CDATA] = array("</"); + } + + /** + * debugging function + * + * {@source} + * + * @param mixed $value a value + * + * @return mixed the looked up value if found, + * else the original value + * @static + */ + function getParserEventName ($value) + { + $lookup = array( + PARSER_EVENT_NOEVENTS + => "PARSER_EVENT_NOEVENTS", + PHPDOCUMENTOR_PDP_EVENT_TAG + => "PHPDOCUMENTOR_PDP_EVENT_TAG", + PHPDOCUMENTOR_PDP_EVENT_ATTRIBUTES + => "PHPDOCUMENTOR_PDP_EVENT_ATTRIBUTES", + PHPDOCUMENTOR_PDP_EVENT_CDATA + => "PHPDOCUMENTOR_PDP_EVENT_CDATA", + PHPDOCUMENTOR_PDP_EVENT_LIST + => "PHPDOCUMENTOR_PDP_EVENT_LIST", + PARSER_EVENT_QUOTE + => "PARSER_EVENT_QUOTE", + PHPDOCUMENTOR_PDP_EVENT_ENTITY + => "PHPDOCUMENTOR_PDP_EVENT_ENTITY", + PHPDOCUMENTOR_PDP_EVENT_COMMENT + => "PHPDOCUMENTOR_PDP_EVENT_COMMENT", + PHPDOCUMENTOR_PDP_EVENT_PI + => "PHPDOCUMENTOR_PDP_EVENT_PI", + ); + if (isset($lookup[$value])) { + return $lookup[$value]; + } else { + return $value; + } + } +} +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/clone.inc.php b/buildscripts/PhpDocumentor/phpDocumentor/clone.inc.php new file mode 100644 index 00000000..57084493 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/clone.inc.php @@ -0,0 +1,53 @@ +<?php +/** + * Object clone method + * + * phpDocumentor :: automatic documentation generator + * + * PHP versions 4 and 5 + * + * Copyright (c) 2001-2006 Gregory Beaver + * + * LICENSE: + * + * This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General + * Public License as published by the Free Software Foundation; + * either version 2.1 of the License, or (at your option) any + * later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @author Greg Beaver <cellog@php.net> + * @copyright 2001-2006 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version CVS: $Id: clone.inc.php 243202 2007-09-30 02:08:08Z ashnazg $ + * @filesource + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @since 1.0rc1 + * @todo CS cleanup - change package to PhpDocumentor + */ +/** + * Clone an object in PHP 4 + * + * @param object $obj the object to be cloned + * + * @return object the new clone + * @todo CS cleanup - rename function to PhpDocumentor_clone + */ +function phpDocumentor_clone($obj) +{ + return $obj; +} + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/clone5.inc.php b/buildscripts/PhpDocumentor/phpDocumentor/clone5.inc.php new file mode 100644 index 00000000..20dbc898 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/clone5.inc.php @@ -0,0 +1,54 @@ +<?php +/** + * Object clone method + * + * phpDocumentor :: automatic documentation generator + * + * PHP versions 4 and 5 + * + * Copyright (c) 2001-2006 Gregory Beaver + * + * LICENSE: + * + * This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General + * Public License as published by the Free Software Foundation; + * either version 2.1 of the License, or (at your option) any + * later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @author Greg Beaver <cellog@php.net> + * @copyright 2001-2006 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version CVS: $Id: clone5.inc.php 243202 2007-09-30 02:08:08Z ashnazg $ + * @filesource + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @since 1.0rc1 + * @todo CS cleanup - change package to PhpDocumentor + */ +/** + * Clone an object in PHP 5 + * + * @param object $obj the object to be cloned + * + * @return object the new clone + * @ignore + * @todo CS cleanup - rename function to PhpDocumentor_clone + */ +function phpDocumentor_clone($obj) +{ + return clone $obj; +} + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/common.inc.php b/buildscripts/PhpDocumentor/phpDocumentor/common.inc.php new file mode 100755 index 00000000..10c62568 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/common.inc.php @@ -0,0 +1,312 @@ +<?php +/** + * Common information needed by all portions of the application + * + * phpDocumentor :: automatic documentation generator + * + * PHP versions 4 and 5 + * + * Copyright (c) 2001-2008 Gregory Beaver + * + * LICENSE: + * + * This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General + * Public License as published by the Free Software Foundation; + * either version 2.1 of the License, or (at your option) any + * later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @author Greg Beaver <cellog@php.net> + * @copyright 2001-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version CVS: $Id: common.inc.php 288074 2009-09-05 02:16:26Z ashnazg $ + * @filesource + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @see parserDocBlock, parserInclude, parserPage, parserClass + * @see parserDefine, parserFunction, parserMethod, parserVar + * @since 1.0rc1 + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - rename constant to TOKENIZER_EXT + */ + +/* phpDocumentor version */ +if ('@PEAR-DIR@' != '@'.'PEAR-DIR@') { + /** @ignore */ + define("PHPDOCUMENTOR_VER", "@VER@"); +} else { + define("PHPDOCUMENTOR_VER", "1.4.3"); +} + +/* phpDocumentor URL */ +define("PHPDOCUMENTOR_WEBSITE", "http://www.phpdoc.org"); + +// set the correct path delimiter +define('SMART_PATH_DELIMITER', DIRECTORY_SEPARATOR); + +define('tokenizer_ext', extension_loaded('tokenizer') + && version_compare(phpversion(), "4.3.0", ">=")); + +// we just replace all the \ with / so that we can just operate on / +define('PATH_DELIMITER', '/'); // set the correct path delimiter + +define('PHPDOCUMENTOR_WINDOWS', substr(PHP_OS, 0, 3) == 'WIN'); + +define('_IN_PHP5', + phpversion() == '5.0.0RC1-dev' || phpversion() == '5.0.0RC2-dev' + || version_compare(phpversion(), '5.0.0', 'ge')); + +// determine which "clone" class to set, based on PHP major version +$cloneClassDir = 'PhpDocumentor' . DIRECTORY_SEPARATOR . 'phpDocumentor'; +$cloneClassFile = 'clone.inc.php'; +if ('@VER@' == '@'.'VER@') { + // we're _not_ in a PEAR installation + $cloneClassDir = dirname(__FILE__); +} +if (_IN_PHP5) { + // we _are_ in PHP5 + $cloneClassFile = 'clone5.inc.php'; +} +require_once $cloneClassDir . DIRECTORY_SEPARATOR . $cloneClassFile; + +// make arg arrays available +if (isset($_SERVER['argv'])) { + $argv = $_SERVER['argv']; + $argc = $_SERVER['argc']; +} + +/** + * used in phpdoc.php and new_phpdoc.php + * + * @param string $directory a directory string + * + * @return array an array of directory contents + * @todo CS cleanup - rename function to PhpDocumentor_ConfigFileList + */ +function phpDocumentor_ConfigFileList($directory) +{ + $ret = array(); + if (@is_dir($directory)) { + $ret = array(); + + // thanks to Jason E Sweat (jsweat@users.sourceforge.net) for fix + $d = @dir($directory); + + while ($d && $entry=$d->read()) { + $getentry = false; + if (strcmp($entry, ".") != 0 && strcmp($entry, "..") != 0) { + if (substr($entry, 0, 1) != ".") $getentry = true; + } + if ($getentry == true) { + if (strpos($entry, '.ini')) + if (is_file($directory . PATH_DELIMITER . $entry)) { + $ret[] = str_replace('.ini', '', $entry); + } + } + } + if ($d) $d->close(); + } else { + } + return $ret; +} + + +/** + * Parse an .ini file + * + * Works like {@link parse_ini_file}, except it will take a section like: + * + * <pre> + * [MYVAR] + * value1 + * value2 + * value3 + * </pre> + * + * and return an associative array(MYVAR => array(value1, value2, value3)) + * + * @param string $filename full path to the ini file + * @param bool $process_sections add an associative index + * for each section [in brackets] + * + * @return array + * @todo CS cleanup - rename function to PhpDocumentor_parse_ini_file + */ +function phpDocumentor_parse_ini_file($filename, $process_sections = false) +{ + $ini_array = array(); + $sec_name = ""; + $lines = @file($filename); + if (!$lines) return $lines; + foreach ($lines as $line) { + // code by Greg Beaver, ignore comments + if ($line[0] == ';') continue; + $line = trim($line); + + if ($line == "") { + continue; + } + if ($line[0] == "[" && $line[strlen($line) - 1] == "]") { + $sec_name = substr($line, 1, strlen($line) - 2); + } else { + if (strpos($line, "=")) { + $pos = strpos($line, "="); + $property = trim(substr($line, 0, $pos)); + // code by Greg Beaver + if (substr($property, 0, 1) == '"' && substr($property, -1) == '"') { + $property = + stripcslashes(substr($property, 1, count($property) - 2)); + } + $value = trim(substr($line, $pos + 1)); + if ($value == 'false') $value = false; + if ($value == 'true') $value = true; + if (substr($value, 0, 1) == '"' && substr($value, -1) == '"') { + $value = stripcslashes(substr($value, 1, count($value) - 2)); + } + // done additions + + if ($process_sections) { + if ($sec_name != '') + $ini_array[$sec_name][$property] = $value; + else + $ini_array[$property] = $value; + } else { + $ini_array[$property] = $value; + } + } else { + // code by Greg Beaver + if (trim($line[0]) == ';') continue; + if ($process_sections) { + $ini_array[$sec_name][] = trim($line); + } + // done additions + } + } + } + return $ini_array; +} + + +/** + * construct an "array_key_exists()" method + * if the runtime PHP version doesn't have one + * + * @todo CS Cleanup - can't avoid "prefixed by package" error + * @todo depend on PHP_Compat for this? + */ +if (!function_exists('array_key_exists')) { + /** + * Determines if a given key exists in a given array + * + * @param mixed $key key to search for + * @param array $search the array of keys to search + * + * @return bool whether or not the key was found + * @ignore + */ + function array_key_exists($key, $search) + { + foreach ($search as $keys => $nul) { + if ($key == $keys) return true; + } + return false; + } +} + +/** + * construct an "is_a()" method + * if the runtime PHP version doesn't have one + * + * @todo CS Cleanup - can't avoid "prefixed by package" error + * @todo depend on PHP_Compat for this? + */ +if (!function_exists('is_a')) { + /** + * Determines if one item "is" an object of the other item + * + * @param string $classname the class in question + * @param string $classquery the "is it a" class + * + * @return bool whether or not the class "is" one + * @ignore + */ + function is_a($classname, $classquery) + { + $father = get_parent_class($classname); + if (strtolower($father) == strtolower($classquery)) { + return true; + } elseif (!empty($father)) { + return is_a($father, $classquery); + } else { + return false; + } + } +} + + +/** + * Debugging output + * + * @param string $s the "debug message" string to echo out + * + * @return void + * @todo CS Cleanup - can't avoid "prefixed by package" error + */ +function debug($s) +{ + echo "$s\n"; +} + +/** + * Returns a formatted var_dump for debugging purposes. + * + * @param string $s string to display + * @param mixed $v unlimited number of variables to display with var_dump() + * + * @return void + */ +function fancy_debug($s,$v) +{ + if (isset($GLOBALS['dont_debug']) && $GLOBALS['dont_debug']) return; + debug($s."\n\n</pre><blockquote><pre>"); + var_dump($v); + if (func_num_args()>2) { + for ($i=2;$i<func_num_args();$i++) { + $a = func_get_arg($i); + // debug(" "); + var_dump($a); + } + } + debug("</pre></blockquote><pre>\n\n"); +} + +/** + * Returns a lower-cased version of get_class for PHP 5 + * + * get_class() returns case as declared in the file in PHP 5 + * + * @param object $object the object to get the classname for + * + * @return string the class name of the given object + * @todo CS cleanup - rename function to PhpDocumentor_get_class + */ +function phpDocumentor_get_class($object) +{ + if (is_object($object)) { + return strtolower(get_class($object)); + } + return false; +} + +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/find_phpdoc.php b/buildscripts/PhpDocumentor/phpDocumentor/find_phpdoc.php new file mode 100755 index 00000000..5ca7d2de --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/find_phpdoc.php @@ -0,0 +1,49 @@ +<?php +/** + * Utility file to locate phpDocumentor for a non-PEAR installation + * + * phpDocumentor :: automatic documentation generator + * + * PHP versions 4 and 5 + * + * Copyright (c) 2002-2007 Gregory Beaver + * + * LICENSE: + * + * This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General + * Public License as published by the Free Software Foundation; + * either version 2.1 of the License, or (at your option) any + * later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage setup + * @author Gregory Beaver <cellog@php.net> + * @copyright 2002-2007 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version CVS: $Id: find_phpdoc.php 246330 2007-11-17 03:09:41Z ashnazg $ + * @filesource + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @since 1.2 + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - change subpackage to Setup + */ +/** + * Dummy value + * @internal CS Exception - logic here necessitates using an unconditional "include" + */ +@include ''; +// value used to test whether include worked +return 6; +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/phpDocumentorTParser.inc b/buildscripts/PhpDocumentor/phpDocumentor/phpDocumentorTParser.inc new file mode 100755 index 00000000..5f901232 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/phpDocumentorTParser.inc @@ -0,0 +1,2946 @@ +<?php +/** + * tokenizer extension-based parser for PHP code + * + * phpDocumentor :: automatic documentation generator + * + * PHP versions 4 and 5 + * + * Copyright (c) 2002-2008 Gregory Beaver + * + * LICENSE: + * + * This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General + * Public License as published by the Free Software Foundation; + * either version 2.1 of the License, or (at your option) any + * later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage Parsers + * @author Gregory Beaver <cellog@php.net> + * @copyright 2002-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version CVS: $Id: phpDocumentorTParser.inc 286921 2009-08-08 05:01:24Z ashnazg $ + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @since 1.2 + * @todo CS cleanup - change package to PhpDocumentor + */ + +/** + * Tokenizer-based parser for PHP source code + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage Parsers + * @author Gregory Beaver <cellog@php.net> + * @copyright 2002-2008 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - change classname to PhpDocumentor_* + */ +class phpDocumentorTParser extends Parser +{ + /**#@+ + * @access private + */ + /** + * @var EventStack + */ + var $_event_stack; + /** + * last event triggered before the current event + * @var integer + */ + var $_last_pevent; + /** + * last word parsed + * @var integer + */ + var $_last_word; + /** + * full path of the currently parsed file + * @var string + */ + var $_path; + /**#@-*/ + + /**#@+ + * Parser Variables + * @access private + */ + var $_pv_class; + var $_pv_cur_class; + var $_pv_define; + var $_pv_define_name; + var $_pv_define_value; + var $_pv_define_params_data; + var $_pv_dtype; + var $_pv_docblock; + var $_pv_dtemplate; + var $_pv_func; + var $_pv_func_param; + var $_pv_findglobal; + var $_pv_global_name; + var $_pv_global_val; + var $_pv_globals; + var $_pv_global_count; + var $_pv_include_params_data; + var $_pv_include_name; + var $_pv_include_value; + var $_pv_linenum; + var $_pv_periodline; + var $_pv_paren_count = 0; + var $_pv_statics; + var $_pv_static_count; + var $_pv_static_val; + var $_pv_quote_data; + var $_pv_function_data; + var $_pv_var; + var $_pv_varname; + var $_pv_var_value; + /**#@-*/ + + /**#@+ + * Parser Flags + * @access private + */ + var $_pf_definename_isset = false; + var $_pf_includename_isset = false; + var $_pf_get_source = false; + var $_pf_getting_source = false; + var $_pf_internal = false; + var $_pf_in_class = false; + var $_pf_in_define = false; + var $_pf_in_global = false; + var $_pf_in_include = false; + var $_pf_in_include_value = false; + var $_pf_in_var = false; + var $_pf_interface = false; + var $_pf_funcparam_val = false; + var $_pf_quote_active = false; + var $_pf_reset_quote_data = true; + var $_pf_useperiod = false; + var $_pf_set_var_value = false; + var $_pf_var_equals = false; + /**#@-*/ + + /** + * relative path of the parsed file from the base parse directory + * @var string + */ + var $source_location; + var $eventHandlers = array( + PARSER_EVENT_ARRAY => 'handleArray', + PARSER_EVENT_VAR_ARRAY => 'handleArray', + PARSER_EVENT_VAR_ARRAY_COMMENT => 'handleVarArrayComment', + PARSER_EVENT_CLASS => 'handleClass', + PARSER_EVENT_COMMENT => 'handleComment', + PARSER_EVENT_DOCBLOCK_TEMPLATE => 'handleDocBlockTemplate', + PARSER_EVENT_END_DOCBLOCK_TEMPLATE => 'handleEndDocBlockTemplate', + PARSER_EVENT_LOGICBLOCK => 'handleLogicBlock', + PARSER_EVENT_NOEVENTS => 'defaultHandler', + PARSER_EVENT_OUTPHP => 'defaultHandler', + PARSER_EVENT_DEFINE => 'handleDefine', + PARSER_EVENT_DEFINE_PARAMS => 'handleDefineParams', + PARSER_EVENT_DEFINE_PARAMS_PARENTHESIS => 'handleDefineParamsParenthesis', + PARSER_EVENT_INCLUDE_PARAMS_PARENTHESIS => 'handleIncludeParamsParenthesis', + PARSER_EVENT_DOCBLOCK => 'handleDocBlock', + PARSER_EVENT_TAGS => 'handleTags', + PARSER_EVENT_DESC => 'handleDesc', + PARSER_EVENT_DOCKEYWORD => 'handleTag', + PARSER_EVENT_DOCKEYWORD_EMAIL => 'handleDockeywordEmail', + PARSER_EVENT_EOFQUOTE => 'handleHereDoc', + PARSER_EVENT_FUNCTION => 'handleFunction', + PARSER_EVENT_FUNCTION_PARAMS => 'handleFunctionParams', + PARSER_EVENT_FUNCTION_PARAM_VAR => 'handleFunctionParams', + PARSER_EVENT_FUNC_GLOBAL => 'handleFuncGlobal', + PARSER_EVENT_DEFINE_GLOBAL => 'handleGlobal', + PARSER_EVENT_GLOBAL_VALUE => 'handleGlobalValue', + PARSER_EVENT_INLINE_DOCKEYWORD => 'handleInlineDockeyword', + PARSER_EVENT_INCLUDE => 'handleInclude', + PARSER_EVENT_INCLUDE_PARAMS => 'handleIncludeParams', + PARSER_EVENT_QUOTE => 'handleQuote', + PARSER_EVENT_PHPCODE => 'handlePhpCode', + PARSER_EVENT_SINGLEQUOTE => 'handleSingleQuote', + PARSER_EVENT_STATIC_VAR => 'handleStaticVar', + PARSER_EVENT_STATIC_VAR_VALUE => 'handleStaticValue', + PARSER_EVENT_VAR => 'handleVar', + PARSER_EVENT_ACCESS_MODIFIER => 'handleAccessModifier', + PARSER_EVENT_IMPLEMENTS => 'handleImplements', + PARSER_EVENT_CLASS_CONSTANT => 'handleClassConstant', + ); + + var $inlineTagHandlers = array( + '*' => 'handleDefaultInlineTag', + 'link' => 'handleLinkInlineTag', + ); + + /** + * Constructor + * + */ + function phpDocumentorTParser() + { + $this->allowableTags + = $GLOBALS['_phpDocumentor_tags_allowed']; + $this->allowableInlineTags + = $GLOBALS['_phpDocumentor_inline_doc_tags_allowed']; + $this->subscribe(PHPDOCUMENTOR_EVENT_NEWLINENUM, + $GLOBALS['phpDocumentor_errors']); + $this->subscribe(PHPDOCUMENTOR_EVENT_NEWFILE, + $GLOBALS['phpDocumentor_errors']); + $this->tagHandlers['author'] = 'authorTagHandler'; + $this->tagHandlers['filesource'] = 'filesourceTagHandler'; + $this->setupEventStates(); + } + + /** + * Parse a new file + * + * @param string &$parse_data the parse data + * @param string $path the path + * @param int $base number of directories to drop off the bottom + * when creating names using path + * @param bool $packages ??? + * + * @staticvar int used for recursion limiting + * if a handler for an event is not found + * @return bool + */ + function parse (&$parse_data, $path, $base = 0, $packages = false) + { + global $_phpDocumentor_options; + static $endrecur = 0; + + $this->setupStates(); + if (strlen($parse_data) == 0) { + return false; + } + + $this->configWordParser($parse_data); + // initialize variables so E_ALL error_reporting doesn't complain + $pevent = 0; + $word = 0; + + $page = new ParserPage; + $page->setSource($this->_wp->getFileSource()); + $page->setPath($path); + $this->_path = $path; + $page->setPackageOutput($packages); + $page->setFile(basename($path)); + $this->publishEvent(PHPDOCUMENTOR_EVENT_NEWFILE, basename($path)); + //$name = str_replace("/","_",dirname($path)) . "_" + // . array_shift(explode(".",$page->getFile())); + // fc@fc.clever-soft.com 11/29/2001 + $name = str_replace(':', '', dirname($path) + . PATH_DELIMITER . $page->getFile()); + $tmp = explode(PATH_DELIMITER, $name); + $name = implode("---", array_slice($tmp, $base)); + // if base is '', drive letter is present in windows + + $page->setName($name); + $temploc = $_phpDocumentor_options['Program_Root'] + . PATH_DELIMITER . implode(PATH_DELIMITER, + array_slice(explode(PATH_DELIMITER, $path), $base)); + + if ($temploc == $_phpDocumentor_options['Program_Root'] . PATH_DELIMITER) { + $temploc .= $path; + } + + $this->source_location = $source_location = $temploc; + $page->setSourceLocation($source_location); + + $this->publishEvent(PHPDOCUMENTOR_EVENT_PAGE, $page); + unset($page); + do { + $lpevent = $pevent; + $pevent = $this->_event_stack->getEvent(); + if ($lpevent != $pevent) { + $this->_last_pevent = $lpevent; + } + + $this->publishEvent(PHPDOCUMENTOR_EVENT_NEWSTATE, ($pevent + 100)); + + $this->_pv_last_word = $word; + + $word = $this->_wp->getWord(); + if (isset($this->_pv_findglobal) && $word == $this->_pv_findglobal) { + $this->_last_pevent = $pevent; + + $this->_event_stack->pushEvent($pevent = PARSER_EVENT_DEFINE_GLOBAL); + } + // in wordparser, have to keep track of lines + $this->publishEvent(PHPDOCUMENTOR_EVENT_NEWLINENUM, $this->_wp->linenum); + if ($this->_pf_get_source) { + if ($word[0] == T_FUNCTION) { + $this->_wp->retrievesource($word); + $this->_pf_get_source = false; + $this->_pf_getting_source = true; + } + } + + if (PHPDOCUMENTOR_DEBUG == true) { + echo "LAST: "; + if (is_array($this->_pv_last_word)) { + echo token_name($this->_pv_last_word[0]) . ' => |' + . htmlspecialchars($this->_pv_last_word[1]); + } else { + echo "|" . $this->_pv_last_word; + } + echo "|\n"; + echo "PEVENT: " . $this->getParserEventName($pevent) . "\n"; + echo "LASTPEVENT: " + . $this->getParserEventName($this->_last_pevent) . "\n"; + echo $this->_wp->getPos() . ": "; + if (is_array($word)) { + echo token_name($word[0]) . ' => |' + . htmlspecialchars($word[1]); + } else { + echo '|' . htmlspecialchars($word); + } + echo "|\n-------------------\n\n\n"; + } + + // $this->_pf_getting_source && + // ($pevent == PARSER_EVENT_DOCBLOCK) || + // ($pevent == PARSER_EVENT_NOEVENTS)) + if (0) { + addError(PDERROR_SOURCE_TAG_FUNCTION_NOT_FOUND); + // throw away source + $this->_wp->getSource(); + } + if (isset($this->eventHandlers[$pevent])) { + $handle = $this->eventHandlers[$pevent]; + $this->$handle($word, $pevent); + } else { + debug('WARNING: possible error, no handler for event number ' + . $pevent); + if ($endrecur++ == 25) { + die("FATAL ERROR, recursion limit reached"); + } + } + } while (!($word === false)); + $this->publishEvent(PHPDOCUMENTOR_EVENT_NEWSTATE, + PHPDOCUMENTOR_EVENT_END_PAGE); + } + + /**#@+ + * @param string $word the string word + * @param int $pevent the token constant + * @access private + * @return void + */ + + /** + * handler for COMMENT + */ + function handleComment($word, $pevent) + { + $this->_wp->backupPos(); + $this->_event_stack->popEvent(); + } + + /** + * handler for PHPCODE. + * + * this handler recognizes the <code><?</code> php processor directive, + * and begins parsing php code + */ + function handlePhpCode($word, $pevent) + { + $e = $this->checkEventPush($word, $pevent); + if (isset($this->_pv_findglobal) && $e) { + if ($e != PARSER_EVENT_DEFINE_GLOBAL + && $e != PARSER_EVENT_ARRAY + && $e != PARSER_EVENT_QUOTE + && $e != PARSER_EVENT_SINGLEQUOTE + && $e != PARSER_EVENT_COMMENT + && $e != PARSER_EVENT_COMMENTBLOCK + ) { + addError(PDERROR_GLOBAL_NOT_FOUND, $this->_pv_findglobal); + $this->_wp->findGlobal(false); + unset($this->_pv_findglobal); + } + } + } + + /** + * handler for FUNC_GLOBAL. + * + * this handler recognizes "global $var1, $var2" declarations in a function, + * and parses them + */ + function handleFuncGlobal($word, $pevent) + { + if ($this->checkEventPop($word, $pevent)) { + return; + } + if (!$this->checkEventPush($word, $pevent)) { + if ($word == ',') { + // another variable + $this->_pv_global_count++; + } else { + if (!isset($this->_pv_globals[$this->_pv_global_count])) { + $this->_pv_globals[$this->_pv_global_count] = ''; + } + + // if (!empty($this->_pv_globals[$this->_pv_global_count])) { + // $this->_pv_global_count++; + // } + + if (is_array($word)) { + $word = $word[1]; + } + $this->_pv_globals[$this->_pv_global_count] .= $word; + } + } + } + + /** + * handler for DEFINE_GLOBAL + */ + function handleGlobal($word, $pevent) + { + if (isset($this->_pv_findglobal)) { + $this->_pv_global_name = $this->_pv_findglobal; + unset($this->_pv_findglobal); + } + if (!$this->_pf_in_global) { + $this->_pv_linenum = $this->_wp->linenum + 1; + } + $this->_pf_in_global = true; + if ($this->checkEventPush($word, $pevent)) { + $this->_wp->setWhitespace(true); + } + if ($this->checkEventPop($word, $pevent)) { + $this->_pf_in_global = false; + $a = new parserGlobal; + $a->setDataType($this->_pv_global_type); + $this->_pv_global_type = ''; + $a->setLineNumber($this->_pv_linenum); + $a->setName($this->_pv_global_name); + if (isset($this->_pv_global_val)) { + $a->setValue(trim($this->_pv_global_val)); + } + $this->publishEvent(PHPDOCUMENTOR_EVENT_GLOBAL, $a); + unset($this->_pv_global_val); + unset($this->_pv_global_type); + } + } + + /** + * handler for GLOBAL_VALUE + */ + function handleGlobalValue($word, $pevent) + { + if ($this->checkEventPush($word, $pevent)) { + return; + } + $this->_wp->setWhitespace(true); + if (!isset($this->_pv_global_val)) { + $this->_pv_global_val = ''; + } + if ($this->_last_pevent == PARSER_EVENT_ARRAY) { + $this->_pv_global_val .= $this->_pv_function_data; + $this->_pv_function_data = ''; + } + if ($this->_last_pevent == PARSER_EVENT_QUOTE || + $this->_last_pevent == PARSER_EVENT_EOFQUOTE + ) { + $this->_pv_global_val .= $this->_pv_quote_data; + unset($this->_pv_quote_data); + } + if ($this->checkEventPop($word, $pevent)) { + $this->_wp->setWhitespace(false); + $this->_wp->backupPos(); + return; + } + if (is_array($word)) { + $word = $word[1]; + } + $this->_pv_global_val .= $word; + } + + /** + * handler for STATIC_VAR. + * + * this handler recognizes "static $var1, + * $var2 = 6" declarations in a function, + * and parses them + */ + function handleStaticVar($word, $pevent) + { + if ($this->checkEventPop($word, $pevent)) { + $this->_pv_static_count++; + return; + } + if (!$this->checkEventPush($word, $pevent)) { + if ($word == ',') { + $this->_pv_static_count++; + return; + } + if (!isset($this->_pv_statics[$this->_pv_static_count])) { + $this->_pv_statics[$this->_pv_static_count] = ''; + } + if (!empty($this->_pv_statics[$this->_pv_static_count])) { + $this->_pv_static_count++; + } + if (is_array($word)) { + $word = $word[1]; + } + $this->_pv_statics[$this->_pv_static_count] = $word; + } + } + + /** + * handler for STATIC_VAR_VALUE. + * + * this handler parses the 6 in "static $var1, $var2 = 6" + */ + function handleStaticValue($word, $pevent) + { + if ($this->checkEventPush($word, $pevent)) { + return; + } + if (!isset($this->_pv_static_val[$this->_pv_static_count])) { + $this->_pv_static_val[$this->_pv_static_count] = ''; + } + if ($this->_last_pevent == PARSER_EVENT_QUOTE) { + $this->_pv_static_val[$this->_pv_static_count] + .= $this->_pv_quote_data; + unset($this->_pv_quote_data); + } + if ($this->_last_pevent == PARSER_EVENT_ARRAY) { + $this->_pv_static_val[$this->_pv_static_count] + .= $this->_pv_function_data; + $this->_pv_function_data = ''; + } + if ($this->checkEventPop($word, $pevent)) { + $this->_pv_static_val[$this->_pv_static_count] + = trim($this->_pv_static_val[$this->_pv_static_count]); + $this->_wp->backupPos($word); + return; + } else { + if (is_array($word)) $word = $word[1]; + $this->_pv_static_val[$this->_pv_static_count] .= $word; + } + } + + /** + * handler for LOGICBLOCK + * + * Logic Blocks are the stuff between { and } in a function/method. A + * logic block can clearly contain other logic blocks, as in: + * + * <code> + * function test($a) + * { + * if (testcondition) + * { // nested logic block + * } + * } + * </code> + * + * So, the exit portion of the logic block handler must check to see if the + * logic block being exited is the top-level, and it does this by retrieving + * the last event from the stack. If it is a function (and not a logic block) + * then it backs up the word parser so that the function will exit properly. + * + * {@source 11} + */ + function handleLogicBlock($word, $pevent) + { + $a = $this->checkEventPush($word, $pevent); + if ($this->checkEventPop($word, $pevent)) { + $e = $this->_event_stack->popEvent(); + $this->_event_stack->pushEvent($e); + if ($e == PARSER_EVENT_FUNCTION) { + $this->_wp->backupPos(); + } + } + } + + /** + * handler for FUNCTION. + * + * this handler recognizes function declarations, and parses them. The body + * of the function is parsed by handleLogicBlock() + * + * @see handleLogicBlock() + */ + function handleFunction($word, $pevent) + { + if ($e = $this->checkEventPush($word, $pevent)) { + $this->_pv_function_data = ''; + if ($e == PARSER_EVENT_FUNCTION_PARAMS && !is_object($this->_pv_func) + ) { + addErrorDie(PDERROR_FUNCTION_HAS_NONAME); + } + if ($e == PARSER_EVENT_COMMENT || $e == PARSER_EVENT_COMMENTBLOCK || + $e == PARSER_EVENT_FUNCTION_PARAMS || $e == PARSER_EVENT_LOGICBLOCK + ) { + return; + } + } + + if (!isset($this->_pv_func)) { + $this->_pv_func = false; + } + if (! is_object($this->_pv_func)) { + $this->_pv_globals = array(); + $this->_pv_global_count = $this->_pv_static_count = 0; + if ($this->_pf_in_class) { + $this->_pv_func = new parserMethod($this->_pv_cur_class); + } else { + $this->_pv_func = new parserFunction; + unset($this->_accessModifiers); + } + if (isset($this->_accessModifiers)) { + $this->_pv_func->setModifiers($this->_accessModifiers); + unset($this->_accessModifiers); + } + $this->_pv_func->setLineNumber($this->_wp->linenum + 1); + if (is_string($word) && $word == '&') { + $this->_pv_func->setReturnsReference(); + } + if (is_array($word) && $word[0] == T_STRING) { + $this->_pv_func->setName($word[1]); + } + } else { + if ($this->_pv_func->getReturnsReference()) { + if (is_array($word) && $word[0] == T_STRING) { + $this->_pv_func->setName($word[1]); + } + } + } + if ($this->checkEventPop($word, $pevent)) { + $this->_pv_func->setEndLineNumber($this->_wp->linenum + 1); + $this->_pv_func->addGlobals($this->_pv_globals); + $this->_pv_func->addStatics($this->_pv_statics, $this->_pv_static_val); + $this->_pv_globals = array(); + $this->_pv_global_count = 0; + if ($this->_pf_getting_source) { + $x = $this->_wp->getSource(); + $this->_pv_func->addSource($x); + $this->_pf_get_source = false; + $this->_pf_getting_source = false; + } + $this->publishEvent(PHPDOCUMENTOR_EVENT_FUNCTION, $this->_pv_func); + $this->_pv_func = false; + + // subtle bug fixed by this, sometimes string from function body + unset($this->_pv_quote_data); // was picked up by the next function + // as a default value for a parameter! + } + } + + /** + * handler for FUNCTION_PARAMS. + * + * this handler recognizes the parameters of a function within parentheses + * like function(param, param = default_value) and parses them + * + * @see endFunctionParam() + */ + function handleFunctionParams($word, $pevent) + { + //echo $this->_wp->getPos() . ": word=|$word|\t\t\tlastword=|" + // . $this->_pv_last_word."|\n"; + //echo "function_param = '".$this->_pv_function_param."'\n"; + //echo "function_data = '".$this->_pv_function_data."'\n"; + $e1 = $this->checkEventPush($word, $pevent); + + if (!$e1) { + if (($pop = $this->checkEventPop($word, $pevent)) && + $pevent == PARSER_EVENT_FUNCTION_PARAM_VAR + ) { + // end of [typehint ]$param[= defaultval] + if (is_string($word) && $word == ')') { + $this->_wp->backupPos(); + } + $this->endFunctionParam($word); + } elseif ($word == '=') { + // about to parse the default value + $this->_pf_funcparam_val = true; + } else { + if ($this->_pf_funcparam_val) { + // parsing default value + if (isset($this->_pv_quote_data)) { + $this->_pv_function_data .= $this->_pv_quote_data; + unset($this->_pv_quote_data); + } + if (is_array($word)) { + $word = $word[1]; + } + $this->_pv_function_data .= $word; + } else { + // pre-param + if ($pop) { + return; + } + if (!isset($this->_pv_function_param)) { + $this->_pv_function_param = ''; + } + if (is_array($word) && $pevent == PARSER_EVENT_FUNCTION_PARAMS + ) { + if ($word[0] == T_STRING || $word[0] == T_ARRAY) { + // object or array type hint + $this->_pv_function_param_type = $word[1]; + return; + } + $word = $word[1]; + } + $this->_pv_function_param .= $word; + } + } + } elseif ($e1 == PARSER_EVENT_ARRAY) { + $this->_wp->setWhiteSpace(true); + } elseif ($e1 == PARSER_EVENT_FUNCTION_PARAM_VAR) { + if (!isset($this->_pv_function_param)) { + $this->_pv_function_param = ''; + } + // we just got the $var part of the param + $this->_pv_function_param .= $word[1]; + } + } + + /** + * handler for ARRAY. + * + * this event handler parses arrays in default values of function + * and var definitions + */ + function handleArray($word, $pevent) + { + $e = $this->checkEventPush($word, $pevent); + if ($e) { + return; + } + + if (!isset($this->_pv_function_data) || + (isset($this->_pv_function_data) && empty($this->_pv_function_data)) + ) { + $this->_pv_function_data = "array"; + } + + if ($word == '(' && $this->_pv_paren_count++) { + // need extra parentheses help + $this->_event_stack->pushEvent($pevent); + } + if (is_array($word)) { + $this->_pv_function_data .= $word[1]; + } else { + $this->_pv_function_data .= $word; + } + //echo "function_data = |$this->_pv_function_data|\n"; + + if ($this->checkEventPop($word, $pevent)) { + $this->_pv_paren_count--; + $this->_wp->setWhiteSpace(false); + } + } + + /** + * handler for HEREDOC in a function logic block. + * + * this handler recognizes function declarations, and parses them. The body + * of the function is parsed by handleLogicBlock() + * + * @see handleLogicBlock() + */ + function handleHereDoc($word, $pevent) + { + if (is_array($this->_pv_last_word) && + $this->_pv_last_word[0] == T_START_HEREDOC + ) { + $save = $word; + if (is_array($word)) { + $word = $word[1]; + } + $this->_pv_quote_data = $this->_pv_last_word[1] . $word; + $this->_pf_quote_active = true; + } elseif (!$this->_pf_quote_active) { + $this->_pv_quote_data = $this->_pv_last_word[1]; + $this->_event_stack->popEvent(); + $this->_wp->backupPos(); + return; + } + $save = $word; + if (is_array($word)) { + $word = $word[1]; + } + $this->_pv_quote_data .= $word; + if ($this->checkEventPop($save, $pevent)) { + $this->_pf_quote_active = false; + } + } + + /** + * handler for QUOTE. + * + * this handler recognizes strings defined with double quotation marks (") + * and single quotation marks and handles them correctly + * in any place that they legally appear in php code + */ + function handleQuote($word, $pevent) + { + if ($this->_pv_last_word == '"' || $this->_pv_last_word == "'" && + $this->_last_pevent != PARSER_EVENT_QUOTE + ) { + $save = $word; + if (is_array($word)) { + $word = $word[1]; + } + $this->_pv_quote_data = $this->_pv_last_word . $word; + $this->_pf_quote_active = true; + $this->checkEventPop($save, $pevent); + } elseif (!$this->_pf_quote_active) { + $this->_pv_quote_data = $this->_pv_last_word[1]; + $this->_event_stack->popEvent(); + $this->_wp->backupPos(); + return; + } + $save = $word; + if (is_array($word)) { + $word = $word[1]; + } + $this->_pv_quote_data .= $word; + if ($this->checkEventPop($save, $pevent)) { + $this->_pf_quote_active = false; + } + } + + /** + * handler for INCLUDE. + * + * this handler recognizes include/require/include_once/include_once statements, + * and publishes the data to Render + */ + function handleInclude($word, $pevent) + { + if (!$this->_pf_in_include) { + $this->_pv_linenum = $this->_wp->linenum; + } + $this->_pf_in_include = true; + + $a = $this->checkEventPush($word, $pevent); + if (!$this->_pf_includename_isset) { + $this->_pf_includename_isset = true; + + $w = $this->_pv_last_word; + if (is_array($w)) { + $w = $w[1]; + } + $this->_pv_include_name = $w; + if ($a) { + $this->_pv_include_value = ''; + } else { + if (is_array($word)) { + $word = $word[1]; + } + $this->_pv_include_value = $word; + } + unset($this->_pv_quote_data); + } else { + if (!$a) { + if (empty($this->_pv_include_params_data)) { + if ($word != ';') { + if (is_array($word)) $word = $word[1]; + $this->_pv_include_value .= $word; + } + } + } else { + if ($this->_pf_in_include_value && $a == PARSER_EVENT_INCLUDE_PARAMS + ) { + /* we're already inside the include value, + * so an open paren does NOT mean the beginning + * of "include parameters"... + * it's just a part of the include's value string... + * but we've already pushed PARSER_EVENT_INCLUDE_PARAMS + * onto the stack... + * we need to pop it off + * before handleIncludeParams gets called... + */ + $this->_event_stack->popEvent(); + // also need to keep that open parens... + $this->_pv_include_value .= $word; + } + $this->_pv_include_params_data = ''; + } + } + + if (!empty($this->_pv_include_value)) { + $this->_pf_in_include_value = true; + } + + if ($this->checkEventPop($word, $pevent)) { + $this->_pv_include = new parserInclude; + $this->_pv_include->setLineNumber($this->_pv_linenum + 1); + $this->_pf_in_include = false; + $this->_pv_include->setName($this->_pv_include_name); + $this->_pv_include->setValue($this->_pv_include_value); + $this->publishEvent(PHPDOCUMENTOR_EVENT_INCLUDE, $this->_pv_include); + $this->_pf_includename_isset = false; + $this->_pf_in_include_value = false; + unset($this->_pv_include); + unset($this->_pv_include_name); + unset($this->_pv_include_value); + unset($this->_pv_include_params_data); + } elseif ($this->_last_pevent == PARSER_EVENT_INCLUDE_PARAMS) { + // include is part of a larger statement + // force ending of include + $this->_event_stack->popEvent(); + $this->_pv_include = new parserInclude; + $this->_pv_include->setLineNumber($this->_pv_linenum + 1); + $this->_pf_in_include = false; + $this->_pv_include->setName($this->_pv_include_name); + $this->_pv_include->setValue($this->_pv_include_value); + $this->publishEvent(PHPDOCUMENTOR_EVENT_INCLUDE, $this->_pv_include); + $this->_pf_includename_isset = false; + $this->_pf_in_include_value = false; + unset($this->_pv_include); + unset($this->_pv_include_name); + unset($this->_pv_include_value); + unset($this->_pv_include_params_data); + } + } + + /** + * handler for INCLUDE_PARAMS. + * + * this handler parses the contents of ( ) + * in include/require/include_once/include_once statements + */ + function handleIncludeParams($word, $pevent) + { + $e = $this->checkEventPush($word, $pevent); + if ($e == PARSER_EVENT_COMMENT) { + return; + } + + if (!isset($this->_pv_include_params_data)) { + $this->_pv_include_params_data = ''; + } + + if ($this->checkEventPop($word, $pevent)) { + if (!empty($this->_pv_include_params_data)) { + $this->_pv_include_value = $this->_pv_include_params_data; + } else { + $w = $this->_pv_last_word; + if (is_array($w)) { + $w = $w[1]; + } + $this->_pv_include_value = $w; + } + } + if (is_array($word)) { + $word = $word[1]; + } + $this->_pv_include_params_data .= $word; + } + + /** + * handler for INCLUDE_PARAMS_PARENTHESIS. + * + * this handler takes all parenthetical statements within file in: + * include statement include(file), and handles them properly + */ + function handleIncludeParamsParenthesis($word, $pevent) + { + $this->checkEventPush($word, $pevent); + $this->checkEventPop($word, $pevent); + if (is_array($word)) { + $word = $word[1]; + } + $this->_pv_include_params_data .= $word; + } + + /** + * handler for DEFINE. + * + * handles define(constant, value); statements + */ + function handleDefine($word, $pevent) + { + if (!$this->_pf_in_define) { + $this->_pv_linenum = $this->_wp->linenum + 1; + } + $this->_pf_in_define = true; + $this->checkEventPush($word, $pevent); + + $this->_pf_definename_isset = false; + $this->_pv_define_params_data = ''; + unset($this->_pv_quote_data); + if ($this->checkEventPop($word, $pevent)) { + $this->_pf_in_define = false; + $this->_pv_define = new parserDefine; + $this->_pv_define->setLineNumber($this->_pv_linenum); + $this->_pv_define->setName($this->_pv_define_name); + $this->_pv_define->setValue($this->_pv_define_value); + $this->publishEvent(PHPDOCUMENTOR_EVENT_DEFINE, $this->_pv_define); + $this->_pf_definename_isset = false; + unset($this->_pv_define); + unset($this->_pv_define_name); + unset($this->_pv_define_value); + $this->_pf_in_define = false; + $this->_pv_define_params_data = ''; + } + } + + /** + * handler for DEFINE_PARAMS. + * + * handles the parsing of constant and value in define(constant, value); + */ + function handleDefineParams($word, $pevent) + { + $e = $this->checkEventPush($word, $pevent); + if ($e && $e != PARSER_EVENT_DEFINE_PARAMS_PARENTHESIS) { + return; + } + + if (!isset($this->_pv_define_params_data)) { + $this->_pv_define_params_data = ''; + } + + if ($this->checkEventPop($word, $pevent)) { + if ($this->_last_pevent == PARSER_EVENT_QUOTE || + $this->_last_pevent == PARSER_EVENT_EOFQUOTE + ) { + $this->_pv_define_params_data .= $this->_pv_quote_data; + unset($this->_pv_quote_data); + } + if (is_array($word)) { + $word = $word[1]; + } + if (!empty($this->_pv_define_params_data)) { + //echo $this->_pv_define_params_data."\n"; + $this->_pv_define_value = $this->_pv_define_params_data; + } else { + $w = $this->_pv_last_word; + if (is_array($this->_pv_last_word)) { + $w = $this->_pv_last_word[1]; + } + if (!empty($w)) { + $this->_pv_define_value = $w; + } else { + $this->_pv_define_value = ""; + switch ($w) { + case 0: + $this->_pv_define_value = "0"; + break; + case null: + $this->_pv_define_value = "null"; + break; + case "": + $this->_pv_define_value = ""; + break; + } + } + } + } + if ($this->_pf_definename_isset) { + if (is_array($word)) { + $word = $word[1]; + } + $this->_pv_define_params_data .= $word; + } else { + if ($word != ",") { + if (is_array($word)) { + $word = $word[1]; + } + $this->_pv_define_params_data .= $word; + } else { + if (substr($this->_pv_define_params_data, 0, 1) == + substr($this->_pv_define_params_data, + strlen($this->_pv_define_params_data) - 1) && + in_array(substr($this->_pv_define_params_data, + 0, 1), array('"', "'")) + ) { + // remove leading and ending quotation marks + // if there are only two + $a = substr($this->_pv_define_params_data, 0, 1); + $b = substr($this->_pv_define_params_data, 1, + strlen($this->_pv_define_params_data) - 2); + if (strpos($b, $a) === false) { + $this->_pv_define_params_data = $b; + } + } + $this->_pf_definename_isset = true; + $this->_pv_define_name = $this->_pv_define_params_data; + $this->_pv_define_params_data = ''; + } + } + } + + /** + * handler for DEFINE_PARAMS_PARENTHESIS. + * + * this handler takes all parenthetical statements within constant or value in: + * define(constant, value) of a define statement, and handles them properly + */ + function handleDefineParamsParenthesis($word, $pevent) + { + $e = $this->checkEventPush($word, $pevent); + $this->checkEventPop($word, $pevent); + if ($this->_last_pevent == PARSER_EVENT_QUOTE) { + $this->_pv_define_params_data .= $this->_pv_quote_data; + unset($this->_pv_quote_data); + } + if (is_array($word)) { + $word = $word[1]; + } + $this->_pv_define_params_data .= $word; + } + + /** + * handler for IMPLEMENTS. + * + * this handler parses a class statement's implements clause (PHP 5) + */ + function handleImplements($word, $pevent) + { + if ($this->checkEventPop($word, $pevent)) { + $this->_wp->backupPos(); + return; + } + if (is_array($word) && $word[0] == T_STRING) { + $this->_pv_class->addImplements($word[1]); + } + } + + /** + * handler for ACCESS_MODIFIER. + * + * this handler parses public/private/protected/static/abstract PHP 5 modifiers + */ + function handleAccessModifier($word, $pevent) + { + if (!isset($this->_accessModifiers)) { + $this->_accessModifiers = array(); + } + $this->_wp->backupPos(); + $this->_event_stack->popEvent(); + if ($word[0] == T_VARIABLE) { + // this is a PHP5-style variable with no "var" + $this->_event_stack->pushEvent(PARSER_EVENT_VAR); + } + $this->_accessModifiers[] = strtolower($this->_pv_last_word[1]); + } + + /** + * handler for CLASS. + * + * this handler parses a class/interface statement + */ + function handleClass($word, $pevent) + { + if (!$this->_pf_in_class) { + $this->_pf_in_class = true; + if ($this->_pv_last_word[0] == T_INTERFACE) { + $this->_pf_interface = true; + } else { + $this->_pf_interface = false; + } + } + $a = $this->checkEventPush($word, $pevent); + + if (!isset($this->_pv_class)) { + $this->_pv_class = false; + } + if (!is_subclass_of($this->_pv_class, "parserBase")) { + $this->_pv_class = new parserClass; + if (isset($this->_accessModifiers)) { + $this->_pv_class->setModifiers($this->_accessModifiers); + unset($this->_accessModifiers); + } + if ($this->_pf_interface) { + $this->_pv_class->setInterface(); + } + $this->_pv_class->setLineNumber($this->_wp->linenum + 1); + $this->_pv_class->setname($word[1]); + $this->_pv_cur_class = $word[1]; + $this->_pv_class->setSourceLocation($this->source_location); + } + + if (is_array($this->_pv_last_word) && $this->_pv_last_word[0] == T_EXTENDS + ) { + // I don't know why I am so nice, this fixes 1150809 + if ($word[1] == $this->_pv_class->getName()) { + addErrorDie(PDERROR_CANNOT_EXTEND_SELF, $word[1]); + } + $this->_pv_class->setExtends($word[1]); + } + + if ($word == "{") { + $this->publishEvent(PHPDOCUMENTOR_EVENT_CLASS, $this->_pv_class); + } + //echo $this->wp->getPos() . ": |$word|\n"; + if ($this->checkEventPop($word, $pevent)) { + $this->_pv_class->setEndLineNumber($this->_wp->linenum + 1); + $this->_pf_in_class = $this->_pf_interface = false; + // throw an event when class is done + $this->publishEvent(PHPDOCUMENTOR_EVENT_NEWSTATE, STATE_END_CLASS); + $this->_pv_class = false; + } + } + + /** + * handler for VAR_ARRAY_COMMENT + * + * if parsing a default value, add the comment to the text + */ + function handleVarArrayComment($word, $pevent) + { + $this->_pv_function_data .= $this->_pv_last_word[1]; + return $this->handleComment($word, $pevent); + } + + /** + * handler for VAR. + * + * handle a var $varname = default_value; + * or var $varname; statement + * in a class definition + */ + function handleVar($word, $pevent) + { + if (!$this->_pf_in_var) { + $this->_pf_set_var_value = false; + $this->_pv_var_value = ''; + $this->_pv_linenum = $this->_wp->linenum + 1; + } + $this->_pf_in_var = true; + //echo $word."\n"; + $e = $this->checkEventPush($word, $pevent); + + if (!isset($this->_pv_var)) { + $this->_pv_var = false; + } + if ($word == '=' || $word == ';' || $word == ',') { + $this->_wp->setWhitespace(true); + $this->_pf_var_equals = true; + $this->_pv_var = new parserVar($this->_pv_cur_class); + $this->_pv_var->setName($this->_pv_varname); + } + if ($this->_last_pevent == PARSER_EVENT_VAR_ARRAY) { + if (isset($this->_pv_function_data)) { + $this->_pv_var->setValue($this->_pv_function_data); + } + $this->_pf_set_var_value = true; + unset($this->_pv_function_data); + } elseif ($this->_pf_var_equals && $word != ';' && + $word != '=' && $word != ',' && !$e + ) { + if (is_array($word)) { + $word = $word[1]; + } + $this->_pv_var_value .= $word; + } + if ($word == ',') { + if (!$this->_pf_set_var_value) { + $this->_pv_var->setValue($this->_pv_var_value); + } + $this->_pf_set_var_value = false; + unset($this->_pv_var_value); + $this->_pv_var->setEndLineNumber($this->_wp->linenum + 1); + $this->_pv_var->setLineNumber($this->_pv_linenum); + if (isset($this->_accessModifiers)) { + $this->_pv_var->setModifiers($this->_accessModifiers); + } + $this->publishEvent(PHPDOCUMENTOR_EVENT_VAR, $this->_pv_var); + unset($this->_pv_var); + $this->_pf_in_var = false; + $this->_pf_var_equals = false; + $this->_pv_varname = ''; + return; + } + if ($this->checkEventPop($word, $pevent)) { + $this->_wp->setWhitespace(false); + if (!$this->_pf_set_var_value) { + $this->_pv_var->setValue($this->_pv_var_value); + } + $this->_pf_set_var_value = false; + unset($this->_pv_var_value); + $this->_pv_var->setEndLineNumber($this->_wp->linenum + 1); + $this->_pv_var->setLineNumber($this->_pv_linenum); + if (isset($this->_accessModifiers)) { + $this->_pv_var->setModifiers($this->_accessModifiers); + unset($this->_accessModifiers); + } + $this->publishEvent(PHPDOCUMENTOR_EVENT_VAR, $this->_pv_var); + unset($this->_pv_var); + $this->_pf_in_var = false; + $this->_pf_var_equals = false; + $this->_pv_varname = ''; + return; + } + if ($word[0] == T_VARIABLE) { + $this->_pv_varname = $word[1]; + } + } + + /** + * handler for CLASS_CONSTANT. + * + * handle a const constname = default_value; statement in a class definition + */ + function handleClassConstant($word, $pevent) + { + if (!$this->_pf_in_const) { + $this->_pf_set_const_value = false; + $this->_pv_const_value = ''; + $this->_pv_linenum = $this->_wp->linenum + 1; + } + $this->_pf_in_const = true; + //echo $word."\n"; + $e = $this->checkEventPush($word, $pevent); + + if (!isset($this->_pv_const)) { + $this->_pv_const = false; + } + if ($word == '=' || $word == ';' || $word == ',') { + $this->_wp->setWhitespace(true); + $this->_pf_const_equals = true; + $this->_pv_const = new parserConst($this->_pv_cur_class); + $this->_pv_const->setName($this->_pv_constname); + } + if ($this->_last_pevent == PARSER_EVENT_VAR_ARRAY) { + if (isset($this->_pv_function_data)) { + $this->_pv_const->setValue($this->_pv_function_data); + } + $this->_pf_set_const_value = true; + unset($this->_pv_function_data); + } elseif ($this->_pf_const_equals && $word != ';' && + $word != '=' && $word != ',' && !$e + ) { + if (is_array($word)) { + $word = $word[1]; + } + $this->_pv_const_value .= $word; + } + if ($word == ',') { + if (!$this->_pf_set_const_value) { + $this->_pv_const->setValue($this->_pv_const_value); + } + $this->_pf_set_const_value = false; + unset($this->_pv_const_value); + $this->_pv_const->setEndLineNumber($this->_wp->linenum + 1); + $this->_pv_const->setLineNumber($this->_pv_linenum); + $this->publishEvent(PHPDOCUMENTOR_EVENT_CONST, $this->_pv_const); + unset($this->_pv_const); + $this->_pf_in_const = false; + $this->_pf_const_equals = false; + $this->_pv_constname = ''; + return; + } + if ($this->checkEventPop($word, $pevent)) { + $this->_wp->setWhitespace(false); + if (!$this->_pf_set_const_value) { + $this->_pv_const->setValue($this->_pv_const_value); + } + $this->_pf_set_const_value = false; + unset($this->_pv_const_value); + $this->_pv_const->setEndLineNumber($this->_wp->linenum + 1); + $this->_pv_const->setLineNumber($this->_pv_linenum); + $this->publishEvent(PHPDOCUMENTOR_EVENT_VAR, $this->_pv_const); + unset($this->_pv_const); + $this->_pf_in_const = false; + $this->_pf_const_equals = false; + $this->_pv_constname = ''; + return; + } + if ($word[0] == T_STRING && !$this->_pf_const_equals) { + $this->_pv_constname = $word[1]; + } + } + + /** + * Handler for the + * {@tutorial phpDocumentor.howto.pkg#using.command-line.javadocdesc} + * command-line switch DocBlocks. + * + * @todo CS cleanup - rename to javaDoc* for camelCasing rule + */ + function JavaDochandleDocblock($word, $pevent) + { + $this->commonDocBlock($word, $pevent, 'handleJavaDocDesc'); + } + + /** + * Handler for normal DocBlocks + */ + function handleDocBlock($word, $pevent) + { + $this->commonDocBlock($word, $pevent, 'handleDesc'); + } + /**#@-*/ + + /** + * Helper function for {@link handleFunctionParams()} + * + * This function adds a new parameter to the parameter list + * + * @param string $word the parameter word + * + * @return void + * @access private + */ + function endFunctionParam($word) + { + if (isset($this->_pv_quote_data)) { + $this->_pv_function_data .= $this->_pv_quote_data; + unset($this->_pv_quote_data); + } + if (isset($this->_pv_function_param)) { + $this->_pv_func->addParam($this->_pv_function_param, + $this->_pv_function_data, + $this->_pf_funcparam_val, + $this->_pv_function_param_type); + unset($this->_pv_function_param); + $this->_pv_function_data = ''; + $this->_pf_funcparam_val = false; + $this->_pv_function_param_type = null; + } + } + + /** + * Common DocBlock Handler for both JavaDoc-format and normal DocBlocks + * + * @param string $word the word + * @param int $pevent the parser event + * @param string $deschandler the handler to use + * + * @return void + * @access private + */ + function commonDocBlock($word, $pevent, $deschandler) + { + $this->_wp->backupPos(); + $this->_event_stack->popEvent(); + $word = $this->_pv_last_word[1]; + $dtype = '_pv_docblock'; + if (strpos($word, '/**') !== 0) { + // not a docblock + // $this->_wp->backupPos(); + $this->_event_stack->pushEvent(PARSER_EVENT_COMMENT); + return; + } + if ($word == '/**#@-*/') { + // stop using docblock template + $this->publishEvent(PHPDOCUMENTOR_EVENT_NEWSTATE, + PHPDOCUMENTOR_EVENT_END_DOCBLOCK_TEMPLATE); + unset($this->_pv_dtemplate); + return; + } + if (strpos($word, '/**#@+') === 0) { + // docblock template definition + $dtype = '_pv_dtemplate'; + // strip /**#@+ and */ + $word = substr($word, 6).'*'; + $word = trim(substr($word, 0, strlen($word) - 3)); + if (strlen($word) && $word{0} != '*') { + $word = "* $word"; + } + } else { + // strip /** and */ + $word = substr($word, 2); + $word = substr($word, 0, strlen($word) - 2); + } + $lines = explode("\n", trim($word)); + $go = count($lines); + for ($i=0; $i < $go; $i++) { + if (substr(trim($lines[$i]), 0, 1) != '*') { + unset($lines[$i]); + } else { + // remove leading "* " + $lines[$i] = substr(trim($lines[$i]), 1); + } + } + // remove empty lines + if ($lines == array(false)) { + // prevent PHP 5.2 segfault (see http://bugs.php.net/bug.php?id=39350) + $lines = array(''); + } + $lines = explode("\n", trim(join("\n", $lines))); + for ($i = 0; $i < count($lines); $i++) { + if (substr(trim($lines[$i]), 0, 1) == '@' && + substr(trim($lines[$i]), 0, 2) != '@ ' + ) { + $tagindex = $i; + $i = count($lines); + } + } + if (isset($tagindex)) { + $tags = array_slice($lines, $tagindex); + $desc = array_slice($lines, 0, $tagindex); + } else { + $tags = array(); + $desc = $lines; + } + //var_dump($desc,$tags); + $this->$dtype = new parserDocBlock; + $this->$dtype->setLineNumber($this->_wp->_docblock_linenum + 1); + $this->$dtype->setEndLineNumber($this->_wp->linenum); + $this->_pv_dtype = $dtype; + $this->$deschandler($desc); + $this->handleTags($tags); + if ($dtype == '_pv_docblock') { + $this->publishEvent(PHPDOCUMENTOR_EVENT_DOCBLOCK, $this->$dtype); + $this->$dtype = new parserDocBlock(); + } else { + $this->publishEvent(PHPDOCUMENTOR_EVENT_DOCBLOCK_TEMPLATE, + $this->$dtype); + } + } + + /** + * Handles JavaDoc descriptions + * + * @param string $desc the description + * + * @return void + * @access private + */ + function handleJavaDocDesc($desc) + { + unset($this->_pv_periodline); + $this->_pf_useperiod = false; + if (empty($desc)) { + $desc = array(''); + } + foreach ($desc as $i => $line) { + $line = trim($line); + if (!isset($this->_pv_periodline) && + substr($line, strlen($line) - 1) == '.' + ) { + $this->_pv_periodline = $i; + $this->_pf_useperiod = true; + } + } + if (!isset($this->_pv_periodline)) { + $this->_pv_periodline = 0; + } + + $dtype = $this->_pv_dtype; + if ($dtype == '_pv_docblock') { + $save = $desc; + // strip leading <p> + if (strpos($desc[0], '<p>') === 0) { + $desc[0] = substr($desc[0], 3); + } + $sdesc = new parserDesc; + $desci = ''; + for ($i = 0; ($i <= $this->_pv_periodline) && ($i < count($desc)); $i++ + ) { + if (strpos($desc[$i], '.') !== false) { + $desci .= substr($desc[$i], 0, strpos($desc[$i], '.') + 1); + } else { + $desci .= $desc[$i]; + } + $desci .= "\n"; + } + $sdesc->add($this->getInlineTags($desci)); + $desc = $save; + + $my_desc = new parserDesc; + if (isset($this->_pv_dtemplate)) { + // copy template values if not overridden + if (!$this->_pv_docblock->getExplicitPackage()) { + if ($p = $this->_pv_dtemplate->getKeyword('package')) { + $this->_pv_docblock->addKeyword('package', $p); + $this->_pv_docblock->setExplicitPackage(); + } + if ($p = $this->_pv_dtemplate->getKeyword('category')) { + $this->_pv_docblock->addKeyword('category', $p); + $this->_pv_docblock->setExplicitCategory(); + } + if ($p = $this->_pv_dtemplate->getKeyword('subpackage')) { + $this->_pv_docblock->addKeyword('subpackage', $p); + } + } + $tags = $this->_pv_dtemplate->listTags(); + foreach ($tags as $tag) { + $this->_pv_docblock->addTag($tag); + } + if (!count($this->_pv_docblock->params)) { + $this->_pv_docblock->params = $this->_pv_dtemplate->params; + } + $my_desc->add($this->_pv_dtemplate->desc); + } + //echo "i = ".$this->_pv_periodline."; i < " . count($desc) . "\n"; + $desci = ''; + for ($i = 0; $i < count($desc); $i++) { + // the line will not be set if it doesn't start with a * + if (isset($desc[$i])) { + $desci .= $desc[$i] . "\n"; + } + } + $my_desc->add($this->getInlineTags($desci)); + } else { + $sdesc = new parserDesc; + $save = $desc; + // strip leading <p> + if (strpos($desc[0], '<p>') === 0) { + $desc[0] = substr($desc[0], 3); + } + $desci = ''; + for ($i = 0; ($i <= $this->_pv_periodline) && ($i < count($desc)); $i++ + ) { + if (strpos($desc[$i], '.') !== false) { + $desci .= substr($desc[$i], 0, strpos($desc[$i], '.') + 1); + } else { + $desci .= $desc[$i]; + } + $desci .= "\n"; + } + $sdesc->add($this->getInlineTags($desci)); + $desc = $save; + + $my_desc = new parserDesc; + $desci = ''; + for ($i=0; $i < count($desc); $i++) { + if (isset($desc[$i])) { + $desci .= $desci[$i] . "\n"; + } + } + $my_desc->add($this->getInlineTags($desci)); + } + + if ($this->_pf_internal) { + addError(PDERROR_INTERNAL_NOT_CLOSED); + $this->_pf_internal = false; + } + $this->$dtype->setShortDesc($sdesc); + $this->$dtype->setDesc($my_desc); + unset($my_desc); + //var_dump($this->$dtype); + //exit; + } + + /** + * Process the Long Description of a DocBlock + * + * @param array $desc array of lines containing the description + * with leading asterisk "*" stripped off. + * + * @return void + * @access private + */ + function handleDesc($desc) + { + unset($this->_pv_periodline); + $this->_pf_useperiod = false; + foreach ($desc as $i => $line) { + $line = trim($line); + if (!isset($this->_pv_periodline) && + substr($line, strlen($line) - 1) == '.' + ) { + $this->_pv_periodline = $i; + $this->_pf_useperiod = true; + } + } + if (!isset($this->_pv_periodline)) { + $this->_pv_periodline = 0; + } + if ($this->_pv_periodline > 3) { + $this->_pf_useperiod = false; + } else { + for ($i = 0; $i < $this->_pv_periodline; $i++) { + if (strlen($desc[$i]) == 0 && isset($desc[$i - 1]) && + strlen($desc[$i - 1]) + ) { + $this->_pv_periodline = $i; + } + } + } + for ($i=0;$i <= $this->_pv_periodline && $i < count($desc);$i++) { + if (!strlen(trim($desc[$i]))) { + $this->_pf_useperiod = false; + } + } + // figure out the shortdesc + if ($this->_pf_useperiod === false) { + // use the first non blank line for short desc + for ($i = 0; $i < count($desc); $i++) { + if (strlen($desc[$i]) > 0) { + $this->_pv_periodline = $i; + $i = count($desc); + } + } + + // check to see if we are going to use a blank line to end the shortdesc + // this can only be in the first 4 lines + if (count($desc) > 4) { + $max = 4; + } else { + $max = count($desc); + } + + for ($i = $this->_pv_periodline; $i < $max; $i++) { + if (strlen(trim($desc[$i])) == 0) { + $this->_pv_periodline = $i; + $i = $max; + } + } + } + + $dtype = $this->_pv_dtype; + if ($dtype == '_pv_docblock') { + $sdesc = new parserDesc; + $desci = ''; + for ($i = 0; ($i <= $this->_pv_periodline) && ($i < count($desc)); $i++ + ) { + $desci .= $desc[$i] . "\n"; + } + $sdesc->add($this->getInlineTags($desci)); + $this->_pv_periodline++; + + $my_desc = new parserDesc; + if (isset($this->_pv_dtemplate)) { + // copy template values if not overridden + if (!$this->_pv_docblock->getExplicitPackage()) { + if ($p = $this->_pv_dtemplate->getKeyword('package')) { + $this->_pv_docblock->addKeyword('package', $p); + $this->_pv_docblock->setExplicitPackage(); + } + if ($p = $this->_pv_dtemplate->getKeyword('category')) { + $this->_pv_docblock->addKeyword('category', $p); + $this->_pv_docblock->setExplicitCategory(); + } + if ($p = $this->_pv_dtemplate->getKeyword('subpackage')) { + $this->_pv_docblock->addKeyword('subpackage', $p); + } + } + $tags = $this->_pv_dtemplate->listTags(); + foreach ($tags as $tag) { + $this->_pv_docblock->addTag($tag); + } + if (!count($this->_pv_docblock->params)) { + $this->_pv_docblock->params = $this->_pv_dtemplate->params; + } + if (!$this->_pv_docblock->return) { + $this->_pv_docblock->return = $this->_pv_dtemplate->return; + } + if (!$this->_pv_docblock->var) { + $this->_pv_docblock->var = $this->_pv_dtemplate->var; + } + $my_desc->add($this->_pv_dtemplate->sdesc); + $my_desc->add($this->_pv_dtemplate->desc); + } + //echo "i = ".$this->_pv_periodline."; i < " . count($desc) . "\n"; + $desci = ''; + for ($i = $this->_pv_periodline; $i < count($desc); $i++) { + // the line will not be set if it doesn't start with a * + if (isset($desc[$i])) { + $desci .= $desc[$i] . "\n"; + } + } + $my_desc->add($this->getInlineTags($desci)); + } else { + // this is a docblock template + $sdesc = new parserDesc; + $desci = ''; + for ($i = 0; ($i <= $this->_pv_periodline) && ($i < count($desc)); $i++ + ) { + if (isset($desc[$i])) { + $desci .= $desc[$i] . "\n"; + } + } + $sdesc->add($this->getInlineTags($desci)); + $this->_pv_periodline++; + + $my_desc = new parserDesc; + $desci = ''; + for ($i=$this->_pv_periodline; $i < count($desc); $i++) { + if (isset($desc[$i])) { + $desci .= $desc[$i] . "\n"; + } + } + $my_desc->add($this->getInlineTags($desci)); + } + if ($this->_pf_internal) { + addError(PDERROR_INTERNAL_NOT_CLOSED); + $this->_pf_internal = false; + } + $this->$dtype->setShortDesc($sdesc); + $this->$dtype->setDesc($my_desc); + unset($my_desc); + //var_dump($this->$dtype); + //exit; + } + + /** + * Process the tags of a DocBlock + * + * @param array $tags array of lines that contain all @tags + * + * @return void + * @access private + */ + function handleTags($tags) + { + $newtags = array(); + $curtag = ''; + for ($i=0; $i < count($tags); $i++) { + if (strpos(trim($tags[$i]), '@') === 0) { + $tags[$i] = ltrim($tags[$i]); + } + if (substr($tags[$i], 0, 1) == '@' && substr($tags[$i], 0, 2) != '@ ' + ) { + // start a new tag + if (!empty($curtag)) { + $newtags[] = $curtag; + } + $curtag = $tags[$i]; + } else { + $curtag .= "\n" . $tags[$i]; + } + } + if (!empty($curtag)) { + $newtags[] = $curtag; + } + foreach ($newtags as $tag) { + $x = explode(' ', str_replace("\t", ' ', $tag)); + $tagname = trim(substr(array_shift($x), 1)); + $restoftag = $x; + if (isset($this->tagHandlers[$tagname])) { + $handle = $this->tagHandlers[$tagname]; + } else { + $handle = $this->tagHandlers['*']; + } + $this->$handle($tagname, $restoftag); + } + } + + /** + * Process all inline tags in text, and convert them to their abstract + * object representations. + * + * @param string|array $value complete code to search for inline tags, + * if an array, it's an array of strings + * + * @return parserStringWithInlineTags + * @access private + */ + function getInlineTags($value) + { + if (is_array($value)) { + $value = join("\n", $value); + } + global $_phpDocumentor_setting; + $priv = (isset($_phpDocumentor_setting['parseprivate']) && + $_phpDocumentor_setting['parseprivate'] == 'on'); + $a = new parserStringWithInlineTags(); + if (!$priv && $this->_pf_internal) { + if ($x = strpos($value, '}}')) { + $x = strrpos($value, '}}'); + $value = substr($value, $x + 1); + $this->_pf_internal = false; + } else { + $value = ''; + } + } elseif ($this->_pf_internal) { + if ($x = strpos($value, '}}')) { + $x = strrpos($value, '}}'); + $value = substr($value, 0, $x) . substr($value, $x+2); + } + } + $save = $value; + $value = explode('{@', $value); + $newval = array(); + if ($priv || (!$priv && !$this->_pf_internal)) { + // ignore anything between {@internal and }} + $a->add($value[0]); + } + for ($i=1; $i < count($value); $i++) { + if (substr($value[$i], 0, 1) == '}') { + if ($priv || (!$priv && !$this->_pf_internal)) { + // ignore anything between {@internal and }} + $a->add('{@' . substr($value[$i], 1)); + } + } elseif (substr($value[$i], 0, 2) == '*}') { + // used for inserting */ in code examples + if ($priv || (!$priv && !$this->_pf_internal)) { + // ignore anything between {@internal and }} + $a->add('*/' . substr($value[$i], 2)); + } + } else { + $save = $value[$i]; + $value[$i] = preg_split("/[\t ]/", str_replace("\t", ' ', $value[$i])); + $word = trim(array_shift($value[$i])); + $val = join(' ', $value[$i]); + if (trim($word) == 'internal') { + if ($this->_pf_internal) { + addErrorDie(PDERROR_NESTED_INTERNAL); + } + $this->_pf_internal = true; + $value[$i] = substr($save, strlen('internal') + 1); + if (!$value[$i]) { + // substr can set this to false + $value[$i] = ''; + } + if (strpos($value[$i], '}}') !== false) { + $x = strrpos($value[$i], '}}'); + // strip internal and cycle as if it were normal text. + $startval = substr($value[$i], 0, $x); + if ($priv) { + $a->add($startval); + } + $value[$i] = substr($value[$i], $x + 2); + if (!$value[$i]) { + $value[$i] = ''; + } + $this->_pf_internal = false; + $a->add($value[$i]); + continue; + } elseif ($priv) { + $a->add($value[$i]); + } + continue; + } + if (in_array(str_replace('}', '', trim($word)), + $this->allowableInlineTags) + ) { + if (strpos($word, '}')) { + $res = substr($word, strpos($word, '}')); + $word = str_replace('}', '', trim($word)); + $val = $res . $val; + } + if ($priv || (!$priv && !$this->_pf_internal)) { + // ignore anything between {@internal and }} + if ($word == 'source') { + $this->_pf_get_source = true; + } + } + $val = explode('}', $val); + if (count($val) == 1) { + addError(PDERROR_UNTERMINATED_INLINE_TAG, + $word, '', $save); + } + $rest = $val; + $val = array_shift($rest); + $rest = join('}', $rest); + if (isset($this->inlineTagHandlers[$word])) { + $handle = $this->inlineTagHandlers[$word]; + } else { + $handle = $this->inlineTagHandlers['*']; + } + $val = $this->$handle($word, $val); + if ($priv || (!$priv && !$this->_pf_internal)) { + // ignore anything between {@internal and }} + $a->add($val); + } + if ($this->_pf_internal) { + if (($x = strpos($rest, '}}')) !== false) { + $value[$i] = $rest; + $startval = substr($value[$i], 0, $x); + if ((false !== $startval) && $priv) { + $a->add($startval); + } + $value[$i] = substr($value[$i], $x + 2); + if (!$value[$i]) { + $value[$i] = ''; + } + $this->_pf_internal = false; + $a->add($value[$i]); + } else { + $rest = explode('}}', $rest); + if ($priv) { + $a->add(array_shift($rest)); + } + $this->_pf_internal = false; + // try this line again without internal + $value[$i--] = join('}}', $rest); + continue; + } + } else { + $a->add($rest); + } + } else { + $val = $word . ' ' . $val; + if ($priv || (!$priv && !$this->_pf_internal)) { + // ignore anything between {@internal and }} + $a->add('{@' . $val); + } + } + } + } + return $a; + } + + /**#@+ + * @param string $name name of the tag + * @param string $value any parameters passed to the inline tag + * @access private + */ + /** + * Most inline tags require no special processing + * + * @return mixed some type of parser_*_InlineTag object + */ + function handleDefaultInlineTag($name, $value) + { + $tag = 'parser' . ucfirst($name) . 'InlineTag'; + return new $tag($value, $value); + } + + /** + * Handle the inline {@}link} tag + * + * @return parserLinkInlineTag + * @tutorial tags.inlinelink.pkg + */ + function handleLinkInlineTag($name, $value) + { + // support hyperlinks of any protocol + if (is_numeric(strpos($value, '://')) || + (strpos(trim($value), 'mailto:') === 0) + ) { + $value = str_replace('\\,', '###commanana####', $value); + if (strpos($value, ',')) { + $val = new parserLinkInlineTag($value, $value); + } elseif (strpos(trim($value), ' ')) { + // if there is more than 1 parameter, + // the stuff after the space is the hyperlink text + $i1 = strpos(trim($value), ' ') + 1; + $link = substr(trim($value), 0, $i1 - 1); + $text = substr(trim($value), $i1); + $val = new parserLinkInlineTag($link, $text); + } else { + $val = new parserLinkInlineTag($value, $value); + } + } else { + $value = str_replace('\\,', '###commanana####', $value); + if (!strpos($value, ',')) { + $testp = explode('#', $value); + if (count($testp) - 1) { + $val = new parserLinkInlineTag($value, $testp[1]); + } else { + $val = new parserLinkInlineTag($value, $value); + } + } else { + $val = new parserLinkInlineTag($value, $value); + } + } + return $val; + } + /**#@-*/ + + /**#@+ + * @access private + * @param string $name name of tag + * @param array $value all words in the tag that were separated by a space ' ' + * @return void + */ + /** + * Most tags only need the value as a string + * + * @uses getInlineTags() all tag handlers check their values for inline tags + * @uses parserDocBlock::addKeyword() + */ + function defaultTagHandler($name, $value) + { + $dtype = $this->_pv_dtype; + $this->$dtype->addKeyword($name, $this->getInlineTags(join(' ', $value))); + } + + /** + * handles the @example tag + * + * @tutorial tags.example.pkg + * @uses parserDocBlock::addExample() + */ + function exampleTagHandler($name, $value) + { + $dtype = $this->_pv_dtype; + $this->$dtype->addExample($this->getInlineTags(join(' ', $value)), + $this->_path); + } + + /** + * handles the @filesource tag + * + * @tutorial tags.filesource.pkg + * @uses phpDocumentorTWordParser::getFileSource() retrieves the source for + * use in the @filesource tag + * @uses parserDocBlock::addFileSource() + */ + function filesourceTagHandler($name, $value) + { + $dtype = $this->_pv_dtype; + $this->$dtype->addFileSource($this->_path, $this->_wp->getFileSource()); + } + + /** + * handles the @uses tag + * + * @tutorial tags.uses.pkg + * @uses parserDocBlock::addUses() + */ + function usesTagHandler($name, $value) + { + $dtype = $this->_pv_dtype; + $seel = ''; + while ($seel == '' && count($value)) { + $seel = array_shift($value); + } + $this->$dtype->addUses($this->getInlineTags($seel), + $this->getInlineTags(join(' ', $value))); + } + + /** + * handles the @author tag + * + * @tutorial tags.author.pkg + * @uses parserDocBlock::addKeyword() + */ + function authorTagHandler($name, $value) + { + $dtype = $this->_pv_dtype; + $value = join(' ', $value); + if ((strpos($value, '<') !== false) && (strpos($value, '>') !== false)) { + $email = substr($value, + strpos($value, '<') + 1, + strpos($value, '>') - strpos($value, '<') - 1); + $value = str_replace('<' . $email . '>', + '<{@link mailto:' . $email . ' ' . $email . '}>', + $value); + } + $this->$dtype->addKeyword('author', $this->getInlineTags($value)); + } + + /** + * handles the @package tag + * + * @tutorial tags.package.pkg + * @uses parserDocBlock::setExplicitPackage() + */ + function packageTagHandler($name, $value) + { + if (count($value) && empty($value[0])) { + $found = false; + // CRB - I believe this loop is correct in not having a body... + // I think it is only to determine the $i value needed + // by the one array_splice() call... + for ($i=0; $i < count($value) && !strlen($value[$i]); $i++); + array_splice($value, 0, $i); + } + $this->defaultTagHandler($name, $value); + $dtype = $this->_pv_dtype; + $this->$dtype->setExplicitPackage(); + } + + /** + * handles the @category tag + * + * @tutorial tags.category.pkg + * @uses parserDocBlock::setExplicitCategory() + */ + function categoryTagHandler($name, $value) + { + if (count($value) && empty($value[0])) { + $found = false; + // CRB - I believe this loop is correct in not having a body... + // I think it is only to determine the $i value needed + // by the one array_splice() call... + for ($i=0; $i < count($value) && !strlen($value[$i]); $i++); + array_splice($value, 0, $i); + } + $this->defaultTagHandler($name, $value); + $dtype = $this->_pv_dtype; + $this->$dtype->setExplicitCategory(); + } + + /** + * handles the @global tag + * + * @tutorial tags.global.pkg + * @uses parserDocBlock::addFuncGlobal() + */ + function globalTagHandler($name, $value) + { + $info = $this->retrieveType($value, true); + if (!$info) { + addError(PDERROR_MALFORMED_TAG, '@global'); + } + $type = $info['type']; + $var = $info['var']; + $desc = $info['desc']; + $dtype = $this->_pv_dtype; + if (!$var && empty($desc)) { + if ($type{0} == '$') { + addError(PDERROR_MALFORMED_GLOBAL_TAG); + } + return $this->$dtype->addFuncGlobal($type, + new parserStringWithInlineTags); + } + if ($var) { + // global define + $this->_pv_global_type = $type; + if (!empty($desc)) { + $var .= ' '.$desc; + } + $this->findGlobal(trim($var)); + } elseif (!empty($desc)) { + // function global + if ($type{0} == '$') { + addError(PDERROR_MALFORMED_GLOBAL_TAG); + } + $this->$dtype->addFuncGlobal($type, $this->getInlineTags($desc)); + } else { + addError(PDERROR_MALFORMED_GLOBAL_TAG); + } + } + + /** + * handles the @staticvar tag + * + * @tutorial tags.staticvar.pkg + * @uses parserDocBlock::addStaticVar() + */ + function staticvarTagHandler($name, $value) + { + $info = $this->retrieveType($value, true); + if (!$info) { + addError(PDERROR_MALFORMED_TAG, '@staticvar'); + } + $type = $info['type']; + $var = $info['var']; + $desc = $info['desc']; + $dtype = $this->_pv_dtype; + if (!$var && empty($desc)) { + $this->$dtype->addStaticVar(null, $type, + new parserStringWithInlineTags); + } else { + if ($var) { + $this->$dtype->addStaticVar($var, $type, + $this->getInlineTags($desc)); + } else { + $this->$dtype->addStaticVar(null, $type, + $this->getInlineTags($desc)); + } + } + } + + /** + * handles the @param tag + * + * @tutorial tags.param.pkg + * @uses parserDocBlock::addParam() + */ + function paramTagHandler($name, $value) + { + $info = $this->retrieveType($value, true); + if (!$info) { + addError(PDERROR_MALFORMED_TAG, '@param'); + return; + } + $type = $info['type']; + $var = $info['var']; + $desc = $info['desc']; + $dtype = $this->_pv_dtype; + if (!$var && empty($desc)) { + $this->$dtype->addParam(null, $type, new parserStringWithInlineTags); + } else { + if ($var) { + $this->$dtype->addParam($var, $type, $this->getInlineTags($desc)); + } else { + $this->$dtype->addParam(null, $type, $this->getInlineTags($desc)); + } + } + } + + /** + * handles the @return tag + * + * @tutorial tags.return.pkg + * @uses parserDocBlock::addReturn() + */ + function returnTagHandler($name, $value) + { + $info = $this->retrieveType($value, true); + if (!$info) { + addError(PDERROR_MALFORMED_TAG, '@return'); + return; + } + $type = $info['type']; + $desc = $info['desc']; + $dtype = $this->_pv_dtype; + $this->$dtype->addReturn($type, $this->getInlineTags($desc)); + } + + /** + * handles the @var tag + * + * @tutorial tags.var.pkg + * @uses parserDocBlock::addVar() + */ + function varTagHandler($name, $value) + { + $info = $this->retrieveType($value, true); + if (!$info) { + addError(PDERROR_MALFORMED_TAG, '@var'); + } + $type = $info['type']; + $desc = $info['desc']; + $dtype = $this->_pv_dtype; + $this->$dtype->addVar($type, $this->getInlineTags($desc)); + } + + /** + * Handles @property(-read or -write) and @method magic tags + * + * @tutorial tags.method.pkg + * @tutorial tags.property.pkg + * @uses parserDocBlock::addProperty() + */ + function propertyTagHandler($name, $value) + { + $info = $this->retrieveType($value, true); + if (!$info) { + addError(PDERROR_MALFORMED_TAG, '@' . $name); + } + $type = $info['type']; + $var = $info['var']; + $desc = $info['desc']; + $dtype = $this->_pv_dtype; + $this->$dtype->addProperty($name, $var, $type, $this->getInlineTags($desc)); + } + /**#@-*/ + + /**#@+ + * @access private + */ + + /** + * Retrieve the type portion of a @tag type description + * + * Tags like @param, @return and @var all have a PHP type portion in their + * description. Since the type may contain the expression "object blah" + * where blah is a classname, it makes parsing out the type field complex. + * + * Even more complicated is the case where a tag variable can contain + * multiple types, such as object blah|object blah2|false, and so this + * method handles these cases. + * + * @param array $value array of words that were separated by spaces + * @param bool $checkforvar flag to determine whether to check for the end of a + * type is defined by a $varname + * + * @return bool|array FALSE if there is no value, + * or an array of Format: + * <pre> + * array( + * 'type' => string, + * 'var' => false|string variable name, + * 'desc' => rest of the tag + * ) + * </pre> + */ + function retrieveType($value, $checkforvar = false) + { + if (!count($value)) { + return false; + } + $result = array(); + $types = ''; + // remove empty entries resulting from extra spaces between @tag and type + $this->_removeWhiteSpace($value, 0); + $index = 0; + if (trim($value[0]) == 'object') { + $types .= array_shift($value) . ' '; + $this->_removeWhiteSpace($value, 0); + if (!count($value)) { + // was just passed "object" + $result = array('type' => rtrim($types), 'desc' => ''); + if ($checkforvar) { + $result['var'] = false; + } + return $result; + } + if ($value[0]{0} == '$' || substr($value[0], 0, 2) == '&$') { + // was just passed "object" and the next thing is a variable name + $result['var'] = trim($value[0]); + $result['type'] = 'object'; + array_shift($value); + $result['desc'] = join(' ', $value); + return $result; + } + } + $done = false; + do { + // this loop checks for type|type|type + // and for type|object classname|type|object classname2 + if (strpos($value[0], '|')) { + $temptypes = explode('|', $value[0]); + while (count($temptypes)) { + $type = array_shift($temptypes); + $types .= $type; + if (count($temptypes)) { + $types .= '|'; + } + } + if (trim($type) == 'object') { + $types .= ' '; + $this->_removeWhiteSpace($value, 0); + } else { + $done = true; + } + array_shift($value); + if (isset ($value[0]) && strlen($value[0]) && ($value[0]{0} == '$' || + substr($value[0], 0, 2) == '&$') + ) { + // was just passed "object" and the next thing is a variable name + $result['var'] = trim($value[0]); + $result['type'] = $types; + array_shift($value); + $result['desc'] = join(' ', $value); + return $result; + } + } else { + $types .= $value[0]; + array_shift($value); + $done = true; + } + } while (!$done && count($value)); + $result['type'] = rtrim($types); + $this->_removeWhiteSpace($value, 0); + if ($checkforvar) { + if (!count($value)) { + $result['var'] = false; + } else { + /* + * check for: + * variable name ($) + * var passed by reference (&$) + * method name (only used by magic method) + */ + if (substr($value[0], 0, 1) == '$' || + substr($value[0], 0, 2) == '&$' || + substr($value[0], -2, 2) == '()' + ) { + $result['var'] = trim($value[0]); + array_shift($value); + } else { + $result['var'] = false; + } + } + } + $result['desc'] = join(' ', $value); + return $result; + } + + /** + * remove whitespace from a value + * + * @param array &$value array of string + * @param integer $index index to seek non-whitespace to + * + * @return void + */ + function _removeWhiteSpace(&$value, $index) + { + if (count($value) > $index && empty($value[$index])) { + $found = false; + // CRB - I believe this loop is correct in not having a body... + // I think it is only to determine the $i value needed + // by the one array_splice() call... + for ($i=$index; $i < count($value) && !strlen($value[$i]); $i++); + array_splice($value, $index, $i - $index); + } + } + + /** + * Retrieve all the tokens that represent the definition of the global variable + * + * {@source} + * + * @param string $name the global variable to find + * + * @return void + */ + function findGlobal($name) + { + $tokens = token_get_all('<?php ' . $name); + $tokens = array_slice($tokens, 1); + $this->_wp->findGlobal($tokens); + $this->_pv_findglobal = $name; + } + + /** + * this function checks whether parameter $word + * is a token for pushing a new event onto the Event Stack. + * + * @param string $word the word to check + * @param int $pevent the event to push + * + * @return mixed returns false, or the event number + */ + function checkEventPush($word, $pevent) + { + if (is_array($word) && $word[0] == T_STRING) { + $word = $word[1]; + } + if (is_array($word)) { + $pushEvent = &$this->tokenpushEvent; + $word = $word[0]; + } else { + $pushEvent = &$this->wordpushEvent; + $word = strtolower($word); + } + $e = false; + if (isset($pushEvent[$pevent])) { + if (isset($pushEvent[$pevent][$word])) { + $e = $pushEvent[$pevent][$word]; + } + } + if ($e) { + $this->_event_stack->pushEvent($e); + return $e; + } else { + return false; + } + } + + /** + * this function checks whether parameter $word + * is a token for popping the current event off of the Event Stack. + * + * @param string $word the word to check + * @param int $pevent the event to pop + * + * @return mixed returns false, or the event number popped off of the stack + */ + function checkEventPop($word, $pevent) + { + if (is_array($word) && $word[0] == T_STRING) { + $word = $word[1]; + } + if (is_array($word)) { + $popEvent = &$this->tokenpopEvent; + $word = $word[0]; + } else { + $popEvent = &$this->wordpopEvent; + $word = strtolower($word); + } + if (!isset($popEvent[$pevent])) { + return false; + } + if (in_array($word, $popEvent[$pevent])) { + return $this->_event_stack->popEvent(); + } else { + return false; + } + } + + /** + * returns the token from the $word array + * + * @param mixed $word the token array + * + * @return mixed the token from the array, + * or FALSE if it's not an array + */ + function getToken($word) + { + if (is_array($word)) { + return $word[0]; + } + return false; + } + + /** + * setup the parser tokens, and the pushEvent/popEvent arrays + * + * @return void + * @see $tokens, $pushEvent, $popEvent + */ + function setupStates() + { + unset($this->_wp); + $this->_wp = new phpDocumentorTWordParser; + $this->_pv_class = null; + $this->_pv_cur_class = null; + $this->_pv_define = null; + $this->_pv_define_name = null; + $this->_pv_define_value = null; + $this->_pv_define_params_data = null; + $this->_pv_dtype = null; + $this->_pv_docblock = null; + $this->_pv_dtemplate = null; + $this->_pv_func = null; + $this->_pv_findglobal = null; + $this->_pv_global_name = null; + $this->_pv_global_val = null; + $this->_pv_globals = null; + $this->_pv_global_count = null; + $this->_pv_include_params_data = null; + $this->_pv_include_name = null; + $this->_pv_include_value = null; + $this->_pv_linenum = null; + $this->_pv_periodline = null; + $this->_pv_paren_count = 0; + $this->_pv_statics = null; + $this->_pv_static_count = null; + $this->_pv_static_val = null; + $this->_pv_quote_data = null; + $this->_pv_function_data = null; + $this->_pv_var = null; + $this->_pv_varname = null; + $this->_pv_const = null; + $this->_pv_constname = null; + $this->_pv_function_param_type = null; + $this->_pf_definename_isset = false; + $this->_pf_includename_isset = false; + $this->_pf_get_source = false; + $this->_pf_getting_source = false; + $this->_pf_in_class = false; + $this->_pf_in_define = false; + $this->_pf_in_global = false; + $this->_pf_in_include = false; + $this->_pf_in_var = false; + $this->_pf_in_const = false; + $this->_pf_funcparam_val = false; + $this->_pf_quote_active = false; + $this->_pf_reset_quote_data = true; + $this->_pf_useperiod = false; + $this->_pf_var_equals = false; + $this->_pf_const_equals = false; + $this->_event_stack = new EventStack; + } + + /** + * Creates the state arrays + * + * @return void + */ + function setupEventStates() + { + if (!defined('T_DOC_COMMENT')) { + define('T_DOC_COMMENT', T_DOC_COMMENT); + } + /**************************************************************/ + + $this->wordpushEvent[PARSER_EVENT_LOGICBLOCK] = + array( + "{" => PARSER_EVENT_LOGICBLOCK, + '"' => PARSER_EVENT_QUOTE, + ); + $this->tokenpushEvent[PARSER_EVENT_LOGICBLOCK] = + array( + T_GLOBAL => PARSER_EVENT_FUNC_GLOBAL, + T_STATIC => PARSER_EVENT_STATIC_VAR, + T_START_HEREDOC => PARSER_EVENT_EOFQUOTE, + T_CURLY_OPEN => PARSER_EVENT_LOGICBLOCK, + T_DOLLAR_OPEN_CURLY_BRACES => PARSER_EVENT_LOGICBLOCK, + ); + + $this->wordpopEvent[PARSER_EVENT_LOGICBLOCK] = array("}"); + $this->tokenpopEvent[PARSER_EVENT_LOGICBLOCK] = array(T_CURLY_OPEN); + /**************************************************************/ + + $this->tokenpushEvent[PARSER_EVENT_NOEVENTS] = + array( + T_OPEN_TAG => PARSER_EVENT_PHPCODE, + ); + + /**************************************************************/ + + $this->tokenpopEvent[PARSER_EVENT_EOFQUOTE] = array(T_END_HEREDOC); + /**************************************************************/ + + $this->tokenpushEvent[PARSER_EVENT_PHPCODE] = + array( + T_FUNCTION => PARSER_EVENT_FUNCTION, + T_ABSTRACT => PARSER_EVENT_ACCESS_MODIFIER, + T_CLASS => PARSER_EVENT_CLASS, + T_INTERFACE => PARSER_EVENT_CLASS, + T_INCLUDE_ONCE => PARSER_EVENT_INCLUDE, + T_INCLUDE => PARSER_EVENT_INCLUDE, + T_REQUIRE => PARSER_EVENT_INCLUDE, + T_REQUIRE_ONCE => PARSER_EVENT_INCLUDE, + T_COMMENT => PARSER_EVENT_DOCBLOCK, + T_DOC_COMMENT => PARSER_EVENT_DOCBLOCK, + //"/**#@+" => PARSER_EVENT_DOCBLOCK_TEMPLATE, + //"/**#@-*/" => PARSER_EVENT_END_DOCBLOCK_TEMPLATE, + T_CLOSE_TAG => PARSER_EVENT_OUTPHP, + ); + $this->wordpushEvent[PARSER_EVENT_PHPCODE] = + array( + "define" => PARSER_EVENT_DEFINE, + ); + /**************************************************************/ + + $this->tokenpopEvent[PARSER_EVENT_OUTPHP] = array(T_OPEN_TAG); + /**************************************************************/ + + $this->wordpushEvent[PARSER_EVENT_FUNCTION] = + array( + '{' => PARSER_EVENT_LOGICBLOCK, + '(' => PARSER_EVENT_FUNCTION_PARAMS, + ); + $this->tokenpushEvent[PARSER_EVENT_FUNCTION] = + array( + T_COMMENT => PARSER_EVENT_COMMENT, + T_DOC_COMMENT => PARSER_EVENT_COMMENT, + ); + + $this->wordpopEvent[PARSER_EVENT_FUNCTION] = array("}",';'); + /**************************************************************/ + + $this->wordpopEvent[PARSER_EVENT_QUOTE] = array('"'); + /**************************************************************/ + + $this->tokenpushEvent[PARSER_EVENT_FUNCTION_PARAMS] = + array( + T_VARIABLE => PARSER_EVENT_FUNCTION_PARAM_VAR, + T_COMMENT => PARSER_EVENT_COMMENT, + T_DOC_COMMENT => PARSER_EVENT_COMMENT, + ); + $this->wordpopEvent[PARSER_EVENT_FUNCTION_PARAMS] = array(")"); + /**************************************************************/ + + $this->tokenpushEvent[PARSER_EVENT_FUNCTION_PARAM_VAR] = + array( + T_CONSTANT_ENCAPSED_STRING => PARSER_EVENT_QUOTE, + T_COMMENT => PARSER_EVENT_COMMENT, + T_DOC_COMMENT => PARSER_EVENT_COMMENT, + T_ARRAY => PARSER_EVENT_ARRAY, + ); + $this->wordpushEvent[PARSER_EVENT_FUNCTION_PARAM_VAR] = + array( + '"' => PARSER_EVENT_QUOTE, + "'" => PARSER_EVENT_QUOTE, + ); + $this->wordpopEvent[PARSER_EVENT_FUNCTION_PARAM_VAR] = array(",", ")"); + /**************************************************************/ + + $this->tokenpushEvent[PARSER_EVENT_ARRAY] = + array( + T_COMMENT => PARSER_EVENT_COMMENT, + T_DOC_COMMENT => PARSER_EVENT_COMMENT, + ); + $this->wordpopEvent[PARSER_EVENT_ARRAY] = array(")"); + /**************************************************************/ + + $this->tokenpushEvent[PARSER_EVENT_VAR_ARRAY] = + array( + T_COMMENT => PARSER_EVENT_VAR_ARRAY_COMMENT, + T_DOC_COMMENT => PARSER_EVENT_VAR_ARRAY_COMMENT, + ); + $this->wordpopEvent[PARSER_EVENT_VAR_ARRAY] = array(")"); + /**************************************************************/ + + $this->tokenpushEvent[PARSER_EVENT_FUNC_GLOBAL] = + array( + T_COMMENT => PARSER_EVENT_COMMENT, + T_DOC_COMMENT => PARSER_EVENT_COMMENT, + ); + $this->wordpopEvent[PARSER_EVENT_FUNC_GLOBAL] = array(";"); + /**************************************************************/ + + $this->tokenpushEvent[PARSER_EVENT_STATIC_VAR] = + array( + T_CONSTANT_ENCAPSED_STRING => PARSER_EVENT_QUOTE, + T_COMMENT => PARSER_EVENT_COMMENT, + T_DOC_COMMENT => PARSER_EVENT_COMMENT, + ); + $this->wordpushEvent[PARSER_EVENT_STATIC_VAR] = + array( + "=" => PARSER_EVENT_STATIC_VAR_VALUE, + ); + $this->wordpopEvent[PARSER_EVENT_STATIC_VAR] = array(";"); + /**************************************************************/ + + $this->tokenpushEvent[PARSER_EVENT_STATIC_VAR_VALUE] = + array( + T_CONSTANT_ENCAPSED_STRING => PARSER_EVENT_QUOTE, + T_COMMENT => PARSER_EVENT_COMMENT, + T_DOC_COMMENT => PARSER_EVENT_COMMENT, + T_ARRAY => PARSER_EVENT_ARRAY, + ); + $this->wordpushEvent[PARSER_EVENT_STATIC_VAR_VALUE] = + array( + '"' => PARSER_EVENT_QUOTE, + "'" => PARSER_EVENT_QUOTE, + ); + $this->wordpopEvent[PARSER_EVENT_STATIC_VAR_VALUE] = array(";",","); + /**************************************************************/ + + $this->tokenpushEvent[PARSER_EVENT_DEFINE] = + array( + T_COMMENT => PARSER_EVENT_COMMENT, + T_DOC_COMMENT => PARSER_EVENT_COMMENT, + T_CONSTANT_ENCAPSED_STRING => PARSER_EVENT_QUOTE, + ); + $this->wordpushEvent[PARSER_EVENT_DEFINE] = + array( + "(" => PARSER_EVENT_DEFINE_PARAMS, + ); + $this->wordpopEvent[PARSER_EVENT_DEFINE] = array(";"); + /**************************************************************/ + + $this->tokenpushEvent[PARSER_EVENT_INCLUDE] = + array( + T_COMMENT => PARSER_EVENT_COMMENT, + T_DOC_COMMENT => PARSER_EVENT_COMMENT, + ); + $this->wordpushEvent[PARSER_EVENT_INCLUDE] = + array( + "(" => PARSER_EVENT_INCLUDE_PARAMS, + ); + $this->wordpopEvent[PARSER_EVENT_INCLUDE] = array(";"); + /**************************************************************/ + + $this->tokenpushEvent[PARSER_EVENT_DEFINE_PARAMS] = + array( + T_COMMENT => PARSER_EVENT_COMMENT, + T_DOC_COMMENT => PARSER_EVENT_COMMENT, + T_START_HEREDOC => PARSER_EVENT_EOFQUOTE, + ); + $this->wordpushEvent[PARSER_EVENT_DEFINE_PARAMS] = + array( + "(" => PARSER_EVENT_DEFINE_PARAMS_PARENTHESIS, + '"' => PARSER_EVENT_QUOTE, + "'" => PARSER_EVENT_QUOTE, + ); + $this->wordpopEvent[PARSER_EVENT_DEFINE_PARAMS] = array(")"); + /**************************************************************/ + + $this->tokenpushEvent[PARSER_EVENT_INCLUDE_PARAMS] = + array( + T_COMMENT => PARSER_EVENT_COMMENT, + T_DOC_COMMENT => PARSER_EVENT_COMMENT, + ); + $this->wordpushEvent[PARSER_EVENT_INCLUDE_PARAMS] = + array( + "(" => PARSER_EVENT_INCLUDE_PARAMS_PARENTHESIS, + ); + $this->wordpopEvent[PARSER_EVENT_INCLUDE_PARAMS] = array(")"); + /**************************************************************/ + + $this->tokenpushEvent[PARSER_EVENT_DEFINE_PARAMS_PARENTHESIS] = + array( + T_COMMENT => PARSER_EVENT_COMMENT, + T_DOC_COMMENT => PARSER_EVENT_COMMENT, + ); + $this->wordpushEvent[PARSER_EVENT_DEFINE_PARAMS_PARENTHESIS] = + array( + "(" => PARSER_EVENT_DEFINE_PARAMS_PARENTHESIS, + '"' => PARSER_EVENT_QUOTE, + "'" => PARSER_EVENT_QUOTE, + ); + $this->wordpopEvent[PARSER_EVENT_DEFINE_PARAMS_PARENTHESIS] = array(")"); + /**************************************************************/ + + $this->tokenpushEvent[PARSER_EVENT_INCLUDE_PARAMS_PARENTHESIS] = + array( + T_COMMENT => PARSER_EVENT_COMMENT, + T_DOC_COMMENT => PARSER_EVENT_COMMENT, + ); + $this->wordpushEvent[PARSER_EVENT_INCLUDE_PARAMS_PARENTHESIS] = + array( + "(" => PARSER_EVENT_INCLUDE_PARAMS_PARENTHESIS, + ); + $this->wordpopEvent[PARSER_EVENT_INCLUDE_PARAMS_PARENTHESIS] = array(")"); + /**************************************************************/ + + $this->tokenpushEvent[PARSER_EVENT_VAR] = + array( + T_COMMENT => PARSER_EVENT_COMMENT, + T_DOC_COMMENT => PARSER_EVENT_COMMENT, + T_ARRAY => PARSER_EVENT_VAR_ARRAY, + ); + $this->wordpopEvent[PARSER_EVENT_VAR] = array(";"); + /**************************************************************/ + + $this->tokenpushEvent[PARSER_EVENT_CLASS_CONSTANT] = + array( + T_COMMENT => PARSER_EVENT_COMMENT, + T_DOC_COMMENT => PARSER_EVENT_COMMENT, + T_ARRAY => PARSER_EVENT_VAR_ARRAY, + ); + $this->wordpopEvent[PARSER_EVENT_CLASS_CONSTANT] = array(";"); + /**************************************************************/ + + $this->wordpopEvent[PARSER_EVENT_IMPLEMENTS] = array('{'); + /**************************************************************/ + + $this->tokenpushEvent[PARSER_EVENT_CLASS] = + array( + T_ABSTRACT => PARSER_EVENT_ACCESS_MODIFIER, + T_PUBLIC => PARSER_EVENT_ACCESS_MODIFIER, + T_PRIVATE => PARSER_EVENT_ACCESS_MODIFIER, + T_PROTECTED => PARSER_EVENT_ACCESS_MODIFIER, + T_STATIC => PARSER_EVENT_ACCESS_MODIFIER, + T_IMPLEMENTS => PARSER_EVENT_IMPLEMENTS, + T_CONST => PARSER_EVENT_CLASS_CONSTANT, + T_FUNCTION => PARSER_EVENT_FUNCTION, + T_VAR => PARSER_EVENT_VAR, + T_COMMENT => PARSER_EVENT_DOCBLOCK, + T_DOC_COMMENT => PARSER_EVENT_DOCBLOCK, + T_CLOSE_TAG => PARSER_EVENT_OUTPHP, + ); + $this->wordpopEvent[PARSER_EVENT_CLASS] = array("}"); + /**************************************************************/ + + $this->tokenpushEvent[PARSER_EVENT_DEFINE_GLOBAL] = + array( + T_COMMENT => PARSER_EVENT_COMMENT, + T_DOC_COMMENT => PARSER_EVENT_COMMENT, + ); + $this->wordpushEvent[PARSER_EVENT_DEFINE_GLOBAL] = + array( + "=" => PARSER_EVENT_GLOBAL_VALUE, + ); + $this->wordpopEvent[PARSER_EVENT_DEFINE_GLOBAL] = array(";"); + /**************************************************************/ + + $this->tokenpushEvent[PARSER_EVENT_GLOBAL_VALUE] = + array( + T_ARRAY => PARSER_EVENT_ARRAY, + T_COMMENT => PARSER_EVENT_COMMENT, + T_DOC_COMMENT => PARSER_EVENT_COMMENT, + T_START_HEREDOC => PARSER_EVENT_EOFQUOTE, + ); + $this->wordpushEvent[PARSER_EVENT_GLOBAL_VALUE] = + array( + '"' => PARSER_EVENT_QUOTE, + "'" => PARSER_EVENT_QUOTE, + ); + $this->wordpopEvent[PARSER_EVENT_GLOBAL_VALUE] = array(";"); + } + + /** + * initializes all the setup + * + * @param mixed &$data the data parser (?) + * + * @return void + */ + function configWordParser(&$data) + { + $this->_wp->setup($data); + $this->_wp->setWhitespace(false); + } + + /**#@-*/ + +} +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/phpDocumentorTWordParser.inc b/buildscripts/PhpDocumentor/phpDocumentor/phpDocumentorTWordParser.inc new file mode 100755 index 00000000..fb513df7 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/phpDocumentorTWordParser.inc @@ -0,0 +1,386 @@ +<?php +/** + * tokenizer extension-based lexer for PHP code + * + * phpDocumentor :: automatic documentation generator + * + * PHP versions 4 and 5 + * + * Copyright (c) 2002-2006 Gregory Beaver + * + * LICENSE: + * + * This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General + * Public License as published by the Free Software Foundation; + * either version 2.1 of the License, or (at your option) any + * later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage Parsers + * @author Gregory Beaver <cellog@php.net> + * @copyright 2002-2007 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version CVS: $Id: phpDocumentorTWordParser.inc 287887 2009-08-30 06:10:55Z ashnazg $ + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @since 1.2 + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - PHPCS needs to ignore CVS Id length + */ + +/** + * Like WordParser, but expects an array of tokens from the tokenizer + * instead of a string. + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @subpackage WordParsers + * @author Gregory Beaver <cellog@php.net> + * @copyright 2002-2007 Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version Release: 1.4.3 + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @since 1.2 + * @todo CS cleanup - change package to PhpDocumentor + * @todo CS cleanup - change classname to PhpDocumentor_* + */ +class phpDocumentorTWordParser extends WordParser +{ + /**#@+ + * @access private + */ + /** + * tokenized array from {@link token_get_all()} + * @var array + */ + var $_all; + /** + * List of tokens that can contain a newline + * @var array + */ + var $_nl_check = array( + T_WHITESPACE, + T_ENCAPSED_AND_WHITESPACE, + T_CONSTANT_ENCAPSED_STRING, + T_COMMENT, + T_DOC_COMMENT, + T_OPEN_TAG, + T_CLOSE_TAG, + T_INLINE_HTML, + T_START_HEREDOC, + ); + /** + * @var array + */ + var $_global_search; + /** + * current source line number (relative) + * @var integer + */ + var $_sourceline; + /** + * Source of the entire file, parsed into arrays of tokens on each line + * @var array + */ + var $_file_source = array(); + /** + * Line number the last comment was on + * @var integer + */ + var $_docblock_linenum; + /**#@-*/ + + /** + * Uses {@link token_get_all()} to tokenize the source code. + * {@internal + * Also, it divides the source tokens into separate lines for use by + * the @filesource tag. + * + * {@source}}} + * + * @param string &$input source code + * + * @return void + */ + function setup(&$input) + { + $input = rtrim(ltrim($input, "\r\n")); + $this->data = &$input; + // fix php warnings on invalid source code + $this->_all = @token_get_all($input); + $this->_file_source = array(); + $this->addFileSource($this->_all); + $this->_sourceline = 0; + $this->pos = 0; + $this->linenum = 0; + } + + /** + * loads up next set of source code + * + * @return array source code array + */ + function getSource() + { + $source = $this->source; + $this->source = array(); + $this->getsource = false; + return $source; + } + + /** + * gets the source code tokens + * + * @return array source code tokens split up by line number + */ + function getFileSource() + { + return $this->_file_source; + } + + /** + * Begin retrieving source code + * + * @param string $word word to add the beginning of source code + * + * @return void + * @access private + * @todo CS cleanup - rename to retrieveSource for camelCase rule + */ + function retrievesource($word = '') + { + $this->source = array(array($word)); + $this->_sourceline = 0; + $this->getsource = true; + } + + /** + * Utility function to determine whether two tokens from the tokenizer are equal + * + * @param mixed $a first token + * @param mixed $b second token + * + * @return bool whether or not the tokens are equal + * @static + */ + function tokenEquals($a, $b) + { + if (is_array($a)) $a = $a[1]; + if (is_array($b)) $b = $b[1]; + return $a == $b; + } + + /** + * Utility function to convert a series of tokens into a string + * + * @param array $a array of tokens + * + * @return string the resulting string + * @static + */ + function concatTokens($a) + { + $b = ''; + foreach ($a as $c) { + if (is_array($c)) { + $c = $c[1]; + } + $b .= $c; + } + return $b; + } + + /** + * Retrieve a token for the phpDocumentorTParser + * {@internal + * This method adds source code to the array for a function to be returned + * to a {@}source} tag, and will return the token unless it is T_WHITESPACE + * and {@link $returnWhiteSpace} is false. + * + * The global variable search is more complicated than it is in the + * WordParser, as we have to compare an array of tokens to each other, and + * that is what this code does}} + * + * @return string|array token from tokenizer + */ + function getWord() + { + if (!isset($this->_all[$this->pos])) { + return false; + } + + $oldlinenum = $this->linenum; + $word = $this->_all[$this->pos++]; + + // if we're looking for a global variable declaration, then this section + // will search the upcoming tokens to see if they match the tokens + // that define the global variable + if (isset($this->_global_search)) { + $pos = $this->pos; + $gpos = 0; + $found = false; + if ($this->tokenEquals($word, $this->_global_search[$gpos++])) { + $found = true; + for (;$gpos<count($this->_global_search);$gpos++, $pos++) { + if (isset($this->_all[$pos]) && + !$this->tokenEquals($this->_global_search[$gpos], + $this->_all[$pos]) + ) { + $found = false; + } + } + } + if ($found) { + $a = $this->concatTokens($this->_global_search); + $this->pos += count($this->_global_search) - 1; + unset($this->_global_search); + return $a; + } + } + if ($this->getsource) { + $this->addSource($word); + } + if (is_array($word)) { + if (in_array($word[0], $this->_nl_check)) { + $this->linenum += substr_count($word[1], "\n"); + } + if ($word[0] == T_WHITESPACE && !$this->returnWhiteSpace) { + return $this->getWord(); + } + // seeing if we can get line numbers out of the beast + } + if (is_array($word) && $word[0] == T_COMMENT) { + $this->_docblock_linenum = $oldlinenum; + } + return $word; + } + + /** + * Wrapper for {@link addSource()} used to retrieve the entire source code + * organized by line number in setup() + * + * @param array $word full file source code + * + * @return void + */ + function addFileSource($word) + { + $this->_sourceline = 0; + foreach ($word as $token) { + $this->addSource($token, true); + } + // var_dump($this->_file_source); + } + + /** + * Generate source token arrays organized by line number + * + * This code will split up tokens that contain "\n" and add them to the + * source code as separate tokens on different lines. + * + * @param array|string $word token to add + * @param bool $file true if this should be added + * to {@link $_file_source} + * + * @return void + * @uses _set_sars() + */ + function addSource($word, $file = false) + { + if (is_array($word)) { + $lines = str_replace("\r", '', explode("\n", $word[1])); + foreach ($lines as $i => $line) { + $this->_set_sars($file, array($word[0], $line)); + if ($i < count($lines) - 1) { + // increment sourceline + $this->_sourceline++; + } + } + } else { + $this->_set_sars($file, $word); + } + } + + /** + * Add tokens to source code + * + * {@source} + * + * @param bool $type true if this is file source, + * otherwise it is function source + * @param string|array $word token to add + * + * @return void + * @access private + * @todo CS cleanup - rename to _setSars for camelCasing rule + */ + function _set_sars($type, $word) + { + if ($type) { + $this->_file_source[$this->_sourceline][] = $word; + } else { + $this->source[$this->_sourceline][] = $word; + } + } + + /** + * Tell the phpDocumentorTWordParser to return the entire global variable + * if it is found. + * + * @param array $tokens tokens that represent the global variable definition + * + * @return void + * @uses $_global_search + */ + function findGlobal($tokens) + { + if (!$tokens) { + unset($this->_global_search); + } else { + $this->_global_search = $tokens; + } + } + + /** + * backs the parser up to the previous position + * + * @return int|void can return a word + */ + function backupPos() + { + $this->pos--; + $word = $this->_all[$this->pos]; + if ($this->getsource) { + unset($this->source[$this->_sourceline] + [count($this->source[$this->_sourceline]) - 1]); + if (empty($this->source[$this->_sourceline])) { + unset($this->source[$this->_sourceline]); + } else { + $this->source[$this->_sourceline] + = array_values($this->source[$this->_sourceline]); + } + } + if (is_array($word)) { + if ($word[0] == T_WHITESPACE && !$this->returnWhiteSpace) { + return $this->getWord(); + } + // seeing if we can get line numbers out of the beast + if (in_array($word[0], $this->_nl_check)) { + $this->linenum -= substr_count($word[1], "\n"); + } + } + } +} +?> diff --git a/buildscripts/PhpDocumentor/phpDocumentor/phpdoc.inc b/buildscripts/PhpDocumentor/phpDocumentor/phpdoc.inc new file mode 100755 index 00000000..7fdbaba4 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/phpdoc.inc @@ -0,0 +1,66 @@ +<?php +/** + * startup file + * + * phpDocumentor :: automatic documentation generator + * + * PHP versions 4 and 5 + * + * Copyright (c) 2000-2007 Joshua Eichorn, Gregory Beaver + * + * LICENSE: + * + * This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General + * Public License as published by the Free Software Foundation; + * either version 2.1 of the License, or (at your option) any + * later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @author Joshua Eichorn <jeichorn@phpdoc.org> + * @author Gregory Beaver <cellog@php.net> + * @copyright 2000-2007 Joshua Eichorn, Gregory Beaver + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version CVS: $Id: phpdoc.inc 243933 2007-10-10 01:18:25Z ashnazg $ + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @since 0.1 + * @filesource + * @todo CS cleanup - change package to PhpDocumentor + */ + + +// set up include path so we can find all files, no matter what +$a = explode('/', str_replace('\\', '/', dirname(realpath(__FILE__)))); +array_pop($a); +$GLOBALS['_phpDocumentor_install_dir'] = join('/', $a); +// add my directory to the include path, and make it first, should fix any errors +if (substr(PHP_OS, 0, 3) == 'WIN') +ini_set('include_path', + $GLOBALS['_phpDocumentor_install_dir'].';'.ini_get('include_path')); +else +ini_set('include_path', + $GLOBALS['_phpDocumentor_install_dir'].':'.ini_get('include_path')); + +/** + * All command-line handling from previous version has moved to here + * + * Many settings also moved to phpDocumentor.ini + */ +require_once "phpDocumentor/Setup.inc.php"; + +$phpdoc = new phpDocumentor_setup; +$phpdoc->readCommandLineSettings(); +$phpdoc->setupConverters(); +$phpdoc->createDocs(); +?> |