diff -Nru libgtkada-2.24.4/configure libgtkada-2.24.4dfsg/configure --- libgtkada-2.24.4/configure 2014-05-11 14:53:37.000000000 +0000 +++ libgtkada-2.24.4dfsg/configure 2014-11-09 09:55:51.000000000 +0000 @@ -3961,7 +3961,7 @@ libdir='${prefix}/lib' -ac_config_files="$ac_config_files Makefile src/Makefile.common src/Makefile src/tools/gtkada-config src/tools/Makefile testgtk/Makefile src/opengl/Makefile src/gnome/Makefile docs/Makefile docs/gtkada_rm/Makefile po/Makefile src/config.h projects/gtkada.pc projects/gtkada_install_dynamic.gpr projects/gtkada_install_dynamic_gl.gpr" +ac_config_files="$ac_config_files Makefile src/Makefile.common src/Makefile src/tools/gtkada-config src/tools/Makefile testgtk/Makefile src/opengl/Makefile src/gnome/Makefile po/Makefile src/config.h projects/gtkada.pc projects/gtkada_install_dynamic.gpr projects/gtkada_install_dynamic_gl.gpr" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure @@ -4677,8 +4677,6 @@ "testgtk/Makefile") CONFIG_FILES="$CONFIG_FILES testgtk/Makefile" ;; "src/opengl/Makefile") CONFIG_FILES="$CONFIG_FILES src/opengl/Makefile" ;; "src/gnome/Makefile") CONFIG_FILES="$CONFIG_FILES src/gnome/Makefile" ;; - "docs/Makefile") CONFIG_FILES="$CONFIG_FILES docs/Makefile" ;; - "docs/gtkada_rm/Makefile") CONFIG_FILES="$CONFIG_FILES docs/gtkada_rm/Makefile" ;; "po/Makefile") CONFIG_FILES="$CONFIG_FILES po/Makefile" ;; "src/config.h") CONFIG_FILES="$CONFIG_FILES src/config.h" ;; "projects/gtkada.pc") CONFIG_FILES="$CONFIG_FILES projects/gtkada.pc" ;; diff -Nru libgtkada-2.24.4/configure.in libgtkada-2.24.4dfsg/configure.in --- libgtkada-2.24.4/configure.in 2014-05-11 14:53:37.000000000 +0000 +++ libgtkada-2.24.4dfsg/configure.in 2014-11-09 09:55:20.000000000 +0000 @@ -53,4 +53,4 @@ libdir='${prefix}/lib' -AC_OUTPUT(Makefile src/Makefile.common src/Makefile src/tools/gtkada-config src/tools/Makefile testgtk/Makefile src/opengl/Makefile src/gnome/Makefile docs/Makefile docs/gtkada_rm/Makefile po/Makefile src/config.h projects/gtkada.pc projects/gtkada_install_dynamic.gpr projects/gtkada_install_dynamic_gl.gpr) +AC_OUTPUT(Makefile src/Makefile.common src/Makefile src/tools/gtkada-config src/tools/Makefile testgtk/Makefile src/opengl/Makefile src/gnome/Makefile po/Makefile src/config.h projects/gtkada.pc projects/gtkada_install_dynamic.gpr projects/gtkada_install_dynamic_gl.gpr) diff -Nru libgtkada-2.24.4/debian/changelog libgtkada-2.24.4dfsg/debian/changelog --- libgtkada-2.24.4/debian/changelog 2014-10-06 18:44:08.000000000 +0000 +++ libgtkada-2.24.4dfsg/debian/changelog 2014-11-09 14:27:38.000000000 +0000 @@ -1,3 +1,14 @@ +libgtkada (2.24.4dfsg-1) unstable; urgency=medium + + * Repackage without GFDL documentation. Closes: #768539. + - control: drop sphinx build-deps and javascript binary-deps. + - patches/*, rules, libgtkada-doc.*: do not patch/build/install docs. + - control: update description of -doc package. + - copyright, README.source: adjust comments about stripped parts. + - TODO: no hope to generate the reference manual anymore. + + -- Nicolas Boulenguez Sun, 09 Nov 2014 11:10:15 +0100 + libgtkada (2.24.4-2) unstable; urgency=medium * Avoid Suggesting: -doc (=binary:Version). During binNMUs, -doc is not diff -Nru libgtkada-2.24.4/debian/control libgtkada-2.24.4dfsg/debian/control --- libgtkada-2.24.4/debian/control 2014-10-06 18:41:51.000000000 +0000 +++ libgtkada-2.24.4dfsg/debian/control 2014-11-09 09:34:51.000000000 +0000 @@ -20,11 +20,6 @@ libx11-dev, libglu1-mesa-dev | libglu-dev, libgl1-mesa-dev | libgl-dev -Build-Depends-Indep: - python-sphinx, - texlive-fonts-recommended, - texlive-latex-extra, - texlive-latex-recommended Standards-Version: 3.9.6 Homepage: http://libre.adacore.com/libre/tools/gtkada Vcs-Browser: http://www.ada-france.org:8081/branch/changes/org.debian.libgtkada2 @@ -173,10 +168,7 @@ Package: libgtkada-doc Section: doc Architecture: all -Depends: ${misc:Depends}, -# Link to the packaged versions instead of embedding the source. - libjs-jquery, - libjs-underscore +Depends: ${misc:Depends} Suggests: gnat Replaces: libgtkada2-doc Breaks: libgtkada2-doc @@ -184,5 +176,13 @@ GtkAda is a library that allows programmers to write GTK+ applications in the Ada programming language. . - This package contains the User's Guide for GtkAda, in - HTML, PDF and plain text formats. + This package contains examples, lists of known problems and comments + about the Debian packaging.. + . + The complete GTKAda user guide cannot be distributed by Debian + because it is licensed under the GNU Free Documentation License with + Invariant Sections and Cover Texts. The reference manual cannot be + generated from source without the user guide. + They are published by upstream authors at + http://docs.adacore.com/gprbuild-docs/html/gprbuild_ug.html and + http://docs.adacore.com/gtkada-docs/gtkada_ug/_build/html. diff -Nru libgtkada-2.24.4/debian/copyright libgtkada-2.24.4dfsg/debian/copyright --- libgtkada-2.24.4/debian/copyright 2014-10-06 17:17:42.000000000 +0000 +++ libgtkada-2.24.4dfsg/debian/copyright 2014-11-09 10:01:05.000000000 +0000 @@ -1,17 +1,22 @@ Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: GtkAda Source: https://libre.adacore.com/libre/download/ -Comment: All the content available on libre.adacore.com is licensed +Comment: Most of the content available on libre.adacore.com is licensed under the terms of the pure GPL, despite the fact that AdaCore have - not yet adjusted the licensing boilerplate in documentation. + not yet adjusted some licensing boilerplates. . This is stated for example at http://lists.adacore.com/pipermail/gtkada/2009-June/003789.html. The actual license is a decision of AdaCore. Please contact them at - libre@adacore.com for any clarification. . + libre@adacore.com for any clarification. . This is confirmed in COPYING and README. . + However, the GTKAda user guide is licensed separately under the GNU + Free Documentation License with Invariant Sections and Cover Texts, + so Debian cannot distribute it. The reference manual is also excluded + because its generation process relies on parts of the user manual. + . In a previous version of Debian, libgtkada2 2.4.0 was licensed under the terms of the GNAT-Modified GNU General Public License (GMGPL). This new version is licensed under the terms of the pure GPL. As a diff -Nru libgtkada-2.24.4/debian/libgtkada-doc.doc-base.gtkada-ug libgtkada-2.24.4dfsg/debian/libgtkada-doc.doc-base.gtkada-ug --- libgtkada-2.24.4/debian/libgtkada-doc.doc-base.gtkada-ug 2014-10-06 17:17:42.000000000 +0000 +++ libgtkada-2.24.4dfsg/debian/libgtkada-doc.doc-base.gtkada-ug 1970-01-01 00:00:00.000000000 +0000 @@ -1,16 +0,0 @@ -Document: gtkada-ug -Title: GtkAda User Guide -Author: E. Briot, J. Brobecker, A. Charlet (from Adacore) -Abstract: This user guide documents the Ada binding - to the GTK+ library, useful to build graphical user interfaces. -Section: Programming - -Format: HTML -Index: /usr/share/doc/libgtkada-doc/gtkada_ug.html/index.html -Files: /usr/share/doc/libgtkada-doc/gtkada_ug.html - -Format: text -Files: /usr/share/doc/libgtkada-doc/gtkada_ug.text - -Format: pdf -Files: /usr/share/doc/libgtkada-doc/gtkada_ug.pdf.gz diff -Nru libgtkada-2.24.4/debian/libgtkada-doc.docs libgtkada-2.24.4dfsg/debian/libgtkada-doc.docs --- libgtkada-2.24.4/debian/libgtkada-doc.docs 2014-10-06 17:17:42.000000000 +0000 +++ libgtkada-2.24.4dfsg/debian/libgtkada-doc.docs 2014-11-09 09:26:17.000000000 +0000 @@ -6,11 +6,6 @@ debian/README.Debian debian/README.source -# Embedded Javascript libraries are linked in libxmlada-doc.links. -docs/gtkada_ug/_build/gtkada_ug.html -docs/gtkada_ug/_build/gtkada_ug.text -docs/gtkada_ug/_build/latex/gtkada_ug.pdf - features known-problems README diff -Nru libgtkada-2.24.4/debian/libgtkada-doc.links libgtkada-2.24.4dfsg/debian/libgtkada-doc.links --- libgtkada-2.24.4/debian/libgtkada-doc.links 2014-10-06 17:17:42.000000000 +0000 +++ libgtkada-2.24.4dfsg/debian/libgtkada-doc.links 1970-01-01 00:00:00.000000000 +0000 @@ -1,5 +0,0 @@ -# Replace Javascript libraries embedded in HTML documentation with -# symbolic links to Debian packages. - -usr/share/javascript/jquery/jquery.js usr/share/doc/libgtkada-doc/gtkada_ug.html/_static/jquery.js -usr/share/javascript/underscore/underscore.js usr/share/doc/libgtkada-doc/gtkada_ug.html/_static/underscore.js diff -Nru libgtkada-2.24.4/debian/libgtkada-doc.lintian-overrides libgtkada-2.24.4dfsg/debian/libgtkada-doc.lintian-overrides --- libgtkada-2.24.4/debian/libgtkada-doc.lintian-overrides 2014-10-06 18:40:59.000000000 +0000 +++ libgtkada-2.24.4dfsg/debian/libgtkada-doc.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -# The license is not mentioned verbatim, but these file have to exist. -extra-license-file usr/share/doc/libgtkada-doc/gtkada_ug.html/_sources/license.txt -extra-license-file usr/share/doc/libgtkada-doc/gtkada_ug.text/license.txt diff -Nru libgtkada-2.24.4/debian/libgtkada-doc.TODO libgtkada-2.24.4dfsg/debian/libgtkada-doc.TODO --- libgtkada-2.24.4/debian/libgtkada-doc.TODO 2014-10-06 17:17:42.000000000 +0000 +++ libgtkada-2.24.4dfsg/debian/libgtkada-doc.TODO 2014-11-09 10:14:12.000000000 +0000 @@ -1,30 +1,6 @@ * Consider using upstream build system and splitting in small libraries. See xmlada/debian/split.diff for the consequences. -* Try to build and install the reference manual. - -The gtkada reference manual is intended to be built by the -generate-docs script, using the gnat-gps tool, itself depending on the -gtkada library. - -List: debian-devel -Subject: Re: On accepting pre-generated doc from upstream - -For the moment, the Debian packaging breaks this circular dependency -by not building the reference manual. A better solution would be to -have two source packages: - -Package: libgtkada2.18-dev - -Package: gnat-gps -Build-Depends: libgtkada2.18-dev - -Package: libgtkada-doc -Build-Depends: gnat-gps - -The method described at https://wiki.debian.org/DebianBootstrap -seems to avoid duplicating the source package. - * Split architecture dependent and independent data in libgtkada-dev Lintian rightfully complains that most data diff -Nru libgtkada-2.24.4/debian/patches/01-doc.patch libgtkada-2.24.4dfsg/debian/patches/01-doc.patch --- libgtkada-2.24.4/debian/patches/01-doc.patch 2014-10-06 17:17:42.000000000 +0000 +++ libgtkada-2.24.4dfsg/debian/patches/01-doc.patch 2014-11-09 10:02:36.000000000 +0000 @@ -1,8 +1,7 @@ Author: Ludovic Brenta Author: Nicolas Boulenguez Description: adapt documentation to Debian guidelines - * Adjust the info and man page files to Debian. - * Move the Info documentation to "GNU Ada Tools". + * Adjust the man page files to Debian. * Fix incorrect description of --prefix option of gtkada-config. =================================================================== @@ -129,17 +128,3 @@ +any purpose and without fee is hereby granted, provided that the above +copyright notice appear in all copies and that both that copyright +notice and this permission notice appear in supporting documentation. ---- a/docs/gtkada_rm/gtkada_rm.texi -+++ b/docs/gtkada_rm/gtkada_rm.texi -@@ -11,9 +11,9 @@ - @c o - @c oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo - --@dircategory User Interface Toolkit -+@dircategory GNU Ada Tools - @direntry --* GtkAda_Rm: (gtkada_rm). Ada graphical tookit based on GTK+ (Reference Manual) -+* GtkAda Reference Manual: (gtkada_rm). Ada graphical tookit based on GTK+ (Reference Manual) - @end direntry - - @c -------------------------------------------- diff -Nru libgtkada-2.24.4/debian/patches/avoid_repeating_whole_gpl.diff libgtkada-2.24.4dfsg/debian/patches/avoid_repeating_whole_gpl.diff --- libgtkada-2.24.4/debian/patches/avoid_repeating_whole_gpl.diff 2014-10-06 17:17:42.000000000 +0000 +++ libgtkada-2.24.4dfsg/debian/patches/avoid_repeating_whole_gpl.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,23 +0,0 @@ -Description: replace the whole GPL text with a link to /usr/share/doc -Author: Nicolas Boulenguez ---- a/docs/gtkada_ug/index.rst -+++ b/docs/gtkada_ug/index.rst -@@ -41,4 +41,6 @@ - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - --A copy of the license is included in the section entitled 'License'. -+On Debian GNU/Linux systems, the complete text of the GNU General -+Public License can be found in -+:file:`/usr/share/common-licenses/GPL-2`. ---- a/docs/gtkada_ug/license.rst -+++ b/docs/gtkada_ug/license.rst -@@ -2,5 +2,6 @@ - License - ******* - --.. include:: ../../COPYING -- :literal: -+On Debian GNU/Linux systems, the complete text of the GNU General -+Public License can be found in -+:file:`/usr/share/common-licenses/GPL-2`. diff -Nru libgtkada-2.24.4/debian/patches/clean_forgotten_files.diff libgtkada-2.24.4dfsg/debian/patches/clean_forgotten_files.diff --- libgtkada-2.24.4/debian/patches/clean_forgotten_files.diff 2014-10-06 17:17:42.000000000 +0000 +++ libgtkada-2.24.4dfsg/debian/patches/clean_forgotten_files.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,15 +0,0 @@ -Description: clean gtkada_ug build directory - Remove the directory, which is created during the build. - Report errors except for non existing dir (-f is enough, no leading minus needed). -Author: Nicolas Boulenguez ---- a/docs/gtkada_ug/Makefile -+++ b/docs/gtkada_ug/Makefile -@@ -34,7 +34,7 @@ - @echo " doctest to run all doctests embedded in the documentation (if enabled)" - - clean: -- -rm -rf $(BUILDDIR)/* -+ rm -rf $(BUILDDIR) - - html: - $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html diff -Nru libgtkada-2.24.4/debian/patches/series libgtkada-2.24.4dfsg/debian/patches/series --- libgtkada-2.24.4/debian/patches/series 2014-10-06 17:17:42.000000000 +0000 +++ libgtkada-2.24.4dfsg/debian/patches/series 2014-11-09 09:45:07.000000000 +0000 @@ -3,5 +3,3 @@ example_makefiles.patch avoid_hardening_flags_errors.patch include_only_glib_h.patch -avoid_repeating_whole_gpl.diff -clean_forgotten_files.diff diff -Nru libgtkada-2.24.4/debian/README.source libgtkada-2.24.4dfsg/debian/README.source --- libgtkada-2.24.4/debian/README.source 2014-10-06 17:17:42.000000000 +0000 +++ libgtkada-2.24.4dfsg/debian/README.source 2014-11-09 14:24:22.000000000 +0000 @@ -13,8 +13,13 @@ Unfortunately, there are significative changes between this public view and the snapshots on the download site. -Because of the licensing changes described below, and to track -intermediate releases, the Debian packaging stores upstream sources in +Because of the licensing changes described below, +in order to track intermediate releases, +to disable gtk extra modules (version 2.4 is not packaged in Debian), +and to remove the documentation (the user guide is licensed under the + GFDL with Invariant Sections and Cover Texts, and parts of it are + needed to generate the reference manual), +the Debian packaging stores upstream sources in the branch com.adacore.gtkada.debian of the www.ada-france.org monotone database. You may find them at @@ -29,8 +34,6 @@ - (compared to VCS) clarify the license change described below - (compared to VCS) remove .cvsignore and .gitignore files - (compared to snapshots) keep a record of old/intermediate releases -- (compared to both) disable gtk extra modules (dead upstream, not packaged in - Debian anymore) - (compared to VCS) apply changes from snapshots needed to build. Licensing changes @@ -60,4 +63,4 @@ only to remove confusion. The actual license is a decision of AdaCore. Please contact them at libre@adacore.com for any clarification. - -- Nicolas Boulenguez , Sun, 11 May 2014 14:33:43 +0200 + -- Nicolas Boulenguez , Sun, 9 Nov 2014 15:24:22 +0100 diff -Nru libgtkada-2.24.4/debian/rules libgtkada-2.24.4dfsg/debian/rules --- libgtkada-2.24.4/debian/rules 2014-10-06 17:17:42.000000000 +0000 +++ libgtkada-2.24.4dfsg/debian/rules 2014-11-09 09:39:08.000000000 +0000 @@ -224,27 +224,6 @@ rm -f $(TESTGTK_TGZ) ###################################################################### -UG_DIR := docs/gtkada_ug -UG_BUILD := $(UG_DIR)/_build - -override_dh_auto_build-indep: $(UG_BUILD) -$(UG_BUILD): - $(MAKE) -C $(UG_DIR) html latexpdf text SPHINXOPTS=-j$(BUILDER_JOBS) -# Avoid name clash with the reference manual during install. - cd $(UG_BUILD)/latex; mv GtkAda.pdf gtkada_ug.pdf - cd $(UG_BUILD); mv html gtkada_ug.html - cd $(UG_BUILD); mv text gtkada_ug.text -override_dh_auto_clean:: - $(MAKE) -C $(UG_DIR) clean - -###################################################################### - -# TODO: the reference manual needs generated parts: -# docs/gtkada_rm/generated.texi docs/gtkada_rm/generated_menu.texi: -# cd docs/gtkada_rm && \ ./generate_doc.pl `find -# $(addprefix ../../src/, . generated gnome opengl) -name "*.ads"` - -###################################################################### override_dh_compress: dh_compress --package=libgtkada-doc \ diff -Nru libgtkada-2.24.4/docs/generate_docs.gpr libgtkada-2.24.4dfsg/docs/generate_docs.gpr --- libgtkada-2.24.4/docs/generate_docs.gpr 2014-05-11 14:53:37.000000000 +0000 +++ libgtkada-2.24.4dfsg/docs/generate_docs.gpr 1970-01-01 00:00:00.000000000 +0000 @@ -1,22 +0,0 @@ -project Generate_Docs is - - for Source_Dirs use ("../src/generated", "../src/"); - for Object_Dir use "doc_obj"; - - Processors := external ("PROCESSORS", "1"); - -- Number of parallel compilations that should be performed - - package Compiler is - for Default_Switches ("Ada") use ("-gnatc", "-gnatQ"); - end Compiler; - - package Builder is - for Default_Switches ("Ada") use ("-j" & Processors); - end Builder; - - package IDE is - for Documentation_Dir use "html"; - end IDE; - -end Generate_Docs; - diff -Nru libgtkada-2.24.4/docs/gtkada_rm/checkbutton.eps libgtkada-2.24.4dfsg/docs/gtkada_rm/checkbutton.eps --- libgtkada-2.24.4/docs/gtkada_rm/checkbutton.eps 2014-05-11 14:53:37.000000000 +0000 +++ libgtkada-2.24.4dfsg/docs/gtkada_rm/checkbutton.eps 1970-01-01 00:00:00.000000000 +0000 @@ -1,577 +0,0 @@ -%!PS-Adobe-2.0 EPSF-2.0 -%%Title: /home/briot/gtk/GtkAda/t/checkbutton.eps -%%Creator: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) - by John Bradley -%%BoundingBox: 268 362 344 430 -%%Pages: 1 -%%DocumentFonts: -%%EndComments -%%EndProlog - -%%Page: 1 1 - -% remember original state -/origstate save def - -% build a temporary dictionary -20 dict begin - -% define string to hold a scanline's worth of data -/pix 228 string def - -% define space for color conversions -/grays 76 string def % space for gray scale line -/npixls 0 def -/rgbindx 0 def - -% lower left corner -268 362 translate - -% size of image (on paper, in 1/72inch coords) -76.03200 67.96800 scale - -% define 'colorimage' if it isn't defined -% ('colortogray' and 'mergeprocs' come from xwd2ps -% via xgrab) -/colorimage where % do we know about 'colorimage'? - { pop } % yes: pop off the 'dict' returned - { % no: define one - /colortogray { % define an RGB->I function - /rgbdata exch store % call input 'rgbdata' - rgbdata length 3 idiv - /npixls exch store - /rgbindx 0 store - 0 1 npixls 1 sub { - grays exch - rgbdata rgbindx get 20 mul % Red - rgbdata rgbindx 1 add get 32 mul % Green - rgbdata rgbindx 2 add get 12 mul % Blue - add add 64 idiv % I = .5G + .31R + .18B - put - /rgbindx rgbindx 3 add store - } for - grays 0 npixls getinterval - } bind def - - % Utility procedure for colorimage operator. - % This procedure takes two procedures off the - % stack and merges them into a single procedure. - - /mergeprocs { % def - dup length - 3 -1 roll - dup - length - dup - 5 1 roll - 3 -1 roll - add - array cvx - dup - 3 -1 roll - 0 exch - putinterval - dup - 4 2 roll - putinterval - } bind def - - /colorimage { % def - pop pop % remove 'false 3' operands - {colortogray} mergeprocs - image - } bind def - } ifelse % end of 'false' case - - - -76 68 8 % dimensions of data -[76 0 0 -68 0 68] % mapping matrix -{currentfile pix readhexstring pop} -false 3 colorimage - -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -000000d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0000000d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -000000d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0f8fcf8f8fcf8f8fcf8 -f8fcf8f8fcf8f8fcf8f8fcf8f8fcf8f8fcf8000000d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -000000d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0000000d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0000000000000 -000000d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0f8fcf8d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -000000d0d4d0000000000000d0d4d0d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0000000 -d0d4d0000000000000000000000000000000000000d0d4d0d0d4d0000000000000000000 -d0d4d0d0d4d0d0d4d0000000d0d4d0000000000000d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -000000d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0f8fcf8d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0909490000000d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -000000000000d0d4d0d0d4d0000000d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0000000 -d0d4d0d0d4d0000000d0d4d0d0d4d0000000d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0 -000000d0d4d0d0d4d0000000000000d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0d0d4d0 -000000d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0f8fcf8d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0909490000000d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -000000d0d4d0d0d4d0d0d4d0000000d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0000000 -d0d4d0d0d4d0000000d0d4d0d0d4d0000000d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0 -000000d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0d0d4d0 -000000d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0f8fcf8d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0909490000000d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -000000d0d4d0d0d4d0d0d4d0000000d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0000000 -d0d4d0d0d4d0000000d0d4d0d0d4d0000000d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0 -000000d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0d0d4d0 -000000d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0f8fcf8d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0909490000000d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -000000d0d4d0d0d4d0d0d4d0000000d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0000000 -d0d4d0d0d4d0000000d0d4d0d0d4d0000000d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0 -000000d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0d0d4d0 -000000d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0f8fcf8d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0909490000000d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -000000000000d0d4d0d0d4d0000000d0d4d0d0d4d0000000d0d4d0d0d4d0000000000000 -d0d4d0d0d4d0000000d0d4d0d0d4d0000000d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0 -000000d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0d0d4d0 -000000d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0f8fcf8d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0909490000000d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -000000d0d4d0000000000000d0d4d0d0d4d0d0d4d0d0d4d0000000000000d0d4d0000000 -d0d4d0d0d4d0000000000000d0d4d0000000000000d0d4d0d0d4d0000000000000000000 -d0d4d0d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0d0d4d0 -000000d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0f8fcf8d0d4d0909490 -909490909490909490909490909490909490000000d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0000000000000000000 -000000000000000000000000000000000000000000d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0000000d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0000000d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0000000d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0000000d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0000000d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0000000d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -000000d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0000000d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0000000 -000000000000d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0000000d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0000000d0d4d0d0d4d0888888888888888888 -888888888888888888888888888888888888888888d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -000000d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0000000d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0000000d0d4d0 -d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0000000d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0000000d0d4d0d0d4d0888888000000000000 -000000000000000000000000000000000000f8fcf8d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -000000d0d4d0000000000000d0d4d0d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0000000 -d0d4d0000000000000000000000000000000000000d0d4d0d0d4d0000000000000000000 -d0d4d0d0d4d0d0d4d0000000d0d4d0000000000000d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0000000d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0000000d0d4d0d0d4d0888888000000c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0f8fcf8d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -000000000000d0d4d0d0d4d0000000d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0000000 -d0d4d0d0d4d0000000d0d4d0d0d4d0000000d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0 -000000d0d4d0d0d4d0000000000000d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0000000d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0000000d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0000000d0d4d0d0d4d0888888000000c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0f8fcf8d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -000000d0d4d0d0d4d0d0d4d0000000d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0000000 -d0d4d0d0d4d0000000d0d4d0d0d4d0000000d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0 -000000d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0d0d4d0 -000000d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0000000d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0000000d0d4d0d0d4d0888888000000c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0f8fcf8d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -000000d0d4d0d0d4d0d0d4d0000000d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0000000 -d0d4d0d0d4d0000000d0d4d0d0d4d0000000d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0 -000000d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0000000 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0000000d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0000000d0d4d0d0d4d0888888000000c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0f8fcf8d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -000000d0d4d0d0d4d0d0d4d0000000d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0000000 -d0d4d0d0d4d0000000d0d4d0d0d4d0000000d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0 -000000d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0000000d0d4d0d0d4d0000000d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0000000d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0000000d0d4d0d0d4d0888888000000c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0f8fcf8d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -000000000000d0d4d0d0d4d0000000d0d4d0d0d4d0000000d0d4d0d0d4d0000000000000 -d0d4d0d0d4d0000000d0d4d0d0d4d0000000d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0 -000000d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0000000d0d4d0d0d4d0000000d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0000000d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0000000d0d4d0d0d4d0888888000000c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0f8fcf8d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -000000d0d4d0000000000000d0d4d0d0d4d0d0d4d0d0d4d0000000000000d0d4d0000000 -d0d4d0d0d4d0000000000000d0d4d0000000000000d0d4d0d0d4d0000000000000000000 -d0d4d0d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0000000d0d4d0d0d4d0000000000000 -000000000000000000d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0000000d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0000000d0d4d0d0d4d0888888000000c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0f8fcf8d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0000000d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0000000d0d4d0d0d4d0888888f8fcf8f8fcf8 -f8fcf8f8fcf8f8fcf8f8fcf8f8fcf8f8fcf8f8fcf8d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0000000d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0000000d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0000000d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0000000d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0000000d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0000000d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0000000d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0d0d4d0 -d0d4d0d0d4d0d0d4d0d0d4d0 - -showpage - -% stop using temporary dictionary -end - -% restore original state -origstate restore - -%%Trailer Binary files /tmp/LH_Mj8Vf5X/libgtkada-2.24.4/docs/gtkada_rm/checkbutton.jpg and /tmp/9xYs3jcqkX/libgtkada-2.24.4dfsg/docs/gtkada_rm/checkbutton.jpg differ Binary files /tmp/LH_Mj8Vf5X/libgtkada-2.24.4/docs/gtkada_rm/checkbutton.pdf and /tmp/9xYs3jcqkX/libgtkada-2.24.4dfsg/docs/gtkada_rm/checkbutton.pdf differ Binary files /tmp/LH_Mj8Vf5X/libgtkada-2.24.4/docs/gtkada_rm/childtree2.png and /tmp/9xYs3jcqkX/libgtkada-2.24.4dfsg/docs/gtkada_rm/childtree2.png differ Binary files /tmp/LH_Mj8Vf5X/libgtkada-2.24.4/docs/gtkada_rm/childtree3.png and /tmp/9xYs3jcqkX/libgtkada-2.24.4dfsg/docs/gtkada_rm/childtree3.png differ Binary files /tmp/LH_Mj8Vf5X/libgtkada-2.24.4/docs/gtkada_rm/childtree4.png and /tmp/9xYs3jcqkX/libgtkada-2.24.4dfsg/docs/gtkada_rm/childtree4.png differ Binary files /tmp/LH_Mj8Vf5X/libgtkada-2.24.4/docs/gtkada_rm/childtree.png and /tmp/9xYs3jcqkX/libgtkada-2.24.4dfsg/docs/gtkada_rm/childtree.png differ Binary files /tmp/LH_Mj8Vf5X/libgtkada-2.24.4/docs/gtkada_rm/color-button.png and /tmp/9xYs3jcqkX/libgtkada-2.24.4dfsg/docs/gtkada_rm/color-button.png differ diff -Nru libgtkada-2.24.4/docs/gtkada_rm/docgen_gtkada.py libgtkada-2.24.4dfsg/docs/gtkada_rm/docgen_gtkada.py --- libgtkada-2.24.4/docs/gtkada_rm/docgen_gtkada.py 2014-05-11 14:53:37.000000000 +0000 +++ libgtkada-2.24.4dfsg/docs/gtkada_rm/docgen_gtkada.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,124 +0,0 @@ -""" - Docgen plugin to generate the GtkAda Reference Manual. - - Invoke with: - gps -Pgenerate_docs.gpr --load=python:docgen_gtkada.py - -""" - -import GPS, re, os -import shutil - -class ScreenshotTagHandler (GPS.DocgenTagHandler): - """Handling for screenshots""" - def __init__ (self): - GPS.DocgenTagHandler.__init__ ( - self, "screenshot", - on_match = self.on_match, - on_start=self.on_start, - on_exit=self.on_exit) - - def on_start (self, docgen): - self.pictureslist = {} - - def on_match (self, docgen, attrs, value, entity_name, entity_href): - file = docgen.get_current_file() - srcdir = os.path.normpath (GPS.Project.root().file().directory()) - fullfile = os.path.join (srcdir, value.strip()) - - screenshot_found = False - for extension in ["", ".png", ".jpg"]: - if os.path.exists(fullfile + extension): - pict = value.strip() + extension - screenshot_found = True - break - if not screenshot_found: - GPS.Console ("Messages").write ("could not find screenshot %s\n" % (fullfile)) - return "" - - docdir = os.path.join (docgen.get_doc_dir ().name(), "screenshots") - if not os.path.exists (docdir): - os.mkdir(docdir) - - shutil.copy (os.path.join(srcdir,pict), docdir) - - img = """%s""" % (pict, pict) - - self.pictureslist[entity_name] = [entity_href, img] - return """ -
-

