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 | |
parent | 1f09b786730956d01c48a82272617a0f8b2597f0 (diff) |
updating phpDocumentor, part 2: add new version
Diffstat (limited to 'buildscripts')
967 files changed, 133115 insertions, 2415 deletions
diff --git a/buildscripts/PhpDocumentor/LICENSE b/buildscripts/PhpDocumentor/LICENSE new file mode 100755 index 00000000..fab24cc6 --- /dev/null +++ b/buildscripts/PhpDocumentor/LICENSE @@ -0,0 +1,145 @@ +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. +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
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/PHPLICENSE.txt b/buildscripts/PhpDocumentor/PHPLICENSE.txt deleted file mode 100644 index c88b3873..00000000 --- a/buildscripts/PhpDocumentor/PHPLICENSE.txt +++ /dev/null @@ -1,69 +0,0 @@ ---------------------------------------------------------------------
- The PHP License, version 3.0
-Copyright (c) 1999 - 2002 The PHP Group. All rights reserved.
---------------------------------------------------------------------
-
-Redistribution and use in source and binary forms, with or without
-modification, is permitted provided that the following conditions
-are met:
-
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in
- the documentation and/or other materials provided with the
- distribution.
-
- 3. The name "PHP" must not be used to endorse or promote products
- derived from this software without prior written permission. For
- written permission, please contact group@php.net.
-
- 4. Products derived from this software may not be called "PHP", nor
- may "PHP" appear in their name, without prior written permission
- from group@php.net. You may indicate that your software works in
- conjunction with PHP by saying "Foo for PHP" instead of calling
- it "PHP Foo" or "phpfoo"
-
- 5. The PHP Group may publish revised and/or new versions of the
- license from time to time. Each version will be given a
- distinguishing version number.
- Once covered code has been published under a particular version
- of the license, you may always continue to use it under the terms
- of that version. You may also choose to use such covered code
- under the terms of any subsequent version of the license
- published by the PHP Group. No one other than the PHP Group has
- the right to modify the terms applicable to covered code created
- under this License.
-
- 6. Redistributions of any form whatsoever must retain the following
- acknowledgment:
- "This product includes PHP, freely available from
- <http://www.php.net/>".
-
-THIS SOFTWARE IS PROVIDED BY THE PHP DEVELOPMENT TEAM ``AS IS'' AND
-ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE PHP
-DEVELOPMENT TEAM OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
-INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
-STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
-OF THE POSSIBILITY OF SUCH DAMAGE.
-
---------------------------------------------------------------------
-
-This software consists of voluntary contributions made by many
-individuals on behalf of the PHP Group.
-
-The PHP Group can be contacted via Email at group@php.net.
-
-For more information on the PHP Group and the PHP project,
-please see <http://www.php.net>.
-
-This product includes the Zend Engine, freely available at
-<http://www.zend.com>.
-
diff --git a/buildscripts/PhpDocumentor/new_phpdoc.php b/buildscripts/PhpDocumentor/new_phpdoc.php index bac5e514..176d2286 100644 --- a/buildscripts/PhpDocumentor/new_phpdoc.php +++ b/buildscripts/PhpDocumentor/new_phpdoc.php @@ -1,662 +1,33 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<?php
-/**
- * Advanced Web Interface to phpDocumentor
- * @see phpdoc.php
- * @package phpDocumentor
- * @deprecated in favor of docbuilder (see {@link docbuilder/config.php})
- * @filesource
- */
-//
-//
-// An HTML interface for Joshua Eichorn's phpDocumentor
-// Author: Juan Pablo Morales <ju-moral@uniandes.edu.co>
-// Joshua Eichorn <jeichorn@phpdoc.org>
-// Gregory Beaver <cellog@users.sourceforge.net>
-//
-// phpDocumentor, a program for creating javadoc style documentation from php code
-// Copyright (C) 2000-2002 Joshua Eichorn
-//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation; either version 2 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-//
-// Copyleft 2001 Juan Pablo Morales
-
-if (!function_exists('version_compare'))
-{
- print "phpDocumentor requires PHP version 4.1.0 or greater to function";
- exit;
-}
-
-// set up include path so we can find all files, no matter what
-$GLOBALS['_phpDocumentor_install_dir'] = dirname(realpath(__FILE__));
-// 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'));
-
-/**
-* common file information
-*/
-include_once("phpDocumentor/common.inc.php");
-
-// find the .ini directory by parsing phpDocumentor.ini and extracting _phpDocumentor_options[userdir]
-$ini = phpDocumentor_parse_ini_file($_phpDocumentor_install_dir . PATH_DELIMITER . 'phpDocumentor.ini', true);
-if (isset($ini['_phpDocumentor_options']['userdir']))
- $configdir = $ini['_phpDocumentor_options']['userdir'];
-else
- $configdir = $_phpDocumentor_install_dir . '/user';
-
-// allow the user to change this at runtime
-if (!empty($_REQUEST['altuserdir'])) $configdir = $_REQUEST['altuserdir'];
-?>
-<html>
- <head>
- <title>
- Form to submit to phpDocumentor v<?php print PHPDOCUMENTOR_VER; ?>
- </title>
- <?php
- if(!isset($_GET['submit']) || !empty($_REQUEST['altuserdir'])) {
-?>
-<script src="HTML_TreeMenu-1.1.2/TreeMenu.js" language="JavaScript" type="text/javascript"></script>
- <?php
- include_once('HTML_TreeMenu-1.1.2/TreeMenu.php');
- set_time_limit(0); // six minute timeout
- ini_set("memory_limit","1024M");
- /**
- * Directory Node
- * @package HTML_TreeMenu
- */
- class DirNode extends HTML_TreeNode
- {
- /**
- * full path to this node
- * @var string
- */
- var $path;
-
- function DirNode($text = false, $link = false, $icon = false, $path, $events = array())
- {
- $this->path = $path;
- $options = array();
- if ($text) $options['text'] = $text;
- if ($link) $options['link'] = $link;
- if ($icon) $options['icon'] = $icon;
- HTML_TreeNode::HTML_TreeNode($options,$events);
- }
- }
-
- function getDir($path,&$node)
- {
- global $pd;
- if (!$dir = opendir($path)) return;
-
- $node = new HTML_TreeNode(array('text' => basename(realpath($path)), 'link' => "", 'icon' => 'folder.gif'));
- while (($file = readdir($dir)) !== false)
- {
- if ($file != '.' && $file != '..')
- {
- if (is_dir("$path$pd$file") && !is_link("$path$pd$file"))
- {
- $entry[] = "$path$pd$file";
- }
- }
- }
- closedir($dir);
- for($i = 0; $i < count($entry); $i++)
- {
- $node->addItem(new HTML_TreeNode(array('text'=>basename(realpath($entry[$i])), 'link' => "javascript:setHelp('".addslashes(realpath($entry[$i]))."');", 'icon' => 'folder.gif')));
- }
- }
-
- function recurseDir($path, &$node) {
- global $pd;
- if (!$dir = opendir($path)) {
- return false;
- }
- $anode = new HTML_TreeNode(array('text' => basename($path), 'link' => "javascript:setHelpVal('".$path."');", 'icon' => 'folder.gif'));
- $result = addslashes(realpath(stripslashes($path).$pd.".."));
- if (!$node) $anode->addItem(new DirNode('..',"javascript:setHelp('".$result."');",'folder.gif'),'..');
- while (($file = readdir($dir)) !== false) {
- if ($file != '.' && $file != '..') {
- if (is_dir("$path$pd$file")) {
- recurseDir("$path$pd$file",$anode);
- }
- }
- }
- rewinddir($dir);//
- while (false){//($file = readdir($dir)) !== false) {
- if ($file != '.' && $file != '..') {
- if (is_file("$path$pd$file")) {
- $anode->addItem(new DirNode($file,"javascript:setHelpVal('$path$pd$file');",'branchtop.gif',"$path$pd$file"));
- }
- }
- }
- if (!$node) $node = $anode;
- else
- $node->addItem($anode);
- closedir($dir);
- }
-
- function switchDirTree($path, &$node)
- {
- global $pd;
-
- // initialize recursion simulation values
- // array format: path => &parent in $node itemlist
- $parent = array();
- $parent_indexes = array();
- $parenti = 1;
-
- $node = new DirNode(basename($path),"javascript:setHelpVal('".$path."');",'folder.gif',$path);
- $result = addslashes(realpath($path.$pd.".."));
- $node->addItem(new DirNode('..',"javascript:setHelp('".$result."');",'folder.gif','..'));
- $rnode = &$node;
- $parent[realpath($path)] = false;
- $recur = 0;
- do
- {
- if ($recur++ > 120) return;
- if (!$dir = @opendir($path)) {
- // no child files or directories
-// echo "$path no child files or directories return to ";
- $rnode = &$parent[realpath($path)];
- $path = $rnode->path;
- if (isset($parent_indexes[realpath($path)])) $parenti = $parent_indexes[realpath($path)];
-// echo "$path parenti $parenti<br>";
- }
-// fancy_debug($path,$parent_indexes);
-// vdump_par($parent);
- if (!isset($parent_indexes[realpath($path)]))
- {
- $file = readdir($dir);
- while ($file !== false) {
- if ($file != '.' && $file != '..') {
- if (@is_dir(realpath("$path$pd$file"))) {
- if (!isset($parent_indexes[realpath($path)])) $parent_indexes[realpath($path)] = true;
- $parent[realpath("$path$pd$file")] = &$rnode;
-// echo "<br>adding new ".addslashes(realpath($path.$pd.$file))." to $path<br>";
- $rnode->addItem(new DirNode(addslashes(realpath("$path$pd$file")),"javascript:setHelpVal('".addslashes(realpath($path.$pd.$file))."');",'folder.gif',addslashes(realpath($path.$pd.$file))));
- }
- }
- $file = readdir($dir);
- }
- }
- // go down the tree if possible
- if (isset($parent_indexes[realpath($path)]))
- {
- if ($parenti + 1 > (count($rnode->items)))
- {
- // no more children, go back up to parent
-// echo "$path no more children, go back up to parent ";
- $rnode = &$parent[realpath($path)];
- $path = $rnode->path;
- if (isset($parent_indexes[realpath($path)])) $parenti = $parent_indexes[realpath($path)];
-// echo $path." parenti $parenti<br>";
- } else
- {
- // go to next child
-// echo "$path go to next child ";
- $parent_indexes[realpath($path)] = $parenti+1;
-// debug("set parent ".$rnode->items[$parenti]->path." = ".$rnode->path.'<br>');
- $parent[realpath($rnode->items[$parenti]->path)] = &$rnode;
- $rnode = &$rnode->items[$parenti];
- $path = $rnode->path;
-// echo "$path<br>";
- $parenti = 0;
- }
- } else
- {
- // no children, go back up the tree to the next child
-// echo "$path no children, go back up to parent ";
- $rnode = &$parent[realpath($path)];
- $path = $rnode->path;
- if (isset($parent_indexes[realpath($path)])) $parenti = $parent_indexes[realpath($path)];
-// echo "$path parenti $parenti<br>";
- }
- @closedir($dir);
- } while ($path && (($parenti < (count($rnode->items))) || ($parent[realpath($path)] !== false)));
- }
-
- function vdump_par($tree)
- {
- foreach($tree as $key => $val)
- {
- if ($val === false)
- debug($key.' -> false<br>');
- else
- debug($key.' -> ' .$val->path.'<br>');
- }
- debug('<br>');
- }
-
- $menu = new HTML_TreeMenu();
- $filename = '';
- if (isset($_GET) && isset($_GET['fileName'])) $filename = $_GET['fileName'];
- $filename = realpath($filename);
- $pd = (substr(PHP_OS, 0, 3) == 'WIN') ? '\\' : '/';
- $test = ($pd == '/') ? '/' : 'C:\\';
- if (empty($filename) || ($filename == $test))
- {
- $filename = ($pd == '/') ? '/' : 'C:\\';
- $node = false;
- getDir($filename,$node);
- } else
- {
- flush();
-// if ($pd != '/') $pd = $pd.$pd;
- $anode = false;
- switchDirTree($filename,$anode);
-// recurseDir($filename,$anode);
- $node = new HTML_TreeNode(array('text' => "Click to view $filename",'link' => "",'icon' => 'branchtop.gif'));
- $node->addItem($anode);
- };
- $menu->addItem($node);
- $DHTMLmenu = &new HTML_TreeMenu_DHTML($menu, array('images' => 'HTML_TreeMenu-1.1.2/images'));
- ?>
-<script type="text/javascript" language="Javascript">
-/**
- Creates some global variables
-*/
-function initializate() {
- //
- //The "platform independent" newLine
- //
- //Taken from http://developer.netscape.com/docs/manuals/communicator/jsref/brow1.htm#1010426
-if (navigator.appVersion.lastIndexOf('Win') != -1)
- {
- $pathdelim="\\";
- $newLine="\r\n";
- } else
- {
- $newLine="\n";
- $pathdelim="/";
- }
-/* for($a=0;$a<document.dataForm.elements.length;$a++) {
- alert("The name is '"+document.dataForm.elements[$a].name+"' "+$a);
- }
-*/
-}
-/** Sets the contents of the help box, and submits the form
-*/
-function setHelp($str)
-{
- document.helpForm.fileName.value = $str;
- document.helpForm.helpdata.click();
-}
-
-/** Sets the contents of the help box only
-*/
-function setHelpVal($str)
-{
- document.helpForm.fileName.value = $str;
-}
-/**Adds the contents of the help box as a directory
-*/
-function addDirectory($object) {
- $a = document.helpForm.fileName.value;
- $a = myReplace($a,'\\\\','\\');
- if ($a[$a.length - 1] == $pathdelim) $a = $a.substring(0, $a.length - 1);
- if ($a.lastIndexOf('.') > 0)
- {
- $a = $a.substring(0,$a.lastIndexOf($pathdelim));
- }
- $object.value = prepareString($object.value)+$a;
-}
-/**Adds the contents of the converter box to the converters list
-*/
-function addConverter($object) {
- $object.value = prepareString($object.value)+document.dataForm.ConverterSetting.value;
-}
-/**Replaces the converters list with the contents of the converter box
-*/
-function replaceConverter($object) {
- $object.value = document.dataForm.ConverterSetting.value;
-}
-/**Adds the contents of the help box as a file to the given control
-*/
-function addFile($object) {
- $a = document.helpForm.fileName.value;
- $a = myReplace($a,'\\\\','\\');
- $object.value = prepareString($object.value)+$a;
-}
-/**Takes a given string and leaves it ready to add a new string
- That is, puts the comma and the new line if needed
-*/
-function prepareString($myString) {
- //First verify that a comma is not at the end
- if($myString.lastIndexOf(",") >= $myString.length-2) {
- //We have a comma at the end
- return $myString;
- }
- if($myString.length > 0) {
- $myString+=","+$newLine;
- }
- return $myString;
-}
-/**Do the validation needed before sending the from and return a truth value indicating if the form can be sent
-*/
- function validate() {
- //Take out all newLines and change them by nothing
- //This could be done by using javascript function's replacebut that was implemented only until Navigator 4.0 and so it is better to use more backward compatible functions like substr
- document.dataForm.elements[0].value= stripNewLines(document.dataForm.elements[0].value);
- document.dataForm.elements[1].value= stripNewLines(document.dataForm.elements[1].value);
- document.dataForm.elements[2].value= stripNewLines(document.dataForm.elements[2].value);
- document.dataForm.elements[3].value= stripNewLines(document.dataForm.elements[3].value);
- document.dataForm.elements[4].value= stripNewLines(document.dataForm.elements[4].value);
- document.dataForm.elements[5].value= stripNewLines(document.dataForm.elements[5].value);
- document.dataForm.elements[6].value= stripNewLines(document.dataForm.elements[6].value);
- document.dataForm.elements[7].value= stripNewLines(document.dataForm.elements[7].value);
- //By returning true we are allowing the form to be submitted
- return true;
- }
-/**Takes a string and removes all the ocurrences of new lines
-Could have been implemented a lot easier with replace but it's not very backwards compatible
-*/
- function stripNewLines($myString) {
- return myReplace($myString,$newLine,'');
- }
- function myReplace($string,$text,$by) {
- // Replaces text with by in string
- var $strLength = $string.length, $txtLength = $text.length;
- if (($strLength == 0) || ($txtLength == 0)) return $string;
-
- var $i = $string.indexOf($text);
- if ((!$i) && ($text != $string.substring(0,$txtLength))) return $string;
- if ($i == -1) return $string;
-
- var $newstr = $string.substring(0,$i) + $by;
-
- if ($i+$txtLength < $strLength)
- $newstr += myReplace($string.substring($i+$txtLength,$strLength),$text,$by);
-
- return $newstr;
- }
-</script><?php } ?>
- </head>
- <?php
- //Find out if we are submitting and if we are, send it
- // This code originally by Joshua Eichorn on phpdoc.php
- //
- if(isset($_GET['submit']) && empty($_REQUEST['altuserdir'])) {
- echo "<body bgcolor=\"#ffffff\">";
- echo "<h1>Parsing Files ...</h1>";
- flush();
- echo "<pre>\n";
- /** phpdoc.inc */
- include("phpDocumentor/phpdoc.inc");
- echo "</pre>\n";
- echo "<h1>Operation Completed!!</h1>";
- } else
- {
- ?>
- <body bgcolor="#ffffff" onload="javascript:initializate()">
- <h1>
- phpDocumentor v<?php print PHPDOCUMENTOR_VER; ?> Web Interface
- </h1>
- phpDocumentor written by Joshua Eichorn<br>
- Web Interface written by Juan Pablo Morales and enhanced by Greg Beaver<br>
- <img src="poweredbyphpdoc.gif" alt="" width="88" height="31" border="0">
- <table cellpadding="1" cellspacing="1" border="0" width="60%" bgcolor=
- "#000000">
- <tr>
- <td bgcolor="#ffff66">
- <b>Help</b>
- </td>
- <td bgcolor="#ffff99">
- use this to find directories and files which can be used below
- <form name="helpForm" action="<?php print $_SERVER['PHP_SELF']; ?>" method="get"
- enctype="multipart/form-data">
- <input size="80" type="text" name="fileName" value="<?php print $filename;?>">
- <input type="submit" name="helpdata" value="browse tree">
- </form>
-<div id='menuLayer'></div>
-<?php
- $DHTMLmenu->printMenu();
-?>
- </td>
- </tr>
- </table>
-
- <form name="dataForm" action="<?php print $_SERVER['PHP_SELF']; ?>" method="GET" onsubmit=
- "return validate()">
- <table cellpadding="3" cellspacing="3" border="0" width="80%"
- bgcolor="#000000">
- <tr>
- <td bgcolor="#3399ff">
- <b>Use a pre-created config file for form values.</b>
- </td>
- <td bgcolor="#CCCCCC">
- Normally, phpDocumentor uses the form values from this form to set up parsing. In version 1.2,
- phpDocumentor allows you to "save" form values in configuration files so that you can replicate
- common complicated documentation tasks with only one time. Just choose a config file below or create a
- new one and refresh this page to choose it.<hr /><b>change config directory:</b><input size="20" type="text" name="altuserdir" value=""><?php if (!empty($_REQUEST['altuserdir'])) print '<br><i>changed to <b>"'.$_REQUEST['altuserdir'].'"</b></i>'; ?>
- <b>Choose a config:</b> <select name="setting[useconfig]">
- <option value="" <?php if (empty($_REQUEST['altuserdir'])) print 'selected'; ?>>don't use config file</option>
- <?php
- $dirs = array();
- $dirs = phpDocumentor_ConfigFileList($configdir);
- $path = '';
- $sel = ' selected';
- if (!empty($_REQUEST['altuserdir'])) $path = $configdir . PATH_DELIMITER;
- else $sel = '';
- foreach($dirs as $configfile)
- {
- print '<option value="'.$path.$configfile.'"'.$sel.'>'.$configfile.".ini</option>\n";
- $sel = '';
- }
- ?>
- </select><input type="SUBMIT" value=
- "Go" name="submitButton"><br>
- </td>
- </tr>
- </tr>
- <td bgcolor="#66cc66">
- <b>Target</b>
- </td>
- <td bgcolor="#eeeeee">
- Target is the directory where
- the output produced by phpDocumentor will reside<br>
- <input type="TEXT" name="setting[target]" size=
- "80"><br>
- <a href=
- "javascript:addDirectory(document.dataForm.elements[3])">
- Add the directory in the help box</a>
- </td>
- </tr>
- <tr>
- <td bgcolor="#3399ff">
- <b>Files to parse</b>
- </td>
- <td bgcolor="#CCCCCC">
- This is a group of comma-separated names of php files
- or tutorials that will be processed by phpDocumentor.<br>
-<textarea rows="6" cols="80" name=
-"setting[filename]"></textarea> <br>
- <a href=
- "javascript:addFile(document.dataForm.elements[4])">
- Add the file in the help box</a>
- </td>
- </tr>
- <tr>
- <td bgcolor="#66cc66">
- <b>Directory to parse</b>
- </td>
- <td bgcolor="#eeeeee">
- This is a group of comma-separated directories where php files
- or tutorials are found that will be processed by phpDocumentor.
- phpDocumentor automatically parses subdirectories<br>
-<textarea rows="6" cols="80" name="setting[directory]"></textarea> <br>
- <a href=
- "javascript:addDirectory(document.dataForm.elements[5])">
- Add the directory in the help box</a>
- </td>
- </tr>
- <tr>
- <td bgcolor="#66cc66">
- <b>Files to ignore</b>
- </td>
- <td bgcolor="#eeeeee">
- A list of files (full path or filename), and patterns
- to ignore. Patterns may use wildcards * and ?. To
- ignore all subdirectories named "test" for example,
- using "test/" To ignore all files and directories
- with test in their name use "*test*"
-<textarea rows="6" cols="80" name="setting[ignore]"></textarea> <br>
- <a href=
- "javascript:addDirectory(document.dataForm.elements[6])">
- Add the directory in the help box</a>
- </td>
- </tr>
- <tr>
- <td bgcolor="#66cc66">
- <b>Generated Documentation Title</b>
- </td>
- <td bgcolor="#eeeeee">
- Choose a title for the generated documentation<br>
- <input type="TEXT" name="setting[title]" size=
- "80" value="Generated Documentation"><br>
- </td>
- </tr>
- <tr>
- <td bgcolor="#3399ff">
- <b>Default Package Name</b>
- </td>
- <td bgcolor="#cccccc">
- Choose a name for the default package<br>
- <input type="TEXT" name="setting[defaultpackagename]" size=
- "80" value="default"><br>
- </td>
- <tr>
- <tr>
- <td bgcolor="#3399ff">
- <b>Custom Tags</b>
- </td>
- <td bgcolor="#CCCCCC">
- Custom Tags is a comma-separated list of tags
- you want phpDocumentor to include as valid tags
- in this parse. An example would be "value, size"
- to allow @value and @size tags.
- <input type="TEXT" name="setting[customtags]" size=
- "80"><br>
- </td>
- </tr>
- <tr>
- <td bgcolor="#66cc66">
- <b>Packages to parse</b>
- </td>
- <td bgcolor="#eeeeee">
- The parameter packages is a group of comma
- separated names of abstract packages that will
- be processed by phpDocumentor. All package names must be
- separated by commas.<br>
-<textarea rows="3" cols="80" name=
-"setting[packageoutput]"></textarea> <br>
- </td>
- </tr>
- <tr>
- <td bgcolor="#3399ff">
- <b>Output Information</b>
- </td>
- <td bgcolor="#CCCCCC">
- <br>
- Outputformat
- may be HTML, XML, PDF, or CHM (case-sensitive) in version 1.2. There is only one Converter
- for both CHM and PDF, <b>default</b>. There are 2 HTML Converters,
- <b>frames</b> and <b>Smarty</b>. <b>frames templates</b> may be any of:<br><br>
- <b>default, l0l33t, phpdoc.de, phphtmllib, phpedit, DOM/default, DOM/l0l33t, or DOM/phpdoc.de</b>.
- <b>Smarty templates</b> may be any of:<br><br>
- <b>default or PHP</b>.<br>
-<br>
-There is only 1 template for all other Converters, <b>default</b>
-<br>Output type:Converter name:template name <input type=
- "TEXT" name="setting[output]" value=
- "HTML:Smarty:default" size="80"><br>
-<select name="ConverterSetting">
-<option value="HTML:frames:default">HTML:frames:default</option>
-<option value="HTML:frames:l0l33t">HTML:frames:l0l33t</option>
-<option value="HTML:frames:phpdoc.de">HTML:frames:phpdoc.de</option>
-<option value="HTML:frames:phphtmllib">HTML:frames:phphtmllib</option>
-<option value="HTML:frames:phpedit">HTML:frames:phpedit</option>
-<option value="HTML:frames:DOM/default">HTML:frames:DOM/default</option>
-<option value="HTML:frames:DOM/l0l33t">HTML:frames:DOM/l0l33t</option>
-<option value="HTML:frames:DOM/phpdoc.de">HTML:frames:DOM/phpdoc.de</option>
-<option value="HTML:Smarty:default" SELECTED>HTML:Smarty:default</option>
-<option value="PDF:default:default">PDF:default:default</option>
-<option value="CHM:default:default">CHM:default:default</option>
-<option value="XML:DocBook/peardoc2:default">XML:DocBook/peardoc2:default</option>
-</select><br>
-<a href=
- "javascript:addConverter(document.dataForm.elements[11])">
- Add the converter in the help box</a> <br>
-<a href=
- "javascript:replaceConverter(document.dataForm.elements[11])">
- Use ONLY the converter in the help box</a>
- </td>
- </tr>
- <tr>
- <td bgcolor="#3399ff">
- <b>Parse @access private</b>
- </td>
- <td bgcolor="#CCCCCC">
- The parameter Parse @access private tells phpDocumentor
- whether to parse elements with an "@access private" tag in their docblock<br>
- <input type="checkbox" name="setting[parseprivate]" value="on">Parse private <br>
- </td>
- </tr>
- <tr>
- <td bgcolor="#66cc66">
- <b>JavaDoc-compliant Description parsing.</b>
- </td>
- <td bgcolor="#eeeeee">
- Normally, phpDocumentor uses several rules to determine the short description. This switch
- asks phpDocumentor to simply search for the first period (.) and use it to delineate the short
- description. In addition, the short description will not be separated from the long description<br>
- <input type="checkbox" name="setting[javadocdesc]" value="on">JavaDoc-compliant Description <br>
- </td>
- </tr>
- </table>
- <input type="HIDDEN" name="interface" value="web"> <input type=
- "HIDDEN" name="submit" value="true"> <input type="SUBMIT" value=
- "Create Documentation" name="submitButton">
- </form>
- <br>
- <br>
- <br>
- <p>
- Joshua Eichorn <a href="mailto:jeichorn@phpdoc.org">jeichorn@phpdoc.org</a><br>
- Juan Pablo Morales <a href=
- "mailto:ju-moral@uniandes.edu.co">ju-moral@uniandes.edu.co</a><br>
- Gregory Beaver <a href=
- "mailto:cellog@users.sourceforge.net">cellog@users.sourceforge.net</a>
- </p>
- <p>
- If you have any problems with phpDocumentor, please visit the website: <a
- href='http://phpdocu.sourceforge.net'>phpdocu.sourceforge.net</a> and
- submit a bug
- </p>
- <!-- Created: Tue Jun 26 18:52:40 MEST 2001 -->
- <!-- hhmts start -->
-<pre>
-Last modified: $Date: 2005/10/17 18:15:16 $
-Revision: $Revision: 1.1 $
-</pre>
- <!-- hhmts end -->
- <?php } //End the else that prints all code
- ?>
- </body>
-</html>
-
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<?php +/** + * Advanced Web Interface to phpDocumentor + * + * PHP versions 4 and 5 + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @author Juan Pablo Morales <ju-moral@uniandes.edu.co> + * @author Joshua Eichorn <jeichorn@phpdoc.org> + * @author Gregory Beaver <cellog@php.net> + * @author Chuck Burgess <ashnazg@php.net> + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @link http://pear.php.net/package/PhpDocumentor + * @see phpdoc.php + * @filesource + * @todo CS cleanup - change package to PhpDocumentor + * @deprecated redirects automatically to docbuilder + * (see {@link docbuilder/index.html}) + */ +?> + +<html> +<head> +<title>PhpDocumentor (deprecated web interface)</title> +<META HTTP-EQUIV="Refresh" CONTENT="5; URL=docbuilder/"/> +</head> +<body> +This PhpDocumentor web interface is deprecated... +you will be redirected to the DocBuilder interface. +</body> +</html> diff --git a/buildscripts/PhpDocumentor/pear-phpdoc b/buildscripts/PhpDocumentor/pear-phpdoc index 258af7c8..64858a40 100644 --- a/buildscripts/PhpDocumentor/pear-phpdoc +++ b/buildscripts/PhpDocumentor/pear-phpdoc @@ -1,38 +1,41 @@ -#!@PHP-BIN@
-<?php
-//
-// PhpDoc, a program for creating javadoc style documentation from php code
-// Copyright (C) 2000-2001 Joshua Eichorn
-//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation; either version 2 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-
-//
-// Copyright 2000-2001 Joshua Eichorn
-// Email jeichorn@phpdoc.org
-// Web http://phpdoc.org/
-// Mirror http://phpdocu.sourceforge.net/
-// Project http://sourceforge.net/projects/phpdocu/
-//
-
-/**
- * PHP auto documentor, like javadoc
- * If you get an error uses this as a shell script then its been dosified
- * @author Joshua Eichorn
- * @version 1.3.0
- * @copyright Joshua Eichorn
- */
-include("PhpDocumentor/phpDocumentor/phpdoc.inc");
-?>
+#!@PHP-BIN@ +<?php +/** + * PHP auto documentor, like javadoc + * If you get an error uses this as a shell script then its been dosified + * + * 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 Joshua Eichorn <jeichorn@phpdoc.org> + * @copyright 2000-2007 Joshua Eichorn + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @filesource + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @todo CS cleanup - change package to PhpDocumentor + */ +require "PhpDocumentor/phpDocumentor/phpdoc.inc"; +?> diff --git a/buildscripts/PhpDocumentor/pear-phpdoc.bat b/buildscripts/PhpDocumentor/pear-phpdoc.bat deleted file mode 100644 index 04e3bcc3..00000000 --- a/buildscripts/PhpDocumentor/pear-phpdoc.bat +++ /dev/null @@ -1,145 +0,0 @@ -@ECHO OFF
-:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-::
-:: Batch file to start phpDocumentor with PHP's CLI
-::
-:: This SW was contributed by BlueShoes www.blueshoes.org "The PHP Framework"
-:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-
-::----------------------------------------------------------------------------------
-:: Please set following to PHP's CLI
-:: NOTE: In PHP 4.2.x the PHP-CLI used to be named php-cli.exe.
-:: PHP 4.3.x names it php.exe but stores it in a subdir called /cli/php.exe
-:: E.g. for PHP 4.2 C:\phpdev\php-4.2-Win32\php-cli.exe
-:: for PHP 4.3 C:\phpdev\php-4.3-Win32\cli\php.exe
-
- SET phpCli=@PHP-BIN@
-
-
-
-::---------------------------------------------------------------------------------
-::---------------------------------------------------------------------------------
-:: Do not modify below this line!! (Unless you know what your doing :)
-::---------------------------------------------------------------------------------
-::---------------------------------------------------------------------------------
-
-:: Only show this intro when no options are passed
-IF '%1'=='' (
- ECHO ******************************************************************************
- ECHO * PhpDocument Command-Line Starter
- ECHO *
- ECHO * phpDocumentor is a JavaDoc-like automatic documentation generator for PHP
- ECHO * written in PHP. It is the most versatile tool for documenting PHP.
- ECHO *
- ECHO * This batch-file will try to run the phpDocumentor using the command-line
- ECHO * version of PHP4. NOTE: It will not run with the PHP ISAPI module!
- ECHO * Please update the path in this batch-file to your PHP-CLI.
- ECHO *
- ECHO * Tip: o Grab a copy of one of the ini-files in the user/ dir of the
- ECHO * phpDocumentor and modify the settings there.
- ECHO * o To see the command line options type phpdoc -h
- ECHO *
- ECHO * @version 1.3 2003-06-28
- ECHO * @author Sam Blum sam@blueshoes.org
- ECHO * @Copyright Free Software released under the GNU/GPL license
- ECHO *
- ECHO * This SW was contributed by BlueShoes www.blueshoes.org "The PHP Framework"
- ECHO ******************************************************************************
-)
-
-:: Check existence of php.exe
-IF EXIST "%phpCli%" (
- SET doNothing=
-) ELSE GOTO :NoPhpCli
-
-:: If called using options, just call phpdoc and end after without pausing.
-:: This will allow use where pausing is not wanted.
-IF '%1'=='' (
- SET doNothing=
-) ELSE (
- "%phpCli%" "@BIN-DIR@\phpdoc" %*
- GOTO :EOF
-)
-
-
-SET iniFile=
-
-ECHO ------------------------------------------------------------------------------
-ECHO Select Ini-File [default is phpDocumentor.ini]
-ECHO ------------------------------------------------------------------------------
-ECHO # 0: phpDocumentor.ini
-SET count=0
-FOR /R "@DATA-DIR@\PhpDocumentor\user" %%I IN (*.ini) DO (
- SET /a count+=1
- CALL :exec ECHO # %%count%%: %%~nI%%~xI
-)
-
-:LOOP_1
-:: SET /P prompts for input and sets the variable
-:: to whatever the user types
-SET iniNr=
-SET /P iniNr=Type a number and press Enter[0]:
-
-:: Use default
-IF '%iniNr%'=='' (
- SET iniNr=0
-)
-
-:: Check for default selection
-SET iniFile=phpDocumentor.ini
-IF %iniNr%==0 (
- CALL :exec GOTO :run
- GOTO :PAUSE_END
-)
-
-:: Check selected
-SET count=0
-SET found=
-FOR /R "@DATA-DIR@\PhpDocumentor\user" %%I IN (*.ini) DO (
- SET /a count+=1
- SET iniFile=%%~nI%%~xI
- CALL :exec IF '%%iniNr%%'=='%%count%%' GOTO :run
-)
-
-:: Check if selected # was found
-IF '%found%'=='' (
- ECHO Invalid input [%iniNr%]... try again
- ECHO.
- GOTO :LOOP_1
-)
-
-::
-:: php.exe not found error
-GOTO :PAUSE_END
-:NoPhpCli
-ECHO ** ERROR *****************************************************************
-ECHO * Sorry, can't find the php.exe file.
-ECHO * You must edit this file to point to your php.exe (CLI version!)
-ECHO * [Currently set to %phpCli%]
-ECHO *
-ECHO * NOTE: In PHP 4.2.x the PHP-CLI used to be named php-cli.exe.
-ECHO * PHP 4.3.x renamed it php.exe but stores it in a subdir
-ECHO * called /cli/php.exe
-ECHO * E.g. for PHP 4.2 C:\phpdev\php-4.2-Win32\php-cli.exe
-ECHO * for PHP 4.3 C:\phpdev\php-4.3-Win32\cli\php.exe
-ECHO **************************************************************************
-
-::
-:: Stupid MS-batch: Can't evaluate environment variable inside a FOR loop!!! :((
-GOTO :PAUSE_END
-:exec
-%*
-GOTO :EOF
-
-::
-:: Start the phpDocumentor
-GOTO :PAUSE_END
-:run
-SET found=1
-ECHO Starting: "%phpCli%" "@BIN-DIR@\phpdoc" -c "%iniFile%"
-ECHO.
-"%phpCli%" "@BIN-DIR@\phpdoc" -c "%iniFile%"
-GOTO :EOF
-
-:PAUSE_END
-PAUSE
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/phpDocumentor.ini b/buildscripts/PhpDocumentor/phpDocumentor.ini index bbb01631..161f5cba 100644 --- a/buildscripts/PhpDocumentor/phpDocumentor.ini +++ b/buildscripts/PhpDocumentor/phpDocumentor.ini @@ -10,6 +10,7 @@ PHPDOCUMENTOR_DEBUG = false PHPDOCUMENTOR_KILL_WHITESPACE = false
[_phpDocumentor_options]
+memory_limit = 512;
;; this is the value that will be displayed as the root directory
Program_Root =
;; uncomment this to set the path phpDocumentor looks in to find user files
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(); +?> diff --git a/buildscripts/PhpDocumentor/phpdoc b/buildscripts/PhpDocumentor/phpdoc index 0b02a7c8..7d350888 100644 --- a/buildscripts/PhpDocumentor/phpdoc +++ b/buildscripts/PhpDocumentor/phpdoc @@ -1,54 +1,63 @@ -#!/bin/sh
-PHP=`which php`
-exec $PHP -C -q -d output_buffering=1 $0 $@
-<?php
-//
-// PhpDoc, a program for creating javadoc style documentation from php code
-// Copyright (C) 2000-2001 Joshua Eichorn
-//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation; either version 2 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-
-//
-// Copyright 2000-2003 Joshua Eichorn
-// Email jeichorn@phpdoc.org
-// Web http://phpdoc.org/
-// Mirror http://phpdocu.sourceforge.net/
-// Project http://sourceforge.net/projects/phpdocu/
-//
-
-
-ob_end_clean(); // make output from autofind php code disapear
-
-/**
- * PHP auto documentor, like javadoc
- * If you get an error uses this as a shell script then its been dosified
- * @author Joshua Eichorn
- * @version 1.3.0
- * @copyright Joshua Eichorn
- */
-/**
- * utility: determine whether we're in PEAR or not
- */
-$test = @include("phpDocumentor/find_phpdoc.php");
-if ($test == 6) // find_phpdoc.php returns 6
-{
- error_reporting(0);
- include("phpDocumentor/phpdoc.inc");
-} else
-{
- echo "Error: phpDocumentor not found\n";
-}
-?>
+#!/bin/sh +if [ -z "$PHP" ]; then + PHP=`which php` +fi +(exec $PHP -C -q -d output_buffering=1 "$0" "$@") 2>/dev/null +if [ "$?" -ne "0" ]; then + echo "FAILED: Bad environment variable \$PHP (set to \"$PHP\")" + exit 1 +fi +exit 0 +<?php +/** + * PHP auto documentor, like javadoc + * If you get an error uses this as a shell script then its been dosified + * + * 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 Joshua Eichorn <jeichorn@phpdoc.org> + * @copyright 2000-2007 Joshua Eichorn + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @filesource + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @todo CS cleanup - change package to PhpDocumentor + */ + +ob_end_clean(); // make output from autofind php code disapear + +/** + * utility: determine whether we're in PEAR or not + * @internal CS Exception- logic here necessitates using an unconditional "include" + */ +$test = @include "phpDocumentor/find_phpdoc.php"; +if ($test == 6) { + // find_phpdoc.php returns 6 + include "phpDocumentor/phpdoc.inc"; +} else { + echo "Error: phpDocumentor not found" . PHP_EOL; +} +?> diff --git a/buildscripts/PhpDocumentor/phpdoc.php b/buildscripts/PhpDocumentor/phpdoc.php index 2217db98..a6e8699f 100644 --- a/buildscripts/PhpDocumentor/phpdoc.php +++ b/buildscripts/PhpDocumentor/phpdoc.php @@ -1,469 +1,32 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<?php
-/**
- * Web Interface to phpDocumentor
- * @see new_phpdoc.php
- * @filesource
- * @deprecated in favor of docbuilder (see {@link docbuilder/config.php})
- * @package phpDocumentor
- */
-//
-//
-// An HTML interface for Joshua Eichorn's phpDocumentor
-// Author: Juan Pablo Morales <ju-moral@uniandes.edu.co>
-// Joshua Eichorn <jeichorn@phpdoc.org>
-// Gregory Beaver <cellog@users.sourceforge.net>
-//
-// phpDocumentor, a program for creating javadoc style documentation from php code
-// Copyright (C) 2000-2002 Joshua Eichorn
-//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation; either version 2 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-//
-// Copyleft 2001 Juan Pablo Morales
-
-// set up include path so we can find all files, no matter what
-$GLOBALS['_phpDocumentor_install_dir'] = dirname(realpath(__FILE__));
-// 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'));
-
-/**
-* common file information
-*/
-include_once("phpDocumentor/common.inc.php");
-if (!function_exists('version_compare'))
-{
- print "phpDocumentor requires PHP version 4.1.0 or greater to function";
- exit;
-}
-
-// find the .ini directory by parsing phpDocumentor.ini and extracting _phpDocumentor_options[userdir]
-$ini = phpDocumentor_parse_ini_file($_phpDocumentor_install_dir . PATH_DELIMITER . 'phpDocumentor.ini', true);
-if (isset($ini['_phpDocumentor_options']['userdir']))
- $configdir = $ini['_phpDocumentor_options']['userdir'];
-else
- $configdir = $_phpDocumentor_install_dir . '/user';
-
-// allow the user to change this at runtime
-if (!empty($_REQUEST['altuserdir'])) $configdir = $_REQUEST['altuserdir'];
-?>
-<html>
- <head>
- <title>
- Form to submit to phpDocumentor v<?php print PHPDOCUMENTOR_VER; ?>
- </title>
- <?php if(!isset($_GET['submit']) || !empty($_REQUEST['altuserdir'])) {
-?>
-<script type="text/javascript" language="Javascript">
-/**
- Creates some global variables
-*/
-function initializate() {
- //
- //The "platform independent" newLine
- //
- //Taken from http://developer.netscape.com/docs/manuals/communicator/jsref/brow1.htm#1010426
-if (navigator.appVersion.lastIndexOf('Win') != -1)
- $newLine="\r\n";
- else
- $newLine="\n";
-/* for($a=0;$a<document.dataForm.elements.length;$a++) {
- alert("The name is '"+document.dataForm.elements[$a].name+"' "+$a);
- }
-*/
-}
-/**Adds the contents of the help box as a directory
-*/
-function addDirectory($object) {
- $object.value = prepareString($object.value)+document.helpForm.fileName.value;
-}
-/**Adds the contents of the converter box to the converters list
-*/
-function addConverter($object) {
- $object.value = prepareString($object.value)+document.dataForm.ConverterSetting.value;
-}
-/**Adds the contents of the help box as a file to the given control
-*/
-function addFile($object) {
- $object.value = prepareString($object.value)+document.helpForm.fileName.value;
-}
-/**Takes a given string and leaves it ready to add a new string
- That is, puts the comma and the new line if needed
-*/
-function prepareString($myString) {
- //First verify that a comma is not at the end
- if($myString.lastIndexOf(",") >= $myString.length-2) {
- //We have a comma at the end
- return $myString;
- }
- if($myString.length > 0) {
- $myString+=","+$newLine;
- }
- return $myString;
-}
-/**Do the validation needed before sending the from and return a truth value indicating if the form can be sent
-*/
- function validate() {
- //Take out all newLines and change them by nothing
- //This could be done by using javascript function's replacebut that was implemented only until Navigator 4.0 and so it is better to use more backward compatible functions like substr
- document.dataForm.elements[0].value= stripNewLines(document.dataForm.elements[0].value);
- document.dataForm.elements[1].value= stripNewLines(document.dataForm.elements[1].value);
- document.dataForm.elements[2].value= stripNewLines(document.dataForm.elements[2].value);
- document.dataForm.elements[3].value= stripNewLines(document.dataForm.elements[3].value);
- document.dataForm.elements[4].value= stripNewLines(document.dataForm.elements[4].value);
- document.dataForm.elements[5].value= stripNewLines(document.dataForm.elements[5].value);
- document.dataForm.elements[6].value= stripNewLines(document.dataForm.elements[6].value);
- document.dataForm.elements[7].value= stripNewLines(document.dataForm.elements[7].value);
- //By returning true we are allowing the form to be submitted
- return true;
- }
-/**Takes a string and removes all the ocurrences of new lines
-Could have been implemented a lot easier with replace but it's not very backwards compatible
-*/
- function stripNewLines($myString) {
- return myReplace($myString,$newLine,'');
- }
- function myReplace($string,$text,$by) {
- // Replaces text with by in string
- var $strLength = $string.length, $txtLength = $text.length;
- if (($strLength == 0) || ($txtLength == 0)) return $string;
-
- var $i = $string.indexOf($text);
- if ((!$i) && ($text != $string.substring(0,$txtLength))) return $string;
- if ($i == -1) return $string;
-
- var $newstr = $string.substring(0,$i) + $by;
-
- if ($i+$txtLength < $strLength)
- $newstr += myReplace($string.substring($i+$txtLength,$strLength),$text,$by);
-
- return $newstr;
- }
-</script><?php } ?>
- </head>
- <?php
- //Find out if we are submitting and if we are, send it
- // This code originally by Joshua Eichorn on phpdoc.php
- //
- if(isset($_GET['submit']) && empty($_REQUEST['altuserdir'])) {
- echo "<body bgcolor=\"#ffffff\">";
- echo "<h1>Parsing Files ...</h1>";
- flush();
- echo "<pre>\n";
- /** phpdoc.inc */
- include("phpDocumentor/phpdoc.inc");
- echo "</pre>\n";
- echo "<h1>Operation Completed!!</h1>";
- } else {
- ?>
- <body bgcolor="#ffffff" onload="javascript:initializate()">
- <h1>
- Form to submit to phpDocumentor v<?php print PHPDOCUMENTOR_VER; ?>
- </h1>
- <form name="dataForm" action="phpdoc.php" method="GET" onsubmit=
- "return validate()">
- <div align="center">
- <table cellpadding="0" cellspacing="0" border="0" width="80%"
- bgcolor="#000000">
- <tr>
- <td>
- <table cellpadding="0" cellspacing="1" border="0" width=
- "100%">
- <tr>
- <td bgcolor="#ff6633">
- <b>Use a pre-created config file for form values.</b>
- </td>
- </tr>
- <tr>
- <td bgcolor="#CCCCCC">
- Normally, phpDocumentor uses the form values from this form to set up parsing. In version 1.2,
- phpDocumentor allows you to "save" form values in configuration files so that you can replicate
- common complicated documentation tasks with only one time. Just choose a config file below or create a
- new one and refresh this page to choose it.<hr /><b>change config directory:</b><input size="20" type="text" name="altuserdir" value=""><?php if (!empty($_REQUEST['altuserdir'])) print '<br><i>changed to <b>"'.$_REQUEST['altuserdir'].'"</b></i>'; ?>
- <b>Choose a config:</b> <select name="setting[useconfig]">
- <option value="" <?php if (empty($_REQUEST['altuserdir'])) print 'selected'; ?>>don't use config file</option>
- <?php
- $dirs = array();
- $dirs = phpDocumentor_ConfigFileList($configdir);
- $path = '';
- $sel = ' selected';
- if (!empty($_REQUEST['altuserdir'])) $path = $configdir . PATH_DELIMITER;
- else $sel = '';
- foreach($dirs as $configfile)
- {
- print '<option value="'.$path.$configfile.'"'.$sel.'>'.$configfile.".ini</option>\n";
- $sel = '';
- }
- ?>
- </select><input type="SUBMIT" value=
- "Go" name="submitButton"><br>
- </td>
- </tr>
- <tr>
- <td bgcolor="#ffdddd">
- <b>Generated Documentation Title</b>
- </td>
- </tr>
- <tr>
- <td bgcolor="#eeeeee">
- Choose a title for the generated documentation<br>
- <input type="TEXT" name="setting[title]" size=
- "80" value="Generated Documentation"><br>
- </td>
- </tr>
- <tr>
- <td bgcolor="#ff6633">
- <b>Default Package Name</b>
- </td>
- </tr>
- <tr>
- <td bgcolor="#cccccc">
- Choose a name for the default package<br>
- <input type="TEXT" name="setting[defaultpackagename]" size=
- "80" value="default"><br>
- </td>
- </tr>
- <tr>
- <td bgcolor="#ffdddd">
- <b>Target</b>
- </td>
- </tr>
- <tr>
- <td bgcolor="#eeeeee">
- Target is the directory where
- the output produced by phpDocumentor will reside<br>
- <input type="TEXT" name="setting[target]" size=
- "80"><br>
- <a href=
- "javascript:addDirectory(document.dataForm.elements[5])">
- Add the directory in the help box</a>
- </td>
- </tr>
- <tr>
- <td bgcolor="#ffdddd">
- <b>Custom Tags</b>
- </td>
- </tr>
- <tr>
- <td bgcolor="#eeeeee">
- Custom Tags is a comma-separated list of tags
- you want phpDocumentor to include as valid tags
- in this parse. An example would be "value, size"
- to allow @value and @size tags.
- <input type="TEXT" name="setting[customtags]" size=
- "80"><br>
- </td>
- </tr>
- <tr>
- <td bgcolor="#ff6633">
- <b>Packages to parse</b>
- </td>
- </tr>
- <tr>
- <td bgcolor="#CCCCCC">
- The parameter packages is a group of comma
- separated names of abstract packages that will
- be processed by phpDocumentor. All package names must be
- separated by commas.<br>
-<textarea rows="3" cols="80" name=
-"setting[packageoutput]"></textarea> <br>
- </td>
- </tr>
- <tr>
- <td bgcolor="#ffdddd">
- <b>Files to parse</b>
- </td>
- </tr>
- <tr>
- <td bgcolor="#eeeeee">
- This is a group of comma-separated names of php files
- or tutorials that will be processed by phpDocumentor.<br>
-<textarea rows="6" cols="80" name=
-"setting[filename]"></textarea> <br>
- <a href=
- "javascript:addFile(document.dataForm.elements[8])">
- Add the file in the help box</a>
- </td>
- </tr>
- <tr>
- <td bgcolor="#ff6633">
- <b>Directory to parse</b>
- </td>
- </tr>
- <tr>
- <td bgcolor="#CCCCCC">
- This is a group of comma-separated directories where php files
- or tutorials are found that will be processed by phpDocumentor.
- phpDocumentor automatically parses subdirectories<br>
-<textarea rows="6" cols="80" name="setting[directory]"></textarea> <br>
- <a href=
- "javascript:addDirectory(document.dataForm.elements[9])">
- Add the directory in the help box</a>
- </td>
- </tr>
- <tr>
- <td bgcolor="#ffdddd">
- <b>Output Information</b>
- </td>
- </tr>
- <tr>
- <td bgcolor="#eeeeee">
- <br>
- Output Information is a comma-separated list of <b>Outputformat:Converter:Templates</b>
- to apply to the output. The Converters must be classes descended from Converter
- defined in the phpDocumentor files, or parsing will not work. Outputformat
- may be HTML, XML, PDF, or CHM (case-sensitive) in version 1.2. There is only one Converter
- for both CHM and PDF, <b>default</b>. There are 2 HTML Converters,
- <b>frames</b> and <b>Smarty</b>. <b>frames templates</b> may be any of:<br><br>
- <b>default, l0l33t, phpdoc.de, phphtmllib, phpedit, DOM/default, DOM/l0l33t, or DOM/phpdoc.de</b>.
- <b>Smarty templates</b> may be any of:<br><br>
- <b>default or PHP</b>.
- <br>
- There is only 1 template for all other Converters, <b>default</b>
- <br>Output type:Converter name:template name <input type=
- "TEXT" name="setting[output]" value=
- "HTML:Smarty:default" size="80"><br>
- <select name="ConverterSetting">
- <option value="HTML:frames:default">HTML:frames:default</option>
- <option value="HTML:frames:l0l33t">HTML:frames:l0l33t</option>
- <option value="HTML:frames:phpdoc.de">HTML:frames:phpdoc.de</option>
- <option value="HTML:frames:phphtmllib">HTML:frames:phphtmllib</option>
- <option value="HTML:frames:phpedit">HTML:frames:phpedit</option>
- <option value="HTML:frames:DOM/default">HTML:frames:DOM/default</option>
- <option value="HTML:frames:DOM/l0l33t">HTML:frames:DOM/l0l33t</option>
- <option value="HTML:frames:DOM/phpdoc.de">HTML:frames:DOM/phpdoc.de</option>
- <option value="HTML:Smarty:default" SELECTED>HTML:Smarty:default</option>
- <option value="HTML:Smarty:PHP">HTML:Smarty:PHP</option>
- <option value="PDF:default:default">PDF:default:default</option>
- <option value="CHM:default:default">CHM:default:default</option>
- <option value="XML:DocBook/peardoc2:default">XML:DocBook/peardoc2:default</option>
-</select><br>
- <a href=
- "javascript:addConverter(document.dataForm.elements[10])">
- Add the converter in the help box</a>
- </td>
- </tr>
- <tr>
- <td bgcolor="#ff6633">
- <b>Files to ignore</b>
- </td>
- </tr>
- <tr>
- <td bgcolor="#CCCCCC">
- A list of files (full path or filename), and patterns
- to ignore. Patterns may use wildcards * and ?. To
- ignore all subdirectories named "test" for example,
- using "test/" To ignore all files and directories
- with test in their name use "*test*"
-<textarea rows="6" cols="80" name="setting[ignore]"></textarea> <br>
- <a href=
- "javascript:addDirectory(document.dataForm.elements[12])">
- Add the directory in the help box</a>
- </td>
- </tr>
- <tr>
- <td bgcolor="#ff6633">
- <b>Parse @access private</b>
- </td>
- </tr>
- <tr>
- <td bgcolor="#CCCCCC">
- The parameter Parse @access private tells phpDocumentor
- whether to parse elements with an "@access private" tag in their docblock<br>
- <input type="checkbox" name="setting[parseprivate]" value="on">Parse private <br>
- </td>
- </tr>
- <tr>
- <td bgcolor="#ff6633">
- <b>JavaDoc-compliant Description parsing.</b>
- </td>
- </tr>
- <tr>
- <td bgcolor="#CCCCCC">
- Normally, phpDocumentor uses several rules to determine the short description. This switch
- asks phpDocumentor to simply search for the first period (.) and use it to delineate the short
- description. In addition, the short description will not be separated from the long description<br>
- <input type="checkbox" name="setting[javadocdesc]" value="on">JavaDoc-compliant Description <br>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <input type="HIDDEN" name="interface" value="web"> <input type=
- "HIDDEN" name="submit" value="true"> <input type="SUBMIT" value=
- "Send Form" name="submitButton">
- </div>
- </form>
- <br>
- <br>
- <div align="center">
- <table cellpadding="0" cellspacing="0" border="0" width="80%" bgcolor=
- "#000000">
- <tr>
- <td>
- <table cellpadding="0" cellspacing="1" border="0" width=
- "100%">
- <tr>
- <td bgcolor="#ffdddd">
- <b>A little help</b>
- </td>
- </tr>
- <tr>
- <td bgcolor="#eeeeee">
- Since remember long path is not that easy here is a
- little file control to view names of files that can
- the be aggregated to the different properties
- <form name="helpForm" action="" method="get"
- enctype="multipart/form-data">
- <input size="80" type="file" name="fileName">
- </form>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- </div>
- <br>
- <b>Web-Interface Author:</b>
- <p>
- Juan Pablo Morales<br>
- <a href=
- "mailto:ju-moral@uniandes.edu.co">ju-moral@uniandes.edu.co</a><br>
- Gregory Beaver<br>
- <a href=
- "mailto:cellog@users.sourceforge.net">cellog@users.sourceforge.net</a>, all post-0.3.0 modifications
- </p>
- <p>
- If you have any problems with phpDocumentor, please visit the website: <a
- href='http://phpdocu.sourceforge.net'>phpdocu.sourceforge.net</a> and
- submit a bug
- </p>
- <!-- Created: Tue Jun 26 18:52:40 MEST 2001 -->
- <!-- hhmts start -->
-<pre>
-Last modified: $Date: 2005/10/17 18:15:16 $
-Revision: $Revision: 1.1 $
-</pre>
- <!-- hhmts end -->
- <?php } //End the else that prints all code
- ?>
- </body>
-</html>
-
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<?php +/** + * Original Web Interface to phpDocumentor + * + * PHP versions 4 and 5 + * + * @category ToolsAndUtilities + * @package phpDocumentor + * @author Juan Pablo Morales <ju-moral@uniandes.edu.co> + * @author Joshua Eichorn <jeichorn@phpdoc.org> + * @author Gregory Beaver <cellog@php.net> + * @author Chuck Burgess <ashnazg@php.net> + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @link http://pear.php.net/package/PhpDocumentor + * @filesource + * @todo CS cleanup - change package to PhpDocumentor + * @deprecated redirects automatically to docbuilder + * (see {@link docbuilder/index.html}) + */ +?> + +<html> +<head> +<title>PhpDocumentor (deprecated web interface)</title> +<META HTTP-EQUIV="Refresh" CONTENT="5; URL=docbuilder/"/> +</head> +<body> +This PhpDocumentor web interface is deprecated... +you will be redirected to the DocBuilder interface. +</body> +</html> diff --git a/buildscripts/PhpDocumentor/scripts/add_cvs.php b/buildscripts/PhpDocumentor/scripts/add_cvs.php index 2dfcd656..8b1145d0 100644 --- a/buildscripts/PhpDocumentor/scripts/add_cvs.php +++ b/buildscripts/PhpDocumentor/scripts/add_cvs.php @@ -1,153 +1,153 @@ -<?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-info.php?pacid=137 |
-// +------------------------------------------------------------------------+
-// | 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. |
-// +------------------------------------------------------------------------+
-//
-/**
- * CVS file adding iterator
- *
- * This file iterates over a directory, and adds everything to CVS that is
- * found, ignoring any error messages, until all files in each directory
- * and subdirectory have been added to cvs. It then commits the files to cvs
- * @package phpDocumentor
- * @author Greg Beaver <cellog@users.sourceforge.net>
- * @copyright Copyright 2003, Greg Beaver
- * @version 1.0
- */
-/**#@+
- * phpDocumentor include files. If you don't have phpDocumentor, go get it!
- * Your php life will be changed forever
- */
-$dir = realpath(dirname(__FILE__).'/..');
-require_once("$dir/phpDocumentor/common.inc.php");
-require_once("$dir/phpDocumentor/Io.inc");
-/**#@-*/
-
-/**
-* Physical location on this computer of the package to parse
-* @global string $cvsadd_directory
-*/
-$cvsadd_directory = realpath('.');
-/**
-* Comma-separated list of files and directories to ignore
-*
-* This uses wildcards * and ? to remove extra files/directories that are
-* not part of the package or release
-* @global string $ignore
-*/
-$ignore = array('CVS/');
-
-/******************************************************************************
-* Don't change anything below here unless you're adventuresome *
-*******************************************************************************/
-
-/**
- * @global Io $files
- */
-$files = new Io;
-
-$allfiles = $files->dirList($cvsadd_directory);
-/**#@+
- * Sorting functions for the file list
- * @param string
- * @param string
- */
-function sortfiles($a, $b)
-{
- return strnatcasecmp($a['file'],$b['file']);
-}
-
-function 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);
-}
-/**#@-*/
-
-$struc = array();
-foreach($allfiles as $file)
-{
- if ($files->checkIgnore(basename($file),dirname($file),$ignore, false))
- {
-// print 'Ignoring '.$file."<br>\n";
- continue;
- }
- $path = substr(dirname($file),strlen(str_replace('\\','/',realpath($cvsadd_directory)))+1);
- if (!$path) $path = '/';
- $file = basename($file);
- $ext = array_pop(explode('.',$file));
- if (strlen($ext) == strlen($file)) $ext = '';
- $struc[$path][] = array('file' => $file,'ext' => $ext);
-}
-uksort($struc,'strnatcasecmp');
-foreach($struc as $key => $ind)
-{
- usort($ind,'sortfiles');
- $struc[$key] = $ind;
-}
-$tempstruc = $struc;
-$struc = array('/' => $tempstruc['/']);
-$bv = 0;
-foreach($tempstruc as $key => $ind)
-{
- $save = $key;
- if ($key != '/')
- {
- $struc['/'] = setup_dirs($struc['/'], explode('/',$key), $tempstruc[$key]);
- }
-}
-uksort($struc['/'],'mystrucsort');
-/**
- * Recursively add files to cvs
- * @param array the sorted directory structure
- */
-function addToCVS($struc)
-{
- foreach($struc as $dir => $files)
- {
- if ($dir === '/')
- {
- print 'processing '.$dir . "\n";
- addToCVS($struc[$dir]);
- return;
- } else
- {
- if (!isset($files['file']))
- {
- print 'adding '.$dir . "\n";
- system('cvs add '.$dir);
- chdir($dir);
- addToCVS($files);
- chdir('..');
- } else
- {
- print 'adding '.$files['file'] . "\n";
- system('cvs add '.$files['file']);
- system('cvs commit -m "" '.$files['file']);
- }
- }
- }
-}
-addToCVS($struc);
-print "\n".'done';
+<?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. | +// +------------------------------------------------------------------------+ +// +/** + * CVS file adding iterator + * + * This file iterates over a directory, and adds everything to CVS that is + * found, ignoring any error messages, until all files in each directory + * and subdirectory have been added to cvs. It then commits the files to cvs + * @package phpDocumentor + * @author Greg Beaver <cellog@php.net> + * @copyright Copyright 2003, Greg Beaver + * @version 1.0 + */ +/**#@+ + * phpDocumentor include files. If you don't have phpDocumentor, go get it! + * Your php life will be changed forever + */ +$dir = realpath(dirname(__FILE__).'/..'); +require_once("$dir/phpDocumentor/common.inc.php"); +require_once("$dir/phpDocumentor/Io.inc"); +/**#@-*/ + +/** +* Physical location on this computer of the package to parse +* @global string $cvsadd_directory +*/ +$cvsadd_directory = realpath('.'); +/** +* Comma-separated list of files and directories to ignore +* +* This uses wildcards * and ? to remove extra files/directories that are +* not part of the package or release +* @global string $ignore +*/ +$ignore = array('CVS/'); + +/****************************************************************************** +* Don't change anything below here unless you're adventuresome * +*******************************************************************************/ + +/** + * @global Io $files + */ +$files = new Io; + +$allfiles = $files->dirList($cvsadd_directory); +/**#@+ + * Sorting functions for the file list + * @param string + * @param string + */ +function sortfiles($a, $b) +{ + return strnatcasecmp($a['file'],$b['file']); +} + +function 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); +} +/**#@-*/ + +$struc = array(); +foreach($allfiles as $file) +{ + if ($files->checkIgnore(basename($file),dirname($file),$ignore, false)) + { +// print 'Ignoring '.$file."<br>\n"; + continue; + } + $path = substr(dirname($file),strlen(str_replace('\\','/',realpath($cvsadd_directory)))+1); + if (!$path) $path = '/'; + $file = basename($file); + $ext = array_pop(explode('.',$file)); + if (strlen($ext) == strlen($file)) $ext = ''; + $struc[$path][] = array('file' => $file,'ext' => $ext); +} +uksort($struc,'strnatcasecmp'); +foreach($struc as $key => $ind) +{ + usort($ind,'sortfiles'); + $struc[$key] = $ind; +} +$tempstruc = $struc; +$struc = array('/' => $tempstruc['/']); +$bv = 0; +foreach($tempstruc as $key => $ind) +{ + $save = $key; + if ($key != '/') + { + $struc['/'] = setup_dirs($struc['/'], explode('/',$key), $tempstruc[$key]); + } +} +uksort($struc['/'],'mystrucsort'); +/** + * Recursively add files to cvs + * @param array the sorted directory structure + */ +function addToCVS($struc) +{ + foreach($struc as $dir => $files) + { + if ($dir === '/') + { + print 'processing '.$dir . "\n"; + addToCVS($struc[$dir]); + return; + } else + { + if (!isset($files['file'])) + { + print 'adding '.$dir . "\n"; + system('cvs add '.$dir); + chdir($dir); + addToCVS($files); + chdir('..'); + } else + { + print 'adding '.$files['file'] . "\n"; + system('cvs add '.$files['file']); + system('cvs commit -m "" '.$files['file']); + } + } + } +} +addToCVS($struc); +print "\n".'done'; ?>
\ No newline at end of file diff --git a/buildscripts/PhpDocumentor/scripts/create_examples.php b/buildscripts/PhpDocumentor/scripts/create_examples.php index b3a8acde..ff1863b7 100644 --- a/buildscripts/PhpDocumentor/scripts/create_examples.php +++ b/buildscripts/PhpDocumentor/scripts/create_examples.php @@ -1,66 +1,70 @@ -<?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-info.php?pacid=137 |
-// +------------------------------------------------------------------------+
-// | 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. |
-// +------------------------------------------------------------------------+
-//
-// ./phpdoc -d /home/jeichorn/phpdoc -dn phpDocumentor -ti "phpDocumentor generated docs" -td templates/DOM/l0l33t -t /tmp/phpdoc_DOM_l0l33t
-/**
-* This file creates example documentation output of all templates.
-* @package phpDocumentor
-*/
-
-/**
-* Directory the output should go to.
-* Change this variable to an output directory on your computer
-* @global string $output_directory
-*/
-$output_directory = "/tmp";
-/**
-* default package name, used to change all non-included files to this package
-* @global string $base_package
-*/
-$base_package = "phpDocumentor";
-/**
-* Title of the generated documentation
-* @global string $title
-*/
-$title = "phpDocumentor Generated Documentation";
-/**
-* location of the files to parse. Change to a location on your computer
-* @global string $parse_directory
-*/
-$parse_directory = "/home/jeichorn/phpdoc";
-
-/**
-* directories to output examples into.
-* @global array $output
-*/
-$output = array(
- $output_directory.'/docs/phpdoc_default' => 'HTML:default:default',
- $output_directory.'/docs/phpdoc_l0l33t' => 'HTML:default:l0l33t',
- $output_directory.'/docs/phpdoc_phpdoc_de' => 'HTML:default:phpdoc.de',
- $output_directory.'/docs/phpdoc_DOM_default' => 'HTML:default:DOM/default',
- $output_directory.'/docs/phpdoc_DOM_l0l33t' => 'HTML:default:DOM/l0l33t',
- $output_directory.'/docs/phpdoc_DOM_phpdoc_de' => 'HTML:default:DOM/phpdoc.de',
- $output_directory.'/docs/phpdoc_smarty_default' => 'HTML:Smarty:default',
- $output_directory.'/docs/phpdoc_pdf_default' => 'PDF:default:default',
- $output_directory.'/docs/phpdoc_chm_default' => 'CHM:default:default'
- );
-
-foreach($output as $output => $template)
-{
- passthru("./phpdoc -d /home/jeichorn/phpdoc -dn $base_package -ti \"$title\" -td $template -t $output");
-}
+<?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. | +// +------------------------------------------------------------------------+ +// +// ./phpdoc -d /home/jeichorn/phpdoc -dn phpDocumentor -ti "phpDocumentor generated docs" -td templates/DOM/l0l33t -t /tmp/phpdoc_DOM_l0l33t +/** +* This file creates example documentation output of all templates. +* @package phpDocumentor +*/ + +/** +* Directory the output should go to. +* Change this variable to an output directory on your computer +* @global string $output_directory +*/ +$output_directory = "/tmp"; +/** +* default package name, used to change all non-included files to this package +* @global string $base_package +*/ +$base_package = "phpDocumentor"; +/** +* Title of the generated documentation +* @global string $title +*/ +$title = "phpDocumentor Generated Documentation"; +/** +* location of the files to parse. Change to a location on your computer. +* Example: +* <code> +* $parse_directory = "/home/jeichorn/phpdoc"; +* </code> +* @global string $parse_directory +*/ +$parse_directory = "/you-MUST/change-me/to-fit/your-environment"; + +/** +* directories to output examples into. +* @global array $output +*/ +$output = array( + $output_directory.'/docs/phpdoc_default' => 'HTML:default:default', + $output_directory.'/docs/phpdoc_l0l33t' => 'HTML:default:l0l33t', + $output_directory.'/docs/phpdoc_phpdoc_de' => 'HTML:default:phpdoc.de', + $output_directory.'/docs/phpdoc_DOM_default' => 'HTML:default:DOM/default', + $output_directory.'/docs/phpdoc_DOM_l0l33t' => 'HTML:default:DOM/l0l33t', + $output_directory.'/docs/phpdoc_DOM_phpdoc_de' => 'HTML:default:DOM/phpdoc.de', + $output_directory.'/docs/phpdoc_smarty_default' => 'HTML:Smarty:default', + $output_directory.'/docs/phpdoc_pdf_default' => 'PDF:default:default', + $output_directory.'/docs/phpdoc_chm_default' => 'CHM:default:default', + ); + +foreach($output as $output => $template) +{ + passthru("./phpdoc -d /home/jeichorn/phpdoc -dn $base_package -ti \"$title\" -td $template -t $output"); +} diff --git a/buildscripts/PhpDocumentor/scripts/create_package.xml.php b/buildscripts/PhpDocumentor/scripts/create_package.xml.php index 2ef0fd2c..afc6ddbd 100644 --- a/buildscripts/PhpDocumentor/scripts/create_package.xml.php +++ b/buildscripts/PhpDocumentor/scripts/create_package.xml.php @@ -1,204 +1,168 @@ -<?php
-set_time_limit(0);
-require_once('PEAR/PackageFileManager.php');
-PEAR::setErrorHandling(PEAR_ERROR_DIE);
-$test = new PEAR_PackageFileManager;
-
-$packagedir = dirname(dirname(__FILE__));
-
-$e = $test->setOptions(
-array('baseinstalldir' => 'PhpDocumentor',
-'version' => '1.3.0RC4',
-'packagedirectory' => $packagedir,
-'state' => 'beta',
-'filelistgenerator' => 'cvs',
-'notes' => 'PHP 5 support and more, fix bugs
-
-This will be the last release in the 1.x series. 2.0 is next
-
-Features added to this release include:
-
- * Full PHP 5 support, phpDocumentor both runs in and parses Zend Engine 2
- language constructs. Note that you must be running phpDocumentor in
- PHP 5 in order to parse PHP 5 code
- * XML:DocBook/peardoc2:default converter now beautifies the source using
- PEAR\'s XML_Beautifier if available
- * inline {@example} tag - this works just like {@source} except that
- it displays the contents of another file. In tutorials, it works
- like <programlisting>
- * customizable README/INSTALL/CHANGELOG files
- * phpDocumentor tries to run .ini files out of the current directory
- first, to allow you to put them anywhere you want to
- * multi-national characters are now allowed in package/subpackage names
- * images in tutorials with the <graphic> tag
- * un-modified output with <programlisting role="html">
- * html/xml source highlighting with <programlisting role="tutorial">
-
-From both Windows and Unix, both the command-line version
-of phpDocumentor and the web interface will work
-out of the box by using command phpdoc - guaranteed :)
-
-WARNING: in order to use the web interface through PEAR, you must set your
-data_dir to a subdirectory of your document root.
-
-$ pear config-set data_dir /path/to/public_html/pear
-
-on Windows with default apache setup, it might be
-
-C:\> pear config-set data_dir "C:\Program Files\Apache\htdocs\pear"
-
-After this, install/upgrade phpDocumentor
-
-$ pear upgrade phpDocumentor
-
-and you can browse to:
-
-http://localhost/pear/PhpDocumentor/
-
-for the web interface
-
-------
-WARNING: The PDF Converter will not work in PHP5. The PDF library that it relies upon
-segfaults with the simplest of files. Generation still works great in PHP4
-------
-
-- WARNING: phpDocumentor installs phpdoc in the
- scripts directory, and this will conflict with PHPDoc,
- you can\'t have both installed at the same time
-- Switched to Smarty 2.6.0, now it will work in PHP 5. Other
- changes made to the code to make it work in PHP 5, including parsing
- of private/public/static/etc. access modifiers
-- fixed these bugs:
- [ not entered ] XMLDocBookpeardoc2 beautifier removes comments
- [ 896444 ] Bad line numbers
- [ 937235 ] duplicated /** after abstract method declaration
- [ 962319 ] Define : don\'t show the assigned value
- [ 977674 ] Parser error
- [ 989258 ] wrong interfaces parsing
- [ 1150809 ] Infinite loop when class extends itself
- [ 1151196 ] PHP Fatal error: Cannot re-assign $this
- [ 1151650 ] UTF8 decoding for DocBook packages
- [ 1152781 ] PHP_NOTICE: Uninitialized string offset in ParserDescCleanup
- [ 1153593 ] string id="...." in tutorials
- [ 1164253 ] Inherited Class Constants are not displayed
- [ 1171583 ] CHM wrong filesource
- [ 1180200 ] HighlightParser does not handle Heredoc Blocks.
- [ 1202772 ] missing parentheses in Parser.inc line 946
- [ 1203445 ] Call to a member function on a non-object in Parser.inc
- [ 1203451 ] array to string conversion notice in InlineTags.inc
-- fixed these bugs reported in PEAR:
- Bug #2288: Webfrontend ignores more than one dir in "Files to ignore"
- Bug #5011: PDF generation warning on uksort
-',
-'package' => 'PhpDocumentor',
-'dir_roles' => array(
- 'Documentation' => 'doc',
- 'Documentation/tests' => 'test',
- 'docbuilder' => 'data',
- 'HTML_TreeMenu-1.1.2' => 'data',
- 'tutorials' => 'doc',
- 'phpDocumentor/Converters/CHM/default/templates/default/templates_c' => 'data',
- 'phpDocumentor/Converters/PDF/default/templates/default/templates_c' => 'data',
- 'phpDocumentor/Converters/HTML/frames/templates/default/templates_c' => 'data',
- 'phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates_c' => 'data',
- 'phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates_c' => 'data',
- 'phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates_c' => 'data',
- 'phpDocumentor/Converters/HTML/frames/templates/phpedit/templates_c' => 'data',
- 'phpDocumentor/Converters/HTML/frames/templates/earthli/templates_c' => 'data',
- 'phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates_c' => 'data',
- 'phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates_c' => 'data',
- 'phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates_c' => 'data',
- 'phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates_c' => 'data',
- 'phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates_c' => 'data',
- 'phpDocumentor/Converters/HTML/Smarty/templates/default/templates_c' => 'data',
- 'phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates_c' => 'data',
- 'phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates_c' => 'data',
- 'phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/templates_c' => 'data',
- ),
-'simpleoutput' => true,
-'exceptions' =>
- array(
- 'index.html' => 'data',
- 'README' => 'doc',
- 'ChangeLog' => 'doc',
- 'PHPLICENSE.txt' => 'doc',
- 'poweredbyphpdoc.gif' => 'data',
- 'INSTALL' => 'doc',
- 'FAQ' => 'doc',
- 'Authors' => 'doc',
- 'Release-1.2.0beta1' => 'doc',
- 'Release-1.2.0beta2' => 'doc',
- 'Release-1.2.0beta3' => 'doc',
- 'Release-1.2.0rc1' => 'doc',
- 'Release-1.2.0rc2' => 'doc',
- 'Release-1.2.0' => 'doc',
- 'Release-1.2.1' => 'doc',
- 'Release-1.2.2' => 'doc',
- 'Release-1.2.3' => 'doc',
- 'Release-1.2.3.1' => 'doc',
- 'Release-1.3.0' => 'doc',
- 'pear-phpdoc' => 'script',
- 'pear-phpdoc.bat' => 'script',
- 'HTML_TreeMenu-1.1.2/TreeMenu.php' => 'php',
- 'phpDocumentor/Smarty-2.6.0/libs/debug.tpl' => 'php',
- 'new_phpdoc.php' => 'data',
- 'phpdoc.php' => 'data',
- ),
-'ignore' =>
- array('package.xml',
- "$packagedir/phpdoc",
- 'phpdoc.bat',
- 'LICENSE',
- '*templates/PEAR/*',
- 'phpDocumentor/Smarty-2.5.0/*',
- '*CSV*',
- 'makedocs.ini',
- 'publicweb-PEAR-1.2.1.patch.txt',
- ),
-'installas' =>
- array('pear-phpdoc' => 'phpdoc',
- 'pear-phpdoc.bat' => 'phpdoc.bat',
- 'user/pear-makedocs.ini' => 'user/makedocs.ini',
- ),
-'installexceptions' => array('pear-phpdoc' => '/', 'pear-phpdoc.bat' => '/', 'scripts/makedoc.sh' => '/'),
-));
-if (PEAR::isError($e)) {
- echo $e->getMessage();
- exit;
-}
-$test->addPlatformException('pear-phpdoc.bat', 'windows');
-$test->addDependency('php', '4.1.0', 'ge', 'php');
-// optional dep for peardoc2 converter
-$test->addDependency('XML_Beautifier', '1.1', 'ge', 'pkg', true);
-// replace @PHP-BIN@ in this file with the path to php executable! pretty neat
-$test->addReplacement('pear-phpdoc', 'pear-config', '@PHP-BIN@', 'php_bin');
-$test->addReplacement('pear-phpdoc.bat', 'pear-config', '@PHP-BIN@', 'php_bin');
-$test->addReplacement('pear-phpdoc.bat', 'pear-config', '@BIN-DIR@', 'bin_dir');
-$test->addReplacement('pear-phpdoc.bat', 'pear-config', '@PEAR-DIR@', 'php_dir');
-$test->addReplacement('pear-phpdoc.bat', 'pear-config', '@DATA-DIR@', 'data_dir');
-$test->addReplacement('docbuilder/includes/utilities.php', 'pear-config', '@DATA-DIR@', 'data_dir');
-$test->addReplacement('docbuilder/builder.php', 'pear-config', '@DATA-DIR@', 'data_dir');
-$test->addReplacement('docbuilder/file_dialog.php', 'pear-config', '@DATA-DIR@', 'data_dir');
-$test->addReplacement('docbuilder/file_dialog.php', 'pear-config', '@WEB-DIR@', 'data_dir');
-$test->addReplacement('docbuilder/actions.php', 'pear-config', '@WEB-DIR@', 'data_dir');
-$test->addReplacement('docbuilder/top.php', 'pear-config', '@DATA-DIR@', 'data_dir');
-$test->addReplacement('docbuilder/config.php', 'pear-config', '@DATA-DIR@', 'data_dir');
-$test->addReplacement('docbuilder/config.php', 'pear-config', '@WEB-DIR@', 'data_dir');
-$test->addReplacement('phpDocumentor/Setup.inc.php', 'pear-config', '@DATA-DIR@', 'data_dir');
-$test->addReplacement('phpDocumentor/Converter.inc', 'pear-config', '@DATA-DIR@', 'data_dir');
-$test->addReplacement('phpDocumentor/common.inc.php', 'package-info', '@VER@', 'version');
-$test->addReplacement('phpDocumentor/IntermediateParser.inc', 'package-info', '@VER@', 'version');
-$test->addReplacement('user/pear-makedocs.ini', 'pear-config', '@PEAR-DIR@', 'php_dir');
-$test->addReplacement('user/pear-makedocs.ini', 'pear-config', '@DOC-DIR@', 'doc_dir');
-$test->addReplacement('user/pear-makedocs.ini', 'package-info', '@VER@', 'version');
-$test->addRole('inc', 'php');
-$test->addRole('sh', 'script');
-if (isset($_GET['make'])) {
- $test->writePackageFile();
-} else {
- $test->debugPackageFile();
-}
-if (!isset($_GET['make'])) {
- echo '<a href="' . $_SERVER['PHP_SELF'] . '?make=1">Make this file</a>';
-}
-?>
\ No newline at end of file +<?php +set_time_limit(0); +require_once('PEAR/PackageFileManager.php'); +require_once('PEAR/PackageFileManager2.php'); +PEAR::setErrorHandling(PEAR_ERROR_DIE); + +$packagedir = dirname(dirname(__FILE__)); +$notes = ' +Includes these PEAR items: + * Bug #11654: @static in DocBlock Template can cause PHP Notice [ashnazg|mvriel] + * Bug #11813: @link URL short description does'nt work [ashnazg] + * Bug #13800: Invalid tutorials tree generation [ashnazg|wrzasq] + * Bug #14191: earthli template contains bad HTML [ashnazg|jorrit] + * Bug #14472: Incorrect line numbers with heredoc [ashnazg|indigo] + * Bug #15517: Wrong table of contents in tutorials [ashnazg] + * Bug #16431: Warning: get_class() expects parameter 1 to be object, string given [ashnazg|aharvey] + * Bug #16441: Parse error when parsing <<foo>> [ashnazg|marcusson] + * Bug #16446: Use of split() causes E_DEPRECATED warnings [ashnazg|aharvey] + * Feature #13599: Third Gotcha on Bare Minimum Tutorial example [ashnazg] + * Feature #14312: @param tag with additional arguments doesn't work as expected [ashnazg] + * Feature #14461: Data Type Confusion for Some Tags [ashnazg] + + +Includes these Sourceforge items: +* [2692032] use of templatebase - missing information [ashnazg] +* [2669256] get_class() expects parameter 1 to be object, string given [ashnazg] +* [2669110] ereg / split is deprecated [ashnazg] +* [1940914] Tutorials tree is added to tutorials which have no children [ashnazg|wrzasq] +* [1929926] Default version number not updated [ashnazg] +* [1918851] @toc render is wrong in earthli tutorial_toc.tpl [ashnazg] +* [1903136] Constant Link not worked [ashnazg|scholesmafia] +* [1771553] @link URL short description does\'nt work [ashnazg] + +'; +$version = '1.4.3'; +$release_stability = 'stable'; +$api = '1.4.0'; +$api_stability = 'stable'; +$options = array( +'baseinstalldir' => 'PhpDocumentor', +'version' => $version, +'packagedirectory' => $packagedir, +'filelistgenerator' => 'cvs', +'notes' => $notes, +'package' => 'PhpDocumentor', +'dir_roles' => array( + 'Documentation' => 'doc', + 'docbuilder' => 'data', + 'HTML_TreeMenu-1.1.2' => 'data', + 'tutorials' => 'doc', + 'tests' => 'test', + ), +'simpleoutput' => true, +'exceptions' => + array( + 'index.html' => 'data', + 'README' => 'doc', + 'ChangeLog' => 'doc', + 'LICENSE' => 'doc', + 'poweredbyphpdoc.gif' => 'data', + 'INSTALL' => 'doc', + 'FAQ' => 'doc', + 'Authors' => 'doc', + 'Release-1.4.3' => 'doc', + 'pear-phpdoc' => 'script', + 'pear-phpdoc.bat' => 'script', + 'HTML_TreeMenu-1.1.2/TreeMenu.php' => 'php', + 'phpDocumentor/Smarty-2.6.0/libs/debug.tpl' => 'php', + 'new_phpdoc.php' => 'data', + 'phpdoc.php' => 'data', + 'scripts/makedoc.sh' => 'php', + ), +'ignore' => + array('package.xml', + '*templates/PEAR/*', + ), +'installexceptions' => array('pear-phpdoc' => '/', 'pear-phpdoc.bat' => '/'), +); +$pfm2 = PEAR_PackageFileManager2::importOptions(dirname(dirname(__FILE__)) + . DIRECTORY_SEPARATOR . 'package.xml', array_merge($options, array('packagefile' => 'package.xml'))); +$pfm2->setReleaseVersion($version); +$pfm2->setReleaseStability($release_stability); +$pfm2->setAPIVersion($api); +$pfm2->setAPIStability($api_stability); +$pfm2->setLicense('LGPL', 'http://www.opensource.org/licenses/lgpl-license.php'); +$pfm2->setNotes($notes); +$pfm2->clearDeps(); +$pfm2->setPhpDep('4.2.0'); +$pfm2->setPearinstallerDep('1.4.6'); +$pfm2->addPackageDepWithChannel('optional', 'XML_Beautifier', 'pear.php.net', '1.1'); +$pfm2->addReplacement('pear-phpdoc', 'pear-config', '@PHP-BIN@', 'php_bin'); +$pfm2->addReplacement('pear-phpdoc.bat', 'pear-config', '@PHP-BIN@', 'php_bin'); +$pfm2->addReplacement('pear-phpdoc.bat', 'pear-config', '@BIN-DIR@', 'bin_dir'); +$pfm2->addReplacement('pear-phpdoc.bat', 'pear-config', '@PEAR-DIR@', 'php_dir'); +$pfm2->addReplacement('pear-phpdoc.bat', 'pear-config', '@DATA-DIR@', 'data_dir'); +$pfm2->addReplacement('README', 'package-info', '@VER@', 'version'); +$pfm2->addReplacement('README', 'package-info', '@STABILITY@', 'state'); +$pfm2->addReplacement('docbuilder/includes/utilities.php', 'pear-config', '@DATA-DIR@', 'data_dir'); +$pfm2->addReplacement('docbuilder/builder.php', 'pear-config', '@DATA-DIR@', 'data_dir'); +$pfm2->addReplacement('docbuilder/file_dialog.php', 'pear-config', '@DATA-DIR@', 'data_dir'); +$pfm2->addReplacement('docbuilder/file_dialog.php', 'pear-config', '@WEB-DIR@', 'data_dir'); +$pfm2->addReplacement('docbuilder/actions.php', 'pear-config', '@WEB-DIR@', 'data_dir'); +$pfm2->addReplacement('docbuilder/top.php', 'pear-config', '@DATA-DIR@', 'data_dir'); +$pfm2->addReplacement('docbuilder/config.php', 'pear-config', '@DATA-DIR@', 'data_dir'); +$pfm2->addReplacement('docbuilder/config.php', 'pear-config', '@WEB-DIR@', 'data_dir'); +$pfm2->addReplacement('phpDocumentor/Setup.inc.php', 'pear-config', '@DATA-DIR@', 'data_dir'); +$pfm2->addReplacement('phpDocumentor/Converter.inc', 'pear-config', '@DATA-DIR@', 'data_dir'); +$pfm2->addReplacement('phpDocumentor/Classes.inc', 'package-info', '@VER@', 'version'); +$pfm2->addReplacement('phpDocumentor/DescHTML.inc', 'package-info', '@VER@', 'version'); +$pfm2->addReplacement('phpDocumentor/DocBlockTags.inc', 'package-info', '@VER@', 'version'); +$pfm2->addReplacement('phpDocumentor/Errors.inc', 'package-info', '@VER@', 'version'); +$pfm2->addReplacement('phpDocumentor/EventStack.inc', 'package-info', '@VER@', 'version'); +$pfm2->addReplacement('phpDocumentor/common.inc.php', 'package-info', '@VER@', 'version'); +$pfm2->addReplacement('phpDocumentor/common.inc.php', 'pear-config', '@PEAR-DIR@', 'php_dir'); +$pfm2->addReplacement('phpDocumentor/HighlightParser.inc', 'package-info', '@VER@', 'version'); +$pfm2->addReplacement('phpDocumentor/InlineTags.inc', 'package-info', '@VER@', 'version'); +$pfm2->addReplacement('phpDocumentor/IntermediateParser.inc', 'package-info', '@VER@', 'version'); +$pfm2->addReplacement('phpDocumentor/IntermediateParser.inc', 'pear-config', '@PEAR-DIR@', 'php_dir'); +$pfm2->addReplacement('phpDocumentor/LinkClasses.inc', 'package-info', '@VER@', 'version'); +$pfm2->addReplacement('phpDocumentor/PackagePageElements.inc', 'package-info', '@VER@', 'version'); +$pfm2->addReplacement('phpDocumentor/ParserData.inc', 'package-info', '@VER@', 'version'); +$pfm2->addReplacement('phpDocumentor/phpDocumentorTParser.inc', 'package-info', '@VER@', 'version'); +$pfm2->addReplacement('phpDocumentor/phpDocumentorTWordParser.inc', 'package-info', '@VER@', 'version'); +$pfm2->addReplacement('phpDocumentor/ProceduralPages.inc', 'package-info', '@VER@', 'version'); +$pfm2->addReplacement('phpDocumentor/Publisher.inc', 'package-info', '@VER@', 'version'); +$pfm2->addReplacement('phpDocumentor/TutorialHighlightParser.inc', 'package-info', '@VER@', 'version'); +$pfm2->addReplacement('phpDocumentor/WordParser.inc', 'package-info', '@VER@', 'version'); +$pfm2->addReplacement('phpDocumentor/XMLpackagePageParser.inc', 'package-info', '@VER@', 'version'); +$pfm2->addReplacement('user/pear-makedocs.ini', 'pear-config', '@PEAR-DIR@', 'php_dir'); +$pfm2->addReplacement('user/pear-makedocs.ini', 'pear-config', '@DOC-DIR@', 'doc_dir'); +$pfm2->addReplacement('user/pear-makedocs.ini', 'package-info', '@VER@', 'version'); +$pfm2->addRole('inc', 'php'); +$pfm2->addRole('sh', 'script'); +$pfm2->addUnixEol('pear-phpdoc'); +$pfm2->addUnixEol('phpdoc'); +$pfm2->addWindowsEol('pear-phpdoc.bat'); +$pfm2->addWindowsEol('phpdoc.bat'); +$pfm2->generateContents(); +$pfm2->setPackageType('php'); +$pfm2->addRelease(); +$pfm2->setOsInstallCondition('windows'); +// these next few files are only used if the archive is extracted as-is +// without installing via "pear install blah" +$pfm2->addIgnoreToRelease("phpdoc"); +$pfm2->addIgnoreToRelease('phpdoc.bat'); +$pfm2->addIgnoreToRelease('user/makedocs.ini'); +$pfm2->addIgnoreToRelease('scripts/makedoc.sh'); +$pfm2->addInstallAs('pear-phpdoc', 'phpdoc'); +$pfm2->addInstallAs('pear-phpdoc.bat', 'phpdoc.bat'); +$pfm2->addInstallAs('user/pear-makedocs.ini', 'user/makedocs.ini'); +$pfm2->addRelease(); +// these next two files are only used if the archive is extracted as-is +// without installing via "pear install blah" +$pfm2->addIgnoreToRelease("phpdoc"); +$pfm2->addIgnoreToRelease('phpdoc.bat'); +$pfm2->addIgnoreToRelease('user/makedocs.ini'); +$pfm2->addIgnoreToRelease('pear-phpdoc.bat'); +$pfm2->addInstallAs('pear-phpdoc', 'phpdoc'); +$pfm2->addInstallAs('user/pear-makedocs.ini', 'user/makedocs.ini'); +if (isset($_GET['make']) || (isset($_SERVER['argv'][1]) && $_SERVER['argv'][1] == 'make')) { + $pfm2->writePackageFile(); +} else { + $pfm2->debugPackageFile(); +} +if (!isset($_GET['make']) && !(isset($_SERVER['argv'][1]) && $_SERVER['argv'][1] == 'make')) { + echo '<a href="' . $_SERVER['PHP_SELF'] . '?make=1">Make this file</a>'; +} +?> diff --git a/buildscripts/PhpDocumentor/scripts/makedoc.sh b/buildscripts/PhpDocumentor/scripts/makedoc.sh index 83c3bcc0..4a0e51de 100644 --- a/buildscripts/PhpDocumentor/scripts/makedoc.sh +++ b/buildscripts/PhpDocumentor/scripts/makedoc.sh @@ -1,94 +1,94 @@ -#!/bin/bash
-# $Id: makedoc.sh,v 1.1 2005/10/17 18:37:43 jeichorn Exp $
-
-#/**
-# * makedoc - PHPDocumentor script to save your settings
-# *
-# * Put this file inside your PHP project homedir, edit its variables and run whenever you wants to
-# * re/make your project documentation.
-# *
-# * The version of this file is the version of PHPDocumentor it is compatible.
-# *
-# * It simples run phpdoc with the parameters you set in this file.
-# * NOTE: Do not add spaces after bash variables.
-# *
-# * @copyright makedoc.sh is part of PHPDocumentor project {@link http://freshmeat.net/projects/phpdocu/} and its LGPL
-# * @author Roberto Berto <darkelder (inside) users (dot) sourceforge (dot) net>
-# * @version Release-1.1.0
-# */
-
-
-##############################
-# should be edited
-##############################
-
-#/**
-# * title of generated documentation, default is 'Generated Documentation'
-# *
-# * @var string TITLE
-# */
-TITLE="Your Project Documentation"
-
-#/**
-# * name to use for the default package. If not specified, uses 'default'
-# *
-# * @var string PACKAGES
-# */
-PACKAGES="yourProject"
-
-#/**
-# * name of a directory(s) to parse directory1,directory2
-# * $PWD is the directory where makedoc.sh
-# *
-# * @var string PATH_PROJECT
-# */
-PATH_PROJECT=$PWD
-
-#/**
-# * path of PHPDoc executable
-# *
-# * @var string PATH_PHPDOC
-# */
-PATH_PHPDOC=~/phpdoc/phpdoc
-
-#/**
-# * where documentation will be put
-# *
-# * @var string PATH_DOCS
-# */
-PATH_DOCS=$PWD/docs
-
-#/**
-# * what outputformat to use (html/pdf)
-# *
-# * @var string OUTPUTFORMAT
-# */
-OUTPUTFORMAT=HTML
-
-#/**
-# * converter to be used
-# *
-# * @var string CONVERTER
-# */
-CONVERTER=Smarty
-
-#/**
-# * template to use
-# *
-# * @var string TEMPLATE
-# */
-TEMPLATE=default
-
-#/**
-# * parse elements marked as private
-# *
-# * @var bool (on/off) PRIVATE
-# */
-PRIVATE=off
-
-# make documentation
-$PATH_PHPDOC -d $PATH_PROJECT -t $PATH_DOCS -ti "$TITLE" -dn $PACKAGES \
--o $OUTPUTFORMAT:$CONVERTER:$TEMPLATE -pp $PRIVATE
-
-
-# vim: set expandtab :
+#!/bin/bash +# $Id: makedoc.sh,v 1.2 2007-12-10 01:11:19 ashnazg Exp $ + +#/** +# * makedoc - PHPDocumentor script to save your settings +# * +# * Put this file inside your PHP project homedir, edit its variables and run whenever you wants to +# * re/make your project documentation. +# * +# * The version of this file is the version of PHPDocumentor it is compatible. +# * +# * It simples run phpdoc with the parameters you set in this file. +# * NOTE: Do not add spaces after bash variables. +# * +# * @copyright makedoc.sh is part of PHPDocumentor project {@link http://freshmeat.net/projects/phpdocu/} and its LGPL +# * @author Roberto Berto <darkelder (inside) users (dot) sourceforge (dot) net> +# * @version Release-1.1.0 +# */ + + +############################## +# should be edited +############################## + +#/** +# * title of generated documentation, default is 'Generated Documentation' +# * +# * @var string TITLE +# */ +TITLE="Your Project Documentation" + +#/** +# * name to use for the default package. If not specified, uses 'default' +# * +# * @var string PACKAGES +# */ +PACKAGES="yourProject" + +#/** +# * name of a directory(s) to parse directory1,directory2 +# * $PWD is the directory where makedoc.sh +# * +# * @var string PATH_PROJECT +# */ +PATH_PROJECT=$PWD + +#/** +# * path of PHPDoc executable +# * +# * @var string PATH_PHPDOC +# */ +PATH_PHPDOC=~/phpdoc/phpdoc + +#/** +# * where documentation will be put +# * +# * @var string PATH_DOCS +# */ +PATH_DOCS=$PWD/docs + +#/** +# * what outputformat to use (html/pdf) +# * +# * @var string OUTPUTFORMAT +# */ +OUTPUTFORMAT=HTML + +#/** +# * converter to be used +# * +# * @var string CONVERTER +# */ +CONVERTER=Smarty + +#/** +# * template to use +# * +# * @var string TEMPLATE +# */ +TEMPLATE=default + +#/** +# * parse elements marked as private +# * +# * @var bool (on/off) PRIVATE +# */ +PRIVATE=off + +# make documentation +"$PATH_PHPDOC" -d "$PATH_PROJECT" -t "$PATH_DOCS" -ti "$TITLE" -dn $PACKAGES \ +-o $OUTPUTFORMAT:$CONVERTER:$TEMPLATE -pp $PRIVATE + + +# vim: set expandtab : diff --git a/buildscripts/PhpDocumentor/scripts/tokenizer_test.php b/buildscripts/PhpDocumentor/scripts/tokenizer_test.php index 2b5ca25e..e7c5748a 100644 --- a/buildscripts/PhpDocumentor/scripts/tokenizer_test.php +++ b/buildscripts/PhpDocumentor/scripts/tokenizer_test.php @@ -1,59 +1,59 @@ -<?php
-/**
- * @package tests
- */
-/**
-$fp = fopen("../phpDocumentor/Converter.inc","r");
-$file = fread($fp,filesize("../phpDocumentor/Converter.inc"));
-fclose($fp);
-*/
-$file = "
-<?php
- function &newSmarty()
- {
- 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 = new Smarty;
- \$templ->template_dir = \$this->smarty_dir . PATH_DELIMITER . 'templates';
- \$templ->compile_dir = \$this->smarty_dir . PATH_DELIMITER . 'templates_c';
- \$templ->config_dir = \$this->smarty_dir . PATH_DELIMITER . 'configs';
- \$templ->assign(\"packageindex\",\$this->package_index);
- \$templ->assign(\"phpdocversion\",PHPDOCUMENTOR_VER);
- \$templ->assign(\"phpdocwebsite\",PHPDOCUMENTOR_WEBSITE);
- \$templ->assign(\"package\",\$this->package);
- \$templ->assign(\"subdir\",'');
- return \$templ;
- }
-?>
-";
-$tokens = token_get_all($file);
-
-$nl_check = array(T_WHITESPACE,T_ENCAPSED_AND_WHITESPACE,T_COMMENT,T_DOC_COMMENT,T_OPEN_TAG,T_CLOSE_TAG,T_INLINE_HTML);
-print '<pre>';
-$line = 0;
-foreach($tokens as $key => $val)
-{
- if (is_array($val))
- {
- // seeing if we can get line numbers out of the beast
- if (in_array($val[0],$nl_check))
- {
- $line+=substr_count($val[1],"\n");
- }
- echo token_name($val[0])." => ".htmlentities($val[1])."\n";
- }
- else
- {
- echo "*** $val\n";
- }
-}
-echo "$line\n";
-print '</pre>';
-?>
+<?php +/** + * @package tests + */ +/** +$fp = fopen("../phpDocumentor/Converter.inc","r"); +$file = fread($fp,filesize("../phpDocumentor/Converter.inc")); +fclose($fp); +*/ +$file = " +<?php + function &newSmarty() + { + 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 = new Smarty; + \$templ->template_dir = \$this->smarty_dir . PATH_DELIMITER . 'templates'; + \$templ->compile_dir = \$this->smarty_dir . PATH_DELIMITER . 'templates_c'; + \$templ->config_dir = \$this->smarty_dir . PATH_DELIMITER . 'configs'; + \$templ->assign(\"packageindex\",\$this->package_index); + \$templ->assign(\"phpdocversion\",PHPDOCUMENTOR_VER); + \$templ->assign(\"phpdocwebsite\",PHPDOCUMENTOR_WEBSITE); + \$templ->assign(\"package\",\$this->package); + \$templ->assign(\"subdir\",''); + return \$templ; + } +?> +"; +$tokens = token_get_all($file); + +$nl_check = array(T_WHITESPACE,T_ENCAPSED_AND_WHITESPACE,T_COMMENT,T_DOC_COMMENT,T_OPEN_TAG,T_CLOSE_TAG,T_INLINE_HTML); +print '<pre>'; +$line = 0; +foreach($tokens as $key => $val) +{ + if (is_array($val)) + { + // seeing if we can get line numbers out of the beast + if (in_array($val[0],$nl_check)) + { + $line+=substr_count($val[1],"\n"); + } + echo token_name($val[0])." => ".htmlentities($val[1])."\n"; + } + else + { + echo "*** $val\n"; + } +} +echo "$line\n"; +print '</pre>'; +?> diff --git a/buildscripts/PhpDocumentor/user/default.ini b/buildscripts/PhpDocumentor/user/default.ini index 4915f607..9b5714f2 100644 --- a/buildscripts/PhpDocumentor/user/default.ini +++ b/buildscripts/PhpDocumentor/user/default.ini @@ -1,98 +1,101 @@ -;; phpDocumentor parse configuration file
-;;
-;; This file is designed to cut down on repetitive typing on the command-line or web interface
-;; You can copy this file to create a number of configuration files that can be used with the
-;; command-line switch -c, as in phpdoc -c default.ini or phpdoc -c myini.ini. The web
-;; interface will automatically generate a list of .ini files that can be used.
-;;
-;; default.ini is used to generate the online manual at http://www.phpdoc.org/docs
-;;
-;; ALL .ini files must be in the user subdirectory of phpDocumentor with an extension of .ini
-;;
-;; Copyright 2002, Greg Beaver <cellog@users.sourceforge.net>
-;;
-;; WARNING: do not change the name of any command-line parameters, phpDocumentor will ignore them
-
-[Parse Data]
-;; title of all the documentation
-;; legal values: any string
-title = phpDocumentor 1.3.0 Manual
-
-;; parse files that start with a . like .bash_profile
-;; legal values: true, false
-hidden = false
-
-;; show elements marked @access private in documentation by setting this to on
-;; legal values: on, off
-parseprivate = off
-
-;; parse with javadoc-like description (first sentence is always the short description)
-;; legal values: on, off
-javadocdesc = off
-
-;; add any custom @tags separated by commas here
-;; legal values: any legal tagname separated by commas.
-;customtags = mytag1,mytag2
-
-;; This is only used by the XML:DocBook/peardoc2 converter
-defaultcategoryname = Documentation
-
-;; what is the main package?
-;; legal values: alphanumeric string plus - and _
-defaultpackagename = phpDocumentor
-
-;; output any parsing information? set to on for cron jobs
-;; legal values: on
-;quiet = on
-
-;; parse a PEAR-style repository. Do not turn this on if your project does
-;; not have a parent directory named "pear"
-;; legal values: on/off
-;pear = on
-
-;; where should the documentation be written?
-;; legal values: a legal path
-target = /home/cellog/output
-
-;; Which files should be parsed out as special documentation files, such as README,
-;; INSTALL and CHANGELOG? This overrides the default files found in
-;; phpDocumentor.ini (this file is not a user .ini file, but the global file)
-readmeinstallchangelog = README, INSTALL, CHANGELOG, NEWS, FAQ, LICENSE
-
-;; limit output to the specified packages, even if others are parsed
-;; legal values: package names separated by commas
-;packageoutput = package1,package2
-
-;; comma-separated list of files to parse
-;; legal values: paths separated by commas
-;filename = /path/to/file1,/path/to/file2,fileincurrentdirectory
-
-;; comma-separated list of directories to parse
-;; legal values: directory paths separated by commas
-;directory = /path1,/path2,.,..,subdirectory
-;directory = /home/jeichorn/cvs/pear
-directory = /home/cellog/phpdoc
-
-;; template base directory (the equivalent directory of <installdir>/phpDocumentor)
-;templatebase = /path/to/my/templates
-
-;; directory to find any example files in through @example and {@example} tags
-;examplesdir = /path/to/my/templates
-
-;; comma-separated list of files, directories or wildcards ? and * (any wildcard) to ignore
-;; legal values: any wildcard strings separated by commas
-;ignore = /path/to/ignore*,*list.php,myfile.php,subdirectory/
-ignore = templates_c/,*HTML/default/*,spec/
-
-;; comma-separated list of Converters to use in outputformat:Convertername:templatedirectory format
-;; legal values: HTML:frames:default,HTML:frames:l0l33t,HTML:frames:phpdoc.de,HTML:frames:phphtmllib,
-;; HTML:frames:earthli,
-;; HTML:frames:DOM/default,HTML:frames:DOM/l0l33t,HTML:frames:DOM/phpdoc.de,
-;; HTML:frames:DOM/phphtmllib,HTML:frames:DOM/earthli
-;; HTML:Smarty:default,HTML:Smarty:PHP,HTML:Smarty:HandS
-;; PDF:default:default,CHM:default:default,XML:DocBook/peardoc2:default
-output=HTML:frames:earthli,HTML:frames:default,HTML:frames:l0l33t,HTML:frames:phpdoc.de,HTML:frames:phphtmllib,HTML:frames:DOM/default,HTML:frames:DOM/l0l33t,HTML:frames:DOM/phpdoc.de,HTML:frames:DOM/earthli,HTML:frames:DOM/phphtmllib,HTML:frames:phpedit,HTML:Smarty:default,HTML:Smarty:PHP,HTML:Smarty:HandS,CHM:default:default,PDF:default:default
-
-;; turn this option on if you want highlighted source code for every file
-;; legal values: on/off
-sourcecode = on
\ No newline at end of file +;; phpDocumentor parse configuration file +;; +;; This file is designed to cut down on repetitive typing on the command-line or web interface +;; You can copy this file to create a number of configuration files that can be used with the +;; command-line switch -c, as in phpdoc -c default.ini or phpdoc -c myini.ini. The web +;; interface will automatically generate a list of .ini files that can be used. +;; +;; default.ini is used to generate the online manual at http://www.phpdoc.org/docs +;; +;; ALL .ini files must be in the user subdirectory of phpDocumentor with an extension of .ini +;; +;; Copyright 2002, Greg Beaver <cellog@php.net> +;; +;; WARNING: do not change the name of any command-line parameters, phpDocumentor will ignore them + +[Parse Data] +;; title of all the documentation +;; legal values: any string +title = phpDocumentor Manual + +;; parse files that start with a . like .bash_profile +;; legal values: true, false +hidden = false + +;; show elements marked @access private in documentation by setting this to on +;; legal values: on, off +parseprivate = off + +;; parse with javadoc-like description (first sentence is always the short description) +;; legal values: on, off +javadocdesc = off + +;; add any custom @tags separated by commas here +;; legal values: any legal tagname separated by commas. +;customtags = mytag1,mytag2 + +;; This is only used by the XML:DocBook/peardoc2 converter +defaultcategoryname = Documentation + +;; what is the main package? +;; legal values: alphanumeric string plus - and _ +defaultpackagename = phpDocumentor + +;; output any parsing information? set to on for cron jobs +;; legal values: on +;quiet = on + +;; parse a PEAR-style repository. Do not turn this on if your project does +;; not have a parent directory named "pear" +;; legal values: on/off +;pear = on + +;; where should the documentation be written? +;; legal values: a legal path +;target = /home/cellog/output +target = /you-MUST/change-me/to-fit/your-environment + +;; Which files should be parsed out as special documentation files, such as README, +;; INSTALL and CHANGELOG? This overrides the default files found in +;; phpDocumentor.ini (this file is not a user .ini file, but the global file) +readmeinstallchangelog = README, INSTALL, FAQ, LICENSE, Release-1.4.0 + +;; limit output to the specified packages, even if others are parsed +;; legal values: package names separated by commas +;packageoutput = package1,package2 + +;; comma-separated list of files to parse +;; legal values: paths separated by commas +;filename = /path/to/file1,/path/to/file2,fileincurrentdirectory + +;; comma-separated list of directories to parse +;; legal values: directory paths separated by commas +;directory = /path1,/path2,.,..,subdirectory +;directory = /home/jeichorn/cvs/pear +;directory = /home/cellog/workspace/phpdoc +directory = /you-MUST/also-change-me/to-fit/your-environment + +;; template base directory (the equivalent directory of <installdir>/phpDocumentor) +;templatebase = /path/to/my/templates + +;; directory to find any example files in through @example and {@example} tags +;examplesdir = /path/to/my/templates + +;; comma-separated list of files, directories or wildcards ? and * (any wildcard) to ignore +;; legal values: any wildcard strings separated by commas +;; remember, this pathing is RELATIVE to the top-most directory in your "directory" value +;ignore = path/to/ignore*,*list.php,myfile.php,subdirectory/ +ignore = pear-*,templates/,Documentation/,test*.php,Lexer.inc + +;; comma-separated list of Converters to use in outputformat:Convertername:templatedirectory format +;; legal values: HTML:frames:default,HTML:frames:l0l33t,HTML:frames:phpdoc.de,HTML:frames:phphtmllib, +;; HTML:frames:earthli, +;; HTML:frames:DOM/default,HTML:frames:DOM/l0l33t,HTML:frames:DOM/phpdoc.de, +;; HTML:frames:DOM/phphtmllib,HTML:frames:DOM/earthli +;; HTML:Smarty:default,HTML:Smarty:PHP,HTML:Smarty:HandS +;; PDF:default:default,CHM:default:default,XML:DocBook/peardoc2:default +output=HTML:frames:earthli,HTML:frames:default,HTML:frames:l0l33t,HTML:frames:phpdoc.de,HTML:frames:phphtmllib,HTML:frames:DOM/default,HTML:frames:DOM/l0l33t,HTML:frames:DOM/phpdoc.de,HTML:frames:DOM/earthli,HTML:frames:DOM/phphtmllib,HTML:frames:phpedit,HTML:Smarty:default,HTML:Smarty:PHP,HTML:Smarty:HandS + +;; turn this option on if you want highlighted source code for every file +;; legal values: on/off +sourcecode = on diff --git a/buildscripts/PhpDocumentor/user/demo.ini b/buildscripts/PhpDocumentor/user/demo.ini index edf0a353..fc4f5baf 100644 --- a/buildscripts/PhpDocumentor/user/demo.ini +++ b/buildscripts/PhpDocumentor/user/demo.ini @@ -1,78 +1,86 @@ -;; phpDocumentor demonstration parse configuration file
-;;
-;; RUN THIS FILE FROM THE INSTALL DIRECTORY
-;; CHANGE HERE:
-
-;; where should the documentation be written?
-;; legal values: a legal path
-target = /home/CelloG/output
-
-;; DONT CHANGE BELOW HERE
-;;
-;; This file is designed to cut down on repetitive typing on the command-line or web interface
-;; You can copy this file to create a number of configuration files that can be used with the
-;; command-line switch -c, as in phpdoc -c default.ini or phpdoc -c myini.ini. The web
-;; interface will automatically generate a list of .ini files that can be used.
-;;
-;; ALL .ini files must be in the user subdirectory of phpDocumentor with an extension of .ini
-;;
-;; Copyright 2002, Greg Beaver <cellog@users.sourceforge.net>
-;;
-;; WARNING: do not change the
-
-[Parse Data]
-;; title of all the documentation
-;; legal values: any string
-title = Generated Documentation
-
-;; parse files that start with a . like .bash_profile
-;; legal values: true, false
-hidden = false
-
-;; show elements marked @access private in documentation by setting this to on
-;; legal values: on, off
-parseprivate = off
-
-;; parse with javadoc-like description (first sentence is always the short description)
-;; legal values: on, off
-javadocdesc = off
-
-target=/dev/null
-
-;; add any custom @tags separated by commas here
-;; legal values: any legal tagname separated by commas.
-;customtags = mytag1,mytag2
-
-;; what is the main package?
-;; legal values: alphanumeric string plus - and _
-defaultpackagename = phpDocumentor
-
-;; output any parsing information? set to on for cron jobs
-;; legal values: on
-;quiet = on
-
-;; limit output to the specified packages, even if others are parsed
-;; legal values: package names separated by commas
-;packageoutput = package1,package2
-
-;; comma-separated list of files to parse
-;; legal values: paths separated by commas
-;filename = /path/to/file1,/path/to/file2,fileincurrentdirectory
-filename = test.php
-
-;; comma-separated list of directories to parse
-;; legal values: directory paths separated by commas
-;directory = /path1,/path2,.,..,subdirectory
-;directory = /home/jeichorn/cvs/pear
-;directory = .
-
-;; comma-separated list of files, directories or wildcards ? and * (any wildcard) to ignore
-;; legal values: any wildcard strings separated by commas
-;ignore = /path/to/ignore*,*list.php,myfile.php,subdirectory/
-ignore = templates_c/,*HTML/default/*,spec/
-
-;; comma-separated list of Converters to use in outputformat:Convertername:templatedirectory format
-;; legal values: HTML:frames:default,HTML:frames:l0l33t,HTML:frames:phpdoc.de,HTML:frames:phphtmllib
-;; HTML:frames:phpedit,HTML:frames:DOM/default,HTML:frames:DOM/l0l33t,HTML:frames:DOM/phpdoc.de
-;; HTML:Smarty:default,HTML:Smarty:PHP,PDF:default:default,CHM:default:default,XML:DocBook:default
-output=HTML:frames:default,HTML:frames:l0l33t,HTML:frames:phpdoc.de,HTML:frames:phphtmllib,HTML:frames:DOM/default,HTML:frames:DOM/l0l33t,HTML:frames:DOM/phpdoc.de,HTML:frames:phpedit,HTML:Smarty:default,HTML:Smarty:HandS,HTML:Smarty:PHP,PDF:default:default,XML:DocBook/peardoc2:default,CHM:default:default
\ No newline at end of file +;; phpDocumentor demonstration parse configuration file +;; +;; RUN THIS FILE FROM THE INSTALL DIRECTORY +;; CHANGE HERE: + +;; where should the documentation be written? +;; legal values: a legal path +;target = /home/CelloG/output +target = /you-MUST/change-me/to-fit/your-environment + + +;; DONT CHANGE BELOW HERE +;; +;; This file is designed to cut down on repetitive typing on the command-line or web interface +;; You can copy this file to create a number of configuration files that can be used with the +;; command-line switch -c, as in phpdoc -c default.ini or phpdoc -c myini.ini. The web +;; interface will automatically generate a list of .ini files that can be used. +;; +;; ALL .ini files must be in the user subdirectory of phpDocumentor with an extension of .ini +;; +;; Copyright 2002, Greg Beaver <cellog@php.net> +;; +;; WARNING: do not change the + +[Parse Data] +;; title of all the documentation +;; legal values: any string +title = Generated Documentation + +;; parse files that start with a . like .bash_profile +;; legal values: true, false +hidden = false + +;; show elements marked @access private in documentation by setting this to on +;; legal values: on, off +parseprivate = off + +;; parse with javadoc-like description (first sentence is always the short description) +;; legal values: on, off +javadocdesc = off + +target=/dev/null + +;; add any custom @tags separated by commas here +;; legal values: any legal tagname separated by commas. +;customtags = mytag1,mytag2 + +;; what is the main package? +;; legal values: alphanumeric string plus - and _ +defaultpackagename = phpDocumentor + +;; output any parsing information? set to on for cron jobs +;; legal values: on +;quiet = on + +;; limit output to the specified packages, even if others are parsed +;; legal values: package names separated by commas +;packageoutput = package1,package2 + +;; comma-separated list of files to parse +;; legal values: paths separated by commas +;filename = /path/to/file1,/path/to/file2,fileincurrentdirectory +filename = test.php + +;; comma-separated list of directories to parse +;; legal values: directory paths separated by commas +;directory = /path1,/path2,.,..,subdirectory +;directory = /home/jeichorn/cvs/pear +;directory = /you-MUST/change-me/to-fit/your-environment +;directory = . + +;; comma-separated list of files, directories or wildcards ? and * (any wildcard) to ignore +;; legal values: any wildcard strings separated by commas +;; remember, this pathing is RELATIVE to the top-most directory in your "directory" value +;ignore = path/to/ignore*,*list.php,myfile.php,subdirectory/ +ignore = templates_c/,*HTML/default/*,spec/ + +;; comma-separated list of Converters to use in outputformat:Convertername:templatedirectory format +;; legal values: HTML:frames:default,HTML:frames:l0l33t,HTML:frames:phpdoc.de,HTML:frames:phphtmllib +;; HTML:frames:phpedit,HTML:frames:DOM/default,HTML:frames:DOM/l0l33t,HTML:frames:DOM/phpdoc.de +;; HTML:Smarty:default,HTML:Smarty:PHP,PDF:default:default,CHM:default:default,XML:DocBook:default +output=HTML:frames:default,HTML:frames:l0l33t,HTML:frames:phpdoc.de,HTML:frames:phphtmllib,HTML:frames:DOM/default,HTML:frames:DOM/l0l33t,HTML:frames:DOM/phpdoc.de,HTML:frames:phpedit,HTML:Smarty:default,HTML:Smarty:HandS,HTML:Smarty:PHP,PDF:default:default,XML:DocBook/peardoc2:default,CHM:default:default + +;; turn this option on if you want highlighted source code for every file +;; legal values: on/off +;sourcecode = on diff --git a/buildscripts/PhpDocumentor/user/error.ini b/buildscripts/PhpDocumentor/user/error.ini index cb8d4ca5..7fcd7539 100644 --- a/buildscripts/PhpDocumentor/user/error.ini +++ b/buildscripts/PhpDocumentor/user/error.ini @@ -1,82 +1,84 @@ -;; phpDocumentor parse configuration file
-;;
-;; This file is designed to cut down on repetitive typing on the command-line or web interface
-;; You can copy this file to create a number of configuration files that can be used with the
-;; command-line switch -c, as in phpdoc -c default.ini or phpdoc -c myini.ini. The web
-;; interface will automatically generate a list of .ini files that can be used.
-;;
-;; ALL .ini files must be in the user subdirectory of phpDocumentor with an extension of .ini
-;;
-;; Copyright 2002, Greg Beaver <cellog@users.sourceforge.net>
-;;
-;; WARNING: do not change the name of any command-line parameters, phpDocumentor will halt
-
-[Parse Data]
-;; title of all the documentation
-;; legal values: any string
-title = SlateLib Manual
-
-;; parse files that start with a . like .bash_profile
-;; legal values: true, false
-hidden = false
-
-;; show elements marked @access private in documentation by setting this to on
-;; legal values: on, off
-parseprivate = on
-
-;; parse with javadoc-like description (first sentence is always the short description)
-;; legal values: on, off
-javadocdesc = off
-
-;; add any custom @tags separated by commas here
-;; legal values: any legal tagname separated by commas.
-;customtags = mytag1,mytag2
-
-;; This is only used by the XML:DocBook/peardoc2 converter
-defaultcategoryname = Documentation
-
-;; what is the main package?
-;; legal values: alphanumeric string plus - and _
-defaultpackagename = junk
-
-;; output any parsing information? set to on for cron jobs
-;; legal values: on
-;quiet = on
-
-;; parse a PEAR-style repository. Do not turn this on if your project does
-;; not have a parent directory named "pear"
-;; legal values: on/off
-;pear = on
-
-;; where should the documentation be written?
-;; legal values: a legal path
-target = /tmp/docs
-
-;; limit output to the specified packages, even if others are parsed
-;; legal values: package names separated by commas
-;packageoutput = package1,package2
-
-;; comma-separated list of files to parse
-;; legal values: paths separated by commas
-;filename = /path/to/file1,/path/to/file2,fileincurrentdirectory
-
-;; comma-separated list of directories to parse
-;; legal values: directory paths separated by commas
-;directory = /path1,/path2,.,..,subdirectory
-;directory = /home/jeichorn/cvs/pear
-directory = /home/jeichorn/cvs/slatelib
-
-;; comma-separated list of files, directories or wildcards ? and * (any wildcard) to ignore
-;; legal values: any wildcard strings separated by commas
-;ignore = /path/to/ignore*,*list.php,myfile.php,subdirectory/
-ignore =
-
-;; comma-separated list of Converters to use in outputformat:Convertername:templatedirectory format
-;; legal values: HTML:frames:default,HTML:frames:l0l33t,HTML:frames:phpdoc.de,HTML:frames:phphtmllib
-;; HTML:frames:DOM/default,HTML:frames:DOM/l0l33t,HTML:frames:DOM/phpdoc.de,HTML:Smarty:default
-;; HTML:Smarty:PHP,PDF:default:default,CHM:default:default,XML:DocBook/peardoc2:default
-output=HTML:Smarty:default,HTML:Smarty:PHP
-
-;; turn this option on if you want highlighted source code for every file
-;; legal values: on/off
-sourcecode = on
+;; phpDocumentor parse configuration file +;; +;; This file is designed to cut down on repetitive typing on the command-line or web interface +;; You can copy this file to create a number of configuration files that can be used with the +;; command-line switch -c, as in phpdoc -c default.ini or phpdoc -c myini.ini. The web +;; interface will automatically generate a list of .ini files that can be used. +;; +;; ALL .ini files must be in the user subdirectory of phpDocumentor with an extension of .ini +;; +;; Copyright 2002, Greg Beaver <cellog@php.net> +;; +;; WARNING: do not change the name of any command-line parameters, phpDocumentor will halt + +[Parse Data] +;; title of all the documentation +;; legal values: any string +title = SlateLib Manual + +;; parse files that start with a . like .bash_profile +;; legal values: true, false +hidden = false + +;; show elements marked @access private in documentation by setting this to on +;; legal values: on, off +parseprivate = on + +;; parse with javadoc-like description (first sentence is always the short description) +;; legal values: on, off +javadocdesc = off + +;; add any custom @tags separated by commas here +;; legal values: any legal tagname separated by commas. +;customtags = mytag1,mytag2 + +;; This is only used by the XML:DocBook/peardoc2 converter +defaultcategoryname = Documentation + +;; what is the main package? +;; legal values: alphanumeric string plus - and _ +defaultpackagename = junk + +;; output any parsing information? set to on for cron jobs +;; legal values: on +;quiet = on + +;; parse a PEAR-style repository. Do not turn this on if your project does +;; not have a parent directory named "pear" +;; legal values: on/off +;pear = on + +;; where should the documentation be written? +;; legal values: a legal path +target = /tmp/docs + +;; limit output to the specified packages, even if others are parsed +;; legal values: package names separated by commas +;packageoutput = package1,package2 + +;; comma-separated list of files to parse +;; legal values: paths separated by commas +;filename = /path/to/file1,/path/to/file2,fileincurrentdirectory + +;; comma-separated list of directories to parse +;; legal values: directory paths separated by commas +;directory = /path1,/path2,.,..,subdirectory +;directory = /home/jeichorn/cvs/pear +;directory = /home/jeichorn/cvs/slatelib +directory = /you-MUST/change-me/to-fit/your-environment + +;; comma-separated list of files, directories or wildcards ? and * (any wildcard) to ignore +;; legal values: any wildcard strings separated by commas +;; remember, this pathing is RELATIVE to the top-most directory in your "directory" value +;ignore = path/to/ignore*,*list.php,myfile.php,subdirectory/ +ignore = + +;; comma-separated list of Converters to use in outputformat:Convertername:templatedirectory format +;; legal values: HTML:frames:default,HTML:frames:l0l33t,HTML:frames:phpdoc.de,HTML:frames:phphtmllib +;; HTML:frames:DOM/default,HTML:frames:DOM/l0l33t,HTML:frames:DOM/phpdoc.de,HTML:Smarty:default +;; HTML:Smarty:PHP,PDF:default:default,CHM:default:default,XML:DocBook/peardoc2:default +output=HTML:Smarty:default,HTML:Smarty:PHP + +;; turn this option on if you want highlighted source code for every file +;; legal values: on/off +sourcecode = on diff --git a/buildscripts/PhpDocumentor/user/makedocs.ini b/buildscripts/PhpDocumentor/user/makedocs.ini new file mode 100755 index 00000000..229758d5 --- /dev/null +++ b/buildscripts/PhpDocumentor/user/makedocs.ini @@ -0,0 +1,91 @@ +;; phpDocumentor parse configuration file +;; +;; This file is designed to cut down on repetitive typing on the command-line or web interface +;; You can copy this file to create a number of configuration files that can be used with the +;; command-line switch -c, as in phpdoc -c default.ini or phpdoc -c myini.ini. The web +;; interface will automatically generate a list of .ini files that can be used. +;; +;; ALL .ini files must be in the user subdirectory of phpDocumentor with an extension of .ini +;; +;; Copyright 2002, Greg Beaver <cellog@php.net> +;; +;; WARNING: do not change the + +[Parse Data] +;; title of all the documentation +;; legal values: any string +title = phpDocumentor Manual + +;; parse files that start with a . like .bash_profile +;; legal values: true, false +hidden = false + +;; follow symlinks +;; legal values: true, false, on, off +;ignoresymlinks = false + +;; show elements marked @access private in documentation by setting this to on +;; legal values: on, off +parseprivate = off + +;; parse with javadoc-like description (first sentence is always the short description) +;; legal values: on, off +javadocdesc = off + +;; add any custom @tags separated by commas here +;; legal values: any legal tagname separated by commas. +;customtags = mytag1,mytag2 + +;; what is the main package? +;; legal values: alphanumeric string plus - and _ +defaultpackagename = phpDocumentor + +;; what is main category? +;; legal values: one alphanumeric "word" +defaultcategoryname = ToolsAndUtilities + +;; output any parsing information? set to on for cron jobs +;; legal values: on +;quiet = on + +;; capture undocumented elements and list in errors.html +;; legal values: true, false, on, off +;undocumentedelements = on + +;; where should the documentation be written? +;; legal values: a legal path +target = ./Documentation/new + +;; limit output to the specified packages, even if others are parsed +;; legal values: package names separated by commas +;packageoutput = package1,package2 + +;; comma-separated list of files to parse +;; legal values: paths separated by commas +;filename = /path/to/file1,/path/to/file2,fileincurrentdirectory + +;; comma-separated list of directories to parse +;; legal values: directory paths separated by commas +;directory = /path1,/path2,.,..,subdirectory +;directory = /home/jeichorn/cvs/pear +;directory = /you-MUST/change-me/to-fit/your-environment +directory = . + +;; comma-separated list of files, directories or wildcards ? and * (any wildcard) to ignore +;; legal values: any wildcard strings separated by commas +;; remember, this pathing is RELATIVE to the top-most directory in your "directory" value +;ignore = path/to/ignore*,*list.php,myfile.php,subdirectory/ +ignore = templates_c/,*HTML/default/*,spec/,*DocBlock/*,*scripts/*,*AllTests* + +;; comma-separated list of Converters to use in outputformat:Convertername:templatedirectory format +;; legal values: HTML:frames:default,HTML:frames:earthli,HTML:frames:l0l33t,HTML:frames:phpdoc.de,HTML:frames:phpedit,HTML:frames:phphtmllib, +;; HTML:frames:DOM/default,HTML:frames:DOM/earthli,HTML:frames:DOM/l0l33t,HTML:frames:DOM/phpdoc.de,HTML:frames:DOM/phphtmllib, +;; HTML:Smarty:default,HTML:Smarty:PHP,HTML:Smarty:HandS, +;; PDF:default:default, +;; CHM:default:default, +;; XML:DocBook/peardoc2:default +output=HTML:Smarty:HandS + +;; turn this option on if you want highlighted source code for every file +;; legal values: on/off +;sourcecode = on diff --git a/buildscripts/PhpDocumentor/user/pear-makedocs.ini b/buildscripts/PhpDocumentor/user/pear-makedocs.ini index 750cf48f..5c5081bc 100644 --- a/buildscripts/PhpDocumentor/user/pear-makedocs.ini +++ b/buildscripts/PhpDocumentor/user/pear-makedocs.ini @@ -1,71 +1,94 @@ -;; phpDocumentor parse configuration file
-;;
-;; This file is designed to cut down on repetitive typing on the command-line or web interface
-;; You can copy this file to create a number of configuration files that can be used with the
-;; command-line switch -c, as in phpdoc -c default.ini or phpdoc -c myini.ini. The web
-;; interface will automatically generate a list of .ini files that can be used.
-;;
-;; ALL .ini files must be in the user subdirectory of phpDocumentor with an extension of .ini
-;;
-;; Copyright 2002, Greg Beaver <cellog@users.sourceforge.net>
-;;
-;; WARNING: do not change the
-
-[Parse Data]
-;; title of all the documentation
-;; legal values: any string
-title = phpDocumentor Manual
-
-;; parse files that start with a . like .bash_profile
-;; legal values: true, false
-hidden = false
-
-;; show elements marked @access private in documentation by setting this to on
-;; legal values: on, off
-parseprivate = off
-
-;; parse with javadoc-like description (first sentence is always the short description)
-;; legal values: on, off
-javadocdesc = off
-
-;; add any custom @tags separated by commas here
-;; legal values: any legal tagname separated by commas.
-;customtags = mytag1,mytag2
-
-;; what is the main package?
-;; legal values: alphanumeric string plus - and _
-defaultpackagename = phpDocumentor
-
-;; output any parsing information? set to on for cron jobs
-;; legal values: on
-;quiet = on
-
-;; where should the documentation be written?
-;; legal values: a legal path
-target = @DOC-DIR@/PhpDocumentor/Documentation/new
-
-;; limit output to the specified packages, even if others are parsed
-;; legal values: package names separated by commas
-;packageoutput = package1,package2
-
-;; comma-separated list of files to parse
-;; legal values: paths separated by commas
-;filename = /path/to/file1,/path/to/file2,fileincurrentdirectory
-filename = @DOC-DIR@/PhpDocumentor/README,@DOC-DIR@/PhpDocumentor/ChangeLog,@DOC-DIR@/PhpDocumentor/Release-@VER@,@DOC-DIR@/PhpDocumentor/FAQ
-;; comma-separated list of directories to parse
-;; legal values: directory paths separated by commas
-;directory = /path1,/path2,.,..,subdirectory
-;directory = /home/jeichorn/cvs/pear
-directory = @PEAR-DIR@/PhpDocumentor,@DOC-DIR@/PhpDocumentor/tutorials
-
-releaseinstallchangelog = Release-@VER@,ChangeLog,README,FAQ
-
-;; comma-separated list of files, directories or wildcards ? and * (any wildcard) to ignore
-;; legal values: any wildcard strings separated by commas
-;ignore = /path/to/ignore*,*list.php,myfile.php,subdirectory/
-
-;; comma-separated list of Converters to use in outputformat:Convertername:templatedirectory format
-;; legal values: HTML:frames:default,HTML:frames:l0l33t,HTML:frames:phpdoc.de,HTML:frames:phphtmllib
-;; HTML:frames:DOM/default,HTML:frames:DOM/l0l33t,HTML:frames:DOM/phpdoc.de,HTML:Smarty:default
-;; HTML:Smarty:PHP,HTML:Smarty:HandS,PDF:default:default,CHM:default:default,XML:DocBook/peardoc2:default
-output=HTML:Smarty:HandS
\ No newline at end of file +;; phpDocumentor parse configuration file +;; +;; This file is designed to cut down on repetitive typing on the command-line or web interface +;; You can copy this file to create a number of configuration files that can be used with the +;; command-line switch -c, as in phpdoc -c default.ini or phpdoc -c myini.ini. The web +;; interface will automatically generate a list of .ini files that can be used. +;; +;; ALL .ini files must be in the user subdirectory of phpDocumentor with an extension of .ini +;; +;; Copyright 2002, Greg Beaver <cellog@php.net> +;; +;; WARNING: do not change the + +[Parse Data] +;; title of all the documentation +;; legal values: any string +title = phpDocumentor Manual + +;; parse files that start with a . like .bash_profile +;; legal values: true, false +hidden = false + +;; follow symlinks +;; legal values: true, false, on, off +;ignoresymlinks = false + +;; show elements marked @access private in documentation by setting this to on +;; legal values: on, off +parseprivate = off + +;; parse with javadoc-like description (first sentence is always the short description) +;; legal values: on, off +javadocdesc = off + +;; add any custom @tags separated by commas here +;; legal values: any legal tagname separated by commas. +;customtags = mytag1,mytag2 + +;; what is the main package? +;; legal values: alphanumeric string plus - and _ +defaultpackagename = phpDocumentor + +;; what is main category? +;; legal values: one alphanumeric "word" +defaultcategoryname = ToolsAndUtilities + +;; output any parsing information? set to on for cron jobs +;; legal values: on +;quiet = on + +;; capture undocumented elements and list in errors.html +;; legal values: true, false, on, off +;undocumentedelements = on + +;; where should the documentation be written? +;; legal values: a legal path +target = @DOC-DIR@/PhpDocumentor/Documentation/new + +;; limit output to the specified packages, even if others are parsed +;; legal values: package names separated by commas +;packageoutput = package1,package2 + +;; comma-separated list of files to parse +;; legal values: paths separated by commas +;filename = /path/to/file1,/path/to/file2,fileincurrentdirectory +;filename = @DOC-DIR@/PhpDocumentor/README,@DOC-DIR@/PhpDocumentor/ChangeLog,@DOC-DIR@/PhpDocumentor/Release-@VER@,@DOC-DIR@/PhpDocumentor/FAQ + +;; comma-separated list of directories to parse +;; legal values: directory paths separated by commas +;directory = /path1,/path2,.,..,subdirectory +;directory = /home/jeichorn/cvs/pear +;directory = /you-MUST/change-me/to-fit/your-environment +directory = @PEAR-DIR@/PhpDocumentor,@DOC-DIR@/PhpDocumentor + +releaseinstallchangelog = Release-@VER@,ChangeLog,README,FAQ,INSTALL,LICENSE,Authors + +;; comma-separated list of files, directories or wildcards ? and * (any wildcard) to ignore +;; legal values: any wildcard strings separated by commas +;; remember, this pathing is RELATIVE to the top-most directory in your "directory" value +;ignore = path/to/ignore*,*list.php,myfile.php,subdirectory/ +ignore = scripts/,Documentation/ + +;; comma-separated list of Converters to use in outputformat:Convertername:templatedirectory format +;; legal values: HTML:frames:default,HTML:frames:earthli,HTML:frames:l0l33t,HTML:frames:phpdoc.de,HTML:frames:phpedit,HTML:frames:phphtmllib, +;; HTML:frames:DOM/default,HTML:frames:DOM/earthli,HTML:frames:DOM/l0l33t,HTML:frames:DOM/phpdoc.de,HTML:frames:DOM/phphtmllib, +;; HTML:Smarty:default,HTML:Smarty:PHP,HTML:Smarty:HandS, +;; PDF:default:default, +;; CHM:default:default, +;; XML:DocBook/peardoc2:default +output=HTML:Smarty:HandS + +;; turn this option on if you want highlighted source code for every file +;; legal values: on/off +;sourcecode = on diff --git a/buildscripts/PhpDocumentor/user/testdocbook.ini b/buildscripts/PhpDocumentor/user/testdocbook.ini index 8de48fc0..8ad67e1b 100644 --- a/buildscripts/PhpDocumentor/user/testdocbook.ini +++ b/buildscripts/PhpDocumentor/user/testdocbook.ini @@ -1,74 +1,80 @@ -;; phpDocumentor parse configuration file
-;;
-;; This file is designed to cut down on repetitive typing on the command-line or web interface
-;; You can copy this file to create a number of configuration files that can be used with the
-;; command-line switch -c, as in phpdoc -c default.ini or phpdoc -c myini.ini. The web
-;; interface will automatically generate a list of .ini files that can be used.
-;;
-;; ALL .ini files must be in the user subdirectory of phpDocumentor with an extension of .ini
-;;
-;; Copyright 2002, Greg Beaver <cellog@users.sourceforge.net>
-;;
-;; WARNING: do not change the
-
-[Parse Data]
-;; title of all the documentation
-;; legal values: any string
-title = Generated Documentation
-
-;; parse files that start with a . like .bash_profile
-;; legal values: true, false
-hidden = false
-
-;; show elements marked @access private in documentation by setting this to on
-;; legal values: on, off
-parseprivate = off
-
-pear=on
-
-;; parse with javadoc-like description (first sentence is always the short description)
-;; legal values: on, off
-javadocdesc = off
-
-;; add any custom @tags separated by commas here
-;; legal values: any legal tagname separated by commas.
-;customtags = mytag1,mytag2
-
-;; what is the main package?
-;; legal values: alphanumeric string plus - and _
-defaultpackagename = PEAR_PackageFileManager
-
-defaultcategoryname = pear
-
-;; output any parsing information? set to on for cron jobs
-;; legal values: on
-;quiet = on
-
-;; where should the documentation be written?
-;; legal values: a legal path
-target = /home/cellog/peardoc/en/package
-
-;; limit output to the specified packages, even if others are parsed
-;; legal values: package names separated by commas
-;packageoutput = package1,package2
-
-;; comma-separated list of files to parse
-;; legal values: paths separated by commas
-;filename = /path/to/file1,/path/to/file2,fileincurrentdirectory
-
-;; comma-separated list of directories to parse
-;; legal values: directory paths separated by commas
-;directory = /path1,/path2,.,..,subdirectory
-directory = /home/cellog/pear/PEAR_PackageFileManager
-;directory = /home/CelloG/phpdoc
-
-;; comma-separated list of files, directories or wildcards ? and * (any wildcard) to ignore
-;; legal values: any wildcard strings separated by commas
-;ignore = /path/to/ignore*,*list.php,myfile.php,subdirectory/
-ignore = examples/
-
-;; comma-separated list of Converters to use in outputformat:Convertername:templatedirectory format
-;; legal values: HTML:frames:default,HTML:frames:l0l33t,HTML:frames:phpdoc.de,HTML:frames:phphtmllib
-;; HTML:frames:DOM/default,HTML:frames:DOM/l0l33t,HTML:frames:DOM/phpdoc.de,HTML:Smarty:default
-;; HTML:Smarty:PHP,PDF:default:default,CHM:default:default,XML:DocBook:default
-output=XML:DocBook/peardoc2:default
+;; phpDocumentor parse configuration file +;; +;; This file is designed to cut down on repetitive typing on the command-line or web interface +;; You can copy this file to create a number of configuration files that can be used with the +;; command-line switch -c, as in phpdoc -c default.ini or phpdoc -c myini.ini. The web +;; interface will automatically generate a list of .ini files that can be used. +;; +;; ALL .ini files must be in the user subdirectory of phpDocumentor with an extension of .ini +;; +;; Copyright 2002, Greg Beaver <cellog@php.net> +;; +;; WARNING: do not change the + +[Parse Data] +;; title of all the documentation +;; legal values: any string +title = Generated Documentation + +;; parse files that start with a . like .bash_profile +;; legal values: true, false +hidden = false + +;; show elements marked @access private in documentation by setting this to on +;; legal values: on, off +parseprivate = off + +pear=on + +;; parse with javadoc-like description (first sentence is always the short description) +;; legal values: on, off +javadocdesc = off + +;; add any custom @tags separated by commas here +;; legal values: any legal tagname separated by commas. +;customtags = mytag1,mytag2 + +;; what is the main package? +;; legal values: alphanumeric string plus - and _ +defaultpackagename = PEAR_PackageFileManager + +defaultcategoryname = pear + +;; output any parsing information? set to on for cron jobs +;; legal values: on +;quiet = on + +;; where should the documentation be written? +;; legal values: a legal path +;target = /home/cellog/peardoc/en/package +target = /you-MUST/change-me/to-fit/your-environment + +;; limit output to the specified packages, even if others are parsed +;; legal values: package names separated by commas +;packageoutput = package1,package2 + +;; comma-separated list of files to parse +;; legal values: paths separated by commas +;filename = /path/to/file1,/path/to/file2,fileincurrentdirectory + +;; comma-separated list of directories to parse +;; legal values: directory paths separated by commas +;directory = /path1,/path2,.,..,subdirectory +;directory = /home/CelloG/phpdoc +directory = /you-MUST/also-change-me/to-fit/your-environment + +;; comma-separated list of files, directories or wildcards ? and * (any wildcard) to ignore +;; legal values: any wildcard strings separated by commas +;; remember, this pathing is RELATIVE to the top-most directory in your "directory" value +;ignore = path/to/ignore*,*list.php,myfile.php,subdirectory/ +ignore = examples/ + +;; comma-separated list of Converters to use in outputformat:Convertername:templatedirectory format +;; legal values: HTML:frames:default,HTML:frames:l0l33t,HTML:frames:phpdoc.de,HTML:frames:phphtmllib +;; HTML:frames:DOM/default,HTML:frames:DOM/l0l33t,HTML:frames:DOM/phpdoc.de,HTML:Smarty:default +;; HTML:Smarty:PHP,PDF:default:default,CHM:default:default,XML:DocBook:default +output=XML:DocBook/peardoc2:default + +;; turn this option on if you want highlighted source code for every file +;; legal values: on/off +;sourcecode = on |