summaryrefslogtreecommitdiff
path: root/buildscripts/PhpDocumentor/phpDocumentor
diff options
context:
space:
mode:
Diffstat (limited to 'buildscripts/PhpDocumentor/phpDocumentor')
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Classes.inc1356
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converter.inc5460
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/CHMdefaultConverter.inc1899
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/options.ini507
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/basicindex.tpl21
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/blank.tpl13
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/class.tpl94
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/classleft.tpl8
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/classtrees.tpl12
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/const.tpl29
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/contents.hhc.tpl11
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/define.tpl33
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/docblock.tpl31
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/elementindex.tpl9
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/errors.tpl21
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/fileleft.tpl8
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/filesource.tpl6
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/footer.tpl8
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/function.tpl44
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/global.tpl32
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/header.tpl22
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/hhp.tpl17
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/include.tpl26
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/index.hhk.tpl8
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/index.tpl24
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/media/bg_left.pngbin0 -> 991 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/media/stylesheet.css130
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/method.tpl126
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/packages.tpl3
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/page.tpl34
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/pkgelementindex.tpl14
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/ric.tpl6
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/tocentry.tpl11
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/todolist.tpl14
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/tutorial.tpl32
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/tutorial_toc.tpl29
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/tutorial_tree.tpl5
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/var.tpl51
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/HTMLSmartyConverter.inc1966
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/options.ini577
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/basicindex.tpl21
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/blank.tpl6
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/class.tpl541
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/classleft.tpl11
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/classtags.tpl22
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/classtrees.tpl17
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/const.tpl19
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/define.tpl34
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/docblock.tpl5
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/elementindex.tpl12
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/errors.tpl21
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/examplesource.tpl6
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/fileleft.tpl8
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/filesource.tpl8
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/filetags.tpl7
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/footer.tpl11
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/function.tpl54
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/global.tpl35
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/header.tpl110
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/include.tpl18
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/index.tpl7
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/media/background.pngbin0 -> 307 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/media/empty.pngbin0 -> 206 bytes
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/media/logo.pngbin0 -> 7724 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/media/style.css135
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/method.tpl176
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/packages.tpl3
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/page.tpl210
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/pkgelementindex.tpl15
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/ric.tpl6
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/tags.tpl22
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/todolist.tpl14
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/tutorial.tpl32
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/tutorial_toc.tpl29
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/tutorial_tree.tpl5
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/var.tpl94
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/options.ini577
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/basicindex.tpl18
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/blank.tpl5
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/class.tpl231
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/classleft.tpl9
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/classtrees.tpl17
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/const.tpl14
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/define.tpl32
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/docblock.tpl15
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/elementindex.tpl5
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/errors.tpl21
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/examplesource.tpl6
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/fileleft.tpl10
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/filesource.tpl8
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/footer.tpl11
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/function.tpl48
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/global.tpl40
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/header.tpl97
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/include.tpl9
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/index.tpl7
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/media/background.pngbin0 -> 238 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/media/empty.pngbin0 -> 206 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/media/style.css195
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/method.tpl145
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/packages.tpl3
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/page.tpl31
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/pkgelementindex.tpl5
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/ric.tpl6
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/todolist.tpl14
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/tutorial.tpl32
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/tutorial_toc.tpl29
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/tutorial_tree.tpl5
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/var.tpl60
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/options.ini577
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/__tags.tpl13
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_class_declaration.tpl38
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_class_description.tpl7
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_class_list.tpl1
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_constant_details.tpl33
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_constant_summary.tpl22
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_constructor_details.tpl55
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_constructor_summary.tpl25
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_destructor_details.tpl55
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_destructor_summary.tpl27
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_footer.tpl1
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_get_constant_type.tpl10
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_header.tpl4
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_inherited_constants.tpl34
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_inherited_methods.tpl42
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_inheritence_tree.tpl3
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_method_details.tpl101
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_method_summary.tpl61
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_sub_classes.tpl19
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/_tags.tpl13
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/basicindex.tpl18
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/blank.tpl5
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/class.tpl29
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/classleft.tpl9
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/classtrees.tpl8
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/const.tpl14
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/define.tpl32
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/docblock.tpl15
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/elementindex.tpl5
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/errors.tpl21
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/examplesource.tpl6
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/fileleft.tpl10
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/filesource.tpl8
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/footer.tpl25
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/function.tpl48
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/global.tpl40
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/header.tpl113
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/include.tpl9
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/index.tpl7
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/media/background.pngbin0 -> 238 bytes
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/media/bg_left.pngbin0 -> 991 bytes
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/media/empty.pngbin0 -> 206 bytes
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/media/manual.css260
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/media/style.css598
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/media/stylesheet.css129
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/method.tpl58
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/packages.tpl3
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/page.tpl31
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/pkgelementindex.tpl5
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/ric.tpl6
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/todolist.tpl14
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/tutorial.tpl32
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/tutorial_toc.tpl29
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/tutorial_tree.tpl5
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/var.tpl28
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/options.ini577
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/basicindex.tpl17
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/blank.tpl5
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/class.tpl173
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/classleft.tpl8
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/classtrees.tpl17
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/const.tpl14
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/define.tpl23
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/docblock.tpl13
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/elementindex.tpl5
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/errors.tpl21
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/examplesource.tpl6
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/fileleft.tpl8
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/filesource.tpl8
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/footer.tpl7
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/function.tpl39
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/global.tpl24
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/header.tpl101
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/include.tpl8
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/index.tpl7
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/layout.css81
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/media/layout.css81
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/media/print.css25
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/media/style.css236
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/method.tpl123
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/packages.tpl3
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/page.tpl31
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/pkgelementindex.tpl5
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/ric.tpl6
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/style.css172
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/todolist.tpl14
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/tutorial.tpl32
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/tutorial_toc.tpl29
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/tutorial_tree.tpl5
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/default/templates/var.tpl36
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/HTMLframesConverter.inc1914
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/options.ini577
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/basicindex.tpl47
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/blank.tpl13
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/class.tpl429
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/classtrees.tpl19
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/const.tpl18
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/define.tpl24
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/docblock.tpl14
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/elementindex.tpl12
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/errors.tpl21
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/examplesource.tpl6
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/filesource.tpl8
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/footer.tpl8
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/function.tpl44
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/global.tpl26
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/header.tpl95
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/include.tpl16
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/index.tpl24
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/left_frame.tpl197
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/banner.css32
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/images/I.pngbin0 -> 148 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/images/L.pngbin0 -> 153 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/images/Lminus.pngbin0 -> 219 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/images/Lplus.pngbin0 -> 224 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/images/T.pngbin0 -> 152 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/images/Tminus.pngbin0 -> 207 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/images/Tplus.pngbin0 -> 222 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/images/blank.pngbin0 -> 144 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/images/empty.pngbin0 -> 90 bytes
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/images/minus.gifbin0 -> 54 bytes
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/images/plus.gifbin0 -> 56 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/lib/classTree.js454
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/stylesheet.css184
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/method.tpl149
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/page.tpl211
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/pkgelementindex.tpl17
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/ric.tpl6
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/todolist.tpl14
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/top_frame.tpl45
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/tutorial.tpl13
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/tutorial_nav.tpl41
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/tutorial_toc.tpl40
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/tutorial_tree.tpl8
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/var.tpl90
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/options.ini577
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/basicindex.tpl57
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/blank.tpl13
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/class.tpl444
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/classtrees.tpl19
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/const.tpl18
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/define.tpl25
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/docblock.tpl14
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/elementindex.tpl12
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/errors.tpl21
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/examplesource.tpl6
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/filesource.tpl8
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/footer.tpl8
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/function.tpl44
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/global.tpl27
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/header.tpl95
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/include.tpl17
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/index.tpl24
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/left_frame.tpl250
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/banner.css32
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/AbstractClass.pngbin0 -> 620 bytes
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/AbstractClass_logo.pngbin0 -> 1232 bytes
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/AbstractMethod.pngbin0 -> 696 bytes
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/AbstractPrivateClass.pngbin0 -> 848 bytes
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/AbstractPrivateClass_logo.pngbin0 -> 1615 bytes
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/AbstractPrivateMethod.pngbin0 -> 874 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Class.pngbin0 -> 570 bytes
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Class_logo.pngbin0 -> 1600 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Constant.pngbin0 -> 752 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Constructor.pngbin0 -> 865 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Destructor.pngbin0 -> 956 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Function.pngbin0 -> 596 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Global.pngbin0 -> 712 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/I.pngbin0 -> 148 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Index.pngbin0 -> 584 bytes
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Interface.pngbin0 -> 1083 bytes
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Interface_logo.pngbin0 -> 1600 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/L.pngbin0 -> 153 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Lminus.pngbin0 -> 219 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Lplus.pngbin0 -> 224 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Method.pngbin0 -> 661 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Page.pngbin0 -> 592 bytes
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Page_logo.pngbin0 -> 1369 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/PrivateClass.pngbin0 -> 790 bytes
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/PrivateClass_logo.pngbin0 -> 1836 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/PrivateMethod.pngbin0 -> 918 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/PrivateVariable.pngbin0 -> 772 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/StaticMethod.pngbin0 -> 661 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/StaticVariable.pngbin0 -> 688 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/T.pngbin0 -> 152 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Tminus.pngbin0 -> 207 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Tplus.pngbin0 -> 222 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Variable.pngbin0 -> 688 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/blank.pngbin0 -> 144 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/class_folder.pngbin0 -> 633 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/empty.pngbin0 -> 90 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/file.pngbin0 -> 462 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/folder.pngbin0 -> 492 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/function_folder.pngbin0 -> 605 bytes
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/minus.gifbin0 -> 54 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/next_button.pngbin0 -> 657 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/next_button_disabled.pngbin0 -> 543 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/package.pngbin0 -> 668 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/package_folder.pngbin0 -> 564 bytes
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/plus.gifbin0 -> 56 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/previous_button.pngbin0 -> 644 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/previous_button_disabled.pngbin0 -> 541 bytes
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/private_class_logo.pngbin0 -> 1836 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/tutorial.pngbin0 -> 431 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/tutorial_folder.pngbin0 -> 572 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/up_button.pngbin0 -> 668 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/lib/classTree.js454
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/stylesheet.css181
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/method.tpl151
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/page.tpl214
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/pkgelementindex.tpl17
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/ric.tpl6
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/todolist.tpl14
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/top_frame.tpl45
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/tutorial.tpl13
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/tutorial_nav.tpl41
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/tutorial_toc.tpl40
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/tutorial_tree.tpl9
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/var.tpl94
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/options.ini577
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/basicindex.tpl47
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/blank.tpl13
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/class.tpl429
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/classtrees.tpl19
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/const.tpl18
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/define.tpl24
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/docblock.tpl14
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/elementindex.tpl12
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/errors.tpl21
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/examplesource.tpl6
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/filesource.tpl8
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/footer.tpl8
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/function.tpl44
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/global.tpl26
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/header.tpl99
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/include.tpl16
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/index.tpl24
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/left_frame.tpl198
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/banner.css32
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/bg_left.pngbin0 -> 181 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/images/I.pngbin0 -> 148 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/images/L.pngbin0 -> 153 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/images/Lminus.pngbin0 -> 219 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/images/Lplus.pngbin0 -> 224 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/images/T.pngbin0 -> 152 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/images/Tminus.pngbin0 -> 207 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/images/Tplus.pngbin0 -> 222 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/images/blank.pngbin0 -> 144 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/images/empty.pngbin0 -> 90 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/lib/classTree.js454
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/minus.gifbin0 -> 54 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/plus.gifbin0 -> 56 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/stylesheet.css196
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/method.tpl149
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/page.tpl211
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/pkgelementindex.tpl17
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/ric.tpl6
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/todolist.tpl14
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/top_frame.tpl45
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/tutorial.tpl13
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/tutorial_nav.tpl41
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/tutorial_toc.tpl40
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/tutorial_tree.tpl8
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/var.tpl92
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/options.ini577
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/basicindex.tpl47
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/blank.tpl13
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/class.tpl429
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/classtrees.tpl19
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/const.tpl18
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/define.tpl24
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/docblock.tpl14
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/elementindex.tpl12
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/errors.tpl21
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/examplesource.tpl6
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/filesource.tpl8
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/footer.tpl8
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/function.tpl44
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/global.tpl26
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/header.tpl95
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/include.tpl16
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/index.tpl24
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/left_frame.tpl217
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/banner.css32
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/images/I.pngbin0 -> 148 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/images/L.pngbin0 -> 153 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/images/Lminus.pngbin0 -> 219 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/images/Lplus.pngbin0 -> 224 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/images/T.pngbin0 -> 152 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/images/Tminus.pngbin0 -> 207 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/images/Tplus.pngbin0 -> 222 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/images/blank.pngbin0 -> 144 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/images/empty.pngbin0 -> 90 bytes
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/images/minus.gifbin0 -> 54 bytes
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/images/plus.gifbin0 -> 56 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/lib/classTree.js454
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/stylesheet.css184
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/method.tpl149
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/page.tpl211
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/pkgelementindex.tpl17
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/ric.tpl6
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/todolist.tpl14
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/top_frame.tpl45
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/tutorial.tpl13
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/tutorial_nav.tpl41
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/tutorial_toc.tpl40
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/tutorial_tree.tpl8
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/var.tpl92
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/options.ini577
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/basicindex.tpl47
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/blank.tpl13
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/class.tpl429
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/classtrees.tpl19
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/const.tpl18
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/define.tpl24
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/docblock.tpl14
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/elementindex.tpl12
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/errors.tpl21
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/examplesource.tpl6
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/filesource.tpl8
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/footer.tpl8
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/function.tpl44
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/global.tpl26
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/header.tpl95
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/include.tpl16
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/index.tpl24
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/left_frame.tpl216
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/banner.css32
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/images/I.pngbin0 -> 148 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/images/L.pngbin0 -> 153 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/images/Lminus.pngbin0 -> 219 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/images/Lplus.pngbin0 -> 224 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/images/T.pngbin0 -> 152 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/images/Tminus.pngbin0 -> 207 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/images/Tplus.pngbin0 -> 222 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/images/blank.pngbin0 -> 144 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/images/empty.pngbin0 -> 90 bytes
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/images/minus.gifbin0 -> 54 bytes
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/images/plus.gifbin0 -> 56 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/lib/classTree.js454
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/stylesheet.css184
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/method.tpl149
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/page.tpl211
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/pkgelementindex.tpl17
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/ric.tpl6
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/todolist.tpl14
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/top_frame.tpl45
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/tutorial.tpl13
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/tutorial_nav.tpl41
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/tutorial_toc.tpl40
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/tutorial_tree.tpl8
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/var.tpl92
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/options.ini577
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/basicindex.tpl47
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/blank.tpl13
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/class.tpl430
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/classtrees.tpl19
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/const.tpl18
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/define.tpl24
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/docblock.tpl14
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/elementindex.tpl12
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/errors.tpl21
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/examplesource.tpl6
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/filesource.tpl8
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/footer.tpl8
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/function.tpl44
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/global.tpl26
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/header.tpl12
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/include.tpl16
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/index.tpl24
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/left_frame.tpl159
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/media/banner.css32
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/media/stylesheet.css144
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/method.tpl151
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/page.tpl211
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/pkgelementindex.tpl17
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/ric.tpl6
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/todolist.tpl14
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/top_frame.tpl43
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/tutorial.tpl13
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/tutorial_nav.tpl41
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/tutorial_toc.tpl40
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/tutorial_tree.tpl6
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates/var.tpl91
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/options.ini576
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/basicindex.tpl57
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/blank.tpl13
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/class.tpl437
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/classtrees.tpl19
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/const.tpl18
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/define.tpl25
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/docblock.tpl14
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/elementindex.tpl12
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/errors.tpl21
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/examplesource.tpl6
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/filesource.tpl8
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/footer.tpl8
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/function.tpl44
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/global.tpl27
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/header.tpl12
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/include.tpl17
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/index.tpl24
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/left_frame.tpl159
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/banner.css33
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/AbstractClass.pngbin0 -> 620 bytes
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/AbstractClass_logo.pngbin0 -> 1232 bytes
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/AbstractMethod.pngbin0 -> 696 bytes
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/AbstractPrivateClass.pngbin0 -> 848 bytes
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/AbstractPrivateClass_logo.pngbin0 -> 1615 bytes
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/AbstractPrivateMethod.pngbin0 -> 874 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Class.pngbin0 -> 570 bytes
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Class_logo.pngbin0 -> 1600 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Constant.pngbin0 -> 752 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Constructor.pngbin0 -> 865 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Destructor.pngbin0 -> 956 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Function.pngbin0 -> 596 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Global.pngbin0 -> 712 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/I.pngbin0 -> 148 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Index.pngbin0 -> 584 bytes
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Interface.pngbin0 -> 1083 bytes
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Interface_logo.pngbin0 -> 1600 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/L.pngbin0 -> 153 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Lminus.pngbin0 -> 219 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Lplus.pngbin0 -> 224 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Method.pngbin0 -> 661 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Page.pngbin0 -> 592 bytes
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Page_logo.pngbin0 -> 1369 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/PrivateClass.pngbin0 -> 790 bytes
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/PrivateClass_logo.pngbin0 -> 1836 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/PrivateMethod.pngbin0 -> 918 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/PrivateVariable.pngbin0 -> 772 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/StaticMethod.pngbin0 -> 661 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/StaticVariable.pngbin0 -> 688 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/T.pngbin0 -> 152 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Tminus.pngbin0 -> 207 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Tplus.pngbin0 -> 222 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Variable.pngbin0 -> 688 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/blank.pngbin0 -> 144 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/class_folder.pngbin0 -> 633 bytes
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/empty.pngbin0 -> 90 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/file.pngbin0 -> 462 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/folder.pngbin0 -> 492 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/function_folder.pngbin0 -> 605 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/next_button.pngbin0 -> 657 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/next_button_disabled.pngbin0 -> 543 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/package.pngbin0 -> 668 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/package_folder.pngbin0 -> 564 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/previous_button.pngbin0 -> 644 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/previous_button_disabled.pngbin0 -> 541 bytes
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/private_class_logo.pngbin0 -> 1836 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/tutorial.pngbin0 -> 431 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/tutorial_folder.pngbin0 -> 572 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/up_button.pngbin0 -> 668 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/stylesheet.css146
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/method.tpl151
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/page.tpl214
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/pkgelementindex.tpl17
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/ric.tpl6
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/todolist.tpl14
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/top_frame.tpl45
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/tutorial.tpl13
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/tutorial_nav.tpl41
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/tutorial_toc.tpl40
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/tutorial_tree.tpl6
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/var.tpl94
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/options.ini576
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/basicindex.tpl47
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/blank.tpl13
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/class.tpl429
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/classtrees.tpl19
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/const.tpl18
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/define.tpl24
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/docblock.tpl14
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/elementindex.tpl12
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/errors.tpl21
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/examplesource.tpl6
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/filesource.tpl8
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/footer.tpl8
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/function.tpl44
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/global.tpl26
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/header.tpl18
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/include.tpl16
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/index.tpl24
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/left_frame.tpl159
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/media/banner.css32
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/media/bg_left.pngbin0 -> 181 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/media/stylesheet.css154
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/method.tpl149
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/page.tpl211
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/pkgelementindex.tpl17
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/ric.tpl6
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/todolist.tpl14
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/top_frame.tpl45
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/tutorial.tpl13
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/tutorial_nav.tpl41
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/tutorial_toc.tpl40
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/tutorial_tree.tpl6
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/var.tpl92
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/options.ini577
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/basicindex.tpl47
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/blank.tpl13
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/class.tpl429
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/classtrees.tpl19
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/const.tpl18
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/define.tpl24
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/docblock.tpl14
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/elementindex.tpl12
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/errors.tpl21
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/examplesource.tpl6
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/filesource.tpl8
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/footer.tpl8
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/function.tpl44
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/global.tpl26
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/header.tpl12
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/include.tpl16
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/index.tpl24
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/left_frame.tpl159
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/media/banner.css32
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/media/stylesheet.css141
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/method.tpl149
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/page.tpl211
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/pkgelementindex.tpl17
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/ric.tpl6
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/todolist.tpl14
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/top_frame.tpl45
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/tutorial.tpl13
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/tutorial_nav.tpl41
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/tutorial_toc.tpl40
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/tutorial_tree.tpl6
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpdoc.de/templates/var.tpl92
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/options.ini507
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/basicindex.tpl24
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/blank.tpl13
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/class.tpl95
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/classtrees.tpl19
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/const.tpl21
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/define.tpl24
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/docblock.tpl30
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/elementindex.tpl13
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/errors.tpl21
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/examplesource.tpl6
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/filesource.tpl8
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/footer.tpl8
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/function.tpl29
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/global.tpl24
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/header.tpl97
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/include.tpl16
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/index.tpl24
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/left_frame.tpl166
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Class.gifbin0 -> 1078 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Constant.gifbin0 -> 1041 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Constants.gifbin0 -> 1068 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Constructor.gifbin0 -> 1044 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Destructor.gifbin0 -> 1043 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Disk.gifbin0 -> 941 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/FolderClosed.gifbin0 -> 963 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/FolderOpened.gifbin0 -> 957 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Functions.gifbin0 -> 1064 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/GhostClass.gifbin0 -> 1071 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/I.pngbin0 -> 148 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/L.pngbin0 -> 153 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Lminus.pngbin0 -> 219 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Lplus.pngbin0 -> 224 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/PrivateDataMember.gifbin0 -> 967 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/PrivateMethod.gifbin0 -> 1062 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/PrivateProperty.gifbin0 -> 1063 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/ProtectedDataMember.gifbin0 -> 1064 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/ProtectedMethod.gifbin0 -> 1080 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/ProtectedProperty.gifbin0 -> 1068 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/PublicDataMember.gifbin0 -> 954 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/PublicMethod.gifbin0 -> 1038 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/PublicProperty.gifbin0 -> 1053 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/T.pngbin0 -> 152 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Tminus.pngbin0 -> 207 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Tplus.pngbin0 -> 222 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Types.gifbin0 -> 1049 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Variable.gifbin0 -> 1051 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Vars.gifbin0 -> 1064 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/blank.pngbin0 -> 144 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/classFolder.gifbin0 -> 1069 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/error.gifbin0 -> 122 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/file.pngbin0 -> 462 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/foldericon.pngbin0 -> 229 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/minus.gifbin0 -> 64 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/msgError.gifbin0 -> 997 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/msgFatalError.gifbin0 -> 1040 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/msgHint.gifbin0 -> 989 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/msgInformation.gifbin0 -> 963 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/msgWarning.gifbin0 -> 1043 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/openfoldericon.pngbin0 -> 232 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/plus.gifbin0 -> 67 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/spacer.gifbin0 -> 55 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/lib/classTree.js454
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/lib/tab.webfx.css86
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/lib/tabpane.js308
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/lib/ua.js111
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/stylesheet.css230
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/method.tpl126
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/page.tpl53
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/pkgelementindex.tpl17
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/ric.tpl6
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/todolist.tpl14
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/top_frame.tpl16
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/tutorial.tpl32
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/tutorial_toc.tpl29
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/tutorial_tree.tpl13
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/var.tpl49
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/options.ini577
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/basicindex.tpl47
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/blank.tpl13
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/class.tpl429
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/classtrees.tpl19
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/const.tpl18
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/define.tpl24
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/docblock.tpl14
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/elementindex.tpl12
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/errors.tpl21
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/examplesource.tpl6
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/filesource.tpl8
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/footer.tpl8
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/function.tpl44
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/global.tpl26
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/header.tpl12
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/include.tpl16
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/index.tpl24
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/left_frame.tpl159
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/media/banner.css32
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/media/stylesheet.css142
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/method.tpl149
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/page.tpl211
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/pkgelementindex.tpl17
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/ric.tpl6
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/todolist.tpl14
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/top_frame.tpl45
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/tutorial.tpl13
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/tutorial_nav.tpl41
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/tutorial_toc.tpl40
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/tutorial_tree.tpl6
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/var.tpl92
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/PDFdefaultConverter.inc981
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/ParserPDF.inc564
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/class.ezpdf.php1571
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/class.pdf.php3078
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/class.phpdocpdf.php353
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/options.ini431
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/appendix_title_page.tpl4
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/class.tpl12
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/classtree.tpl11
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/const.tpl7
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/define.tpl4
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/docblock.tpl10
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/examplesource.tpl5
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/filesource.tpl11
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/footer.tpl11
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/function.tpl4
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/global.tpl7
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/include.tpl3
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/index.tpl14
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/media/logo.jpgbin0 -> 2229 bytes
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/method.tpl4
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/newpackage_header.tpl6
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/packagepage.tpl5
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/page.tpl7
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/pagenumbering.tpl1
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/params.tpl4
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/ric.tpl7
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/ric_title_page.tpl5
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/source_loop.tpl8
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/source_title_page.tpl5
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/title_page.tpl7
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/toc.tpl15
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/todolist.tpl17
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/tutorial.tpl7
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/var.tpl7
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/Courier-Bold.afm342
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/Courier-BoldOblique.afm342
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/Courier-Oblique.afm342
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/Courier.afm342
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/Helvetica-Bold.afm2827
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/Helvetica-BoldOblique.afm2827
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/Helvetica-Oblique.afm3051
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/Helvetica.afm3051
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/Symbol.afm213
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/Times-Bold.afm2588
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/Times-BoldItalic.afm2384
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/Times-Italic.afm2667
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/Times-Roman.afm2419
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/ZapfDingbats.afm225
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/php_Courier-Bold.afm1
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/php_Courier-BoldOblique.afm1
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/php_Courier-Oblique.afm1
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/php_Courier.afm1
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/php_Helvetica-Bold.afm1
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/php_Helvetica-BoldOblique.afm1
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/php_Helvetica-Oblique.afm1
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/php_Helvetica.afm1
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/php_Symbol.afm1
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/php_Times-Bold.afm1
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/php_Times-BoldItalic.afm1
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/php_Times-Italic.afm1
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/php_Times-Roman.afm1
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/fonts/php_ZapfDingbats.afm1
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/XMLDocBookConverter.inc1792
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/Beautifier.php135
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/Plain.php250
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/Tokenizer.php752
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/XMLDocBookpeardoc2Converter.inc1701
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/options.ini39
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/templates/category.tpl26
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/templates/class.tpl29
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/templates/class_summary.tpl53
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/templates/constants.tpl68
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/templates/docblock.tpl116
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/templates/errors.tpl21
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/templates/globals.tpl69
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/templates/imethods.tpl24
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/templates/ivars.tpl26
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/templates/method.tpl45
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/templates/package.tpl26
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/templates/tutorial.tpl21
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/peardoc2/templates/default/templates/var.tpl15
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/templates/peardoc2/templates/class_summary.tpl93
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/templates/peardoc2/templates/ivars.tpl26
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Converters/XML/DocBook/templates/peardoc2/templates/tutorial.tpl21
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/DescHTML.inc423
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/DocBlockTags.inc1396
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Errors.inc1172
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/EventStack.inc98
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/HighlightParser.inc2603
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/InlineTags.inc1044
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/IntermediateParser.inc1940
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Io.inc992
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/LinkClasses.inc361
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/PackagePageElements.inc513
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Parser.inc3252
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/ParserData.inc970
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/ParserDescCleanup.inc1488
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/ParserDocBlock.inc1227
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/ParserElements.inc2287
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/ProceduralPages.inc1067
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Publisher.inc110
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/Setup.inc.php978
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/BUGS7
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/COPYING.lib458
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/ChangeLog5421
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/FAQ284
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/INSTALL29
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/NEWS733
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/README80
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/RELEASE_NOTES423
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/TODO12
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Config_File.class.php365
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty.class.php2010
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php2123
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.assemble_plugin_filepath.php62
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.assign_smarty_interface.php43
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.create_dir_structure.php79
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.display_debug_console.php60
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.get_include_path.php44
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.get_microtime.php23
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.get_php_resource.php80
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.is_secure.php59
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.is_trusted.php50
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.load_plugins.php125
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.load_resource_plugin.php74
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.process_cached_inserts.php71
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.process_compiled_include.php32
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.read_cache_file.php111
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.rm_auto.php71
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.rmdir.php55
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.run_insert_handler.php71
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.smarty_include_php.php50
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.write_cache_file.php73
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.write_compiled_include.php59
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.write_compiled_resource.php37
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/core/core.write_file.php48
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/debug.tpl64
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/block.strip.php35
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/block.textformat.php83
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.assign.php38
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.assign_debug_info.php39
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.config_load.php130
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.counter.php88
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.cycle.php119
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.debug.php35
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.eval.php48
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.fetch.php217
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.html_checkboxes.php135
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.html_image.php143
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.html_options.php118
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.html_radios.php138
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.html_select_date.php243
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.html_select_time.php163
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.html_table.php113
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.mailto.php140
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.math.php82
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.popup.php87
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.popup_init.php39
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.var_dump.php20
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.capitalize.php25
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.cat.php33
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.count_characters.php31
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.count_paragraphs.php28
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.count_sentences.php28
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.count_words.php32
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.date_format.php43
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.debug_print_var.php57
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.default.php31
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.escape.php63
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.htmlentities.php18
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.indent.php27
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.lower.php25
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.nl2br.php35
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.rawurlencode.php18
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.regex_replace.php29
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.replace.php29
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.spacify.php29
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.string_format.php28
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.strip.php33
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.strip_tags.php31
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.truncate.php43
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.upper.php25
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/modifier.wordwrap.php28
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/outputfilter.trimwhitespace.php75
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/shared.escape_special_chars.php30
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/shared.make_timestamp.php43
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/misc/smarty_icon.README6
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/misc/smarty_icon.gifbin0 -> 1102 bytes
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/TutorialHighlightParser.inc620
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/WordParser.inc365
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/XMLpackagePageParser.inc644
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/clone.inc.php53
-rw-r--r--buildscripts/PhpDocumentor/phpDocumentor/clone5.inc.php54
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/common.inc.php312
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/find_phpdoc.php49
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/phpDocumentorTParser.inc2946
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/phpDocumentorTWordParser.inc386
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/phpdoc.inc66
948 files changed, 131721 insertions, 0 deletions
diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Classes.inc b/buildscripts/PhpDocumentor/phpDocumentor/Classes.inc
new file mode 100755
index 00000000..6de944a5
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Classes.inc
@@ -0,0 +1,1356 @@
+<?php
+/**
+ * Intermediate class parsing structure.
+ *
+ * phpDocumentor :: automatic documentation generator
+ *
+ * PHP versions 4 and 5
+ *
+ * Copyright (c) 2001-2007 Gregory Beaver
+ *
+ * LICENSE:
+ *
+ * This library is free software; you can redistribute it
+ * and/or modify it under the terms of the GNU Lesser General
+ * Public License as published by the Free Software Foundation;
+ * either version 2.1 of the License, or (at your option) any
+ * later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * @category ToolsAndUtilities
+ * @package phpDocumentor
+ * @author Greg Beaver <cellog@php.net>
+ * @copyright 2001-2007 Gregory Beaver
+ * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @version CVS: $Id: Classes.inc 243933 2007-10-10 01:18:25Z ashnazg $
+ * @filesource
+ * @link http://www.phpdoc.org
+ * @link http://pear.php.net/PhpDocumentor
+ * @see parserDocBlock, parserInclude, parserPage, parserClass
+ * @see parserDefine, parserFunction, parserMethod, parserVar
+ * @since 1.0rc1
+ * @todo CS cleanup - change package to PhpDocumentor
+ */
+/**
+ * Intermediate class parsing structure.
+ *
+ * The {@link phpDocumentor_IntermediateParser} class uses this class and its
+ * cousin, {@link ProceduralPages} to organize all parsed source code elements.
+ * Data is fed to each immediately after it is parsed, and at conversion time,
+ * everything is organized.
+ *
+ * The Classes class is responsible for all inheritance, including resolving
+ * name conflicts between classes, determining which classes extend other
+ * classes, and is responsible for all inheritance of documentation.
+ * {@internal
+ * This structure parses classes, vars and methods by file, and then iterates
+ * over the class tree to set up inheritance. The {@link Inherit()}
+ * method is the meat of the class, and processes the class trees from root to
+ * branch, ensuring that parsing order is unimportant.}}
+ *
+ * @category ToolsAndUtilities
+ * @package phpDocumentor
+ * @author Greg Beaver <cellog@php.net>
+ * @copyright 2001-2007 Gregory Beaver
+ * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @version Release: 1.4.3
+ * @link http://www.phpdoc.org
+ * @link http://pear.php.net/PhpDocumentor
+ * @since 1.0rc1
+ * @todo CS cleanup - change package to PhpDocumentor
+ */
+class Classes
+{
+ /**#@+
+ * @access private
+ */
+ /**
+ * file being parsed, used in every add function to match up elements with
+ * the file that contains them
+ *
+ * This variable is used during parsing to associate class elements added
+ * to the data structures that contain them with the file they reside in
+ * @see addClass(), addMethod(), addVar(), nextFile()
+ * @var string
+ */
+ var $curfile;
+ /**
+ * class being parsed, used to match up methods and vars with their parent
+ * class
+ *
+ * This variable is used during parsing to associate class elements added
+ * to the data structures that contain them with the file they reside in
+ * @see addMethod(), addVar()
+ * @var string
+ */
+ var $curclass;
+
+ /**
+ * Used when a definite match is made between a parent class and a child
+ * class
+ *
+ * This variable is used in post-parsing.
+ *
+ * Format:<pre>
+ * array(
+ * parent => array(
+ * parentfile => array(
+ * child => childfile
+ * )
+ * )
+ * )</pre>
+ * @var array
+ */
+ var $definitechild;
+ /**
+ * array of parsed classes organized by the name of the file that contains
+ * the class.
+ *
+ * Format:<pre>
+ * array(
+ * filename => array(
+ * classname => {@link parserClass}
+ * )
+ * )</pre>
+ * @var array
+ */
+ var $classesbyfile = array();
+ /**
+ * array of file names organized by classes that are in the file.
+ *
+ * This structure is designed to handle name conflicts. Two files can
+ * contain classes with the same name, and this array will record both
+ * filenames to help control linking and inheritance errors
+ *
+ * Format:<pre>
+ * array(
+ * classname => array(
+ * name of file containing classname,
+ * name of file 2 containing classname,
+ * ...
+ * )
+ * )</pre>
+ * @var array
+ */
+ var $classesbynamefile = array();
+ /**
+ * array of parsed methods organized by the file that contains them.
+ *
+ * Format:<pre>
+ * array(
+ * filename => array(
+ * classname => array(
+ * {@link parserMethod} 1,
+ * {@link parserMethod} 2,
+ * ...
+ * )
+ * )
+ * )</pre>
+ * @var array
+ */
+ var $methodsbyfile = array();
+ /**
+ * array of parsed vars organized by the file that contains them.
+ *
+ * Format:<pre>
+ * array(
+ * filename => array(
+ * classname => array(
+ * {@link parserVar} 1,
+ * {@link parserVar} 2,
+ * ...
+ * )
+ * )
+ * )</pre>
+ * @var array
+ */
+ var $varsbyfile = array();
+ /**
+ * array of parsed class constants organized by the file that contains them.
+ *
+ * Format:<pre>
+ * array(
+ * filename => array(
+ * classname => array(
+ * {@link parserConst} 1,
+ * {@link parserConst} 2,
+ * ...
+ * )
+ * )
+ * )</pre>
+ * @var array
+ */
+ var $constsbyfile = array();
+ /**
+ * keeps track of extend declarations by file, used to find inheritance
+ *
+ * Format:<pre>
+ * array(
+ * filename => array(
+ * classname => parentclassname
+ * )
+ * )</pre>
+ * @var array
+ */
+ var $extendsbyfile = array();
+ /**
+ * Keeps track of child classes by file.
+ * Since phpDocumentor can document collections of files that contain name
+ * conflicts (PHP would give a fatal error), it
+ * is impossible to assume a class that declares "extends foo" necessarily
+ * extends the class foo in file X. It could be an
+ * extended class of class foo in file Y. Because of this, phpDocumentor
+ * relies on packaging to resolve the name conflict
+ * This array keeps track of the packages of a child class
+ *
+ * Format:<pre>
+ * array(
+ * parentclassname => array(
+ * filename => array(
+ * childclassname => array(
+ * packagename,
+ * packagename
+ * )
+ * )
+ * )
+ * )</pre>
+ * @var array
+ */
+ var $classchildrenbyfile = array();
+ /**
+ * Keeps track of class packages found in a file.
+ * This is used in {@link getParentClass()} to determine the number of
+ * packages in a file, in order to resolve inheritance issues
+ * Format:<pre>
+ * array(
+ * filename => array(
+ * packagename1,
+ * packagename2,
+ * ...
+ * )
+ * )</pre>
+ * @var array
+ */
+ var $classpackagebyfile = array();
+ /**
+ * a tree of class inheritance by name.
+ *
+ * Format:<pre>
+ * array(
+ * childname => parentname,
+ * childname1 => parentname1,
+ * rootname => 0,
+ * ...
+ * )</pre>
+ * @var array
+ * @see Converter::generateSortedClassTreeFromClass()
+ */
+ var $classparents = array();
+ /**
+ * Keeps track of package and subpackage for each class name, organized
+ * by package
+ *
+ * Format:<pre>
+ * array(
+ * classname => array(
+ * path => array(
+ * package,
+ * subpackage
+ * ),
+ * path2 => array(
+ * package,
+ * subpackage
+ * ),
+ * ...
+ * )
+ * )</pre>
+ * @var array
+ */
+ var $classpathpackages = array();
+ /**
+ * used to delete duplicates in the same package to avoid documentation errors
+ *
+ * Specifically used in {@link Converter::checkKillClass()}
+ */
+ var $killclass = array();
+ /**
+ * array of methods by package and class
+ *
+ * format:<pre>
+ * array(packagename =>
+ * array(classname =>
+ * array(methodname1 => {@link parserMethod} class,
+ * methodname2 => {@link parserMethod} class,...)
+ * )
+ * )
+ * )</pre>
+ * @var array
+ * @see Converter
+ */
+ var $methods = array();
+
+ /**
+ * array of class variables by package and class
+ *
+ * format:<pre>
+ * array(packagename =>
+ * array(classname =>
+ * array(variablename1 => {@link parserVar} class,
+ * variablename2 => {@link parserVar} class,...
+ * )
+ * )
+ * )</pre>
+ * @var array
+ * @see Converter
+ */
+ var $vars = array();
+
+ /**
+ * array of class variables by package and class
+ *
+ * format:<pre>
+ * array(packagename =>
+ * array(classname =>
+ * array(constname1 => {@link parserConst} class,
+ * constname2 => {@link parserConst} class,...
+ * )
+ * )
+ * )</pre>
+ * @var array
+ * @see Converter
+ */
+ var $consts = array();
+ /**
+ * Reverse class_packages_by_file, used to prevent duplicates
+ * @var array Format: array(packagename => 1)
+ */
+ var $revcpbf = array();
+ /**
+ * All classes with no parents (no extends clause) are tracked in this array
+ * by the file that contains them.
+ *
+ * Format:<pre>
+ * array(
+ * classname => array(
+ * name of file1 that contains root classname,
+ * name of file2 that contains root classname,
+ * ...
+ * )
+ * )</pre>
+ * @var array
+ */
+ var $roots = array();
+ /**
+ * All classes with a parent that was not parsed are included in this array
+ *
+ * Format:<pre>
+ * array(
+ * classname => array(
+ * name of file1 that contains root classname,
+ * name of file2 that contains root classname,
+ * ...
+ * )
+ * )</pre>
+ * @var array
+ */
+ var $specialRoots = array();
+
+ /**
+ * array of all files that contain classes with the same name
+ * @var array Format: (classname => array(path1, path2,...))
+ */
+ var $potentialclassconflicts = array();
+
+ /**
+ * array of all inter-package name conflicts of classes
+ *
+ * This array allows documentation of PHP namespace conflicts that would
+ * occur should a user try to include these files in the same file
+ * @var array Format: (classname => array(path1, path2,...))
+ */
+ var $classconflicts = array();
+ /**#@-*/
+ /**
+ * While parsing, add a class to the list of parsed classes
+ *
+ * sets up the {@link $classesbyfile, $classesbynamefile, $extendsbyfile},
+ * {@link $classchildrenbyfile, $roots} arrays, and sets {@link $curclass}
+ *
+ * @param parserClass &$element element is a {@link parserClass}
+ *
+ * @return void
+ * @uses addPackageToFile() marks the current class's package as being
+ * present in a file
+ */
+ function addClass(&$element)
+ {
+ $this->curclass = $element->getName();
+ $element->curfile = $this->curfile;
+ if (isset($this->classesbyfile[$this->curfile][$this->curclass])) {
+ addWarning(PDERROR_ELEMENT_IGNORED,
+ 'class', $this->curclass, $this->curfile);
+ $this->curclass = false;
+ return;
+ }
+ $this->
+ classesbyfile
+ [$this->curfile][$this->curclass]
+ = $element;
+ $this->
+ classesbynamefile[$this->curclass][]
+ = $this->curfile;
+ $this->
+ extendsbyfile[$this->curfile][$this->curclass]
+ = $element->getExtends();
+ $this->
+ classchildrenbyfile[$element->getExtends()]
+ [$this->curfile][$this->curclass][]
+ = $element->docblock->package;
+ if ($element->docblock->getExplicitPackage())
+ $this->addPackageToFile($element->docblock->package);
+ if (!$element->getExtends()) {
+ $this->roots[$this->curclass][] = $this->curfile;
+ }
+ }
+
+ /**
+ * While parsing, add a method to the list of parsed methods
+ *
+ * sets up the {@link $methodsbyfile} array using {@link $curfile} and
+ * {@link $curclass}
+ *
+ * @param parserMethod &$element element is a {@link parserMethod}
+ *
+ * @return void
+ */
+ function addMethod(&$element)
+ {
+ if (!$this->curclass) return;
+ $this->methodsbyfile[$this->curfile][$this->curclass][] = $element;
+ }
+
+ /**
+ * While parsing, add a variable to the list of parsed variables
+ *
+ * sets up the {@link $varsbyfile} array using {@link $curfile}
+ * and {@link $curclass}
+ *
+ * @param parserVar &$element element is a {@link parserVar}
+ *
+ * @return void
+ */
+ function addVar(&$element)
+ {
+ if (!$this->curclass) return;
+ $this->varsbyfile[$this->curfile][$this->curclass][] = $element;
+ }
+
+ /**
+ * While parsing, add a variable to the list of parsed variables
+ *
+ * sets up the {@link $constsbyfile} array using {@link $curfile}
+ * and {@link $curclass}
+ *
+ * @param parserConst &$element element is a {@link parserConst}
+ *
+ * @return void
+ */
+ function addConst(&$element)
+ {
+ if (!$this->curclass) return;
+ $this->constsbyfile[$this->curfile][$this->curclass][] = $element;
+ }
+
+ /**
+ * Prepare to parse a new file
+ *
+ * sets {@link $curfile} to $file and {@link $curclass}
+ * to false (no class being parsed)
+ *
+ * @param string $file file currently being parsed
+ *
+ * @return void
+ */
+ function nextFile($file)
+ {
+ $this->curfile = $file;
+ $this->curclass = false;
+ }
+
+ /**
+ * Mark a package as being used in a class
+ *
+ * {@source}
+ *
+ * @param string $package package name
+ *
+ * @return void
+ */
+ function addPackageToFile($package)
+ {
+ if (!isset($this->revcpbf[$this->curfile][$package]))
+ $this->classpackagebyfile[$this->curfile][] = $package;
+ $this->revcpbf[$this->curfile][$package] = 1;
+ }
+
+ /**
+ * Find the parent class of $class, and set up structures to note this fact
+ *
+ * Modifies the {@link parserClass} element in {@link $classesbyfile} to use
+ * the parent's package, and inherit methods/vars
+ *
+ * @param string $class child class to find parent class
+ * @param string $file file child class is located in
+ *
+ * @return void
+ * @uses $definitechild if a match is made between a parent class and parameter
+ * $class in file $file, then definitechild is set here
+ * @uses getParentClass() to find the parent class
+ */
+ function setClassParent($class,$file)
+ {
+ if (is_array($par = $this->getParentClass($class, $file))) {
+ // (for debugging)
+ // phpDocumentor_out("$file class $class extends "
+ // . $par[1] ." file ". $par[0] . "\n");
+
+ $this->classesbyfile[$file][$class]->setParent($par[1], $par[0], $this);
+ $this->definitechild[$par[1]][$par[0]][$class] = $file;
+ } else {
+ $this->classesbyfile[$file][$class]->setParentNoClass($par);
+ }
+ }
+
+ /**
+ * Main processing engine for setting up class inheritance.
+ *
+ * This function uses {@link $roots} to traverse the inheritance tree via
+ * {@link processChild()} and returns the data structures
+ * phpDocumentor_IntermediateParser needs to convert parsed data
+ * to output using {@link phpDocumentor_IntermediateParser::Convert()}
+ *
+ * @param phpDocumentor_IntermediateParser &$render the renderer object
+ *
+ * @return void
+ * @uses processChild() set up inheritance
+ * @todo CS Cleanup - rename to "inherit" for CamelCaps naming standard
+ */
+ function Inherit(&$render)
+ {
+ phpDocumentor_out("\nProcessing Class Inheritance\n\n");
+ flush();
+ phpDocumentor_out("\nProcessing Root Trees\n\n");
+ flush();
+ foreach ($this->roots as $class => $files) {
+ for ($i=0; $i<count($files); $i++) {
+ $this->processChild($render, $class, $files[$i]);
+ }
+ }
+ if (0)
+ foreach ($this->classesbyfile as $i => $j) {
+ foreach ($j as $k => $m) {
+ var_dump($i, $k);
+ if ($i == 'iConverter') {
+ var_dump($j);
+ }
+ }
+ }
+ phpDocumentor_out("\nProcessing leftover classes "
+ . "(classes that extend root classes not found in the same package)\n");
+ flush();
+ foreach ($this->classesbyfile as $i => $j) {
+ foreach ($j as $k => $m) {
+ $this->processChild($render, $k, $i, true);
+ }
+ }
+ phpDocumentor_out("done processing leftover classes\n");
+ flush();
+ $this->setupClassConflicts();
+ }
+
+ /**
+ * Transfers actual conflicts from {@link $potentialClassconflicts} to
+ * {@link $classconflicts}
+ *
+ * @return void
+ * @access private
+ * @uses $potentialclassconflicts transfers values to {@link $classconflicts}
+ */
+ function setupClassConflicts()
+ {
+ foreach ($this->potentialclassconflicts as $class => $paths) {
+ if (count($paths) - 1) { //conflict
+ $package = array();
+ foreach ($paths as $path) {
+ // create a list of conflicting classes in each package
+ if (isset($this->classpathpackages[$class][$path]))
+ $package[$this->classpathpackages[$class][$path][0]][] = $path;
+ }
+ foreach ($package as $pathpackages) {
+ /*
+ * if at least 2 functions exist in the same package,
+ * delete all but the first one and add warnings
+ */
+ if (count($pathpackages) - 1) {
+ for ($i=1; $i < count($pathpackages); $i++) {
+ if (isset($this->classesbyfile[$pathpackages[$i]])) {
+ addWarning(PDERROR_ELEMENT_IGNORED,
+ 'class', $class, $pathpackages[$i]);
+ $this->killClass($class, $pathpackages[$i]);
+ $oth = array_flip($paths);
+ unset($paths[$oth[$pathpackages[$i]]]);
+ }
+ }
+ }
+ }
+ $this->classconflicts[$class] = $paths;
+ }
+ }
+ }
+
+ /**
+ * If a package contains two classes with the same name, this function finds
+ * that conflict
+ *
+ * Returns the {@link $classconflicts} entry for class $class, minus its own path
+ *
+ * @param mixed $class the class name to search for
+ *
+ * @return mixed returns false if no conflicts,
+ * or an array of paths containing conflicts
+ */
+ function getConflicts($class)
+ {
+ if (!isset($this->classconflicts[$class])) return false;
+ $a = array();
+ foreach ($this->classconflicts[$class] as $conflict) {
+ $a[$this->classesbyfile[$conflict][$class]->docblock->package]
+ = $this->classesbyfile[$conflict][$class];
+ }
+ return $a;
+ }
+
+ /**
+ * sets up {@link $killclass} for use by Converter::checkKillClass()
+ *
+ * @param mixed $class the class
+ * @param mixed $path the path
+ *
+ * @return void
+ * @access private
+ */
+ function killClass($class,$path)
+ {
+ $this->killclass[$class][$path] = true;
+ }
+
+ /**
+ * This function recursively climbs up the class tree, setting inherited
+ * information like package and adds the elements to
+ * {@link phpDocumentor_IntermediateParser}.
+ *
+ * Using structures defined in {@link Classes},
+ * the function first sets package information,
+ * and then seeks out child classes.
+ * It uses 3 tests to determine whether a class is a child class.
+ * <ol>
+ * <li>child class is in the same file as the parent class
+ * and extends parent class
+ * </li>
+ * <li>child class is in a different file and specifies
+ * the parent's @package in its docblock
+ * </li>
+ * <li>child class is in a different file and is in a
+ * different @package, with one possible parent class
+ * </li>
+ * </ol>
+ *
+ * @param phpDocumentor_IntermediateParser &$render the renderer object
+ * @param string $class class to process
+ * @param string $file name of file $class
+ * is located in
+ * @param boolean $furb flag used privately
+ * to control informational
+ * output while parsing
+ * (used when processing
+ * leftover classes in
+ * {@link Inherit()}
+ *
+ * @return void
+ * @global string default package, usually "default"
+ */
+ function processChild(&$render,$class,$file,$furb = false)
+ {
+ global $phpDocumentor_DefaultPackageName;
+ if (isset($this->classesbyfile[$file][$class]->processed))
+ return;
+ $this->potentialclassconflicts[$class][] = $file;
+ if ($furb)
+ phpDocumentor_out("Processing $class in file $file\n");
+ flush();
+ $this->classesbyfile[$file][$class]->processed = true;
+
+ $db = $this->classesbyfile[$file][$class];
+ $render->addUses($db, $file);
+ if (!$render->parsePrivate) {
+ /*
+ * if this class has an @access private,
+ * and parse private is disabled, remove it
+ */
+ if ($db->docblock->hasaccess) {
+ $aaa = $db->docblock->getKeyword('access');
+ if (is_object($aaa) && $aaa->getString() == 'private') {
+ if (isset($this->varsbyfile[$file])
+ && isset($this->varsbyfile[$file][$class])) {
+ unset($this->varsbyfile[$file][$class]);
+ }
+ if (isset($this->methodsbyfile[$file])
+ && isset($this->methodsbyfile[$file][$class])) {
+ unset($this->methodsbyfile[$file][$class]);
+ }
+ if (isset($this->constsbyfile[$file])
+ && isset($this->constsbyfile[$file][$class])) {
+ unset($this->constsbyfile[$file][$class]);
+ }
+ $this->classesbyfile[$file][$class]->ignore = true;
+ // if this is a root class, remove it from the roots array
+ if (isset($this->roots[$class])) {
+ foreach ($this->roots[$class] as $i => $files) {
+ // find the file key and unset
+ if ($files == $file)
+ unset($this->roots[$class][$i]);
+ }
+ }
+ /*
+ * if this is a child, remove it from the list
+ * of child classes of its parent
+ */
+ if ($db->getExtends())
+ unset($this->classchildrenbyfile[$db->getExtends()][$file]);
+ return;
+ }
+ }
+ }
+ if ($render->packageoutput) {
+ if (!in_array($db->docblock->package, $render->packageoutput)) {
+ if (isset($this->varsbyfile[$file])
+ && isset($this->varsbyfile[$file][$class])) {
+ unset($this->varsbyfile[$file][$class]);
+ }
+ if (isset($this->methodsbyfile[$file])
+ && isset($this->methodsbyfile[$file][$class])) {
+ unset($this->methodsbyfile[$file][$class]);
+ }
+ if (isset($this->constsbyfile[$file])
+ && isset($this->constsbyfile[$file][$class])) {
+ unset($this->constsbyfile[$file][$class]);
+ }
+ $this->classesbyfile[$file][$class]->ignore = true;
+ if (isset($this->roots[$class])) {
+ foreach ($this->roots[$class] as $i => $files) {
+ if ($files == $file) unset($this->roots[$class][$i]);
+ }
+ }
+ if ($db->getExtends())
+ unset($this->classchildrenbyfile[$db->getExtends()][$file]);
+ return;
+ }
+ }
+ $this->setClassParent($class, $file);
+ $db = $this->classesbyfile[$file][$class];
+ if ($furb && !is_array($db->parent)) {
+ // debug("furb adding $class $file to roots");
+ $this->specialRoots[$db->parent][] = array($class, $file);
+ }
+ // fix for 591396
+ if (!$db->docblock->getExplicitPackage()) {
+ $a = $render->proceduralpages->pagepackages[$file];
+ if ($a[0] != $phpDocumentor_DefaultPackageName) {
+ // inherit page package
+ $this->classesbyfile[$file][$class]->docblock->package = $a[0];
+ }
+ }
+ if ($this->classesbyfile[$file][$class]->docblock->package
+ == $render->proceduralpages->pagepackages[$file][0]) {
+ if ($this->classesbyfile[$file][$class]->docblock->subpackage == '') {
+ $this->classesbyfile[$file][$class]->docblock->subpackage
+ = $render->proceduralpages->pagepackages[$file][1];
+ }
+ }
+ $db = $this->classesbyfile[$file][$class];
+ $render->addPackageParent($db);
+ $render->addPageIfNecessary($file, $db);
+ if ($access = $db->docblock->getKeyword('access')) {
+ if (!is_string($access) && is_object($access))
+ $access = $access->getString();
+ if (!is_string($access))
+ $access = 'public';
+ if (($access == 'private') && (!$render->parsePrivate)) {
+ if (isset($this->varsbyfile[$file])
+ && isset($this->varsbyfile[$file][$class])) {
+ foreach ($this->varsbyfile[$file][$class] as $i => $vr) {
+ $vr->docblock->addKeyword('access', 'private');
+ $this->varsbyfile[$file][$class][$i] = $vr;
+ }
+ }
+ if (isset($this->methodsbyfile[$file])
+ && isset($this->methodsbyfile[$file][$class])) {
+ foreach ($this->methodsbyfile[$file][$class] as $i => $vr) {
+ $vr->docblock->addKeyword('access', 'private');
+ $this->methodsbyfile[$file][$class][$i] = $vr;
+ }
+ }
+ if (isset($this->constsbyfile[$file])
+ && isset($this->constsbyfile[$file][$class])) {
+ foreach ($this->constsbyfile[$file][$class] as $i => $vr) {
+ $vr->docblock->addKeyword('access', 'private');
+ $this->constsbyfile[$file][$class][$i] = $vr;
+ }
+ }
+ }
+ }
+ $this->classpathpackages[$class][$file]
+ = array($db->docblock->package,$db->docblock->subpackage);
+ if ($db->docblock->getExplicitPackage()) {
+ $render->proceduralpages->
+ addClassPackageToFile($file,
+ $db->docblock->package, $db->docblock->subpackage);
+ }
+ $render->addElementToPage($db, $file);
+ if (isset($this->varsbyfile[$file])
+ && isset($this->varsbyfile[$file][$class])) {
+ foreach ($this->varsbyfile[$file][$class] as $i => $vr) {
+ $vr->docblock->package = $db->docblock->package;
+ $vr->docblock->subpackage = $db->docblock->subpackage;
+ $render->addElementToPage($vr, $file);
+ $render->addUses($vr, $file);
+ $this->varsbyfile[$file][$class][$i] = $vr;
+ $this->vars[$db->docblock->package][$class][$vr->getName()] = $vr;
+ }
+ }
+ if (isset($this->methodsbyfile[$file])
+ && isset($this->methodsbyfile[$file][$class])) {
+ foreach ($this->methodsbyfile[$file][$class] as $i => $vr) {
+ $vr->docblock->package = $db->docblock->package;
+ $vr->docblock->subpackage = $db->docblock->subpackage;
+ $render->addElementToPage($vr, $file);
+ $render->addUses($vr, $file);
+ $this->methodsbyfile[$file][$class][$i] = $vr;
+ $this->methods[$db->docblock->package][$class][$vr->getName()] = $vr;
+ }
+ }
+ if (isset($this->constsbyfile[$file])
+ && isset($this->constsbyfile[$file][$class])) {
+ foreach ($this->constsbyfile[$file][$class] as $i => $vr) {
+ $vr->docblock->package = $db->docblock->package;
+ $vr->docblock->subpackage = $db->docblock->subpackage;
+ $render->addElementToPage($vr, $file);
+ $render->addUses($vr, $file);
+ $this->constsbyfile[$file][$class][$i] = $vr;
+ $this->methods[$db->docblock->package][$class][$vr->getName()] = $vr;
+ }
+ }
+ $this->classpackages[$class][]
+ = array($db->docblock->package,$db->docblock->subpackage);
+ if (is_array($db->parent))
+ $this->classparents[$db->docblock->package][$class] = $db->parent[1];
+ else
+ $this->classparents[$db->docblock->package][$class] = $db->getExtends();
+ if (is_array($db->parent)) {
+ $z = $this->getClass($db->parent[1], $db->parent[0]);
+
+ $this->classchildren[$z->docblock->package][$db->parent[1]][] = $db;
+ }
+ if (isset($this->classchildrenbyfile[$class])) {
+ foreach ($this->classchildrenbyfile[$class] as $childfile => $other) {
+ // test 1, inherits in same file (must be same package)
+ if ($childfile == $file) {
+ foreach ($other as $child => $packages) {
+ // debug("parent $class same file $child");
+ $this->processChild($render, $child, $childfile);
+ $x = $this->getClass($child, $childfile);
+ if ($x->docblock->package
+ != $GLOBALS['phpDocumentor_DefaultPackageName']) {
+ // child package need root for class trees
+ if ($x->docblock->package != $db->docblock->package) {
+ // debug("adding $child in $childfile 1");
+ $this->roots[$child][] = $childfile;
+ }
+ }
+ }
+ } else {
+ // test 2, different file, same package
+ foreach ($other as $child => $packages) {
+ for ($j=0; $j<count($packages); $j++) {
+ if ($this->classesbyfile[$file][$class]->
+ docblock->package == $packages[$j]) {
+ $this->processChild($render, $child, $childfile);
+ // debug("$childfile diff file $child, parent $class,
+ // same package ".$packages[$j]);
+ } else {
+ /*
+ * test 3, different file, different package,
+ * only 1 parent is possible
+ */
+ if (isset($this->classesbynamefile[$child])) {
+ // 1 possible parent
+ if (count($this->classesbynamefile[$class])
+ == 1) {
+ // debug("$childfile diff file $child,
+ // diff package,
+ // 1 possible parent root $class");
+ $this->processChild($render,
+ $child, $childfile);
+ $x = $this->getClass($child, $childfile);
+ if ($x->docblock->package
+ != $GLOBALS
+ ['phpDocumentor_DefaultPackageName']) {
+ // child package need root
+ //for class trees
+ if ($x->docblock->package
+ != $db->docblock->package) {
+ // debug("adding roots
+ // $child in $childfile 2");
+ $this->roots[$child][] = $childfile;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Get the parserClass representation of a class from its name and file
+ *
+ * @param string $class classname
+ * @param string $file file classname is located in
+ *
+ * @return parserClass
+ */
+ function &getClass($class, $file)
+ {
+ // debug("getClass called with class $class file $file");
+ return $this->classesbyfile[$file][$class];
+ }
+
+ /**
+ * Used by {@link parserData::getClasses()}
+ * to retrieve classes defined in file $path
+ *
+ * retrieves the array entry from {@link $classesbyfile} for $path
+ *
+ * @param string $path full path to filename
+ *
+ * @return mixed returns false if no classes defined in the file,
+ * otherwise returns an array of {@link parserClass}es
+ */
+ function getClassesInPath($path)
+ {
+ if (!isset($this->classesbyfile[$path])) return false;
+ return $this->classesbyfile[$path];
+ }
+
+ /**
+ * called by {@link parserClass::hasMethods()}. Should not be directly called
+ *
+ * @param string $file file classname is located in
+ * @param string $class classname
+ *
+ * @return bool
+ * @access private
+ */
+ function hasMethods($file, $class)
+ {
+ return isset($this->methodsbyfile[$file][$class]);
+ }
+
+ /**
+ * called by {@link parserClass::hasConsts()}.
+ * Should not be directly called
+ *
+ * @param string $file file classname is located in
+ * @param string $class classname
+ *
+ * @return bool
+ * @access private
+ */
+ function hasConsts($file,$class)
+ {
+ return isset($this->constsbyfile[$file][$class]);
+ }
+
+ /**
+ * called by {@link parserClass::hasVars()}. Should not be directly called
+ *
+ * @param string $file file classname is located in
+ * @param string $class classname
+ *
+ * @return bool
+ * @access private
+ */
+ function hasVars($file, $class)
+ {
+ return isset($this->varsbyfile[$file][$class]);
+ }
+
+ /**
+ * called by {@link parserClass::hasMethod()}. Should not be directly called
+ *
+ * @param string $class classname
+ * @param string $file file classname is located in
+ * @param string $name method name
+ *
+ * @return bool
+ * @access private
+ */
+ function hasMethod($class, $file, $name)
+ {
+ if (!$this->hasMethods($file, $class)) return false;
+ for ($i=0; $i<count($this->methodsbyfile[$file][$class]); $i++) {
+ if ($this->methodsbyfile[$file][$class][$i]->getName() == $name)
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * called by {@link parserClass::hasVar()}. Should not be directly called
+ *
+ * @param string $class classname
+ * @param string $file file classname is located in
+ * @param string $name var name
+ *
+ * @return bool
+ * @access private
+ */
+ function hasVar($class, $file, $name)
+ {
+ if (!$this->hasVars($file, $class)) return false;
+ for ($i=0; $i<count($this->varsbyfile[$file][$class]); $i++) {
+ if ($this->varsbyfile[$file][$class][$i]->getName() == $name)
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * called by {@link parserClass::hasConst()}. Should not be directly called
+ *
+ * @param string $class classname
+ * @param string $file file classname is located in
+ * @param string $name constant name
+ *
+ * @return bool
+ * @access private
+ */
+ function hasConst($class, $file, $name)
+ {
+ if (!$this->hasConsts($file, $class)) return false;
+ for ($i=0; $i<count($this->constsbyfile[$file][$class]); $i++) {
+ if ($this->constsbyfile[$file][$class][$i]->getName() == $name)
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * called by {@link parserClass::getMethods()}. Should not be directly called
+ *
+ * @param string $class classname
+ * @param string $file file classname is located in
+ *
+ * @return mixed
+ * @access private
+ */
+ function &getMethods($class, $file)
+ {
+ if (!isset($this->methodsbyfile[$file][$class])) {
+ $flag = false;
+ return $flag;
+ }
+ return $this->methodsbyfile[$file][$class];
+ }
+
+ /**
+ * called by {@link parserClass::getVars()}. Should not be directly called
+ *
+ * @param string $class classname
+ * @param string $file file classname is located in
+ *
+ * @return mixed
+ * @access private
+ */
+ function &getVars($class, $file)
+ {
+ if (!isset($this->varsbyfile[$file][$class])) {
+ $flag = false;
+ return $flag;
+ }
+ return $this->varsbyfile[$file][$class];
+ }
+
+ /**
+ * called by {@link parserClass::getConsts()}. Should not be directly called
+ *
+ * @param string $class classname
+ * @param string $file file classname is located in
+ *
+ * @return mixed
+ * @access private
+ */
+ function &getConsts($class, $file)
+ {
+ if (!isset($this->constsbyfile[$file][$class])) {
+ $flag = false;
+ return $flag;
+ }
+ return $this->constsbyfile[$file][$class];
+ }
+
+ /**
+ * called by {@link parserClass::getMethod()}. Should not be directly called
+ *
+ * @param string $class classname
+ * @param string $file file classname is located in
+ * @param string $name method name
+ *
+ * @return mixed
+ * @access private
+ */
+ function getMethod($class, $file, $name)
+ {
+ if (!$this->hasMethod($class, $file, $name)) return false;
+ for ($i=0; $i<count($this->methodsbyfile[$file][$class]); $i++) {
+ if ($this->methodsbyfile[$file][$class][$i]->getName() == $name)
+ return $this->methodsbyfile[$file][$class][$i];
+ }
+ }
+
+ /**
+ * called by {@link parserClass::getVar()}. Should not be directly called
+ *
+ * @param string $class classname
+ * @param string $file file classname is located in
+ * @param string $name var name
+ *
+ * @return mixed
+ * @access private
+ */
+ function getVar($class, $file, $name)
+ {
+ if (!$this->hasVar($class, $file, $name)) return false;
+ for ($i=0; $i<count($this->varsbyfile[$file][$class]); $i++) {
+ if ($this->varsbyfile[$file][$class][$i]->getName() == $name)
+ return $this->varsbyfile[$file][$class][$i];
+ }
+ }
+
+ /**
+ * called by {@link parserClass::getConst()}. Should not be directly called
+ *
+ * @param string $class classname
+ * @param string $file file classname is located in
+ * @param string $name const name
+ *
+ * @return mixed
+ * @access private
+ */
+ function getConst($class, $file, $name)
+ {
+ if (!$this->hasConst($class, $file, $name)) return false;
+ for ($i=0; $i<count($this->constsbyfile[$file][$class]); $i++) {
+ if ($this->constsbyfile[$file][$class][$i]->getName() == $name)
+ return $this->constsbyfile[$file][$class][$i];
+ }
+ }
+
+ /**
+ * Search for a class in a package
+ *
+ * @param string $class classname
+ * @param string $package package classname is in
+ *
+ * @return mixed returns false if no class in $package,
+ * otherwise returns a {@link parserClass}
+ */
+ function &getClassByPackage($class, $package)
+ {
+ if (!isset($this->classesbynamefile[$class])) {
+ // removed, too many warnings, not very useful
+ // addWarning(PDERROR_CLASS_NOT_IN_PACKAGE,$class,$package);
+
+ $flag = false;
+ return $flag;
+ }
+ for ($i=0; $i < count($this->classesbynamefile[$class]); $i++) {
+ $cls =
+ $this->classesbyfile[$this->classesbynamefile[$class][$i]][$class];
+ $pkg = $cls->getPackage();
+ if ($pkg == $package)
+ return $cls;
+ }
+ // addWarning(PDERROR_CLASS_NOT_IN_PACKAGE,$class,$package);
+
+ $flag = false;
+ return $flag;
+ }
+
+ /**
+ * Find the parent class of a class in file $file
+ * uses 3 tests to find the parent classname:
+ * <ol>
+ * <li>only one class with the parent classname</li>
+ * <li>more than one class, but only one in the same file as the child</li>
+ * <li>only one parent class in the same package as the child</li>
+ * </ol>
+ *
+ * @param string $class classname
+ * @param string $file file classname is located in
+ *
+ * @return mixed false if no parent class,
+ * a string if no parent class found by that name,
+ * and an array(file parentclass is in, parentclassname)
+ */
+ function getParentClass($class,$file)
+ {
+ if (!isset($this->classesbyfile[$file][$class])) {
+ return false;
+ }
+ $element = $this->classesbyfile[$file][$class];
+ if (!($ex = $element->getExtends())) return false;
+ // first check to see if there is one and only one
+ // class with the parent class's name
+ if (isset($this->classesbynamefile[$ex])) {
+ if (count($this->classesbynamefile[$ex]) == 1) {
+ if ($this->classesbyfile
+ [$this->classesbynamefile[$ex][0]][$ex]->ignore) {
+ return $ex;
+ }
+ return array($this->classesbynamefile[$ex][0],$ex);
+ } else {
+ // next check to see if there is a parent class in the same file
+ if (isset($this->classesbyfile[$file][$ex])) {
+ if ($this->classesbyfile[$file][$ex]->ignore) {
+ return $ex;
+ }
+ return array($file,$ex);
+ }
+ // next check to see if there is only one package
+ // used in the file, try to resolve it that way
+ if (isset($this->classpackagebyfile[$file])) {
+ if (count($this->classpackagebyfile[$file]) == 1) {
+ for ($i=0;$i<count($this->classesbynamefile[$ex]);$i++) {
+ if ($this->classesbyfile
+ [$this->classesbynamefile[$ex][$i]][$ex]->getPackage()
+ == $this->classpackagebyfile[$file][0]) {
+ if ($this->classesbyfile
+ [$this->classesbynamefile[$ex][$i]][$ex]->ignore)
+ return $ex;
+ return array($this->classesbynamefile[$ex][$i],$ex);
+ }
+ }
+ }
+ }
+ // name conflict
+ addWarning(PDERROR_INHERITANCE_CONFLICT, $class, $file, $ex);
+ return $ex;
+ }
+ } else {
+ if (class_exists('ReflectionClass') && class_exists($ex)) {
+ $r = new ReflectionClass($ex);
+ if ($r->isInternal()) {
+ return $ex; // no warning
+ }
+ }
+ addWarning(PDERROR_PARENT_NOT_FOUND, $class, $ex);
+ return $ex;
+ }
+ }
+
+ /**
+ * Get a list of all root classes indexed by package. Used to generate
+ * class trees by {@link Converter}
+ *
+ * @param boolean $all [since phpDocumentor 1.3.0RC6] determines whether to
+ * return class trees that extend non-parsed classes
+ *
+ * @return array array(package => array(rootclassname, rootclassname,...),...)
+ */
+ function getRoots($all = false)
+ {
+ $roots = array();
+ $temproots = $this->roots;
+ if (!$all) {
+ foreach ($this->specialRoots as $package => $root) {
+ foreach ($root as $parent => $info) {
+ $temproots[$info[0]][] = $info[1];
+ }
+ }
+ }
+ foreach ($temproots as $class => $files) {
+ if (count($files)) {
+ foreach ($files as $i => $boofou) {
+ $x = $this->getClass($class, $files[$i]);
+
+ $roots[$x->getPackage()][] = $class;
+ }
+ }
+ }
+ foreach ($roots as $package => $root) {
+ usort($roots[$package], "strnatcasecmp");
+ }
+ if ($all) {
+ $specialRoots = array();
+ foreach ($this->specialRoots as $parent => $classinfo) {
+ if (count($classinfo)) {
+ foreach ($classinfo as $i => $info) {
+ $x = $this->getClass($info[0], $info[1]);
+
+ $specialRoots[$x->getPackage()][$parent][] = $info[0];
+ }
+ }
+ }
+ foreach ($specialRoots as $package => $root) {
+ uksort($specialRoots[$package], "strnatcasecmp");
+ foreach ($specialRoots[$package] as $parent => $classes) {
+ usort($specialRoots[$package][$parent], 'strnatcasecmp');
+ }
+ }
+ return array('special' => $specialRoots, 'normal' => $roots);
+ }
+ return $roots;
+ }
+
+ /**
+ * Get all classes confirmed in parsing
+ * to be descended class $parclass in file $file
+ *
+ * @param string $parclass name of parent class
+ * @param string $file file parent class is found in
+ *
+ * @return mixed either false if no children, or array of format
+ * array(childname => childfile,childname2 => childfile2,...)
+ * @see parserClass::getChildClassList()
+ * @uses $definitechild
+ */
+ function getDefiniteChildren($parclass, $file)
+ {
+ if (isset($this->definitechild[$parclass][$file]))
+ return $this->definitechild[$parclass][$file];
+ return false;
+ }
+}
+?>
diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converter.inc b/buildscripts/PhpDocumentor/phpDocumentor/Converter.inc
new file mode 100755
index 00000000..7f658189
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converter.inc
@@ -0,0 +1,5460 @@
+<?php
+/**
+ * Base class for all Converters
+ *
+ * phpDocumentor :: automatic documentation generator
+ *
+ * PHP versions 4 and 5
+ *
+ * Copyright (c) 2001-2006 Gregory Beaver
+ *
+ * LICENSE:
+ *
+ * This library is free software; you can redistribute it
+ * and/or modify it under the terms of the GNU Lesser General
+ * Public License as published by the Free Software Foundation;
+ * either version 2.1 of the License, or (at your option) any
+ * later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * @package Converters
+ * @author Greg Beaver <cellog@php.net>
+ * @copyright 2001-2006 Gregory Beaver
+ * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @version CVS: $Id: Converter.inc 287891 2009-08-30 08:08:00Z ashnazg $
+ * @filesource
+ * @link http://www.phpdoc.org
+ * @link http://pear.php.net/PhpDocumentor
+ * @see parserDocBlock, parserInclude, parserPage, parserClass
+ * @see parserDefine, parserFunction, parserMethod, parserVar
+ * @since 1.0rc1
+ */
+/**
+ * Smarty template files
+ */
+include_once("phpDocumentor/Smarty-2.6.0/libs/Smarty.class.php");
+/**
+ * Base class for all output converters.
+ *
+ * The Converter marks the final stage in phpDocumentor. phpDocumentor works
+ * in this order:
+ *
+ * <pre>Parsing => Intermediate Parsing organization => Conversion to output</pre>
+ *
+ * A Converter takes output from the {@link phpDocumentor_IntermediateParser} and
+ * converts it to output. With version 1.2, phpDocumentor includes a variety
+ * of output converters:
+ * <ul>
+ * <li>{@link HTMLframesConverter}</li>
+ * <li>{@link HTMLSmartyConverter}</li>
+ * <li>{@link PDFdefaultConverter}</li>
+ * <li>{@link CHMdefaultConverter}</li>
+ * <li>{@link CSVdia2codeConverter}</li>
+ * <li>{@link XMLDocBookConverter}</li>
+ * </ul>
+ * {@internal
+ * The converter takes output directly from {@link phpDocumentor_IntermediateParser}
+ * and using {@link walk()} or {@link walk_everything} (depending on the value of
+ * {@link $sort_absolutely_everything}) it "walks" over an array of phpDocumentor elements.}}
+ *
+ * @package Converters
+ * @abstract
+ * @author Greg Beaver <cellog@php.net>
+ * @since 1.0rc1
+ * @version $Id: Converter.inc 287891 2009-08-30 08:08:00Z ashnazg $
+ */
+class Converter
+{
+ /**
+ * This converter knows about the new root tree processing
+ * In order to fix PEAR Bug #6389
+ * @var boolean
+ */
+ var $processSpecialRoots = false;
+ /**
+ * output format of this converter
+ *
+ * in Child converters, this will match the first part of the -o command-line
+ * as in -o HTML:frames:default "HTML"
+ * @tutorial phpDocumentor.howto.pkg#using.command-line.output
+ * @var string
+ */
+ var $outputformat = 'Generic';
+ /**
+ * package name currently being converted
+ * @var string
+ */
+ var $package = 'default';
+ /**
+ * subpackage name currently being converted
+ * @var string
+ */
+ var $subpackage = '';
+ /**
+ * set to a classname if currently parsing a class, false if not
+ * @var string|false
+ */
+ var $class = false;
+ /**#@+
+ * @access private
+ */
+ /**
+ * the workhorse of linking.
+ *
+ * This array is an array of link objects of format:
+ * [package][subpackage][eltype][elname] = descendant of {@link abstractLink}
+ * eltype can be page|function|define|class|method|var
+ * if eltype is method or var, the array format is:
+ * [package][subpackage][eltype][class][elname]
+ * @var array
+ * @see functionLink, pageLink, classLink, defineLink, methodLink, varLink, globalLink
+ */
+ var $links = array();
+
+ /**
+ * the workhorse of linking, with allowance for support of multiple
+ * elements in different files.
+ *
+ * This array is an array of link objects of format:
+ * [package][subpackage][eltype][file][elname] = descendant of {@link abstractLink}
+ * eltype can be function|define|class|method|var
+ * if eltype is method or var, the array format is:
+ * [package][subpackage][eltype][file][class][elname]
+ * @var array
+ * @see functionLink, pageLink, classLink, defineLink, methodLink, varLink, globalLink
+ */
+ var $linkswithfile = array();
+ /**#@-*/
+ /**
+ * set to value of -po commandline
+ * @tutorial phpDocumentor.howto.pkg#using.command-line.packageoutput
+ * @var mixed
+ */
+ var $package_output;
+
+ /**
+ * name of current page being converted
+ * @var string
+ */
+ var $page;
+
+ /**
+ * path of current page being converted
+ * @var string
+ */
+ var $path;
+
+ /**
+ * template for the procedural page currently being processed
+ * @var Smarty
+ */
+ var $page_data;
+
+ /**
+ * template for the class currently being processed
+ * @var Smarty
+ */
+ var $class_data;
+
+ /**
+ * current procedural page being processed
+ * @var parserPage
+ */
+ var $curpage;
+ /**
+ * alphabetical index of all elements sorted by package, subpackage, page,
+ * and class.
+ * @var array Format: array(package => array(subpackage => array('page'|'class' => array(path|classname => array(element, element,...)))))
+ * @uses $sort_absolutely_everything if true, then $package_elements is used,
+ * otherwise, the {@link ParserData::$classelements} and
+ * {@link ParserData::$pageelements} variables are used
+ */
+ var $package_elements = array();
+ /**
+ * alphabetical index of all elements
+ *
+ * @var array Format: array(first letter of element name => array({@link parserElement} or {@link parserPage},...))
+ * @see formatIndex(), HTMLframesConverter::formatIndex()
+ */
+ var $elements = array();
+ /**
+ * alphabetized index of procedural pages by package
+ *
+ * @see $leftindex
+ * @var array Format: array(package => array(subpackage => array({@link pageLink} 1,{@link pageLink} 2,...)
+ */
+ var $page_elements = array();
+ /**
+ * alphabetized index of defines by package
+ *
+ * @see $leftindex
+ * @var array Format: array(package => array(subpackage => array({@link defineLink} 1,{@link defineLink} 2,...)
+ */
+ var $define_elements = array();
+ /**
+ * alphabetized index of classes by package
+ *
+ * @see $leftindex
+ * @var array Format: array(package => array(subpackage => array({@link classLink} 1,{@link classLink} 2,...)
+ */
+ var $class_elements = array();
+ /**
+ * alphabetized index of global variables by package
+ *
+ * @see $leftindex
+ * @var array Format: array(package => array(subpackage => array({@link globalLink} 1,{@link globalLink} 2,...)
+ */
+ var $global_elements = array();
+ /**
+ * alphabetized index of functions by package
+ *
+ * @see $leftindex
+ * @var array Format: array(package => array(subpackage => array({@link functionLink} 1,{@link functionLink} 2,...)
+ */
+ var $function_elements = array();
+ /**
+ * alphabetical index of all elements, indexed by package/subpackage
+ *
+ * @var array Format: array(first letter of element name => array({@link parserElement} or {@link parserPage},...))
+ * @see formatPkgIndex(), HTMLframesConverter::formatPkgIndex()
+ */
+ var $pkg_elements = array();
+
+ /**
+ * alphabetical index of all elements on a page by package/subpackage
+ *
+ * The page itself has a link under ###main
+ * @var array Format: array(package => array(subpackage => array(path => array({@link abstractLink} descendant 1, ...)))
+ * @see formatLeftIndex()
+ */
+ var $page_contents = array();
+
+ /**
+ * This determines whether the {@link $page_contents} array should be sorted by element type as well as alphabetically by name
+ * @see sortPageContentsByElementType()
+ * @var boolean
+ */
+ var $sort_page_contents_by_type = false;
+ /**
+ * This is used if the content must be passed in the order it should be read, i.e. by package, procedural then classes
+ *
+ * This fixes bug 637921, and is used by {@link PDFdefaultConverter}
+ */
+ var $sort_absolutely_everything = false;
+ /**
+ * alphabetical index of all methods and vars in a class by package/subpackage
+ *
+ * The class itself has a link under ###main
+ * @var array
+ * Format:<pre>
+ * array(package =>
+ * array(subpackage =>
+ * array(path =>
+ * array(class =>
+ * array({@link abstractLink} descendant 1, ...
+ * )
+ * )
+ * )
+ * )</pre>
+ * @see formatLeftIndex()
+ */
+ var $class_contents = array();
+ /**
+ * controls processing of elements marked private with @access private
+ *
+ * defaults to false. Set with command-line --parseprivate or -pp
+ * @var bool
+ */
+ var $parseprivate;
+ /**
+ * controls display of progress information while parsing.
+ *
+ * defaults to false. Set to true for cron jobs or other situations where no visual output is necessary
+ * @var bool
+ */
+ var $quietmode;
+
+ /**
+ * directory that output is sent to. -t command-line sets this.
+ * @tutorial phpDocumentor.howto.pkg#using.command-line.target
+ */
+ var $targetDir = '';
+
+ /**
+ * Directory that the template is in, relative to phpDocumentor root directory
+ * @var string
+ */
+ var $templateDir = '';
+
+ /**
+ * Directory that the smarty templates are in
+ * @var string
+ */
+ var $smarty_dir = '';
+
+ /**
+ * Name of the template, from last part of -o
+ * @tutorial phpDocumentor.howto.pkg#using.command-line.output
+ * @var string
+ */
+ var $templateName = '';
+
+ /**
+ * full path of the current file being converted
+ */
+ var $curfile;
+
+ /**
+ * All class information, organized by path, and by package
+ * @var Classes
+ */
+ var $classes;
+
+ /**
+ * Flag used to help converters determine whether to do special source highlighting
+ * @var boolean
+ */
+ var $highlightingSource = false;
+
+ /**
+ * Hierarchy of packages
+ *
+ * Every package that contains classes may have parent or child classes
+ * in other packages. In other words, this code is legal:
+ *
+ * <code>
+ * /**
+ * * @package one
+ * * /
+ * class one {}
+ *
+ * /**
+ * * @package two
+ * * /
+ * class two extends one {}
+ * </code>
+ *
+ * In this case, package one is a parent of package two
+ * @var array
+ * @see phpDocumentor_IntermediateParser::$package_parents
+ */
+ var $package_parents;
+
+ /**
+ * Packages associated with categories
+ *
+ * Used by the XML:DocBook/peardoc2 converter, and available to others, to
+ * group many packages into categories
+ * @see phpDocumentor_IntermediateParser::$packagecategories
+ * @var array
+ */
+ var $packagecategories;
+
+ /**
+ * All packages encountered in parsing
+ * @var array
+ * @see phpDocumentor_IntermediateParser::$all_packages
+ */
+ var $all_packages;
+
+ /**
+ * A list of files that have had source code generated
+ * @var array
+ */
+ var $sourcePaths = array();
+
+ /**
+ * Controls which of the one-element-only indexes are generated.
+ *
+ * Generation of these indexes for large packages is time-consuming. This is an optimization feature. An
+ * example of how to use this is in {@link HTMLframesConverter::$leftindex}, and in {@link HTMLframesConverter::formatLeftIndex()}.
+ * These indexes are intended for use as navigational aids through documentation, but can be used for anything by converters.
+ * @see $class_elements, $page_elements, $function_elements, $define_elements, $global_elements
+ * @see formatLeftIndex()
+ * @var array
+ */
+ var $leftindex = array('classes' => true, 'pages' => true, 'functions' => true, 'defines' => true, 'globals' => true);
+
+ /** @access private */
+ var $killclass = false;
+ /**
+ * @var string
+ * @see phpDocumentor_IntermediateParser::$title
+ */
+ var $title = 'Generated Documentation';
+
+ /**
+ * Options for each template, parsed from the options.ini file in the template base directory
+ * @tutorial phpDocumentor/tutorials.pkg#conversion.ppage
+ * @var array
+ */
+ var $template_options;
+
+ /**
+ * Tutorials and Extended Documentation parsed from a tutorials/package[/subpackage] directory
+ * @tutorial tutorials.pkg
+ * @access private
+ */
+ var $tutorials = array();
+
+ /**
+ * tree-format structure of tutorials and their child tutorials, if any
+ * @var array
+ * @access private
+ */
+ var $tutorial_tree = false;
+
+ /**
+ * list of tutorials that have already been processed. Used by @link _setupTutorialTree()
+ * @var array
+ * @access private
+ */
+ var $processed_tutorials;
+
+ /**
+ * List of all @todo tags and a link to the element with the @todo
+ *
+ * Format: array(package => array(link to element, array(todo {@link parserTag},...)),...)
+ * @tutorial tags.todo.pkg
+ * @var array
+ */
+ var $todoList = array();
+
+ /**
+ * Directory where compiled templates go - will be deleted on exit
+ *
+ * @var string
+ * @access private
+ */
+ var $_compiledDir = array();
+
+ /**
+ * Initialize Converter data structures
+ * @param array {@link $all_packages} value
+ * @param array {@link $package_parents} value
+ * @param Classes {@link $classes} value
+ * @param ProceduralPages {@link $proceduralpages} value
+ * @param array {@link $package_output} value
+ * @param boolean {@link $parseprivate} value
+ * @param boolean {@link $quietmode} value
+ * @param string {@link $targetDir} value
+ * @param string {@link $templateDir} value
+ * @param string (@link $title} value
+ */
+ function Converter(&$allp, &$packp, &$classes, &$procpages, $po, $pp, $qm, $targetDir, $template, $title)
+ {
+ $this->all_packages = $allp;
+ $this->package_parents = $packp;
+ $this->package = $GLOBALS['phpDocumentor_DefaultPackageName'];
+ $this->proceduralpages = &$procpages;
+ $this->package_output = $po;
+ if (is_array($po))
+ {
+ $a = $po[0];
+ $this->all_packages = array_flip($po);
+ $this->all_packages[$a] = 1;
+ }
+ $this->parseprivate = $pp;
+ $this->quietmode = $qm;
+ $this->classes = &$classes;
+ $this->roots = $classes->getRoots($this->processSpecialRoots);
+ $this->title = $title;
+ $this->setTemplateDir($template);
+ $this->setTargetdir($targetDir);
+ }
+
+ /**
+ * Called by IntermediateParser after creation
+ * @access private
+ */
+ function setTutorials($tutorials)
+ {
+ $this->tutorials = $tutorials;
+ }
+
+ /**
+ * @param pkg|cls|proc the tutorial type to search for
+ * @param tutorial name
+ * @param string package name
+ * @param string subpackage name, if any
+ * @return false|parserTutorial if the tutorial exists, return it
+ */
+ function hasTutorial($type, $name, $package, $subpackage = '')
+ {
+ if (isset($this->tutorials[$package][$subpackage][$type][$name . '.' . $type]))
+ return $this->tutorials[$package][$subpackage][$type][$name . '.' . $type];
+ return false;
+ }
+
+ /**
+ * Called by {@link walk()} while converting, when the last class element
+ * has been parsed.
+ *
+ * A Converter can use this method in any way it pleases. HTMLframesConverter
+ * uses it to complete the template for the class and to output its
+ * documentation
+ * @see HTMLframesConverter::endClass()
+ * @abstract
+ */
+ function endClass()
+ {
+ }
+
+ /**
+ * Called by {@link walk()} while converting, when the last procedural page
+ * element has been parsed.
+ *
+ * A Converter can use this method in any way it pleases. HTMLframesConverter
+ * uses it to complete the template for the procedural page and to output its
+ * documentation
+ * @see HTMLframesConverter::endClass()
+ * @abstract
+ */
+ function endPage()
+ {
+ }
+
+ /**
+ * Called by {@link walk()} while converting.
+ *
+ * This method is intended to be the place that {@link $pkg_elements} is
+ * formatted for output.
+ * @see HTMLframesConverter::formatPkgIndex()
+ * @abstract
+ */
+ function formatPkgIndex()
+ {
+ }
+
+ /**
+ * Called by {@link walk()} while converting.
+ *
+ * This method is intended to be the place that {@link $elements} is
+ * formatted for output.
+ * @see HTMLframesConverter::formatIndex()
+ * @abstract
+ */
+ function formatIndex()
+ {
+ }
+
+ /**
+ * Called by {@link walk()} while converting.
+ *
+ * This method is intended to be the place that any of
+ * {@link $class_elements, $function_elements, $page_elements},
+ * {@link $define_elements}, and {@link $global_elements} is formatted for
+ * output, depending on the value of {@link $leftindex}
+ * @see HTMLframesConverter::formatLeftIndex()
+ * @abstract
+ */
+ function formatLeftIndex()
+ {
+ }
+
+ /**
+ * Called by {@link parserSourceInlineTag::stringConvert()} to allow
+ * converters to format the source code the way they'd like.
+ *
+ * default returns it unchanged (html with xhtml tags)
+ * @param string output from highlight_string() - use this function to
+ * reformat the returned data for Converter-specific output
+ * @return string
+ * @deprecated in favor of tokenizer-based highlighting. This will be
+ * removed for 2.0
+ */
+ function unmangle($sourcecode)
+ {
+ return $sourcecode;
+ }
+
+ /**
+ * Initialize highlight caching
+ */
+ function startHighlight()
+ {
+ $this->_highlightCache = array(false, false);
+ $this->_appendHighlight = '';
+ }
+
+ function getHighlightState()
+ {
+ return $this->_highlightCache;
+ }
+
+ function _setHighlightCache($type, $token)
+ {
+ $test = ($this->_highlightCache[0] === $type && $this->_highlightCache[1] == $token);
+ if (!$test) {
+ $this->_appendHighlight = $this->flushHighlightCache();
+ } else {
+ $this->_appendHighlight = '';
+ }
+ $this->_highlightCache = array($type, $token);
+ return $test;
+ }
+
+ /**
+ * Return the close text for the current token
+ * @return string
+ */
+ function flushHighlightCache()
+ {
+ $hc = $this->_highlightCache;
+ $this->_highlightCache = array(false, false);
+ if ($hc[0]) {
+ if (!isset($this->template_options[$hc[0]]['/'.$hc[1]])) {
+ return '';
+ }
+ return $this->template_options[$hc[0]]['/'.$hc[1]];
+ }
+ return '';
+ }
+
+ /**
+ * Used to allow converters to format the source code the way they'd like.
+ *
+ * default returns it unchanged. Mainly used by the {@link HighlightParser}
+ * {@internal
+ * The method takes information from options.ini, the template options
+ * file, specifically the [highlightSourceTokens] and [highlightSource]
+ * sections, and uses them to enclose tokens.
+ *
+ * {@source}}}
+ * @param integer token value from {@link PHP_MANUAL#tokenizer tokenizer constants}
+ * @param string contents of token
+ * @param boolean whether the contents are preformatted or need modification
+ * @return string
+ */
+ function highlightSource($token, $word, $preformatted = false)
+ {
+ if ($token !== false)
+ {
+ if (!$preformatted) $word = $this->postProcess($word);
+ if (isset($this->template_options['highlightSourceTokens'][token_name($token)]))
+ {
+ if ($this->_setHighlightCache('highlightSourceTokens', token_name($token))) {
+ return $word;
+ }
+ $e = $this->_appendHighlight;
+ return $e . $this->template_options['highlightSourceTokens'][token_name($token)] . $word;
+ } else
+ {
+ $this->_setHighlightCache(false, false);
+ $e = $this->_appendHighlight;
+ return $e . $word;
+ }
+ } else
+ {
+ if (isset($this->template_options['highlightSource'][$word]))
+ {
+ $newword = ($preformatted ? $word : $this->postProcess($word));
+ if ($this->_setHighlightCache('highlightSource', $word)) {
+ return $newword;
+ }
+ $e = $this->_appendHighlight;
+ return $e . $this->template_options['highlightSource'][$word] . $newword;
+ } else
+ {
+ $this->_setHighlightCache(false, false);
+ $e = $this->_appendHighlight;
+ return $e . ($preformatted ? $word : $this->postProcess($word));
+ }
+ }
+ }
+
+ /**
+ * Used to allow converters to format the source code of DocBlocks the way
+ * they'd like.
+ *
+ * default returns it unchanged. Mainly used by the {@link HighlightParser}
+ * {@internal
+ * The method takes information from options.ini, the template options
+ * file, specifically the [highlightDocBlockSourceTokens] section, and uses
+ * it to enclose tokens.
+ *
+ * {@source}}}
+ * @param string name of docblock token type
+ * @param string contents of token
+ * @param boolean whether the contents are preformatted or need modification
+ * @return string
+ */
+ function highlightDocBlockSource($token, $word, $preformatted = false)
+ {
+ if (empty($word)) {
+ $this->_setHighlightCache(false, false);
+ $e = $this->_appendHighlight;
+ return $e . $word;
+ }
+ if (isset($this->template_options['highlightDocBlockSourceTokens'][$token]))
+ {
+ if (!$preformatted) $word = $this->postProcess($word);
+ if ($this->_setHighlightCache('highlightDocBlockSourceTokens', $token)) {
+ return $word;
+ }
+ $e = $this->_appendHighlight;
+ return $e . $this->template_options['highlightDocBlockSourceTokens'][$token] . $word;
+ } else {
+ $this->_setHighlightCache(false, false);
+ $e = $this->_appendHighlight;
+ return $e . ($preformatted ? $word : $this->postProcess($word));
+ }
+ }
+
+ /**
+ * Used to allow converters to format the source code of Tutorial XML the way
+ * they'd like.
+ *
+ * default returns it unchanged. Mainly used by the {@link HighlightParser}
+ * {@internal
+ * The method takes information from options.ini, the template options
+ * file, specifically the [highlightDocBlockSourceTokens] section, and uses
+ * it to enclose tokens.
+ *
+ * {@source}}}
+ * @param string name of docblock token type
+ * @param string contents of token
+ * @param boolean whether the contents are preformatted or need modification
+ * @return string
+ */
+ function highlightTutorialSource($token, $word, $preformatted = false)
+ {
+ if (empty($word)) {
+ $this->_setHighlightCache(false, false);
+ $e = $this->_appendHighlight;
+ return $e . $word;
+ }
+ if (isset($this->template_options['highlightTutorialSourceTokens'][$token]))
+ {
+ if (!$preformatted) $word = $this->postProcess($word);
+ if ($this->_setHighlightCache('highlightTutorialSourceTokens', $token)) {
+ return $word;
+ }
+ $e = $this->_appendHighlight;
+ return $e . $this->template_options['highlightTutorialSourceTokens'][$token] . $word;
+ } else {
+ $this->_setHighlightCache(false, false);
+ $e = $this->_appendHighlight;
+ return $e . ($preformatted ? $word : $this->postProcess($word));
+ }
+ }
+
+ /**
+ * Called by {@link parserReturnTag::Convert()} to allow converters to
+ * change type names to desired formatting
+ *
+ * Used by {@link XMLDocBookConverter::type_adjust()} to change true and
+ * false to the peardoc2 values
+ * @param string
+ * @return string
+ */
+ function type_adjust($typename)
+ {
+ return $typename;
+ }
+
+ /**
+ * Used to convert the {@}example} inline tag in a docblock.
+ *
+ * By default, this just wraps ProgramExample
+ * @see XMLDocBookpeardoc2Converter::exampleProgramExample
+ * @param string
+ * @param boolean true if this is to highlight a tutorial <programlisting>
+ * @return string
+ */
+ function exampleProgramExample($example, $tutorial = false, $inlinesourceparse = null/*false*/,
+ $class = null/*false*/, $linenum = null/*false*/, $filesourcepath = null/*false*/)
+ {
+ return $this->ProgramExample($example, $tutorial, $inlinesourceparse, $class, $linenum, $filesourcepath);
+ }
+
+ /**
+ * Used to convert the <<code>> tag in a docblock
+ * @param string
+ * @param boolean true if this is to highlight a tutorial <programlisting>
+ * @return string
+ */
+ function ProgramExample($example, $tutorial = false, $inlinesourceparse = null/*false*/,
+ $class = null/*false*/, $linenum = null/*false*/, $filesourcepath = null/*false*/)
+ {
+ $this->highlightingSource = true;
+ if (tokenizer_ext)
+ {
+ $e = $example;
+ if (!is_array($example))
+ {
+ $obj = new phpDocumentorTWordParser;
+ $obj->setup($example);
+ $e = $obj->getFileSource();
+ $bOpenTagFound = false;
+ foreach ($e as $ke => $ee)
+ {
+ foreach ($ee as $kee => $eee)
+ {
+ if ((int) $e[$ke][$kee][0] == T_OPEN_TAG)
+ {
+ $bOpenTagFound = true;
+ }
+ }
+ }
+ if (!$bOpenTagFound) {
+ $example = "<?php\n".$example;
+ $obj->setup($example);
+ $e = $obj->getFileSource();
+ unset($e[0]);
+ $e = array_values($e);
+ }
+ unset($obj);
+ }
+ $saveclass = $this->class;
+ $parser = new phpDocumentor_HighlightParser;
+ if (!isset($inlinesourceparse))
+ {
+ $example = $parser->parse($e, $this, true); // force php mode
+ } else
+ {
+ if (isset($filesourcepath))
+ {
+ $example = $parser->parse($e, $this, $inlinesourceparse, $class, $linenum, $filesourcepath);
+ } elseif (isset($linenum))
+ {
+ $example = $parser->parse($e, $this, $inlinesourceparse, $class, $linenum);
+ } elseif (isset($class))
+ {
+ $example = $parser->parse($e, $this, $inlinesourceparse, $class);
+ } else
+ {
+ $example = $parser->parse($e, $this, $inlinesourceparse);
+ }
+ }
+ $this->class = $saveclass;
+ } else
+ {
+ $example = $this->postProcess($example);
+ }
+ $this->highlightingSource = false;
+
+ if ($tutorial)
+ {
+ return $example;
+ }
+
+ if (!isset($this->template_options['desctranslate'])) return $example;
+ if (!isset($this->template_options['desctranslate']['code'])) return $example;
+ $example = $this->template_options['desctranslate']['code'] . $example;
+ if (!isset($this->template_options['desctranslate']['/code'])) return $example;
+ return $example . $this->template_options['desctranslate']['/code'];
+ }
+
+ /**
+ * @param string
+ */
+ function TutorialExample($example)
+ {
+ $this->highlightingSource = true;
+ $parse = new phpDocumentor_TutorialHighlightParser;
+ $x = $parse->parse($example, $this);
+ $this->highlightingSource = false;
+ return $x;
+ }
+
+ /**
+ * Used to convert the contents of <<li>> in a docblock
+ * @param string
+ * @return string
+ */
+ function ListItem($item)
+ {
+ if (!isset($this->template_options['desctranslate'])) return $item;
+ if (!isset($this->template_options['desctranslate']['li'])) return $item;
+ $item = $this->template_options['desctranslate']['li'] . $item;
+ if (!isset($this->template_options['desctranslate']['/li'])) return $item;
+ return $item . $this->template_options['desctranslate']['/li'];
+ }
+
+ /**
+ * Used to convert the contents of <<ol>> or <<ul>> in a docblock
+ * @param string
+ * @return string
+ */
+ function EncloseList($list,$ordered)
+ {
+ $listname = ($ordered ? 'ol' : 'ul');
+ if (!isset($this->template_options['desctranslate'])) return $list;
+ if (!isset($this->template_options['desctranslate'][$listname])) return $list;
+ $list = $this->template_options['desctranslate'][$listname] . $list;
+ if (!isset($this->template_options['desctranslate']['/'.$listname])) return $list;
+ return $list . $this->template_options['desctranslate']['/'.$listname];
+ }
+
+ /**
+ * Used to convert the contents of <<pre>> in a docblock
+ * @param string
+ * @return string
+ */
+ function PreserveWhiteSpace($string)
+ {
+ if (!isset($this->template_options['desctranslate'])) return $string;
+ if (!isset($this->template_options['desctranslate']['pre'])) return $string;
+ $string = $this->template_options['desctranslate']['pre'] . $string;
+ if (!isset($this->template_options['desctranslate']['/pre'])) return $string;
+ return $string . $this->template_options['desctranslate']['/pre'];
+ }
+
+ /**
+ * Used to enclose a paragraph in a docblock
+ * @param string
+ * @return string
+ */
+ function EncloseParagraph($para)
+ {
+ if (!isset($this->template_options['desctranslate'])) return $para;
+ if (!isset($this->template_options['desctranslate']['p'])) return $para;
+ $para = $this->template_options['desctranslate']['p'] . $para;
+ if (!isset($this->template_options['desctranslate']['/p'])) return $para;
+ return $para . $this->template_options['desctranslate']['/p'];
+ }
+
+ /**
+ * Used to convert the contents of <<b>> in a docblock
+ * @param string
+ * @return string
+ */
+ function Bolden($para)
+ {
+ if (!isset($this->template_options['desctranslate'])) return $para;
+ if (!isset($this->template_options['desctranslate']['b'])) return $para;
+ $para = $this->template_options['desctranslate']['b'] . $para;
+ if (!isset($this->template_options['desctranslate']['/b'])) return $para;
+ return $para . $this->template_options['desctranslate']['/b'];
+ }
+
+ /**
+ * Used to convert the contents of <<i>> in a docblock
+ * @param string
+ * @return string
+ */
+ function Italicize($para)
+ {
+ if (!isset($this->template_options['desctranslate'])) return $para;
+ if (!isset($this->template_options['desctranslate']['i'])) return $para;
+ $para = $this->template_options['desctranslate']['i'] . $para;
+ if (!isset($this->template_options['desctranslate']['/i'])) return $para;
+ return $para . $this->template_options['desctranslate']['/i'];
+ }
+
+ /**
+ * Used to convert the contents of <<var>> in a docblock
+ * @param string
+ * @return string
+ */
+ function Varize($para)
+ {
+ if (!isset($this->template_options['desctranslate'])) return $para;
+ if (!isset($this->template_options['desctranslate']['var'])) return $para;
+ $para = $this->template_options['desctranslate']['var'] . $para;
+ if (!isset($this->template_options['desctranslate']['/var'])) return $para;
+ return $para . $this->template_options['desctranslate']['/var'];
+ }
+
+ /**
+ * Used to convert the contents of <<kbd>> in a docblock
+ * @param string
+ * @return string
+ */
+ function Kbdize($para)
+ {
+ if (!isset($this->template_options['desctranslate'])) return $para;
+ if (!isset($this->template_options['desctranslate']['kbd'])) return $para;
+ $para = $this->template_options['desctranslate']['kbd'] . $para;
+ if (!isset($this->template_options['desctranslate']['/kbd'])) return $para;
+ return $para . $this->template_options['desctranslate']['/kbd'];
+ }
+
+ /**
+ * Used to convert the contents of <<samp>> in a docblock
+ * @param string
+ * @return string
+ */
+ function Sampize($para)
+ {
+ if (!isset($this->template_options['desctranslate'])) return $para;
+ if (!isset($this->template_options['desctranslate']['samp'])) return $para;
+ $para = $this->template_options['desctranslate']['samp'] . $para;
+ if (!isset($this->template_options['desctranslate']['/samp'])) return $para;
+ return $para . $this->template_options['desctranslate']['/samp'];
+ }
+
+ /**
+ * Used to convert <<br>> in a docblock
+ * @param string
+ * @return string
+ */
+ function Br($para)
+ {
+ if (!isset($this->template_options['desctranslate'])) return $para;
+ if (!isset($this->template_options['desctranslate']['br'])) return $para;
+ $para = $this->template_options['desctranslate']['br'] . $para;
+ return $para;
+ }
+
+ /**
+ * This version does nothing
+ *
+ * Perform necessary post-processing of string data. For example, the HTML
+ * Converters should escape < and > to become &lt; and &gt;
+ * @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 &rdquo; 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('/(&lt;img.*&gt;)/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('/(&lt;font.*&gt;)/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('/(&lt;ol.*&gt;)/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('/(&lt;ul.*&gt;)/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('/(&lt;li.*&gt;)/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('/(&lt;a .*&gt;)/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('&nbsp;',' ',$sourcecode);
+ $sourcecode = str_replace('&lt;','<',$sourcecode);
+ $sourcecode = str_replace('&gt;','>',$sourcecode);
+ $sourcecode = str_replace('&amp;','&',$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 = '&nbsp;';
+ }
+ 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('&nbsp;', '&nbsp;&nbsp;&nbsp;'),
+ 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 &lt;a href="'.$link.'">'.$text.'</a&gt;
+ */
+ 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>&nbsp;&nbsp;&nbsp;&nbsp;$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
+;; &quot; = &quot;
+;; &quot; = """
+;; &lt; = <
+;;
+;; Use this to control translation of entities to their appropriate values
+
+&nbsp; = &nbsp;
+&quot; = &quot;
+&rdquo; = &rdquo;
+&ldquo; = &ldquo;
+&amp; = &amp;
+&lt; = &lt;
+&gt; = &gt;
+&copy; = &copy;
+
+$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}">&nbsp; </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:" ":"&nbsp;"|replace:"\t":"&nbsp;&nbsp;&nbsp;"}</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:" ":"&nbsp;"|replace:"\t":"&nbsp;&nbsp;&nbsp;"}</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}&amp;{/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
new file mode 100755
index 00000000..19fdf05d
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/CHM/default/templates/default/templates/media/bg_left.png
Binary files differ
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}&amp;{/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}&amp;{/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}&nbsp;{/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"}
+&nbsp;&nbsp;&nbsp;{$toc[toc].link}<br />
+{/if}
+{if $toc[toc].tagname == 'refsect3'}
+{assign var="context" value="refsect3"}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{$toc[toc].link}<br />
+{/if}
+{if $toc[toc].tagname == 'table'}
+{if $context == 'refsect2'}&nbsp;&nbsp;&nbsp;{/if}
+{if $context == 'refsect3'}&nbsp;&nbsp;&nbsp;{/if}
+Table: {$toc[toc].link}
+{/if}
+{if $toc[toc].tagname == 'example'}
+{if $context == 'refsect2'}&nbsp;&nbsp;&nbsp;{/if}
+{if $context == 'refsect3'}&nbsp;&nbsp;&nbsp;{/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:" ":"&nbsp;"|replace:"\t":"&nbsp;&nbsp;&nbsp;"}</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:" ":"&nbsp;"|replace:"\t":"&nbsp;&nbsp;&nbsp;"}</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:" ":"&nbsp;"|replace:"\t":"&nbsp;&nbsp;&nbsp;"}</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:" ":"&nbsp;"|replace:"\t":"&nbsp;&nbsp;&nbsp;"}</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 = '&nbsp;';
+ }
+ 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('&nbsp;',' ',$sourcecode);
+ $sourcecode = str_replace('&amp;','&',$sourcecode);
+ $sourcecode = str_replace('<br />',"<br>",$sourcecode);
+ $sourcecode = str_replace('<code>','<pre>',$sourcecode);
+ $sourcecode = str_replace('</code>','</pre>',$sourcecode);
+ $sourcecode = str_replace('&lt;','<',$sourcecode);
+ $sourcecode = str_replace('&gt;','>',$sourcecode);
+ return $sourcecode;
+ }
+
+ /**
+ * Uses htmlspecialchars() on the input
+ */
+ function postProcess($text)
+ {
+ if ($this->highlightingSource) {
+ return str_replace(array(' ',"\t"), array('&nbsp;', '&nbsp;&nbsp;&nbsp;'),
+ 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 &lt;a href="'.$link.'">'.$text.'</a&gt;
+ */
+ 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 &lt;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>&nbsp;&nbsp;&nbsp;&nbsp;$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
+;; &quot; = &quot;
+;; &quot; = """
+;; &lt; = <
+;;
+;; Use this to control translation of entities to their appropriate values
+
+&nbsp; = &nbsp;
+&quot; = &quot;
+&rdquo; = &rdquo;
+&ldquo; = &ldquo;
+&amp; = &amp;
+&lt; = &lt;
+&gt; = &gt;
+&copy; = &copy;
+
+$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>&nbsp;&nbsp;</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>&nbsp;&nbsp;</td>
+ <td class="var-title"><a href="#{$vars[vars].var_name}" title="details" class="var-name-summary">{$vars[vars].var_name}</a>&nbsp;&nbsp;</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>&nbsp;&nbsp;</td>
+ <td class="var-title"><a href="#{$vars[vars].var_name}" title="details" class="var-name-summary">{$vars[vars].var_name}</a>&nbsp;&nbsp;</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>&nbsp;&nbsp;
+ {/if}</td>
+ <td class="method-definition"><a href="#{$methods[methods].function_name}" title="details" class="method-name">{if $methods[methods].ifunction_call.returnsref}&amp;{/if}{$methods[methods].function_name}</a>()&nbsp;&nbsp;</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>&nbsp;&nbsp;</td>
+ {/if}
+ <td class="method-definition"><a href="#{$methods[methods].function_name}" title="details" class="method-name">{if $methods[methods].ifunction_call.returnsref}&amp;{/if}{$methods[methods].function_name}</a>()&nbsp;&nbsp;</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>&nbsp;&nbsp;</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>&nbsp;&nbsp;</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>&nbsp;&nbsp;<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>&nbsp;&nbsp;</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>&nbsp;&nbsp;<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}&amp;{/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}
+&nbsp;
+{/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>&nbsp;&nbsp;</td>
+ <td>
+ <span class="var-name">{$functions[func].params[params].var}:&nbsp;</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>&nbsp;&nbsp;
+ <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>&nbsp;&nbsp;<span class="var-default">{$globals[glob].global_value|replace:" ":"&nbsp;"|replace:"\n":"<br />\n"|replace:"\t":"&nbsp;&nbsp;&nbsp;"}</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
new file mode 100755
index 00000000..8c4ff464
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/media/background.png
Binary files differ
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
new file mode 100755
index 00000000..a9f29bb1
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/media/empty.png
Binary files differ
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
new file mode 100644
index 00000000..10fe5d61
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/HandS/templates/media/logo.png
Binary files differ
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>&nbsp;&nbsp;<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">&nbsp;
+ <code>static {$methods[methods].function_return} {if $methods[methods].ifunction_call.returnsref}&amp;{/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}
+&nbsp;
+{/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>&nbsp;&nbsp;</td>
+ <td>
+ <span class="var-name">{$methods[methods].params[params].var}:&nbsp;</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>&nbsp;&nbsp;<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">&nbsp;
+ <code>{$methods[methods].function_return} {if $methods[methods].ifunction_call.returnsref}&amp;{/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}
+&nbsp;
+{/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>&nbsp;&nbsp;</td>
+ <td>
+ <span class="var-name">{$methods[methods].params[params].var}:&nbsp;</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>&nbsp;&nbsp;</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>&nbsp;&nbsp;</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}&nbsp;{/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"}
+&nbsp;&nbsp;&nbsp;{$toc[toc].link}<br />
+{/if}
+{if $toc[toc].tagname == 'refsect3'}
+{assign var="context" value="refsect3"}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{$toc[toc].link}<br />
+{/if}
+{if $toc[toc].tagname == 'table'}
+{if $context == 'refsect2'}&nbsp;&nbsp;&nbsp;{/if}
+{if $context == 'refsect3'}&nbsp;&nbsp;&nbsp;{/if}
+Table: {$toc[toc].link}
+{/if}
+{if $toc[toc].tagname == 'example'}
+{if $context == 'refsect2'}&nbsp;&nbsp;&nbsp;{/if}
+{if $context == 'refsect3'}&nbsp;&nbsp;&nbsp;{/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>&nbsp;&nbsp;
+ <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>&nbsp;&nbsp;
+ <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
+;; &quot; = &quot;
+;; &quot; = """
+;; &lt; = <
+;;
+;; Use this to control translation of entities to their appropriate values
+
+&nbsp; = &nbsp;
+&quot; = &quot;
+&rdquo; = &rdquo;
+&ldquo; = &ldquo;
+&amp; = &amp;
+&lt; = &lt;
+&gt; = &gt;
+&copy; = &copy;
+
+$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 != ""}&nbsp;&nbsp;{/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:" ":"&nbsp;"|replace:"\t":"&nbsp;&nbsp;&nbsp;"}</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>&nbsp;&nbsp;</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}&amp;{/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}&nbsp;&nbsp;</td>
+ <td><b>{$functions[func].params[params].var}</b>&nbsp;&nbsp;</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>&nbsp;&nbsp;</td>
+ <td>{$globals[glob].global_value|replace:" ":"&nbsp;"|replace:"\n":"<br />\n"|replace:"\t":"&nbsp;&nbsp;&nbsp;"}</td>
+ </tr>
+ {if $globals[glob].global_conflicts.conflict_type}
+ <tr>
+ <td><b>Conflicts with globals:</b>&nbsp;&nbsp;</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>&nbsp;&nbsp;</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
new file mode 100755
index 00000000..d6f36f60
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/media/background.png
Binary files differ
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
new file mode 100755
index 00000000..a9f29bb1
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PHP/templates/media/empty.png
Binary files differ
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}&amp;{/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}&nbsp;&nbsp;</td>
+ <td><b>{$methods[methods].params[params].var}</b>&nbsp;&nbsp;</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}&amp;{/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}&nbsp;&nbsp;</td>
+ <td><b>{$methods[methods].params[params].var}</b>&nbsp;&nbsp;</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}&nbsp;{/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"}
+&nbsp;&nbsp;&nbsp;{$toc[toc].link}<br />
+{/if}
+{if $toc[toc].tagname == 'refsect3'}
+{assign var="context" value="refsect3"}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{$toc[toc].link}<br />
+{/if}
+{if $toc[toc].tagname == 'table'}
+{if $context == 'refsect2'}&nbsp;&nbsp;&nbsp;{/if}
+{if $context == 'refsect3'}&nbsp;&nbsp;&nbsp;{/if}
+Table: {$toc[toc].link}
+{/if}
+{if $toc[toc].tagname == 'example'}
+{if $context == 'refsect2'}&nbsp;&nbsp;&nbsp;{/if}
+{if $context == 'refsect3'}&nbsp;&nbsp;&nbsp;{/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:" ":"&nbsp;"|replace:"\t":"&nbsp;&nbsp;&nbsp;"}</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>&nbsp;&nbsp;</td>
+ <td>{$vars[vars].var_type}</td>
+ </tr>
+ {if $vars[vars].var_overrides != ""}
+ <tr>
+ <td><b>Overrides:</b>&nbsp;&nbsp;</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:" ":"&nbsp;"|replace:"\t":"&nbsp;&nbsp;&nbsp;"}</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>&nbsp;&nbsp;</td>
+ <td>{$vars[vars].var_type}</td>
+ </tr>
+ {if $vars[vars].var_overrides != ""}
+ <tr>
+ <td><b>Overrides:</b>&nbsp;&nbsp;</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
+;; &quot; = &quot;
+;; &quot; = """
+;; &lt; = <
+;;
+;; Use this to control translation of entities to their appropriate values
+
+&nbsp; = &nbsp;
+&quot; = &quot;
+&rdquo; = &rdquo;
+&ldquo; = &ldquo;
+&amp; = &amp;
+&lt; = &lt;
+&gt; = &gt;
+&copy; = &copy;
+
+$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&nbsp;
+ {/if}
+
+ {if $methods[method].access == "public"}
+ public&nbsp;
+ {/if}
+
+ {if $methods[method].abstract == "1"}
+ abstract&nbsp;
+ {/if}
+
+ {if $methods[method].static == "1"}
+ static&nbsp;
+ {/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&nbsp;
+ {/if}
+
+ {if $methods[method].access == "public"}
+ public&nbsp;
+ {/if}
+
+ {if $methods[method].abstract == "1"}
+ abstract&nbsp;
+ {/if}
+
+ {if $methods[method].static == "1"}
+ static&nbsp;
+ {/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&nbsp;
+ {/if}
+
+ {if $methods[method].access == "public"}
+ public&nbsp;
+ {/if}
+
+ {if $methods[method].abstract == 1}
+ abstract&nbsp;
+ {/if}
+
+ {if $methods[method].static == 1}
+ static&nbsp;
+ {/if}
+
+ {$methods[method].function_return}&nbsp;
+
+
+ <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&nbsp;
+ {/if}
+
+ {if $methods[method].abstract == 1}
+ abstract&nbsp;
+ {/if}
+
+ {if $methods[method].static == 1}
+ static&nbsp;
+ {/if}
+
+ {$methods[method].function_return}
+{*
+ {if $ref == "true"}
+ &nbsp;&amp;
+ {/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 != ""}&nbsp;&nbsp;{/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:" ":"&nbsp;"|replace:"\t":"&nbsp;&nbsp;&nbsp;"}</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>&nbsp;&nbsp;</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 &copy; 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}&amp;{/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}&nbsp;&nbsp;</td>
+ <td><b>{$functions[func].params[params].var}</b>&nbsp;&nbsp;</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>&nbsp;&nbsp;</td>
+ <td>{$globals[glob].global_value|replace:" ":"&nbsp;"|replace:"\n":"<br />\n"|replace:"\t":"&nbsp;&nbsp;&nbsp;"}</td>
+ </tr>
+ {if $globals[glob].global_conflicts.conflict_type}
+ <tr>
+ <td><b>Conflicts with globals:</b>&nbsp;&nbsp;</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>&nbsp;&nbsp;</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
new file mode 100644
index 00000000..d6f36f60
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/media/background.png
Binary files differ
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
new file mode 100644
index 00000000..19fdf05d
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/media/bg_left.png
Binary files differ
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
new file mode 100644
index 00000000..a9f29bb1
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/Smarty/templates/PradoSoft/templates/media/empty.png
Binary files differ
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}&amp;{/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}&nbsp;&nbsp;</td>
+ <td><b>{$methods[methods].params[params].var}</b>&nbsp;&nbsp;</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}&nbsp;{/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"}
+&nbsp;&nbsp;&nbsp;{$toc[toc].link}<br />
+{/if}
+{if $toc[toc].tagname == 'refsect3'}
+{assign var="context" value="refsect3"}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{$toc[toc].link}<br />
+{/if}
+{if $toc[toc].tagname == 'table'}
+{if $context == 'refsect2'}&nbsp;&nbsp;&nbsp;{/if}
+{if $context == 'refsect3'}&nbsp;&nbsp;&nbsp;{/if}
+Table: {$toc[toc].link}
+{/if}
+{if $toc[toc].tagname == 'example'}
+{if $context == 'refsect2'}&nbsp;&nbsp;&nbsp;{/if}
+{if $context == 'refsect3'}&nbsp;&nbsp;&nbsp;{/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:" ":"&nbsp;"|replace:"\t":"&nbsp;&nbsp;&nbsp;"}</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>&nbsp;&nbsp;</td>
+ <td>{$vars[vars].var_type}</td>
+ </tr>
+ {if $vars[vars].var_overrides != ""}
+ <tr>
+ <td><b>Overrides:</b>&nbsp;&nbsp;</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
+;; &quot; = &quot;
+;; &quot; = """
+;; &lt; = <
+;;
+;; Use this to control translation of entities to their appropriate values
+
+&nbsp; = &nbsp;
+&quot; = &quot;
+&rdquo; = &rdquo;
+&ldquo; = &ldquo;
+&amp; = &amp;
+&lt; = &lt;
+&gt; = &gt;
+&copy; = &copy;
+
+$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:" ":"&nbsp;"|replace:"\t":"&nbsp;&nbsp;&nbsp;"}</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}&amp;{/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:" ":"&nbsp;"|replace:"\t":"&nbsp;&nbsp;&nbsp;"}</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} &middot; {$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}&amp;{/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}&amp;{/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}&nbsp;{/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"}
+&nbsp;&nbsp;&nbsp;{$toc[toc].link}<br />
+{/if}
+{if $toc[toc].tagname == 'refsect3'}
+{assign var="context" value="refsect3"}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{$toc[toc].link}<br />
+{/if}
+{if $toc[toc].tagname == 'table'}
+{if $context == 'refsect2'}&nbsp;&nbsp;&nbsp;{/if}
+{if $context == 'refsect3'}&nbsp;&nbsp;&nbsp;{/if}
+Table: {$toc[toc].link}
+{/if}
+{if $toc[toc].tagname == 'example'}
+{if $context == 'refsect2'}&nbsp;&nbsp;&nbsp;{/if}
+{if $context == 'refsect3'}&nbsp;&nbsp;&nbsp;{/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:" ":"&nbsp;"|replace:"\t":"&nbsp;&nbsp;&nbsp;"}</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:" ":"&nbsp;"|replace:"\t":"&nbsp;&nbsp;&nbsp;"}</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('&nbsp;',' ',$sourcecode);
+ $sourcecode = str_replace('&lt;','<',$sourcecode);
+ $sourcecode = str_replace('&gt;','>',$sourcecode);
+ $sourcecode = str_replace('&amp;','&',$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 = '&nbsp;';
+ }
+ 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('&nbsp;', '&nbsp;&nbsp;&nbsp;'),
+ 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 &lt;a href="'.$link.'">'.$text.'</a&gt;
+ */
+ 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>&nbsp;&nbsp;&nbsp;&nbsp;$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
+;; &quot; = &quot;
+;; &quot; = """
+;; &lt; = <
+;;
+;; Use this to control translation of entities to their appropriate values
+
+&nbsp; = &nbsp;
+&quot; = &quot;
+&rdquo; = &rdquo;
+&ldquo; = &ldquo;
+&amp; = &amp;
+&lt; = &lt;
+&gt; = &gt;
+&copy; = &copy;
+
+
+$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}&amp;{/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>&nbsp;<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}&amp;{/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>&nbsp;<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}&amp;{/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>&nbsp;<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
new file mode 100755
index 00000000..e8512fb9
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/images/I.png
Binary files differ
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
new file mode 100755
index 00000000..eb334eda
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/images/L.png
Binary files differ
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
new file mode 100755
index 00000000..f7c43c0a
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/images/Lminus.png
Binary files differ
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
new file mode 100755
index 00000000..848ec2fc
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/images/Lplus.png
Binary files differ
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
new file mode 100755
index 00000000..30173254
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/images/T.png
Binary files differ
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
new file mode 100755
index 00000000..2260e424
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/images/Tminus.png
Binary files differ
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
new file mode 100755
index 00000000..2c8d8f4f
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/images/Tplus.png
Binary files differ
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
new file mode 100755
index 00000000..cee9cd37
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/images/blank.png
Binary files differ
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
new file mode 100755
index 00000000..d5683865
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/images/empty.png
Binary files differ
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
new file mode 100644
index 00000000..f502662b
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/images/minus.gif
Binary files differ
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
new file mode 100644
index 00000000..eeca02ce
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/default/templates/media/images/plus.gif
Binary files differ
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}&amp;{/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>&nbsp;<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}&amp;{/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>&nbsp;<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">&nbsp;</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
+;; &quot; = &quot;
+;; &quot; = """
+;; &lt; = <
+;;
+;; Use this to control translation of entities to their appropriate values
+
+&nbsp; = &nbsp;
+&quot; = &quot;
+&rdquo; = &rdquo;
+&ldquo; = &ldquo;
+&amp; = &amp;
+&lt; = &lt;
+&gt; = &gt;
+&copy; = &copy;
+
+
+$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}&amp;{/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>&nbsp;<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}&amp;{/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>&nbsp;<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}&amp;{/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>&nbsp;<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
new file mode 100644
index 00000000..afa9d1d9
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/AbstractClass.png
Binary files differ
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
new file mode 100644
index 00000000..8f65c390
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/AbstractClass_logo.png
Binary files differ
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
new file mode 100644
index 00000000..605ccbe5
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/AbstractMethod.png
Binary files differ
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
new file mode 100644
index 00000000..53d76c63
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/AbstractPrivateClass.png
Binary files differ
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
new file mode 100644
index 00000000..4e68f570
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/AbstractPrivateClass_logo.png
Binary files differ
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
new file mode 100644
index 00000000..41cc9f02
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/AbstractPrivateMethod.png
Binary files differ
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
new file mode 100755
index 00000000..cf548d27
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Class.png
Binary files differ
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
new file mode 100644
index 00000000..6f223c47
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Class_logo.png
Binary files differ
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
new file mode 100755
index 00000000..a9c6f28b
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Constant.png
Binary files differ
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
new file mode 100755
index 00000000..3f16222b
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Constructor.png
Binary files differ
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
new file mode 100755
index 00000000..f28528f0
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Destructor.png
Binary files differ
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
new file mode 100755
index 00000000..902fe258
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Function.png
Binary files differ
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
new file mode 100755
index 00000000..7281bd2a
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Global.png
Binary files differ
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
new file mode 100755
index 00000000..e8512fb9
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/I.png
Binary files differ
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
new file mode 100755
index 00000000..6558ec39
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Index.png
Binary files differ
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
new file mode 100644
index 00000000..e6cd51ed
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Interface.png
Binary files differ
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
new file mode 100644
index 00000000..6f223c47
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Interface_logo.png
Binary files differ
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
new file mode 100755
index 00000000..eb334eda
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/L.png
Binary files differ
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
new file mode 100755
index 00000000..f7c43c0a
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Lminus.png
Binary files differ
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
new file mode 100755
index 00000000..848ec2fc
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Lplus.png
Binary files differ
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
new file mode 100755
index 00000000..9b215784
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Method.png
Binary files differ
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
new file mode 100755
index 00000000..ffe7986e
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Page.png
Binary files differ
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
new file mode 100644
index 00000000..44ce0b3c
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Page_logo.png
Binary files differ
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
new file mode 100755
index 00000000..470e6d56
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/PrivateClass.png
Binary files differ
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
new file mode 100644
index 00000000..590e0064
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/PrivateClass_logo.png
Binary files differ
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
new file mode 100755
index 00000000..d01f2b31
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/PrivateMethod.png
Binary files differ
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
new file mode 100755
index 00000000..d76b21d4
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/PrivateVariable.png
Binary files differ
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
new file mode 100755
index 00000000..9b215784
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/StaticMethod.png
Binary files differ
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
new file mode 100755
index 00000000..8e820193
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/StaticVariable.png
Binary files differ
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
new file mode 100755
index 00000000..30173254
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/T.png
Binary files differ
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
new file mode 100755
index 00000000..2260e424
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Tminus.png
Binary files differ
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
new file mode 100755
index 00000000..2c8d8f4f
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Tplus.png
Binary files differ
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
new file mode 100755
index 00000000..8e820193
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/Variable.png
Binary files differ
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
new file mode 100755
index 00000000..cee9cd37
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/blank.png
Binary files differ
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
new file mode 100755
index 00000000..84e9587a
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/class_folder.png
Binary files differ
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
new file mode 100755
index 00000000..d5683865
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/empty.png
Binary files differ
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
new file mode 100755
index 00000000..0bb2427f
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/file.png
Binary files differ
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
new file mode 100755
index 00000000..a2d79f8d
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/folder.png
Binary files differ
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
new file mode 100755
index 00000000..8b3d6e3b
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/function_folder.png
Binary files differ
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
new file mode 100644
index 00000000..f502662b
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/minus.gif
Binary files differ
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
new file mode 100755
index 00000000..cdbc615d
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/next_button.png
Binary files differ
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
new 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
Binary files differ
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
new file mode 100755
index 00000000..b04cf566
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/package.png
Binary files differ
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
new file mode 100755
index 00000000..6162bafd
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/package_folder.png
Binary files differ
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
new file mode 100644
index 00000000..eeca02ce
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/plus.gif
Binary files differ
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
new file mode 100755
index 00000000..327fdbc2
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/previous_button.png
Binary files differ
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
new 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
Binary files differ
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
new 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
Binary files differ
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
new file mode 100755
index 00000000..bc197375
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/tutorial.png
Binary files differ
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
new file mode 100755
index 00000000..2a468b2a
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/tutorial_folder.png
Binary files differ
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
new file mode 100755
index 00000000..ff36c593
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/earthli/templates/media/images/up_button.png
Binary files differ
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}&amp;{/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>&nbsp;<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}&amp;{/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>&nbsp;<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">&nbsp;</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
+;; &quot; = &quot;
+;; &quot; = """
+;; &lt; = <
+;;
+;; Use this to control translation of entities to their appropriate values
+
+&nbsp; = &nbsp;
+&quot; = &quot;
+&rdquo; = &rdquo;
+&ldquo; = &ldquo;
+&amp; = &amp;
+&lt; = &lt;
+&gt; = &gt;
+&copy; = &copy;
+
+
+$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}&amp;{/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>&nbsp;<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}&amp;{/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>&nbsp;<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}&amp;{/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>&nbsp;<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
new file mode 100755
index 00000000..1c331f09
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/bg_left.png
Binary files differ
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
new file mode 100755
index 00000000..e8512fb9
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/images/I.png
Binary files differ
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
new file mode 100755
index 00000000..eb334eda
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/images/L.png
Binary files differ
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
new file mode 100755
index 00000000..f7c43c0a
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/images/Lminus.png
Binary files differ
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
new file mode 100755
index 00000000..848ec2fc
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/images/Lplus.png
Binary files differ
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
new file mode 100755
index 00000000..30173254
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/images/T.png
Binary files differ
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
new file mode 100755
index 00000000..2260e424
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/images/Tminus.png
Binary files differ
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
new file mode 100755
index 00000000..2c8d8f4f
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/images/Tplus.png
Binary files differ
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
new file mode 100755
index 00000000..cee9cd37
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/images/blank.png
Binary files differ
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
new file mode 100755
index 00000000..d5683865
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/images/empty.png
Binary files differ
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
new file mode 100755
index 00000000..f502662b
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/minus.gif
Binary files differ
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
new file mode 100755
index 00000000..eeca02ce
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/l0l33t/templates/media/plus.gif
Binary files differ
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}&amp;{/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>&nbsp;<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}&amp;{/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>&nbsp;<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">&nbsp;</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
+;; &quot; = &quot;
+;; &quot; = """
+;; &lt; = <
+;;
+;; Use this to control translation of entities to their appropriate values
+
+&nbsp; = &nbsp;
+&quot; = &quot;
+&rdquo; = &rdquo;
+&ldquo; = &ldquo;
+&amp; = &amp;
+&lt; = &lt;
+&gt; = &gt;
+&copy; = &copy;
+
+
+$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}&amp;{/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>&nbsp;<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}&amp;{/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>&nbsp;<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}&amp;{/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>&nbsp;<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
new file mode 100755
index 00000000..e8512fb9
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/images/I.png
Binary files differ
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
new file mode 100755
index 00000000..eb334eda
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/images/L.png
Binary files differ
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
new file mode 100755
index 00000000..f7c43c0a
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/images/Lminus.png
Binary files differ
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
new file mode 100755
index 00000000..848ec2fc
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/images/Lplus.png
Binary files differ
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
new file mode 100755
index 00000000..30173254
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/images/T.png
Binary files differ
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
new file mode 100755
index 00000000..2260e424
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/images/Tminus.png
Binary files differ
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
new file mode 100755
index 00000000..2c8d8f4f
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/images/Tplus.png
Binary files differ
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
new file mode 100755
index 00000000..cee9cd37
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/images/blank.png
Binary files differ
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
new file mode 100755
index 00000000..d5683865
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/images/empty.png
Binary files differ
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
new file mode 100644
index 00000000..f502662b
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/images/minus.gif
Binary files differ
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
new file mode 100644
index 00000000..eeca02ce
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phpdoc.de/templates/media/images/plus.gif
Binary files differ
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}&amp;{/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>&nbsp;<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}&amp;{/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>&nbsp;<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">&nbsp;</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
+;; &quot; = &quot;
+;; &quot; = """
+;; &lt; = <
+;;
+;; Use this to control translation of entities to their appropriate values
+
+&nbsp; = &nbsp;
+&quot; = &quot;
+&rdquo; = &rdquo;
+&ldquo; = &ldquo;
+&amp; = &amp;
+&lt; = &lt;
+&gt; = &gt;
+&copy; = &copy;
+
+
+$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}&amp;{/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>&nbsp;<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}&amp;{/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>&nbsp;<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}&amp;{/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>&nbsp;<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
new file mode 100755
index 00000000..e8512fb9
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/images/I.png
Binary files differ
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
new file mode 100755
index 00000000..eb334eda
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/images/L.png
Binary files differ
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
new file mode 100755
index 00000000..f7c43c0a
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/images/Lminus.png
Binary files differ
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
new file mode 100755
index 00000000..848ec2fc
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/images/Lplus.png
Binary files differ
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
new file mode 100755
index 00000000..30173254
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/images/T.png
Binary files differ
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
new file mode 100755
index 00000000..2260e424
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/images/Tminus.png
Binary files differ
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
new file mode 100755
index 00000000..2c8d8f4f
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/images/Tplus.png
Binary files differ
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
new file mode 100755
index 00000000..cee9cd37
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/images/blank.png
Binary files differ
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
new file mode 100755
index 00000000..d5683865
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/images/empty.png
Binary files differ
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
new file mode 100644
index 00000000..f502662b
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/images/minus.gif
Binary files differ
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
new file mode 100644
index 00000000..eeca02ce
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/DOM/phphtmllib/templates/media/images/plus.gif
Binary files differ
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}&amp;{/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>&nbsp;<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}&amp;{/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>&nbsp;<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">&nbsp;</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
+;; &quot; = &quot;
+;; &quot; = """
+;; &lt; = <
+;;
+;; Use this to control translation of entities to their appropriate values
+
+&nbsp; = &nbsp;
+&quot; = &quot;
+&rdquo; = &rdquo;
+&ldquo; = &ldquo;
+&amp; = &amp;
+&lt; = &lt;
+&gt; = &gt;
+&copy; = &copy;
+
+
+$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}&amp;{/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>&nbsp;<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}&amp;{/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>&nbsp;<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}&amp;{/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>&nbsp;<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}&amp;{/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>&nbsp;<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}&amp;{/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>&nbsp;<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">&nbsp;</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
+;; &quot; = &quot;
+;; &quot; = """
+;; &lt; = <
+;;
+;; Use this to control translation of entities to their appropriate values
+
+&nbsp; = &nbsp;
+&quot; = &quot;
+&rdquo; = &rdquo;
+&ldquo; = &ldquo;
+&amp; = &amp;
+&lt; = &lt;
+&gt; = &gt;
+&copy; = &copy;
+
+$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}&amp;{/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>&nbsp;<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}&amp;{/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>&nbsp;<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}&amp;{/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>&nbsp;<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
new file mode 100644
index 00000000..afa9d1d9
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/AbstractClass.png
Binary files differ
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
new file mode 100644
index 00000000..8f65c390
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/AbstractClass_logo.png
Binary files differ
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
new file mode 100644
index 00000000..605ccbe5
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/AbstractMethod.png
Binary files differ
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
new file mode 100644
index 00000000..53d76c63
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/AbstractPrivateClass.png
Binary files differ
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
new file mode 100644
index 00000000..4e68f570
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/AbstractPrivateClass_logo.png
Binary files differ
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
new file mode 100644
index 00000000..41cc9f02
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/AbstractPrivateMethod.png
Binary files differ
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
new file mode 100755
index 00000000..cf548d27
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Class.png
Binary files differ
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
new file mode 100644
index 00000000..6f223c47
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Class_logo.png
Binary files differ
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
new file mode 100755
index 00000000..a9c6f28b
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Constant.png
Binary files differ
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
new file mode 100755
index 00000000..3f16222b
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Constructor.png
Binary files differ
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
new file mode 100755
index 00000000..f28528f0
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Destructor.png
Binary files differ
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
new file mode 100755
index 00000000..902fe258
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Function.png
Binary files differ
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
new file mode 100755
index 00000000..7281bd2a
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Global.png
Binary files differ
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
new file mode 100755
index 00000000..e8512fb9
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/I.png
Binary files differ
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
new file mode 100755
index 00000000..6558ec39
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Index.png
Binary files differ
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
new file mode 100644
index 00000000..e6cd51ed
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Interface.png
Binary files differ
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
new file mode 100644
index 00000000..6f223c47
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Interface_logo.png
Binary files differ
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
new file mode 100755
index 00000000..eb334eda
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/L.png
Binary files differ
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
new file mode 100755
index 00000000..f7c43c0a
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Lminus.png
Binary files differ
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
new file mode 100755
index 00000000..848ec2fc
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Lplus.png
Binary files differ
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
new file mode 100755
index 00000000..9b215784
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Method.png
Binary files differ
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
new file mode 100755
index 00000000..ffe7986e
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Page.png
Binary files differ
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
new file mode 100644
index 00000000..44ce0b3c
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Page_logo.png
Binary files differ
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
new file mode 100755
index 00000000..470e6d56
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/PrivateClass.png
Binary files differ
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
new file mode 100644
index 00000000..590e0064
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/PrivateClass_logo.png
Binary files differ
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
new file mode 100755
index 00000000..d01f2b31
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/PrivateMethod.png
Binary files differ
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
new file mode 100755
index 00000000..d76b21d4
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/PrivateVariable.png
Binary files differ
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
new file mode 100755
index 00000000..9b215784
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/StaticMethod.png
Binary files differ
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
new file mode 100755
index 00000000..8e820193
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/StaticVariable.png
Binary files differ
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
new file mode 100755
index 00000000..30173254
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/T.png
Binary files differ
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
new file mode 100755
index 00000000..2260e424
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Tminus.png
Binary files differ
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
new file mode 100755
index 00000000..2c8d8f4f
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Tplus.png
Binary files differ
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
new file mode 100755
index 00000000..8e820193
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/Variable.png
Binary files differ
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
new file mode 100755
index 00000000..cee9cd37
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/blank.png
Binary files differ
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
new file mode 100755
index 00000000..84e9587a
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/class_folder.png
Binary files differ
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
new file mode 100644
index 00000000..d5683865
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/empty.png
Binary files differ
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
new file mode 100755
index 00000000..0bb2427f
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/file.png
Binary files differ
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
new file mode 100755
index 00000000..a2d79f8d
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/folder.png
Binary files differ
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
new file mode 100755
index 00000000..8b3d6e3b
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/function_folder.png
Binary files differ
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
new file mode 100755
index 00000000..cdbc615d
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/next_button.png
Binary files differ
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
new file mode 100755
index 00000000..4a11780f
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/next_button_disabled.png
Binary files differ
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
new file mode 100755
index 00000000..b04cf566
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/package.png
Binary files differ
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
new file mode 100755
index 00000000..6162bafd
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/package_folder.png
Binary files differ
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
new file mode 100755
index 00000000..327fdbc2
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/previous_button.png
Binary files differ
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
new file mode 100755
index 00000000..c02ff64b
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/previous_button_disabled.png
Binary files differ
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
new file mode 100644
index 00000000..590e0064
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/private_class_logo.png
Binary files differ
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
new file mode 100755
index 00000000..bc197375
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/tutorial.png
Binary files differ
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
new file mode 100755
index 00000000..2a468b2a
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/tutorial_folder.png
Binary files differ
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
new file mode 100755
index 00000000..ff36c593
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/earthli/templates/media/images/up_button.png
Binary files differ
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}&amp;{/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>&nbsp;<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}&amp;{/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>&nbsp;<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">&nbsp;</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
+;; &quot; = &quot;
+;; &quot; = """
+;; &lt; = <
+;;
+;; Use this to control translation of entities to their appropriate values
+
+&nbsp; = &nbsp;
+&quot; = &quot;
+&rdquo; = &rdquo;
+&ldquo; = &ldquo;
+&amp; = &amp;
+&lt; = &lt;
+&gt; = &gt;
+&copy; = &copy;
+
+$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}&amp;{/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>&nbsp;<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}&amp;{/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>&nbsp;<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}&amp;{/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>&nbsp;<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
new file mode 100755
index 00000000..1c331f09
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/l0l33t/templates/media/bg_left.png
Binary files differ
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}&amp;{/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>&nbsp;<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}&amp;{/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>&nbsp;<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">&nbsp;</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
+;; &quot; = &quot;
+;; &quot; = """
+;; &lt; = <
+;;
+;; Use this to control translation of entities to their appropriate values
+
+&nbsp; = &nbsp;
+&quot; = &quot;
+&rdquo; = &rdquo;
+&ldquo; = &ldquo;
+&amp; = &amp;
+&lt; = &lt;
+&gt; = &gt;
+&copy; = &copy;
+
+
+$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}&amp;{/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>&nbsp;<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}&amp;{/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>&nbsp;<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}&amp;{/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>&nbsp;<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}&amp;{/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>&nbsp;<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}&amp;{/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>&nbsp;<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">&nbsp;</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
+;; &quot; = &quot;
+;; &quot; = """
+;; &lt; = <
+;;
+;; Use this to control translation of entities to their appropriate values
+
+&nbsp; = &nbsp;
+&quot; = &quot;
+&rdquo; = &rdquo;
+&ldquo; = &ldquo;
+&amp; = &amp;
+&lt; = &lt;
+&gt; = &gt;
+&copy; = &copy;
+
+$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}">&nbsp; </a>
+ <a href="#top">top</a><br /></td>
+ </tr>
+</thead>
+<tbody>
+ {section name=contents loop=$index[index].index}
+ <tr>
+ <td>&nbsp;&nbsp;&nbsp;<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">&nbsp; </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}&amp;{/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
new file mode 100755
index 00000000..ada36bbb
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Class.gif
Binary files differ
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
new file mode 100755
index 00000000..d9ca9cfa
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Constant.gif
Binary files differ
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
new file mode 100755
index 00000000..eba8d08f
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Constants.gif
Binary files differ
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
new file mode 100755
index 00000000..f153cfb4
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Constructor.gif
Binary files differ
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
new file mode 100755
index 00000000..bf3d62b3
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Destructor.gif
Binary files differ
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
new file mode 100755
index 00000000..7ab08fd0
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Disk.gif
Binary files differ
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
new file mode 100755
index 00000000..68c6563c
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/FolderClosed.gif
Binary files differ
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
new file mode 100755
index 00000000..8b012d55
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/FolderOpened.gif
Binary files differ
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
new file mode 100755
index 00000000..bc2def80
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Functions.gif
Binary files differ
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
new file mode 100755
index 00000000..44124540
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/GhostClass.gif
Binary files differ
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
new file mode 100755
index 00000000..e8512fb9
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/I.png
Binary files differ
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
new file mode 100755
index 00000000..eb334eda
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/L.png
Binary files differ
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
new file mode 100755
index 00000000..f7c43c0a
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Lminus.png
Binary files differ
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
new file mode 100755
index 00000000..848ec2fc
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Lplus.png
Binary files differ
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
new file mode 100755
index 00000000..346380de
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/PrivateDataMember.gif
Binary files differ
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
new file mode 100755
index 00000000..dcd2b203
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/PrivateMethod.gif
Binary files differ
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
new file mode 100755
index 00000000..a21fffa0
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/PrivateProperty.gif
Binary files differ
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
new file mode 100755
index 00000000..882fa7db
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/ProtectedDataMember.gif
Binary files differ
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
new file mode 100755
index 00000000..b25197b2
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/ProtectedMethod.gif
Binary files differ
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
new file mode 100755
index 00000000..94892fe4
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/ProtectedProperty.gif
Binary files differ
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
new file mode 100755
index 00000000..5a799e0c
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/PublicDataMember.gif
Binary files differ
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
new file mode 100755
index 00000000..571fd9ce
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/PublicMethod.gif
Binary files differ
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
new file mode 100755
index 00000000..634ff5cb
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/PublicProperty.gif
Binary files differ
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
new file mode 100755
index 00000000..30173254
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/T.png
Binary files differ
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
new file mode 100755
index 00000000..2260e424
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Tminus.png
Binary files differ
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
new file mode 100755
index 00000000..2c8d8f4f
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Tplus.png
Binary files differ
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
new file mode 100755
index 00000000..7c13fd59
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Types.gif
Binary files differ
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
new file mode 100755
index 00000000..63b3f553
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Variable.gif
Binary files differ
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
new file mode 100755
index 00000000..3963c3c1
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/Vars.gif
Binary files differ
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
new file mode 100755
index 00000000..cee9cd37
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/blank.png
Binary files differ
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
new file mode 100755
index 00000000..5492345f
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/classFolder.gif
Binary files differ
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
new file mode 100755
index 00000000..e323ff06
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/error.gif
Binary files differ
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
new file mode 100755
index 00000000..0bb2427f
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/file.png
Binary files differ
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
new file mode 100755
index 00000000..2684748b
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/foldericon.png
Binary files differ
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
new file mode 100755
index 00000000..9e998f1b
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/minus.gif
Binary files differ
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
new file mode 100755
index 00000000..93c6d36a
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/msgError.gif
Binary files differ
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
new file mode 100755
index 00000000..6257bbe5
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/msgFatalError.gif
Binary files differ
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
new file mode 100755
index 00000000..0b23fbfe
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/msgHint.gif
Binary files differ
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
new file mode 100755
index 00000000..1cc5c9ba
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/msgInformation.gif
Binary files differ
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
new file mode 100755
index 00000000..e0757783
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/msgWarning.gif
Binary files differ
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
new file mode 100755
index 00000000..15fcd567
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/openfoldericon.png
Binary files differ
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
new file mode 100755
index 00000000..cade83c7
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/plus.gif
Binary files differ
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
new file mode 100755
index 00000000..1fa6d01f
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phpedit/templates/media/images/spacer.gif
Binary files differ
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}&amp;{/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>&nbsp;<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}&amp;{/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>&nbsp;<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}&amp;{/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}&amp;{/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}&nbsp;{/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"}
+&nbsp;&nbsp;&nbsp;{$toc[toc].link}<br />
+{/if}
+{if $toc[toc].tagname == 'refsect3'}
+{assign var="context" value="refsect3"}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{$toc[toc].link}<br />
+{/if}
+{if $toc[toc].tagname == 'table'}
+{if $context == 'refsect2'}&nbsp;&nbsp;&nbsp;{/if}
+{if $context == 'refsect3'}&nbsp;&nbsp;&nbsp;{/if}
+Table: {$toc[toc].link}
+{/if}
+{if $toc[toc].tagname == 'example'}
+{if $context == 'refsect2'}&nbsp;&nbsp;&nbsp;{/if}
+{if $context == 'refsect3'}&nbsp;&nbsp;&nbsp;{/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
+;; &quot; = &quot;
+;; &quot; = """
+;; &lt; = <
+;;
+;; Use this to control translation of entities to their appropriate values
+
+&nbsp; = &nbsp;
+&quot; = &quot;
+&rdquo; = &rdquo;
+&ldquo; = &ldquo;
+&amp; = &amp;
+&lt; = &lt;
+&gt; = &gt;
+&copy; = &copy;
+
+
+$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}&amp;{/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>&nbsp;<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}&amp;{/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>&nbsp;<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}&amp;{/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>&nbsp;<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}&amp;{/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>&nbsp;<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}&amp;{/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>&nbsp;<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">&nbsp;</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("&lt;c:","&lt;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('&lt;','<',$text);
+ $text = str_replace('&gt;','>',$text);
+ $text = str_replace('&#039;','\'',$text);
+ $text = str_replace('&quot;','"',$text);
+ $text = str_replace('&amp;','&',$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
+;; &quot; = &quot;
+;; &quot; = """
+;; &lt; = <
+;;
+;; Use this to control translation of entities to their appropriate values
+
+&nbsp; = " "
+&quot; = """
+&rdquo; = """
+&ldquo; = """
+&amp; = &
+&lt; = &lt;
+&gt; = &gt;
+&copy; = &copy;
+
+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
new file mode 100644
index 00000000..c9924091
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/templates/default/templates/media/logo.jpg
Binary files differ
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 &lt;ulink url="'.$link.'">'.$text.'</ulink&gt;
+ */
+ 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 &lt;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("'", '&apos;', 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:"&notdocumented;"}
+</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:"&notdocumented;"}
+ </simpara>
+{/if}
+{if $desc}
+ {$desc}
+{else}
+{if $var && $sdesc}
+{else}
+ &notdocumented;
+{/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:"&":"&amp;"}</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;
+ &note.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;
+ &note.canstatic;
+ </{$num}>
+{else}
+ <{$num} id="{$id}.note">
+ &title.note;
+ &note.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:"&notdocumented;"}</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:"&notdocumented;"}</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 &apos;{$source_location}&apos;;
+ </funcsynopsisinfo>
+ <funcprototype>
+ <funcdef>{$function_return}{if $function_call.returnsref}&amp;{/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:"&":"&amp;"}{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:"&notdocumented"}</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:"&notdocumented;"}</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 &lt;ol&gt; or &lt;ul&gt;
+ */
+define("PDERROR_UNMATCHED_LIST_TAG", 33);
+/**
+ * warning triggered when another tag is nested in &lt;b&gt;
+ * (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">&lt;?php&nbsp;</font>') - 1);
+ $source = str_replace('}&nbsp;</font><font color="#0000CC">?&gt;</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 &rdquo;
+ * 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 &rdquo;
+ *
+ * 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 &lt;p&gt; 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}&nbsp;&nbsp;&nbsp;{/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}&nbsp;&nbsp;&nbsp;{/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 &nbsp;
+ * - 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 &nbsp;
+ * - 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 = '&nbsp;';
+ $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>&#92;n</i>', "\r"=>'<i>&#92;r</i>', "\t"=>'<i>&#92;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('&nbsp;', $depth*2)."<b>".strtr($curr_key, $_replace)."</b> =&gt; $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('&nbsp;', $depth*2)."<b>$curr_key</b> =&gt; $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:"&nbsp;"}
+ * 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
new file mode 100644
index 00000000..5d519699
--- /dev/null
+++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/misc/smarty_icon.gif
Binary files differ
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 &rdquo;
+ */
+ 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();
+?>