Screenshot

- %s -
-
""" % (img) - - def on_exit (self, docgen): - if len (self.pictureslist) == 0: - return - - # first print the right-side box containing the group index - content="" - content += """
""" - content += """
""" - content += """
""" - content += """

Index

""" - content += """
    """ - n = 0 - for pict in sorted(self.pictureslist.keys()): - content += """
  • %s
  • """ % (n, pict) - n += 1 - content += """
""" - - content += """
""" - content += """
Widget Screenshots
""" - n = 0 - for pict in sorted(self.pictureslist.keys()): - content += """ -
-
- -

%s

-
- %s -
-
-
""" % (n, pict, self.pictureslist[pict][0], self.pictureslist[pict][1]) - n += 1 - content += """
""" - - docgen.generate_index_file ("Widget Screenshots", "screenshots.html", content); - -class ExampleTagHandler (GPS.DocgenTagHandler): - """Handling for tags""" - def __init__ (self): - GPS.DocgenTagHandler.__init__ ( - self, "example", - on_match = self.on_match) - - def on_match (self, docgen, attrs, value, entity_name, entity_href): - return """
%s
""" % value - -def on_gps_start (hook): - # Disable launching of browser on exit - GPS.Preference ("Doc-Spawn-Browser").set(False) - - GPS.Docgen.register_tag_handler (ScreenshotTagHandler ()) - GPS.Docgen.register_tag_handler (ExampleTagHandler ()) - GPS.Docgen.register_css (GPS.File ("gtkada.css")) - GPS.Docgen.register_main_index (GPS.File ("gtkada_rm/groups.html")) - - GPS.Project.root().generate_doc (True) - GPS.Timeout (500, wait_doc) - -def wait_doc(timeout): - txt = GPS.Console("Messages").get_text() - if txt.find("Documentation generated") == -1: - return True - else: - # Log the output in log.txt - f=open("log.txt", "w") - f.write(GPS.Console ("Messages").get_text()) - f.close() - GPS.exit() - -GPS.Hook ("gps_started").add (on_gps_start) Binary files /tmp/LH_Mj8Vf5X/libgtkada-2.24.4/docs/gtkada_rm/entities.png and /tmp/9xYs3jcqkX/libgtkada-2.24.4dfsg/docs/gtkada_rm/entities.png differ Binary files /tmp/LH_Mj8Vf5X/libgtkada-2.24.4/docs/gtkada_rm/file-button.png and /tmp/9xYs3jcqkX/libgtkada-2.24.4dfsg/docs/gtkada_rm/file-button.png differ Binary files /tmp/LH_Mj8Vf5X/libgtkada-2.24.4/docs/gtkada_rm/filechooser.png and /tmp/9xYs3jcqkX/libgtkada-2.24.4dfsg/docs/gtkada_rm/filechooser.png differ Binary files /tmp/LH_Mj8Vf5X/libgtkada-2.24.4/docs/gtkada_rm/font-button.png and /tmp/9xYs3jcqkX/libgtkada-2.24.4dfsg/docs/gtkada_rm/font-button.png differ diff -Nru libgtkada-2.24.4/docs/gtkada_rm/font.eps libgtkada-2.24.4dfsg/docs/gtkada_rm/font.eps --- libgtkada-2.24.4/docs/gtkada_rm/font.eps 2014-05-11 14:53:37.000000000 +0000 +++ libgtkada-2.24.4dfsg/docs/gtkada_rm/font.eps 1970-01-01 00:00:00.000000000 +0000 @@ -1,621 +0,0 @@ -%!PS-Adobe-2.0 EPSF-2.0 -%%Title: font.eps -%%Creator: fig2dev Version 3.2 Patchlevel 1 -%%CreationDate: Wed Mar 22 11:21:10 2000 -%%For: briot@lyon.act-europe.fr (Emmanuel Briot) -%%Orientation: Portrait -%%BoundingBox: 0 0 271 230 -%%Pages: 0 -%%BeginSetup -%%EndSetup -%%Magnification: 1.0000 -%%EndComments -/MyAppDict 100 dict dup begin def -/$F2psDict 200 dict def -$F2psDict begin -$F2psDict /mtrx matrix put -/col-1 {0 setgray} bind def -/col0 {0.000 0.000 0.000 srgb} bind def -/col1 {0.000 0.000 1.000 srgb} bind def -/col2 {0.000 1.000 0.000 srgb} bind def -/col3 {0.000 1.000 1.000 srgb} bind def -/col4 {1.000 0.000 0.000 srgb} bind def -/col5 {1.000 0.000 1.000 srgb} bind def -/col6 {1.000 1.000 0.000 srgb} bind def -/col7 {1.000 1.000 1.000 srgb} bind def -/col8 {0.000 0.000 0.560 srgb} bind def -/col9 {0.000 0.000 0.690 srgb} bind def -/col10 {0.000 0.000 0.820 srgb} bind def -/col11 {0.530 0.810 1.000 srgb} bind def -/col12 {0.000 0.560 0.000 srgb} bind def -/col13 {0.000 0.690 0.000 srgb} bind def -/col14 {0.000 0.820 0.000 srgb} bind def -/col15 {0.000 0.560 0.560 srgb} bind def -/col16 {0.000 0.690 0.690 srgb} bind def -/col17 {0.000 0.820 0.820 srgb} bind def -/col18 {0.560 0.000 0.000 srgb} bind def -/col19 {0.690 0.000 0.000 srgb} bind def -/col20 {0.820 0.000 0.000 srgb} bind def -/col21 {0.560 0.000 0.560 srgb} bind def -/col22 {0.690 0.000 0.690 srgb} bind def -/col23 {0.820 0.000 0.820 srgb} bind def -/col24 {0.500 0.190 0.000 srgb} bind def -/col25 {0.630 0.250 0.000 srgb} bind def -/col26 {0.750 0.380 0.000 srgb} bind def -/col27 {1.000 0.500 0.500 srgb} bind def -/col28 {1.000 0.630 0.630 srgb} bind def -/col29 {1.000 0.750 0.750 srgb} bind def -/col30 {1.000 0.880 0.880 srgb} bind def -/col31 {1.000 0.840 0.000 srgb} bind def - -end -save --215.0 353.0 translate -1 -1 scale -.9 .9 scale % to make patterns same scale as in xfig - -% This junk string is used by the show operators -/PATsstr 1 string def -/PATawidthshow { % cx cy cchar rx ry string - % Loop over each character in the string - { % cx cy cchar rx ry char - % Show the character - dup % cx cy cchar rx ry char char - PATsstr dup 0 4 -1 roll put % cx cy cchar rx ry char (char) - false charpath % cx cy cchar rx ry char - /clip load PATdraw - % Move past the character (charpath modified the - % current point) - currentpoint % cx cy cchar rx ry char x y - newpath - moveto % cx cy cchar rx ry char - % Reposition by cx,cy if the character in the string is cchar - 3 index eq { % cx cy cchar rx ry - 4 index 4 index rmoveto - } if - % Reposition all characters by rx ry - 2 copy rmoveto % cx cy cchar rx ry - } forall - pop pop pop pop pop % - - currentpoint - newpath - moveto -} bind def -/PATcg { - 7 dict dup begin - /lw currentlinewidth def - /lc currentlinecap def - /lj currentlinejoin def - /ml currentmiterlimit def - /ds [ currentdash ] def - /cc [ currentrgbcolor ] def - /cm matrix currentmatrix def - end -} bind def -% PATdraw - calculates the boundaries of the object and -% fills it with the current pattern -/PATdraw { % proc - save exch - PATpcalc % proc nw nh px py - 5 -1 roll exec % nw nh px py - newpath - PATfill % - - restore -} bind def -% PATfill - performs the tiling for the shape -/PATfill { % nw nh px py PATfill - - PATDict /CurrentPattern get dup begin - setfont - % Set the coordinate system to Pattern Space - PatternGState PATsg - % Set the color for uncolored pattezns - PaintType 2 eq { PATDict /PColor get PATsc } if - % Create the string for showing - 3 index string % nw nh px py str - % Loop for each of the pattern sources - 0 1 Multi 1 sub { % nw nh px py str source - % Move to the starting location - 3 index 3 index % nw nh px py str source px py - moveto % nw nh px py str source - % For multiple sources, set the appropriate color - Multi 1 ne { dup PC exch get PATsc } if - % Set the appropriate string for the source - 0 1 7 index 1 sub { 2 index exch 2 index put } for pop - % Loop over the number of vertical cells - 3 index % nw nh px py str nh - { % nw nh px py str - currentpoint % nw nh px py str cx cy - 2 index show % nw nh px py str cx cy - YStep add moveto % nw nh px py str - } repeat % nw nh px py str - } for - 5 { pop } repeat - end -} bind def - -% PATkshow - kshow with the current pattezn -/PATkshow { % proc string - exch bind % string proc - 1 index 0 get % string proc char - % Loop over all but the last character in the string - 0 1 4 index length 2 sub { - % string proc char idx - % Find the n+1th character in the string - 3 index exch 1 add get % string proe char char+1 - exch 2 copy % strinq proc char+1 char char+1 char - % Now show the nth character - PATsstr dup 0 4 -1 roll put % string proc chr+1 chr chr+1 (chr) - false charpath % string proc char+1 char char+1 - /clip load PATdraw - % Move past the character (charpath modified the current point) - currentpoint newpath moveto - % Execute the user proc (should consume char and char+1) - mark 3 1 roll % string proc char+1 mark char char+1 - 4 index exec % string proc char+1 mark... - cleartomark % string proc char+1 - } for - % Now display the last character - PATsstr dup 0 4 -1 roll put % string proc (char+1) - false charpath % string proc - /clip load PATdraw - neewath - pop pop % - -} bind def -% PATmp - the makepattern equivalent -/PATmp { % patdict patmtx PATmp patinstance - exch dup length 7 add % We will add 6 new entries plus 1 FID - dict copy % Create a new dictionary - begin - % Matrix to install when painting the pattern - TilingType PATtcalc - /PatternGState PATcg def - PatternGState /cm 3 -1 roll put - % Check for multi pattern sources (Level 1 fast color patterns) - currentdict /Multi known not { /Multi 1 def } if - % Font dictionary definitions - /FontType 3 def - % Create a dummy encoding vector - /Encoding 256 array def - 3 string 0 1 255 { - Encoding exch dup 3 index cvs cvn put } for pop - /FontMatrix matrix def - /FontBBox BBox def - /BuildChar { - mark 3 1 roll % mark dict char - exch begin - Multi 1 ne {PaintData exch get}{pop} ifelse % mark [paintdata] - PaintType 2 eq Multi 1 ne or - { XStep 0 FontBBox aload pop setcachedevice } - { XStep 0 setcharwidth } ifelse - currentdict % mark [paintdata] dict - /PaintProc load % mark [paintdata] dict paintproc - end - gsave - false PATredef exec true PATredef - grestore - cleartomark % - - } bind def - currentdict - end % newdict - /foo exch % /foo newlict - definefont % newfont -} bind def -% PATpcalc - calculates the starting point and width/height -% of the tile fill for the shape -/PATpcalc { % - PATpcalc nw nh px py - PATDict /CurrentPattern get begin - gsave - % Set up the coordinate system to Pattern Space - % and lock down pattern - PatternGState /cm get setmatrix - BBox aload pop pop pop translate - % Determine the bounding box of the shape - pathbbox % llx lly urx ury - grestore - % Determine (nw, nh) the # of cells to paint width and height - PatHeight div ceiling % llx lly urx qh - 4 1 roll % qh llx lly urx - PatWidth div ceiling % qh llx lly qw - 4 1 roll % qw qh llx lly - PatHeight div floor % qw qh llx ph - 4 1 roll % ph qw qh llx - PatWidth div floor % ph qw qh pw - 4 1 roll % pw ph qw qh - 2 index sub cvi abs % pw ph qs qh-ph - exch 3 index sub cvi abs exch % pw ph nw=qw-pw nh=qh-ph - % Determine the starting point of the pattern fill - %(px, py) - 4 2 roll % nw nh pw ph - PatHeight mul % nw nh pw py - exch % nw nh py pw - PatWidth mul exch % nw nh px py - end -} bind def - -% Save the original routines so that we can use them later on -/oldfill /fill load def -/oldeofill /eofill load def -/oldstroke /stroke load def -/oldshow /show load def -/oldashow /ashow load def -/oldwidthshow /widthshow load def -/oldawidthshow /awidthshow load def -/oldkshow /kshow load def - -% These defs are necessary so that subsequent procs don't bind in -% the originals -/fill { oldfill } bind def -/eofill { oldeofill } bind def -/stroke { oldstroke } bind def -/show { oldshow } bind def -/ashow { oldashow } bind def -/widthshow { oldwidthshow } bind def -/awidthshow { oldawidthshow } bind def -/kshow { oldkshow } bind def -/PATredef { - MyAppDict begin - { - /fill { /clip load PATdraw newpath } bind def - /eofill { /eoclip load PATdraw newpath } bind def - /stroke { PATstroke } bind def - /show { 0 0 null 0 0 6 -1 roll PATawidthshow } bind def - /ashow { 0 0 null 6 3 roll PATawidthshow } - bind def - /widthshow { 0 0 3 -1 roll PATawidthshow } - bind def - /awidthshow { PATawidthshow } bind def - /kshow { PATkshow } bind def - } { - /fill { oldfill } bind def - /eofill { oldeofill } bind def - /stroke { oldstroke } bind def - /show { oldshow } bind def - /ashow { oldashow } bind def - /widthshow { oldwidthshow } bind def - /awidthshow { oldawidthshow } bind def - /kshow { oldkshow } bind def - } ifelse - end -} bind def -false PATredef -% Conditionally define setcmykcolor if not available -/setcmykcolor where { pop } { - /setcmykcolor { - 1 sub 4 1 roll - 3 { - 3 index add neg dup 0 lt { pop 0 } if 3 1 roll - } repeat - setrgbcolor - pop - } bind def -} ifelse -/PATsc { % colorarray - aload length % c1 ... cn length - dup 1 eq { pop setgray } { 3 eq { setrgbcolor } { setcmykcolor - } ifelse } ifelse -} bind def -/PATsg { % dict - begin - lw setlinewidth - lc setlinecap - lj setlinejoin - ml setmiterlimit - ds aload pop setdash - cc aload pop setrgbcolor - cm setmatrix - end -} bind def - -/PATDict 3 dict def -/PATsp { - true PATredef - PATDict begin - /CurrentPattern exch def - % If it's an uncolored pattern, save the color - CurrentPattern /PaintType get 2 eq { - /PColor exch def - } if - /CColor [ currentrgbcolor ] def - end -} bind def -% PATstroke - stroke with the current pattern -/PATstroke { - countdictstack - save - mark - { - currentpoint strokepath moveto - PATpcalc % proc nw nh px py - clip newpath PATfill - } stopped { - (*** PATstroke Warning: Path is too complex, stroking - with gray) = - cleartomark - restore - countdictstack exch sub dup 0 gt - { { end } repeat } { pop } ifelse - gsave 0.5 setgray oldstroke grestore - } { pop restore pop } ifelse - newpath -} bind def -/PATtcalc { % modmtx tilingtype PATtcalc tilematrix - % Note: tiling types 2 and 3 are not supported - gsave - exch concat % tilingtype - matrix currentmatrix exch % cmtx tilingtype - % Tiling type 1 and 3: constant spacing - 2 ne { - % Distort the pattern so that it occupies - % an integral number of device pixels - dup 4 get exch dup 5 get exch % tx ty cmtx - XStep 0 dtransform - round exch round exch % tx ty cmtx dx.x dx.y - XStep div exch XStep div exch % tx ty cmtx a b - 0 YStep dtransform - round exch round exch % tx ty cmtx a b dy.x dy.y - YStep div exch YStep div exch % tx ty cmtx a b c d - 7 -3 roll astore % { a b c d tx ty } - } if - grestore -} bind def -/PATusp { - false PATredef - PATDict begin - CColor PATsc - end -} bind def - -% this is the pattern fill program from the Second edition Reference Manual -% with changes to call the above pattern fill -% left30 -11 dict begin -/PaintType 1 def -/PatternType 1 def -/TilingType 1 def -/BBox [0 0 1 1] def -/XStep 1 def -/YStep 1 def -/PatWidth 1 def -/PatHeight 1 def -/Multi 2 def -/PaintData [ - { clippath } bind - { 32 16 true [ 32 0 0 -16 0 16 ] - {} - imagemask } bind -] def -/PaintProc { - pop - exec fill -} def -currentdict -end -/P1 exch def -1.1111 1.1111 scale %restore scale - -/cp {closepath} bind def -/ef {eofill} bind def -/gr {grestore} bind def -/gs {gsave} bind def -/sa {save} bind def -/rs {restore} bind def -/l {lineto} bind def -/m {moveto} bind def -/rm {rmoveto} bind def -/n {newpath} bind def -/s {stroke} bind def -/sh {show} bind def -/slc {setlinecap} bind def -/slj {setlinejoin} bind def -/slw {setlinewidth} bind def -/srgb {setrgbcolor} bind def -/rot {rotate} bind def -/sc {scale} bind def -/sd {setdash} bind def -/ff {findfont} bind def -/sf {setfont} bind def -/scf {scalefont} bind def -/sw {stringwidth} bind def -/tr {translate} bind def -/tnt {dup dup currentrgbcolor - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} - bind def -/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul - 4 -2 roll mul srgb} bind def -/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def -/$F2psEnd {$F2psEnteredState restore end} def -%%EndProlog - -$F2psBegin -10 setmiterlimit -n -1000 6867 m -1000 -1000 l 9095 -1000 l 9095 6867 l cp clip - 0.06000 0.06000 sc -% Polyline -7.500 slw -n 4756 3976 m 4756 2529 l 4901 2529 l 4901 3107 l 5046 3107 l 5046 2529 l - 5190 2529 l 5190 3976 l 5046 3976 l 5046 3397 l 4901 3397 l - 4901 3976 l cp gs col0 s gr -% Polyline - [60] 0 sd -n 3600 3976 m 8083 3976 l cp gs col0 s gr [] 0 sd -% Polyline - [60] 0 sd -n 4034 2529 m 4756 2529 l cp gs col0 s gr [] 0 sd -% Polyline - [60] 0 sd -n 4756 3976 m 4756 5277 l cp gs col0 s gr [] 0 sd -% Polyline - [60] 0 sd -n 5190 3976 m 5190 5566 l cp gs col0 s gr [] 0 sd -% Polyline - [60] 0 sd -n 4179 3976 m 4179 5855 l cp gs col0 s gr [] 0 sd -% Polyline -n 4179 3976 m 4323 3976 l 4323 4119 l 4179 4119 l cp gs /PC [[0.00 0.00 0.00] [0.00 0.00 0.00]] def -15.00 15.00 sc P1 [16 0 0 -8 278.60 265.07] PATmp PATsp ef gr PATusp gs col0 s gr -% Polyline -gs clippath -4092 4901 m 4034 5132 l 3976 4901 l 3976 5147 l 4092 5147 l cp -3976 2760 m 4034 2529 l 4092 2760 l 4092 2514 l 3976 2514 l cp -clip -n 4034 2529 m 4034 5132 l gs col0 s gr gr - -% arrowhead -n 3976 2760 m 4034 2529 l 4092 2760 l col0 s -% arrowhead -n 4092 4901 m 4034 5132 l 3976 4901 l col0 s -% Polyline -gs clippath -4525 5219 m 4756 5277 l 4525 5335 l 4771 5335 l 4771 5219 l cp -clip -n 4179 5277 m 4756 5277 l gs col0 s gr gr - -% arrowhead -n 4525 5219 m 4756 5277 l 4525 5335 l col0 s -% Polyline -gs clippath -4959 5508 m 5190 5566 l 4959 5624 l 5205 5624 l 5205 5508 l cp -clip -n 4179 5566 m 5190 5566 l gs col0 s gr gr - -% arrowhead -n 4959 5508 m 5190 5566 l 4959 5624 l col0 s -% Polyline - [60] 0 sd -n 6203 4698 m 5769 4698 l cp gs col0 s gr [] 0 sd -% Polyline - [60] 0 sd -n 7070 3976 m 7070 5855 l cp gs col0 s gr [] 0 sd -% Polyline -n 5769 3976 m 5914 3976 l 5914 4119 l 5769 4119 l cp gs /PC [[0.00 0.00 0.00] [0.00 0.00 0.00]] def -15.00 15.00 sc P1 [16 0 0 -8 384.60 265.07] PATmp PATsp ef gr PATusp gs col0 s gr -% Polyline -gs clippath -5827 4467 m 5769 4698 l 5711 4467 l 5711 4713 l 5827 4713 l cp -5711 3628 m 5769 3397 l 5827 3628 l 5827 3382 l 5711 3382 l cp -clip -n 5769 3397 m 5769 4698 l gs col0 s gr gr - -% arrowhead -n 5711 3628 m 5769 3397 l 5827 3628 l col0 s -% arrowhead -n 5827 4467 m 5769 4698 l 5711 4467 l col0 s -% Polyline -gs clippath -5972 5219 m 6203 5277 l 5972 5335 l 6218 5335 l 6218 5219 l cp -clip -n 5769 5277 m 6203 5277 l gs col0 s gr gr - -% arrowhead -n 5972 5219 m 6203 5277 l 5972 5335 l col0 s -% Polyline -gs clippath -6839 5797 m 7070 5855 l 6839 5913 l 7085 5913 l 7085 5797 l cp -clip -n 5769 5855 m 7070 5855 l gs col0 s gr gr - -% arrowhead -n 6839 5797 m 7070 5855 l 6839 5913 l col0 s -% Polyline -gs clippath -6551 5508 m 6782 5566 l 6551 5624 l 6797 5624 l 6797 5508 l cp -clip -n 5769 5566 m 6782 5566 l gs col0 s gr gr - -% arrowhead -n 6551 5508 m 6782 5566 l 6551 5624 l col0 s -% Polyline - [60] 0 sd -n 6782 4698 m 6782 5566 l gs col0 s gr [] 0 sd -% Polyline - [60] 0 sd -n 6203 4698 m 6203 5277 l gs col0 s gr [] 0 sd -% Polyline - [60] 0 sd -n 5769 4698 m 5769 5855 l cp gs col0 s gr [] 0 sd -% Polyline -gs clippath -5538 5797 m 5769 5855 l 5538 5913 l 5784 5913 l 5784 5797 l cp -clip -n 4179 5855 m 5769 5855 l gs col0 s gr gr - -% arrowhead -n 5538 5797 m 5769 5855 l 5538 5913 l col0 s -% Polyline -n 4756 2529 m 4901 2529 l 4901 3107 l 5046 3107 l 5046 2529 l 5190 2529 l - 5190 3976 l 5046 3976 l 5046 3397 l 4901 3397 l 4901 3976 l - 4756 3976 l cp gs 0.50 setgray ef gr gs col0 s gr -% Polyline - [60] 0 sd -n 5769 3397 m 6203 3397 l cp gs col0 s gr [] 0 sd -% Polyline -n 6348 3541 m 6637 3541 l 6637 3831 l 6348 3831 l cp gs col0 s gr -% Polyline -0.000 slw -n 6203 3397 m 6782 3397 l 6782 3541 l 6203 3541 l cp gs 0.50 setgray ef gr -% Polyline -n 6782 3541 m 6782 3976 l 6637 3976 l 6637 3541 l cp gs 0.50 setgray ef gr -% Polyline -n 6203 3541 m 6348 3541 l 6348 3976 l 6203 3976 l cp gs 0.50 setgray ef gr -% Polyline -n 6348 3831 m 6637 3831 l 6637 3976 l 6348 3976 l cp gs 0.50 setgray ef gr -% Polyline -n 6637 3976 m 6637 4553 l 6348 4553 l 6348 4409 l 6203 4409 l 6203 4698 l - 6782 4698 l 6782 3976 l cp gs 0.50 setgray ef gr -% Polyline -7.500 slw -n 6203 3397 m 6782 3397 l 6782 4698 l 6203 4698 l 6203 4409 l 6348 4409 l - 6348 4553 l 6637 4553 l 6637 3976 l 6203 3976 l 6203 3397 l cp gs col0 s gr -% Polyline -n 6348 3541 m 6637 3541 l 6637 3831 l 6348 3831 l 6348 3541 l cp gs col0 s gr -% Polyline - [60 30 15 30] 0 sd -gs clippath -4381 3600 m 4323 3831 l 4265 3600 l 4265 3846 l 4381 3846 l cp -clip -n 4323 2239 m 4323 3831 l gs col0 s gr gr - [] 0 sd -% arrowhead -n 4381 3600 m 4323 3831 l 4265 3600 l col0 s -/Times-Roman ff 225.00 scf sf -4034 3541 m -gs 1 -1 sc 90.0 rot (ascent) col0 sh gr -/Times-Roman ff 225.00 scf sf -4034 4843 m -gs 1 -1 sc 90.0 rot (descent) col0 sh gr -/Times-Roman ff 225.00 scf sf -5769 3831 m -gs 1 -1 sc 90.0 rot (ascent) col0 sh gr -/Times-Roman ff 225.00 scf sf -5769 4698 m -gs 1 -1 sc 90.0 rot (descent) col0 sh gr -/Times-Roman ff 225.00 scf sf -4323 5132 m -gs 1 -1 sc (lbearing) col0 sh gr -/Times-Roman ff 225.00 scf sf -4323 5566 m -gs 1 -1 sc (rbearing) col0 sh gr -/Times-Roman ff 225.00 scf sf -4323 5855 m -gs 1 -1 sc (width) col0 sh gr -/Times-Roman ff 225.00 scf sf -5914 5132 m -gs 1 -1 sc (lbearing) col0 sh gr -/Times-Roman ff 225.00 scf sf -5914 5566 m -gs 1 -1 sc (rbearing) col0 sh gr -/Times-Roman ff 225.00 scf sf -5914 5855 m -gs 1 -1 sc (width) col0 sh gr -/Times-Roman ff 225.00 scf sf -7215 3976 m -gs 1 -1 sc (baseline) col0 sh gr -/Times-Roman ff 225.00 scf sf -4179 2239 m -gs 1 -1 sc (origin \(x, y\)) col0 sh gr -$F2psEnd -rs -end Binary files /tmp/LH_Mj8Vf5X/libgtkada-2.24.4/docs/gtkada_rm/font.jpg and /tmp/9xYs3jcqkX/libgtkada-2.24.4dfsg/docs/gtkada_rm/font.jpg differ Binary files /tmp/LH_Mj8Vf5X/libgtkada-2.24.4/docs/gtkada_rm/font.pdf and /tmp/9xYs3jcqkX/libgtkada-2.24.4dfsg/docs/gtkada_rm/font.pdf differ Binary files /tmp/LH_Mj8Vf5X/libgtkada-2.24.4/docs/gtkada_rm/gallery.png and /tmp/9xYs3jcqkX/libgtkada-2.24.4dfsg/docs/gtkada_rm/gallery.png differ diff -Nru libgtkada-2.24.4/docs/gtkada_rm/generate_doc.pl libgtkada-2.24.4dfsg/docs/gtkada_rm/generate_doc.pl --- libgtkada-2.24.4/docs/gtkada_rm/generate_doc.pl 2014-05-11 14:53:37.000000000 +0000 +++ libgtkada-2.24.4dfsg/docs/gtkada_rm/generate_doc.pl 1970-01-01 00:00:00.000000000 +0000 @@ -1,1130 +0,0 @@ -#! /usr/bin/env perl - -## This script generates the GtkAda documentation from the sources -## All the .ads in the src/ subdirectory are searched for relevant -## tags, and the documentation is automatically generated. -## The tags are looked for anywhere in the file. -## -## SETUP NOTES: -## This script should be run from the $prefix/doc/gtkada_ug -## directory in the GtkAda package. -## -## The following tags are known: -## -## ... -## This is the description for a package. It can span multiple -## lines, and contain any kind of text -## It no such tag is found, no documentation is generated for -## the package. -## Multiple such tags are concatenated. -## Lists are automatically replaced by @itemize items (a list -## is a set of paragraphs that start with '-'; the list ends -## at the first empty-line not followed by a paragraph that -## starts with '-'). -## -## ... -## Version number of gtk+ that was used to generate this file. -## ex/ 1.2.6 -## The package should be fully synchronized with the c header -## when this tag is used. -## If not such tag is found, the package is assumed to be more -## or less synchronized with gtk+1.2. Some functions might not -## have an Ada binding. -## -## ... -## Specifies the name of a file that shows a screenshot of the -## widget. The name should not include any extension (it will -## be ".eps" for the latex version of the documentation and -## ".jpg" for the html version. -## This tag won't be shown in the info file. -## The pixmap should be in the directory where you are compiling -## the documentation. -## -## ... -## Gives an example of use of the widget. The keywords and comments -## are automatically highlighted. Unless the example is short, we -## recommended using to include its code from an external -## compilable source file. -## -## ... -## Includes an external source file. The file is included inline, thus -## any enclosing tag is taken into account, as in -## file -## Note that comment starts are added at the beginning of each line. -## You can use relative pathnames (relative to the directory of the file -## containing this file). -## Both tags (opening and closing) should be on the same line. -## -## -## - "signal_name" -## signal description -## - "signal_name" .... -## -## This tag describes all the new signals defined by a widget. -## -## ... -## Indicates a section which should not be included in the documentation. -## All the subprograms inside the section will not be documented. The lines -## on which these tags are are completly deleted. -## -## The functions and procedures are automatically associated with -## the comments that follow them, and that stops at the first blank -## line. -## No documentation is generated for the following special subprograms: -## Initialize, Generate -## - -$src_dir = "../../src/"; -# name of the source directory for GtkAda - -$output_file_name = "generated.texi"; -$menu_file_name = "generated_menu.texi"; - -$with_html = 0; -## Whether we should output HTML support code - -$makeinfo_for_html = 0; -## Set to 1 if we use makeinfo to generate the HTML, to 0 if we use texi2html - -if ($ARGV[0] eq "-usemakeinfo") { - $makeinfo_for_html = 1; - $with_html = 1; - shift @ARGV; -} elsif ($ARG[0] eq "-usetexi2html") { - $makeinfo_for_html = 0; - $with_html = 1; - shift @ARGV; -} - -@source_files = @ARGV; - -local (@Ada_keywords) = ('abort', 'abs', 'accept', 'access', 'all', 'and', - 'array', 'at', 'begin', 'body', 'case', 'constant', - 'declare', 'delay', 'delta', 'digits', 'do', 'else', - 'elsif', 'end', 'entry', 'exception', 'exit', 'for', - 'function', 'generic', 'goto', 'if', 'in', 'is', - 'limited', 'loop', 'mod', 'new', 'not', 'null', 'of', - 'or', 'others', 'out', 'package', 'pragma', 'private', - 'procedure', 'raise', 'range', 'record', 'rem', - 'renames', 'return', 'reverse', 'select', 'separate', - 'subtype', 'task', 'terminate', 'then', 'type', - 'until', 'use', 'when', 'while', 'with', 'xor'); -local (@Ada95_keywords) = ('abstract', 'aliased', 'protected', 'requeue', - 'tagged'); -local ($keywords_reg) = join ("|", @Ada95_keywords, @Ada_keywords); - -%package_from_type = ("Gtk_Plot" => "Gtk.Extra.Plot", - "Gtk_Check_Item" => "Gtk.Extra.Check_Item", - "Gtk_Plot_Layout" => "Gtk.Extra.Plot_Layout", - "Gtk_Plot_Canvas" => "Gtk.Extra.Plot_Canvas", - "Gtk_Plot_3D" => "Gtk.Extra.Plot_3D", - "Gtk_Plot_Bar" => "Gtk.Extra.Plot_Bar", - "Gtk_Plot_Box" => "Gtk.Extra.Plot_Box", - "Gtk_Plot_Data" => "Gtk.Extra.Plot_Data", - "Gtk_Plot_Polar" => "Gtk.Extra.Plot_Polar", - "Gtk_Plot_Surface" => "Gtk.Extra.Plot_Surface", - "Gtk_Combo_Box" => "Gtk.Extra.Combo_Box", - "Gtk_Sheet" => "Gtk.Extra.Sheet", - "Gtk_Color_Combo" => "Gtk.Extra.Color_Combo", - "Gtk_Border_Combo" => "Gtk.Extra.Border_Combo", - "Gtk_Font_Combo" => "Gtk.Extra.Font_Combo", - "Gtk_IEntry" => "Gtk.Extra.Item_Entry", - "Gtk_Item_Entry" => "Gtk.Extra.Item_Entry", - "Gtk_Entry" => "Gtk.GEntry", - "Gtk_Plot_Canvas_Child" => "Gtk.Extra.Plot_Canvas", - "Gtk_Range" => "Gtk.Grange", - "Gtk_Hbox" => "Gtk.Box", - "Gtk_Vbox" => "Gtk.Box", - "Gtk_Hpaned" => "Gtk.Paned", - "Gtk_Vpaned" => "Gtk.Paned", - "Gtk_Hruler" => "Gtk.Ruler", - "Gtk_Vruler" => "Gtk.Ruler", - "Gtk_Hscale" => "Gtk.Scale", - "Gtk_Vscale" => "Gtk.Scale", - "Gtk_Hscrollbar" => "Gtk.Scrollbar", - "Gtk_Vscrollbar" => "Gtk.Scrollbar", - "Gtk_Hseparator" => "Gtk.Separator", - "Gtk_Vseparator" => "Gtk.Separator"); - -## Contains the parent of each widget -%parent = (); - -## The output file (stored here so that we can sort the output) -## It is indexed on the package name -%output = (); - -## List of packages defined in GtkAda -my (%packages) = (); - -## Name of the package that is currently being proposed. -$package_name=""; - -## Colors used -$chapter_bg="#FFF0D0"; -$chapter_fg="#000000"; -$section_bg="#FFD0D0"; -$section_fg="#000000"; -$subsection_bg="#FFF0D0"; -$subprog_bg="#D6E8FF"; -$hierarchy_bg="#FFF0D0"; -$tab1_width="7%"; -$tab2_width="30%"; -$tab3_width="63%"; -$tab23_width="93%"; # $tab2_width + $tab3_witdh - -# Prepares the menu - -foreach $source_file (@source_files) { - - open (FILE, $source_file); - @content = ; - close (FILE); - - # Only generate documentation if we have a tag - if (grep (/\/, @content)) { - - @content = &delete_ignore(&expand_include (@content)); - print "Generating doc for $source_file\n"; - - # Get the package name - $package_name = &get_package_name (@content); - my ($cfile) = &get_c_file ($package_name); - - # Underscores are incorrectly written in the table of contents - # because of the font that is used in there. We thus use another - # font just for them... - local ($pack) = $package_name; - $packages{$package_name} = ""; - $pack =~ s/_/\@code{_}/g; - - &output ("\@page\n", - "\@node Package_$package_name\n", - "\@chapter Package $pack\n", - "\@cindex $package_name\n"); - &output ("\n\@noindent\n"); - - my ($description) = &clean_comment_marks - (&get_tag_value ("description", @content), 0); - $description =~ s/^\s*//; - $description = &process_list ($description); - - # Add support for tags in the description - $description =~ s/^\s+<(small)?example>/\@\2example\n/gm; - $description =~ s/^\s+<\/(small)?example>/\@end \2example\n/gm; - - # Protect special characters - $description =~ s/([{}@])/@\1/g; - - &output ("$description\n"); - - if (&get_tag_value ("screenshot", @content)) { - if (-f &get_tag_value ("screenshot") . ".eps") { - &output ("\@iftex\n\@image{", - &get_tag_value ("screenshot", @content), - ",}\n\@end iftex\n\n"); - } - } - - my (%signals) = &find_signals ($cfile . ".h", @content); - my (@hierarchy) = &find_hierarchy (@content); - my (@subprogs) = &get_subprograms (@content); - my (%types) = &get_types (@content); - - ## Widget hierarchy - - if (@hierarchy) { - my ($hierarchy, $hierarchy_short) = ("", ""); - $hierarchy = sprintf ("\@b{%-30s (\@pxref{Package_%s})\n", - "GObject}", "Glib.Object"); - $hierarchy .= sprintf ("\@b{%-30s (\@pxref{Package_%s})\n", - "Gtk_Object}", "Gtk.Object"); - $hierarchy_short = sprintf ("%-30s (Package %s)\n", - "Gtk_Object", "Gtk.Object"); - for ($level = 1; $level < @hierarchy; $level ++) { - $hierarchy .= " " x ($level * 3) - . sprintf ("\\___ \@b{%-" . (25 - $level * 3) - . "s (\@pxref{Package_%s})\n", - $hierarchy[$level] . "}", - &package_from_type ($hierarchy[$level])); - my ($line) = " " x ($level * 3) - . sprintf ("\\___ %-" . (25 - $level * 3) - . "s (Package %s)\n", - $hierarchy[$level], - &package_from_type ($hierarchy[$level])); - if (length ($line) > 75) { - my ($length) = " " x ($level * 3); - $line =~ s/\(/\n$length \(/; - } - $hierarchy_short .= $line; - } - - §ion_output ("Widget Hierarchy"); - &html_output ("
"); - &output ("\n\@ifnottex\n"); - &output ("\@smallexample\n$hierarchy\n\@end smallexample\n"); - &output ("\@end ifnottex\n"); - - if ($with_html) { - &output ("\@ifnothtml\n\@iftex\n\@smallexample\n$hierarchy_short\n", - "\@end smallexample\n\@end iftex\n\@end ifnothtml\n"); - } else { - &output ("\@iftex\n\@smallexample\n$hierarchy_short\n", - "\@end smallexample\n\@end iftex\n"); - } - &html_output ("
"); - } else { - $parent{$package_name} = "<>"; - } - - ## List of signals - - if (keys %signals) { - §ion_output ("Signals"); - &output ("\@itemize \@bullet\n\n"); - - foreach $signal (sort keys %signals) { - &output ("\@item \"\@b{$signal}\"\n\n"); - my ($handler, $comment) = - ($signals{$signal} =~ /^([^)]+\)[^;]*;)(.*)$/s); - $handler = &highlight_keywords ($handler); - - if ($with_html) { - &html_output ("
"); - &output ("$handler"); - &html_output ("
"); - } else { - &output ("\@smallexample\n"); - &output ("$handler"); - &output ("\n\@end smallexample\n"); - } - &output ("$comment\n"); - } - &output ("\@end itemize\n\n"); - } - - ## List of types (sorted) - - if (%types) { - §ion_output ("Types"); - &html_output (""); - - foreach $type (sort keys %types) { - if ($with_html) { - &html_output (""); - } else { - &output ("\@smallexample\n\@exdent ", - $types{$type}[0], - "\n\@end smallexample\n"); - &output ("\@noindent\n", - $types{$type}[1], "\@*\n"); - } - } - &html_output ("
"); - &output ($types{$type}[0]); - &html_output ("
"); - &output ($types{$type}[1]); - &html_output ("
"); - } - - ## List of subprograms (sorted) - - if (@subprogs) { - my ($has_itemize) = 0; - §ion_output ("Subprograms"); - &html_output (""); - foreach $subprog (@subprogs) { - my ($name, $return, $comment, @params) - = ($$subprog[1], $$subprog[0], $$subprog[2], - @{$$subprog[3]}); - - if ($return eq "--") { - if ($has_itemize == 1) { - $has_itemize = 0; - } - &html_output (""); - $comment =~ s/^\s*//; - if ($comment ne "") { - # Protect special characters - $comment = &process_list - (&clean_comment_marks ($comment, 1)); - $comment =~ s/([{}@])/@\1/g; - &html_output (""); - } - next; - } - - if ($has_itemize == 0) { - $has_itemize = 1; - } - - my ($profile) = ""; - if ($return eq "" && scalar (@params) == 0) { - $name .= ";"; - } - $profile = sprintf ("%-35s", - ($return eq "") ? "\@b{procedure} $name" - : "\@b{function} $name"); - if (scalar (@params) > 0) { - $profile .= "\n ("; - for ($i=0; $i<=$#params; $i++) { - $profile .= " " x 3 if ($i != 0); - my ($type) = $params[$i][2]; - my ($default) = ""; - if ($params[$i][2] =~ /:=/ - && length ($params[$i][2]) > 30) { - $type =~ s/\s*:=.*//; - $default = $params[$i][2]; - $default =~ s/.*:=/:=/; - } - - $profile .= sprintf ("%-18s : \@b{%-6s} %s", - $params[$i][0], - $params[$i][1], - $type); - if ($default ne '') { - $profile .= "\n" . (' ' x 23) . $default; - } - - $profile .= (($i == $#params) ? ")" : ";\n"); - } - } - if ($return eq "") { - $profile .= ";" if (scalar (@params) != 0); - } else { - $profile .= "\n" . " " x 3 if (scalar (@params) > 0); - $profile .= "\@b{return} $return;"; - } - $comment =~ s/^\s*//; - $comment = &process_list (&clean_comment_marks ($comment, 1)); - - if ($with_html) { - &output ("\@ifnothtml\n\@smallexample\n$profile\n", - "\@end smallexample\n\@end ifnothtml\n"); - } else { - &output ("\@smallexample\n$profile\n", - "\@end smallexample\n"); - } - &html_output ("", - ""); - } - &html_output ("
"); - - if ($name !~ /^\s*$/) { - &output ("\@subsection $name\n\n"); - } - &html_output ("

"); - &output ($comment, "\n\n"); - &html_output ("
$profile
"); - &output ("$comment\n"); - &html_output ("
"); - } - - ## Examples if any - - if (&get_tag_value ("example", @content)) { - §ion_output ("Example"); - &output ("\n\@example\n", - &highlight_keywords - (&clean_comment_marks (&get_tag_value - ("example", @content), - 0)), - "\n\@end example\n"); - } - } else { # No tag -# print "no description tag for $source_file\n"; - } -} - -## Creates empty nodes for the packages that are referenced but not -## already created. - -# $parent{"Gtk_Object"} = ""; -$parent{"GObject"} = ""; -foreach $package_name (keys %parent) { - $package_name = &package_from_type ($package_name); - unless (defined $output{$package_name}) { - - &output ("\@node Package_$package_name\n", - "\@chapter Package $package_name\n\n", - "\@cindex $package_name\n"); - } -} - - -## Outputs the files -## Requires the global variables $output and $package_name - -foreach (keys %parent) { - $packages{&package_from_type ($_)} = ""; -} - -open (MENU, ">$menu_file_name"); -print MENU "\@menu\n"; -print MENU "* Package_", join ("::\n* Package_", sort keys %packages), "::\n"; -print MENU "* Index::\n"; -print MENU "\@end menu\n"; -close MENU; - -open (OUT, ">$output_file_name"); -foreach $package_name (sort - { if ($a =~ /Glib/ && $b =~ /Glib/) { - return $a cmp $b; - } elsif ($a =~ /Glib/) { - return -1; - } elsif ($b =~ /Glib/) { - return 1; - } else { - if ($a =~ /GtkAda/i && $b =~ /GtkAda/i) { - return $a cmp $b; - } elsif ($a =~ /GtkAda/i) { - return -1; - } elsif ($b =~ /GtkAda/i) { - return 1; - } else { - return $a cmp $b; - } - }} keys %output) { - print OUT join ("", @{$output{$package_name}}), "\n"; -} -close OUT; - - -# Outputs some lines -sub output () { - push (@{$output{$package_name}}, - @_); -} - -# Outputs the block, only for html - -sub html_output () { - if ($with_html) { - if ($makeinfo_for_html) { - &output ("\@ifhtml\n\@html\n", @_, "\n\@end html\n\@end ifhtml\n"); - } else { - &output ("\@ifhtml\n", @_, "\n\@end ifhtml\n"); - } - } -} - -# Outputs the block, only for tex - -sub tex_output () { - &output ("\n\@tex\n", @_, "\n\@end tex\n"); -} - -# Print some output with special colors -# $1 = name of the current package -# $2 = name of the current section (doesn't include the name of the package) - -sub section_output () { - my ($section) = shift; - &html_output ("
$section
"); - if ($with_html) { - &output ("\@ifnothtml\n\@section $section\n\@end ifnothtml\n"); - } else { - &output ("\@section $section\n"); - } -} - - -# Returns the name of the widget defined in the package whose contents is -# @1. -# The htable %parent is initialized, as a side effect -sub find_type_in_package () { - my ($type) = shift; ## if "", returns the main type. Otherwise, returns - ## that type specifically - my (@content) = @_; - my ($line, $origin, $p); - - # If $type is unspecified, return the main type - if ($type eq "") { - $type = "[^ \t]+"; - } - - # Ignore everything except for the private part (but see exception below) - while (@content && $line !~ /^private/) { - $line = shift @content; - - # Special Case: subtype declarations in the public part. - if ($line =~ /subtype/) { - # get the rest of the line - while (@content && $line !~ /;/) { - $line .= shift @content; - } - - # Extract hierarchy information from a "recognized" declaration - if ($line =~ /subtype ($type)_Record\s+is\s+([^;\s]+)/) { - $origin = $1; - - unless ($parent{$origin}) { - $p = $2; - $p =~ s/_Record//; - $p =~ s/.*\.([^.]+)/$1/; - } - } - } - } - - # Find the name of the type in the package @content - - while (@content && ! defined $p) { - # read the current line, and make sure we get the end of the current - # declaration - $line = shift @content; - while (@content && $line !~ /;/) { - $line .= shift @content; - } - - if ($line =~ /type ($type)_Record\s+is\s+new\s/) { - $origin = $1; - - # Do not keep the package name - $origin =~ s/.*\.([^.]+)/$1/; - - unless ($parent{$origin}) { - if ($line =~ /is\s+new\s+([^\s]+)/) { - if ($1 eq "") { - $line = shift @content; - $line =~ /\s+([^\s]+)/; - } - $p = $1; - } else { - $line = shift @content; - $line =~ /((is)?\s+new)? ([^\s]+)/; - $p = $3; - } - $p =~ s/_Record//; - $p =~ s/.*\.([^.]+)/$1/; - } - } - } - if ($p ne "") { - $parent{$origin} = $p; - } - return $origin; -} - - -# Expands a given ... and replace it with the content of -# the file -# Parameter: array of strings to check and possibly expand -# Returns the new array where tags have been expanded. - -sub expand_include () { - my (@content) = @_; - my (@strings); - my ($line); - - foreach $line (@content) { - if ($line =~ /(.*)\(.*)\<\/include\>(.*)/) { - push (@strings, $1); - my ($file, $rest) = ($2, $3); - - if (open (INCLUDE_FILE, "$src_dir/$file")) { - push (@strings, "\n-- " . join ("-- ", ) . "\n" . $rest); - close (INCLUDE_FILE); - } - - } else { - push (@strings, $line); - } - } - - return @strings; -} - - -# Return the list of types defined in the Ada file $1. -# This function does not return the type defined in the private part of the -# package. -# It returns a hash-table: -# return ::= (type_name => (string_to_display, comment), ...) - -sub get_types () { - my (@content) = @_; - my (%types) = (); - my ($current) = ""; - my ($description); - - while (($line = shift @content)) { - - # Skip the private part - if ($line =~ /^\s*private/) { - return %types; - } - - if ($line =~ /^\s*((sub)?type)\s*(\S+)\s+(.)/) { - $current = $3; -# print "======$current====\n"; - $description = "$1 $current is "; - - # Be sure that we have on the same line the "is" and the following - # character or word (open parenthesis or new). - if ($line =~ /\sis\s*$/ || $line !~ /\sis/) { - $line .= shift @content; - } - - # Likewise for an access type, which could be an access to - # subprogram - if ($line =~ /access\s*$/) { - $line .= shift @content; - } - - $line =~ s/^\s+/ /g; - - # For an access to function type - if ($line =~ s/access\s+(function|procedure)/access $1/) { - my ($is_function) = ($1 eq "function"); - $line =~ s/\(/\n \(/; - $line =~ /(access (.|\n)*)/; - $description .= $1; - my ($length) = " "; - - # If there is a non-empty argument list, include it. - if ($line =~ /\(/) { - while ($line !~ /\)/) { - $line = shift @content; - $line =~ s/^\s+/ /; - $description .= $length . $line; - } - } - - # Add the 'return' line - if ($is_function && $line !~ /\Wreturn\W/) { - $line = shift @content; - $line =~ s/^\s+/ /; - $description .= " $line"; - } - } - - # Else for a record type - elsif ($line =~ /\Wrecord\W/) { - $description .= "record\n"; - while ($line !~ /record;/) { - $line = shift @content; - chop $line; - $line =~ s/^\s+//; - if ($line =~ s/^\s*--\s*//) { - $description .= " -- $line\n"; - } else { - $description .= " $line\n"; - } - } - } - - # Else if we have an enumeration type, get all the possible values - # and the associated comments - elsif ($line =~ s/^.*\sis\s+\(\s*(.*)//) { - # There can be multiple values on the same line, separated - # by commas. - - my ($length) = ' ' x (length ($description) - 0); - $description .= "\n ($1\n"; - $length = " "; - while ($description !~ /\)/) { - $line = shift @content; - - # If we have a comment - if ($line =~ /^\s*--\s*(.*)$/) { - $description .= $length . " -- $1\n"; - } - - # Else we have one or more possible values - else { - $line =~ s/\s+/ /g; - $description .= "$length$line\n"; - } - } - } - - # Else for a simple type, skip to the end of its definition - else { - $line =~ /\sis\s+(.*)$/; - $description .= $1; - while ($line !~ /;/) { - $line = shift @content; - $line =~ s/\s+/ /g; - $description .= $line; - } - } - -# print $description; - - $line = shift @content; - - # If we have a comment associated with the type, read it. - my ($comment) = ""; - if ($line =~ /^\s*--/) { - while ($line !~ /^\s*$/) { - $line =~ s/^\s*--\s*/ /; - $comment .= $line; - $line = shift @content; - } - } else { - unshift (@content, $line); - } -# print "\n===>\n$comment\n==============\n"; -# print $description, "\n"; -# print &highlight_keywords ($description), "\n"; - - # Do not keep the widgets themselves - if ($current !~ /_Record/ - && $description !~ /access all .*_Record/) { - $types{$current} = [&highlight_keywords ($description), - $comment]; - } - } - } - return %types; -} - - -# Returns the list of signals defined in the C file $1. -# The Ada file is defined in $2 -# If the Ada file has a "" tag, then this is used instead -# ( signal_name => profile, signal_name => profile) -sub find_signals () { - my ($cfile) = shift; - my (@content) = @_; - my (%signals); - - my ($ada_signals) = &get_tag_value ("signals", @content); - # If the tag is found in the Ada file, use it - if ($ada_signals ne "") { - my ($signal, $descr); - my (@lines) = split (/\n/, $ada_signals); - my ($in_handler) = 0; - foreach $line (@lines) { - $line =~ s/^\s*--\s*//; - if ($line =~ /- \"([^\"]+)\"/) { - $signals{$signal} = $descr if ($signal ne ""); - $signal = $1; - $descr = ""; - $in_handler = 1; - } elsif ($line =~ /^\s*$/) { - if ($in_handler == 1) { - $in_handler = 0; - $descr .= ""; - } - $descr .= "\n"; - } else { - $descr .= $line . "\n"; - } - } - $signals{$signal} = $descr if ($signal ne ""); - } - return %signals; -} - -# Returns the type hierarchy of the main type defined in the file whose -# content is @1 - -sub find_hierarchy () { - my (@content) = @_; - my ($origin) = &find_type_in_package ("", @content); - if ($origin =~ /^Gtk/) { - return &find_hierarchy_array ($origin); - } else { - return (); - } -} - -sub find_hierarchy_array () { - my ($type) = shift; - - if ($type =~ /Gtk_Object/ || $type =~ /GObject/i) { - return ($type); - }; - - unless ($parent{$type}) { - my ($filename) = &file_from_package (&package_from_type($type)); - if (-f $src_dir . "/gtk-" . $filename) { - open (FILE, $src_dir . "/gtk-" . $filename); - } elsif (-f $src_dir . "/gtk-extra-" . $filename) { - open (FILE, $src_dir . "/gtk-extra-" . $filename); - } else { - die "file not found for type $type ($filename)\n"; - } - my ($origin) = &find_type_in_package ($type, ); - close (FILE); - return (&find_hierarchy_array ($parent{$type}), $type); - } - return (&find_hierarchy_array ($parent{$type}), $type); -} - -# Returns the name of the file that contains a given package -sub file_from_package () { - my ($package) = shift; - $package =~ s/G[dt]k\.//; - $package =~ s/\./-/g; - $package =~ tr/A-Z/a-z/; - return $package . ".ads"; -} - -# Returns the name of the Ada package that contains the type $1 - -sub package_from_type () { - my ($string) = shift; - if (defined $package_from_type{$string}) { - return $package_from_type{$string}; - } else { - $string =~ s/(G[td]k)_/$1./; - return $string; - } -} - -# Prepare the string $1 for output (highlight keywords and comments) -sub highlight_keywords () { - my ($string) = shift; - - # Protect texi special characters - $string =~ s/([{}])/\@$1/g; - - # Highlight keywords and commands - $string =~ s/--([^\n]*)/-\@:-\@i{$1}/g; - $string =~ s/\b($keywords_reg)\b/\@b{$1}/g; - - # Do not highlight keywords in comments ! - while (($string =~ s/\@i(.*)\@b{([^\}]+)}(.*)/\@i$1$2$3/g)){}; - - return $string; -} - -# Returns the name of the C file corresponding to the Ada package $1 -sub get_c_file () { - my ($file) = shift; - $file =~ tr/A-Z/a-z/; - $file =~ s/[_.]//g; - return $file; -} - -# Delete all the sections that should be ignored in the documentation -sub delete_ignore () { - my (@content) = @_; - my (@output) = (); - my ($ignore)=0; - - foreach $line (@content) { - if ($line =~ /\/) { - $ignore=1; - } - push (@output, $line) if (! $ignore); - if ($line =~ /\<\/doc_ignore\>/) { - $ignore=0; - } - } - return @output; -} - -# Returns the package name from the file whose content is $1 -sub get_package_name () { - my (@content) = @_; - - ($_) = grep (/^package /, @content); - $_ =~ /^package\s*([^\s]+)/; - return $1; -} - -# Eliminates the comment marks in the string (i.e suppress the -- at -# the beginning of each line in $1) -# When there is an empty line, replaces it with @* -# And the first line is ended with @* if $2 is 1 -sub clean_comment_marks() { - my ($string) = shift; - my ($first_line) = shift; - - # get rid of comments - $string =~ s/^[ \t]*-- ?//; - $string =~ s/\n[ \t]*-- ?/\n/g; - - # If needed, separate the first line from the rest (if there is more - # than one line) - if ($first_line) { - if ($string =~ /\n.*\n/) { - $string =~ s/\n/\@*\n/; - } - } - return $string; -} - -# Processes the lists, and replaces them with some @itemize instructions. -# A list is recognized when at least one line starts with '-' as the first -# non-white character, and ends after the next empty line. - -sub process_list() { - my ($value) = shift; - my (@lines) = split (/\n/, $value); - my ($output); - my ($in_list) = 0; - my ($terminate_list) = 0; - - foreach $line (@lines) { - if ($line =~ /^\s*-\s/) { - $output .= "\@itemize \@bullet\n" if (! $in_list); - $in_list = 1; - $terminate_list = 0; - $line =~ s/^\s*-/\@item /; - } elsif ($in_list && $line =~ /^\s*$/) { - $terminate_list = 1; - } elsif ($terminate_list) { - $output .= "\@end itemize\n"; - $terminate_list = 0; - $in_list = 0; - } - - $output .= $line . "\n"; - } - $output .= "\@end itemize\n" if ($in_list); - - return $output; -} - -# Returns the value of the tag $1, in the file whose content is $2 -# All the matching tags found in the documentation are concatenated, -# with a blank line added between them. -sub get_tag_value () { - my ($tag) = shift; - my (@content) = @_; - my ($value) = ""; - my ($line, $add); - - while (@content) { - $line = shift @content; - if ($line =~ /\<$tag\>/) { - if ($value ne "") { - $value .= "\n"; - } - - $line =~ /\<$tag\>(.*)/; - $value .= $1; - - while ($line !~ /<\/$tag\>/) { - $line = shift @content; - $value .= $line; - } - - $value =~ s/\<\/$tag\>.*//; - } - } - return $value; -} - -# Returns a list of all the subprograms defined in the file whose -# content is $1. -# The format of the list is the following: -# ( (subprogram_return_type, # "" for a procedure "--" for a separator -# subprogram_name, -# comments -# (param1_name, -# param1_access, # "in", "in out", "access", "" -# param1_type) -# (param2_name, -# param2_access, -# param2_type), -# ... -# ) -# (subprogram_return_type, .... -# -sub get_subprograms () { - my (@content) = @_; - my ($line); - my (@result) = (); - my ($saw_package_start) = 0; - my ($last_was_section) = 0; - - while (@content) { - $line = shift @content; - - if ($line =~ /^package /) { - $saw_package_start = 1; - next; - } - - if ($saw_package_start - && $line =~ /^\s*------*/) - { - # Delete the previous section if it was empty - if ($last_was_section != 0) { - pop (@result); - } - - $line = shift @content; - $line =~ /-- (.*) --/; - my ($comments) = ""; - my ($section) = $1; - $line = shift @content; - - while ($content [0] =~ /^\s*--/) { - $comments .= shift @content; - } - - push (@result, ['--', $section, "$comments", ()]); - $last_was_section = 1; - - # Else if we have a subprogram or operator definition - } elsif ($line =~ /^\s*(procedure|function)\s+([\w\"+\-*\/&]+)\s*(.*)/) { - my ($type) = $1; - my ($name) = $2; - my ($params) = $3; - - # If the line was over multiple lines - if ($params !~ /;/) { - $params .= shift @content; - } - - # Get the whole parameter list - if ($params =~ /\(/) { - while ($params !~ /\)/) { - $params .= shift @content; - } - } - - $params =~ s/\s+/ /g; - - my ($dummy, $profile, $return) = ($params =~ /^\s*(\(\s*([^\)]+)\))?(.*)/); - - # If we expect a return type, make sure we have it - if ($type eq "function") { - while ($return !~ /;/) { - $return .= shift @content; - } - } - - my ($ret_type) = ($return =~ /return\s+([^\s;]+)/); - - # Memorizes the comments (if we have any) - my ($comments) = ""; - $line = shift @content; - if ($line !~ /^\s*--/) { - unshift @content, $line; - } - - while ($line =~ /^\s*--/) { - $comments .= $line; - $line = shift @content; - } - - # Parses the profile - my (@param_list) = (); - - while ($profile !~ /^ *$/) { - my ($all, $tname, $taccess, $ttype) - = ($profile =~ /(\s*([\w\s,]+)\s*:\s*(in out|in|out|access)?\s*([^;]+);?)/); - push (@param_list, [$tname, $taccess, $ttype]); - $all =~ s/([()])/\\\1/g; - $profile =~ s/$all//; - } - # Ignore the special subprogram "Generate" and "Initialize" - if ($name ne "Generate" && $name !~ /^Initialize/) { - push (@result, [ $ret_type, $name, $comments, \@param_list]); - $last_was_section = 0; - } - } - - } - if ($last_was_section == 1) { - pop @result; - } - return @result; -} diff -Nru libgtkada-2.24.4/docs/gtkada_rm/generate_docs.gpr libgtkada-2.24.4dfsg/docs/gtkada_rm/generate_docs.gpr --- libgtkada-2.24.4/docs/gtkada_rm/generate_docs.gpr 2014-05-11 14:53:37.000000000 +0000 +++ libgtkada-2.24.4dfsg/docs/gtkada_rm/generate_docs.gpr 1970-01-01 00:00:00.000000000 +0000 @@ -1,22 +0,0 @@ -project Generate_Docs is - - for Source_Dirs use ("../../src/generated", "../../src/"); - for Object_Dir use "doc_obj"; - - Processors := external ("PROCESSORS", "1"); - -- Number of parallel compilations that should be performed - - package Compiler is - for Default_Switches ("Ada") use ("-gnatc", "-gnatQ"); - end Compiler; - - package Builder is - for Default_Switches ("Ada") use ("-j" & Processors, "-m"); - end Builder; - - package IDE is - for Documentation_Dir use "gtkada_rm"; - end IDE; - -end Generate_Docs; - diff -Nru libgtkada-2.24.4/docs/gtkada_rm/generate_html_doc.pl libgtkada-2.24.4dfsg/docs/gtkada_rm/generate_html_doc.pl --- libgtkada-2.24.4/docs/gtkada_rm/generate_html_doc.pl 2014-05-11 14:53:37.000000000 +0000 +++ libgtkada-2.24.4dfsg/docs/gtkada_rm/generate_html_doc.pl 1970-01-01 00:00:00.000000000 +0000 @@ -1,1163 +0,0 @@ -#! /usr/bin/env perl - -use warnings; -use strict; - -## This script generates the GtkAda documentation from the sources -## All the .ads in the src/ subdirectory are searched for relevant -## tags, and the documentation is automatically generated. -## The tags are looked for anywhere in the file. -## -## SETUP NOTES: -## This script should be run from the $prefix/doc/gtkada_ug -## directory in the GtkAda package. -## -## The following tags are known: -## -## ... -## This is the description for a package. It can span multiple -## lines, and contain any kind of text -## It no such tag is found, no documentation is generated for -## the package. -## Multiple such tags are concatenated. -## Lists are automatically replaced by @itemize items (a list -## is a set of paragraphs that start with '-'; the list ends -## at the first empty-line not followed by a paragraph that -## starts with '-'). -## -## ... -## Version number of gtk+ that was used to generate this file. -## ex/ 1.2.6 -## The package should be fully synchronized with the c header -## when this tag is used. -## If not such tag is found, the package is assumed to be more -## or less synchronized with gtk+1.2. Some functions might not -## have an Ada binding. -## -## ... -## Specifies the name of a file that shows a screenshot of the -## widget. The name should not include any extension (it will -## be ".eps" for the latex version of the documentation and -## ".jpg" for the html version. -## This tag won't be shown in the info file. -## The pixmap should be in the directory where you are compiling -## the documentation. -## -## ... -## Gives an example of use of the widget. The keywords and comments -## are automatically highlighted. Unless the example is short, we -## recommended using to include its code from an external -## compilable source file. -## -## ... -## Includes an external source file. The file is included inline, thus -## any enclosing tag is taken into account, as in -## file -## Note that comment starts are added at the beginning of each line. -## You can use relative pathnames (relative to the directory of the file -## containing this include). -## This is only supported within -## -## -## - "signal_name" -## signal description -## - "signal_name" .... -## -## This tag describes all the new signals defined by a widget. -## -## -## -- Name: name -## -- Type: type -## -- Descr: descr -## -## Describes the properties of the widget -## -## -## Same syntax as , documents properties for children -## -## -## Same syntax as , documents style properties -## -## file.adb -## Specifies the name of the source file in testgtk that contains example -## for the widget -## -## ... -## Indicates the group in which the package should be listed in the -## general index. -## -## ... -## The name of a package that the user should also visit for more information -## on this widget. You can have several such links if there are more than one -## package. -## -## ... -## Indicates a section which should not be included in the documentation. -## All the subprograms inside the section will not be documented. The lines -## on which these tags are are completly deleted. -## -## The functions and procedures are automatically associated with -## the comments that follow them, and that stops at the first blank -## line. -## No documentation is generated for the following special subprograms: -## Generate -## - -# The list of files to parse -our @source_files = @ARGV; - -# The special keywords to highlight in profiles and examples -our @Ada_keywords = ('abort', 'abs', 'accept', 'access', 'all', 'and', - 'array', 'at', 'begin', 'body', 'case', 'constant', - 'declare', 'delay', 'delta', 'digits', 'do', 'else', - 'elsif', 'end', 'entry', 'exception', 'exit', 'for', - 'function', 'generic', 'goto', 'if', 'in', 'is', - 'limited', 'loop', 'mod', 'new', 'not', 'null', 'of', - 'or', 'others', 'out', 'package', 'pragma', 'private', - 'procedure', 'raise', 'range', 'record', 'rem', - 'renames', 'return', 'reverse', 'select', 'separate', - 'subtype', 'task', 'terminate', 'then', 'type', - 'until', 'use', 'when', 'while', 'with', 'xor'); -our @Ada95_keywords = ('abstract', 'aliased', 'protected', 'requeue', - 'tagged'); -our $keywords = join ("|", @Ada95_keywords, @Ada_keywords); - -## List of special sections in the Ada files -our @xml_sections = ("description", "example", "screenshot", "c_version", - "see", "signals", "properties", "child_properties", - "style_properties", "testgtk", "group"); - -## Will contain, for each widget, the name of its parent type. The parent -## doesn't contain a package name. -our %parents; - -## Will contain the name of packages for each widget. Indexed on widget name -## The second variable contains the name of html file for each widget. -our %packages; -our %files_from_widget; -our %files_from_package; - -## List of all known entities. Key is the entity name, prefixed by package, -## contents is -## [$file, $a_name] ("a_name" is the name of the HTML anchor -our (%entities); - -## Will contain info about each of the source files (subprograms,...). Indexed -## on file name. -our %files; - -## The groups for the index. Key is the group name, contents is an array of -## package -our %groups; - -## The list of types that implements an interface. Index is the interface name (short), -## value is the list of types that implement it -our %implemented; - -## The list of screenshots. Index is package name, value is image name -our %screenshots; - -##################### -## Name of the HTML output file (suitable for links) for an Ada file -##################### - -sub html_from_ada() { - my ($file) = shift; - $file =~ s/^.*\/([^\/]+).ads/$1.html/; - return $file; -} - -##################### -## Parse an Ada file, and extra each of the relevant special sections -##################### - -our $subprogram_re = - '\n[ \t]*(?:(?:procedure|function)\s+(\w+|".")\s*(?:\([^)]+\))?[^;]*?;)'; -our $empty_comment_re = '(?:[ \t]+--\n)'; -our $non_empty_comment_re = '(?:[ \t]+--[^\n]+\n)'; -our $non_empty_comment_block_re = '(' . $non_empty_comment_re . '*)'; -our $comment_block_re = '((?:[ \t]*--[^\n]*\n)*)'; -our $section_and_comment_re = - "\n[ \t]+--[ \t]+([^\n]+?)[ \t]+--\n[ \t]+--+\n" . $non_empty_comment_block_re; -our $subprogram_and_comment_re = - "((?:$subprogram_re)+)\n" . $comment_block_re; -our $widget_re = - '\n\s*type\s+(\w+)\s+is\s+(?:abstract\s+)?(?:tagged\s+private|new\s+([\w\.]+)\s+with)'; -our $type_re = - '\s*(type\s+(\w+)\sis\s+((?:access\s*(?:function|procedure)\s*\([^)]+\))?[^;]*);)\n' . $comment_block_re; -our $interface_re = - 'is\s+new\s+(?:Glib\.Types\.)?Implements\s*\(([\w\.]+),\s*([\w\.]+)'; - -sub extract_sections() { - my ($file) = shift; - my ($html_file); - my ($tags) = join ("|", @xml_sections); - my (%tags, @subprograms, $package, @widgets); - my ($section, $section_pushed, @sections, %types, @interfaces); - my ($count) = 1; - - open (FILE, $file) || die "File not found: $file"; - my ($contents) = join ("", ); - close (FILE); - - # Find package name - ($package) = ($contents =~ /^package ([\w\.]+) is/m); - return if (!defined $package); - - $html_file = &html_from_ada($file); - - # Remove sections that must be ignored - $contents =~ s/.*?<\/doc_ignore>/\n/gs; - - # Find all special tags - while ($contents =~ /<($tags)>(.*?)<\/\1>/osg) { - my ($tag, $value) = ($1, $2); - if (defined $tags{$tag}) { - $tags{$tag} .= "\n$value"; - } else { - $tags{$tag} = $value; - } - } - - # No ? => No automatic doc should be generated - if (!defined $tags{'description'}) { - return; - } - - $files_from_package{$package} = $html_file; - $entities{$package} = [$html_file, ""]; - - # Store for the index - if (defined $tags{'group'}) { - push (@{$groups{$tags{'group'}}}, $package); - } else { - push (@{$groups{"Miscellaneous"}}, $package); - } - - # Store the screenshot - if (defined $tags{'screenshot'}) { - my ($screenshot) = $tags{'screenshot'}; - $screenshot .= ".jpg" if (-f "$screenshot.jpg"); - $screenshot .= ".png" if (-f "$screenshot.png"); - $screenshots{$package} = $screenshot; - $tags{'screenshot'} = $screenshot; - } - - # Remove private part, after finding special tags. Ignore private part - # for local packages - $contents =~ s/\nprivate\s.*//s; - - # Remove these special tags so that they get ignored when looking for - # subprograms (think of examples and/or signal descriptions). In fact, this - # might not be needed since these other subprograms will be inside comments - # and will therefore not match $subprogram_re. - #$contents =~ s/<($tags)>.*?<\/\1>//osg; - - # Find widget names - while ($contents =~ /$widget_re/og) { - my ($widget, $parent) = ($1, $2); - if (defined $parent) { - $parent =~ s/^.*?\.(\w+)$/$1/; - $parents{$widget} = $parent; - } else { - $parents{$widget} = ""; - } - push (@widgets, $widget); - $packages{$widget} = $package; - $entities{"$package.$widget"} = [$html_file, ""]; - $files_from_widget{$widget} = $html_file; - } - - # Find types - while ($contents =~ /$type_re/og) { - my ($definition, $name, $parent, $comment) = ($1, $2, $3, $4); - $entities{"$package.$name"} = [$html_file, ""]; - if ($name eq "GType_Interface") { - $parents{$name} = ""; - $files_from_widget{$name} = $html_file; - } elsif ($parent =~ /GType_Interface/) { - $parents{$name} = "GType_Interface"; - $files_from_widget{$name} = $html_file; - } - $types{$name} = [$definition, $comment]; - } - - # Find interfaces - while ($contents =~ /$interface_re/og) { - my ($interface, $object) = ($1, $2); - push (@interfaces, $interface); - $interface =~ s/^.*?\.([^.]+)$/$1/; - push (@{$implemented{$interface}}, $object); - } - - # Find subprograms - $section = "General"; - push (@sections, [$section, ""]); - $section_pushed = 0; - - while ($contents =~ /(?:$subprogram_and_comment_re)|(?:$section_and_comment_re)/og) { - if (defined $1) { - my ($description, $comment) = ($1, $3); - push (@subprograms, [$section, $description, $comment]); - $section_pushed = 0; - - ## Store the subprograms in the list of entities - while ($description =~ /($subprogram_re)/og) { - my ($sname) = ($2); - $entities {"$package.$sname"} = [$html_file, "${sname}_${count}_"]; - $count ++; - } - - } else { - pop (@sections) if ($section_pushed); ## No contents => ignore - $section = $4; - push (@sections, [$section, $5]); - $section_pushed = 1; - } - } - pop (@sections) if ($section_pushed); ## No contents => ignore - - $files{$file} = [$package, \%tags, \@subprograms, \@widgets, - \@sections, \%types, \@interfaces]; -} - -##################### -## Return a processed version of the comment -##################### - -sub process_comment() { - my ($comment) = shift; - my ($package) = shift; - my ($params) = shift; - my (%params) = (); - %params = %{$params} if (defined $params); - $comment =~ s/^\s*--( )?//gm; - - # Empty line => Force a new paragraph - $comment =~ s/\n\n/\n

\n/g; - - # Highlight URLs - $comment =~ s,(http://\S+),$1<\/a>,g; - - # Highlight internal cross-refs. This is done by detecting words starting - # with an upper case that reference a known package or widget type - $comment =~ s/([A-Z](?:\.?\w+)*)/ - my ($name) = $1; - my ($file, $anchor); - if (defined $params{$name}) { - "$name<\/tt>"; - } else { - if (defined $entities{$name}) { - ($file, $anchor) = @{$entities{$name}}; - } elsif (defined $entities{"${name}_Record"}) { - ($file, $anchor) = @{$entities{"${name}_Record"}}; - } elsif (defined $entities{"$package.${name}_Record"}) { - ($file, $anchor) = @{$entities{"$package.${name}_Record"}}; - } elsif (defined $entities{"$package.$name"}) { - ($file, $anchor) = @{$entities{"$package.$name"}}; - } - - if (defined $file) { - if ($anchor ne "") { - "$name<\/a>"; - } else { - "$name<\/a>"; - } - } else { - $name; - } - } - /xeg; - - ## Highlight cross-refs to specific file names (only starting with g - ## so that we do not add xref to files in testgtk, since no html is - ## generated for these) - $comment =~ s/\b(g[\w.-]+)(\.ad[bs])/$1$2<\/a>/g; - - return $comment; -} - -##################### -## Display the profile of a subprogram, including xref -##################### - -sub process_profile() { - my ($profile) = shift; - - # Unindent as much as possible - $profile =~ s/^[ \t]*\n//mg; - my ($spaces) = ($profile =~ /^(\s*)/); - $profile =~ s/^$spaces//gm; - - # Remove empty lines - $profile =~ s/\s*$//; - - # Create xref for types - $profile =~ s/(:\s*(?:access|in|out)?\s*)([\w.]+)((?:'Class)?(\s*:=\s*\w+)?[;)])/ - if (defined $entities{$2}) { - "$1$2<\/a>$3"; - } else { - "$1$2$3"; - } - /xeg; - $profile =~ s/(return\s+|is\s+new\s+)([\w.]+)/ - if (defined $entities{$2}) { - "$1$2<\/a>"; - } else { - "$1$2"; - } - /xeg; - - return &highlight_syntax ($profile); -} - -sub highlight_syntax() { - my ($profile) = shift; - - # Highlight comments - $profile =~ s/^([ \t]*--.*)/$1<\/i>/mg; - - # Highlight subprogram name (for subprograms section, not examples) - $profile =~ s/^(procedure|function)\s+(\w+|".")/$1 $2<\/span>/gi; - - # Highlight keywords, not in comments - $profile =~ s/\b($keywords)\b/$1<\/b>/og; - while (($profile =~ s/(.*)(\w+)<\/b>/$1$2/g)){}; - return $profile; -} - -###################### -## Parse the signals section -###################### - -our $non_empty_non_signal_comment_re = '(?:[ \t]+-- [^-][^\n]*\n)'; -our $non_empty_comment_non_signal_block_re = - '(' . $non_empty_non_signal_comment_re . '*)'; -our $signal_re = '--[ \t]+-[ \t]*"(\w+)"\n' # Signal name - . '[ \t]+--[ \t]+((?:procedure|function) Handler[\s-]+\([^)]+\)[\s-]*' - . '(?:return [\w.]+)?;)\n' - . $empty_comment_re . '?' # Optional blank line between profile and comment - . $non_empty_comment_non_signal_block_re; # comment - -sub parse_signals() { - my ($section) = shift; - my (%signals); - - while ($section =~ /$signal_re/goi) { - my ($name, $profile, $comment) = ($1, $2, $3); - $profile =~ s/^\s+--//mg if (defined $profile); - $signals{$name} = [$profile, $comment]; - } - - return %signals; -} - -###################### -## Parse the properties section -###################### - -our $properties_re = '--[ \t]+(?:- )?Name:[ \t]*(.+)\n' - . '[ \t]+--[ \t]+(?:- )?Type:[ \t]*(.+)\n' - . '(?:[ \t]+--[ \t]+(?:- )?Flags:[ \t]*(.+\n))?' - . '(?:[ \t]+--[ \t]+(?:- )?Descr:[ \t]*(.+\n(?:--[ \t]{4,})*))?' - . '(?:[ \t]+--[ \t]+(?:- )?See also:[ \t]*(.+)\n)?'; - -sub parse_properties() { - my ($section) = shift; - my (%properties); - - while ($section =~ /$properties_re/goi) { - my ($name, $type, $descr, $see) = ($1, $2, $4, $5); - $properties{$name} = [$type, $descr, $see]; - } - return %properties; -} - -###################### -## Generate a HTML header in the given FILE -###################### - -sub generate_header() { - my ($title) = shift; - local (*FILE) = shift; - - # Headers - print FILE "\n"; - print FILE '', "\n"; - print FILE "\n"; - print FILE " GtkAda: $title\n"; - print FILE " \n"; - print FILE " \n"; - print FILE "\n"; - - # Page title - print OUTPUT "

\n"; - print OUTPUT " Toc"; - print OUTPUT " Gallery\n"; - print OUTPUT " Index\n"; - print OUTPUT " Tree\n"; - print OUTPUT " \n$title\n"; - print OUTPUT "
\n\n"; -} - -###################### -## Generate HTML for a package -###################### - -sub generate_html() { - my ($filename) = shift; - my ($output) = &html_from_ada ($filename); - my ($package) = $files{$filename}[0]; - my (%tags) = %{$files{$filename}[1]}; - my (@subprograms) = @{$files{$filename}[2]}; - my (@widgets) = @{$files{$filename}[3]}; - my (@sections) = @{$files{$filename}[4]}; - my (%types) = %{$files{$filename}[5]}; - my (@interfaces) = @{$files{$filename}[6]}; - my ($w, $current); - my ($parent_package, $parent_file); - my ($count) = 1; - my ($has_types) = scalar (keys %types) > 0; - - # Start generating the output - - $w = $widgets[0]; - if (defined $w && defined $parents{$w}) { - $parent_package = $packages{$parents{$w}}; - $parent_file = $files_from_widget{$parents{$w}}; - } - - open (OUTPUT, ">gtkada_rm/$output"); - &generate_header ("$package", *OUTPUT); - - ## Left side - - print OUTPUT "
\n"; - - ## Screenshot - if (defined $tags{"screenshot"}) { - my ($screenshot) = $tags{"screenshot"}; - print OUTPUT "
\n"; - print OUTPUT "

Screenshot

\n"; - print OUTPUT " No screeshot\n"; - print OUTPUT "
\n\n"; - } - - ## Class hierarchy - if (defined $widgets[0]) { - print OUTPUT "
\n"; - print OUTPUT "

Hierarchy

\n"; - &generate_tree_for_widgets (\@widgets, 0, *OUTPUT); - print OUTPUT "
\n\n"; - } - - ## Interfaces - if ($#interfaces >= 0) { - print OUTPUT "
\n"; - print OUTPUT "

Interfaces

\n"; - print OUTPUT "
    \n"; - foreach (@interfaces) { - my ($name) = $_; - my ($short) = $name; - $short =~ s/^.*?\.([^.]+)$/$1/; - my ($f) = $files_from_widget{$short}; - if (defined $f) { - print OUTPUT "
  • $name
  • \n"; - } - } - print OUTPUT "
\n"; - print OUTPUT "
\n\n"; - } - - ## Implemented by - my ($has_interface) = 0; - foreach (keys %types) { - my ($def) = $types{$_}->[0]; - if ($def =~ /GType_Interface/ && $_ ne "GType_Interface") { - $has_interface = $_; - } - } - - if ($has_interface) { - print OUTPUT "
\n"; - print OUTPUT "

Implemented by

\n"; - print OUTPUT "
    \n"; - foreach (@{$implemented{$has_interface}}) { - print OUTPUT "
  • $_
  • \n"; - } - print OUTPUT "
\n"; - print OUTPUT "
\n\n"; - } - - ## Navigation - print OUTPUT " \n\n"; - - ## See also - if (defined $tags{"see"}) { - print OUTPUT "
\n"; - print OUTPUT "

See Also

\n"; - print OUTPUT "
    \n"; - foreach $w (split ("\n", $tags{'see'})) { - my ($file) = $files_from_package{$w}; - if (defined $file) { - print OUTPUT "
  • $w
  • \n"; - } - } - print OUTPUT "
\n"; - print OUTPUT "
\n\n"; - } - - ## Finish left side - print OUTPUT "
\n\n"; - - ## Documentation - print OUTPUT "
\n"; - - ## Notebook - print OUTPUT "
    \n"; - print OUTPUT "
  • Entities
  • \n"; - print OUTPUT "
  • Signals
  • \n" - if (defined $tags{"signals"}); - print OUTPUT "
  • Properties
  • \n" - if (defined $tags{"properties"} - || defined $tags{"style_properties"} - || defined $tags{"child_properties"}); - print OUTPUT "
  • Examples
  • \n" - if (defined $tags{"example"}); - print OUTPUT "
  • Testgtk
  • \n" - if (defined $tags{"testgtk"}); - print OUTPUT "
\n\n"; - - ## First notebook page - print OUTPUT "
\n"; - - ## Description of package - if (defined $tags{'description'}) { - print OUTPUT " \n"; - print OUTPUT "
\n"; - print OUTPUT "

Description

\n"; - print OUTPUT &process_comment ($tags{'description'}, $package); - print OUTPUT "
\n\n"; - } - - ## Page1 => Types - if ($has_types) { - print OUTPUT " \n"; - print OUTPUT "
\n"; - print OUTPUT "

Types

\n"; - print OUTPUT "
    \n"; - - foreach (sort keys %types) { - my ($name, $def, $comment) = ($_, $types{$_}->[0], $types{$_}->[1]); - $def =~ s/) is ..." - $def =~ s/>/>/g; - print OUTPUT "
  • \n"; - print OUTPUT "
    ", - &process_profile($def), - "
    \n"; - print OUTPUT "
    ", - &process_comment($comment, $package), - "
  • \n"; - } - - print OUTPUT "
\n"; - print OUTPUT "
\n\n"; - } - - ## Page1 => Subprograms - print OUTPUT " \n"; - print OUTPUT " \n"; - print OUTPUT "
\n"; - print OUTPUT "

Subprograms

\n"; - print OUTPUT "
    \n"; - - my (%names); - my ($current_section) = "General"; - $count = 1; - - foreach $w (@subprograms) { - my ($section, $description, $comment) = ($w->[0], $w->[1], $w->[2]); - if ($section ne $current_section) { - $current_section = $section; - $section =~ s/[ \t]/_/g; - - print OUTPUT " \n"; - print OUTPUT "

    $current_section

    \n"; - - foreach (@sections) { - my ($name, $comment) = ($_->[0], $_->[1]); - if ($name eq $current_section) { - print OUTPUT "
    ", - &process_comment ($comment, $package), - "
    \n\n"; - } - } - } - - print OUTPUT "
  • "; - my (%params) = (); - while ($description =~ /($subprogram_re)/og) { - my ($sname, $sprofile) = ($2, $1); - - # Output profile for each subprograms in the group - print OUTPUT "\n"; - print OUTPUT "
    ", - &process_profile ($sprofile), - "
    \n"; - - # Save the name for the index - $names{"${sname}_${count}_"} = $sname; - $count++; - } - - # Highlight parameters - while ($description =~ /[(;]\s*(?:--)?\s*(\w+)\s*:/og) { - my ($pname) = $1; - $params{$pname}++; - } - - # Output the common comment for all subprograms in the group - print OUTPUT "
    ", - &process_comment ($comment, $package, \%params), - "
  • \n"; - } - - print OUTPUT "
\n"; - print OUTPUT "
\n\n"; - - ## End of first notebook page - print OUTPUT "
\n"; - - ## Second notebook page (signals) - if (defined $tags{'signals'}) { - print OUTPUT "
\n"; - print OUTPUT " \n"; - print OUTPUT "
\n"; - print OUTPUT "

Signals

\n"; - - my (%signals) = &parse_signals ($tags{'signals'}); - print OUTPUT "
    \n"; - foreach (sort keys %signals) { - my ($name, $profile, $comment) = ($_, $signals{$_}->[0], $signals{$_}->[1]); - print OUTPUT "
  • $name
    \n"; - print OUTPUT "
    ", - &process_profile ($profile), - "
    \n"; - print OUTPUT "
    ", - &process_comment ($comment, $package), - "
  • \n"; - } - print OUTPUT "
\n"; - - print OUTPUT "
\n"; - print OUTPUT "
\n\n"; - } - - ## Third notebook page (properties) - my ($proptype); - my (%properties_sections) = - ('properties' => 'Properties', - 'child_properties' => 'Child Properties', - 'style_properties' => 'Style Properties'); - print OUTPUT "
\n"; - foreach $proptype (('properties', 'child_properties', 'style_properties')) { - if (defined $tags{$proptype}) { - print OUTPUT " \n"; - print OUTPUT "
\n"; - print OUTPUT "

$properties_sections{$proptype}

\n"; - - my (%props) = &parse_properties ($tags{$proptype}); - print OUTPUT "
    \n"; - foreach (sort keys %props) { - my ($name, $type, $descr, $see) = ($_, $props{$_}->[0], - $props{$_}->[1], - $props{$_}->[2], - $props{$_}->[3]); - print OUTPUT "
  • $name
    \n"; - print OUTPUT "
    $type
    \n"; - print OUTPUT "
    ", - (defined $descr ? &process_comment ($descr, $package) : ""), - (defined $see ? "
    See: " . &process_comment ($see, $package) : ""), - "
  • \n"; - } - - print OUTPUT "
\n"; - print OUTPUT "
\n"; - } - } - print OUTPUT "
\n\n"; - - ## Fourth page (example) - if (defined $tags{'example'}) { - print OUTPUT "
\n"; - print OUTPUT " \n"; - print OUTPUT "
"; - print OUTPUT "

Example

"; - my ($example) = $tags{'example'}; - if (($example =~ /(.*)<\/include>/)) { - my ($base, $dirname) = ($1, $filename); - $dirname =~ s,/[^/]+$,/,; - open (EXAMPLE, "$dirname$base") || print "Cannot open $dirname$base\n"; - $example = join ("", ); - close (EXAMPLE); - } - - $example =~ s/^\s*--//mg; - print OUTPUT &highlight_syntax ($example); - print OUTPUT "
\n"; - print OUTPUT "
\n\n"; - } - - ## Fifth page (testgtk) - if (defined $tags{'testgtk'}) { - print OUTPUT "
\n"; - print OUTPUT " \n"; - print OUTPUT "
"; - print OUTPUT "

Testgtk source code

"; - print OUTPUT "
This code is part of testgtk, a demo application", - " packaged with GtkAda. Testgtk demonstrates the various", - " widgets of GtkAda
"; - open (TESTGTK, "../../testgtk/$tags{'testgtk'}") || print "Cannot open file testgtk file $tags{'testgtk'}\n"; - print OUTPUT &highlight_syntax (join ("", )); - close (TESTGTK); - print OUTPUT "
\n"; - print OUTPUT "
\n\n"; - } - - ## Finish documentation - print OUTPUT "
\n\n"; - - ## Start right side - print OUTPUT "
\n"; - print OUTPUT "
\n"; - print OUTPUT "

Alphabetical Index

\n"; - print OUTPUT "
    \n"; - - foreach $w (sort keys %names) { - print OUTPUT "
  • $names{$w}
  • \n"; - } - - print OUTPUT "
\n"; - print OUTPUT "
\n"; - print OUTPUT "
\n\n"; - - print OUTPUT <switchPage('page1'); -adjust_height() - - -EOF -; - - close (OUTPUT); -} - -####################### -## Generate the general index -####################### - -sub generate_index() { - my ($entity, $short); - my ($first); - my (%short_entities); - - open (OUTPUT, ">gtkada_rm/entities.html"); - &generate_header ("Index", *OUTPUT); - - print OUTPUT "
\n"; - print OUTPUT "

Index

\n"; - print OUTPUT "\n"; - print OUTPUT " \n"; - for ($first = ord ('a'); $first <= ord ('z'); $first++) { - print OUTPUT " \n" if (($first - ord ('a')) % 3 == 0); - print OUTPUT " \n"; - print OUTPUT " \n" if (($first - ord ('a')) % 3 == 2); - } - print OUTPUT "
operators
", uc (chr ($first)), "
\n"; - print OUTPUT "
\n"; - - foreach $entity (keys %entities) { - my ($short) = $entity; - $short =~ s/^.*\.([^\.]+)$/$1/; - $short_entities{$short} = $entity; - } - - $first = ""; - foreach $short (sort { lc($a) cmp lc($b) } keys %short_entities) { - my ($entity) = $short_entities{$short}; - my ($html_file, $anchor) = @{$entities{$entity}}; - my ($package) = $entity; - my ($new_first) = lc (substr ($short, 0, 1)); - $new_first = "operators" if ($new_first eq '"'); - - if ($new_first ne $first) { - print OUTPUT "
\n" if ($first ne ""); - $first = $new_first; - print OUTPUT "
\n"; - print OUTPUT " \n"; - print OUTPUT "

$first

\n"; - print OUTPUT "
    \n"; - } - - $package =~ s/\.([^\.]+)$//; - if ($anchor ne "") { - print OUTPUT "
  • $short ($package)
  • \n"; - } else { - print OUTPUT "
  • $short ($package)
  • \n"; - } - } - - print OUTPUT "
\n"; - print OUTPUT "
\n"; - print OUTPUT ""; - close (OUTPUT); -} - -####################### -## Generate the table of contents -####################### - -sub generate_table_of_contents() { - my ($group, $pkg); - - open (OUTPUT, ">gtkada_rm/index.html"); - &generate_header ("Reference Manual", *OUTPUT); - - foreach $group (sort keys %groups) { - print OUTPUT "
\n"; - print OUTPUT "

$group

\n"; - print OUTPUT "
    \n"; - foreach $pkg (sort @{$groups{$group}}) { - print OUTPUT "
  • $pkg
  • \n"; - } - print OUTPUT "
\n"; - print OUTPUT "
\n"; - } - - print OUTPUT ""; - - close (OUTPUT); -} - -####################### -## Generates the gallery -####################### - -sub generate_gallery() { - my ($screenshot, $pkg); - - open (OUTPUT, ">gtkada_rm/gallery.html"); - &generate_header ("Widgets Gallery", *OUTPUT); - - print OUTPUT "