From fbf5a595c2d4deb2a5613fb02b0245761540490e Mon Sep 17 00:00:00 2001 From: GAP Date: Fri, 5 Jan 2001 13:37:49 +0000 Subject: [PATCH] Adding preliminary version of a package MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit GAPDoc by Frank Lübeck / Max Neunhöffer to CVS repository GAP/4.0/pkg/gapdoc Interested users may look into GAP/4.0/pkg/gapdoc/INSTALL git-svn-id: path/gapdoc/trunk@2 --- 3k+1/3k+1.bib | 15 + 3k+1/3k+1.xml | 68 ++ 3k+1/clean | 2 + INSTALL | 57 ++ banner.g | 20 + doc/app3k1.xml | 77 ++ doc/clean | 2 + doc/conv.xml | 265 +++++++ doc/distr.xml | 110 +++ doc/enter.xml | 388 +++++++++++ doc/gapdoc.bib | 9 + doc/gapdoc.xml | 60 ++ doc/intro.xml | 364 ++++++++++ doc/refdtd.xml | 1294 ++++++++++++++++++++++++++++++++++ doku | 6 + doku.tar.gz | Bin 0 -> 610943 bytes example/clean | 2 + example/example.bib | 10 + example/example.xml | 964 +++++++++++++++++++++++++ example/manual.css | 26 + gapdoc.css | 26 + gapdoc.dtd | 396 +++++++++++ init.g | 36 + lib/BibTeX.gd | 20 + lib/BibTeX.gi | 664 ++++++++++++++++++ lib/ComposeXML.gd | 15 + lib/ComposeXML.gi | 126 ++++ lib/GAPDoc.gd | 18 + lib/GAPDoc.gi | 270 +++++++ lib/GAPDoc2HTML.gd | 1 + lib/GAPDoc2HTML.gi | 1251 +++++++++++++++++++++++++++++++++ lib/GAPDoc2LaTeX.gd | 19 + lib/GAPDoc2LaTeX.gi | 1123 ++++++++++++++++++++++++++++++ lib/GAPDoc2Text.gd | 21 + lib/GAPDoc2Text.gi | 1544 +++++++++++++++++++++++++++++++++++++++++ lib/HelpBookHandler.g | 240 +++++++ lib/Make.g | 53 ++ lib/PrintUtil.gd | 33 + lib/PrintUtil.gi | 219 ++++++ lib/Text.gd | 35 + lib/Text.gi | 665 ++++++++++++++++++ lib/XMLParser.gd | 24 + lib/XMLParser.gi | 618 +++++++++++++++++ lib/gapdocdtdinfo.g | 1 + lib/getdtd.g | 127 ++++ makedoc.g | 24 + read.g | 22 + version | 1 + 48 files changed, 11331 insertions(+) create mode 100644 3k+1/3k+1.bib create mode 100644 3k+1/3k+1.xml create mode 100755 3k+1/clean create mode 100644 INSTALL create mode 100644 banner.g create mode 100644 doc/app3k1.xml create mode 100755 doc/clean create mode 100644 doc/conv.xml create mode 100644 doc/distr.xml create mode 100644 doc/enter.xml create mode 100644 doc/gapdoc.bib create mode 100644 doc/gapdoc.xml create mode 100644 doc/intro.xml create mode 100644 doc/refdtd.xml create mode 100755 doku create mode 100644 doku.tar.gz create mode 100755 example/clean create mode 100644 example/example.bib create mode 100644 example/example.xml create mode 100644 example/manual.css create mode 100644 gapdoc.css create mode 100644 gapdoc.dtd create mode 100644 init.g create mode 100644 lib/BibTeX.gd create mode 100644 lib/BibTeX.gi create mode 100644 lib/ComposeXML.gd create mode 100644 lib/ComposeXML.gi create mode 100644 lib/GAPDoc.gd create mode 100644 lib/GAPDoc.gi create mode 100644 lib/GAPDoc2HTML.gd create mode 100644 lib/GAPDoc2HTML.gi create mode 100644 lib/GAPDoc2LaTeX.gd create mode 100644 lib/GAPDoc2LaTeX.gi create mode 100644 lib/GAPDoc2Text.gd create mode 100644 lib/GAPDoc2Text.gi create mode 100644 lib/HelpBookHandler.g create mode 100644 lib/Make.g create mode 100644 lib/PrintUtil.gd create mode 100644 lib/PrintUtil.gi create mode 100644 lib/Text.gd create mode 100644 lib/Text.gi create mode 100644 lib/XMLParser.gd create mode 100644 lib/XMLParser.gi create mode 100644 lib/gapdocdtdinfo.g create mode 100644 lib/getdtd.g create mode 100644 makedoc.g create mode 100644 read.g create mode 100644 version diff --git a/3k+1/3k+1.bib b/3k+1/3k+1.bib new file mode 100644 index 0000000..2d8a0fd --- /dev/null +++ b/3k+1/3k+1.bib @@ -0,0 +1,15 @@ +% 3k+1 bibliography +% $Id: 3k+1.bib,v 1.1.1.1 2001-01-05 13:37:49 gap Exp $ + +@book {Wi98, + author = {Wirsching, Günther J.}, + title = {The dynamical system generated by the $3n+1$ function}, + publisher = {Springer-Verlag}, + series = {Lecture Notes in Mathematics}, + volume = {1681}, + address = {Berlin}, + year = {1998}, + pages = {viii+158}, + isbn = {3-540-63970-5} +} + diff --git a/3k+1/3k+1.xml b/3k+1/3k+1.xml new file mode 100644 index 0000000..03035d7 --- /dev/null +++ b/3k+1/3k+1.xml @@ -0,0 +1,68 @@ + + + + + + + + + + The <Package>ThreeKPlusOne</Package> Package + Version 42 + Dummy Authör + 3kplusone@dev.null + + + ©right; 2000 The Author.

+ You can do with this package what you want.

Really. + + + + + + + The 3k+1 Problem +

Theory + Let k \in \N be a natural number. We consider the sequence + n(i, k), i \in \N, with n(1, k) = k and else + n(i+1, k) = n(i, k) / 2 if n(i, k) is even and + n(i+1, k) = 3 n(i, k) + 1 if n(i, k) is odd. +

+ It is not known whether for any natural number k \in \N + there is an m \in \N with n(m, k) = 1. +

+ ThreeKPlusOne provides the function to explore this for given + n. If you really want to know something about this + problem, see or + http://mathsrv.ku-eichstaett.de/MGF/homes/wirsching/ + for more details (and forget this package). +

+ +
Program + In this section we describe the main function of this package. + + + + This function computes for a natural number k the + beginning of the sequence n(i, k) defined in section + . The sequence stops at the first + 1 or at n(max, k), if max is + given. + +gap> ThreeKPlusOneSequence(101); +"Sorry, not yet implemented. Wait for Version 84 of the package" + + + +
+ + + + + + +
+ diff --git a/3k+1/clean b/3k+1/clean new file mode 100755 index 0000000..9007bae --- /dev/null +++ b/3k+1/clean @@ -0,0 +1,2 @@ +rm -f *.{aux,log,dvi,ps,pdf,bbl,ilg,ind,idx,out,html,tex,pnr,txt,blg,toc,six,brf} + diff --git a/INSTALL b/INSTALL new file mode 100644 index 0000000..c0efd33 --- /dev/null +++ b/INSTALL @@ -0,0 +1,57 @@ +## $Id: INSTALL,v 1.1.1.1 2001-01-05 13:37:46 gap Exp $ + + + + INSTALL for GAPDoc package (preliminary!) + + +You *need* GAP-4-dev (not 4.2) because of recent changes in lib/help.g + +--------------------------- +Install: just copy package into directory GAP4ROOT/pkg/gapdoc and put the line + +gapdoc + +into GAP4ROOT/pkg/ALLPKG +--------------------------- + +(Re)constructing the GAPDoc documentation: + + You need a sufficiently good TeX installation including pdflatex, + bibtex, makeindex and several LaTeX packages. For example + teTeX-1.0 or (Linux-)packages based on it are ok. + + Then: inside GAP4ROOT/pkg/gapdoc do + + gap4dev makedoc.g + +(and maybe restart gap4dev to have the documentation available inside GAP) + +If this doesn't work unpack: GAP4ROOT/pkg/gapdoc/docu.tar.gz + +There are two books in the directories `doc' and `example' (and a short +example from chapter one of `doc/manual....'. + +--------------------------- + +Suggestions for viewing the documentation. + +- For text browsing inside GAP terminal window you may set (in .gaprc?) + +PAGER := "less"; +PAGER_OPTIONS := ["-f", "-r", "-a", "-i", "-M", "-j2"]; +# and you may try: +ANSI_COLORS:=true; +# remove the line or change it to `ANSI_COLORS:=false;' if your terminal +# doesn't support ANSI color sequences, or if you don't like it. + +- For pdf-viewing with `xpdf' try + +SetHelpViewer("xpdf"); + +or something like + +SetHelpViewer("xpdf", "xdvi", "screen", "netscape"); + + + diff --git a/banner.g b/banner.g new file mode 100644 index 0000000..8c6f670 --- /dev/null +++ b/banner.g @@ -0,0 +1,20 @@ +############################################################################# +## +#A banner.g GAPDoc Frank Lübeck / Max Neunhöffer +## +#H @(#)$Id: banner.g,v 1.1.1.1 2001-01-05 13:37:46 gap Exp $ +## +## A simple banner for the GAPDoc package. +## +if not QUIET and BANNER then +Print( +" ######################################################################\n", +" ## ##\n", +" ## GAPDoc 0.9 (a GAP documentation meta-package) ##\n", +" ## ##\n", +" ## Questions and remarks to: Frank.Luebeck@Math.RWTH-Aachen.De ##\n", +" ## Max.Neunhoeffer@Math.RWTH-Aachen.De ##\n", +" ## ##\n", +" ######################################################################\n\n"); +fi; + diff --git a/doc/app3k1.xml b/doc/app3k1.xml new file mode 100644 index 0000000..1713c5f --- /dev/null +++ b/doc/app3k1.xml @@ -0,0 +1,77 @@ + +The file 3k+1.xml + +Here is the complete source of the example &GAPDoc; document 3k+1.xml +discussed in Section . + ++ + + + + + + + + + The <Package>ThreeKPlusOne</Package> Package + Version 42 + Dummy Authör + 3kplusone@dev.null + + + ©right; 2000 The Author.

+ You can do with this package what you want.

Really. + + + + + + + The 3k+1 Problem +

Theory + Let k \in \N be a natural number. We consider the sequence + n(i, k), i \in \N, with n(1, k) = k and else + n(i+1, k) = n(i, k) / 2 if n(i, k) is even and + n(i+1, k) = 3 n(i, k) + 1 if n(i, k) is odd. +

+ It is not known whether for any natural number k \in \N + there is an m \in \N with n(m, k) = 1. +

+ ThreeKPlusOne provides the function to explore this for given + n. If you really want to know something about this + problem, see or + http://mathsrv.ku-eichstaett.de/MGF/homes/wirsching/ + for more details (and forget this package). +

+ +
Program + In this section we describe the main function of this package. + + + + This function computes for a natural number k the + beginning of the sequence n(i, k) defined in section + . The sequence stops at the first + 1 or at n(max, k), if max is + given. + +gap> ThreeKPlusOneSequence(101); +"Sorry, not yet implemented. Wait for Version 84 of the package" + + + +
+ + + + + + +
+]]>
+
+ diff --git a/doc/clean b/doc/clean new file mode 100755 index 0000000..9007bae --- /dev/null +++ b/doc/clean @@ -0,0 +1,2 @@ +rm -f *.{aux,log,dvi,ps,pdf,bbl,ilg,ind,idx,out,html,tex,pnr,txt,blg,toc,six,brf} + diff --git a/doc/conv.xml b/doc/conv.xml new file mode 100644 index 0000000..f23a413 --- /dev/null +++ b/doc/conv.xml @@ -0,0 +1,265 @@ + + + +The Converters + +The &GAPDoc; package contains a set of programs which allow to convert a +&GAPDoc; book into several output versions and to make them available to +&GAP;'s online help.

+ +Currently the following output formats are provided: text for browsing +inside a terminal running &GAP;, &LaTeX; with hyperref-package for +cross references via hyperlinks and HTML for reading with a Web-browser.

+ + + +

+Producing Documentation from Source Files + +Here we explain how to use the functions which are +described in more detail in the following sections. We +assume that we have the main file MyBook.xml of a +book "MyBook" in the directory /my/book/path. This +contains &tlt;&hash;Include ...&tgt;-statements as explained in +Chapter . These refer to some other files as +well as pieces of text which are found in the comments of some &GAP; source +files ../lib/a.gd and ../lib/b.gi (relative to the path +above). A &BibTeX; database MyBook.bib for the citations is also in +the directory given above. We want to produce a text-, dvi-, +pdf-, postscript- and HTML-version of the document.

+ +All the commands shown in this Section are collected in the single function +.

+ +First we construct the complete XML-document as a string with +. This interprets recursively the +&tlt;&hash;Include ...&tgt;-statements. + + +gap> path := Directory("/my/book/path");; +gap> main := "MyBook.xml";; +gap> files := ["../lib/a.gd", "../lib/b.gi"];; +gap> bookname := "MyBook";; +gap> str := ComposedXMLString(path, main, files);; + + +Then we parse the document and store its structure in a tree-like data +structure. The commands for this are and +. + + +gap> r := ParseTreeXMLString(str);; +gap> CheckAndCleanGapDocTree(r); +true + + +We first produce a &LaTeX; version of the document. returns a string containing the &LaTeX; source. The +utility function writes the content of a string to +a file, we choose MyBook.tex. + + +gap> l := GAPDoc2LaTeX(r);; +gap> FileString(Filename(path, Concatenation(main, ".tex")), l); + + +Assuming that you have a sufficiently good installation of &TeX; available +(see for details) this can be processed with a +series of commands like in the following example. + + +cd /my/book/path +latex MyBook +bibtex MyBook +makeindex MyBook +latex MyBook +latex MyBook +mv MyBook.dvi manual.dvi +dvips -o manual.ps manual.dvi +rm MyBook.aux +pdflatex MyBook +pdflatex MyBook +mv MyBook.pdf manual.pdf + + +After this we have a dvi-, pdf- and postscript version +of the document in the files manual.dvi, manual.pdf and +manual.ps. The first two versions contain hyperlink information which +can be used with appropriate browsers for convenient reading of the document +on screen (e.g., current versions of xdvi, respectively xpdf +or acroread.

+ +Furthermore we have produced a file MyBook.pnr which is +&GAP;-readable and contains the page number information for each +(sub-)section of the document. We will use this later.

+ +Next we produce a text version which can be read in a terminal (window). The +command is . This produces a record with the actual +text and some additional information. The text can be written chapterwise +into files with . The names of +these files are chap0.txt, chap1.txt and so on. The text +contains some color markup using ANSI escape sequences. One can use this +with a terminal which interprets these sequences appropriately after +setting the &GAP; variable ANSI&uscore;COLORS to true. For the +bibliography we have to tell the location of the +&BibTeX; database. + + +t := GAPDoc2Text(r, path);; +GAPDoc2TextPrintTextFiles(t, path); + + +This command constructs all parts of the document including +table of contents, bibliography and index. The functions for formatting text paragraphs and for reading &BibTeX; files with &GAP; may be of +independent interest.

+ +With the text version we have also produced the information which is used +for searching with &GAP;'s online help. We can add the page number +information from the &LaTeX; version of the document and then print a +manual.six file which is read by &GAP; when the document is +loaded. This is done with and . + + +gap> AddPageNumbersToSix(r, Filename(path, "MyBook.pnr")); +gap> PrintSixFile(Filename(path, "manual.six"), r, bookname); + + +Finally we produce an HTML version of the document and write it +(chapterwise) into files chap0.html, chap1.html and so +on. They can be read with any Web-browser. The commands are and . + + +gap> h := GAPDoc2HTML(r);; +gap> GAPDoc2HTMLPrintHTMLFiles(h, path); + + + + + + +This function collects all the commands for producing a dvi-, +pdf-, postscript-, text- and HTML-version of a &GAPDoc; document as +described in Section .

+ +Here path must be the directory (as string or directory object) +containing the main file main of the document (given with or +without the .xml extension. The argument files is a list of +(probably source code) files relative to path which contain pieces of +documentation which must be included in the document, see Chapter . And bookname is the name of the book used by +&GAP;'s online help. + + +

+ +
+Parsing XML Documents +Arbitrary well-formed XML documents can be parsed and browsed by the +following functions. + +<#Include Label="ParseTreeXMLString"> + +<#Include Label="DisplayXMLStructure"> + +<#Include Label="ApplyToNodesParseTree"> + +And here are utilities for processing &GAPDoc; XML documents. + +<#Include Label="CheckAndCleanGapDocTree"> + +<#Include Label="AddParagraphNumbersGapDocTree"> + +
+ +
+The Converters +Here are more details about the conversion programs for &GAPDoc; XML +documents. + +<#Include Label="GAPDoc2LaTeX"> + +<#Include Label="GAPDoc2Text"> + +<#Include Label="GAPDoc2TextPrintTextFiles"> + +<#Include Label="AddPageNumbersToSix"> + +<#Include Label="PrintSixFile"> + +<#Include Label="GAPDoc2HTML"> + +<#Include Label="GAPDoc2HTMLPrintHTMLFiles"> + +
+ +
+Parsing &BibTeX; Files + +Here are functions for parsing, normalizing and printing reference lists in +&BibTeX; format. + +<#Include Label="ParseBibFiles"> + +<#Include Label="NormalizeNameAndKey"> + +<#Include Label="WriteBibFile"> + +
+ +
+Text Utilities + +This section describes some utility functions for handling texts within +&GAP;. They are used by other functions in the &GAPDoc; package but may be +useful for other purposes as well. We start with some variables containing +useful strings and go on with functions for parsing and reformatting text. +

+ +<#Include Label="CharsColls"> + +<#Include Label="TextAttr"> + +<#Include Label="FormatParagraph"> + +<#Include Label="SubstitutionSublist"> + +<#Include Label="NormalizedWhitespace"> + +<#Include Label="StripBeginEnd"> + +<#Include Label="StripEscapeSequences"> + +<#Include Label="RepeatedString"> + +<#Include Label="NumberDigits"> + +<#Include Label="PositionMatchingDelimiter"> + +<#Include Label="WordsString"> + +

+ +
+Print Utilities + +The following printing utilities turned out to be useful for interactive +work with texts in &GAP;. But they are more general and so we document them +here. + +<#Include Label="PrintTo1"> + +<#Include Label="StringPrint"> + +<#Include Label="PrintFormattedString"> + +<#Include Label="Page"> + +<#Include Label="StringFile"> + +
+
+ diff --git a/doc/distr.xml b/doc/distr.xml new file mode 100644 index 0000000..6c9e753 --- /dev/null +++ b/doc/distr.xml @@ -0,0 +1,110 @@ + + +Distributing a Document into Several Files + +In &GAPDoc; there are facilities to distribute a document into several +files. This is for example interesting, if one wants to store the +documentation of some code in the same file as the code itself. Or, if one +just wants to store chapters of a document in separate files. Basically, +there is only a set of conventions how this is done and some tools to +collect the text for further processing.

+ +

+The Conventions + +Pieces of documentation that shall be incorporated into another document +are marked as follows: + ++ +## This is the piece. +## The hash characters are removed. +## <#/GAPDoc>]]> + + +This piece is then included into another file by a statement like: + +&tlt;&hash;Include Label="MyPiece"&tgt; + + +Here are the exact rules, how pieces are gathered: + + + +All lines up to a line containing the character sequence +&tlt;&hash;GAPDoc Label=" are ignored. The characters +on the same line before this sequence are stored as prefix. +The characters after the sequence up to the next double quotes character +are stored as label. All other characters in the line are ignored. + + + +The following lines up to a line containing the character sequence +&tlt;&hash;/GAPDoc&tgt; are stored under the label. +These lines are processed as follows: The longest possible +substring from the beginning of the line that equals the corresponding +substring of the prefix is removed. + + + +Having stored a list of labels and pieces of text gathered as above this can +be used as follows. + + + +In &GAPDoc; documentation files all statements +of the form &tlt;&hash;Include Label="Key"&tgt; are +replaced by the +sequence of lines stored under the label Key. + + + +Additionally, every occurance of a statement of the form +&tlt;&hash;Include SYSTEM "Filename"&tgt; is replaced by the +whole file stored under the name Filename in the file system. + + + +These substitutions are done recursively (although one should probably avoid to use this extensively). + + + +Here is another example: + ++ some characters +# # This text is not indented. +# This text is indented by one blank. +#Not indented. +#<#/GAPDoc>]]> + + +replaces &tlt;&hash;Include Label="AnotherPiece"&tgt; by + ++ + + +Since these rules are very simple it is quite easy to write a program in +almost any programming language which does this gathering of text pieces +and the substitutions. In &GAPDoc; there is the &GAP; function which does this.

+ +Note that the XML-tag-like markup we have used here is not a legal XML +markup, since the hash character is not allowed in element names. The +mechanism described here is a preprocessing step which composes an XML +document. + +

+ +
+A Tool for Collecting a Document + +<#Include Label="ComposedXMLString"> + +
+ +
+ diff --git a/doc/enter.xml b/doc/enter.xml new file mode 100644 index 0000000..48604aa --- /dev/null +++ b/doc/enter.xml @@ -0,0 +1,388 @@ + + +How To Type a &GAPDoc; Document + +In this chapter we give a more formal description of what you need to start +to type documentation in &GAPDoc; XML format. Many details were already +explained by example in Section  of the +introduction.

+ +We do not answer the question How to write a &GAPDoc; +document? in this chapter. You can (hopefully) find an answer to +this question by studying the example in the introduction, see , and learning about more details in the reference +Chapter .

+ +The definite source for all details of the official XML standard with useful +annotations is:

+ +http://www.xml.com/axml/axml.html

+ +Although this document must be quite technical, it is surprisingly well +readable.

+ +

+General XML Syntax + +We will now discuss the pieces of text which can occur in a general XML +document. We start with those pieces which do not contribute to the actual +content of the document. + + +Head of XML Document + +Each XML document should have a head which states that it is an XML document +in some encoding and which XML-defined language is used. In case of a +&GAPDoc; document this should always look as in the following example. + + + +]]> + + +See  for a remark on the encoding +statement.

+ +(There may be local entity definitions inside the DOCTYPE statement, +see Subsection  below.) + + + +Comments + +A comment in XML starts with the character sequence +&tlt;!-- and ends with the sequence -->. Between +these sequences there must not be two adjacent dashs --. + + + + +Processing Instructions + +A processing instruction in XML starts with the character sequence +&tlt;? followed by a name (xml is only allowed +at the very beginning of the document to declare it being an XML document, +see ). After that any characters may follow, except +that the ending sequence ?&tgt; must not occur within the +processing instruction. + + + +And now we turn to those parts of the document which contribute to its +actual content. + + +Names in XML and Whitespace + +A name in XML (used for element and attribute identifiers, see below) +must start with a letter (in the encoding of the document) or with a +colon : or underscore &uscore; character. The +following characters may also be digits, dots . or dashs +-.

+ +This is a simplified description of the rules in the standard, which are +concerned with lots of unicode ranges to specify what a letter +is.

+ +Sequences only consisting of the following characters are considered as +whitespace: blanks, tabs, carriage return characters and new line +characters. + + + + +Elements + +The actual content of an XML document consists of elements. +An element has some content with a leading start tag +() and a trailing end tag (). The content can contain further elements but they +must be properly nested. One can define elements whose content is always +empty, those elements can also be entered with a single combined tag (). + + + +Start Tags + +A start-tag consists of a less-than-character &tlt; +directly followed (without whitespace) by an element name (see ), optional attributes, optional whitespace, and a +greater-than-character &tgt;.

+ +An attribute consists of some whitespace and then its name directly +followed by an equal sign =, and the attribute value, which is +enclosed either in single or double quotes. The attribute value may +not contain the type of quote used as a delimiter or the characters +&tlt; and &tamp;.

+ +Note especially that no whitespace is allowed between the starting +&tlt; character and the element name or around the = of +an attribute. The quotes around an attribute value cannot be ommitted. The +names of elements and attributes are case sensitive. + + + +End Tags + +An end tag consists of the two characters &tlt;/ +directly followed by the element name, optional whitespace and a +greater-than-character &tgt;. + + + +Combined Tags for Empty Elements + +Elements which always have empty content can be written with a single +tag. This looks like a start tag (see ) +except that the trailing greater-than-character &tgt; +is substituted by the two character sequence /&tgt;. + + + + +Entities + +An entity in XML is a macro for some substitution text. There are two +types of entities.

+ +A character entity can be used to specify characters in the encoding +of the document (can be useful for entering non-ascii characters which you +cannot manage to type in directly). They are entered with a sequence +&tamp;&hash;, directly followed by either some decimal digits +or an x and some hexadecimal digits, directly followed by a +semicolon ;. Using such a character entity is just equivalent +to typing the corresponding character directly.

+ +Then there are references to named entities. They are entered with an +ampersand character &tamp; directly followed by a name which +is directly followed by a semicolon ;. Such entities must be +declared somewhere by giving a substitution text. This text is included in +the document and the document is parsed again afterwards. The exact rules +are a bit subtle but you probably want to use this only in simple cases. +Important entities for &GAPDoc; are described in , + and .

+ + + + +Special Characters in XML + +We have seen that the less-than-character &tlt; and +the ampersand character &tamp; start a tag or entity +reference in XML. To get these characters into the document text +one has to use entity references, namely &tamp;lt; +to get &tlt; and &tamp;amp; to get +&tamp;. Furthermore &tamp;gt; should sometimes +be used to get &tgt;.

+ +Another possibility is to use a CDATA statement explained +in . + + + + +CDATA + +Pieces of text which contain many characters which can be +misinterpreted as markup can be enclosed by the character sequences + and ]]&tgt;. Everything +between these sequences is considered as content of the document and is not +further interpreted as XML text. All the rules explained so far in this +section do not apply to such a part of the document. The only +document content which cannot be entered directly inside a CDATA +statement is the sequence ]]&tgt;. This can be entered as +]]&tamp;gt;. + +

+A nesting of tags like ]]> is not allowed. + + +
+ + +Encoding of an XML document + +We suggest to use the ISO-8859-1 or ISO-latin1 encoding for writing &GAPDoc; +XML documents. This character set contains the ASCII characters and all +special characters from Western European languages like German umlauts or +French accented characters. Text in this character set can be used directly +with &LaTeX; and many current default terminal fonts support this character +set. + + + + +Well Formed and Valid XML Documents + +We want to mention two further important words which are often used in the +context of XML documents. A piece of text becomes a well formed XML +document if all the formal rules described in this section are fulfilled. +

+ +But this says nothing about the content of the document. To give +this content a meaning one needs a declaration of the element and +corresponding attribute names as well as of named entities which are +allowed. Furthermore there may be restrictions how such elements can be +nested. This definition of an XML based markup language is done in a +document type definition. An XML document which contains only +elements and entities declared in such a document type definition and obeys +the rules given there is called valid (with respect to this document type +definition).

+ +The main file of the &GAPDoc; package is gapdoc.dtd. This contains +such a definition of a markup language. We are not going to explain the +formal syntax rules for document type definitions in this section. But in +Chapter  we will explain enough about it to understand +the file gapdoc.dtd and so the markup language defined there. + + +

+ +
+Entering &GAPDoc; Documents + +Here are some additional rules for writing &GAPDoc; XML documents. + + +More Special Characters + +Since one purpose of &GAPDoc; documents is to produce a high quality &LaTeX; +output version we have to pay attention to characters with a special meaning +in &LaTeX; or in XML. These are the following characters:

+ +&tamp;, +&tlt;, +&tgt;, +&hash;, +$, +&percent;, +˜, +&bslash;, +&obrace;, +&cbrace;, +&uscore;, +&circum; and +  (the last one is a non-breakable space, similar to +&LaTeX;'s ˜ character). +

+ +The right way to access these symbols is by using entities, +see . The following table shows what to type to +get these characters in the output text of the document.

+ + + + + &tamp;&tamp;tamp; + + &tlt; &tamp;tlt; + + &tgt; &tamp;tgt; + + &hash; &tamp;hash; + + $ &tamp;dollar; + + &percent; &tamp;percent; + + ˜ &tamp;tilde; + + &bslash; &tamp;bslash; + + &obrace; &tamp;obrace; + + &cbrace; &tamp;cbrace; + + &uscore; &tamp;uscore; + + &circum; &tamp;circum; + +   &tamp;nbsp; + +
What to type for special characters in character data

+ +Note that the first three have an extra t at the beginning +in comparison with the standard entities of XML described in . The difference is necessary because for example +&tamp;tamp; produces &bslash;&tamp; for &LaTeX; +to actually get an ampersand character in the printed version. Use +&tamp;amp; if you want to pass an ampersand character without +a backslash in front directly to &LaTeX;.

+ +Inside attribute values you should not use these entities. Instead +use the corresponding characters directly. The reason is that attribute +values are often used as labels in &LaTeX; and it is easier to process this +properly with the direct input of the characters.

+ +Also, these entities are not used inside mathematical formulae, see +  below. + + + + +Mathematical formulae + +Mathematical formulae in &GAPDoc; are typed as in &LaTeX;. They must +be the content of one of three types of &GAPDoc; elements concerned +with mathematical formulae: Math, Display, and +M (see Sections  and  for more details). The first two correspond to &LaTeX;'s math +mode and display math mode. The last one is a special form of the +Math element type, that imposes certain restrictions on the +content. On the other hand the content of an M element is +processed in a well defined way for text terminal or HTML output.

+ +The remarks about special characters in  do +not apply to the content of these elements. But the special characters +&tlt; and &tamp; for XML must be entered via +the entities described in  or by using a +CDATA statement, see .

+ + + + +More Entities + +In &GAPDoc; there are some more predefined entities: + + + + + &tamp;GAP; &GAP; + + &tamp;GAPDoc; &GAPDoc; + + &tamp;TeX; &TeX; + + &tamp;LaTeX; &LaTeX; + + &tamp;BibTeX; &BibTeX; + + &tamp;MeatAxe; &MeatAxe; + + &tamp;XGAP; &XGAP; + + &tamp;copyright; ©right; + +
Predefined Entities in the &GAPDoc; system
+ +One can define further local entities right inside the head (see ) of a &GAPDoc; XML document as in the following example. + +

+ + +text possibly with markup"> + ]>]]> + + +These additional definitions go into the &tlt;!DOCTYPE tag in square +brackets. Such new entities are used like this: &tamp;MyEntity;

+ + + +

+
+ diff --git a/doc/gapdoc.bib b/doc/gapdoc.bib new file mode 100644 index 0000000..a382cc7 --- /dev/null +++ b/doc/gapdoc.bib @@ -0,0 +1,9 @@ +% $Id: gapdoc.bib,v 1.1.1.1 2001-01-05 13:37:49 gap Exp $ +@book {La85, + author = {Lamport, Leslie}, + title = {\LaTeX: A Document Preparation System}, + publisher = {Addison-Wesley}, + year = {1985}, + isbn = {0-201-15790-X} +} + diff --git a/doc/gapdoc.xml b/doc/gapdoc.xml new file mode 100644 index 0000000..c1b532e --- /dev/null +++ b/doc/gapdoc.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + &GAPDoc; + +<#Include SYSTEM "../version"> + + Frank Lübeck + Frank.Luebeck@Math.RWTH-Aachen.De + http://www.math.rwth-aachen.de/~Frank.Luebeck + + Max Neunhöffer + Max.Neunhoeffer@Math.RWTH-Aachen.De + http://www.math.rwth-aachen.de/~Max.Neunhoeffer + + ©right; 2000 by Frank Lübeck and Max Neunhöffer

+ We adopt the copyright regulations of &GAP; as detailed in the + copyright notice in the &GAP; manual. + + + + + + +<#Include SYSTEM "intro.xml"> + +<#Include SYSTEM "enter.xml"> + +<#Include SYSTEM "refdtd.xml"> + +<#Include SYSTEM "distr.xml"> + +<#Include SYSTEM "conv.xml"> + + + +<#Include SYSTEM "app3k1.xml"> + + + + + + + + + + + diff --git a/doc/intro.xml b/doc/intro.xml new file mode 100644 index 0000000..e6b2655 --- /dev/null +++ b/doc/intro.xml @@ -0,0 +1,364 @@ + +Introduction and Example + +The main purpose of the &GAPDoc; package is to define a file format for +documention of &GAP;-programs and -packages. The problem is that such +documentation should be readable in several output formats. For example it +should be possible to read the documentation inside the terminal in which +&GAP; is running (a text mode) and there should be a printable version in +high typesetting quality (produced by some version of &TeX;). It is also +popular to view &GAP;'s online help with a Web-browser via an HTML-version +of the documentation. Nowadays one can use &LaTeX; and standard viewer +programs to produce and view on the screen dvi- or pdf-files +with full support of internal and external hyperlinks. Certainly there will +be other interesting document formats and tools in this direction in the +future.

+ +Our aim is to find a format for writing the documentation which +allows a relatively easy translation into the output formats just mentioned +and which hopefully makes it easy to translate to future output formats as +well.

+ +To make documentation written in the &GAPDoc; format directly usable, we +also provide a set of programs which produce text-, hyperlinked &LaTeX;- and +HTML-output versions of a &GAPDoc; document. These programs run completely +inside &GAP;, i.e., no external programs are needed. You only need +latex and pdflatex to process the &LaTeX; output. These +programs are described in Chapter . + +

XML + +The definition of the &GAPDoc; format uses XML, the eXtendible Markup +Language. This is a standard (defined by the W3C consortium, see +http:/www.w3c.org) which lays down a syntax for adding markup to +a document or to some data. It allows to define document structures via +introducing markup elements and certain relations between them. This +is done in a document type definition. The file gapdoc.dtd +contains such a document type definition and is the central part of the +&GAPDoc; package. +

+ +The easiest way for getting a good idea about this is probably to look at an +example. The Appendix  contains a short but +complete &GAPDoc; document for a fictitious share package. In the next +section we will go through this document, explain basic facts about XML and +the &GAPDoc; document type, and give pointers to more details in later parts +of this documentation.

+ +In the last Section  of this introductory chapter +we try to answer some general questions about the decisions which lead to +the &GAPDoc; package. + +

+ +
A complete example + +In this section we recall the lines from the example document in +Appendix  and give some explanations. + ++ +]]> + + +This line just tells a human reader and computer programs that the file is a +document with XML markup and that the text is encoded in the ISO-8859-1, +also called ISO-latin1 character set. This is a nowadays widely used +extension of the ASCII character set which contains all special characters +of Western European languages (e.g., German umlauts and French accented +characters). + ++ +]]> + +Everything in a XML file between &tlt;!-- and +--&tgt; is a comment and not part of the document content. + ++ +]]> + +This line says that the document contains markup which is defined in +the system file gapdoc.dtd and that the markup obeys certain +rules defined in that file (the ending dtd means document type +definition). It further says that the actual content of the document +consists of an element with name Book. And we can really see that the +remaining part of the file is enclosed as follows: + ++ + [...] (content omitted) + +]]> + +This demonstrates the basics of the markup in XML. This part of the document +is an element. It consists of the start tag ]]>, the element content and the end tag +]]> (end tags always start with </). This +element also has an attribute Name whose value is +3k+1. +

+ +If you know HTML, this will look familiar to you. But there are some +important differences: The element name Book and attribute name +Name are case sensitive. The value of an attribute must +always be enclosed in quotes and no whitespace is allowed around the +=in the assignment of the attribute value. In XML every +element has a start and end tag (which can be combined for elements defined +as empty, see for example <TableOfContents/> below). +

+ +If you know &LaTeX;, you are familiar with quite different +types of markup, for example: The equivalent of the Book +element in &LaTeX; is &bslash;begin&obrace;document&cbrace; ... +&bslash;end&obrace;document&cbrace;. The sectioning in &LaTeX; is not +done by explicit start and end markup, but implicitly via heading +commands like &bslash;section. Other markup is done by using +braces &obrace;&cbrace; and putting some commands inside. And for +mathematical formulae one can use the $ for the start +and the end of the markup. In XML all markup looks similar to +that of the Book element.

+ +The content of the book starts with a title page. + +

+ + The <Package>ThreeKPlusOne</Package> Package + Version 42 + Dummy Authör + 3kplusone@dev.null + + + ©right; 2000 The Author.

+ You can do with this package what you want.

Really. + + +]]>

+ +The content of the TitlePage element consists again of elements. In +Chapter  we describe which elements are allowed +within a TitlePage and that their ordering is prescribed in this +case. In the (stupid) name of the author you see that a German umlaut is +used directly (in ISO-latin1 encoding). +

+ +Contrary to &LaTeX;- or HTML-files this markup does not say anything about +the actual layout of the title page in any output version of the document. +It just adds information about the meaning of pieces of text.

+ +Within the Copyright element there are two more things to learn about +XML markup. The &tlt;P/&tgt; is a complete element. It is a combined +start and end tag. This shortcut is allowed for elements which are defined +to be always empty, i.e., to have no content. You may have guessed +already that &tlt;P/&tgt; is used as a paragraph separator. Note that +empty lines do not separate paragraphs (as in &LaTeX;).

+ +The other construct we see here is &tamp;copyright;. This is an +example of an entity in XML and is a macro for some substitution +text. Here we use an entity as a shortcut for a complicated expression which +makes it possible that the term copyright is printed as some text +like (C) in text terminal output and as a copyright character in +other output formats. In &GAPDoc; we predefine some entities, in particular +certain special characters must be typed via entities, for example +&tlt;, &tgt; and &tamp; to avoid a misinterpretation as +XML markup. But also the special characters in &LaTeX; are written with +entities, since they need a different handling in a &LaTeX; and a +text output format, see  and  for more details. It is possible to define additional +entities for your document inside the <!DOCTYPE ... declaration, +see .

+ +Note that elements in XML must always be properly nested, as in this +example. A construct like ...]]> is not +allowed. + +

+ +]]> + +This is another example of an empty element. It just means that a +table of contents for the whole document should be included into any output +version of the document. +

+After this the main text of the document follows inside certain sectioning +elements: + +

+ + The 3k+1 Problem +
Theory + [...] (content omitted) +
+
Program + [...] (content omitted) +
+
+ +]]>
+ +These elements are used similarly to &bslash;chapter and +&bslash;section in &LaTeX;. But note that the explicit end tags are +necessary here. +

+The sectioning commands allow to assign an optional attribute Label. +This can be used for referring to a section inside the document. +

+The text of the first section starts as follows. The whitespace in the text +is unimportant and the indenting is not necessary. + +

+k \in \N be a natural number. We consider the sequence + n(i, k), i \in \N, with n(1, k) = k and else +]]> + +Here we come to the interesting question how to type mathematical formulae +in a &GAPDoc; document. We did not find any alternative for writing formulae +in &TeX; syntax. (There is MATHML, but even simple formulae contain a lot of +markup, become quite unreadable and they are cumbersome to type. Furthermore +there seem to be no tools available which translate such formulae in a nice +way into &TeX; and text.) So, formulae are typed as in &LaTeX;. There are +three types of elements containing formulae: M, Math and +Display. The first two are for in-text formulae and the third is +for displayed formulae. Here M and Math are equivalent, +when translating a &GAPDoc; document into &LaTeX;. But they are handled +differently for terminal text (and HTML) output. For the content of an +M-element there are defined rules for a translation into well +readable terminal text. More complicated formulae are in Math or +Display elements and they are just printed as they are typed in text +output. So, to make a section well readable inside a terminal window you +should try to put as many formulae as possible into M-elements. +In our example text we used the notation n(i, k) instead of +n&uscore;i(k) because it is easier to read in text mode. See +Sections  and  for +more details.

+ +A few lines further on we find two non-internal references. + +

+ or + http://mathsrv.ku-eichstaett.de/MGF/homes/wirsching/ +]]> + +The first within the Cite-element is the citation of a book. In +&GAPDoc; we use the widely used &BibTeX; database format for reference +lists. This does not use XML but has a well documented structure with is +easy to parse. And many people have collections of references readily +available in this format. The reference list in an output version of the +document is produced with the empty element + ++ +]]> + +close to the end of our example file. The attribute Databases +give the name(s) of the database (.bib) files which contain the +references. +

+ +Putting a Web-address into an URL-element allows to create a +hyperlink in output formats which allow this. +

+ +The second section of our example contains a special kind of subsection +defined in &GAPDoc;. + +

+ + + + This function computes for a natural number k the + beginning of the sequence n(i, k) defined in section + . The sequence stops at the first + 1 or at n(max, k), if max is + given. + +gap> ThreeKPlusOneSequence(101); +"Sorry, not yet implemented. Wait for Version 84 of the package" + + + +]]> + +A ManSection contains the description of some function, operation, +method, filter and so on. The Func-element describes the name of a +function (there are also similar elements Oper, Meth, +Filt and so on) and names for its arguments, optional arguments +enclosed in square brackets. See Section  for +more details.

+ +In the Description we write the argument names as A-elements. +A good description of a function should usually contain an example of its +use. For this there are some verbatim-like elements in &GAPDoc;, like +Example above (here, clearly, whitespace matters which causes a +slightly strange indenting).

+ +The text contains an internal reference to the first section via the +explicitly defined label sec:theory. +

+ +The first section also contains a Ref-element which refers to the +function described here. Note that there is no explicit label for such a +reference. The pair ]]> and ]]> +does the cross referencing (and hyperlinking if possible) implicitly via the +name of the function. +

+ +Here is one further element from our example document which we want to +explain. + + +

+ +]]> + +This is again an empty element which just says that an output version of the +document should contain an index. Many entries for the index are generated +automatically because the Func and similar elements implicitly +produce such entries. It is also possible to include explicit additional +entries in the index. + +
+ + +
Some questions + + + Are those XML files too ugly to read and edit? + + Just have a look and decide yourself. The markup needs more characters + than most &TeX; or &LaTeX; markup. But the structure of the document is + easier to see. If you configure your favorite editor well, you do not need + more key strokes for typing the markup than in &LaTeX;. + + + Why do we not use &LaTeX; alone? + + &LaTeX; is good for writing books. But &LaTeX; files are generally + difficult to parse and to process to other output formats like text + for browsing in a terminal window or HTML (or new formats which may + become popular in the future). &GAPDoc; markup is one step more + abstract than &LaTeX; insofar as it describes meaning instead of + appearance of text. The inner workings of &LaTeX; are too complicated + to learn without pain, which makes it difficult to overcome problems + that occur occasionally. + + + Why XML and not a newly defined markup language? + + XML is a standard that is more and more widely used. Lots of people + have thought about it. Years of experience with SGML went into the + design. It is easy to parse and lots of tools are already available and + there will be more in the future. (Our experience was however, + that only a few of them are usable currently.) + + + + +
+ + + diff --git a/doc/refdtd.xml b/doc/refdtd.xml new file mode 100644 index 0000000..7b1169e --- /dev/null +++ b/doc/refdtd.xml @@ -0,0 +1,1294 @@ + + +The Document Type Definition + +In this chapter we first explain what a document type definition is +and then describe gapdoc.dtd in detail. That file together with the +current chapter define how a &GAPDoc; document has to look like. + + +
What is a DTD? + +A document type definition (DTD) is a formal declaration of how an XML +document has to be structured. It is itself structured such that programs +that handle documents can read it and treat the documents accordingly. There +are for example parsers and validity checkers that use the DTD to validate +an XML document, see .

+ +The main thing a DTD does is to specify which elements may occur in +documents of a certain document type, how they can be nested, and what +attributes they can or must have. So, for each element there is a rule.

+ +Note that a DTD can not ensure that a document which is valid +also makes sense to the converters! It only says something about the formal +structure of the document.

+ +See the following three sections to learn by example, how a DTD works. + +

+ + +
Overall Document Structure + +A &GAPDoc; document contains on its top level exactly one element of +type Book, because this is the document type. This element is +declared in the DTD as follows: + +&tlt;Book&tgt; +Book + + +]]> + + +This means that the element Book is of element content --- it +contains only elements and no character data (for an example of +mixed content with &hash;PCDATA see +). It must contain first +a TitlePage element, then an optional TableOfContents +element (indicated by the question mark), then a Body element, +then zero or more elements of type Appendix (indicated by the +asterisk), then an optional Bibliography element, and finally an +optional element of type TheIndex. + +The Book element must have a Name attribute which contains +character data (CDATA). + +Sequences of elements are separated by commas, optional elements are +followed by a question mark, and the asterisk indicates a zero or +more repetition. Another possibility would be a plus sign indicating +a one ore more repetition. + + +&tlt;TitlePage&tgt; +TitlePage + +]]> + +Within this element information for the title page is collected. Note that +more than one author can be specified. The elements must appear in this +order because there is no sensible way to specify in a DTD something like +the following elements may occur in any order but each exactly once. +

+ +The Style attribute is not yet used and is optional (&hash;IMPLIED). +

+ +As an example we look at the definition for the Title element: + + +&tlt;Title&tgt; +Title + +In this section the Title element and all other elements in the +TitlePage element are described. +

+]]> + + +The expression &percent;Text; is a so-called +parameter entity. +It is something like a macro within the DTD. Here is its definition: + +
+ + +&tlt;Version&tgt; +Version + ++]]> + + +Note that the version can only contain character data and no further +markup elements (except for Alt, which is necessary to resolve +the entities described in . +The converters will not put the word Version +in front of the text in this element. + + + +&tlt;Author&tgt; +Author + ++ ]]> + + +As noted in the comment there may be more than one element of this type. + + + +&tlt;Date&tgt; +Date + ++]]> + + +As in the element type Version only character data is allowed +in this element. + + + +&tlt;Abstract&tgt; +Abstract + ++]]> + + +This element contains the abstract. + + + +&tlt;Copyright&tgt; +Copyright + ++]]> + + +This element is used for the copyright notice. Note the +&tamp;copyright; entity as described in section . + + + + +&tlt;Acknowledgements&tgt; +Acknowledgements + ++]]> + + +This element contains the acknowledgements. + + + +&tlt;Colophon&tgt; +Colophon + ++]]> + + +The Colophon page. + + + +&tlt;TableOfContents&tgt; +TableOfContents + +]]> + + +This element may occur in the Book element after the TitlePage +element. If it is present, a table of contents is generated and inserted +into the document. Note that because this element is declared to be +EMPTY one can use the abbreviation + ++]]> + + +to denote this empty element. + + + +&tlt;Bibliography&tgt; + +Bibliography + ++ +]]> + + +This element may occur in the Book element after the last +Appendix element. If it is present, a bibliography section is +generated and inserted into the document. The attribute Databases +must be specified and refers to &BibTeX; databases. The databases must +be separated by commas and must not have a .bib extension. +A bibliography style may be specified with the Style attribute. +The style must also be specified without the .bst extension. +See also section for a description of the Cite +element which is used to include bibliography references into the text.

+ + + +&tlt;TheIndex&tgt; +TheIndex + +

]]> + +This element may occur in the Book element after the Bibliography +element. If it is present, an index is generated and inserted into the +document. + +
+ +
+ + +
Sectioning Elements + +A &GAPDoc; book is divided into chapters, +sections, and subsections. The idea is of +course, that a chapter consists of sections, which in turn consist of +subsections. However for the sake of flexibility, the rules are not +too restrictive. Firstly, text is allowed everywhere in the body of +the document (and not only within sections). Secondly, the chapter +level may be omitted. The exact rules are described below.

+ +Appendices are a flavor of chapters, occuring after all +regular chapters. There is a special type of subsection called +ManSection. This is a subsection devoted to the +description of a function, operation or variable. It is analogous +to a manpage in the UNIX environment. Usually each function, operation, +method, and so on should have its own ManSection.

+ +We start our description of the sectioning elements top-down: + +&tlt;Body&tgt; +Body + +The Body element marks the main part of the document. It +must occur after the TableOfContents element. There is a big +difference between inside and outside of +this element: Whereas regular text is allowed nearly everywhere in +the Body element and its subelements, this is not true for the +outside. This has also implications on the handling of +whitespace. Outside superfluous whitespace is usually +ignored when it occurs between elements. Inside of the +Body element whitespace matters because character data is allowed +nearly everywhere. Here is the definition in the DTD: + +

+]]> + + +The fact that Chapter and Section elements are allowed here +leads to the possibility to omit the chapter level entirely in the document. +For a description of &percent;Text; see . + + + +&tlt;Chapter&tgt; +Chapter + ++ + ]]> + + +A Chapter element can have a Label attribute, such that this +chapter can be referenced later on with a Ref element (see section +). Note that you have to specify a label to reference +the chapter as there is no automatic labelling!

+ +Chapter elements can contain text (for a description of +&percent;Text; see ), +Section elements, +and Heading elements. The first Heading element in the +Chapter element is considered to be the heading of the chapter. +Here is its definition: + + + +&tlt;Heading&tgt; +Heading + +

+]]> + + +This element is used for headings in Chapter, Section, +Subsection, and Appendix elements. It may only contain +&percent;InnerText; (for a description see +. +The converters will only consider the first Heading element in such +an element. + +
+ + +&tlt;Appendix&tgt; +Appendix + ++ + ]]> + + +The Appendix element behaves exactly like a Chapter element +(see ) except for the position within the +document and the numbering. + + + +&tlt;Section&tgt; +Section + ++ + ]]> + + +A Section element can have a Label attribute, such that this +section can be referenced later on with a Ref element (see section +). Note that you have to specify a label to reference +the section as there is no automatic labelling!

+ +Section elements can contain text (for a description of +&percent;Text; see ), +Heading elements, and +subsections. The first Heading element in the Section +element is considered to be the heading of the section.

+ +Note that a subsection is either a Subsection element or a +ManSection element. + + + + +&tlt;Subsection&tgt; +Subsection + +

+ + ]]> + + +The Subsection element can have a Label attribute, such +that this subsection can be referenced later on with a Ref +element (see section ). Note that you have to +specify a label to reference the subsection as there is no automatic +labelling!

+ +Subsection elements can contain text (for a description of +&percent;Text; see ), +and Heading elements. +The first Heading element in the Subsection element is +considered to be the heading of the subsection. + + +

+ +
+ManSection + +ManSections are intended to describe a function, operation, method, +variable, or some other technical instance. It is analogous to a manpage +in the UNIX environment. + +&tlt;ManSection&tgt; +ManSection + + ++ + + +]]> + + +The ManSection element can have a Label attribute, such that +this subsection can be referenced later on with a Ref element +(see section ). Note that you have to +specify a label to reference the subsection as a subsection since +there is no automatic labelling!

+ +The content of a ManSection element is one or more elements describing +certain items in &GAP; followed by a Description element, which +contains &percent;Text; (see ) +describing it. +The classes of items &GAPDoc; knows of are: functions (Func), +operations (Oper), methods (Meth), filters (Filt), +properties (Prop), attributes (Attr), variables +(Var), families (Fam), and info classes (InfoClass). +Note that within one ManSection only one type of thingy +may occur.

+ + + +&tlt;Func&tgt; +Func + +

+ +]]> + + +This element is used within a ManSection element to specify the +usage of a function. The Name attribute is required and its +value is the name of the function. The value of the Arg attribute +(also required) contains the full list of arguments including optional +parts, which are denoted by square brackets. The arguments are separated +by whitespace, commas count as whitespace in this context.

+ +There may be more than one occurence of a certain function name in a +document. If the Label attribute is present it substitutes the +name for purposes of referencing. That means, that a label must be +unique under all function labels in the document and not only under all +labels of functions of the same name. If no Label attribute is +present, the function name is used as label for referencing.

+ +The optional Comm attribute should be a short description of the +function, usually at most one line long. + + +&tlt;Oper&tgt; +Oper + +

+ +]]> + + +This element is used within a ManSection element to specify the +synopsis of an operation. The attributes are used exactly in the same +way as in the Func element (see ).

+ +Note that multiple descriptions of the same operation may occur in +a document because there may be several declarations in &GAP;. +For reference purposes all except one must have a unique label. + + + +&tlt;Meth&tgt; +Meth + +

+ +]]> + + +This element is used within a ManSection element to specify the +usage of a method. The attributes are used exactly in the same +way as in the Func element (see ).

+ +Due to the fact that it often happens that many methods are installed +for the same operation it seems to be interesting to document them +independently. This is possible by using the same method name in different +ManSections. It is however required that all but one have a unique +label. + + + +&tlt;Filt&tgt; +Filt + +

+ +]]> + + +This element is used within a ManSection element to specify the +usage of a filter. The first four attributes are used in the same +way as in the Func element (see ), +except that the Arg attribute is optional.

+ +The Type attribute can be any string, but it is thought to be +something like Category or Representation. + + + +&tlt;Prop&tgt; +Prop + +

+ +]]> + + +This element is used within a ManSection element to specify the +usage of a property. The attributes are used exactly in the same +way as in the Func element (see ).

+ + + +&tlt;Attr&tgt; +Attr + +

+ +]]> + + +This element is used within a ManSection element to specify the +usage of an attribute. The attributes are used exactly in the same +way as in the Func element (see ).

+ + + +&tlt;Var&tgt; +Var + +

+ +]]> + + +This element is used within a ManSection element to document +a global variable. The attributes are used exactly in the same +way as in the Func element (see ) except +that there is no Arg attribute.

+ + + +&tlt;Fam&tgt; +Fam + +

+ +]]> + + +This element is used within a ManSection element to document +a family. The attributes are used exactly in the same +way as in the Func element (see ) except +that there is no Arg attribute.

+ + + +&tlt;InfoClass&tgt; +InfoClass + +

+ +]]> + + +This element is used within a ManSection element to document +an info class. The attributes are used exactly in the same +way as in the Func element (see ) except +that there is no Arg attribute.

+ +

+ + +
Cross Referencing and Citations + +Cross referencing in the &GAPDoc; system is somewhat different to +the usual &LaTeX; cross referencing in so far, that a reference +knows which type of object it is referencing. For example a +reference to a function is distinguished from a reference to +a chapter. The idea of this is, that the markup must contain this +information such that the converters can produce better output. The HTML +converter can for example typeset a function reference just as the name +of the function with a link to the description of the function, or a +chapter reference as a number with a link in the other case.

+ +Referencing is done with the Ref element: + + +&tlt;Ref&tgt; +Ref + +

+ + ]]> + + +The Ref element is defined to be EMPTY. +Exactly one of the attributes Func, Oper, Meth, +Prop, Attr, Var, Fam, InfoClass, +Chap, Sect, Subsect, Appendix, and Text +must be present, making the reference one to the corresponding object. +The Label attribute can be specified in addition to make the +reference unique, for example if more than one method with a given +name is present.

+ +A Text reference is one to a Label element defined below +(). This type of reference is also used for +references to tables (see ). In this case +the Label attribute must also be specified. The value of the +Text attribute is typeset in place of the Ref element, +if linking is possible (for example in HTML). If this is not possible, +the section number is typeset.

+ +Optionally an external reference into another book can be specified by +using the BookName attribute. In this case the Label attribute +must be specified and refers to a search string as in the &GAP; +help system. It is guaranteed that the reference points to the position +in the other book, that the &GAP; help system finds as first match if +one types the value of the Label element after a question mark.

+ +The optional attribute Style +can take only the values Text and Number. It controls, whether +an explicit section number is generated or text. Normally all references +to sections generate numbers and references to a &GAP; object generate the +name of the corresponding object with some +additional link or sectioning information, which is the behaviour of +Style="Text". In case Style="Number" in all cases an explicit +section number is generated. So + +

+ described in section +]]> + + +produces: described in section +. + + + + + + +This section is only an example. + + + + +&tlt;Label&tgt; +Label + ++ +]]> + + +This element is used to define a label for referencing a certain position +in the document. The value of the Name attribute must be unique +under all Label elements. + + + +&tlt;Cite&tgt; +Cite + ++ +]]> + + +This element is for bibliography citations. It is EMPTY by definition. +The attribute Key is the key for a lookup in a &BibTeX; database +that has to be specified in the Bibliography element (see +). The value of the Where attribute +specifies the position in the document as in the corresponding +&LaTeX; syntax &bslash;cite[...]&obrace;...&cbrace;. + + + +&tlt;Index&tgt; +Index + ++ +]]> + + +This element generates an index entry. The text within the element is +typeset in the index entry, which is sorted under the value, that is +specified in the Key and Subkey attributes. If they are +not specified, the typeset text itself is used as the key.

+ +Note that all ManSections automatically generate index entries. +If the TheIndex element is not present in the document all +Index elements are ignored. + + + +&tlt;URL&tgt; +URL + +

+ + ]]> + + +This element is for references into the internet. The text within the +element should be a valid URL. It is typeset in the document. For the case +of an output document format +that supports links the value of the attribute Text is typeset +as visible text for the link. +
+ + +&tlt;Email&tgt; +Email + ++]]> + + +This element type is the special case of an URL specifying an email +address. The content of the element should be the email address without +any prefix like mailto:. This address is typeset by all +converters, also without any prefix. In the case of an output document +format like HTML the converter can produce a link with a +mailto: prefix. + + + +&tlt;Homepage&tgt; +Homepage + ++]]> + + +This element type is the special case of an URL specifying a homepage. +The content of the element should be the valid URL specifying a world +wide web page. In comparison with the URL element the address +is visible in all output formats. + + + +
+ +
Structural Elements like Lists + +The &GAPDoc; system offers some limited access to structural elements +like lists, enumerations, and tables. Although it is possible to use +all &LaTeX; constructs one has always to think about other output +formats. The elements in this section are guaranteed to produce something +reasonable in all output formats. + + +&tlt;List&tgt; +List + ++ +]]> + + +This element produces a list. Each item in the list corresponds to +an Item element. Every Item element is optionally preceded +by a Mark element. The content of this is used as a marker for the +item. Note that this marker can be a whole word or even a sentence. It will +be typeset in some emphasized fashion and most converters will provide +some indentation for the rest of the item.

+ +The Only and Not attributes can be used to specify, that +the list is included into the output by only one type of converter +(Only) or all but one type of converter (Not). Of course +at most one of the two attributes may occur in one element. The following +values are allowed as of now: LaTeX, HTML, +and Text. See also the Alt element in + for more about text alternatives for certain +converters. + + + +&tlt;Mark&tgt; +Mark + +

+]]> + + +This element is used in the List element to mark items. See + for an explanation. + +
+ + +&tlt;Item&tgt; +Item + ++]]> + + +This element is used in the List, Enum, and Table +elements to specify the items. See sections , +, and for further information. + + + + +&tlt;Enum&tgt; +Enum + ++ +]]> + + +This element is used identically to the List element (see +) except that the items may not have marks attached +to them. Instead, the items are numbered automatically. The same +comments about the Only and Not attributes as above +apply. + + + + +&tlt;Table&tgt; +Table + +Caption +Row +Align +HorLine +Item ++ + + + + +]]> + + +A table in &GAPDoc; consists of an optional Caption element followed +by a sequence of Row and HorLine elements. A HorLine +element produces a horizontal line in the table. A Row element +consists of a sequence of Item elements as they also occur in +List and Enum elements. The Only and Not +attributes have the same functionality as described in the List +element in .

+ +The Align attribute is written like a &LaTeX; tabular alignment +specifier but only the letters l, r, +c, and | are allowed meaning left alignment, +right alignment, centered alignment, and a vertical line as delimiter +between columns respectively.

+ +If the Label attribute is there, one can reference the table +with the Ref element (see ) using its +Label attribute. + + +

+ +
Types of Text + +This section covers the markup of text. Various types of text exist. +The following elements are used in the &GAPDoc; system to mark them. +They mostly come in pairs, one long name which is easier to remember +and a shortcut to make the markup lighter.

+ +Most of the following elements are thought to contain only character +data and no further markup elements. It is however necessary to +allow Alt elements to resolve the entities described in section +. + +&tlt;Emph&tgt; and &tlt;E&tgt; +Emph +E + +

+ + ]]> + + +This element is used to emphasize some piece of text. It may contain +&percent;InnerText; (see ). + + +&tlt;Quoted&tgt; and &tlt;Q&tgt; +Quoted +Q + ++ + ]]> + + +This element is used to put some piece of text into quotes. It may contain +&percent;InnerText; (see ). + + + +&tlt;Keyword&tgt; and &tlt;K&tgt; +Keyword +K + ++ + ]]> + + +This element is used to mark something as a keyword. Usually this +will be a &GAP; keyword such as if or for. +No further markup elements are allowed within this element except for +the Alt element, which is necessary. + + +&tlt;Arg&tgt; and + &tlt;A&tgt; +Arg +A + ++ + ]]> + + +This element is used to mark something as an argument (of a +function, operation, or such). It is guaranteed that the converters +typeset those exactly as in the definition of functions. No further +markup elements are allowed within this element. + + +&tlt;Code&tgt; and + &tlt;C&tgt; +Code +C + ++ + ]]> + + +This element is used to mark something as a piece of code like +for example a &GAP; expression. It is guaranteed that the converters +typeset this exactly as in the Listing element (compare +section . No further +markup elements are allowed within this element. + + +&tlt;File&tgt; and &tlt;F&tgt; +File +F + ++ + ]]> + + +This element is used to mark something as a filename or a +pathname in the filesystem. No further +markup elements are allowed within this element. + + +&tlt;Button&tgt; and &tlt;B&tgt; +Button +B + ++ + ]]> + + +This element is used to mark something as a button. It can also +be used for other items in a graphical user interface like menus, +menu entries, or keys. No further markup elements are +allowed within this element. + + +&tlt;Package&tgt; +Package + ++ ]]> + + +This element is used to mark something as a name of a package. +This is for example used to define the entities &GAP;, &XGAP; or +&GAPDoc; (see section ). No further markup +elements are allowed within this element. + + + +&tlt;Listing&tgt; +Listing + ++ + ]]> + + +This element is used to embed listings of programs into the document. +Only character data and no other elements are allowed in the content. +You should not use the character entities described in section + but instead type the characters directly. +Only the general XML rules from section apply. +Note especially the usage of &tlt;![CDATA[ sections described +there. It is guaranteed that all characters use a fixed width font +for typesetting Listing elements. Compare also the usage +of the Code and C elements in .

+ +The Type attribute contains a comment about the type of +listed code. It may appear in the output. + + + +&tlt;Log&tgt; and + &tlt;Example&tgt; +Log +Example + +

+ + ]]> + + +These two elements behave exactly like the Listing element (see +). They are thought for protocolls of &GAP; +sessions. The only difference between the two is that Example +sections are intended to be subject to an automatic manual checking +mechanism used to +ensure the correctness of the &GAP; manual whereas Log is not +touched by this. +
+ +
+ + +
+Everything else + +&tlt;Alt&tgt; +Alt + +This element is used to specify alternatives for different output formats +within normal text. See also sections , +, and for alternatives in +lists and tables. + ++ +]]> + + +Of course exactly one of the two attributes must occur in one element. +The following values are allowed as of now: LaTeX, +HTML, and Text. If the Only +attribute is specified then only the corresponding converter will +include the content of the element into the output document. If the +Not attribute is specified the corresponding converter will +ignore the content of the element into the output document.

+ +Within the element only &percent;InnerText; (see +) +is allowed. This is to ensure that the same +set of chapters, sections, and subsections show up in all output formats. + + + + +&tlt;Par&tgt; and + &tlt;P&tgt; +Par +P + +

+ + ]]> + + +This EMPTY element marks the boundary of paragraphs. Note that +an empty line in the input does not mark a new paragraph as opposed to +the &LaTeX; standard! + +
+ + +&tlt;Math&tgt; + and &tlt;Display&tgt; +Math +Display + ++ + ]]> + + +These elements are used for mathematical formulae. As described in +section they correspond to &LaTeX;'s math +and display math mode respectively.

+ +The only element type that is allowed within the formula +elements is the Arg or A element (see , +which is used to typeset identifiers that are arguments to &GAP; +functions or operations. + + + +&tlt;M&tgt; +M + +

+ ]]> + + +The M element type is intended for formulae in the +running text for which there is a sensible ASCII version. The following +&LaTeX; macros have a sensible ASCII translation and are guaranteed to +be handled correctly by all converters: + + + + + &bslash;ldots ... + + &bslash;mid | + + &bslash;left + + &bslash;right + + &bslash;mathbb + + &bslash;cdot * + + &bslash;geq &tgt;= + + &bslash;leq &tlt;= + + &bslash;pmod mod + + &bslash;equiv = + + &bslash;rightarrow -&tgt; + + &bslash;to -&tgt; + + &bslash;longrightarrow --&tgt; + + &bslash;Longrightarrow ==&tgt; + + &bslash;mapsto -&tgt; + + &bslash;leftarrow &tlt;- + + &bslash;langle &tlt; + + &bslash;rangle &tgt; + +
&LaTeX; macros that are handled correctly in M elements: +
+ +In all other macros only the backslash is removed. Whitespace is +normalized (to one blank) but not removed. +Braces &obrace;&cbrace; are removed in general, however pairs of double +braces are converted to one pair of braces. This can be used to +write &tlt;M&tgt;x&circum;&obrace;12&cbrace;&tlt;/M&tgt; for +x&circum;12 and +&tlt;M&tgt;x&uscore;&obrace;&obrace;i+1&cbrace;&cbrace;&tlt;/M&tgt; +for x&uscore;&obrace;i+1&cbrace;. +In the &LaTeX; output, this will come out as x^{12} and +x_{{i+1}}. + +
+ +
+
+ diff --git a/doku b/doku new file mode 100755 index 0000000..110477d --- /dev/null +++ b/doku @@ -0,0 +1,6 @@ +rm -f doku.tar doku.tar.gz +tar cvf doku.tar `ls {3k+1,doc,example}/manual.{dvi,ps,pdf,six} {3k+1,doc,example}/ch*.txt {3k+1,doc,example}/*.tex {3k+1,doc,example}/*.pnr {3k+1,doc,example}/ch*.html` + +gzip -9 doku.tar +ls -l doku.tar.gz + diff --git a/doku.tar.gz b/doku.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..122a0b60be0800c248419c3d7d998d96c4003956 GIT binary patch literal 610943 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
  • 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 VSyngpw1; z!quT7b*M5}6%2_=a+aJ76KNXM35~`l?1D@Q0HH%#IiMvJ^DDyD;m~bF3Uphffkc2G z0`^lW%Pt)K+ZtjGDfb!>hK3J4SAB2pXvma zRHR4%ivz?M`PQiZiG5@;CQt?fNTU+DPDW;O=N=ZgC()gIa0LX+EMT7y71E>@+6lu0 z0|WyC{{y9RLTA!&JUk3v%GFXJPiaJWm?8ox5B~y<5o!sge}R(16_|&d;uaC8i9nhM zic)9-)nV`po@Aj~V2cO{p(TYBp;E0JfJq53IROjl>IfMg0vSO7Mi5Z&DGLt|M?MV4 zj963}0Z&>iD%EJi$uj{O1{o2gRH*?e5dpt2vqp-ngP#iWDUuPs)+#t)kPSh>CjgOY zH25Ee5xS+poKpNB5f1$a{*QnX;V6v4!=y4%IN|v)5L*!-1tP-bY7LGUFrg+qM1_(- zO@M@k$m9SfPzotZkQgCh3RPoGpy+#?l?%lrGfC;z95;%=t+p_228scS&_Do1K)Szu z@^Bmt5D*bkr8Yzz5sG3hTpFfDHYeO4B8xzI3Q|QI5lS!=EJC_Kae@C;A^0hi%ObSW z&|t_SM`4E2K_=G(;%7u4{T&jB)d3_aq!KYIiXcUT>BPj;6DOz5P?!$Lq73; zcrcPLj7|h?S$GJxRD_~GM2+x?0L5e}kT`TwrUdE_Rj4(AAu^CnprOAnoKhGN@(Exp z$)uWpvK&N0um&dWH6*qjXDsYB7)^2unDB9Fi28?m{1|3z-K5L68Hon zL`9ed)xC`SR&d`M?mGfaBN1wOC<3w?Wj8(n7$pINf=o%k0J{<}_^sf+HQYCV0YfNI z6hUkP6qqRM;3fG*WFdk;DJ0{*72LOm`$iB_lnTh)B1ACdeHn^(!p6wbJpao;_sF3j z*a!+a*a)(}ANLEgy|K-8%c zpeCS26@LCBX)8pW3BddtrZ#a*P3cVu4L31Lp5ByrW+W&EC6Q6GQ2Yd1!XZGJh5DG{ z990(J6Yx#3tqKuQWTRX~97-d|pil`*#vRfXh-(=NN;TpdupAm9r%yBu--;9w!3rWv zBj|XMZw=a-RN|sEMyl5k^@*R@9$7d_SF{w6aIp0v(tNNZXqT{SAZRo&l8VNF@UVs` zpETGW_{48nI2G3fyu$e;715f|9>>-ottleNx02LGo(S(LsOW~SKpRj$LHCs51b>jG zgcgzP3M@zn7?c>WFOsGgA@hi(nhH#7ctT8KJCSgKg6UtH@(W)S^B_ zt2GpD6EGn_z(!CzC6owTv|qr;0t-^94GqR=4^GAKSD=FY4-~;=`OfLeT zP)@@)kSI)8>2F~kEGMD`c~BI(us#{KCy-7Jp^ae6gLR`JGeM0^8!qM2HNXtyMFcr2 zSsTc`K-*s(ri$QkfzM>77lKnt`t6QQksF%9vLd4foFW{PFfvx*AvjjVj8s!I5~@}O zO2Kl6LTDlq`%#MA3%vt0hXYrHs1%K5e`k+ai0D^?5KkZiUWJAU2z<4a7$~R`6bgn< zfVV)|sGt)9@s&n_VjnCEn2xE@2?FG=09gMh`DGdrAP%e=xrdQVMUz;m=GYmD`9(3KhsXXAS5)tq4CD`XR?j zsRAnxgek8Wga+dbI%odLxXR6YL+iCu6)b0z=oO;h{6CTVPy8oK@J{2Cwe+1x<^fKD z-zxl2C-BMSLy_PrE#jfb5(Gs_DQMq+af%O^3RH-}4Dp!ZXMxC4CIl+bIwe&h{n54p z&fzoA*%oZA3X@4b`b{2T0I*FO`lz8KjG{L|r4mtF1WA?HB3Mq7;Od!N_Af|OArsNY z=Q3K^OrRzKTB%fX_*2t1LrV~4fO@qSIZ6#?R081&F0;oCZ6LsgQ;^4WzH3Axi8pd?=BlNfH`o_#Qsg2^yGMB%oVYNlIfg(X9JtvrQ?| zYQ<`~TIt=+o}`^b1UQXH`XE<{(5&RmMfy)8W2i~#GA&6KmuV>?W~o9-r2(1KsBx;J zA~q%&XYxBxhBx}C)x>s{iii-SGyq+80hc8Rt5>?}M#__l$<6jONG$ZH3amx)D5tYQHTj{Svo*v*0v;>>uVk7mPz4Q;d*1d%n-D@A zfLMhBi4w%NR!-{#2@HLQCgJ>1hSWh4ASdL*Njd!DzDNtIq_5VPdDxFu42Y$pO3> ztObwv4q}3poG+h;Lr=K{2|*Tn63rP5Su4QcVL{Lfm+18=QX>rkN9&k~5Z|~|)(@y7 zk%ZA`3R3cil^Gx>6N49PU0>ohQ5$zdXT`nK~60BbGLm!7EO2VFGIsslLH}0V+|VuicjF2eVo^<^VXpo#ZMhB!Cv9MSRT` zKaGk}DK%OwpUst*%b;wqpOKVTsY!-FzBu0PLJMGN;4$b*7QB*cXt{7at0%}WgG7js zwPmRskFpm_1GP#<5L$%%o5e)feHDHgA^?$wTU^a1wyB;4BxFJlpo?OY-Dvd7$OX5o z*)=pkmm*wb`iG$ba+8uhJ}?qCG7^AcXuj2ZBy2DeX6HyKK{O=dD9HJyhyZO0trj6! ze4Xb%`)L6;AWw1-B}oLeflB<F zav{M2j7%&Q2{VFt%p#Zq2}{NR$c2eW_f3Og!32|UeZOQ(mq89hZ-#HQ1qjHTXk^nV z+`n%L9Z$IiRB)EB^52w@%kc0>ke@nIuh^scZh5t8+I+Jm=R2T9UX4K|k_BS~G6RPy z8UCku{7>~v7v+}tz07};SM=Wjk|E+43`UjWkRzObz@&&^G7yBB&KGaL`v)|Flm`M# z|2O1C>sJO6Jf?iFJEDJylz&2?=>I8@|26{g<{FrkYA6E#mJ($$DIrCHq>E)?`eI6A z{Y3wkPZ+Jj4W(|K68$$YkXyRQ4K+;esNqrrL8OC_l>q`2PBaR|nUYb8z&!ddh%+$q zfw9wkL+K@weo7@s%)i4dmcpy_JQTcvYPJ**RWLPygj5h!dQ6vbIYLlW8J(ia)dsCB zP()OV>>q|yE0iuy%_NtBZY9F06>H-vM~Nxd;8QZFF_wv7eWU!8oL)<0{a}8a=&J*i zo6u;|8U4EZ(nD}~%>>3?qHlY@0Q_PJP+vSJ%bC)x`!<4x zl2nC~0@IoFKzA4tj4E3$he~pCZN7{s7}Pi^ZWZZ0YLSszl09IE{s9H}q7m(a+)s{3 zHzd=h{(C&ixh@ggfZ9=JU)F@84ttsUoo+F?cT4o0ZaJ0k_ZueiXjpd_bYi(Or%7&kQX(9kY8um{XyHmvw zL4%D|YC&k&%!Jm=zS$X&k0nhYgOp6C7jm4V~it%=_g-BI@u!yZJn#T#>>7dB1gD!Og zg0(Xen&n@VLvKob|#UpNU&^r^_U@a@)MK#wSjV^CCfh;TvWACOPVvfoa#vdT9>MqNE40<)??tWF-C?%0t8}A zvKTZln*@qlw&E%ck8(g{okU#rcW zK}0KMWTYCb-eN^^mQij53WC?(iYy67!mr2Q7#KZ${b`M$ds6uV$(%|_70M^HI>`iI zp%uy0FpE$!nP7loyqH$0#1XXnhG*;2GmJoEU~Ng|BrnsBmQtg|2_u~e1CDD9kU(E4 zrSPOAE(m}Z2ymqeocpBcG8$7eGk5d62lP=Ug)dnrzXnhv0ZV`(Sdmf&Gw^m4piBXi zabKTU7=avrP93toIV{nS*kC-{mj&gS=G$Ipuz_GCq$cuh$9a|vzJW?80W_4t(GbU( zKF*41b);gfQqWbBK)VVyEHD>7!AlQgolcxxw!F|@S1~FP7W%KdA7b!ga4@II-QYsD zlc}VEl2`aZ1_D4;2q_Yz3fg>1#I;TS1PBt%Vp6(H*NZ2767!}vhK$7HOsaC+8c8g!SFKWCfJYx_t8&K4?*5T=+I-4QM%IjP- zYl~bz;2VTvnMQRxS z|AK!N#x_t*s3`gegVVdbO!pup{f}=&v!&^m%v}w~aGAg1CWQc1W%>*@KENqgmC=qy>TwnkRK5kOS z$6ti|mhp19phltu2LA>s@oaPze8|-J6o?-(e?}q4B>2#3FhxOhTllqf? zm;jmKg$OS%@FyVESVAV_%FE>B$yp5rr6d&+cmXm2L{f!_UWI@Sl5@ZLrebTff!+

    4Dksso)j|kf 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

    wV%65zwg_Z8DIJRZt9J2o?t%&z)Sv^uAk+6E{< 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

    Gr84qfuwbJkk$5q06M} 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 zΜ1UJ;f|gyUX%K;|~3u^&#n<5yq#?W4&&tFN$MLX{9;A4CR2u)aB8uk6vYOMpr@ z4BZY)6V>mMy<{}2;MzoE zl;uqsi0M(B38T?V0O1CExzR>w)Hfw&ZYRR!(_O6}7r&7EQpVOw^IklP{adgj_^a5% zb)oIvq&_2SK3N~{ItUKm+$&}k=F!zv+2r2x2y-BEgx^N}l#E^S0PVhn5&bk74NWo{ zB98c+Wu2s7BptEFzLaXI$yp5Ycv9bxYD#7C=G#Y4HX})}LW0_T3~RWe5t}=>uS`P_ zKowMQ*zaW!PC8Cl;7gNLVhfMwIYv!~bCY|X3e)Iv^OjCPb(mT4(?Iu+-())+a3_9a8BcHFdHMI?cf~dZ!LepK;l!ZaA$nu7IB@%|24upzG zq8O`;QKkei51lB~_beNlIq$|>pAq!s51Eulv5(tOWU`DD-6UW%(OaNL#FZ%Lhnfmo3h&RdOVUnhAZzHhoCaVNuCPV1lHF>>iZ*NR!USpOtom{AI ziRl&Rf33LYIQ*1!M8)>Wp6tLRHmbw#WXUskG7k}p#;htgAx6L>%mK!zF`hehfHN6_ z7nBbfFUg85*3$?ewo^-Yu~H1)fb1d>Ce&}Eh{~?RLc4urxnC+Lj7m6brEG(&`7FIqpGt@QdmNZJD{$|*2 z7p_I(E4uCawvVYhvMNT5OGQ5*==x7FNX|8W4VCj%Wxu^}dP{`hn%k~)vkz;&Q@{Au z#UP>~Qr_n6sd@Yy@iKxnrgLdO)6E-ZV)kf{kwu~&{HtIZOSRUn>mh7d#G-dJc8(-m zg4Ddgn=vPTg!uM!nl3Pfb^h6tRoW!si-!-=bAu6K2u0s%1K6X8@ZlPkI0AHv3SQYF zyK=Uix43D4;TU&R#+Gu4LGpggvDbV7m%vkVTd!jWZ_@1=Csxr=g|Azzu)Sk%BvCK^ z+RW^W?^aikh;QWx;xMA_h9G8S3Rw1)_OK}XB6#>Q>|_a!=Nm=#qt)^<*qZsl^$XN~?LmGGPcq})TgCuhJUyd1&|rO?Z_1-2 z`0lzkEg+1JDduH+d%20QET|ecc$dk7SWCeqqvbVKe@=EFH(RJjNtSL14mqN)kqS%@ zfR#d<)YKeUJK7 zscXJUgG`sUE;0?1fstq>)(%~TM533H=ne0E$lzN;GEm-q*)26-b< zpPII&8Pr`FX2cG~yL-9S-J{8u>m4!|*B_KDp5#Af+N(uW(p^PX7WJ4Z+UG!TYF_9U zc_^GdT|DR|d3x7P0uIHGijb5SS20F)Elby!ya9IaO=r0I#w@GJFaM{m*V zd5qDp%fmGhvNx?SUj^jP$!ZK&zg}9Zo`LD0;7Ry~zu*HL&qt1DUn0`tKztH3A4ZkQ_3 zXrmzg;L)p`)U$&0&xuPr4|T&$DlG{X)CBSFVrl~_uEd3K8K5;zSi`D)d~CuskvnAX zUvMz!vqy4jKD18~4SU=A4%-}eBrc==$s&`5f>02G45~U$T&1=BvYa&XW#mp^lT_u~ z;4B(962~kMTl)J^ra0%$J=Mh0+lAK|kT)O#J1I(+wDMN=t`hZ*f_H55qcX4*B;IISQx_n(T7l|Z7RMyTh}yBII!2q3I!v3GD%gS-MKy=kUt)s)6HNQDu4;)s0n$>q3VE4F%8`8hX30Dn}vqXxK{Yb1`#{mrYL z2Qd}Vr#EjN<~XguaD4RYE>ns)A2R=xizk}@?kmO1qE19z^9HR347c_uXAFDED10AQ zal+BMZg`6Kk;d5x68w>N?TfDI(2#y6?h7Myr8jodUFF%?txkK+HF<0;CeNLW>==zE-PR%;MwZizadXvVSc+jWIU%mU>8b2(nMZCngSWSUFH(T9x6dTBn*0XjfB}pMK%oLgo-1K>j z`Vc3gvk48uC@gr?V&Y9|*03@L_BZ4;sFV0lX^lSu!#|3QK(2pYW&d|+jX%Q7|C!d{ z;`+_B1{eDuVKWyy_|KK&&lU3L`g1zt51Zc`@B#WmlZX@Wom;>_jz1)c?)?P={tia_ z<8gk=MacKwUFbh%k9(==Y=KT)!~n_}7Mj?-N-#egXYlT>mfTocw?12LAUG4FBl_6fVH8 zpdSGIt6H&|HuK_GzJ9!$>g78TDuJmjn3O2GO?IQ3f(k|QRuqI`l|hm@f{IQLKkHNr z)K?LR%}O&08%#?Ew2#_z@$gjjdh!g!pmzzxnZ+@dU~hs+*vR7t?{1QN#w?1?;_wUt zU-|=4GNQ-@ctRj(*gcgWC;B4k+R$I5H{Z1qWBQPMz1mNE9jR+rUICXtY>56)A6+Z9 zmrX+Jd?6gC%sZ2et1eF5gbPx!81w)W@T;$F%|N1 zT65QQQ=6@qF0$Jgm{dr5LN|rf^!_v=Dv2cBM&b#=3+{o0GSb?{;|C?3B#$der(p5T zc~nW6!S*H_Y15PX$q)RI33|+xUVh9=5gh;vb+><@hJC>PQCkiiME`o@TW?#=2h(-L zqR~+O#T)NpU)%0_G#tHl=jZ)l6Os;_X-f8G@*{0-*P9#jNk`&K74>urU1b_8Hp`h_ zK0xm4GsC5Jn(Md|#c$UMh58>lZ@x z3+|4JU8hcnrjD8uXo>UMXZ5ux9No&4VJ({blFJ;)3?d+dHqquuA47@3BF3nkVFV4h zG3{LlSG=Rb@PJr@Y0FC?e_@MC3EDM(C+q#;D%4;$7k-!gIm)b8B@o_v-e>cMZa$NbRk{| zifr`*d3FMsk5=vSVjfX>t$L5Kb@N#o^H&y@BH64A2z87s1tZoE;4*8%!a8(1;AR!& z@t9u{wi%BH!s^mwGfCbaaCD%Yo9E$(b9@0K_60r-%L^mcBMrg}aCxQ9wKy?kMD%&y zZL!2Mr8ghTlW`Y_w|QnR*|XCB4z;NM_3ZWK20Mkq94qaOuEcS)T?5+4_%`O}wBu0J zaPZ3jgjCR~(y(3*p_=zfP&~R9KiQ_rO2^~|`sRm6?-VawG@}O28;i<9*kKqt*iabo zFOq8!Hu(^S5t)sBzmeHr<+Vzl#8V0lQXy4!q0?oetj3e0RPm#bph(zL`0Mp3F_HQQ z&GzcT&g;A#>C^Q}?)U@~&?kg6(4<$cjd?TLQ@)+^pd0G_;4n9V7e)890oKzV-Pfgs zGphX*%dZC(F2aMZ{H3DRO5Q@X-vI8+lm^^9vAnLn{!uS`!H|&#m63U%qk?HrS|lvf$zHM$0_#>h8hVoFHyVQB31)j) zN~suZpD^fg+>KOh;CHu%%Ii5eQn&IYHg(opUHPs!Iiok@lzQ$UfJ#Kz*BvCy^)bvW zNIO=bSm;l+{fRO~8g-WKIRccM%H9+(764x2MbCRL1ZOUmU{L3TWgGB6a7$O-jl(vn zljzdtV9SNA14<6vvJAE&#AQRG++GzES7HbTKSly&_^lA4zZ{`_Ttr|Vf}0o->xmcT zl;PQ`@M?P#EPU!7WN!=5e z&vTCiO7V+fcsOwqFtVWQY$43A9!y~bnBdjCLFm@EtIaoKT| z0a3}|Qo#7-rPayjE1L-0=L*IY1oigxAG@CGl1i1f*>`y0PjxTZMEE-!?BXte>Z_Fn z=%|0&v1(Z0wQ5@mihBqPXH%9-zM$SWZV+QX|CQ~kiuO@uszQ-a2|DBBgxmZgb2hOJ zxu>XX;iI%-F#43W#jdY!b!}*P0Ort|0Gb-S`J>p#U`vcfLV|(O5UsG<&)J{LYJ{^?vpK-C6o+%p9%0xj;&_H7L zTUiI28}!(K8VWT%L+D<0U8C$y23<8u-khz)t1D~0j9twXB?j6+lSw87vr8io;4zkj z*qXH6Q^t?%42>XqUH^d&6)3WDI;qTSRtr_bca43|CiUK-m7L@HJ<9W9cB+W5R_a28 zpMiW?xl=NCkjc3nu0i>_W}NY&O%UDuAd_LALC@eUyGALKTad~(eQtZlR-bKrv7Ni0Ri08 z$}jHtqiX7phG6hL#X^6ss)2q~P5sgE`{>ADbTNW{6ixln?t4*<9rCluCRDXa75-=KQO5v_+c*2oCa>}!T#3Vxtx!u#N!r;!B% z1fHS-F1e#$kUwMRhZ^9|wTJu+F|17nD;CXbA|@fOR5{E z%wxRd%ZA08Tt-#K_=KP|y9Y{uhp7VP&%0mxLIL61LL&Z}24RAxU80s3Q7*W)J$X<0 zg4Ab%C9#pu2_L5`nAs~7P_(wV`kbt;tp_4JxLJMijco6#N#15DLw@+qqt$ff)!q5I zW_L~bu{Iv|Bp09BSGEYt9WBL)!*m?RBEp$?nN+H8G#E7fQ8|G-Do1a#(sf5%k33S} zDssZYr!FZy?NBj)_RuP=Co8A#pqW1cp>EwXmhCJjJ886`^o*!>u%7XaNs6k=#M=R* zrG?=L68E87dLlka=^3W7E?*uL@k?!g8O{CxX&8>oFjvo{^lYNFOwab0?H_9n==Yi9 z>=tkXGK@X7)n1f>N_%xGH_T&g`VF;GjIW_V6qeSDak_8b7=|glgV+HSMw(N$H~_B- zbnSvkdgJ}ItJ2{~PrY?ZfhV+O&V{4QH64#{xp{*kcWgO{V{A+?SP7?ZlPT2FP{}wu z92B+~T2|M&Ga+Y{GtQC={<$BeiXWV&z~$>zRG^WgBA@iR9bO=_ahv-2cYIt%MO+B0 zo<=;(#J~g+28C~2(O8#-^-k}h)z(mBfApSyV(t-Nw!>1~j9=N4!;9BN0_R5kSZH;PD`5P_ZEBI*mSaBIIEUA2fTvE;ph>om!HZK$%QutgC)r)zHL#N&L zqQuZ&bdaw->SBz}w2l@GDb9MI@s8I&md~^xU5{dJN7feousW}BoeUKwyN72i7ipi? zl9CT%YdG*^7uZro!&lO=q^i24GCOuT9C4ft;<5B?dZw%Z!$-HC8PNm(P{yW;DHTGP zLaIGw2$oX2dK58+nC?n5mw-2D`1%5lu(bh(Zrl*$yNWUs;;BuBC2K@M5@f1I`fItA z9Xxy8cB*HNph9a{6Xk^q9!!c%yY{lTGu6Qv7AsUHTyX1LXT0-ku28co*Hf62)ynMF z2KpAw0HgMuLsO7EY$YN(3CO^!plH!P^}_J>`T|>I8@Cvq=5SC5sIf^TSUzXr0QsD14s}9Z8{c%FRT{aGtq~_+h8P*Ve;`?9cK$ zlKAX~gJwg#8`C0UHHEN@aeO^>QsRYL90tIcik*HfLS8Pr*2LxBr_srIQXAA7klr(@ zJZCZF=^ZM{R#%izSrZ~ji444^=c;fSu;CxKsumvMRr9FMY*40Xb%+4>yKU!E)!fp+ z3Fm(Cdek5JFLB>pxHZS$63y5iC<}ZeeUpi1QcC*tM)#&>+r&#N&KB00q3*!P0WCDP zFYJ0Nh^>zoa`#Dz8{L%>R+d8-%UjrK;*oT#wcY2D!pspB(uX%E65}K8Ugso%%$a7d zwBD%KTK5}G4Hib1B{iyulVTA&Sb;olXr?;ZBPlyfO6leXE6E@g%a9k6!8CC2FpV$=w5d*G_Rm=HOBc*}m=}w6 zo=n0P@u@oYMJlq0ms)gx`0z%Ov=Ce~;2G$b=I;G6?3kl{Lw{GI>~xcVP;!(_ztV|IKu902>;zZAw2X&} zC|;?01b=BlHABK8TNq)$IzPxWB8fTSE8y1TD}TTU<2Pez@OsD`K@f&qQuyT(mzX7Z zgE#@0n^cUvj5<6H&lQ^6x)KrjtV2l<>bf!5a2jI0^@8X^r79U71qm;Xt}yW!nur#1 zyymi%|2D*SV3U<_mn;b`15JMJL?-0{Q(cFQjHJi@+`>NHhR*ujt>?#mze212@&L5_ zpdqeojDV(`RY`GOC)Y67{>7qLzFrKr?D0$@(*_W{yt+`mcUF=m?5rcK2{sv45X~Kx zo3!cYmiSCwmFIk9X-0RkZ2|TNaLD-HR^iq!o6aiNb+(!0m7Xm;A>WmyuYM=s`}hq; zf;?$ToHoyw_1K-s3l%K68t*T*ui4KNWSYA6stR6mJ+4yXL%xX~KGNdme7dPo5obB` z=oQjXnmO@d7?JZLqi?gNbIpgo5$XtCm-3h4hj0K{{+Jp@-&f(KnxF4((y1EzA@o-R zMv9*%Y465v-+i@7G|(iW%J=RMc0s4c2;%!c_yy!~{`c%a5cHo{A^#ropg%z#fa5=cJT4&gC&>HbP#qVL{m&Kf z=L-CD{j;VA{IjM9{IjM9g!}>ye^+q^$jN>WhY(5#JCK#@I~3lpKq&Yh9gbISK-Om@iMNcD%n(ElX|!10rhzkLE73c2@@ z^BqslRtY zb3y)&+Bfib>&gJ|{dWa({?kVY^m|eHH+%&DjBmzqSJc!K?t_ zFG|H=j(=?k-~zLPelh>&kH3BYf6PeT--q*;-R%Ey`4{x7@-OHwmVXyDJ#6MbU?U%n zc%mVSDZW9utY@=#<0D;pkybp<$?*(U_TvTSvmBN+TBVhBQuu591LVWOVOFv5gtQe; z*k>q^O90P8`j$!=EtMn6q~Q8??aUWsUE}=&Iw-KY($hT zx4%w4(HKs2Ni=Tw)_WTgkvhF$ep0qU(dJDPM}(<~Lnlco+8HOx31p1<)U$Eg{(_2; z{$lF_n;}nTkU8dciloatQSOAt+2gQi;Rg}KSM?}}0gBs{CEY6rrDS^QDz+4wG-?3-8! zghwb&*D`{=JFOe7`0lFv6_jjW`$`w6>dU|S;xtSAL4{X7_BjzZ%;yKMzZqk1D~#O9 zehJOZ@WmNgQ{ZN7kxiPtVa)Ftv|SJVb{6g`Z?}$(n{6NHqw%6Gy&8tDnp-~+-(v0> zPhG*bM88fy#mh9~Q#cMr&+Tqhat?W~Y01yTb}rg8IKr_&`ga(Q>+W~ z+FANtvxe2YlQ@~h8*5E?I&m^^Kt~Bka3qT{dUK$5w$9pJyY!jKJ5xV(z8A`sDl)+@ zB#!zSA0cLZ$apRvrV{!gTqU%gUWqiHMR;99#o3gZNq0pwi1{d@vR^#1InQ_M>01Gh z7`#Dlsq?M$y!ZTWSR})KBD6qatlNi|uc0K77@hT$0WZ6ryrk?(u`OrUdwVvmqw`2i zEnDK&T6if||Ec?{ThN4Fx>2s}0M{}6D^b9eMxYR0XOk~WR~N1BHS?Msu=vmk9-=1C9^nupRcR3@m6m`~~29f{HCt-Hjp!7EaOqj0YbpE?xkPOL?CQS8+0 zxjWI>ALGZ})l~=NwFLy8jE0P+R@>u!oy@Ws!j(8(?53)R;az1Rehlq^_xI?|oC%H| zgW{s2WPZLFB~Zl4@s%SsY^Ori;DPZ(;0)^pD3juYP`7jYja|s-$pGX%l7xOXu7cE$ z_SwRauC`@W4=EYpi|XYsv4As;nm1lV!>(|`M#NY0%`7WOw`lAtzL)}!HS}?)v53*B z!1P;~=$r_KkGRn2OFP2g$cc;-0>wY*dwo+_Zf*ATaPzvhmZBH&D1SMym%6ds25*63 z1Scva*!A*U)zV3xB(_7V9h=;YVg4YsH)#UHU(N-M5;YJW#z!XAbq!|848C-gahMdl z3;NJ!cs7_mKKt7#eME9pZiO=s68)yfUcAN-Z)67hR+JK2fjbf(QM%P9GJ0l5?L+P9 za0_Z>sSk8xH(OK>%|XlglhGU;j4C4QwU!Z1&-j$0sVh^C#+h2m#=aJaw^MWY#|)Oq zkTq3j6~5x*sB>HWaJsfF=CFkF;yel@dOG*$|xx?uHwr=6EWU8+mkSqC*L^Sem9o zjo320_Z8xmrkg8bi)_b)Yj-S0cIME)5Ct+$DH$4elD;3GkAh?t5pt`~Ie9(x3OAu0y4F)vA4L zKi{*~vplSeqErp%XPt(esh8R+gUHGj3%XC0*kW2eGftDPB}~yo9uF4XX1bw;CP%m* z68fe1Z1rspr?pzG|StQVPY2jJZG3Pasx23r~}X*+HP zDtjn?=4%Y!a|+%>)u$Y2rD;z#?{2;tGa%9ss@C7wfKNJu=ZId?3ckhlDJu68)E z6fXPRb;8c@LWiJt%-iDir)vBZ`l?ro`2bz`+N(8-Vl~L|Z>NWeJ;)yzxPravOR%QG z13vm@iVg6%G(e5dpS^vd#k8WIP?1))G2HkSumG)Wxaik6?W%muP+}1StH>!d*2{sr zFm$9zni`5@P8OW!t0{_Oj`*RQ$l_Gd0!9hf?cmJ}?!84&lof7{iLym+VKF)c1mwl5 zKyFcgi%45FGq1QEZwadF1`!CzllD+h--|V=57$`X5JXbJFQk_WV3ab> zu`qCYFu890#OMl|@EmzD@&rKgSN0*-=L0aE`LBrz@Lm+HR26_<5Qzrp$Mo^UX&!Q_ z)`+~y#L1c%h40)76?r~NU0worgyVRU?7JDx-L}}+AJOLRt~Wkq@{gwdeXd4YtJ9ZgO!7e3H%Woef0UTNPbmQX#gu~I+YSGIAUh|JnVsWL1l;fKhJQbhjpOOZvH!_9&j0tgALh+J z+Hd_qP64_8|L$@0FFCXSq^O9H2v7GsFRf1U>Cw3hw2ciKoH{=EpS0{3T!Z zT`9Bp#-mM+$pz(sn@l*MQ?!EsZ#j~gdAWlZ3FC9l*w9I2K^tnT$NfazXQS)8osdD7 zNnseufGFdvNisvTFFh&74X!WU(MOnGoUC2VVJLoy+hPn4(+icTx(n|0fU@tP6zni0 zrxe6i;O-2?Cw^2nA3^-;xLk!$Wi5^h33)aZj{EkQjDe zs^QKQd=_BS$_)Nu!SxM3HKt`nFs4T&Jq5H|%1wYLt`fFOLJA99d3zQY;+ZJ7xfeRR zzK!VKkj8R*5>0#>eR;IVP=vc~-^c6S$NOMg?_yvgllA^Wu}YUW+vp~FVqj}`akqZd zcg?nW4b_Cep2^~N%4cEkyr}H(aL3?AtiHt^%I3SLX!p0`9dlzwq1oq~?bXu|f|9-j;YVm+G*(`_p%!q5D^Nm^Wp@bRa4eRsqY0(ZWO zkgI|31MS@(#Xz0nb1zOQ`tsxo>QLA1KStd2$9x!3>y_o|_`I$CSv`KF`cq~|@Y5Ig zzwij$YS=4xN)tyJS?SiN+6dSVhyN549E=)opX5#K>nl&iZuzd+bd*P-kM1fOhaQfD z0{T)ddIl1M2qUK>G0EI0mE!KTvIqb+GHBj=zZMcwDmP?NHyD6}_jN6gaoSs(DSn_L z9(WNU5-(frxW_^xqF#`|a5tgLd?ql4X&!4{e95g>BRUzob)J!5!d5YjO2#@TPF3W^ zA{9qA{?Rit0GJCek#r*>&on;HqB$Q$fZYIk=InR)eBH>QdN}@~Qp-xKmbL^}b z+;y_d7;CT*(f4LGmEBv8)I1%XuJq@d4E;$yT*xc8oQ$lI7`CsM%=~X#A(4t$La@;| z-nxW~8>Kkb7@U21E3B`d#HNR|ZgE@y^J3cRwUwbIo zlYs5eGd9^lDi8CDZoO3x&ppy2MvvV&+XUl=OBZa=<4Y!v*m-Z>OPZI{Do1&JAw--G z3>B%UMD8jw8Pf>*LG?Mrp{0C!iZ$GyEpTut^5JrWBG9a4;}_1N6d#+^Uy2AggzIg$ z295^HaE@BhVV~Gz?YQ?wnu@hH-5k@Sj}1dw;>MC`wYYONRuvEAZ zLpjY1+Kgk!jd9B-W|x!2T9rI>74{??no|3j?IV6l*XxeW`QGh&VhBBrie_ehSyTEd z{y3DpuWZ!L*E-N|lJzh>yjreu|LwL~D_ORkP>23MKb=(?%%gR9(>3_1$Mp9?r%4#e zfAjHu{(jF{vBe5mW4ijg_byz)`>!RRjLUjGK-$8l&h2>$jxXkEYVqAY% zi-9=*tF_oaU+p=5e_I3pr5iBUzwpeza$EZs`^kT~$NekuWBaEY-oN@+{xdS<;`rx3 z*q`oDfdAkg$Hx9=_qe~<6nsiuJ!XLe6K-pac4-&Y2|B|Kj?a-cRyqB5vyaqOO7v>j8u z`#w7F+=9U!J$cJNPnwZt3vU9b1Tn5-rgkIKtoE+X=#&*yw0TNu=2Zq6m?z29T{j-w z);6m}fVnS?y+k}V&#xQlqi1Rlcgsref<=!G-tF()zw3>&K0`taF2t~V$N0vojsC@a zItiXk$tt?v;VW%72c}dulhH)h7o+K6Uz8$`EEkZCq*On|BhS?9y{64rnP>5aGY>WE zd1cRme&I3y^+L3VW}s^YGk++eis24Z*uQ~Mkay*)O>y&awl0BEh;1JC_fOT9t4f6u zPBu5liJzwl-{y}w>)uN5Ai|qz5P!XkR=4?19I_YM| z$T=OAWZS1OQKoMv3=Q~P-;A%!T*lV99pSr{>{5lb4mDNvmF$_M?;zBaB|u7Dd(Gy- zh3|5te+&6$8=>l3@X7&7GAjJ2@9`4Fe+Rnd92GG9>i*64`Re!jr7>TtjlTBBqhvroX>JLLm_Ft&_odHiYH}uS@6Fb^AF=H(v}MFnk+`SfVUpzms1v(7mD7DIgab z#J})DHcpBTSO6qGIN>F>97B0t{|50LMs}7*i`=m_b{;W`@)_Hdx2X^^vHxx?g4ZGr zrjbWr^P?v@1}P1`-ipK9CT_hehivzdjTDCmIovhG1m7`NE1Y;(%E$dg{ye4oP@)hc zi%w6BSGx7WpU28;63~Ntp?S5v{Z084MiGjW`B*IX=wt0jasAIGEKMK5UmK4jNR!cX zVI<*%c|ucy>RTWJq}=;Y-plF)PiN*d7iY@^vcj~y-hxVbQAw@Fh+(0VCoPyNM?-+s zl8;#IX}{sLj`@&ZB4j^3V=K;OVc?4{WB8>p*S>Fu6s?T+?hGqeRPTeg3|fM2{JTXC z=j?8xI$=IDMbF@e9@Qk(kcYd*bV!ITqLy>wopggZ(1T$itP&tfySG<-G^+yAupNfWD$P%s!%B?! zR=>~|;k?yhpVW(D4trs^&0dq1mMzHKm=|f7g!rJA>Rhy- z^N!S0p8ewOXI$)ER1`N z?G87i%P9KU=9=@w@7y_A-;+>29WWr2K`#nCMcsT z*uHl&MJ}d+D1pIs+nn?L*k_zA@zJyw7(kGUzjsF}(^&%yE!mm&#H2xaug4hG9qrUA zp+~hEzF<+ba})pMj)X|8JZkQ-0gU3uj2kmcG-Vx_13eL*H`#97q;`kUU&3?)<=D?` z6HQ-1L;2Ilc1gTifK`WZ4nsV-u|Zyk4T;SZLTsFW8`{)QO&EiMyS?tjfY*+I&n{wb z^`_93GEk96X8W9bSE-;xW*7YGxO>cCDS$PEbH@ihU|91N{m2VEgml&ftIX1pDVd{uP4!^CRJZ@e%vi!r}k( zVevmLH~-q2ko`}b%emP9qI3DC`eMvH2PXXKXh`!yo1T?UbNjm&-Vz4y;reQ%`77v{ z@8q&(;MKRjHom1+C6&HxJ3IGA0VuY}4DHS_tA`SP9H@((4r67KKVli(s6Pqm`H z+!ZjD2W32Xf4P`Uis?SB5EoOQE8FvKpip^?%BU4!d@j7ecER&LB&Ny|!;k2?f|*B1 zb)tlCXQ~XTBKkAzvP68a2S$n3G=S@yc0Y~G07~Rr44gWqAn>@w}s}}qtfhxPD>+P_JY*B zyLH$LU1RAams<0>T8M})dO=n|dNe(Oj86|c&rMiaRw4S$sq_L@U6;J+vI`p$_G~z< z(lbpb=MKJtaURUVDHM%PM&QH^rM$N5nx2lyRF_X9^vR6N@w)M})B|B-v!}ge>)qbS zJ~}A9yO+EU=eYZ>{H%g3;4nhM>J#CTMt#7dDZj+>IFM$k?%!t$w6`i#UC3)3$ z-!gGbxRg-zI)K8mL_edDkEuqoYM3A>(jgSMYb<-f=}L@;5DEhxU#T$pBTL#|4H&=? z^z5F`4;bn|p(dVA`Z1)HhixY_(3S*;Sw$xg(9?x0jKeJw0iuQsc` z*IMB)=?=4!@8>Jt+{dzaQDF0JZQJMjajj+Z6dEo>UZVUSf4jotu|j8uCZ(@+X#(Z3 zs+|OtIC3H#dn}UL5Z3YercvUDrGfuRt|h+9rQ0dV`6qBQkz79Mf|%{1nAot_ z_eH-Kn|vhiaL}R9qz%Bv+IU5mwHt@LSX_ZAwhaI7=U;Etbm{?}5(luBZc4Yd zv^#c?;0u$jt5vd-U>GD|Q9qKC?Uf&!NODHe+nuYf`7AId5k4bHQO<-=5$-HK5oCQ< zkOI&3Nmq-aG8f0@oWh094>6~RgPzDnmM#Q)LK*Cs!7zh z+a9L?%++QzGwW?EhRCzVJ-v!~H|MlwSETZSFVt@GZ$?BuBAp7B#zR#SFfMJEdpizr zTzq|D?6R2IlTCrye>n+@Nk8Ek>OAs#U*9`4kVHl+WM>vF(BMQxlIQrNGX;bY_GQzd zc34-!E)hnwq6CcM)kngHDnuPQ78v@79KR10+T?JGGwPPS37mZ67}U|T>*l@sjkqEcMz=%N;l39bkBh=(@%-T07rr zQDXFdJVbfky(mFq#-PthqooXr*Tpq@vwM;F(pbyJzb}#EvsLW~PO%{#N9|DKE1@ya zq+xg`wM@!+q$~oBqa2n)F0f}?^i%J2{}_?TepIm{>t2TR)jcU@$B_u`Yux1#q7C)r zeP_36r_2M{2iU+1R$R3u0=;h9ob$LGt z!z90idu=86%o~-?7|9eXDGheHAEDZwm=RL@+b&Ml*1)R(I0`ZYh9&rx>awi3T4uuo zi{`dmwc@Ta z^yT2;iwG}5PNso3A*=g1=MU3VVhEA6{-wu`g?r|WVhAs%AQV=U=EL!a_Jh`wmnLZR zsZs&7t6tsY6_32|@bi*oZ!pOsAD&jBTMxTFBpul?H054!<1c5nzUCIaBXOr`ZmhT) zs8Dr{mt`iy&P}S796$rICw=D()QYm^M9}dF@BEVS&AU(@s&ytoy)@O&@+^#xLM`bt zfJ4jRx!WT=|0HAemlxs7A_yC@{Ds?Q<{nN>-pxUQUQR;kjU`Sh7wY{>6@w-3V=i+; zmOEK|`Ra@TZJ%@AGCfyq-CCl3uG(e*IG-~mEsS$f7t55aH}0r8lT!An{r(8;Rcdkj z$AvKa|2TaE+5eYYvi)19?|&?;ezy(h6#fmoS= zWI(nbZG?V2o#pz`{`Nn7?8)|LncnO_okh*c#mxCM_djC$QF{ymf|x;I_J4R}1Hk`D zB0Ae2!(;pXvraayzo;^}{@(*ZoKJg}?N3z3?_HPwFp%v>dt~-MQ5oQ$!O(wEOZ-2? z$X{s>`xo`cpA}ZK|HZ=UFY3BK42t0o0hyh%d`fT><>KL(PBSF28}VB6&(PW62v*$D zs-!A{-ck$2SI^ll+M!o#)HnL2?v?q>rPtIQMp z`^Dk!JEQ`X!{BJOBy&6;Kfrk!`8I~4#;SjEgz1d!r?jw8>aY~1=_I$0x4f=3{Vpx$ z+u3sRSzA7g4-W?y2I#nc^^xYx^5WgT2#-V$^Y7=bFEVY-Bd}{j)r%)ia3i9~Pb%KI zlZbT`a>YPRbe1pfdh>*-=d|{`9>HhmH%dYg4Yz_bF_m{NhCG0|%?GiGty7JtVVXv- ze~Y+kV}k_{he4R`DZMP$)>+u%G?Pw)5mCHyQ+GK}TBk(eo|y2cF4!)&w)yJ0Uw_D9 z{L%hdadGN1oQ1K@R{T6}Qu_0_=iUV^5O>vykE(kt@3)d*l4_PKKpz6?E zJXq)!XDt(@k(q^uOdsg}_}#5sX$9M2uedb*II74wk`YTDO24ZgD1u*UtEqT3#micV zSR5X}rpEaYIB*-h1xMQMy7+0n`6!gr7DaxwevC77;H~;S7+!23i&Ol@Q%y9$ShDja zEpL#}t{(oEEgAd?n?Zu;&%jT2jiQGj*;gEuQY4u(us-zL729+wFl`u_(Wdl)*be5n z&{(GGn3_G$72`gGdnrJyOr;@)1?$+~hYUnEW|B%%BD)U+?!`5i-`@A6CPW%Z_QPDk zw>2!|gR?IZQ2~l^va83j>11;^>M$bnj+co>5Q4}=PWs&MZk4v!Dm4X~7uJO18_j~l zbe|u2=hg%?Pj9?%F@nGEK=TKckLObM(SLtnpNT~nv;*7I)uDfgL=NAK?3L<4#3_|y zuwoJ~RK%ybb6iNpmlH4{Hdse|V?0dc3<~CEg^Dl)I$qqcIi$!un3zN=cw{O_E zA3gZyv5L7bt)5ybWwHyDA)68-&^aLb!&LRF!Ua2_O_H8sQSV`y(v z#Th$bB|({hqeERmF}=*XDPbFGbdgqjJy5m#m~(AR+B5h(*3x>4IaNi867_<>^|L+h zXO5K&nu_Pr9{e9)(JA7csP>VIaVtu_z2ve`oX%ZnF7RFpHgjV>a zd-fqwB;cJ->L^?|6%5mt$6Z?|`EMUxUzoW^ex&z9l*HP_{mzrkfOMYEbwKtEg(i1` ztqx(0ZV$j?kK`4qNHUO~giH(|$2P)O6Bb8|R?(XYJR4|-NjheG^Lah(u%ypOqo=Tm zUUQ9f=stuR#nh11aEw{AoS1AZoH}bz{*-KdMSYY#g#m0q7Op|?AU8)blD@v;W?F0^ zHP%ti7PMVuhmw(N5@kuG)g@9kZ?t$|?Xog_Qg61t6>hR0V?{N=;5uDxoRf+>XY5Fc z|D4Z=o31qoKb7+>8Gc?dtH2wKCcvW|#HEzz3>umtDeo1XR+iAZRVL&1^Ey2m3xTxhS; zvCH=flMx}k&tHyAQ^4wt+ck405>gefZkMPR5=funZBZxnClg2;?IM;u(0m zg}SXi-)^{NbBgw*O@LIDM(j@sz2`bo*|%eGg)Bz?=qm>b3(%gpnALFc+949f5X5C>WpS&3#gTkEifU5~&Y&P2 z*I-tq65(V0mXy)S#I%=h!S)I^87pp`7`D%AM?!>m^uBGmsE-9!FGJlBW9J0zTcH*Y#^Fv~WMH1kp-0H#R z*UbYi;F?{@*zWVJq+3+E2)AY80~{n~ExYH#3a=GtK)jY;th~h8$g_8m^xd2oLOdcP zv!zV3di(M#__y(LyfeX2w*H$^ev@Img5TldPhnUlN9Pw4_3+Qx2g!_(q?x_#9?04k zA;JPErQ~Rx?dp|IVJNX)+dGU!zW2NW5kolH5Zzy^x<9ND62m=CVeqwehTiTLcDM`Y zT?60@UdtA3tLWg@oWCRc%k8@-9CLB_hW6euehdkI_3W&}n$tHFPx)Ugz{d0)qVK z6oIB#WG_hcm#)m#pp+UWd%3*5WIhLp4jbC|G~D2(Yw>!~@_T;B^yRvQPJ0yT!>(i5 zn<^RDxS02Z2V;A&Z&Dx@>`1DGys)D8SMt_4>RyJ}o}Fef3>$8DprG{rcxDJ=_o|t| zgmmU+;%Mwnpq3{td=AkYLl~R)Pn3pL)xRKT#?FQv?j;`rjg8_J3al%>KtB zVD_Ib0%rfU2$3&ae53Xq+h`DxC6>vs#}U}t9M0{k7?kK^anDexEd1ptDXIe|a=B!PYy;{rfW zqU=A;%4Pr45dRMEXjb6=hR6nF`_bp;zYp;b2O|6LD?i!)V&&)W+w}Z?;Q#p`?Du_o zem{`yX}53!{#g0>kITs4^C0YBGkgD!+Q{E2+5fbKFBiw32~m!}>hPs${lno4?iA2w z5XVvnR~30p^ZNM$qCga z&-tn#;v_QTY%S5K{Pu{`c^-(_(M^d_FUL6EZv@-zGM9gk7t1M=DnDL#FPoQ}8zhc0 z5tbF?OZ^;}(LpVNqh(+-uI|PAZ2Ix|TUd~9D#)7+*A!9qQ1|Sv3A&%F=tJ$d)+LVI zn#8k$vWRc&=FAnf)+$yfB&vGkZUfkiDMlLkb8jA@C)sX35F)eC*-#;uVZqzTkC(?K(2fsH`W0bBDJO+~@VbzX=0#XR@r@n6a zI$R$7c^qS1P*4%iaRWL3UA|FFKvnBanzeKOw_r%l;tqjT7Doa+19A$;0?b^*!NfZ; z|9pwpD1mG%WK%68A*l5R3ZGkHL!zK+`P1QK^$I(bo@WusZ55eonKrfQFtWvLQENYZ zf8H3)OG@AzHGOjH#ILL0F5RhC87Lv1Vq^bYtLtqhI;TH}(mnW92uhg4>LSOy8skxw zGfHhiuH%DK%@+{s4DuD2Z{By_U4pn-0NUN}tV35_BnVf=@qKGC}vbwDi-Ti@)MK31V zMafND`2_>ce8HE2@ggisgCodKS0fa`ObI;Wuhz3yTKRIRzI)h~XvTV3 zPHv7nC0ty7tBP^@39FbB>)!ZoMAvHhNJX`cnATBLf7oV&Y<@Cr<$-p7q$1L66FT&= zxCX*0Z%`OxPJBp~X-aCW)KOv^;2hXq5lD2Y0|7cs`D~tS%&ZeE?ib2MHapiIkRBTd zkuF}TJ@rXi=Xp~SiIf_Hm9MX)^9_fJBO{LT^H%joywg1zvclYlTQ=7{F&XNiY%XXS z$rM&kf1bhur=gJJ5Br$gByv=aa}_-+mr!1immE1G+s|XgU75vFqP?+Cnp;GKHO9V( zm!PnpN8<46EPu1o#+@f@7D;c3%;e)BFICL5+el^Kp`J5#GP;2>JE1HrpG!cs;Tk6twB`jh`ph^oYSG(@KiRoEwJJ*C- ztTf3LsaPx)!Q@Ar#(bm@U=7EW-q+$eMirpU+Fx5OTvwzhz+E-jU2Td`{oEu z4sj-trqEqal;2H$FOqwR`{5n)l*&d*}A^xl1)^)#E$PxV6LvO9Z*c-P49V0UAou7G&Cre75SXlNb% zTETp6aPDuI+E%E9eP1L&7ua6I-x5pn*|@vWdE8;I=tNlqkCB_j&z9NCW%xm>=(r4I z0WoeJZmps~y$9{Ef#U`@i8RD1gTn>3Iy$piR_&W$>3K70XtFWxe*kF!!vVQX8ybh# zTo+$05^mMR&Hs{Ocrco*%@+J&sKfsQf0%=djjVyO^;xlwJdT@rX+CRs*{So93hY3x zQwU9-*9V*8s0-y1Wxv|_7FM9wkrHO0*~F*-;2AebAnr$w`gu{h07_C7fsI=T7HN|h-k^~bpD4_7IN zA7g?sp;39hPSsx6I!C}Bom1Xrz%g#oS(i3y)N@IlL=6JaH`!~g%{%?kXXF>6xDtR| z#4a6EBE;R)NrXmfa2=4q>?+H7^Ayx_BP2~}NTiUK+#zIc5sjDPaXl;bZp&4YA5bBP zqfRcGj+X9^$;sHgA+s7=(1vMJpz~XTYA=@fU=VpNd?GGYrvelZ)t(PleJJ0zs_Uu2 zNE^lNJg5KKnato0Km8Gzg0W*wnAoG)*B4JaRidyrrXyDq^@BX(g=4Es+WmoZWZnS7 zhzvwoMfm1s5TxD37<5JHmn3z=UfM#4F-R0v)SCyy@C?E(VIo6G!|oBPoi9gWS+)VD z`DS*9A0|oZDJ&l&WTbt#_#JJJ#ke$mRK5=0cx;C=d-$6Pj3lnIt(2Wk^AE8`*`-OT zD5jqtNXk}xK)j_lKoA`3 z6CR4W(tg(7VV@Yi=Pkt!bQ%M}WPR!J4`@cCWueM@{SgDL7rh;lG46YjQc1=NsL~#e zA6?!rbT!W2CEhbI5p3}O{MCoNH9wT*_atgAub#Q|4|kG^8JMF%T2DAD$)o|z3urg^ zDXK+pGPb;R4fXp@935llE&a({dG(UAXL)Wk&%5puI0Oz$%37pN3q?|4HekRb^> z!ex;YK%_aV$p4yDj$h7RS@nGYXG|M(pmrZcd$a64dDb}mvVRV4IcoR*J7RW%8siEcP(w1eNOw1iiimD&1khH4)AC_>5K0t@?&fv?+E}$;A1@6@l!7 zO@?RU)MOeLqoRcMlbZYq-TRP@#Bl@WYa#5upM>^99@5^z(9Q;IdP#h!F`SrZ)%b_{`X=JPS zd}k2Cq_=dK{GLRpq_-oax;`H($b#o0qrP`@rnA7Q-Wr^5nk3t-CM!IYWxgNiM#}@9 zs4L*(S5tW(>k8jy99mxce9yd&{v&AN_zkpxSV5rwefQsk7LGrH7LNZAv~Y6$9<*@$ z3R*aS1udMvf)>tSK?~=vCC8kbA!DYX>Dx&R<`_e*`idTt97j1!iUk1Iajk zK#wO?%*M*f%tpq+$;He8;QWupFzAnZo%3g@3_ zhz!WZ#{8po6o8YJ`3I5${V-%>{cmFYLqRv^PqP^|5HslM4EkZf24d&F_QJSW@VL2@$B)_kTW0ZR%i@7Qpz2dh0Co^FC&xc}e6ewW z$N(H5W_AwXe;gzGpUfi1-!qFp-0Oe<;BT`CVE@ri8uTAW_$PTHoIl&z3kdje>;cHY zPm!@b?O#r2R@Q$s`U3nnC(9owAt(5!8$R zHHyi_@t=CM{omy9|7yhb*I*$S^e3+8}%r4J_(#>Cu9GTiazV2$1He%&aPJhdzRBo1~ewJq3 zFl#L}21b?K(lth5i94BXYi`#pov=16zANQ8W-upv@h)DRbhCgaNJQTjUa?4Ih1Qw0 zuM2D6Bmr%Q13~zM(9+2iM1}Z=zHR#rDp`lu!i-o2pYFy#lFU%^-P@~&_Orz=xx$4* z5PRhv!WN_NZUu8QB%BW2m8vU}j@IM5f8VFN>@nd>SKSnbUBCOPgf%K0@)E$zNr>KQ z0skpGF;w7dxyJYavXyGE-l+Tt#arH`b(9bds(~U@w1~MIVgi(}Q&Okj>Y%0Sr+|Kx zDt@LHE{tiXA_t^{&We5_dh62DUxj=ybUWvSGc}b~nJH%9N5is8Qef=rZ6Kl~mjZK@ zdtuuV`$jQoR*)9HOgtbkyUf0Uso>9hZ*4>5QeO>85{BTr+m1PrROc_#FZ7zqUJ&NB z7zNztbb@72Z0o3ZAGSg`6~gU&$^aMx7@4(-2!0<@YyaLRvx^UHa{rDfd#P-19^ zMB!ve(HF~4_rs;sOy7QPT0T8vrhHV91zwU7#K}1qvb@-kkActuDAeemM6X#^+Zu_T zbRQoUp(B?IT(Cw9$ekRd_L<|a1x23+z9`b?Wp!qiixaorRY!<1+H2)b_0QJ3EF{;R z!Ej|MbwZmaI?k*3&>&Im|NaFVg3ZX_X}LIO@KWhr)nL1E#7b$Yro>9;`ND>UDkA|x zY;ZKJ6+NS3QTJY%{cL_Q3_3A8>jBNyP2)FzGaGgJ009A& zh0|toRpP*v*F+}j4@oFolX8JOF^v7^7RQ0@J?Xv6%&N~>Q}+;L%1ht7%Nx)4Tn6^n zf0Vxx0_79Sd0rwmO3{m32$(DMw2;kpf$&n$M`j^DkBd?w-+hFIXgxldazh_l{aC}Q zj~2{0@-9O%plakxybeg`_PG$POW?z&(C>Mc2zG?n{sgO^Kk#A<(5(`BE*zDA$y$Z! zB@wg`m7--lX9K-*7p>pB^I|=1!55}PKZb7O^{I~*+QCCl+eWsoE_s#uH3C7dBf$!v zV6YSlHVJ2qE@qUPfhc6JfWk1iw&q00VJG8}PzNz<$;uc-gh#Jjhjpr>^plUm)S*DH&VwcygL`~ciySN`> z$B_>D!$n#(HDU~w!AubBuGtjqFvJ0ZwB0YX#w@MtAE}LvLUbV2AS#v7OFB?qL)B-F zpxlHE`Zd5l_-qFh5C~pe*m+}w$#KnF8s7P$h2&LA6M!zimTe)RI|hin4CE=QDM|Op z^x;9JPO0q6OV~r6Lxnh232oCu?ek9*$-rq|`MRO`D#44_z!fcloTk&!4xol8fJJ3m z5gpAQxAH9@=>VuSt2to)00+=V%Es2F8Ms7aB+y&Od9UGxZ2=+d`pOPbA<{6Ly#UN1 z;)#x|t$J2kq;P&vf7{Z3MlbL_>Se4-x$%o+ubPHNUVzFWuJbyLx`00Xe6y!ds~4pj z@ zdC5qDm_vkZtch(Ot5k_ouUttwzds_#CF?x@FrSB2`mn`jxOU}I)g?%{!S=GiL&^A$k**aVf?Cmc72y2hu)ih| zaqGcFN3l})-U?sAR{)ak)}bgsHCC>HrqwhMEAuy#105p{+c~8SinfyPKkJ1+_8Br{ z$d7}JbsR6^=s1bKe|pZUaSBOcGkud^#-Z;iE)SR9Nu)O%^kVLHfcUZ z4J_*D;;rcNEafobRO#7qETnB$@Sg| zG$>4-7)&_7Rm`VTBQD{lm6T@+c=lRep3d{!T`e3b9^M5;&HD)c62GZLoYxKVowviq zE>3ziH62V(hL1ckgY`=BunWr4S-BnWoX_DP>hrz+eO3NuuPPU-J8f6=CdkChC0M~) z0iRkyf*h6N1D8A>F*I@*c7zQ01B?TEU%#nO&o%YiTS;D|+&xGh?yUk%7W1Y$GCnDF zod%k2#7}~>~27grrTejY6)_d_@V@r5BuM6vWQ7sw--85f3KAa zP9dsNU=$}-=`_rm_*PdkqU51)ohn6I7S#5vp6moxtnm9V8b4fe7TSv}zeHte8I$*g zK}^T`C^%Iox-$i4yC0$vliL-&3ayFDB z@)`4mH}|JaCA@d4G%dOEp|bOQylK@R@oAkE5McC= z(qcZ(Me`o?Gu9IS;@cgAkUBLve63#5ubVr}y4Wnb?$7pIBq#_uA>SF_Ou$BM3tKH| z@{MgxWLd#|k*MwK_W}k@y-wyNINdZs80`%P zu@e#Ism4b4gry8$=wY<5+;|fY zb2881*BMP6rZ0FOAu+~b-u)4Mf!Th`G2#UNZ;lZd_;1k{81x791qS>q`U3xovcSKh zEbyN+0|)=C+yw#IeyKNL2R;cw00$Z9hg03tr?P`UPh#>vsyFzPCfnejHyY=9Qr~1h z`hl|o$$+d+qU}dJa858Y7zp^OgeUONN?Z`flP(4Q;++QsgULW#tjwHGF#-TUW&q$n z?*R^A2K)gOfLVX1BEi7FmJ0)B|9=l;2Xiw2P>p{a$o2mo$i@y}27~^@l>84Jvwt`6 z>3?{dmOt8{bNx&9&428o_b;YG{~~z*QUS;Rs{-U-a&7*}qUf*5XRbeUDChdC4&@q) zzc`ftBA@pNVbd<_b+xMKkm~K@B|W4Agwa&k!!sTt$OtKetbeiortu zR$qXOc%kW_s+(3$tsC3q$+~*B88#nq60gHRXT2>#Tlw2GumC)Dtxu#H`n$~n&o^%_V9Nv zzw*I5TVb}%_IhgLDEn}BOm?<+$Q{b9eqkT7He3?0I&gWmYzNICA5MB*bGlKyZn`K1 z$WzdV^TH5vlb!YzYR7DVRAGmQbvAx!p71f2W~gJ2GFM)~-^&A^(aQ^#LL7WNrd@qj z*348yovSVO0;{G?q_xPcr9{=rWU|DTXYoC^?3#4P7hv2#A|ulE=oa~m9#HQK$~OJZ znXedr+3D8_=f%V+rcaI(Q@46e8QJVwlb@@dQfFAsm{@&#JzfWBL^zgqT+a$g;B+-t z2eAwKlfu+N2j{V=#fMHHi-rp~T1_tv(d^plX4osL(CN!)uW=4<2UX$LsD6-FUACKY44aimI*FGL#aB3ln(@uW)X{u+DvIomU=4uIA7Mh z@kyz)a^qj8#%FMwCi(VG%|noB6G7qw_(F~TIVtWldxDeH8dYGT4bYhgzI5GOaw|(M37sW#@Gm9T;=PvH9 zIsJfoZunLQU#bTqHa`azI8so3s(%jNY6$0T-Vu$H>HW%@-Pl>#NZu{k(Np`>OZ42(?;yUB9r30eza<1FInwd5FL;m^Yk( zH39z$G63PM@?+)JeO zh|CxBb{)E6Xd)-I=C>Y7$3BeL^9~c9jBRdnBcHV$Jtb;;PYTDOJQF^hw$Shgy)&js zdp7(cL>|Z3s8R_P?RlmqAZR-FVs$Jvg&!*nNlJhE6{uo{$0h0j5JmQCEsmbU)5L%A z*6*t8n=&dDs{MydTsid}tYX|sgdm#SjztMBnc~x1I_;N3&%|P(muSdCCS&2gZk#b- zyv~zJ?^jRsYv#uX-%odliffQlN_`=Zr@#sZI}c}Js%Z^+G*1OS08wtdc4EK~+r8;| zv;=1Z+v4H^SY5OfXaHUCTagO)>Z zB#`?3Fd#KwI#5nHyi*TFk$^45MU>CZu7P;Z?md4zW3Qc) za!(NMzI>CbNi!nCiGm@-@MZ6QtJ-XRs-yweWsQMMsaNG2Z%{=EeyXoA5nPu?xf)r2 zM9lt&orE&Px5rxd1#qESWV{hX#;X7EB;oB3Wbjw}*)_`<8d<9hdgs1o;b@E> zYEQ5gQ^w2SyCNMR;v8P?`@k5XqemO=HS4Br18!c&LmD^aM#PWtJ1s7{gTzIH#g|jn zb)M%@aw#8pP*k55su-RS8;p9*DMscmPenpFJM+;%m;9Qwo-$AtIa53jozd^A%32;s z1(5OYQP$idy*_IsAA%9?RD-ka7N`l-Tmda#e(UuQvEugO4cVytdhGT|Ym*Bv$@=SF z0mXbLXE)3P?y+!bml7qN@%&o4;Yq!F6K@By#!HNsS_nPgj$V4}GJT-)+@)K)IO1MN;D?iM6$<0DO|v;*)aAi617bP4w^Rh=PzOTHB!rRZZ*%&f z0^hh*`cG;NkaKFXH@O3$gOQovgy6Hv5aXdq2^80+HUnjV`Z3-LClC0&gIBEuchTz` z$Bj*=aT8c@F2^t0&|-=dDS{-#@C)BE--cmIGYOfXM$s}6lTn&u}c=5a@b_U5zKPSN)P-Lu? z=`ua3o0!T4uBDol1fGYs3Wp$PG~@Oe%dlVbH?YHNT@U>5=RiK+I{ewa1#%>R`N!QB z0cxwp3PBjJ9>`}W&pz8xsP_d^{Zg!`V+y-_0#tA05CJ# zlLq1VQ9uItQK-+#419`!Kl$3j*Wwr8T|AL;9z6s1pY1a2>!j1Ki6M0^5^3G ze-C5_gPB3>e2#u z_^B2E|97jjzX~td{L(6fdFY3NsSf$kjGnhfamx98MN5Ng9{6$#JcZQ465Ur-fH%? zMf)lN}IjF5X!5q9wVS*7eL^BW?)aheYVIQy{)Al$)IH>y88D6^< zC6~ohjl=Y#!u4kjVZbwiNlPUx+4>ek&nk~kyEY3Gmv(G3YRaGA8&!vYR%qkTr1wuv zYvr$UN(=IX$k1C{;9O_IA~|96bmS>&NWXvk){WJ*w-9;%YT0c-vkb>fThmgSX=nYM zmrkzF*X8@Lwr8hbQBuraqEU{f z_SR@u`krMs65gsTGC2*3md%$lI|UoH``N>0s9pkvq2}+naE{gc^3&I>6*%3YpZPT` z)v%ZA4Palv9P`ayoTYDNl|m^QRr+M5ccRHj-M;tO6TO&3KE9Z6xV%C8fsF);DjJluG^VGg;j=RhGen zK|$KhnSP8*S5SrP!d3fFF1!(gf2>>ZsaSHs_xkZ}AJNxzUdJ*S1oY%VoU)AM?nKfM zejM*GA84+-l2M8>cKu_aUKJi>V%_40;8E4(E>Dl~t0TrYFK+KHDM%gAYQ8+J9iCU2 zAFd_%cv@N+5D(0S+Yv8*-$U?DEJD%5TJ(jKusg^;3C{yMmNWv|9Ih>`+NFoSig zg7!eh)LVMf!)Pxa7#Y-Nu1ziKpY~+>$2*O(t?jA;W-+Ju*HE$ zG1?Qn8xW-RR|&QhGTu_-?>96!GlvmGIxfZQ7KE3!=F%+Bytc$_Y%@k;Az3gWEw*yC zp-N{LNNeAmli9t#fZ%0!&E!;$`{dToLLc=gEGT+c)g<{HMwTi;C8(>_a0Npn<_;Z$ zv!9uM;tuU1%`VSqz=I*(5V|V0hSrx@XT`NuFAXEYefQf@Ok?@QA*Ps&1RfbqyP2Lp ziu)8@r34%s^4HE_(O&OlqUfMnaX7sO`XOgCaAB81iLfSHKn$lx1@~BaU4>eE8Sq;y;{KR zMxmdUTd+N?YN{@pPURtRtZU15LD7Fto~U+*KqJt+9|}#Q6sUvDj30m#pks1N?2b>L z89;c)Rc*pxXIE<-liBKO@8QveG#OvB$X-Gx;X1aLg#GO^OtX9JJ^e#w7U^>*2+}jx zgAtvsB`B&8ln?Vf-;l&r$Yi~vWs)?HMld=#wZ|?$cv#u#*}p=YtVX*biVXZt?W}Jh z&332dAX|AY=oi1cPvoTp403r7)~Cu^^|3F<&8Sb z%M*<9C?liyJ%A=Fh9Ie%qwTUN|iQhdx$iy~@FF z{{BLSeAb0^9Q|uA0t{q%l!md(tU-$vQ|D|DZk9Usq(HiLBh#KyuC(a#=(AjcI7O7} z%RGWuLys)P24V>deD#{ZxM@wpk^4wSD%Uy^I4yLzTL;dKnHTv<(Ju;zN0;{3LJv8T zh8Hus==oQC>qRl$Q;lt3arn>_Srxn7EL!Q1zN)1m5f_|Uct#Hv;2`in_1@5$e4K5d z6OsrrYlkzni}8Q)onvt<%hh#7MW}McDMG^An6zDFcz1#cNX= z6xK?m2fP*TG+Qru<7Xf4@|vejABwoS8#j)tKrWp2MoGAvL|uuaQk3h)@#+N9PL<0V zM{>01p#(FLZu^B?{zW8x3jOJ*n5%Kp!!(`fy`5lI<_VwIr)wj$EHUI|ak`v-aEsv5 zF}P?6E%RvZFPU7cG|ne(Znf9d$ls{Aq1EZ-1!4KVaho7i;-S`$$F#Smq9MALJ#WI= zk}Ifh3f|BF~pYO#4J|1IVA-6OR(~8HHsZ^Pn%xpWV6Wz{hcwg@l3uBYOb4 zM&Avl-1vpP<`eZfLrQbRo`8T%Wfka&IFf}q=zxo=#5okbip*?G3bQO@>*CiSm*i55?)tS_1n1o>nbxaI zj_O%Dl$cf?>@@|bM}V%DWM7pRF;6XSfRT``T3r&d}n{sB{!al5cr2nCibc zj^!4br@*=uB!DYrw4S!yQ<=4OK(hMYGN}2@)#|Va>k8MW z2?)Kic$o?)ZY@*Nzg}NCSsNRu=n&A1`b$W#EuNr3zu@ranReopT8$>*w zqv6;B1omD?{&a&)8(S=2s1=tW3d6?i(wOAH$I1|gQv8GDWY#Nk`|WnK zVVzH&rdfq;Lz=hNm&&SH@5Ck0k#EKAW-Y$$P~ByNs9D0AmnNd1clZ~Dci<&IoxXGL zYkz&mZLaasPu?AG4*TX}DV|$N{h>6u?8cpw_ba}y?whyzhXsC|4F+V)+JKc&pQBc@3Dm&X!yLd|%d7Dg3#p_#Yg9dNG1%dFRzTs3t!mnom_juy|XGdd_u<>L_^%%uykph{%1iGk*`Dss?}82|^f)k!JTH8+lDF1~UQuU$z|F#M^<0ea zI|VW|4k-=5w6`>~D+65pz`G4E+hOLpUdjikscs-pMc;Y6hG*hPq-{1qFZ%QxH_Pxg zO5XT-Bi6`ysJt9?l3?j$J3xJ$Wrj)i4jL*)l9>jC+swvRUp?fUx?81iQ zw|p^)7-1ns_Q6&n8|X*a?j*BQQd)Sfdy?fk))8>83e#i&B~o zk$hycfnL?>u5F?kvlwPq5E4|YxS8{&Y>Z@Uwiu0f9TPt4YuDl z*nivL_-%vpw~aqmSpE75KZV;^0n9+ICvD8Z$;`^}qjKa&9sxTUJ0}M-n1k(aARNE` zx}U3HVr2$^|2IhXA5~YZKNBR|AA|hQnHwt^fDG_YsWeYPa&nNdf!UckIXHjeT7Vy3 zs9fyK>>PjaZXx?M$X~zem(YF*Sy@5iAOE2rup)UyErY|L!zKm2DnnZZEN-%wKW>yi9-9IF5z*Dt~TcB}$G zT+D1Bj=$$v1^-RQ>Tf~*cC7yQLH-e7{|*`cdI|gY%#aNL`Zpv0FB2a&0O!9O3FP|a z$oa!aAmHDO1Uy|T*}49t5eCfzv!<4zkel$|4je>wZ7*+Mu7m}pP@hi=r8t4 z`{xQD@0WyN&{_!9DZrd%W=?vl|vQeOQ7kPY62)q-3 z83S`)dZHWp`GVfT`c_%z}dsDcwG&bP1C z7~Znt49+R^NYS1st{dVJ#nj96YPr=mty#Ks%Xikd`et{*3fuWL8GOXHhk3!|$`dkm zpxR=uw0v);YODRmEBRYvPIgSG)8nr0JiD=zN8gD;ft~QNuAPZ*)T1(xq1|;}<;yDf z0;_raAXRQg{7|ixJf2`YYhX&$oo_hS>lZzPq!bEMudo^7&*gEYX~)!qIuZ(LCH)Rh7#kcS_17jdD?x?*ltg z-qd*xJ?bYPbmjdE9?M2Ub@L?u7YzmPY$Nu>2dP1O8ke$~{J2scJMaU}7WeIwR=dck zoXFh%XN#_Je&4S&X-}L~Q3sfJB4A9YND&AnP)WW=7f<9Xwc{-Yupg~(~-|2Ao2x^eDx)%3Jh4c zu`zvh+mtyH%4ZVaPYDu;KHu%)%EC(yd`3vx` zGAc^j;}%W5l~JbE%8x=JN2Xhu9D2#Pc+YLst6Me44@HVo{S=9hG8P0V#-y>TcZbv@ zC@b0pa^UU}vjY*>7@dW@)w)lb^KbSB8ZgY3aps9N8S}^W;PMGq9_zFh)mnR{BB^^i zJa$Mz9i`>dVv}E|O0|sVh|F^J_hfx^SU8ZoGZ$I4M($HLGap_>VCF3apH{ioI$5f} z;mvRk`(qw5dbu)Y2TU>ufi;Y(3Dq27eZhD1?iJ@W5PJeC zy(a3J_(OlZ{$N}R$|TyS>*w78=s5k@e)NRTvI2O3=%?;2Z7jvneYl8F7umBm#QCR$ zU*3cunO=X%8^wBC33}~I)^spk>q?rO7oc{fE?st6Vo1x>ZjRmAcaUL2m<1s@FMhfkX{l05SO8ud~=Hmn~jLd8K|9@|fYFY| zp1<)||Hkk56b(#7%@Wj-6ZExj3L`$M$sbl9*2bLgLI_Hgl5a9=hW0hMuk z_J7VbSbeB27*d(f3V_iva$MtuWXR;lIu6l7wt9UW4KZeIWg9+cavV`fYQFYSH_wU= zF>NB#$LH*>=?c;~5fO_w@L32v!b@{fqD%4}a)X}D*$`8z!1+dJ;DU8^O#-sMtl35l zbnxZ{?A*M}?md7m~ZDD3Wx@8^e${es-!e*7D@X(Te+T=-FXmh25e*#|f2p zbx>FvFmTn0Q8c6!B6?{Wz7h<^gQK@G&eIQqm)L;!6`(KY^^zpzfpk;|YIl|cMsy!S z&Qydg915grtZ1grQX@NmZhSaUq53S8Bf{60tUJJkwP3-9S}e4-pt_-_sGe}w%zbsw zS2H7@Im@ZPsxO*$#HV$bUTd+t7P!-k_)7-OPetAJb~Z z+F{RNqEYyKGN56LG3p}`j7n#b^VV#5=-^4=HW2l5A%D;T(7kv~KcK3N)R|P9+&iC4mRK>}!-m-sgVF`|N>Uj^0J=du(>P4o$|kVf{D2ODjT5ERd)7R5k?XDlCi zEe}Ku?<~u?j*lK*N*kXs5nbakDw$1prNq$*6%|3HQ4Eu3Br-gXUD)qmbVMiilkL_* zq@{)!TWf7NU{0%qX#q_Yl6K6!W&Pw|Y|mt`4!CpE)IngEKH{hab6|F2jrDyLGTiib z)-*ULOIvFMa>g{7RI;^c=};ULy%!VHxqrqt*5t5zS=1}O5Ir~QC}LtM)hDdW8-mtk z-D@r8q;_O=R~7H#xHOOZ@;FC(YzBljn5yio3lqVQ;fkZHC&)}O4f~cA?z4nQW($ez z=3uKgh4-9r(#sw-v)2$H`Aqfow2FbLFm#7hFi_AHr4HI~t`8CO=?eL){_ySBup!ryx9+3Y5I8JXt-mC4$}l$kd3& z=0)$M^m;2+XdmpgH;(@znWX!Uf#6+M;(9E#OdunPNGaz@o%#eWXFDP5ZEKqsZ}Uzl zjASAYRwMRvsfc|sX8UiAiIUEVN{n3Ml}q1BikBbR>YyIcJ^XAt_(NVRtq6ZQL5lKy zPY8e6fPYwBiGpO;EDH6JpFJ7p8P=Ci+^XxiP~Q_b9{Hy_eTP;(dk8`=?l>ph-!XvZg7XB;} zDWOx?MxPbXuVY==eNN#(?6t){Fu3(WCrHD@+53h=cL3LU}AW1wc zb^&9Cd_@oLTr*qtAu>aDomR?h`xNMzUtxL^@j4BIh2dnaO9f&KV*2x8EWQg4bmVyj zr5R<2l(ZiOk=R;Hz^3j1X?hb}s-2gfNEtMtRkE!h1ddV}+MC>YI^j)(dR8P4v?v%B zzV7eis!Ekz^Xd0}rweh5XgA+mtu$ZLMz;BPsywoF5^24fQx;cHyYHs&!z7j2cvq(^bk1hryA;EiW^-5VQ}Z#fDfGR@@I)z z>)!`Sg+o=mXqT6G14(h1&^guuj0q0GibLd28$Id!k}i7JRiMo=ENilk^l2vQ0_l8` z*8xqE9cvexxp{ehPf&2?7V&C?=6c6QmI?#*8I^20%0sk2EQj{TG|iq5o0)x73%new zmzQA~-olsuV~?jhc6sekG7fx^?JA$Z2$W#M$0d>TBkfo>7g=gZh%jN&>EK&0``roV za?kvjrtKF3*=iXt*K#TSBQ+>s0pKJpEH{02v{}q;l6MH3nP*-J&xZD)>0cycab7~e z-hMx-BJ_wJso0#OMY%qVjYR5@n$X*FQYK16&MN`zVJu%*!PibEH z;l-_ea?o_Yf>(W&Q*OaG()?BiRmZtwzt%2JRP=ihPl=RO^h`rS=aZrl*nBJ(@^u2f zh585rhdtLLA;u;G{UDBJrpF1}oHn{D$YR?0IvH0M-sU#z`+$+L!-)^eyl(K$^*)X0 z;~M-mkF@J2K9EA+B@4kw8GuKLIuX;NJr_0Py#K?dd(%pC)X8-@qE+H?Riy z4Xgov18V^AZyQ{{ZU9+-+W`Ew0sL*_H)IE7`x6`o_-WF`0c3uP=Z94f8!L#6?dkQ$ zZ~bA_!^z3@H(1R4Iuk#|irCqhpJHQY12O}j#4>=Bof*sq{?QzU82|$Q4elPl?xde9 z9s@J8astTMfA}c>NKFEBF@wQBSivujQh$Tz(XR*4-;qc7Bh!(c^MCRPf$UGy`}ZI> zz|YdGrya`t!!nu;41U_VpkET7u3KQJ)+FD^5n zr)$s;+b|CB(<=uDGvL2)M+f~$kU-YI$sYZOX%y(6{Lwkteq=rVE$kBbvrb_@yqLIH zImv+RKZx8fnV6hF_NSNu%pk76=cEDtw23=AD>L|q#nlf>bT+`#1OlJV9x@;s=hIaP z`1kDVpKdY+tcO(zF{3;^Kx;qCtSg!t1p8Zaj_2>3rCva|m1U;Bv= z{{;7Q{hs>*0Dp~A1KI!0$RDkffA|6Zapb@I&Zo-*GdmmCA4h^f|7IlM$F2C!vSLA; z|7PUVtp^1BV=eHn>zn^5yOrx{(m4ODH244Ry7sR~`~Sq?|Afx}BH#X(x&9x%4PyO^ ze49Ysc3zZVr;Bex6~R3o!jhY_A6LCJAgYO14x142OXohk2En|Pkpfu}_|V|-&U={% zn_e+-O>`c+s$(^6*~@-5v@<5kfFs;Y>cd9v=lf?I4sBPtqqi8h3sN%l*%C0;Dc2Sc zYx~dCurP4L#=iFqr?RlnE~h`9UKs#d-aQ^)z{-k7#s|`X{mufZ5U(bvdg)noM(XAz z(*_nUh3tl?hNafVr06g$r+g{(661u6IC#RvJDo>PpM8_}okV!V|DIfzd%4fwMmT$& zOrM+ZsdT91;Fdx&)#55P6q6)^@>pL9iw2Su)fJ$>?Lqeey7->JSHXG>F6&_pfpm8o z&yvhW=+3ry$FTq+WdGn6&VAvTBdAV{(XXN1X7&{oqQ2IhwcX|y8r@0txR71zW@ryS zzc?v$>V)99X0)0cZ53%#!9fWy(Q>y@l-f<)q>~ry?D?o4C@1K29=0?Ssd%Fuc1e(< z$-ZfZ1j@ztn+9%=%cjV;#-YTb{@&8!E{b)U`iHL@IQ~n}I>=hJMqO_Z+h+=e-`Nd+ zPZNl7Y~i>WXJi5$sHgHmU{e{8?KG0JmP0|N$Wn3xYzsjoyZzGgONBL-g*W5uuN7?v znonB}KURU~q8S*q%fjhZ6GHah^F_voA`oP?u(@fQ6mY-sSLu-SCS0;O`&eG?j&4Fh z&L#t;4ABD4_}-Q1g^U}?N{p~0yT8s->@bJS!^o9NXwRZA;ev@e-w-+1bCUTOr(U5>+m*AbfZ z0QGkjM0=yH-Uoi5HGzlrt2QnHG=08jQg!o}3Q883>_}{S(0E}V&L`wv+@9k=Aiq?< z`34<>iQ{A>%?0f2O2E)Sb4kU)oD%-p-QSuMO;Ztyc`2-Igu5$IJHsl-c`=%2u9q+rRNcDRs3P@PghgivtW;2p zcIKj-Wn?-S<#I0g+|#avJcAhB+l^R*%lyHtFjpa2>K2v8!W{*?Vngp*xEz7}Fdf+S zwlDpi$J9A~@0N8wA33g%Abk|hPGxo)437FHY;R0igH&(EA(k;xdR zZ|Ob5k*49tM!(7{`AB$g+pc{Y>MH>46Bd34@$7pB09KX*qR}|v8wt$U7l|Ra-?Ja*tupfC=nOE8evdgIYC_l=vl5oc0($`|n3>)e~-R|GYMA{P?Ka5%!j38!-rwLn$V^L!E2E5zh z1PfvjvI$@*14DbQ8y_qa92SB5*aSJ_@jKZN%htok~86^88_!N9A3{8%@gz#!4$o90{xay#_NB37R}x;lUlc zjb^>*c(xUndCy?kz{@Y2s09w7y}|f>f-1kW(zQg+s*z2abe5el3|cv z%sy`LgR)k49gm)|n6^XMeUS$n4yhT7bPZj#-I^g|ODFX6q z-Q8MRoG|Qc>6-3wFI6_ISZPf!m#Ti)uXF^oc2HxCubX4}zM)Z!N!Bgxahp<^Kr?=A zBX(H8SItAA5tQ8pCJ3a2IsqAvhTRp|*ap6F4@X+^0R~HJ+0hs`-{GjdsPs_e+S-+~ z^W*ECs!2xJslNR@6X)D5J=%gw&YX&0zeHG{v zgJ6z#R(IS@e0y2Hbn3Lp?n)Lhgm-#RJwqbG9^-OKI%Y?LLZ`I)IZhKE9aK+nuO=2X ze5r&K7;~_fUbj)ioPkP!{P^oY0mCPLCyP(`N%Z93l+r(#nwX9yzfIp=PpFo3hV@x~ z(BJe^G}UNhae*-aYGQla6a<;Sl}%+9f3eA(XnJ$eYpVHp#kgWuJ5^l8TlCGbx{Mz+ zB8ih=I1VyZmacYg+9Pz!g~RKOfl&w!DTG6G3G^gNj&iCSyP>~EIovge zArT7}RSV+6^8r3cm7C^@QS_q*7#s<~&+=EKpRm7qJhSVB#*6y8VdIf}d(F7WQCmcg zn%p|`alyN&=OG^G~-&+xGfraX0>RGYu*s=Q1lo-{wJ${^5KeoKc`R6Z(%i!dpKP@t!GMN z&aCub-{E}OmKgQiy84vh1z5~EFwJ?r6Hph2CW`$CeY0b@_b2QT#QHy_vp}~0eH#e= z_v{hK^+)#jTT8m1V2_~R;34QYcnJCp9)fyP`-^XC3Z&~tGyb8xZ!LL0zf4l)oc`;!y}Km84U z(oKIUVam|l(U@6EAN)s<2>NL$5BT9i^@H1RK1~_t)6}su|3D&~oIhFv{yj6u_BU8+ zbAq{^)cX&n^oyf5$B&}b9~IO81(5yI7=IobKka39@Go{=?5rG5avJbUnK$6+i~@r} ze@~D<5$kg&#gmY=D0=^8ZZT zV`Kj}BSD-%W-uH3pN!=CHzNU0N8XQm;y2$1M7bE(5h5(nLL2OLo~(zVI(;r>)T*hSRY;H9C5E0Pso zY~!&i7fP22XC4yY_Kpr0W(Yn3$CWNpVqr(J`_OAh!n_hOM_-@hfPzb=PuWywUTeLW zdt}#+r#t=lk#T{q`BH|;hKw%Jjy_+1IRg?uSf1|n<43?x(tac*gzPcE>>Ub&T?pmj zPPdwZ7fsB$6#|R;#YN_Jgg(Oz$_c6lX$P2Uzpa)o-dhbtT$Zf7rcn)*3r;837k5Q( zuop=x4wtGnkD>R+!0(k|wJ+W_&PW!bX)d{qiL!psGZKY05HJ)K#6b4!gmlY?JDVmU zki>L=%t=H*4qy*~hdx%TUtc6vGJ#vgLd^1{AOrFyL~49PCMeoBpo%uY)`Rp6th=(s z8HHG&Oo!2n3Yuj%63+F#mN$!n8zBL1jMS7@8Jyg7*-?Esx<`yiIGbuLbyP6BzBD{i zZYT<;;_q0}CCG)Q31iU{lo6f`F%!D zLkfWkjt)N1Nr{irNt&AWB2Ua5sVbh18FMr3&UP|Z7^-y09`9B2IBN8!YO^ZKCJ!UK zt<&rR$0d?{Y2coyBqDq%IM5#bj8*zEI)zVf%_(8xijRjXqib+egL+;rgdF~PDt7Z{ zq1E)zo#!4q3fgtPR47u1+TY84?RXQFYt8KK$x+G~CivIm&651JY1+J$10Vg6VIH@P zKhAz>A9(}atWt#X0By9sqiQA4rvDN(EY{#L(i~@Dd>Nl~P;WHtk=NAx1%CValSX9l z)QhR8w1fb!(;%)!vf@+1L)L;=AF&@wK4;zCTz-bENzfnSxsae_x_)KqRsbR+<1C1e zXEWL(o6knaG?6lZ4D;_YGOZdyCJduQa}YK)*5@;@E!g`sP*A-4LKVr9@Yx{&|JM7? z=py^k1tR7GFGNYI5h;duEM>t;u9=?_8VAmSFNjj(W2rErkSS#RWCI-}k?!!wD`CiR z=>+BOjm$4}b1(BOe5WmfYl`+6E)GO!U18+-FTIFZhX~J8E+&i!IM)_1EBqlK@ zG;dxQO(qeSC!7P->6G}0JL77`z+DUt&Sgl15VxKQhJ?3l7NheI7X=#0H4Xw;syanH z@X0WYmrE#=%Wo8?2vR~5AVzZG2xa#Xkx29)xdqj-NKq)Iiy2e5P~c?-1!>j&FmQ-{ z<-}B`V~wlX-wot+k8fcm+E@s=zqF|(s_z`&F4}YUSCP#Z(0gmP=*&JRJi5AIdx`RX zQja)JfNRl!+R?UQ4HlvgjSQ|Jbv+w>sd}R2f&k0DVjnR` zJ1L~ypS;a5e1-wOOH65T1n%vQ=7`TuL;fgXY%jt^KfV>Jvm~HIRy0tvQuH{p_4v6P zm$X)F6BneHhmQ5t%-wSL!hi>zVrJBGnru&nZl(-Pp)E@*>YL92>K-S=DYwdVx4zl; zJ|E9+ZX(Y5A6rvdWS4!sl1M0|ii30Cg51vXHW)2rULRDvE&r%8tbGM6idQNbsL^Gr zb_`RN)QXgPQ~yrXgZtgE8J>1lo*Ylh~tNbd})bW>?WBM=W z>u4P&-cY`Rnk^OOp|ArkZt`I-@tr^}E?s@)MU{k`^>50p;nbc5Ert!|rw8T+Rt4+e z^5V~#9iEFd-9wdwt_UmI>^z;So+pM1@w2kSJx9$XrDnK{C4wSd;G%1)?!iC=^QtKI z$Y%2L^Lm_|exItVXuEr0v3AUTS$fIl9|Y;D@`EN^d!!yIkU-X~GiyD1GUn zPOxBZ4wN>vXjL;IWj<4uFZc16yxv-$D%{V!V+=w`B<8HD!=qn;8oI9Fta70ZY+;uE z#DM8y&F1J6oiE9_BvGoZ<3op;8;jX9Cx8EuSKpZ#y0T-=azWnUP_YLZV}Ncc#vWpB zlaw>nW%$dX(Ms!%tEICgPPxv|K|;p-3|(SiYMrMCe8kt6c=Km)g;aW=`bz6P*3wrpntaftjomV2ik~|X&4evU-WMyIEU!wxfreU=!e0G` z(3Uq*hI{#jc`q9w4i?x(l#4w=OY^4%0s+ua7L{uIxXKLx8TNDu#Z;PI<2p*FH}BC{ zZD>{Z2-od!zq+9ul*7;nb*i16F{dWolpdWZeBBnpc3-%%1jc#a)pLERUaJy&wjC&T z(5iuS=ALv_6m}3Z6fzYU_3pJ-AeAz&yC@H8*nPGGA?A8bhL>Es^B4qe%4Jd5RO@(b zLVf<;7Y)Esti%`}u0_*UmW{4-ww7_G)a;bi5g#<7p^r)H8N-`xm0Me1y=35@=*r*L zT}VJy0M|dsO|E~hE7@58s4GF>|43H?eyjz54EUFI?jN2wfw=zKB9a~SZ$|#;4fUjL z{$%98`%X3xD>IPoPt0F90RLtrfE~aL`m;482>dhdFaJ`$@!wR2{9jfuPyfR4BirRa zT6c2%>AI8iFZ$II%tt@1J7=N1`c(0}Phkv2si@@#vS6#`zED_yLpPRMaafnc zQCCoz0)3X>xQa_$+F6Zk`PbrsbNVPx7i^J9VUK&o5J`*3^k315R$qYla@t}jId5MM zVdNn|;pQRrKwPg+RX?{~A^cn)pIZ{-*YHkP*4ypkq0qwF`OQV$b6a8VHAu+-Y{)=y z^>;|maDx#}54KCZ@6caySs!&75>N=gi!1;dNDxK27N^9I(dl8DSn_H(zLyS?N)d-? z?_rEI4yi&G^A&9lI33BXz9<+)B?nU@0B%5$zxhewc9ds;3MkN}PVi9uBy5slBoh)L z0+kpgI>l!0P+a?r@H7#I)d@sA9FM7tc~n>tQo_dr9Ct>n)6=CXNu+chf-+{-XOeAu zx6gs)PPv+AxOoXDTF*sv_H3M#%Py|B)^gSZKdE2r#2HBR{!{@fIusuhsb*pP^>^xzq+AQV?dKTi1Q+$ukzcru6 zW06vakdnb0br|ZKhog?4w+;_Fhca{}Pm@P_9;u`mX*7*9;Webk_^bmNd#}w|C`kf} z^Wj4=F_oe+1t!lCm6XpS3ai;o;=)NZgz7pd_XCa;aiY_(j`3Rpum$$pw_FxtDOWA> zM+zvC5=@%3_6nxnxTo)b#y{qp$F&v$i89%XF}bvit|? zNZCu%XR{pUI>jWv)A48abX^DN8#|Mge#q6|OdRz|$r%*fN1^C#!y(b7Y%VffW#YqJ zT06pBdZ-y+X$gG8ku`y-({4JUH*ZE1IDNB@&A`n^cy4I&=@mPu6_$M8;u%Zh+WUks7dWevp-!FW|x)guYh?Scj?KfvmhD<@}LQ`c!g;eZcE34sr`hV?CK z7p8`w^wo%r=!WnI0vdE9r6j0c5A4;oCzmTyUz5vVwP1=BTTOt&z9;EVPfZFB;M=i05E#H z3^3?&wE|&$-5gU38C9Zr=g@Ju=D?|X&hPEsOBF9osO{WF(k5&=qaex&>6Qb}0fDvD zmihFXm@DuCkHPpeISfbxEln_%WuT#29lpxs(4ef#l_9+3egHj&-LjZG->R?8w@iO2 zz|A+Tt1G0oGj6-lDsA3)0o;w#7E8G#!MBqqCRyZhW4C&8l4C}PB^iMmjBCR$in|L@ zh$2NUdQRH~3NR?b+`}w|=D-0v!q48G_25`Pj8Q|ZDK+cA zWnZTdsicMCd>!G{3@3u1q{J##9Lyvf9#wfHJ9-vOrah&#V z5eS!S+J9!T;b7N0e>k$9*y5MFmr43Kwj$?2tG>WL$EYxx4R*tFrrXIc%MttV#k zFb(nXE&YD78Q|^@WbKAC>i70dC+Vp$a)n&*UW;$D>XZR>9JC)X*0^O8r;aW;z09b` z8|6cAFY{!oNRCCSx=cM&u33%bli$9?>Xd^D#uA?8_5I31Y$O#w_^OABD-Xk|{F}c# zc65U%mzew-5D>j}Ep6^sv^WSOSvj}`;xFqe}zPlih?tOi(bi>WF zGfAqoJ^%7{MN&g7d0tbzWS*%<9q&D(U7K~DT4^`EHKlkWr8r`%(|ljRn`Q1!&V5J% zjcVKc)_p>Wxl^CKH&g)HZ)aqE=n=)YJGjN~;6e@5-%fNas%i^3NY7xT@s*lXTYozx zx$euGJRUM@*v)^;l0w4YjwXI-*W?z1N98uTf9ULEWQouii`?KG>7xm0F&wfxS*l@s z?0mKAteB`(|X-NS)<| ziA-MHnEty3T^VSHrG7Te$r$>3M~}jY*!(i3>!ox(5BtVgsoWPkwr6MQ`>^0m{Y|5n z?#9Nn&R-iEWXFKwWry{w)9x>QY1oRWo zrj4^JaDUEXSZ3rV9lvBS;kdy`%kV!7pvZ4@=-nX}U!8jXbR>}TR zLSy#DmOVm9%3Ag%`@S!QNZHB0CY3$P5<*#0c9E<}r9wio^Sf_P)6?_tc|G+V|9`KS zX6Bx`&z!lg>zwmG*L9X5%p;A7&xgt>U*V+&o0G(auOL!`a4?1Px2yKM5-tu_8!gU8i=VyfTRM8YgX}Nl`4R%>Dg(?9R)O{)1tKhnr&Fw`5j7 zW|uj0({eFV>5i~fF;N~Sk)*T4C9e4b)jvUeB0Rc%4Y3*e$vI&)$bJrLk>uT=zW(Cl8jy5_jIQw z=b@(SiT#I`>mm?s-g05)Z+UMVRtn%2is3S0QI!nkWz@)<_?T~uc`wPFk2h0`%*;^N zMfEyDlK|w$5ynvP?yK{N2adLpyIW zL}XsR0yoGUDE2d#(#VFTNy|HQh8mZwb#T%Q5t9*`~Q$E`{ZHRec z5;kg~qKe#aT5J-;+VFZG*+f_#eHmxmQ!nXD=(IP{Bk~4mv31xJ`lP!;v`;I4rt2fWXaE&OVk{X?S)ZI8*MLcxSdDSqPO=uCL%T3B5owtG5UCqwLpd z*1PRrCVQ{XQ8xG-&k3}QS?_{+m$g|`Xqq}y2nNDwB|f;4PAW!HUg_J#+iW5>?RVrQ ze^0V(y%9F?mO=GwJYC~N%6&Dh3fwn%={^1vwh?2mA?7TYIyfWw<+iSxrYfh>;~$`D zTyC$vJMV1k8`>LDSYUTzG2E$ie(}Te?nrr-FD93Y9yn>Vt*}})U4I`g7|ss;EONqh zM&HM<$l(E1Z|!I9A1!uUn-)tQUVdL$@VZjxVr^rph^`wp z^Hz^-{d+#|=5a`l8MaLQmi1evPmw`c+9>avDG&R7u85vLm`?KKUXAda*SSVj4XyXZ zd^uu^^5csn^=i@zY+P0k=G2UanJxv{^5li&T%NyB?L8>H|E#escIEuJ6E;a=Uu{Nc z-<@Ktm1dI*9dv*1f4V$VpB)}IY+B!Gy~17a6q1u4mm*L~Uvl@_c?ZGiJNXyS4E4l( zlheH%>YribE#b82E2mZc@I__W(0hD0m_wIFbAnxqvOBw+&!5(bs<7r) zc zYF@HA>gDIT=WN}npzhN=b-8M{?<(t+KAMhus;uImWyv=>N&+~0Q5`aOC+qpo4XY;-;b%k-5u*y&x&oF5$tTYl(4sh8=< ze6peTJpSai=p;`M*0Yc3pYT<@&cAe`)lYFb%&LUS@x5N}t(?-gVY~dflj@J`w5v}$ zB;7P?Y0#W@=5=@Syw{bPHq^M=3HpF$3SZsuILw2~r_PM4EmX?X_&!&>v(ENaq>3eZ zinZ|m#p+g4SgLLt+<<9%nDpC%*TJkirusq^JF;GM!9=Ou#p{Q6=N(-?_aHxoG!M(> zSsZU_u}rdPbsf*wOroW{+lAr|b-NJHjqIZ*$ECDR@IQbGl8#5ZXh$0*@8vN(-jF8K zmd1O%aG!0Jp=u0$6}H#zMq3magM7-)c6sf3(^Qf1=VH<46;FGcqnpn0uRp^qGn})mLd6De};|K+0(g(tGneASZT%X$k*h1eCBs4hGZ~L8m?v?Msdhrv**bi zeCro3d)-c={W5@BpgQtteLJKgqmMD4`D814^~;+tkBr_^xX9Az&evU=#|g9EH0v5b zS-C^_Y0^(64V?*jdXk$GM{YfjBX1oV*_UfwLi?@8e(&BVSxc`YQd-Wu#=GdI$$spk zZ9BpSDSVYa&$st;CbvKb#U0wJsY{MHmQRO9Sfd-KCi_et>Ux?nXS)o+cGR$T%e?B! zbf1}(y*Q{VlN5Na>`Bk+s}!`ffVR~6lA3cKjXU4ueQ>S0k_++tt+UT119DRFEhB)kC4yueW>%U9Ou3?X;8^k&3oOv<7Jicxv}##%GG7p=A`St z>yvk9CZXb|=+I9!kD?AhPaMeepyCK5`{-0a<&r>Wb>>3n=@;p1D%^>0G<)X#Mgm2; zOm!}2by_n#Zy_&S6Ms^vGd8`XzpxaDcybTNNb#)r>;u!pL#-}jyLbejEJC_Zt@wH$^*tx;Or!i14U# z^1eeWr)8!v-Ze(wT#Zcha9&p+_5{4I#5gRqqlUr z=K_R}cH~GAn_7bmr`l~LOrqe#U}C9{x67=z9Q8}_uD4MZf_j&CI>xje@F^=V9-__{ z6?5E&HtY1nP7C?(QrpKo>Ui>jk4@i&#%1=#gC`GP5t|$?vp7_~>Ww>v6K1)yEbPai zyrj5v_!C0^*tO-1Ai3q(UDK`p-@hoDu|K}b#z4W7^W3_}_`aE{$*WY_Lgx%fXV8P? zu3;-9ySJ}I?p-_Mo>oS4RL)@Ol{nr3(gmd9ATcC3^j2LwOe~AkE^V1nLZc9Lp|LtyqVf_t^6f5l%>wAKi zR4DOQ-xH0ll$6!5TlqbZwU;@3@YZ|P9A^Ds7P;)1+OO+Fuak9yBi$mI##&!B*p&_F zwvK&iwvpB6qVnnGHMtek;D1W&`8nm+yVolZ1$4N;0)_Fn{f{u-&>t;5uUzd;GA!*c zW8nDE)+7Hz!BIiMi=sJ2pAvJbz2>eQ<&u?`WUlxtqp3f$L_0;Sx-TNunO|x~%Dy>s zFrw~Oyb5>ErMk!x}TOdikvn==ye98RZ$)Kl0^CPz=@l$l))2 za@GEO!d*Ep&rTsym)!Zs%A9yAR?Cl)0m-(hcO!*)%oy(8+0}am=I&a{!*!p7Q(pYcT1^|`>FD>L)69QTha?3wBnad#?G!e*C`g?TBUH66r~YijR%s*|nEN zQ=XBKDw16&{w6~zamAvou2akMc{75le}09b(z8=Qw`Q)D{`8ns@Ou4A6LA-45MAVD z>z&swU;g^Wc%Y~cHR;$;o}$C%nYG|+Q>*8lokVYYMXqU7ym7ycZ+sf`_?s+}&i+c> zw|56m*ADG@+&o(!ozq0>D3I)VDe`!iP)m&qZG0=)`=}h_p*LUjyp)GBok~#NdAdUU zmzB_&6p87%c6<6vWA+Bvk?UQXD;E~nnJpVEeb)W>Rm%hA8aKwfNk3_}LP!VY#l$s_ zN;|FD%X+p9)4;+R;AVw}7w8VV%U!v1P}z{N#IndZ9BHMh61^|$6l;#%#LN4tkQbOY zAY4 z3a1q?p5A`Lfi@)9uQ7an))7P*b@{q*A*5$6&+D_i`hldfdrEym*Pl}3GHJN{*ow3B zm5TG9pzH+B@_Xs+P#b$Z9#Hh-U!QC}BU z16`)N#^+xLE(YGG2!LU~yTy55aNT#h!IZo`)j;C=vAyq7bIGb3-;QxKyG-pFu;bac z{65!eGF|!QktKZ#W@q+?P0C$zO4;s1D?zR^z5(Q|I>~A`+Jkl0fph{K6BmJz~av|JQYdXy0&X8oz>=+^q_;Ze&r2_@Mr2OHho#2zzCAHQrA*@o3h{Fl-zP+Nkd^syV6F%Q1$lg4|shVEi?OTBusb-RvrYGUd z7(OU{P$vZr8S{DAPc=H%rYPs(c=rKX(W;r%=djOE+3JDYB?ea&5#)9*hWzjM-S(Ls zmt1-JAQhtGQ02f>XBoycFS&BE#kh9FncK8+UZSX==JnyX>%}e9aw8f&-xljg7m~W| zibB1l4TgAbO0vwhK}87=q+aW_~k_g>BO&9^pT87^>Ou3H))jw=ee~P zFV0J$>FQM&3^H%e9Y1xr0!E`~Efr7k>SnzMV*#~g4&M!HMal#g3dX{FU(4qzKB$*y z#=p6s_uvU*wB^;bBnrGwgVj7|5_U#)X0}?jnfqwM(bSi-51@||j(DE&N;23pu*a^! z?fS^j-Q`9WUW^j1Dy&Y8Rl<|JirVY& zcD{EE<&xCxpV0$-lP@XrbVsx+n3f9+3Uv8&6l?XIAf(?lU%$gQ+*&HpT`D>5n{NC? zNcbxyMt_&AEbFS?Ai7LI)YHgZmBx&lY=Egpt;t<)?C$E-bTaM3{_KrfM@4)30y?Qq z?&i|}nz`>1DG5!6{71I{Lx)FWyVR9Y<=>KY#SfcV%I}U@KJOR=W06qp6!uJsoJb5Z z<9I~3f1yEuM(jniC+(AGW$cAl-OYCR-Rrf}=UueLM)B{~UU}n8d+jjev3m24#lei_ zOwPeDMz4YkeFuYbr#j^uq@B%QjK73~(-oeq?wI;i9(Y{LtngBez>PVda^JX)-lvB; zzF@Em3FSj}bzeK5)(PeHi}bUY>khoVVOO0e(qtdK-=sugv|6in3_4cfHox=Q(I_^{ z)srmLLcIey?M9Gn9}D(=;vQ1F7+9G%9_?o|Mo`z;jzAf zbLb(>Jqrw6ku!*UU)jiMQv5?k6r;~wK9ZNLFuzoKL)!LZ+vj1)Rj#N;9rxAmtNpvg z9I!Q=|+o>kE!q4x}I{*w1mJ&u1ttclLSdZmZo7 z54=y8bU@!O;2cy$&+puQa9HGOz6t$Oh(g&q`5Nt^W*OzL!=txyOK{I_9`U#?<)XRt zWp)SE$#uH3>tEye&!&?sq^_jiJ8e+9PU`is{moXs1)ktrAW*PhE@OYgx4>=TTVRL} zc|vbSuGrs0=y>FR+=+o9HtN@Gz7zW&ccNf0C<43rJJB%sf82?{VK%BSY`*iqekTI{ zSN_BnKpXS_H_-myK~;agCyqgG1;H_>KM0U&*z-(^ePxg21-|qiqx>ZOoeyl8`fZmP zxEPn-e%Tp&ATKUPEto(b=hyvB4@at0Ot|aLwM5D`{iRkciobc zT==9rBIB|LhOVuqS?h6$TKj%yo|R#Jphw1So^j1wxr1LS6Q%ryJ4PA?k9W}9?ae5n zqb!PEwaS#8yM5r^VpMF|X?Igg|Cc^$GNumoA0Iqg4e)Xw%yZLWmbA7uagfC)lcHvW zLdewpW=Qhn)SkF9*>XMUe%#!j!N=u#aj&XowM3pG15X$0&4y~KWm|5V>V+!2v&b|& zWv@kl@9QLfWJoF2Tf5)+Vyt)aVrs*5kcDVVPEkuRVxr}NE(NOl@!({C;f4D7z{t^H z#^YzxZWS*u3+>{$rblu&yAf4$#gB{Z`TEK5C58z9e({{c0&N&J<=0Xj`O5puimWt@ z=WfJ*8uSibfWU(MRa7)s1PuE6imZZ!O)2H;r#~6!;>^d6K2k z*9Tn{vsiKaP-@1QH~1x6D2ILhi=_c{Ut)goO3K3fz@F-9n3M%IYx|cg+WjRZ-yv4- zQ}c@Vm%S-KW@R}`CrFxcJ`_QGhCk%?moUS}S&Q>5!_vz4#U(=~pDzs~N_}WK12pO( zq(bTUUbskR-nl0-K>7B~H4@qf;!Z@ZH1cw#Z4HXYT~Ok9$a`9USYJ z6SlvX-N_g1=a8q>gZfHT15hD27PVQW^ULgrgV&SW;q z1InpUr;}-hTFS2U-fyX4yGb$odHC7Bqt9a)UuEz|g_pa5xTg4HpOt1N z!;5W|5QfR{`?isDdB!jG$;?m(gb<=A)7=&F2U_rT_4Pu%BSjkNGqw13_?7r`T-f~* zDA5^37Pf&Pre)`MePq1jI)xuaAk>WIG$R;oDD^wh{)N>nUPIe_D`$2tZ>y@Oc80rO zHPTT$c-d{AT7im?Tyi}qi^;s2@FIftNpKKmdMy4-SHq}pL5s-l3L-VE-S!j15sBI zvpRnDn;?l(S`W!`@SSPl{&%mTY337SqJ8IaeJt~FVO6I-Q65#NiC9Y*Bv)x5P2+78 zV7`)YBU`sua5B;PC4J@*9qyy%qr452bRS4dc3nu4JM<*mBT&UJK89QI4##7<)J6@= z=gHu^`cifA#cjox--`%+d-Uo8FTI6!zuzpGa=%F!*W8U0*_UhQk}2sD-DY5dr$p?tr{ZvqLtn<1Y9+zAE4+_q%TSpiRnv%OF2e5 zhqpEP$k{lX23k!sdo=m4op)~v6CdTMkSJbQAK>FGKEXm;wl=zMRB*RjwcxJt?ss1+ zkCg;a7nki1j|QVR$>CpN5Dx*Q>YCtZjfzj zzRUM4NoNHAheOtM^qRQ0+~|80ZzOk4&P*(lkVHwRWge1#rhL+}IsS6{P4Nq4O>g`^ zFtNM5{$e9`s=;(A?(Huc?-FVbXG%qPaLu2jh)443w%fFw2`UK)iy9W! z60G!LzaB0_ZoEruacQh^vPZHl$|s~tHQ{u;^xHOMxQ+pY<5W&Moe-I6tH;zGt%LRr z?VUn$BztqB#-r@!?4zb#>P=LdeaB$OQo<)`J;GId?~sh9%RA zXVvt_eph--yx8R@4IyoAh}BDmCn<)_=IM%>;N=FJJ1UYdB)g-&Zr zi&)d-$%^Mb`)@U}laIcn+nYN7=74@&H#I}SsOPwx7q00TXM<89o5$O4tG=PblrYsh z=hvxgyW7{<7X!Q7w?N<+)K3JC{3YoCgZOU*jzMll;21dZyZadQ7Q6cxG|}Cjkx(2Q z0|Dz^f{lt1NHB#N1wmmEP!wW&>I-6E|Hjl9#Bccy=*=a}{&na7%DF{vZnW{QJJDcG zxGl@Q)mg|F5!j|5>o?A2rH;ZPfec zNxhgYE0JM;vl3a0<|q4p3`5GNHj#jgCdYTzD4E_&K0n3WczU4je&e~sCe*6L_3%2z zf|}Nw~yHCM%{SR|PCpZdqNQb?9bp_-GU~dB14qKO94Wzk_a&Mv@V5nA=dMI{T z(M;>+WzS*1@8mK{=9l)dJ^OC?y{6&|^=ciGtxh~t>cF7b`7c*}N`}5LR>X{z#g7h!KS0$%(7$2JLZ^7rYr}%V1#vI&I0xcZ4$y7E%qK zA8A+i^pR~Tj`*aY?(prvtqSf7brLkx@u42{RMA-`iLl%g`o0UaZ|blsnnvvA9O*K* z%g#|*2rA6Pohv$T;?xl}nOmK9YQAvr5p~>SSep~u4OEy?fY*(nf{Ep?-`{%mFl#vk z^*+(Ry~m_VDBYarq=U(v<-0y3O6}{TFX%f=)^XvJ{(+-o**dvjx_;);<1?wkx$J6Lw}`+VYl<4XP{pSIXH z{Fye{Vu~QkZh`wU=Y~`1d~5xVpTFd*`PfQu-xX1cc9;|m+4tPyTdP<1r@!ts8*I<; zpA)l`tiuEZWmO5>=&aSB{q|XBR;2%x?W~fi0m^Py`4OWi;~470obj$%Qm=@ewghr4TJW z*_(7OMw!Z#YGJ|&g%bU|)&C0jVFHOUW zZ905>)T1{`v<9ctpXFd_`#yH6E$q=SG<4UVsUpQ9hq=jY56>f_Mhx%X(D3Fy`Cxyy zRrc;e_3|{!KrAFZQ0eAr=WBP^)ZtaWu5JQXAJ&pwd%;1!qjQ9Z#PE(6$CG{ByKbjK z-#!viHrGCHz<8|aRZo3a*FM|uvAhrx=JI_fblsPvGTTEdsn`TMd%8mgB|NmxKh6DE zSrBC;U<;>w+U3hsSF~s{sim{X4!wH$PDXAospFS@3*HN1QIKHa54;qt&(17a$l0i9 zHQH&jx*YjRLxFL(p%v-!*G(DVpBCMb3Z)!+OJyVHb5c_bno(Q$d1XMY<>C?TYaDyM zm^4YDXY{iKDZW^eg{GQ#RU1DXX!kp7_4=(l+vUWWb7&)DoJCWM?mib`8a|H0ITF@> z4Cjn8lAY8slzn^!Dey6V3!P_Kh63;pD_&a1%B+j7b) zP-Vz?#Feef5QOx7ZvZnQmGplyuC{63jj$y|&pNdzKt#$>B?fkf|Xv{>CU~K;VP~y4h)BP8- zUS515aA0?0XIl1k@swMgLgiU}#oo6+Cq>>=m7|Vn$}G$Dd1d=7m|QSp<3j`to9|?oCv$Zknq`2 zWqF!T6)JO`HF{pxDpKslvof6nUK6E`9Gq&!8Ed469Ku>Y#ynqQOE|sX?I5j@2dXg3 zs8&ab+#%rAOqx(z08O^i*+PrGSIv%*d~slasga2;zq`|YMJ+Qv`bOu(xkrtY;gTPC z$zFT$HU(S?e;({De;}d7+~K}R>Pu&13^K5F**ANAheMGVy>et*ZXgeTa_n+HX7Ghu zl82~5XuoUdhb95RBDUV!rxrs)Y}5uUmYn$Jog-dD&3#Nul6KsD`XPzqygi#$Q80Ud zosD|@seBi=BshE2UL{h+I(lY0&YQk2@h$0vtV%ZqwiHB6P0JY7ih7NGUGb=$ zicJ-Mn*E&KQIs-UUvnT$HLv3?Rv^ds+#afX-rq;0*-1xkd$a8^4(rG-b^89U)z;yT ziRF>_=Q$jCS9otW#Td(7aK2B+OYhoEt+Q@hV)Ds>t!YNT@vK{BZ$tl~QHj8WdbRyY zRpc_^B5%JTI3zg&axCH!AL}r|o)rpAqb=uR1z#+W^z+`=x3`!xec(f4Vfevh3j~NI zlrw^3Fux+e-zaB<*`k~g21`5w#KN~gfLNkS6ydQ@6dVmf;WrAwK+phBU~~Z*04o^W z?;*e+@DIKf_}f%)1@n6aSJ0cQ&|-eC;L4BD-VCR3|JX16^#%UdfZ~6qwEkmT^?&5I z{w7YsqPN6JnBT)m_2+eM`d}KXKuV!%0SuU^f}wQJGdk;pPrmXTKq|5 zVT?~T+l2q#4smUvx}9q{yH@<;`92QvtL$)31J~Y@aecBj?$R`KY;4BkObslZ4g2)J zNU-@%wnjM7wYdhlhIZ^1fG4j_PLK7>X?6;ik9*#4wX$Zof%~wlrUd_Xpa=Gx`dP=F z)=O?$;@7minZwABGYnu4(4Bl45EH&rRFc6(mn)_rO^cd=#!fbUgfq2#k73|}nk%9P zo{Xs|ohxCps?qn(9r19B{y0*7W_8}UN8y%r$J2u~?yh{Cv+Wd6Go5$s)DW%l*o_Xh%EJQUVo5Q=nk%0!D4H^BszWY$>~78(k$=)D1bDxcCkxJ;%j*Ws-iq6ZB0-9qIE7l|z-IoO)Mw z$r6h_WvqSsOZrWXhm6xgRJKzFFZ&}JduAi7MA^s7P$>>Ag(ZWoy*bt*ZKFk}{SB^) z^cToeG)g=+ol^9lkb5^O*K8l3AH;CgGxZh2{X_2kId(tM}qU z_VR_aNkboTMrn3AHcSOQ_SG7x<FxGpmgJAcl#rnB>Oqu{S3~FX;=i zp8uujvB*DE^jPes!!|79-GXa>IsHAHsq3mB>>n_}FXTm)f?E*dzJbk1)ipu2`VuUMr;+Yar~Z2eRu z*WO;!EK5H*EGMVdZElyEN|3C>U6bp^^ep^*>&(k?qq=+HT3@Cvwg<@6#k**>PZt4W=2*Su@^Hg@ss*l z3b5Rem1h&Pd3r^Q(eosG=&WQ^@Vk=k;`iV3=vs~>Tc0a0(R59gUgt@)-239lYMIAH z8_DE^MJKOFCfdX{YJH>F2+_pjJukA#+LE7V2GxKCuZeTa_M9A=kwOLr-y4&~6PpR6I2baw3ISx`Ecokb?R~hr^&>q!_LvZRP z>xS>@3p-FF^>?;d`M96$Vz9rgeB5t@u;R7|Va37zZ!7;-h=bcIgcV10t$j2e3iif9 zBQa160GLo1JQNQW-A7@d=-&%rwFO21io|b%H`q-(R5A)0m^tTmgRBs!5%q}`TXlF0Y z(N4B{;&|Z1J^>Za+l4keNc&UBlKXw5K48*V^zClY7MVrJj8{}~Kr`mtgs72uNad=F?x)iBN0@2 z&osAFkm2^F1034DuHoMl{mYm+bIFp%;*WJ-X71= zU@=ikd%B=;V;@OX;Q4 zys~9d0oZ5~npZ4Ie!?}mfP6-!K*nFMnj_c+oT5dBjdy09YYSpY6B+W#w^p<8)z%m^ z5)E>gJXJ*J-lV(p?(sts16h?qRMQCE;r++*CerSv2=kUj(VbE!S2#cJcxx=R;7FIq zb!IhrTJze{oIO`aUiv`JuY8Em)zSPI<9^}d36tr!P?t=dVcK3T?>0WhvbQdtJuhU=@qvJIlLDhAy!zb zXify?%q8dbYZ*^czb@cSAIUUOey$m>xU^nVn8hK{yeVdf@}ot>(L&Mj>B9J>tv zNm-YdQ^tg71So?x|EZuGX)N8c10xgqe$*Z4>4LVd{mIhlYZK2ZZ?aK_ zIO?c;xg5Au%Q7skDXq!ouNPA@w)!T&(JUi+ZzE|nxlr46)?MX^p%<95!mE_E90$Bw zb%k7Lt_3aU4)s*O>=;ODy)d~jX20;d591Lr>XaKh>J|0Xm!ZUu}D>qFXut!+RSRW-zm-fYbJGD~|o?{969;Lr3Tpr*mB#S)#R%xx| zK+i6N^He)~l=Wfq$!^~>R;A3G?v6i?7?Ad8QaayJHPpTO)k3J}6yvR)qo=Mnp6B^= z@R8;0LEW^^oXT15CivG&q*mj5+d2+)l{^kET7D(d=e_66Kn&jgdYsr11zmGfhSHDf zYK*=%*SjE8^2f5n)E0KLM~1Fm^_)RzF3KI^JJv0tjf(L`*F#tkE!=S)C0dob#VL^`;4@Kf|zs(waGknJr z+YJqDzK8;O0bC0#API0VuoMK~C^Qs@#Q!#Lh%JVV*wX26U`pYD6M#k_p@7&TV938( zG9m%D;`cd2ZLaf;CpxDPg@t0lwwf?J6a#1r1R4hg_g}&4huGh1#`nJ*GCX>lW)y|T zKoMX|Ho}a8W$}Nn3E%(ZjoA9=fO^>oct+t6P+(R!D$K*dkOaV5VNl55Uu|3PMr<=p zz%D^S4GB8epxpp@1+!04Sik|s|2}WXE!G>+T{MC9g~Q+=C^Q<1#$X_DfJZD~&rui@ z6pcdtzAS9+vWLfSlX63CXf^at?S=xB9UhPV{W;xq_VO2qAdWW-u+A_L6k?+l1i%{> ziUQ0k3JE--et+Wxh1tv-(Y-RkBwIWL1xIa6B_OJRcml5hWrxFKi4fDjkk+<{0t^mJ z3+``GfWx3j6pjd6`WN^kjyF)%;vq;J7K%fFO)&u#4A^}npzZ*b{QJudwV5{*(drEk z7)=ZWi3Qahz#AYMSYRBHIAE$#cp?lv9ERQ=c!UI`66~7s105j&2!cftH={%w1vD@^ zaIiB9SlS7IAb?WaNZ3bV0ONoo0)qVIMr_M!1Edmwzdsin06{Q+f{x&uS;K7?Yk*LK zF3?ZjfJfLLtTpUr*6`aT2M9nW0X+V<8~_jm{U`8f^Nhl`$xT3DksDD01VKOmhy?Zr zsB$aTh;|czg^vWBH3T4(Xh4aBNDhGpOSR#kf1q_y$jz(~Z4nS)wKzNk0lEcnP_qG` z5?I0rGz##p;6wm7I2^fMyn%iJ;4b{+4FDoY9D*1jg%j;40G1O4`Yxbj0Q^z}$Sa`R z5D36}A(6ybc{qBT6bJ&4N+j4(>4yRVc}C!VA5u@8UM|Myx>q=MafR683jDyygv7|7d@A^L`r~Nvt_QBJjW}1NTq?K>$m|!8QgD z4Oj^roG5RZ=#H#N0BwL#J19V{A@JaY0u~+ziYyvje7`@Tn>8*Hu}zB&OuoYckA%gB z0#FGSLDaAj-G&thfDAx!Z-i0-EFtj#2mz>~0N)CZ{e1@pwOM}<-G24wumLiO0V@*{ zh7EA8FbFs?TUtc7T}8nFM+M{!2`n?f7e#@N49MHYGDHxu^9NS^M!(eJE?!L+_n$}qD=x04MpPseG5n> z8W0I^=M;s= zi2`^6P3aGNg#<7#py7zwXFw5c6#!mPV2x8itD%7@1*RAYA`v8D$B+nOTm%%+Mgh>U zIKZVs!m)sX0)`I@*i=9ikO=Tx5=jhlLm{_oN&y6pLu3A)QaIv|wr93LZYb0?AzlPv zxsV_T`GI&5H~>{*5JZg|dV7`|*f$)9{Cl~9JtS~&1Th!{wOvL50eYsmzl{O{1MUtY zi2=MQ>^3Yn7&xT_-T()1qa^X4^0vit!)+7fMF5Xr3v&YIMIZr#k0)x+9<^PL0s@YK zf_oMOF$H&1fk$F^L&LU7OhKO>i%0w|rZ52WVu{&AMZ>pg*x-P4ol|rrOw^`NY`bII zb_X51W7|%?*zBZZ8y(x$iLH)(V%t1_&#YNjwx8>;g`HfFYdps(CMXUQ2_tLo(T+SFqz@v`E=+IZrOvg(0VfaqoZ1xX3tP zVo(>oIP4)qyrKC->RW$|vDf-`y8J-Su-*H~=qWpDb zdJIJ+%**A#G2gu>pKrZiKM-3#hZFs#>=}KO|9YvFZWxQek6VfFIW~y#|F7Ii)0$88 zd^qg4bIVH8&-FB&F_%~gBJ)ZP)2e(1zk)*K6>ZbBbJpwQ$57GJCWBuoalDlY@|CDv zeEkAOx<1xUX8w=ia22RfU7xS*`~I@UwN%k=8l?xyCsA+s?|j|cVu~JMMf#{PcdM$@ zc8@w%t6KeUHEwavKQ!(Q6&3YkLmUbdS0&kwE1Lcq8P2o8ato*k7d;5nXW(H*y+%j4uvvX-3D@O>tRmG>tu3iSFw2VBGN)>ZSP? zw5@rVTOnf%Qi@h|#7yi3}Q=q=ybaWCfqWQM&Pj$a4GJBhL3i^i$P9>3!g#PQ^%eb$L7Zc-z zi@oVBDkg4bNAjML)k)}mR-16ICF=l0wODpW5L)IS-x;)#nNb{ z`jOnFdJaoRSzxP6e-oL`l0xVd43_K%3-PXxIA#8!uSt4#)giW4=d_OW_^wKK_TlRf z#NFjJ0`p35kEs3d5x#q0>PrUuG_0K~;nE)!zSwM`?VG3@k<6G!)C0uqJ|DV z@rSxGK?V1PtILnZVkD~bT|C(F#2MxBDfp`dO1zot6jHB4J5ASjvVHQEK>@XG)N=|v zvs~IA8DlMHnoSi(d5=|I!zO}^-xOSLNhIkiS@%Kavt|r3U}gL3ytP2 zrHAPGZK5_nJJ7^!0yRe^&v7vA%a!0YpI*>e{BYMu%>#rFJ^wF2Chv!okf{fvV=}RY zK_fAd{|6;6vjxOd4F$al@ScOefSg?=n206 zvz(a_4NY52(T`9e<1EgAne+b)$>A$x;Q#H0Bt(ai6;u3wLdf196i7r8?iWaak9v4y z=+JPn{%?CgJPCFguA6T$vSeop#GzZI$#%#9s~ft_*&;h+Sg3H5FES|yBvAN9=|6!W zVu#C>@~5nO9z<;^j$1! zy&H&WhXEAU=0a>ybwr7Ue*VoK1Pe1+-ycK`PfIfl`+I{%K6=2U&t z+=>bH!K1@?6Na^!K%vcujf(IC%kytksDqXq9xSR9{#Wi_7_ubMwWM`ZC6^lqwJu{y zXDa;DH;KzXa~Yx=DeFWDK@#>qABa{>Fp-hJOk`DMK#AoSQhcZ#iekmah)#Bc~Cxkjv;-|M(kj5MG74b3ii)qcr=B!f?a*x4bPybChU`IeNyDfowx2?#L+d-NM%8U;IyeN%M1^4yP3*ZU(>_ClYc^t{`bKfSW9P!tUFq#prRXE zu_Zl4de<&02z0pzskAjTRX}JpnCt~6ZexnjHk$)ptPc?TCK!wkAbS!0<-Zoq{lK$p zP=ASj<%9=&VXLfOO%w8RhZtr`!e^Wiu;v71kCz4SL;x}9_%j2?YbIE1FEB#q^OS$o z(l;n*x0Rj>4vLALO)LgI87j{g2qpuXGhPPol)m^QV|FxrAl$y=15yj-hp=13&SagN`L}-fq)_<j+avhhQ~}rkc%;O7j#ggY#kL5# zQ^70(JqRx3M`m(co`|E7I7gLVVI|ZD$X=092Qdwy4LwZ_7}yEkzY_Ti;*nz%r)$8N zgx+>ogz!&wlTu2pVQo3Fm&AZlvTj0ql2Cxcw>53OPO+F6#d2un4Zw~i@=YVL{bzPN zQ$e}XxnA%=fAIQ4Yj0{t$woZds`i>dFoe4tPY`bF*R%92A$XV&Uu)0&@!Io{_>p-U zg}PdiIW|~!quu<9%b@JgzOFx;W?=OJwRmPbH#I9n{XXJQ!iT__$lu1>+8?U zVEhQEn?pzA8`@kSTg5TGKxAWrhf%daEgyL(joke$xB%9B9gJv5(E75GSecyyBqY5YOi_`` z8ycz_$d}GZ2qjFw@(t8l*WQzxwzJ#A(iAqj-vT<@ORJ*S>v%(kIL~vdg}hR}@L$ zKRQPh+Z*+DiEZ|-5^*e79!BrT9UVcl zeCU~8WbmmsPh)@Qt5jU3a%)g>JEzrW3y1ZYpd65X)r?Hc*wJ(!84c%$u-TDn8a^w$ z8NPDGpuCrzUNd8hr?Fh3ze;E)nV3veh2OEa?QK8JGzuPhzhA1z9 znj|`k9Y!#*+$hVv&g+JR=mt;MO@YuL-&d4@F5E$R_SAU$>g1GzuY}tjGNiakK|jfB zRvbUL?HA~smGi^!KkbbuWrpt|(I0~)GUnFX>Q}FK z-lJWF%n@Qui~~P=>drk9tO*y8Ds?V}JP*DEQePP*%{uc_3sI{_Ox4cHLoXYi$oTFPP97Jy)*1fpm<^r+;6H z7;jYM=|yF**-HES^)1 zYj(8De4w!O9Y@HqMI}(ME9plr0HevvtGFq-XJX>nqn(25|eYo<_ zs28^&s#83ix=^hf*Ko5Uz)P+E_CU79Hz1n4dXJ%Enu*Up{*}>xJ4fR5|>7U*Gl*qUipMknVO_8yIk{4Frhuo9b`L3&k z*otR5D#xsu+L$o2a&&#r~VWaSHwX?v%IbJ^&Gpde2XsnoE%Ag78Xd zV!#m&iI0V3JrQ(}IWv@#X=>bGu_0*wr@Sp?^tpL%n(o^Dv&#&tQt@8#H&xoHtn*d% z4OYJaB@QV!Oa8W-V0rF@R;j^-3UTi4SHiinVy9?n9+rd7N-KwG1xqPDzp1I!DvhG- z5k4WD17%wX@$9Ecbe;%p+RU1UHiBvih<43HMJ-a?JN6SuNrLd`n(jftgfVC?_F6J4l> zPU$|?@^eLSv8K!>@s#`=HbIhfc|BLlaHDn|`i@pIdz;qyTaXDgI-cQ-d2SUIqJ`*I zI)-lBmjd4VMdEQbnj(DdfeXh<>|tv%wk7Rlk@AS5Wxb0j>qIaMoSpA3A2A7<)lk(A zMBCUcQRb|X^uLaaSSo?PXlNbgy%{| zb~!@RLg=?uD!zMvtU&1a4epagKe+{4%;%TnTAdJwQ15qrjX1 zo_DW%Mn?Kjslb%c#=G=n2|_KNOSu6C6dV&K>XCQ^I60#RWm84bQY3=#=b5X*oJ$wp zsasm>c9~kqCqFNp5jE$QtDOc8wnNzP0Kb!Gd{K1OG9yDzIMWbFZsGpT_9!b|ek%y_ z#Rg20ii$qCy_b?bcFsv&yxT3+^rz$-Caw_nnZw26>HYZb%B$I=)L(N5Yp-hSj3V9H ze+~cW(_j|tsF&xmE9HJ8^WbV>Uzr|swRA6>Ia3L?b9&y!wYjJ!9{Z;#Ua}|y|7GK~ z?l*xKTbiOSPABB8dvI1A>2N9FBQP9*67zIFw4ZUiwdF*ZAUySdatq&H{1=`!~*5a4u=|$S{Jxko= zh*vUxw0FDp-`85andseR7mpSYch#kBwQ%9!G=7P$FQ80Lp(hJ6e%NUHJyog1sE z2XHccabk2^>02jSHL_U&{h;UpHk-YRpBF!N2%j#*&3H{8IqKvWd^Ly{cOM)N7>i&~ z)AWC|irp%AJZ7U&=BQqbE4buzG%NlV?L?f96`4k(y~fKQIKp1&nrb~5OijVgA$JSh zikBbxE%kV*VbH76gT7w7u;JXi7P}2hucTnY94Ee}_>bsGEA7T%lY>1eT-G99$^XKz zatRe_zyyJ&sk?Z;;FVQ?TWinhII9Ju^p zcGSDl#*Ik)nZ0_YO z54XpY=*HqI|CjyGE+poA($z&0Mnq9dGioy{lXt=7Z*ZA^5}66Sgzj$|A-$dQbQjy6 z=sA99G5QnAbC?mTMa6*W^#?rk1F3M3f z2+{q0)zT#4OvYwsOi~nj{p*{+$uR9Yocm2$(HA2?xl-1w+LPnXlx)~yWWJ(DX8fQB zP{dP{Jx9dGkk|#<@9`NR$Wd2P;T-O5$EWpof!;riepol_y}-;U-A~3cl$w`3nq}2j zK=7{0=(RxLppHos!%ob6wrS_8Zdz+6U*c(SYl-Av2*3Loe`SxOQK4(wRU!o;XgJv5!B2Y^o#7lG(q zLe&D$R&#=j2>R>%8i@zk|G4;kg~9aS@1DxOJ6@@mEJ?)&seIIpZ4+T(|7w~OL|FP^ zr%5BSQLs!2(X!kj^sV@ngJ{pA&Qy`gcIsWO&~?2F8p1~1mtG9ExqUEtd?=bf&n9@4 z1X*|j#k@SRz@?hF7H6Q*4OQCjBatQMoI^)Zfi6Mk+M3Q@`QU83B}nU!c&R^B|5A|S z?{igVzYI(Ca?0`Zj@GmwfA&8XIR$|5`y^A*K$jS3zANQ!y{klcJH5CO9s8fqs zUbt`(q0p8NeIgw0vpJ7$w(&*W$z@B1R!#~BKKo6?H5C|^YPp`A44>M7m$j5E(Tta+ z-X7+D^zgKBn}aX^o{#zVIuCXTgKLDmwrEs}$ygOcyrprsJp81Toay_nDMCYz#k>RP zFyi9mz(lKv>W8)}2c_^8^e4gswZ%}EH0A@vW7E>LP^p$AfXPe~Wu;sux^oJL{qan$ zz1vAyy-;AW1ZlJI>>=n&O`}kHZfn&R-e(#m_V&`nuR1b+phtPIEctW5iPaD3ERWBO z*8WM#t}S5ALijP#Z>BT0n75+XP9lWS)ZOBm+79>cD}*CH+MuIsIaad8?S1$S)LLPh zi>&Zgfo+?mYEzwUF~XS$B{doyW!VhAQn-R!Ys{Vu(#xwXmyZIrE$?sNbZ(HDOBQTt zaf5u~z)S&Ur3l{uLbGUEyK!_BXJo3C&s$?bqnC=E{3&poFOTzK-FJaMKA(Y2-u*gz zEBh$Kzseg8hp(zJ?FsQQcux6A={dvN2W91E8hOsnu86x@tw|7RcpTSxsok9e#l+>s zpJF*Iv95=Mh$B=&^e&(BQ2o#S=Iq+}b%X5U4l*y|2y)a6shlakoaGg$L>gGliD6hV z>zS;dq%v{)D|nEcCdqK46A!t+3SP@qQuW3aWw+!c9D`w;b@gP{{Mx z>Zj3JRa66FTTkN?bZ3h5By#QTS3xkU^DQB4!qZ9AQrfn8df>n8ewM4NF(GD^^@eB4yX}SAfa)2qFSkI(x>*fh#E=pr7|)6S57yQSzdfF!bFb3*#rWbR@~*QmJLUY zS-I*TfuR!ca28k|BpTcnXkQgKG&B8$)cDm<#Eg5X6TdxHa6exf*lfrWv;Tlsas-0NTW>3{ox>pOiN0g)S?h0KBB z8-Y!GmphRg7X^Jl2h_Mgh&FycFl1Zc1rWusaR8BG-?FP;F9)=QXM8ax0gK89xwl6F z6>_EN2ZLJb`*a{MBdZi(4N()G?H8j?DWf5p?*G zc3!v}SofXseGd#6UN4MMl)Hm=v1DG-#hmZ;wAYFTK$6~SkOOr8@BY;>ukS*A#GsO- zHjGOzZLs`kyeo+87_=igV~l1$r>OUx*Xx`6y$o#ejMyK7L@~&e~PN zU93Kk4|izVo0b#xCK{*y!*OEMSdR?8`vT635sKu70sRDC!W&3`?+F{XV8WTkZH^(JV`q>EPVX^CTDAo zhaQYpbBcliOkohxwO#WNaD=OMXG-y+=68&(M_+pO)Av^P{&@P2TK3cZPgeh?uYBFQ zJ8eWFnW%6SaR*V+Y^zdym1nM9VcM~r4h#^T;=5twcun{A(+xzf{~C0nMg#rbl1Z-(nu z9wk(G8edp;hsI4cxrcg!*!dtbMeXjB!!Ra>x$oqnvl1|f0s0|Lzc{L&nX?<^dV^}! zw&(twg%x}CP6vx~bHu20))R(sHpY^k?q;xEJ7;QhGv7FEL-WCR$@k$*#XVq^hEMoD zOS9ukX2yiWScHYghlY!nIeZZ>Qg3r3(yNt&s}Vot+;}cFnU4bW+M+RaqtVa(55ddS zwt(QiUm2%(&)~?3caGthgSWvaUf|rkM&VDc+Y3F^{E^Ey6U)PM?E*yWrQ2Su@qMji z=*ZWor9Z*)JEmT1-hGF?|Aig;#Tq(PMTME2czAb@oNo-o37Gw{PUy~pbe>j#=iu`? zyb4Xy{i!&z!16MpFt0SWOY*=o+~RAo5kouLW`&~|irk5#a4eE#RMdIapckL00L`-4 zZKf&Qn%_9P-&9#J_NQ0PmGo}D5fS}oEy(`@lntX|@}v?${)6zh1H;h%!w)1}_6csC z^ZS^tkwQyBuOGw}keHD^g{d9$>;Ija{N&xHZyp?vDF1r6yNIz~nXo0jHHW(tKI4o~ zp`r&nDwJn5`HZhhPhKd`dLZk-JP>1F-xKr)pv;G}QUABkUPD~26iPlBTN=0M5m`4f z>=OL7o|9vEOW@E+8nrxSfD~crfRH*GL~7w9&wmy+2`Fv%u_A9wyIN>3u+Jvd`x7c6 zl@A&W*llR0l-qrl2wt%C@{6rKD^{-Z{8Lg%HQtEM3R+#Uk5Hr=uUhHm#!1I+M+(Cp zeY#Jj5=B_JBK|Wv<1ghiElphbi~!~09On~JmYUGT;abY|EH6NO=RQiIB6RrAEbq;# zkwgRWiTD#{U1tP+mN?`IHiB%7iQMNC!{P<#;Zop^^&tFn(OA;@w%#(Wa7E|b!+~y? z*;X(A*HXjJNu^Xp@%rcZ*_7rT@zQ#x*zWny6MieovBmd(y5aQkCG|ln%qXTfgRPor z0SIx*jS&$_$Xu{qSSJ1{X2nEYlN0IS_P}eI1q*Rnt!zZ$%NKq((XX&wX>G=bUy?Iy zF?y-K8~SOOFu3GUnbs2A`L&y8ls(UsCAgIn{1= z77v$NhAHbt>+#LmKw5a1 z);PGI6TUr`M90B2%RX*!kmG?xo&K81v#86%U5*!^`#lhq4Mpa$DUIdkJDz)vVv`?K znaV0L;rl@&YVCM%m;eeGM+lq_#KBtrH62b@E@4=OBV$FN?(KR*(^EwiqGH^ioc zx`Los6^BNf_Brkbx5V=?$VyuDO+v^aeDxmFAM+F?_#c=1Bt4s-#W{M z$K|Wl-YSN3pEjGBK~EO-RP<4ycK1~ky7-j4=0Kr7BeL3*D*v+@E1H(>r%jRSq9lMK z3+IVLEoOfKfA&xP)_i9<^?}dVEmY#>arKm~t1M96jB}F*S4D(U9pCmMNmqtV`StK( z)Ic;*gyrl*R3_s|8ar%P64e+<56_p1mG<>anV(BN_FBU1dc`olm$>#3HxyN?hvfXCe;n@}mL2k-TAnChFNDG; zXX(%@EHWYwc1fI8j6z=C8*WF7F+)?i%&}2V4%6Kx3;jq%nb1j!id=WRjxEquyy+rz zjFCFN=il5?U2VC?7!RDbxY2H#5j2^B1xnrXN`tZ%Sm#;CUVSCB(HnYid(#NDGgf{} z{0yL*1^tnJGgc`uQz5Z^%B(0owo`OCaF;p%H8{9yUa7oi+2UlBMeDbu!225{X;?ON zrJ8rmCFyl&E^n_bZp+JU?N&a_i{nw|+q~i<`h7DweNABhlRa0NI8~4yy zPj2eFn!#v~^(fTk@X2pHmDAFP9xi+XHxb*ZMsltE-Ki7@mzp~lrO;o`Kizz-k?SQ% z4iRB~X%9!g#kY!^6>{%Z{uLo$ipdiFVa{=Q?`t?d)#A_NL(-Fe)$(^R7HVkHUk(Hs zTjQ2rC$C~((cz0`Sxgj+>|5EPAWNPQ7^|pE#7Q^pX_u;=lksH3I3?`}RyNxXwqTa} zeY_--XYvKRlzH(`J^8J1mYK?eDQB|afbO3NO_*>ZG0;}fr1BRjd|VNiBaawe!v#pJesy_3P*5OuAKT}DF0~lB}^Dzl5Jh2yWgHY zfkv&L_RB=^6C|tH^B@WXpUTq)Z@?-QGOV~-i70%V32k!-|3h#ReOh)H2DT%6HG%{a zP|nAD`=OG-&619b?n#gbd+`Oxe%h#-TD@DSj>MPC^btk{KvRjo5u1D@1>b|6HAc{& zCh~!Ev;PqQ1GUp{t*mcY6@D16-a^@aj2k{^_5JBXpniaQ-E1D1T3tPXl?{6CSR^z1 zjB;NEMDWD9c4DErt8r|dGT|J?q;ogKW=Uvd4R?E3}1b-xh=_I1iHx&d}P>e~%)q1fsh z8vjCNbgpN8(+Q2rT*HUF8Uk6GJ3+N4LIZCzQGoM{+hg#?_WS06lw;YI0vR0uBF8Wj zl=e#~fL&8|3@lF?@3aS7BS%+Pr$&8ZZgSos8uyO+%-F8xmroqPBnbXHHW@5BoD6^p z0u4e9U<0HKLI$ye5WeG*!6m@a0k9$D02V=r-*F0Hy%1IU=7aKr!xQ%%vLBpSt}EY! zAEn=sr>2mnE>Lo+0ZP0#E8G3Rk*_Xir^!=@2MAbz1W?fzKm+(0L;xf*hNy?uhNy<% z0qFgstdW2K&d_`iIS{h|7JydJ1~XjIwf^OGz~{j9{M29cO((HH_b9@WuR4Gr&JhhQ+b{|dlNo)WKKlSt7a$1%0aYo$dYXNt** zen(SQljvgbQ{EH$^T5>?JR0Bi?ObrHSOC&d3Rl}*O0%tO0~bJa`G_0~ROSpC%zxR$ zY3Z<`x=ELU^ad!SOgl<#D`EkI)xqt9!%sce-`0h?2+%+zh*utIyv+d5@*N-!$Y;U- z;nIOArn+DJKekT7Oi}o4_p)nEs-W1O!du0<&P#I;gU&adwarHec|xpu^3#aRcoBOi zb5mGL3v>ATzntyFky13E8KkSLHVM4VLgF09_s&m)(XUteS>X7sWsqR-=Ac^yWPF%|Tr5g@MOf*F|HWdHQGGt`$8at-Lg+p1fAj#a4!TFJq;jmilY@p9#@P zp`NY^b6c~(g_W3#8pqD|-V&(q*R|E#TMj)&6K7iuOYgGc*P6&aylDBPrfi*z_U>A% zC+P!HqVkzrhwNRGW>4}YP5It2jzh-&qccY=UDF00*+z{UezP}CDTSF$1bn+n@JgOA zxmSn+pK5cbRtPIy*>P>+&Yy`NRiUgWP9Z7aPy2CYGte{MQC%_xfSQw$67HxA@2zeT zJd*mgQ^4YL@7P`;*z_y5WS4a@c(VXJl1YME+c)*#+z9@iNum_j7a-~U$-Xf7w8fwK zdw-dqfQT)LP{_A`+UGpRud6mb_S0iI^!GgtiV)P0$MG5Bwscf76ww2wyC9>B;3VK_ z9X8zzW|qczdmAp~%2FNJM4CfXpjYQewyN>vp=Vs5E%2`B&2kgaXub*3A-kE;1HA=# zroUucWcPJEd=Y+)i)!M1>07`%Ue_S8qY>~4Ahe?vWc!5jGC{bwZB2w?>05!Og_ZL3 z0?qTXd0d(T(h2!^;LtW4yl*aWyl^9sF2?-bg0#%HTM;g<{qEl*>mIL>Wcq(A1shBI z-?$L|PJPs*XuDS@o2yahcYH>G79?y+Y`Aw$b_qSU2U>LWyM5>Vd(=IS7S{#8485BD zO^6issn&A8vkP`%4>IIgj}l6nV}B3yMxSbQ0VeUFzet#e0E=)?4ffXbBo>xwz4L+LR_YX@|^~uAzlT2Z! zH=2EktW=w@3JcH7fQ1Q5gG{QsC6ArhSkkM8uGxUpnmqJpXP%H=g)v>TKi@0IacAvS zB~=X{%&|5wWXUm#+-oDkZ%>v0rHWT@xY8o=FR)+Dp*8Le#=$)%h%Rx)t~q1l`m_gq zkTq|d<<2EZe;$vT+X^L%tp0ozOX0kb(d)+3tmDWasp8b^J@u}jzk=+)Z(hg>q(67= zYNF=KG|&@QHxp}9Jry={a#6Hv#n*Hpi_x4VM2NDlV^QrYRV2v(vf>T>=+>_=GkRT)*iZF6d%A1?)nmN!0nbdK?U9PV+3{SMO^S2g z8Rv|r_4u$==5JAc(9Z;(_)`v2?MGrLmR(3(rygCO-K(i>x+7SW`d8ye~;k{clc% zXcwGOrt)2WUXFzr<3Ceru zxN*Ypd`<7?Sk|JRveCW({xDmCOv;fVSI2+GWhWP$Ke zPrBE});V{RLyZ0J3Xc=4o_5!PQHW#%c#Cbv$8r6@hsJ@GX-Vm+?S>4t&q znwDUN(-HlyP7q@h{M-$hXJBPmW@f&e{x73g3v{J+tyYA)YNlx1he`U4u#cUtolY)7N%cJj_~1Ir1|b z0VQ$sJNwypiLhb^#Hfy6@N8BJ>lkw6wQ|QWLroP2FY_pGWXZH#*Cn~vm%=< zx(R`VB;eB7y~jSOIWYB2J{vR`J}Y)8016^N_UKhm;wD~ZzAetDkE-c2m;6QA?_dX| zzwhRSS?0FS4E`&)?kk)ef9Oj&0wn6s`H_y&@9As$iAWm^W>$GAOe|@_cu9WX{d)n9 zl}Y`_ah1Utdt*&tNVsH`d6fP*x@HLqjNJYjC%xjG?EzPEZW(>Pf2Hz*oCv@#kAt39 zP8`9+A6IvN&)HC2^sYNsded)iP;Aa`PIp(OQi74A~C0_HVc%AWTUL^HK<7sLU*U^Q(&G+i&?izcu3?XPc~mWpyT zZWnCiyYco>xg~sZMBPij#gctxXuciSbbF0ucsl~Q2noG9_~2iZ1-*kwMZq*guw;f0 zY4+2=w#uGcIUddjb?DOZZ9{n$O2cK5hXaBQO8fYA7ttlmkx*|pq=CP=at^=05w#Sj3T=jNO zQ4KI?cQAE(CCJ;=a$l>*MM*cE2RO(&}jgx`{^yG z$|_L}PoAmu+%kQI%(*s(@M`?7oM-n`Oi2RnP8|xBFl}xq#`@rgz+SRgJNnb861UZ@ zlLDm&pxw?lC-f&}(mzXkO?3PWt{JaaF&CqG?Z2oflVorLrw!%Yp>0xG2xD=2Iukib z=xMbW`9(!;OgSbshKanw5!qA=^nv*A3M;oND{*I8<4xI3Y zhZe+L;lgxfhTI@jyCn_^fqqncqP8co3rhAtG{fUOP9(U%Qdp^fSv!M~p&g z0l{g1)@?qzHAirvmXG}donRvx`tfB~9i%v@#ef-2{G^qBywiBqrLL5ClwSY-5*)OZXzp0@oEab3#BMe{!0BW@u()MH zeI`y!tJh#J9Vvra&-7f+r$=zUr(AYH=CTOb()Ei@p2{fu^R5k<)~TKZOWPy+F~{U# zQ$-Y4p^9wEV-5F^cC8=BOsBv`yE?XG#)tR&Vvs$}Y3Uo2mDKjt-f~NCbn(9Lk8_F) zTWog!%^u{lpAIOUP=!2*Fn*e&N59aNDeNjd;8nc5JnCPI^-YqNU}n9f6zU=7?5uFP zXyz`EyhVsu<@>0vm}_zBl)}CGpdj zQrIb*r+m^~s{AuYE`X7lXL;2LN9~ElDS*hccW*Ot(YI_rQPKGLDFA;2YXsUWsVMeP z94WHhZqQnb%X~oWxZc+|Vo2k!$b1UttE-Sk(FTbv5PzAv7&3kBhO^K}T&;!-M5P9k zSXcib5g?6_yV*U%F7r~!N8zJT>F8t35&<><<39AiA9Jjja-YR=L$4n+z8a~#{ZrCl z0dww0!^i~TA141W&XAIr@Qxj%FOt&b#X`L>8Xmt28l!#$?*)Qq{*?$FWR12 zgI=#4{Y2{z`o14-f}4fTXY*OWkg4Fe!$-6Ev02t?BfO!H2K=MrvW089JggTy?AfQC z=)FvfN9O(=y}m|}`RB9F2gJ=<0K^M#eoY_1kL=wDLgcv*@M*#~!x1{z?2<6r|1K0VK#`*h!~`2!lJKP-zrY_cI-zt(u5p#Rr& z@Ydu23;z~x&sp7Vt~^!!kV{0ep*_jQh@Z(99Lojl)3#BMMIIlDK^|LO>$gP9+d<)) zK&*U-iBSkF4r&VGwR#IUE~WBXq9>T14sS{N8N8A3O2bFVnkWEMuae zq?VJSwXd-9x~HQ_uJ7w$Ja)fV;U!CE@ACfS$Da?afizF^6dgmhuSS^$D!Ku#QK&Dz zmr5TQ+nF1CKz+vQBgfeHw`Gj|%iYvW5jiS~TcVoNJozlg@p3pflXEul)Vp&)Yk_Ep zyBU{IF!X$H7+9;aeR+ot?1_l3^LEU6_4`fm9M4a!E05uiE{#3hvZqE~Xvzv>gR$CW z+nycAHaGuU=8ftA^l7?syU z{(|BwaTLL$EfCn8e38Ct(LP%P zC#T-GL4qenURh5*TDf5+MXyz1RbcCGU|G9+=1*$aoJ2x(binS)Xt5equFW#o4`N|MhzH3_dxEP?Et4P&Zc16e&D-65DM7dJ}+?aC10Vs zx=qYHki9YKQ=YNvPf=dWt|IMw=D*fy0U9b=fwcWnPqb*8=C(#LPq@`14f;d#*Oc{U zFIs5kJM7Z{W+dZ^fKgwKYk>}jcL$9ulbW{2UTO#V?)dFm-K>2IyU}_|>oe?-JSxz6ww|v}px+<&Sl=b}r*{(=6XULM+uTIEI&^VHYQz%g1n?yL_r$kP(pIbNyc_+G&a; z%4gS;?Xt3jxd2?*uccp$-`|Ei8GP+);@|2O=;8mPfz)@i!w6w{tzs$6VO-|^Q}dHt ze=>k7B^OO#S)`}L%NmHZ-Mhju-Sr=CBl2!$uVfOM>5L0R*UfxG%qJXb56YM(<&}PG z(}&o2bXGhGvyJKlR#1|(YJSuazJ*dIy3yD-Z!f^5-}kJs2y-dEs;8}MgpB5buKEr# zsiPlQSbI#Edv%0_XWbjNitaL!AAjme=iR(xRUOJs$I#$iOXK#U*k&TK0`*6x3#jZ` zmC>`_#K#{vykZSAar@`hMqZ09Oq5GJ%`ENPa%71V&R00FCBC%(vkes(HA5>u)CJVzm~I znR9rO41%zK65=Iu_QGk4HJK=xtn*)7CqoK4*6RNOPe8E0WxM88J}vd(Yi(Mu=A0N4 zJz7x)vK|X3IfFfil~o~o$LlA)zz+GAc)3>=f%-9-CEF%T6jkw7_u4l*&+R2%R^d&q z8cHdsOUvv4jIB%wWb-R~I0`WqMGyTKu1O+37oXjC(Ju%bRV=+mfHJ~+)Kbp}?Yn~S zA5aV3O5kM{7*=fbFfRkGD++FT=-lpc>{glWyA5L8RUN6a%JHo$2tYp7nBxQ_TUG_g zMDZiES3LFxiAy`Np6;uXU%RjwaUhRM|4z|6awS zmY(!$5%%r9`@xwF()Zg2=zz%+6%k8BA9Wb`djh(m**jZZEvywfKYeI0O5t}=U2=Ox zd-+H#iKn9YK~kkD;zz4Y9Ay|5g~^tD@q;q;qed~xqpyz*OXha^#kD#!yJ=9nJxDL) z&ZbParwfaM2NFN4zr?XbpzudcIVTi_P_vPb=M$IUKO|8`d0lG}&T#&qDaBb$kL$C0 z+l&n~Y)eojkFHdBj-FfjI5CzRzhsUO-bj|Y+G57%FO>09Xwkk74SjGpUyle;$) zm4f>_7bSR3?X%N=k-euBInn&wm*~GBu{1b4VH(D zaF!J%_S9}x>Sp?sr^6Ajc(vQz6C!KFzvgT72}m_Mfy+PZeP>x{*a~>@2-DPG@dM9# zWJ#E`JV-GHS8eJUE(a9n8L3`b8X!?dnlAiN4YV4MiizQaF3gssOQ;a)S9J66*GpQ6 zxD7_V3u&2eMDbqxS(#4ij%5ZAN6>9wbxWJiJ*rY^O<5b~l-(9#W6}w=CGKZ2Y-&

    AOKQTjpm0W6*!t1+XaIdIuWQJmaeOrwh*o=gw&sLdS-eaYRPLrNF#r`?u$uat6 zEly1HrJhYEr|)~MQcNqObcFf%dV%dmbNLbPWOa(&_QR|%s{@_{GG%c&t}06_>^(l; z`dQ2z!))JIzZ^_bYdC*6)-wWE^)#}!ZH!gro#mcuKXNtM$AvQo1~!Kz;HMSsE6c_+ zgJdR}e%L;p*{hJIp#B_m9Bo9g*&0QAH?n4lWfB*I*|s5~7CtvzLU{VMPcVA<^Ua8( zvb)LV@he(}3;-VhAOIH04Q-^RA?e--rAkW<*YOv%dy40w%z~vxxqZ*w-+5mv0#s&J z=EKGaKQp+UM!{PZXz;nSGL}XA%^7bAtJ<{nYog(QzVLxgzN^IrzN5P$N1!QpglCO|TLzz#GsQ{!$9B5J&^?mN zIwGZJCOG3Pp9L2CWz@$vW%clZt6JT)RpnFz2q$idO_zTb61k ze%-<(ua?9laA~oweB#Da>Y*;2@ju~TS%m9D*Ga_EKDLY~L+ z4_Vwx9U)(GEwgjmCuv)9)5(-E(kj2}j{WYs>|TO^{?*s zu^QrV{PFjm4=}dbAM; zzF0s-aUHJj(?FFyAQ|!f2u%lu8CAC|H*ya23z25LNxS-c7kaMjvr+YhK<#LzE%M-i zp*p0{8cv8e%1bag@32bvb|vjYu#@SE3(C55G%G%4N$b>zjpmI|c8I3eL>p!@GwxJN z+nuL9Y?s=IwFy2$OiNQ1QpUsweSPCZbdklu1>M5j1uvcaiI2TAdwcK%)=aj!6N7;x z2*bgoMbMPMjOcUn1{JMr+XG4gZiA3XREqj0_l@cT%m+nKN79xO+?4AYD@pv&{yD~S z(+V)%4j3H*N82^NnEsS+v%t~kTd#B!PTc7x1 z=4J@)$!^d2Tl;JwAH}cm*StZogwo%blYv}R2zaPM3t)l9?7qNSH*WVvP;b%nOu!`E zBcKVb)Op@r6$TrARXCTh?LEF=TD0e$5?Z@cZu&?b)uuHFn^jAwhZ?IrXt#4z?a^o4 z-qeE)b*68gxDZrq9q~Norq@jND>ma--RUrG8Y@#fNaS)HFqhws2h|ojV>ybmkll_B zN#S4$%4*j8L>!q<|HLy$HJt(lT>h{g}hWrbsx;Xl+nixban1 zsuj^8$w%xRMG%y9^_Ia3VtV+SG5C}sCV3NRp4M&yI!y!HXVaHHn0Xe<;^w5J8yoro)+6*cZTL)&yqee>(5h0#Ks9V^C-k|!E0t)bGd z6q`5Q@Ll6>MvBq)MizSm8*atfwEUvXMWVTLqa920!6k)1U|mF)Ht)6AgAe3|d3I?} z>7kUbBecPs0KkfUiQMHz)FNrzSBTpaiOK2wVRjlioK9T5hAh<0@e$g z&1(B#>otA;<9^0RNj#3pf~`~vf;{XXGmV#B_f0tAP~!De7IK%*3$dL@2Lj&miFoW zv?mihHS9bSPnIcGW}}n3vw`ILvWc@QliGXgveB0UIctc^k6fG4R?ZhpdV*Q5zfx6mfs&z>iUv`>2L*b6UnG{AEoUtW!agM1bki3#MDX750P%>qbz}>>{+|TX@w_KHauEr9e572MVxHzr)#22RipOW^8qYtzfIZwwCL5BszwSJ z-mBQ6QS`L+1YhM=2Z)^1WAnF#fv0JX6Q;{dSqGZ6Gg2qtlCe4sH-)0DLSJZ|KcinK zTwh33yL{5`cNJji(#07wU4Ot~hhJ?xJQfyK--io4m0K>(U?hFKu2JAnV)W5c?SrEm zm2$NsZ5*|Ao2~0X6vj5{J8B*a=-799VGs^#g-92=$b%Sf&TM0gPRZZO>(khF_npag z>J9RJYQxc-sNWlSd7p_hj$HhagTrU-gX|*oyV<0L$TB!*4Evr8_?v;yr@pK-Z^9bYnNVgemrs#NhT z3EcA@#CeyNh=-7~Kv+vfgv(y``@?n8al9Cj(9JJgvRIff3~GCI$MEtKt%v5Kt%}WY z3kbVkEQq(&Q#gNkCEG5r@m@m_84&W|D(?%FSE`~8?a2MtrR164gxV1MA?4A^(au*5 zupjd;(yGf5gl4(nVlB8$*7CgCE=*=wA_Kgpc$C*K8&!uxm%tJc;Sq8MbHwniTOD`V z(KrY9O}6+%2SE^|P3WrVd;Rl>8ab6_zg|mB%T?&A{Mt@_>d)t6*;fy|q+&EEcHPPB z-wtah5_1h^L{09RY0Te183U4D$7qmKlusC2A3e^-6NNPlVA0M-k=#qurQ;E!&9`n> zl?mSC7L`3*6!P{)?CKl{pOMljmEKSg!aVSQH*}%2E*I4G0>^K_IfBF?vbII4Hz9EI zV`2Pju7Zh{7JKP~xRJEsGuI=_FNGOac*^wVHlF;7$ehX1^ldZx%a5L(I2dN0?l~Ru z6Ag@@L9mc6@uE{Zr5@Q632)R-DGHMNR*YQJN=_t?yPwmo8T#S`vR_w(y>lv$=+!#+ z_woGlj8EjipQP*~Yt{ZyY1G^D^2z8A4&EYISorPbp}5fkC2+8Q8#;?5L9}QjE9wTX z3)%1-x|dc!@iJdZOerdQ`8<^p@+YHFUi*2SBfaE3N2Rd-3MbC6R~)a3$fEpQ$mSCj zcES-0JQB|cpEH8+dKO=>_W(!#w^7L4o5ph zKwVKY&L$)Qs)WqHEgPG8RPv7GrNPI0wYkEK=5Lo7duJxeQ0y;75I&?k zs<1x@-+BDlRyUBSkXbz`s5czd1)E1sNH?;6gCzGp(dt~%{qEWbR9rpAvX5qMr1w^2 zoBXQZ(aYw5g;vWF);+x1&+M!3 z7uTHtM53XO6= zn8Vi$%glQB56j}bQitNvfCD^`{;4= zzgjmuL4EyjdCX2;CEi78E%S{{(gY8xAf&hbay{DUC%uQSAoq^l9LdHplP(S`(#G<% zNMub+=@0>1b+S{k?vBmNFp(HhA|-t8YFl(=-r+KHZ|UD{WX)reC3L>Qw}R?)QP0e( zGM$_DJFu@`cu)h|kQ*DP5X$Kxzl}`;dND<)0x`VWedSb`1v(gRM)Z~=crM8^OuCQu z#7ZHV%mNVLu9v<0X+%g>%6Cyvgv+|;#SYHv!-Z~%SD|b{YFKO^F}pfLRzl^U!h1q1 z;H`-cbHoNxr|MQfM5^hq;dG>mPkba4ZOxt80E(87}^qD<{?`kAq*{fL70)Z1RQ|_ zz7~@LtQUv4$>*`zmM-FAElk+#s9aP;myZ>6%;^jP*HdZHxzdXFT(P}GtX7~3YREaE zRAZ4RD2kH4iYs|v;Avu8@=-s`elB>m#p8hYk%)m_IM8r)<=uOeFH*0A{D4`QFg~G* z6$GM?Ar@#PMb@u+_!aG@(6v=bFg$IZAvaUX4?MnBna>cOY4OBw-bI?j6{c7%IjvsT ztjr5-gEL7lIbLpiHB@!>r*PNTDQBpR0*CO6R+I+TKX@>*bh4N@{t1D1iqkmt*nHoe;8J|i9$qrHg2%z6z3}rrhb4tsCL7v<_8krb?^Rrq zG^;!wg-SfykYv-;L@dsHr~9?m6*i=7=Qu#Pgs@^^69KPs1ur2WkXCa%wz#^l7^maX zztLPx7s7;j!l#{wTeap(n4PD&oYFau#1V1<{Kw54Nq?@h@^UMd?E51!e@OTqm@!gO1uR9Hv2De7Til$uX-HuzZ{E#kAu{_M1*lt~N%>9MX`QbmWTId(}!G+N#k*bb#Kq z(f+rca>l^GjZXLEf{@OdYr;qgr*dMlET7TI;euyo#O zPZCEHLe{J$mwlnOeGP-aTVn^;ZQn@0{;{(YyEP<%#h<$ujRA zZXaI{1D`3iG+eQ9x>UVoXlGc-%#c1PR)bs2kDd#%k(5}L3H{O* z@%jVwgNg)%okJz=I?Em>{`dAaN?P~b$b0dfp#7!w;rR1Kfi5Nzk?qt%jy(`u6$3KHT2Fdn%+l|f z((qwCrz2z^rni7qf;?)>jc{J&K{{H&Zj3Dp=ndsrq(6umSaG30a}i8!MLZD)#!;4 z+NGibAxA0LSNFGE8>(hE-rEQyaR$O0s=}jXzj|S0N#M&wWng`fSKJe?;9-?efR;F> z;)`AN%Kv3XqZKZr@|PXdHa~!tPYhix=qkC4VS7kp@`EJ@Hnz>D97O5%F|S4DgiyZw z_9R4X=6+xNQn3be0??!>pU$-r@my7u&T$Ob`IJsSBeGsTPbBtzKrX%$yc#F2JE!o_ z7bm#`^}ZDY3Oy2mtM5s}>-~gpbK*pDJr>PH@1ofjq%1p{J|B~h_;=4}g}~8lvJym$ zeF!Txh4P6~H_ea;*G#D1>a)ozHh`kw=s7O2#u=q16-tw-%BrPTax7Z;c>35i6uZz~ zGjMVtNp#VG2gjIE#dYmvTMm&#?&tjr`dWaRl*h6@dcD0Yo z^+mFcA=kqvPp&Jsb{hNGhEt2UvnO|cmc-S@$3jANjWL%K=y<_AGGuF59K$1>p$_X& zexW6!Kclbfs;4yb38#-Mn;)^!@X_lIoM5;LJ$=l)SbyM*M4x<@`E*#*+ja^-aN`;3Hl0<}$PW z_yNC;L9g6XAuC}oa&ja-STj8_%83{iHkaf_R4TaL}hmg2lQ5v@x>qcTJv?UCI$r2uTTC&nPG3%c?Bk zPkO!RZI1cs)MDjbu{VC&;Y7rt%4-$MGPh#4Sm=L3Q466R+w75UdavzaQX|Jfr+1#z z;>?4IU~@d7la)A&4Dq6OVqWx(-m6^r#^copjq{ge>DF)G-QRrB1p91gS|B&Y0g+v| z8&%BM9k*pG|Fip()yM5twM6E9i(J+!ZjG5L6ADknW#Hl<@(8ozUOs#U|8i=bZ5$#a zK_H`_^x~84BaNtd^H^WgSCIiGOP^-brS@K9ja@KM)tuI*MMoit*}o z)+9;=sK#2YgdXS!1l=>)O6x;#q2^(uQN%;m$507Z`E+!a60m8gQXg~u_))c^A~A!r zY;~R4qqY8G7X9&#fMCts-(PT5Z?FhZ=#8Ls=aWhqRCJh*l(>nA#1n5`MQAH9o?(cB!rdNaD!_54)wX_s98 z;)~gGj448=ozLlGkS|@eII^D(OcyC_$ZeOt=Oxa354`9!a^QKaae-X`f!2m=WQ$&i zo9nW;TkzQmSRCJ@8)XOKVmhA<7f7cxcmJV81Q8?kD1ZR2TN*?WNUayD~@Qk#%GQh&b9`IR&!3_Cuk~{|R#vFzhCy?foj-O4_mORtA zNdHM)tF^!?D^ISgNBqv_TRlfx=1D#87O9=X>-_hMFAn@hocj_; z=9ctopw`f{gzd5`rCEn85Gt+$^EMy$%}3kF>I!@?9XC8!Os?X-PQiHWwDD$jqW$nf zLn0~6oA43$=ZX4L`C}NK;@N-zH-Dx`fvqdiI`8nSusQ8K1iscQ$9GL4?kI!LaG&F| ze;wt$Uu%1g80+=mVi@uZFq?uOzU_-X1UgnERgU6T{dT{zVB6>L;?0j!6Cp~9w#y%$ z&ySnV;o!p@>qXdu1Q|<>0NQOn67*Nr${bwqLzo_!%6!Qdt;4yJ-7DVR?jlpiE5Tg^ zBy=#+-NcO68&#gTp%X`YW;h=YUm&WX3x5_G;x)nMcX1!3T}CQ>PFWS>@}6hZ%N43W zIiQX`G!NHqlyw85UQNgO988p})_Y^i=P^|$d zF)#DDm#?WL7U>q$R4#~@C5Kf**l)5(yo-`FlS_jQcqc(2Rm2A znk_PX?JF;R0bt5qqz-_j4;CCa)GtagRcs`PMPIE;fOKm!xg+&Pb?5LifN}J6lAS&^4~Wo-%6XWouY1 z8`VnMYzT($Y*ulh228}G_bAO_-Cf=u5aUr84Re)LlyK%sCX8<>RtIBkq6;ir2~uUsVq1j#fsjUjI#s?n>?=O@J(n_Mi*b&N|b88G@3#+fPeC2={{Y) znUQps$#u~&`@Ahf=Yrm~p!zCP_mGOH_?cXOv*4Esl(vEx?}0C67cItH%(AJW>}E}d z*O5LS$1(jB5!9q|(B&pVg2K~BT`fN?9~m}jI`8&eL5%B@laWkp#2DM1&VQ^{GnAx! zA{FV=yVw?4c`qeLXigebR#a+iT>#(=r9JZBw|r%)Yh|uL!#?f%cp^2Kx5f`4WI3%D zL$#osg|#}rbBZ9o6Al1)4Lt_cM39jVm?7+p^Kh%U2l{+GyGjA0Bc836r?np}#JK#B zJ#NSjl^Y*T33Y>!>vgG**r}z)y?1KLAq6%2c?oG<&Fc5}&_1P27WTMYJVOZ+6lpma zK!nwM??2k8!jW;jd%s1V=UI^gjhl&|ES<0v5weCkDYB#+{XQLv3r$E330|}`-{e?G zDn4gPBkIF$MiFU1Ml_LB#4j-0*YrolD95yCS0(GL;l;EynRzcb zYJ*>HWF1GcLVN{A4tAv_y4z5Du)x%8C|zZN21_#-O8Jj6;S@tX`Q^_hE#a~R>9#fA zKF$-C!^YxxQA?1j#_02G-0t4f7sETQT$1}miUa{TE2}lxA4BZ54S0&DAY4rFpVEa5o7r1;imbdt74AU0(9~c?QEkLc#}}C-D4ITpG|K zeQnz=%t%VvtVO5#s{^$mK!>Y2uD2$RVF0u|Nr`wSCxEd@iH5)6jQ05}(6EAwHKa3g zZ~U?v{N{)D#9A_QqAC|?$R}-y&7Ep202q_Ko3HNsjoL^JNOsN&CuH#YXWN1j51ePk zPwc$Vi5MMDt1WRlb3;)WM+%mVW@l_b63P;b0Oc{XrZf+Rge9Kt{oK61BF+w&JfAn& z+>UUDU$Hq!PO_;aAM3-CaZ$lnS%wf$>CD2HgxIx5SpoBjPlm^3#Xx}&>XAn_k2;gi z`JTz;lCxmH_-eG9y%Z57yq;kwG~yX)4Wi97T7Iw5yZIU}LYW5g(abkfGZQRpLwNN_ zd@odbkVMlQ&! z?$e{$_`@S3t~`yj7n5j6d|NS9pK5{AbLI%l$TcIZ9!%V}yRzfj+Ep1%u8E>xLf|MU ztFU2%cR89q?0IRwl8_UjsyBngUg0ZQA~E?APi%j3F%hB``5w$n_BL}`@*8xHlatcS z7BgR-kuXzV`P{1~mD5kgIL;?N&99Sjyn8^b|HNLM2y%$6m=dJ6Ts+_Ov^tQEdbqXnI;~T-#@!Y0C`jZ^(!WC(!UfxesFZ&4|dD0aLG#3?8 zNNi)1ax2`IS4fviLBA+lCyE{ELtIQ5^9=gzrHwCeZYaCH-e?12(}Opw82p?QiMagG zgoopD2~R1D_d@e)kvALESmw9dy)2g2ujamxH5o_QiR!FU#%sG9Q%K5tI#n!Tve;*A z9_tUwbb+D-5&^tvRDmWK?Id{Ib~T*_O?=Y=5>Uf<1+g_KM71ibPR!A#ed#H!hIkXU zR96g}S>M9cK*i~bl%(e2B`YKD0+MzLu zJ!OI}0Q=k>3RX;JB<@0%11CC?FG|rab56aNqq7_l9VS%Bs{xDWQWq89FeB-F z_fKjQ8gLma=63}2D&_)RI4YmFmbC_D3VePPSB2BCd(OP&Je~GlI`jGFL6BY8lbjR< zL#=4mHx)*Ux;3Ao2TcwD5|3Ah1fBahHoknpawro*Zsj9wP0b4`Rp_1#>QL43bF3^2 z+}v5|m*@OA9)qLGoAB8IZ!44q?&hAU;S5FS;(`UcaSK7xc@7cJcQ8 zcIq^Cj^P#0u(-T7kHhFI;JSiP>pRMM1b;!S;h8X1B}n17(}`tbz|Sd@SX&Yw?3nK# z$P@RpYMW*8oB}jpB`M!{@)rl{@Zor5r&<%NEO5W?Bh2Bbb2!T06*C;@n?v|p=}f26C0#(z}K{?Lu=em_@lE-bF&tSU6o#Tq3uBm>fzn$VjR z2vVt;0;m)J_Xo}kTJORk#>KI9839!&Nv$=Y48ipHZ#eC~9qo8F?WlyymmrOVoqWJuuVAPoe`4j%@;;qvOJ ze?FrYNpJLiVmP(@T=NTWo&HiL#^fO}Ed_c)v%qB4Q^rscWDW!5!BkuncicxEW^tMuVNM z+Eb#@n4VV)V{>H$RW2FbRtOc3hCB+q0P1j)YdD=qrBIg=!s5p(jGw z!PxZeLnbH)efrh-GYTEqD$G&Ji7`Fv;A`ruO3vYDgxcd@n%~HtX@$(sUBs!1SCKra z3<>4$L!zPQxVO1-KQ5cAxnu_sTB1WX!jMl9#L@`p7xW7eK^i#iP)&doaXXOd35Tn+ ztf%&645!^8a?>~(W8RZD7lfKlmv&UgK6TAchiA@r$bl(tSZ#)P)Rf{Eu5GgCk*)vs z{>p8VL(id36tv_K9em0=tZhW<^r;gKyU}ycPK{bfUrg)OIP>L^`1=~3=d{}75d8Rn zoT5{{(X2p!T^_#AIg2>TYnk@fOyv=r1OnQT1vINyizRr_t8*nq))cS3<&<1;=^U74 zK;49@q6HJ*7WPl<%g~5}1m}Yo+|1!b6PO(B9yjgqw2YXDyct~MuJv0+x&M{5&cV++ z`>R;HCd$SV{ZkauHLddXhbUS6%Pf(&Q0r|rc%nIWs#Xu9pyy4!pHdnmowll12o%g^ zWA}I|1||=+SqZ30Gv*{l4`5^Y^hwN8iV@rMqGd|0?RBD|z4*spanF>Z#u{SnYT?7Kr^_bFV|qC$@=l%(OP-xE zQOAFPe|p4ELvyw%QzA$e8xf={_30!g4d%I7vT=gUy;w<%9w&BwJAvM33JtTA83`RM zG|%~DJ+K6+Q{|O&WGeUSI$OTFv_wKK#fg*GXq* zV6RYr5FppDsnkk$T2D$mVl-Ws< z9|DnCXWr>(y(x4Wo=O|8rKTap!g4^M^@$%1v=^8WAH)xiv&0^PTl8TfUwgaM@Vznw2kPlG`ZYX#9@XglWwVP zi0reW)(lTOGy|57so4nFi7_`15~l?BA5(nVwd#7E~l=O`{ z_Grc@y8hCq*~YK+G4y?=(tHNjTZMW^hU0|oZ0peQHi`;SbzsZrJ|)`9Yi$aqsb>yH;!uiyt!!gf}51ep!6q8a7KFUXlZDNpB-WP{IE;fBcK37k;h#_ z426m6&VFg*UiFMsgSSu#-uP9lj?Hsx{h6e8b{(dKmqacCl8rSj&kubr zs;>M@#<@XlEMst1fdfxE&X{M5O2!PHz}C!AJ@{nQYmM1{ap-pubwqp|w7jkUIkTU1 zXL)3L{L8~S`vuFlOhl9ABufF_{@SxS5ew=*oxSy;=^pooL5Ejs7pUq5n`v|qsT_Qk zM=+n_vSEqJ4hOc1p>$H~{4?cs|?u_L4Dllex62h4FiHF@?85uTKR~w8+=dfy#|cVGNT$Ry zHxTF9E;rW`w zOgg^@M{P>HgOu@V5yn!PDJqt&aB#PpWEB( z^^^rHE*KQW-M7YXm14fdFwL7I;51|TxdkG|D)aFMlPEq|c~JC_g6K-BXNk!_Aysil zdiI4^5o^u4nbB#veWr$?3L--tRhaEd2VOF9vbyJ$$@q>oDKUCSNSO@8ojFmjzPglC z1{P7-bfzR8Kj}0A}-VV zrM;b=XTOQGfmANr_rmLxvVCfp<`|R9JVhuPa*|>eS~xqcMrGb&xFOhE7L-`u zFS;a_N`u+jdL_$?n7<{VJJtnx{8FoUR}|6WGr3Dlckwd>IMQM?a^@4XutBOC0&f=t zUPX=`yG7VZ)X7KIMknz+E6q#a2njy{YB+sJm`FKKPw1h+K@`}v6R23A*XZU&|EJVm) zk9E+{pZd^s%}%@i<5zzPwMv$k6ub;syc_TjUa$xuYMbuRFa+&V*RJI^iDROIKz!$3)CU4YyCkvGEtolu*58YrQq~Z#h5%i&dqy)>Oqk+SsJrQ z*Q`}l^!<8*;Sf#94hsFNk3C=FXi@!<%{EXCt?wbrViu8wN%v zg_xo4H5|dXD5?n-JUwv%PH{Wcp*F|J)QN?&ut!>=gv$;0kzGObiS>5OV%&SS~;Y%Yh+^w z_Jov*wLVbXP5v-Y7ITSxV%HA<}`k+Z7HTaO z2s3BY<9l%ur{f?Q&D_k{!HVvt9JwZDo6pvtiZgPoHKf)l-Hq$8W>(2VTGV)}=p>bP z^(5uWEbp62S98zeBXXW_ZVGyS3@b>qP1>YY#Bf$p7Oo_1nhLvz-s=iA` zAlhq+57(s1?or6Rc*g_ z^fqdV&VUlcm%KAy`KzwYjeKUdI!lZT0~C$mSIFrwm-ma}eWr9Qmuu8bC;Nta61`HMQrG_-x{yk_ zm4rsRb0cth|NcFGhCzM!mN1MiPkK3lI?XR^PzFpkTwlEFCW@S}2m2r*J-oC}Ca~_K zi9Gvq{WM8W{~2Tw+jJyV4DVpUW?j@i<=$6!6lIo=^!&-1gCcE!_WQm>;dlh{o? zv}=)y`10il_f_40u|S=s2;;b5;U)TK#C8*?yb)~trnFH zK_G75?|6^nsk+-0#*^BLzxRNIi8h}OizHCI1C|D=CnEs1$rknP(HlKdd`k+Rce%%r zAXvJ(kVCzN0is7w_LVGs(eU!c1Rumy4nvw$hRieBZfqRw>WW<`CFsRK;&EFYn=teAE{8U4L;=V|Q9gP8nOYcJhtpB+m?lY(7j_<2ke5 zLYIE{VAu|GZ(tvJ`&8ZKy&}>_{KEdm*Ko2>E?ZSi+55wR%X@fL*U4sY*=Rr1?UJiy zlXZ30o%$KMETh4%r-Yja_y=c)8a=P}&IvJ|-s-P-`H&2fw|H{UD?P|8}12S#OwbwY9pU@d78I@++}i^pDvKR2&%isn4T6 zAqk!F^cy`oX*z*cp!SZC6?x0Yk~Z02Y9Y$ZygCIFd?W+yO-PtGmvhjU<*XkvQit;# z&wP-Uv%}{Qx!@|f-n=k*h{QA1o{+E`hsCEi=;_)(C1kR^m15b2i!8~6rtcCSddgz_ zf^MxSN#E;~HYd_8_&Igak;wZ2kdO7gU<$JYx#sL{kws;xnBV&rF;H-FU9?w8M)_P% ztgUT789&W-G)929o6#@xECQpuvvdW2+_yh)#iS%Hg7BMFpu-S zCp-Jh7Pl_7?lE9`HL;IXJ&*AA;GPN3SFGhQZqBMZj2@MW30dUxu_Q=UfAYYWM9x&J zlX6MFOD(4#l;2gQs`&7whRTVklGivU@=4si^A3Vwh0zp624l$Q-4nD$biB>Zun$}x zgf1*-ALl4kgYqraxx23%RTy=S8P zy>n6TO@(20i<%-(l-9d9UA?Zk?&5OXs98SD1UT=YW6t;9$;r?}!s75R4An~xW_Kb< zSq)p}4P1@bc7F-Nc$-I8R&&PP`J{|wLpBQ9V-M+-($0~7#miB;2+)(r4o%SoRCU=V zgOWjK(Z;6E@-tANP4f&c1vej)TkoNmebD{YYEZq4 zM!3G2f7=OHlMA6WkEh#NL_CLo`JRZt-+W^?Cw|xt|I?Fd#X0vh<;ITu4E+ih7PN?& zww0cIM-)xKRg};n@#0`kwaQt55vp4!a+?$}xBk_)5ix1(YfF-1u@A(qFg+R=iEB#q z$TX2Ap8A(WwI9}9)O9|BT5{guy*O9(EkQ3#9Wir&an5v<6;VojRNWA_dAH8axSgm$K2vS`Tx92)CTy){#tT`I63{=Epv#rq9zxohK0# zz5moLK$oKPYzn$;qOLVAu>7RxTj<4FgG2_EC`{1{T-Vp61qh>@CdM-+>?JLS_GLJW zprLvQ26>m9X+Hv=8J~A*`YHkj*K8L2&`GnZg8B^1>-9<~v!AS>3}S)mDC~KS3xZkM zO|0^+NSQ15<6C2i#V;E|SjYuvQQpQY0TMT^_m%@IFeUe&!_C78NL~&CAN-ctoF{X>=Tg z`Ru;aiMFYtDqK^#+&&8Zi1^8s=Ev7P*7$;+QiA>6U8tfp32)0eQ$!x==iq;{d1+Lc zTrbYn!xuKxq%E_b?Vh{f@K}O`$=T+Sa4|YZ(R&P~^T&o*j8{1;#rvEv%`&uzmM~w- z6uOa9cD(&w)jy=jWVaoE?HJX*!-(|)Vq0ar;QWzKg5Y`Wg zDbps0Jtw~uo^#CH(`~A3dQ(C!wQb|tr6eY36tr)pUgmwb{b@sws zagLMEEr}*4hc7#i9AWw|E;ik=0s7oly1{iLAyKVfd8kB`_Z`~j)CP=HtE8aJyL?X% z`Y~;lFU{Cx@1Mt88$#uV5;_ihai6|>zdGtpsd4F>>rs zsa53eY5_m59Yz!^08kCw;UXo$KAU3LKz*{5*~k3W4u}5A+o0>{rG)YOuHMD@cxRdd zBg1SEHraNXdF?uAZ^NkUW!egX-egzo>DKiy)YZgWlmp@ARg*oO6S@K;d^`a-`8nr3 z3yy7XVxM)LW-kJ)87pV@SP$u{vc}pvvN3#5Ajqa_@M8gSM4uZ!54h2(Q0n+X?+5(f;|FRg{WdJ}CY#b3d(VL@xPme}Oj zvQF;;LVP}Pvwl5Z2JFYw@fpc4KzP7Uz|{?S@(U-5AL(qZ8g^Nt04v4ib~*I`gxV==35z zR*$E+7ewR^2C}kzxQBGhrWv0qh8?cj*{SRUk=aC!5EEK4`G!+lwjRrUVBme|u|*_I zk=HO`Kp{``VN89(B}Vu9+dMv&Sn7$R=5*|69^P(LeKta!q(~VHwW1;hd_bY3J1MlV zZ{YhuG84vUAuc9boXA1w8PJVg) z``v|9?VYC~(@9W~oxxpgKv47~T7MI#@FYaC)DFz+@`6~^+ZtM2Rv-?{X!h*vtW9m} ziG6qA#-^{&xVxSZ4PQmOe8>GS+k$%5OZz(MMURe~mU7NJw!_-z2NRkNkbd7b+KsKb zPn{_L6T9;xTb&w?3|J4jEYpQ$V$=jXHz6!_Ztqq5o83w-?LKG~hB2Ja&lMO@xC*MP zmz08slKv~VVQ}N8=0o(8m3~bL`|!3}e>$}tk8$LvRRi7##nBO{zmLGZzsGulDd!## zKs+7k+Q9BvBP#vT@N=jm>t5BK!0tE|l1G0m>^#2L2e_9T>d8{65{_@*lbzA~2sxBZ zPoZ{+>yT6()f7{Iies(58EjK7*glUF=&*jz`xToWal|Xw`2L%3;C`kyMLO zw)>w3siA(qX8bclZ&T>sd-A#Y!dg%7ER*HVP&bN61Dl>aJUDBqsGB&c6yPrmgf@?7 z4u3S9bZ%TS2<1H88WlooF?M-a>pGjWAhsL*Xo+&Bu(G6KusPTme$)yN7aUp2SBO@e zvYx7ao52VjtUbO|NP#6i4WAiu9ePsR7fz7ThOGC?$H~g4D0G2Cf=aL-H}lHJ{b8pZ zBf{P=7`1`mCDv=EJ7)bF+J`?!Bc|!H>qiz24-$^=aPiH;t=4!#uRID5hf^SFUYFssru(HD10_q_95zp%TJD2LY%ARDKcKrj_$(}TO*0XnqlmwpNP|4rJ|zW`L~3_#4a6*9e1EQvPr@Z>6NToY}`s4 z9MW{YF5Me$TM5`=#AFm7^^LMxL^#PsZ*-6gW<$_#$D-4>LEfh5)V2;Z3c`DGZ(yZw z*l~WkmnE*LlHPn&c^DJ3IMXs7t&y1D zRL#zG65_v$3GvI)<-xPZTAkHc&Mdm-?h+bG+a0Rmj6gipdRPt6A*AzdKLhPjR0ripOXWoC#Fje^HoNU^*tshOtm>$(t-U_3SMUz-i48nn3$|R~q(w%P!Htn8h=Q{*Luy76&#$ zZFn$6k1GR!`_k^tsCq<{_ywZQj;>#cudRY|jc*>875Z7*KV_KXS*z zspg3-i}R{xx{r{9*Meie8Dh-RzS}cCbUYzE{+`Ca)7Q-2zWj+Ht!=2jt5on~-;k9T z0)o)UPjBarT(+SEoce$SE5;rytCG0Lg$U^UjcHKTe!vS*#=EglPPW9~WjU#3US~n1 zQmff~8%oI$n%FLls4SV_eAQDhwH41Y_IWu#;WVH zpTay}mo3(9;m5eXA0>~#Jz#L7Qt|KJ+~QCZ-J=5@ zrgq3g0LLx<#ZJs5l2rIAhPtn8gpe!&DLXpRdVl8cBO!u5p)5^3({f)<{q8wFokJV9xK;lv{{_6;)21CV;HQ*VuD@0Dl`JrFyU0 zl%&=N?1=%1lCPx7;$~S&QSVR7t&7f$4%#CO@}xV@7!p3q+@deQm?mfy3AjZ(SnxSQ zAOVvKVNwZYrl-(AJUuM9*U&sCHpDNfV++>*S4r$`)UdnWHS1YTG9}YHa^PL~z0VhC zJ=L6k0sG>zUu8-GTa#Bvp5uC9Xs57=Y+!+(BUx!I*G1F*u%1Th>!pv{OACjo(S;o; zRsFS!U)mvwaCES>*u(pT68_hwu{kIUZZY)sqY7)xoJ|t1fqq+P6KPZ=XY;4Jpw$!I zbvA|uLLMss1t#-?NjUVEfY_cOa~EChxXvquf1)5R9aHvW+vsJX}`5V^(M!_Enr4Mfne!OV~$zk#vVfci{L#UJ;J z&R>sM{oaMwx=Xb7qUEZ(l@9!&X-DzTHNs(5bWJouU-GQy{SP$KpPhZs@{0ZrU|aPl z^^<;O$ZydKXB*y2*0Av*7iH1r=_!ANHMORzF4{Gdo5YfIb48p9wMeAYf%8_qvWv^; zbK8b8QZXr{hsd1eq_~(T+g$1pmKhs zbDqolR-hcCa1OtS)PcxidM3rgp~Hgvn!5@!R>Y;hz4emNrI5v$Tvu6URCrpOldx(+ z{BJQEDST}kJ+ZXI%Lkxv>>mdE-j}(feG;w!J@QOKNuKBnp;FqE&48!9RgVVr%MyJw zt0~lf02RW%2NAko0{RQTEbW@H3B%jG^Jn<_i*g*=ZRU26-@&uSLfI1~%3_CNtfvm{ zz=Md5gR5y$-8z3fAQlYAzcEQW55hXS(_B*e1u(&;7;4D8xb#E)q+R#n1dDq%iW1r; zszkf2evK*BUQ=+W?mLmRZd?cE{KRZSlz_&?^iqf0Z{~urGz&xzRuf{8Rn2Pck{EoL zD>LyhI9y!JF;60rVSLUZ7k=-}?-5f#@&D`SBxi^;ILD25tlWYA?={l3#eqaOhR{FU zyE1V-k>Qv}=uY_;T!T0pULlmX`Z`+@<^9z$Iy+R28H@xSVRQmdZjKH#3Vv{6x9zp1 zvc`wHC5IQqeG6M7ojX~>d+jvESEd{?bhyJz z-oUx5J-X>eHUsEgKs4)bTDeLl*P|@z?uWHt9^7H&mxPK8T(mpNg;^QZ2DSqKEI;X< zd)$Fh>_tZ2K$`IYyZBz8A6*M%V(}^7?aRX7KW+3K^KK5#W0bA19Ue%j5HVxP`=rT2 zrSOE>Po;k1^a`g1H~uBdd%#o&TJkF~!{Vyv-oU+lXs%W|Kw5Obu~kT)mHRVQ=d<{m z;(8<#1qq3nn3WE-0&(9|bA!3u`VRV0Lz2kJLA&OJlV0KehjtK!DrJ`y-sV_b>mxkhY@DzunOxlfYty<=^d7UyLLhch(##s24+87a)@B=1iH68`Ueqyw&*{N+YIy}3L35OpOstckb}wvwjuS~+n8y&Gr|Mev$b^Q z0gJx^Ue)h&zj4#}SOs>4)}v0Obi9I^nby|r(cbAyJqz<_&7rJv_?~pb9w0p?=NG1T zD+j9EHF2?c%Qt=!>eYP4h!LCFHdZ&Gb~jmrXXa=!nW*k{IVPWz-G(&I zG=WD#-!1v0wgug6E;0=i%u47C%6_!a)#XYsVFBb+8uc!uhRa)CN8{keRp3`WJF~A+ z$WMrc*99CP(~huF$uHwvTk(Tb6#IX~It=xWJn>Didv_;ZF$j9zGQZz|I%I-c@jfJE z^N)7ORcX*qL)#~sDIh6dB)KCemZX5#YV?oo`v$m;^?M<03IA%q;#OL{c`VyML#jO} zk~RK@MtP2~_s?YDfHjJ7=2UUZCy**mjIx9vViXFO4Pjq)pH|x}8)}{>8DkLNLHlMr zip5TV^^lhd9GEbS3~6$=p)Nz;g#B~LVH&B5lzV*8S!*}OWV6yHeAf>8my3MXcHW(9 zH`!)j;Hq~Gs@#NJBM-CBJXLOxl#NYsG!cUp@2#r$RL8p5HRh>>0-HzQiSb8uvSgou zeb;jq!|ch+E7oaPo8nQ?+Vb11QBGyAIsN$AP)X z@K*i83wRPGM5jEUd4jnAmWAz3{`B!9E9pfTup6p(pk!|Snh79TvR`j;$&eGDa#P$! zTi|9jBAEuWM?)W}WkO9n`zY0nz2ZG5ZZcy}Q@Ng>chVeH&vxXTjCpZFGkHVeosiJj z-g)+9DXn(yi7nk;cwirs+0E5Vb*Nn(}R4aQEccHUo%uaBB!C_D%a zeKN(cC|SSg%<{SUa?1TXk;jzAc+K3QY^qGd=sQB|VjJ|pO}IgrvO9w6UiAJ#9IRUG zON#5+0LBs~qdr2!;l-@Ei*~VOeBmIG`qlxXJHMhBilte=P>3)gtbv)kc#cD?f%$b@ zE9dGc3z^2DoF+1PC#_tdHy5_rdrtOz&eKLKUbe5Xe66Lb%7X6ZBWuD&G|DDL*UC2%GXX2kqq?2!5ct5u8!*m=5n;In&0XH+D6cuostrM;NQ&7iufqUVHJ zcm}^Fx$GB`OQ26k3tf2elSdGrgu+rAA@h&Oh_`c0X-o@N_3CWVR8N7iU>lySPUp8~ z8eEu1mP(_p;JYPmE)rxauGFh@jNUzC()+YfJ7>L z2_i<6-x1$qG#x~>s?oPYM;^>MCizhy#=jv>w|UU+j1@!s<$TJk<2(OkHQr#MV^V*T z`NOSMyv5dEbhWV*@fpPFppSf9ytJ|`Qz47`eJ&UL66OP+`*5L2s5x6PHs;72C3aX; zlIs#Ag=Qresf8+hG&y|8!(vX-kWJ9<$_T_@u9YSeOGL_C>s$}5;7oM9#CEcRG-WLC z@^Uf=U$Eyc7nM%FSyVc4#HEbL6UqS@73KSN=vffyHD?iQ*sx!K+^Kg9$z))X;|7iu zgG%idjhMH5`pH3KrbS8zA(&;zAAJi*F4c9_1F;=XXjpqlp^gjFHrYbE905-7q@?}L zZJSNm^dl>A3Gj3~is!{odx%3BgweU!6`bw3OCfX%aJHXc+Hb*1gJ6OT9lW1XcmgW% z{d2Gq!3&oKASzA{Yjx^g(c@sW{OI<%#ngG=`Xus=tIB8^0|eR z4ET0j)?cLDWOVMDZ2S9zQv`ddwZWC67py_hTyQMwe+{cfGQKwCiu;X-|k z5=VHpGL=&E{z290DKVH4?IqC=+ZlrAIX%g)5Zgt0k9gwBTmX^NA4>LY@}Ut0X?+Z* zud_q~9LOnY(lgn_>t!b!Fn$DDPi|(%h2bgigJDx(-6wV2&}_gWi`dJ!h@6V)O-rfD zRdnhG?eE{da z5E2IVGu3-Iqs;sjUS zK@f%?$Uj5kFQa|-!CEj^*Fmf+B0-|2twExSo+>5Acns2z6IeC^P%U5Ab|S`9s*7R66X^P zLg~Z2gUk<2SgvH#R9wsLLZJEJO!KvBngDthouKfAHD{B1sn&2Ef93d z#|#9+hq~u-Szn6H?~`-~g z_VtSfBt9-RF&6y4{8x4j0$*MY=(eKY#yHUW=}9d1(R#-RM)xJCCp$eb0*Yha3(HN? z%k|~YHq)Iu{>THfOw1$%&4@_wW|Kh9xTE8vb7S7gb-$6>dewIkXMekq)#$woXSo0A z+UjTP|3VStyRzDqecj?~3+e3Gg$VM4_bZVaW4e1X@tjNT=i6rL8<%TVyOXVI)Ae!p z-$T>4?=$=L_FD=jW?$Z2@yyRUDL3miQ_aWiJ)GV4khP!d+O1uVked>BM_#udfMPkk zrFPc)4U0XsD(;J%f63HH>zSW!>|IL7EmqXiI{LTi_pVp2g#O<9aIe+kDVJ${oD;ZxsI0L{;`e&r9jcxZjd;9mm#muTtU-V%+M3b*ehFcw9SEJ9P3Fqajc6-n( z(`|HbwwSMh;m?GlY?$wgVk+W^*|Ea= zpFup0`2^#)0ni&mj@=)R`T6g6(w|;vshb^+cKu!3rWjqV?|97T(Ls&?xf(VHvVD*b zju*U`%ze8P`%i)B4>k|}CB0G5)lb2zXXrIohYG&YTKg~J*6Zsc@*OupSC+R-_M7T~ z)s|0!DPZ)#syFE;8;jW+_TI(6pJpHAdlfm`Az!3J#OK@Qk&j4~wGJOVx7Pgj9~ zhvYjh4q3b^z7hLR;#R#zceVQM(E1NV`zOAT`cG7Q+ZnroFGa_zZp(Wpjt`Ql$;apc z4sYVACyYIue?l4eNP8Dw!tcRF*CCGnpVBx3_iO`S@`NY&DllN5q8a;i17D)KIechv zuVR6I-byEWSxT7Xb%{H4j++%t)KD~%Y0M`=WO3OdGb}=3KYxu zaEISwVE>dTmi5r!-m$+6=F0DM%b&P9{8J#ju~UY57YgK``sY#e_g!;2d%C85cw#ze zgV)p>VFf=LleKA^>Xxkx>ND4JCtG>)R*RJVi->5dTY>f%f9&w!Rm`EA65|Eq(BU)E zf#XY_mi%oSwVU{Pxy|7{lJh%(9Qv7W^s9OKI2-T&3;(LCYSiXnWp4T%y=5zDg+j3-(pE2OQRDM#VQ`fDg?zhg#OHkX-@2AZmdc)WEG}s zkr@6Zj#wnvGrLzzKQtzUi6?{!DugptW22hHuQ7eHbtAHL{UYU!5*t{7RRq5}9=|$D zKP*@_gN3Go)=?1Bb#T&nkV55`l0qq=zScq+q;zSp^dTE77>ZN`c}5<2Mp$`C9J2_M z1&aL)syWUmMLj2+_+F)=VI{I&rJ$JLQGK#`BQm9bph&K)3dD`)gm}DOTrSG}icI=r z5Bg&y`c$}Kk^21>1Fp)3DV1_M7RACWibVTAcup935#O0nq@mPP@zhfx)Kd#kj2b^` zM&-60n#Kue=ZR_K394#q852kJY37Y+;`J*EC`ESx4pCK-izB%2E8&mw!3bzfJZMa? zXiP4~;>j*HWZ;9+NQ2UFgDCd-C9Y_Xm?0(}Atopxi7?IHBpJ-#)Ryz$wDBOcOn&M? z1WBX(H1k3<@%$C^((;@U*z-|X^N|82xWCds4U3=+$v_P~l*j0#9#Y0gQmD|` zETx4aQw7wE#MH?I)I)EO`^L<({x@2BqcD%s$A}qV;t^ni5|9XkPe>yKGj9Ad=@dCh zA)0j;#tySji_HJ~%x!aoM}vTvl0r~Xo-~wrDxNszqq%=nQ67SfNGd`FBToh6VLl?K zpGuH^;%E=md_R?vcdmezJw$=ie@mZ2h(`+jW7e{lWYi&|2>v){D3HZf;h6K)(tLLN zM$bA|wod+srXpc7aH^{fOlg@NNGJ-W%mh_zgI44ORV@9>gd&?}#-DU0kR;2mN(6vt zW&Q@7Lr9wANt%OA!eXl;<1b+<5q~ZbCoeI-V9#gpnDfs#L&iN`0ppM_XKImrZjmH! zk&G_FWtMq3LC~M$(Vv6WmmG{tOWKK_>LK6kC(rCD7Je}gqsn)O!Z^jlIEBC{>=Q$j zK~?4Sk8_HSbMlK*-0kPC_};ZekeuU@oV%JO!^tI)p^z|>kGoQcYl>z)fnl=fljihK zb&5`H_z?7O+B4UbG@FUJnvG$NJ}_Xxn$7}ihA*D2NRXXz=20Y^pW*SFgZ1M~Tnl8z zr1-CxlV2)|J@G^VEYm51=^T&g+$ok05n!R=+qjrc@t95_m`MA?QY27K=P)M9biVTmv$h6bUo>_^WTQK75-QWYf8TRHy%`?XDI| zg&3j`R-hEYZ;r=LaTgwOEtH8QDqa3jUp!FkRYfH--*llm>ui?H&p62*Vni8ApcGG_ z6ha^~%qEfGAeS*k;xR>nG=&nK&00$&MZ$zW{){1Bl3s}j5Rl54_TB1#qQ}`NyS5}5 znwemUQY)K_UpDP~*|e_Rm<(lHy5(;~_x_KKDbi&FK98dc*2evW=|RdX*9 zdmPrfJI?>5`X5nFP?e|&krAQ)+YXiOLPJ2RG89uO9#bg<)AxwUq|b8CH}IG$!kS73 zMAOF;O%(jUUh;;i^hs0srz%IMCU`Z#ior-C`zc~V6na1uPUIt6iXvK;3NZb*Q>kLu zPR#8E<}MN@F>z-V2?{8}mmq1oj#4ITAC@6UNp8SH6VKH%I z1f+|^q=k6jidIw%NKl5NEXAXw{Ew}~#1Rz~Fp5h&ic6HzF`JV|rP2FGDn~~u1I_Pn z8+Y6oc9o-9fvWo~KTX6qjWyeX<;y1IkedrpOvm`i7KMs#PRgd-`s%S{I7@E};#u@? zE{x?>k?K$)RH9WG=YEgq7vfQoid&FaFwYC4%3w|`2o*svL=vD-rhtm`@JbdZh$i82 zjGNEWrY2(A+K%uS;W5mT%;&I!;bH<7`ibrEW0?`;{6sO07r^tKrpzf^0%FD25d_ab z6**m*QMjym(%8pxvhW@X>P3ZW^Ersq7{_w5@!ng+G%W%EFfYb`<&Zo#h-Fy&xT9R7 zOq)8MJQ=!aTmoERE)JUhAT|~75V>@?Cp_&NyZnCi)a;^h>2MBx<~DBPet^G;4#Bl? z&2dheV3g_}yAzL(T%K?XB&}y&s8%!{bQzClp3g{az9N^c2U1Ix4a1}KcTJIxBbzeY zC#Hs;lmEjzPZ!1HNnONC&`qbKwLdlu_84KZJ-E&B6@^XRm5FZXrZI=G`MqjPpn(MD zpx9o^pBB&>&raG%r{0pj@Ebg3cIP(SE6%cbEgEtRc1Y)TJYFpwcpv^@-TqIrWr-(@ zyuO`_yW#z%o#|dVMv8|lJJVmSnOrn$!p_w7&GfCE3DGcpQ+9v}axDd{>S|#jG=Q;f zUz0q}E9^yT1;_kzq0Tc7Sy#D&WpyHxgH|XTK6lu|fVl2CT57 zJQ(eJGr^GvcMz5offAkK@q`jd^7rk6oG+xP38egjycvT@x<@pGa^6yZUn9y`2(;Xy zsX2V4c{wP#cvy=Nxd>8X3bY8+ z28Ag39-5@G>Oa<3&Q6kr3T+}tm=Mq-xWOR+3%&&9D4e;Z!> zxP&-e9FeYy;O@WEu8`%SnU-)?W^n?cPzlT>xxH6d7bL6>^2?3l3p%Sx9p~8D9{k&A zw3muvDQ=PHFA-{}%tvPF&PfR^4EuwHEUjK$C2wfRky0hBEQCttx3pwnX5%d-I_rFv zn*lp+2*wf<>+D2W7ujNOSXYtc#UYWMrV)m_)t<bG^l%jD<t+DnVrPoJrd@rTAk|v2#`~R*!a5VCu?qy@T2#?REOkg! z6DrGiY@%ACK37z!P+KZ2Q?IU&QmNH-?xHDGW5oroxSDJZiPDnGH#@Ol{FTyBRXJ9!qi!BwNsUKEIE!K|F{-;rU%JnA* zvUoe~_1JW2ruM5+{kmr1e(9sXHd9ThrY_&1Nf*tjCzH(S8nuo{-%^O@{|VBmsf)1B0iUXrKK%#RqmG1M85D}8-=zy2R<#VHsjBl= z`i~!fN*~-?5~x~ds^uqXxwH6fjFloYrHpgRPUu%n@R1s+nA9~JL!>;Gru1f9>Gsoq z*t)lGkfTz)^WSv^?Y=LZA|kQg8wT%UyXmrUp)K(6=!RCjIOEWny{%e0@>u9mGPsEh z-cJ7PUoB)OFNkXAUSF06bZhWW=($dw`kv}-cZtG^09xg44=g~@!%nBik8)Q(TWqS* zZ0fW8k!V`{(j8Eep1yu&ORp5aJQ_GS+xxu3uQBTIrlgBUiMlrB zW4R6sKKv|d5m0HSXl+TK+!ivc`DodsxjIICx%#E1uY6<;dZ(8rhm`(@22mki_t)<% z*^|^`(wwtBi(%*wy~!u}lf~sW8iv0#yG%n#hw}o?yn^8pl≦7-a@2`w`StVM#&5 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

    pstu%Ff2-vLQW5;geQQ?k%m{*#e=y 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

  • wEZjKx@9hV_{0k>H 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ƫ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 + + + +$\to$--&tgt;'>]> + + + + + A Complete Example (&see; <Ref Sect="One"/>) + Every element shows up + Version 1.0 + Frank Lübeck + Frank.Luebeck@Math.RWTH-Aachen.De + + Max Neunhöffer + Max.Neunhoeffer@Math.RWTH-Aachen.De + + December 2000 + This document tries to use all elements that exist in &GAPDoc;. + In addition, the final output not only contains the usual + content, but also an appendix with the source text. There + are also links from the usual content to the corresponding + source text. This should enable new users to learn &GAPDoc; + quickly. + + ©right; 2000 by Frank Lübeck and Max Neunhöffer + + We thank Lehrstuhl D für Mathematik. + + This is the Colophon page. + + + + + + + Text before chapter . (&see; ) + + +Sectioning Elements + + Text before the section . (&see; ) + + + + + + +Other Markup + + + + + +An Appendix + + + + + + + diff --git a/example/manual.css b/example/manual.css new file mode 100644 index 0000000..19b6455 --- /dev/null +++ b/example/manual.css @@ -0,0 +1,26 @@ +/* gapdoc.css Frank Lübeck */ +/* $Id: manual.css,v 1.1.1.1 2001-01-05 13:37:49 gap Exp $ */ +body { background:#fffbd7; margin-top:15px; margin-bottom:15px; } + +p,h1,h2,h3,h4,ul,ol,li,div,td,th,address,blockquote,nobr,b,i,code,var + { font-family:Times; font-size:12pt; } + +h1 { font-size:22pt; } +h2 { font-size:18pt; } +h3 { font-size:18pt; } +h4 { font-size:14pt; } +h5 { font-size:12pt; } + +p.func {background-color:#efef00; margin: 0pt 1cm; } +table.func { cellpadding:0pt; cellspacing:0pt; line-height:10pt; width:"100%"; } + +table.example {background-color:#efefd7; border-style:none; border-width:thin;} + +pre { font-family:"Courier New",Courier; font-size:10pt; color:#00CC00; } +tt,code { font-family:"Courier New",Courier; font-size:12pt; color:#00CC00; } +var {color:#cf0000;} + +a:link { color:#00008e; text-decoration:none; } +a:visited { color:#8e0000; text-decoration:none; } +a:active { color:#000000; text-decoration:none; } + diff --git a/gapdoc.css b/gapdoc.css new file mode 100644 index 0000000..0d126b3 --- /dev/null +++ b/gapdoc.css @@ -0,0 +1,26 @@ +/* gapdoc.css Frank Lübeck */ +/* $Id: gapdoc.css,v 1.1.1.1 2001-01-05 13:37:46 gap Exp $ */ +body { background:#fffbd7; margin-top:15px; margin-bottom:15px; } + +p,h1,h2,h3,h4,ul,ol,li,div,td,th,address,blockquote,nobr,b,i,code,var + { font-family:Times; font-size:12pt; } + +h1 { font-size:22pt; } +h2 { font-size:18pt; } +h3 { font-size:18pt; } +h4 { font-size:14pt; } +h5 { font-size:12pt; } + +p.func {background-color:#efef00; margin: 0pt 1cm; } +table.func { cellpadding:0pt; cellspacing:0pt; line-height:10pt; width:"100%"; } + +table.example {background-color:#efefd7; border-style:none; border-width:thin;} + +pre { font-family:"Courier New",Courier; font-size:10pt; color:#00CC00; } +tt,code { font-family:"Courier New",Courier; font-size:12pt; color:#00CC00; } +var {color:#cf0000;} + +a:link { color:#00008e; text-decoration:none; } +a:visited { color:#8e0000; text-decoration:none; } +a:active { color:#000000; text-decoration:none; } + diff --git a/gapdoc.dtd b/gapdoc.dtd new file mode 100644 index 0000000..6126ff7 --- /dev/null +++ b/gapdoc.dtd @@ -0,0 +1,396 @@ + + + + + + + + + + + + + + + + + + + + + +\&&"> +{\textless}<"> +{\textgreater}>"> +\##"> +\$$"> +\%%"> +{\textasciitilde}~"> +{\textbackslash}\"> +\{{"> +\}}"> +{\textunderscore}_"> +{\textasciicircum}^"> +~ "> + + + +GAP"> +GAPDoc"> +{\TeX}TeX"> +{\LaTeX}LaTeX"> +{Bib\TeX}BibTeX"> +MeatAxe"> +XGAP"> +{\copyright}(C)"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/init.g b/init.g new file mode 100644 index 0000000..852ca11 --- /dev/null +++ b/init.g @@ -0,0 +1,36 @@ +############################################################################# +## +#A init.g GAPDoc Frank Lübeck / Max Neunhöffer +## +#H @(#)$Id: init.g,v 1.1.1.1 2001-01-05 13:37:46 gap Exp $ +## +#Y Copyright (C) 2000, Frank Lübeck and Max Neunhöffer, +#Y Lehrstuhl D für Mathematik, RWTH Aachen +## + +DeclareAutoPackage("gapdoc", "0.9", ReturnTrue); +DeclarePackageAutoDocumentation("gapdoc", "doc"); +DeclarePackageAutoDocumentation("gapdoc", "example"); +if "pkg/gapdoc/example" in HELP_BOOKS then + HELP_BOOKS[Length(HELP_BOOKS)-2] := "gapdocexample"; +fi; +#DeclarePackage("gapdoc", "0.9", ReturnTrue); +#DeclarePackageDocumentation("gapdoc", "doc"); + +if not "gapdoc" in AUTOLOAD_PACKAGES then + ReadPkg("gapdoc", "banner.g"); +fi; + +ReadPkg("gapdoc", "lib/PrintUtil.gd"); +ReadPkg("gapdoc", "lib/Text.gd"); +ReadPkg("gapdoc", "lib/ComposeXML.gd"); +ReadPkg("gapdoc", "lib/XMLParser.gd"); +ReadPkg("gapdoc", "lib/GAPDoc.gd"); +ReadPkg("gapdoc", "lib/BibTeX.gd"); +ReadPkg("gapdoc", "lib/GAPDoc2LaTeX.gd"); +ReadPkg("gapdoc", "lib/GAPDoc2Text.gd"); +ReadPkg("gapdoc", "lib/GAPDoc2HTML.gd"); + +# The handler functions for GAP's help system are read now: +ReadPkg("gapdoc", "lib/HelpBookHandler.g"); + diff --git a/lib/BibTeX.gd b/lib/BibTeX.gd new file mode 100644 index 0000000..3ae5683 --- /dev/null +++ b/lib/BibTeX.gd @@ -0,0 +1,20 @@ +############################################################################# +## +#W BibTeX.gi GAPDoc Frank Lübeck +## +#H @(#)$Id: BibTeX.gd,v 1.1.1.1 2001-01-05 13:37:48 gap Exp $ +## +#Y Copyright (C) 2000, Frank Lübeck, Lehrstuhl D für Mathematik, +#Y RWTH Aachen +## +## The files BibTeX.g{d,i} contain a parser for BibTeX files and some +## functions for printing BibTeX entries in different formats. +## + +DeclareGlobalFunction("ParseBibFiles"); +DeclareGlobalFunction("NormalizeNameAndKey"); +DeclareGlobalFunction("WriteBibFile"); +DeclareGlobalFunction("PrintBibAsBib"); +DeclareGlobalFunction("PrintBibAsText"); +DeclareGlobalFunction("PrintBibAsHTML"); + diff --git a/lib/BibTeX.gi b/lib/BibTeX.gi new file mode 100644 index 0000000..a655fb8 --- /dev/null +++ b/lib/BibTeX.gi @@ -0,0 +1,664 @@ +############################################################################# +## +#W BibTeX.gi GAPDoc Frank Lübeck +## +#H @(#)$Id: BibTeX.gi,v 1.1.1.1 2001-01-05 13:37:48 gap Exp $ +## +#Y Copyright (C) 2000, Frank Lübeck, Lehrstuhl D für Mathematik, +#Y RWTH Aachen +## +## The files BibTeX.g{d,i} contain a parser for BibTeX files and some +## functions for printing BibTeX entries in different formats. +## + +## normalize author/editor name lists: last-name, initial(s) of first +## name(s) and ... +## see Lamport: LaTeX App.B 1.2 +BindGlobal("NormalizedNameAndKey", function(str) + local nbsp, new, pp, p, a, i, names, norm, keyshort, + keylong, res; + # first normalize white space inside braces { ... } and change + # spaces to non-breakable spaces + nbsp := CHAR_INT(160); + new := ""; + pp := 0; + p := Position(str, '{'); + while p <> fail do + Append(new, str{[pp+1..p-1]}); + pp := PositionMatchingDelimiter(str, "{}", p); + a := NormalizedWhitespace(str{[p..pp]}); + for i in [1..Length(a)] do + if a[i] = ' ' then + a[i] := nbsp; + fi; + od; + Append(new, a); + p := Position(str, '{', pp); + od; + if Length(new)>0 then + str := Concatenation(new, str{[pp+1..Length(str)]}); + fi; + + # split into names: + names := []; + pp := 0; + p := PositionSublist(str, "and"); + while p <> fail do + # "and" is only delimiter if surrounded by white space + if not (str[p-1] in WHITESPACE and Length(str)>p+2 and str[p+3] in + WHITESPACE) then + p := PositionSublist(str, "and", p); + else + Add(names, str{[pp+1..p-2]}); + pp := p+3; + p := PositionSublist(str, "and", pp); + fi; + od; + Add(names, str{[pp+1..Length(str)]}); + + # normalize a single name + norm := function(str) + local n, i, lnam, j, fnam; + # special case "et. al." + if str="others" then + return ["others", ""]; + fi; + + n := SplitString(str, "", WHITESPACE); + # check if in "lastname, firstname" notation + # find last "," + i := Length(n); + while i>0 and n[i]<>"," and n[i][Length(n[i])] <> ',' do + i := i-1; + od; + if i>0 then + # last name + lnam := ""; + for j in [1..i] do + Append(lnam, n[j]); + if j<>i-1 or Length(n[i])>1 then + Add(lnam, ' '); + fi; + od; + # first name initials + fnam := ""; + for j in [i+1..Length(n)] do + Add(fnam, First(n[j], x-> x in LETTERS)); + Append(fnam, ". "); + od; + else + # last name is last including words not starting with + # capital letters + i := Length(n); + while i>1 and First(n[i-1], a-> a in LETTERS) in SMALLLETTERS do + i := i-1; + od; + # last name + lnam := ""; + for j in [i..Length(n)] do + Append(lnam, n[j]); + if j < Length(n) then + Add(lnam, ' '); + fi; + od; + Append(lnam, ", "); + # first name capitals + fnam := ""; + for j in [1..i-1] do + Add(fnam, First(n[j], x-> x in LETTERS)); + Append(fnam, ". "); + od; + fi; + return [lnam, fnam]; + end; + + keyshort := ""; + keylong := ""; + names := List(names, norm); + res := ""; + for a in names do + if Length(res)>0 then + Append(res, "and "); + fi; + Append(res, a[1]); + Append(res, a[2]); + if a[1] = "others" then + Add(keyshort, '+'); + else + p := 1; + while not a[1][p] in CAPITALLETTERS do + p := p+1; + od; + Add(keyshort, a[1][p]); + Append(keylong, STRING_LOWER(Filtered(a[1]{[p..Length(a[1])]}, + x-> x in LETTERS))); + fi; + od; + if Length(keyshort)>3 then + keyshort := keyshort{[1,2]}; + Add(keyshort, '+'); + fi; + return [res, keyshort, keylong]; +end); + +## <#GAPDoc Label="ParseBibFiles"> +## +## +## +## This function parses a file bibfile (if this file does not +## exist the extension .bib is appended) in &BibTeX; format +## and returns a list as follows: [entries, strings, texts]. +## Here entries is a list of records, one record for each +## reference contained in bibfile. Then strings is +## a list of abbreviations defined by @string-entries in +## bibfile and texts is a list which contains in the +## corresponding position the full text for such an abbreviation. +##

    +## +## The records in entries store key-value pairs of a &BibTeX; +## reference in the form rec(key1 = value1, ...). The names +## of the keys are converted to lower case. The type of the +## reference (i.e., book, article, ...) and the citation key are +## stored as components .Type and .Label.

    +## +## As an example consider the following &BibTeX; file. +## +##

    +## @string{ j = "Important Journal" } +## @article{ AX2000, Author= "Fritz A. First and Sec, X. Y.", +## TITLE="Short", journal = j, year = 2000 } +## +## +## +## gap> bib := ParseBibFiles("my.bib"); +## [ [ rec( Type := "article", Label := "AB2000", +## author := "Fritz A. First and Sec, X. Y.", title := "Short", +## journal := "Important Journal", year := "2000" ) ], +## [ "j" ], +## [ "Important Journal" ] ] +## +##
    +##
    +## <#/GAPDoc> +## +InstallGlobalFunction(ParseBibFiles, function(arg) + local file, str, stringlabels, strings, entries, p, r, pb, s, + ende, comp, pos; + + stringlabels := []; + strings := []; + entries := []; + + for file in arg do + str := StringFile(file); + if str=fail then + str := StringFile(Concatenation(file, ".bib")); + fi; + if str=fail then + Print("#W Can't find bib-file ", file, "[.bib]\n"); + return fail; + fi; + + # find entries + p := Position(str, '@'); + while p<>fail do + r := rec(); + # type + pb := Position(str, '{', p); + s := LowercaseString(StripBeginEnd(str{[p+1..pb-1]}, WHITESPACE)); + p := pb; + if s = "string" then + # a string is normalized and stored for later substitutions + pb := Position(str, '=', p); + Add(stringlabels, + LowercaseString(StripBeginEnd(str{[p+1..pb-1]}, WHITESPACE))); + p := pb; + pb := PositionMatchingDelimiter(str, "{}", p); + s := StripBeginEnd(str{[p+1..pb-1]}, WHITESPACE); + if (s[1]='\"' and s[Length(s)]='\"') or + (s[1]='{' and s[Length(s)]='}') then + s := s{[2..Length(s)-1]}; + fi; + Add(strings, s); + p := pb; + else + # type and label of entry + r := rec(Type := s); + pb := Position(str, ',', p); + r.Label := StripBeginEnd(str{[p+1..pb-1]}, WHITESPACE); + p := pb; + # end of bibtex entry, for better recovery from errors + ende := PositionMatchingDelimiter(str, "{}", p); + # get the components + pb := Position(str, '=', p); + while pb<>fail and pb < ende do + comp := LowercaseString(StripBeginEnd(str{[p+1..pb-1]}, + Concatenation(",", WHITESPACE))); + pb := pb+1; + while str[pb] in WHITESPACE do + pb := pb+1; + od; + p := pb; + if str[p] = '\"' then + pb := Position(str, '\"', p); + # if double quote is escaped, then go to next one + while str[pb-1]='\\' do + pb := Position(str, '\"', pb); + od; + r.(comp) := str{[p+1..pb-1]}; + elif str[p] = '{' then + pb := PositionMatchingDelimiter(str, "{}", p); + r.(comp) := str{[p+1..pb-1]}; + else + pb := p+1; + while (not str[pb] in WHITESPACE) and str[pb] <> ',' do + pb := pb+1; + od; + s := str{[p..pb-1]}; + # number + if Int(s)<>fail then + r.(comp) := s; + else + # abbrev string, look up and substitute + s := LowercaseString(s); + pos := Position(stringlabels, s); + if pos=fail then + r.(comp) := Concatenation("STRING-NOT-KNOWN: ", s); + else + r.(comp) := strings[pos]; + fi; + fi; + fi; + p := pb+1; + pb := Position(str, '=', p); + od; + Add(entries, r); + fi; + p := Position(str, '@', p); + od; + od; + return [entries, stringlabels, strings]; +end); + +## <#GAPDoc Label="NormalizeNameAndKey"> +## +## +## +## This function normalizes in a record describing a &BibTeX; +## reference (see ) the author +## and editor fields using the description in . The original entries are stored in +## .authororig and .editororig.

    +## +## Furthermore a short and a long citation key is generated.

    +## +## We continue the example from . +## +## +## gap> bib[1][1]; +## rec( Type := "article", Label := "AB2000", +## author := "First, F. A. and Sec, X. Y. ", title := "Short", +## journal := "Important Journal", year := "2000", +## authororig := "Fritz A. First and Sec, X. Y.", key := "FS00", +## keylong := "firstsec2000" ) +## +## +## +## <#/GAPDoc> +## +InstallGlobalFunction(NormalizeNameAndKey, function(b) + local yy, y, names, nn; + if IsBound(b.year) then + if IsInt(b.year) then + yy := String(b.year); + y := String(b.year mod 100); + else + yy := b.year; + y := b.year{[Length(b.year)-1, Length(b.year)]}; + fi; + else + yy := ""; + y := ""; + fi; + for names in ["author", "editor"] do + if IsBound(b.(names)) then + nn := NormalizedNameAndKey(b.(names)); + if nn[1] <> b.(names) then + b.(Concatenation(names, "orig")) := b.(names); + b.(names) := nn[1]; + fi; + if not IsBound(b.key) then + b.key := Concatenation(nn[2], y); + fi; + if not IsBound(b.keylong) then + b.keylong := Concatenation(nn[3], yy); + fi; + fi; + od; +end); + + +# print out a bibtex entry, the ordering of fields is normalized and +# type and field names are in lowercase, also some formatting is done +# arg: entry[, abbrevs, texts] where abbrevs and texts are lists +# of same length abbrevs[i] is string macro for texts[i] +InstallGlobalFunction(PrintBibAsBib, function(arg) + local r, abbrevs, texts, ind, fieldlist, comp, pos, lines, i; + + # scan arguments + r := arg[1]; + if Length(arg)>2 then + abbrevs := arg[2]; + texts := arg[3]; + else + abbrevs := []; + texts := []; + fi; + + if not IsBound(r.Label) then + Print("%%%%% no label %%%%%%%%\n"); + return; + fi; + ind := RepeatedString(' ', 22); + fieldlist := [ + "author", + "editor", + "booktitle", + "title", + "journal", + "month", + "organization", + "publisher", + "school", + "edition", + "series", + "volume", + "number", + "address", + "year", + "pages", + "chapter", + "crossref", + "note", + "notes", + "key", + "keywords" ]; + Print("@", r.Type, "{ ", r.Label); + for comp in Concatenation(fieldlist, + Difference(NamesOfComponents(r), Concatenation(fieldlist, + ["Type", "Label"]) )) do + if IsBound(r.(comp)) then + Print(",\n ", comp, " = ", List([1..16-Length(comp)], i-> ' ')); + pos := Position(texts, r.(comp)); + if pos <> fail then + Print(abbrevs[pos]); + else + Print("{"); + lines := FormatParagraph(r.(comp), 54, "both", [ind, ""]); + PrintFormattedString(lines{[Length(ind)+1..Length(lines)-1]}); + Print("}"); + fi; + fi; + od; + Print("\n}\n\n"); +end); + +## <#GAPDoc Label="WriteBibFile"> +## +## +## +## This is the converse of . Here +## bib must have a format as it is returned by . A &BibTeX; file bibfile is written +## and the entries are formatted in a uniform way. All given +## abbreviations are used while writing this file.

    +## +## We continue the example from . +## The command +## +## +## gap> WriteBibFile("nicer.bib", bib); +## +## +## produces a file nicer.bib as follows: +## +##

    +## @string{j = "Important Journal" } +## +## @article{ AB2000, +## author = {First, F. A. and Sec, X. Y.}, +## title = {Short}, +## journal = j, +## year = {2000}, +## key = {FS00}, +## authororig = {Fritz A. First and Sec, X. Y.}, +## keylong = {firstsec2000} +## } +## +##
    +##
    +## <#/GAPDoc> +## +InstallGlobalFunction(WriteBibFile, function(file, bib) + local p, b3, a, b, pos, f; + + # collect abbrevs + p := []; + SortParallel(bib[3], bib[2]); + b3 := Immutable(bib[3]); + IsSet(b3); + for a in bib[1] do + for b in NamesOfComponents(a) do + pos := Position(b3, a.(b)); + if pos <> fail then + Add(p, pos); + fi; + od; + od; + p := Set(p); + + f := function() + local i, a; + Print("\n\n"); + # the `string's + for i in p do + Print("@string{", bib[2][i], " = \"", b3[i], "\" }\n"); + od; + Print("\n\n"); + for a in bib[1] do + PrintBibAsBib(a, bib[2], b3); + od; + end; + + PrintTo1(file, f); +end); + +## arg: r[, i] (for link to BibTeX) +InstallGlobalFunction(PrintBibAsHTML, function(arg) + local r, i; + r := arg[1]; + if Length(arg)=2 then + i := arg[2]; + else + i := -1; + fi; + + if not IsBound(r.Label) then + Print("Error: entry has no label . . .\n"); + return; + fi; + + Print("

    \n[", r.Label, "] "); + if IsBound(r.author) then + Print("",r.author," "); + fi; + if IsBound(r.editor) then + Print("(", r.editor, ",Ed.)"); + fi; + if IsBound(r.title) then + Print(",\n ", r.title, ""); + fi; + if IsBound(r.booktitle) then + if r.Type in ["inproceedings", "incollection"] then + Print(" in "); + fi; + Print(",\n ", r.booktitle, ""); + fi; + if IsBound(r.subtitle) then + Print(",\n -- ", r.subtitle, ""); + fi; + if IsBound(r.journal) then + Print(",\n ", r.journal); + fi; + if IsBound(r.organization) then + Print(",\n ", r.organization); + fi; + if IsBound(r.publisher) then + Print(",\n ", r.publisher); + fi; + if IsBound(r.school) then + Print(",\n ", r.school); + fi; + if IsBound(r.edition) then + Print(",\n ", r.edition, "edition"); + fi; + if IsBound(r.series) then + Print(",\n ", r.series); + fi; + if IsBound(r.volume) then + Print(",\n ", r.volume, ""); + fi; + if IsBound(r.number) then + Print(" (", r.number, ")"); + fi; + if IsBound(r.address) then + Print(",\n ", r.address); + fi; + if IsBound(r.year) then + Print(",\n (", r.year, ")"); + fi; + if IsBound(r.pages) then + Print(",\n p. ", r.pages); + fi; + if IsBound(r.chapter) then + Print(",\n Chapter ", r.chapter); + fi; + if IsBound(r.note) then + Print("
    \n(", r.note, ")
    \n"); + fi; + if IsBound(r.notes) then + Print("
    \n(", r.notes, ")
    \n"); + fi; + + if IsBound(r.BUCHSTABE) then + Print("
    \nEinsortiert unter ", r.BUCHSTABE, ".
    \n"); + fi; + if IsBound(r.LDFM) then + Print("Signatur ", r.LDFM, ".
    \n"); + fi; + if i>=0 then + Print("BibTeX Eintrag\n
    "); + fi; + Print("

    \n\n"); +end); + +## arg: r[, ansi] (for link to BibTeX) +InstallGlobalFunction(PrintBibAsText, function(arg) + local r, bold, emph, us, lab, str; + r := arg[1]; + if Length(arg) = 2 and arg[2] = true then + bold := Concatenation(TextAttr.bold, TextAttr.1); + emph := TextAttr.4; + us := TextAttr.underscore; + lab := TextAttr.3; + else + bold := ""; emph := ""; us := ""; lab := ""; + fi; + + if not IsBound(r.Label) then + Print("Error: entry has no label . . .\n"); + return; + fi; + + str := ""; + Append(str, lab); + Add(str, '['); + if IsBound(r.key) then + Append(str, r.key); + else + Append(str, r.Label); + fi; + Append(str, "] "); + Append(str, TextAttr.reset); + if IsBound(r.author) then + Append(str, Concatenation(bold ,r.author, TextAttr.reset)); + fi; + if IsBound(r.editor) then + Append(str, Concatenation(" (", r.editor, ",Ed.) ")); + fi; + if IsBound(r.title) then + Append(str, Concatenation(", ", emph, r.title, TextAttr.reset)); + fi; + if IsBound(r.booktitle) then + Append(str, ", "); + if r.Type in ["inproceedings", "incollection"] then + Append(str, " in "); + fi; + Append(str, Concatenation(emph, r.booktitle, TextAttr.reset)); + fi; + if IsBound(r.subtitle) then + Append(str, Concatenation(" -- ", emph, r.subtitle, + TextAttr.reset, " ")); + fi; + if IsBound(r.journal) then + Append(str, Concatenation(", ", r.journal)); + fi; + if IsBound(r.organization) then + Append(str, Concatenation(", ", r.organization)); + fi; + if IsBound(r.publisher) then + Append(str, Concatenation(", ", r.publisher)); + fi; + if IsBound(r.school) then + Append(str, Concatenation(", ", r.school)); + fi; + if IsBound(r.edition) then + Append(str, Concatenation(", ", r.edition, " edition")); + fi; + if IsBound(r.series) then + Append(str, Concatenation(", ", r.series)); + fi; + if IsBound(r.volume) then + Append(str, Concatenation(", ", emph, r.volume, TextAttr.reset)); + fi; + if IsBound(r.number) then + Append(str, Concatenation(" (", r.number, ")")); + fi; + if IsBound(r.address) then + Append(str, Concatenation(", ", r.address)); + fi; + if IsBound(r.year) then + Append(str, Concatenation(" (", r.year, ")")); + fi; + if IsBound(r.pages) then + Append(str, Concatenation(", ", r.pages)); + fi; + if IsBound(r.chapter) then + Append(str, Concatenation(", Chapter ", r.chapter)); + fi; + if IsBound(r.note) then + Append(str, Concatenation(", (", r.note, ")")); + fi; + + if IsBound(r.BUCHSTABE) then + Append(str, Concatenation(", Einsortiert unter ", r.BUCHSTABE)); + fi; + if IsBound(r.LDFM) then + Append(str, Concatenation(", Signatur ", r.LDFM)); + fi; + str := FormatParagraph(Filtered(str, x-> not x in "{}"), 72); + Add(str, '\n'); + PrintFormattedString(str); +end); + diff --git a/lib/ComposeXML.gd b/lib/ComposeXML.gd new file mode 100644 index 0000000..748bb65 --- /dev/null +++ b/lib/ComposeXML.gd @@ -0,0 +1,15 @@ +############################################################################# +## +#W ComposeXML.gi GAPDoc Frank Lübeck +## +#H @(#)$Id: ComposeXML.gd,v 1.1.1.1 2001-01-05 13:37:48 gap Exp $ +## +#Y Copyright (C) 2000, Frank Lübeck, Lehrstuhl D für Mathematik, +#Y RWTH Aachen +## +## The files ComposeXML.gi/.gd contain a function which allows to construct +## a GAPDoc-XML document from several source files. +## + +DeclareGlobalFunction("ComposedXMLString"); + diff --git a/lib/ComposeXML.gi b/lib/ComposeXML.gi new file mode 100644 index 0000000..650d1ef --- /dev/null +++ b/lib/ComposeXML.gi @@ -0,0 +1,126 @@ +############################################################################# +## +#W ComposeXML.gi GAPDoc Frank Lübeck +## +#H @(#)$Id: ComposeXML.gi,v 1.1.1.1 2001-01-05 13:37:48 gap Exp $ +## +#Y Copyright (C) 2000, Frank Lübeck, Lehrstuhl D für Mathematik, +#Y RWTH Aachen +## +## The files ComposeXML.gi/.gd contain a function which allows to construct +## a GAPDoc-XML document from several source files. +## + +## <#GAPDoc Label="ComposedXMLString"> +## +## +## +## This function returns a string containing a &GAPDoc; XML document +## constructed from several source files.

    +## +## Here path must be a path to some directory (as +## string or directory object), main the name of a file +## in this directory and source a list of file names, +## all of these relative to path. The document is +## constructed via the mechanism described in Section .

    +## +## First the files given in source are scanned for +## chunks of &GAPDoc;-documentation marked by &tlt;&hash;GAPDoc +## Label="..."> and &tlt;/&hash;GAPDoc> pairs. Then the +## file main is read and all &tlt;&hash;Include ... +## >-tags are substituted recursively by other files or chunks +## of documentation found in the first step, respectively. +## +## +## gap> doc := ComposedXMLString("/my/dir", "manual.xml", +## > ["../lib/func.gd", "../lib/func.gi"]);; +## +## +## +## <#/GAPDoc> +## +InstallGlobalFunction(ComposedXMLString, function(path, main, source) + local pieces, f, str, i, j, pre, pos, name, piece, a, b, len, res; + + if IsString(path) then + path := Directory(path); + fi; + # first we fetch GAPDoc chunks from the source files + pieces := rec(); + for f in source do + str := StringFile(Filename(path, f)); + # here and below we escape # as \# such that this function doesn't + # interpret the error messages as a GAPDoc chunk + i := PositionSublist(str, "<\#GAPDoc Label=\""); + while i <> fail do + j := i-1; + while j > 0 and str[j] <> '\n' do + j := j-1; + od; + pre := str{[j+1..i-1]}; + pos := Position(str, '\"', i+15); + if pos=fail then + Error(f, ": File ends within \#GAPDoc tag."); + fi; + name := str{[i+16..pos-1]}; + i := Position(str, '\n', pos); + if i=fail then + Error(f, ": File ends within \#GAPDoc piece."); + fi; + pos := PositionSublist(str, "<\#/GAPDoc>", i); + while str[pos-1] <> '\n' do + pos := pos-1; + od; + if pos=fail then + Error(f, ": File ends within \#GAPDoc piece."); + fi; + piece := SplitString(str{[i+1..pos-1]}, "\n", ""); + for a in [1..Length(piece)] do + b := 1; + len := Minimum(Length(piece[a]), Length(pre)); + while b <= len and pre[b] = piece[a][b] do + b := b+1; + od; + if b > 1 then + piece[a] := piece[a]{[b..Length(piece[a])]}; + fi; + od; + for a in piece do + Add(a, '\n'); + od; + pieces.(name) := Concatenation(piece); + i := PositionSublist(str, "<\#GAPDoc Label=\"", pos); + od; + od; + + # recursive subtitution of files and chunks from above + res := StringFile(Filename(path, main)); + if res=fail then + Error("Cannot open file ", Filename(path, main)); + fi; + i := PositionSublist(res, "<\#Include "); + while i <> fail do + pos := Position(res, '>', i); + piece := SplitString(res{[i+9..pos-1]}, "", "\"= "); + if piece[1]="SYSTEM" then + str := StringFile(Filename(path, piece[2])); + if str=fail then + Error("Cannot include file ", Filename(path, piece[2])); + fi; + res := Concatenation(res{[1..i-1]}, str, res{[pos+1..Length(res)]}); + elif piece[1]="Label" then + if not IsBound(pieces.(piece[2])) then + Error("Did not find chunk ", piece[2]); + fi; + res := Concatenation(res{[1..i-1]}, pieces.(piece[2]), + res{[pos+1..Length(res)]}); + fi; + i := i-1; + i := PositionSublist(res, "<\#Include ", i); + od; + + return res; +end); + + diff --git a/lib/GAPDoc.gd b/lib/GAPDoc.gd new file mode 100644 index 0000000..277da16 --- /dev/null +++ b/lib/GAPDoc.gd @@ -0,0 +1,18 @@ +############################################################################# +## +#W GAPDoc.gd GAPDoc Frank Lübeck +## +#H @(#)$Id: GAPDoc.gd,v 1.1.1.1 2001-01-05 13:37:48 gap Exp $ +## +#Y Copyright (C) 2000, Frank Lübeck, Lehrstuhl D für Mathematik, +#Y RWTH Aachen +## +## The files GAPDoc.g{d,i} contain some utilities for trees returned by +## ParseTreeXMLString applied to a GAPDoc document. +## + +DeclareGlobalFunction("CheckAndCleanGapDocTree"); +DeclareGlobalFunction("AddParagraphNumbersGapDocTree"); +DeclareGlobalFunction("AddPageNumbersToSix"); +DeclareGlobalFunction("PrintSixFile"); + diff --git a/lib/GAPDoc.gi b/lib/GAPDoc.gi new file mode 100644 index 0000000..c0477b7 --- /dev/null +++ b/lib/GAPDoc.gi @@ -0,0 +1,270 @@ +############################################################################# +## +#W GAPDoc.gi GAPDoc Frank Lübeck +## +#H @(#)$Id: GAPDoc.gi,v 1.1.1.1 2001-01-05 13:37:48 gap Exp $ +## +#Y Copyright (C) 2000, Frank Lübeck, Lehrstuhl D für Mathematik, +#Y RWTH Aachen +## +## The files GAPDoc.g{d,i} contain some utilities for trees returned by +## ParseTreeXMLString applied to a GAPDoc document. +## + +## <#GAPDoc Label="CheckAndCleanGapDocTree"> +## +## +## +## The argument tree of this function is a parse tree from +## of some &GAPDoc; document. This +## function does an (incomplete) validity check of the document +## according to the document type declaration in gapdoc.dtd. +## It also does some additional checks which cannot be described in +## the DTD (like checking if chapters and sections have a heading). +## For elements with element content the whitespace between these +## elements is removed.

    +## +## In case of an error the break loop is entered and the position of +## the error in the original XML document is printed. +## +## +## <#/GAPDoc> +## +# GAPDOCDTDINFO contains essentially the declaration information from +# gapdoc.dtd +Add(GAPDOCDTDINFO, rec(name := "WHOLEDOCUMENT", attr := [ ], + reqattr := [ ], type := "elements", content := ["Book"])); +BindGlobal("GAPDOCDTDINFOELS", List(GAPDOCDTDINFO, a-> a.name)); +InstallGlobalFunction(CheckAndCleanGapDocTree, function(r) + local name, pos, type, c, namc, l, namattr, typ; + name := r.name; + if name = "PCDATA" then + return true; + fi; + if Length(name)>2 and name{[1..3]} = "XML" then + return true; + fi; + pos := Position(GAPDOCDTDINFOELS, name); + if pos=fail then + Error("element ", name, " not known (starts position ", r.start, ")"); + fi; + type := GAPDOCDTDINFO[pos].type; + # checking content + if type = "empty" then + if not r.content = EMPTYCONTENT then + Error("element ", name, " must be empty (starts ", r.start, ")"); + fi; + elif type = "elements" then + for c in r.content do + namc := c.name; + if not ((Length(namc)>2 and namc{[1..3]}="XML") or + (namc = "PCDATA" and ForAll(c.content, x-> x in + WHITESPACE)) or + namc in GAPDOCDTDINFO[pos].content) then + Error("Wrong element in ", name, ": ", namc," (starts ", + r.start, ")"); + fi; + od; + r.content := Filtered(r.content, a-> a.name <> "PCDATA"); + elif type = "mixed" then + l := List(r.content, c-> (Length(c.name)>2 and c.name{[1..3]} + = "XML") or c.name in + GAPDOCDTDINFO[pos].content); + if false in l then + Error("Wrong element in ", name, ": ", r.content[Position(l, + false)].name ," (starts ", + r.start, ")"); + fi; + fi; + + # checking existing attributes: + namattr := NamesOfComponents(r.attributes); + for c in namattr do + if not c in GAPDOCDTDINFO[pos].attr then + Error("Attribute ", c, " not declared for ", name); + fi; + od; + # checking required attributes + for c in GAPDOCDTDINFO[pos].reqattr do + if not c in namattr then + Error("Attribute ", c, " must be given in element ", name); + fi; + od; + # some extra checks + if name = "Ref" then + if IsBound(r.attributes.BookName) and not + IsBound(r.attributes.Label) then + typ := Difference(NamesOfComponents(r.attributes), ["BookName"]); + if Length(typ) <> 1 then + Error("Ref with strange attribute set (position ", r.start, "): ", + typ); + fi; + fi; + elif name in [ "Chapter", "Section", "Subsection" ] and not "Heading" + in List(r.content, a-> a.name) then + Error("Chapter, Section or Subsection must have a heading (position ", + r.start, ")"); + fi; + + if r.content = EMPTYCONTENT then + return true; + else + return ForAll(r.content, x-> CheckAndCleanGapDocTree(x)); + fi; +end); + + +## <#GAPDoc Label="AddParagraphNumbersGapDocTree"> +## +## +## +## The argument tree must be an XML tree returned by applied to a &GAPDoc; document. This +## function adds to each node of the tree a component .count +## which is of form [Chapter[, Section[, Subsection, Paragraph] ] +## ]. Here the first three numbers should be the same as +## produced by the &LaTeX; version of the document. Text before +## first chapter is counted as chapter 0 and similarly for +## sections and subsections. Some elements are always considered to +## start a new paragraph. +## +## +## <#/GAPDoc> +## +InstallGlobalFunction(AddParagraphNumbersGapDocTree, function(r) + local parels, cssp, setcount; + if IsBound(r.count) then + return; + fi; + + # these elements are paragraphs + parels := [ "List", "Enum", "Table", "Item", "Heading", "Attr", "Fam", + "Filt", "Func", "InfoClass", "Meth", "Oper", "Prop", "Var", + "Display", "Example", "Listing", "Log"]; + # reset counter + cssp := [0, 0, 0, 1]; + # the counter setting recursive function + setcount := function(rr) + local a; + if IsList(rr.content) and not IsString(rr.content) then + for a in rr.content do + # new chapter, text before first section is counted as section 0 + if a.name = "Chapter" then + cssp := [cssp[1]+1, 0, 0, 1]; + a.count := cssp; + elif a.name = "Section" then + cssp := [cssp[1], cssp[2]+1, 0, 1]; + elif a.name in ["Subsection", "ManSection", "Abstract", "Copyright", + "TableOfContents", "Acknowledgements", "Colophon"] then + cssp := [cssp[1], cssp[2], cssp[3]+1, 1]; + elif a.name = "P" or a.name in parels then + cssp := [cssp[1], cssp[2], cssp[3], cssp[4]+1]; + elif a.name = "Appendix" then + # here we number with capital letters + if IsInt(cssp[1]) then + cssp := ["A", 0, 0, 1]; + else + cssp := [[CHAR_INT(INT_CHAR(cssp[1][1])+1)], 0, 0, 1]; + fi; + # bib and index are counted as new chapters + elif a.name = "Bibliography" then + cssp := ["Bib", 0, 0, 1]; + elif a.name = "TheIndex" then + cssp := ["Ind", 0, 0, 1]; + fi; + a.count := cssp; + # recursion + setcount(a); + if a.name in parels then + cssp := [cssp[1], cssp[2], cssp[3], cssp[4]+1]; + fi; + od; + fi; + end; + r.count := cssp; + setcount(r); +end); + +## <#GAPDoc Label="AddPageNumbersToSix"> +## +## +## +## Here tree must be the XML tree of a &GAPDoc; +## document, returned by . +## Running latex on the result of (tree) produces a file pnrfile (with +## extension .pnr). The command (tree) creates a component tree.six +## which contains all information about the document for the &GAP; +## online help, except the page numbers in the .dvi, .ps, +## .pdf versions of the document. This command adds the missing +## page number information to tree.six. +## +## +## <#/GAPDoc> +## +PAGENRS := 0; +InstallGlobalFunction(AddPageNumbersToSix, function(r, pnrfile) + local six, a, pos; + Read(pnrfile); + six := r.six; + for a in six do + pos := Position(PAGENRS, a[3]); + a[5] := PAGENRS[pos+1]; + od; + Unbind(PAGENRS); +end); + +## <#GAPDoc Label="PrintSixFile"> +## +## +## +## This function prints the .six file fname for +## a &GAPDoc; document stored in tree with name +## bookname. Such a file contains all information about the +## book which is needed by the &GAP; online help. This information +## must first be created by calls of and +## . +## +## +## <#/GAPDoc> +## +InstallGlobalFunction(PrintSixFile, function(file, r, bookname) + local f; + # We cannot print strings with escape sequences directly, + # so we translate them into numbers. + f := function(a) + local res; + res := ShallowCopy(a); + res[1] := List(res[1], INT_CHAR); + res[2] := STRING_LOWER(res[2]); + return res; + end; + PrintTo(file, "#SIXFORMAT GapDocGAP\nHELPBOOKINFOSIXTMP := rec(\n", + "bookname := \"", bookname, "\",\n", + "entries :=\n", List(r.six, f), "\n);\n"); +end); + +# non-documented utility +## This prints templates for all elements (e.g., for editor helper functions) +PrintGAPDocElementTemplates := function ( file ) + local a, x; + PrintTo(file, "<-- Templates for GAPDoc XML Elements -->\n"); + Sort(GAPDOCDTDINFO, function(a,b) return a.name#\n\n"); + else + AppendTo(file, ">XXX#\n\n" ); + fi; + od; + return; +end; + diff --git a/lib/GAPDoc2HTML.gd b/lib/GAPDoc2HTML.gd new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/lib/GAPDoc2HTML.gd @@ -0,0 +1 @@ + diff --git a/lib/GAPDoc2HTML.gi b/lib/GAPDoc2HTML.gi new file mode 100644 index 0000000..ebf34e6 --- /dev/null +++ b/lib/GAPDoc2HTML.gi @@ -0,0 +1,1251 @@ +############################################################################# +## +#W GAPDoc2HTML.gi GAPDoc Frank Lübeck +## +#H @(#)$Id: GAPDoc2HTML.gi,v 1.1.1.1 2001-01-05 13:37:49 gap Exp $ +## +#Y Copyright (C) 2000, Frank Lübeck, Lehrstuhl D für Mathematik, +#Y RWTH Aachen +## +## The files GAPDoc2HTML.g{d,i} contain a conversion program which +## produces from a GAPDoc XML-document an HTML version for reading the +## document with a Web-browser. +## + +## REMARKS: +## +## We add a link to the document root to all recursively called functions +## by adding .root entries. The toc-, index- and bib-information is +## collected in the root. +## +## The set of elements is partitioned into two subsets - those which +## contain whole paragraphs and those which don't. +## +## The handler of a paragraph containing element (see +## GAPDoc2HTMLProcs.ParEls below) gets a list as argument to which it +## adds entries pairwise: the first of such a pair is the paragraph +## counter (like [3,2,1,5] meaning Chap.3, Sec.2, Subsec.1, Par.5) and +## the second is the formatted text of this paragraph. +## +## Some handlers of paragraph containing elements do the formatting +## themselves (e.g., .List), the others are handles in the main recursion +## function `GAPDoc2HTMLContent'. +## +## We produce a full version of the document in text format, including +## title page, abstract and other front matter, table of contents, +## bibliography (via BibTeX-data files) and index. Highlighting with +## colors for ANSI color sequence capable terminals is included. +## +## In this text converter we also produce the manual.six data. For +## getting page numbers in .dvi and .pdf versions, the LaTeX-converter +## and LaTeX must be run first. This produces a .pnr file. +## + +#<#GAPDoc Label="GAPDoc2HTML"> +#<#/GAPDoc> +#<#GAPDoc Label="GAPDoc2HTMLPrintHTMLFiles"> +#<#/GAPDoc> +GAPDoc2HTMLProcs := rec(); + +## Some text attributes ([begin, end] pairs) +GAPDoc2HTMLProcs.TextAttr := rec(); +GAPDoc2HTMLProcs.TextAttr.Heading := ["", ""]; + +GAPDoc2HTMLProcs.TextAttr.Func := ["", ""]; +GAPDoc2HTMLProcs.TextAttr.Arg := ["", ""]; +GAPDoc2HTMLProcs.TextAttr.Example := ["", ""]; +GAPDoc2HTMLProcs.TextAttr.Package := ["", ""]; +GAPDoc2HTMLProcs.TextAttr.URL := ["", ""]; +GAPDoc2HTMLProcs.TextAttr.Mark := ["", ""]; + +GAPDoc2HTMLProcs.TextAttr.K := ["", ""]; +GAPDoc2HTMLProcs.TextAttr.C := ["", ""]; +GAPDoc2HTMLProcs.TextAttr.F := ["", ""]; +GAPDoc2HTMLProcs.TextAttr.I := ["", ""]; +GAPDoc2HTMLProcs.TextAttr.B := ["", ""]; +GAPDoc2HTMLProcs.TextAttr.Emph := ["", ""]; + +GAPDoc2HTMLProcs.TextAttr.Ref := ["", ""]; + +# like in Text converter, but a heading is not a paragraph here +GAPDoc2HTMLProcs.ParEls := +[ "Display", "Example", "Log", "Listing", "List", "Enum", "Item", "Table", + "TitlePage", "Abstract", "Copyright", "Acknowledgements", "Colophon", + "TableOfContents", "Bibliography", "TheIndex", "Subsection", "ManSection", + "Description", "Section", "Chapter", "Appendix", "Body", "Book", + "WHOLEDOCUMENT", "Attr", "Fam", "Filt", "Func", "InfoClass", + "Meth", "Oper", "Prop", "Var" ]; + +## arg: a list of strings +## for now only ?????? +SetGapDocTxtOptions := function(arg) + local gdp; + gdp := GAPDoc2HTMLProcs; + return; +end; + + + +GAPDoc2HTMLProcs.Head1 := "\ +\n\ +\n\ +GAP ("; + +GAPDoc2HTMLProcs.Head2 := "\ +\n\ +\n\ +\n\ +\n\ +\n\n"; + +GAPDoc2HTMLProcs.Tail := "\n\ +


    \n\ +generated by GAPDoc2HTML\ +\n\n\n"; + +GAPDoc2HTMLProcs.PutFilesTogether := function(l, r) + local files, n, tt, i; + + # putting the paragraphs together (one string (file) for each chapter) + files := rec(); + for n in Set(List([2,4..Length(l)], i-> l[i-1][1])) do + files.(n) := rec(text := ShallowCopy(GAPDoc2HTMLProcs.Head1), ssnr := []); + tt := Concatenation(r.bookname, ") - "); + if n=0 then + Append(tt, "Contents"); + elif IsInt(n) then + Append(tt, Concatenation("Chapter ", String(n), ": ", r.chaptitle.(n))); + elif n="Bib" then + Append(tt, "References"); + elif n="Ind" then + Append(tt, "Index"); + else + Append(tt, Concatenation("Appendix ", n, ": ", r.chaptitle.(n))); + fi; + Append(files.(n).text, tt); + Append(files.(n).text, GAPDoc2HTMLProcs.Head2); + od; + for i in [2,4..Length(l)] do + n := files.(l[i-1][1]); + if Length(n.ssnr)=0 or l[i-1]{[1..3]} <> n.ssnr[Length(n.ssnr)] then + Add(n.ssnr, l[i-1]{[1..3]}); + Append(n.text, Concatenation("\n")); + fi; + + Append(n.text, l[i]); + od; + + for n in Set(List([2,4..Length(l)], i-> l[i-1][1])) do + Append(files.(n).text, GAPDoc2HTMLProcs.Tail); + od; + return files; +end; + +## the basic call, used recursively with a result r from GetElement +## and a string str or list l to which the output should be appended +# arg: r[, bibpath] (then a list is returned, only for whole document) +# or: r, str (then the output is appended to string or list str) +GAPDoc2HTML := function(arg) + local r, str, linelength, name; + r := arg[1]; + if Length(arg)=2 then + str := arg[2]; + else + str := []; + fi; + + if r.name = "WHOLEDOCUMENT" then + if IsDirectory(str) then + r.bibpath := str; + else + r.bibpath := Directory(str); + fi; + str := []; + fi; + + name := r.name; + if not IsBound(GAPDoc2HTMLProcs.(name)) then + Print("WARNING: Don't know how to process element ", name, + " ---- ignored\n"); + else + GAPDoc2HTMLProcs.(r.name)(r, str); + fi; + + if r.name ="WHOLEDOCUMENT" then + # put final record together and return i + return GAPDoc2HTMLProcs.PutFilesTogether(str, r); + fi; + + return str; +end; + +## recursion through the tree and collecting paragraphs +GAPDoc2HTMLContent := function(r, l) + local par, cont, count, s, a; + + # utility: append counter and formatted paragraph to l + par := function(s) + if Length(s)>0 then +# ??? formatting useful??? s := FormatParagraph(s, r.root.linelength); + s := NormalizedWhitespace(s); + if Length(s)>0 then + Add(l, count); + Add(l, Concatenation("

    ", s, "

    \n\n")); + fi; + fi; + end; + + # if not containing paragraphs, then l is string to append to + if not r.name in GAPDoc2HTMLProcs.ParEls then + for a in r.content do + GAPDoc2HTML(a, l); + od; + return; + fi; + + # otherwise we have to collect text and paragraphs + cont := r.content; + count := r.count; + s := ""; + for a in cont do + if a.count <> count then + par(s); + count := a.count; + s := ""; + fi; + if a.name in GAPDoc2HTMLProcs.ParEls then + # recursively collect paragraphs + GAPDoc2HTML(a, l); + else + # collect text for current paragraph + GAPDoc2HTML(a, s); + fi; + od; + if Length(s)>0 then + par(s); + fi; +end; + + +## write head and foot of Txt file. +GAPDoc2HTMLProcs.WHOLEDOCUMENT := function(r, par) + local i, pi, t, el, a, str, bib, keys, need, labels, + diff, text, stream; + + ## add paragraph numbers to all nodes of the document + AddParagraphNumbersGapDocTree(r); + + ## add a link .root to the root of the document to all nodes + ## (then we can collect information about indexing and so on + ## there) + AddRootParseTree(r); + r.index := []; + r.toc := ""; + r.labels := rec(); + r.bibkeys := []; + r.chaptitle := rec(); + + ## checking for processing instructions before the book starts + ## example: + i := 1; + pi := rec(); + while not r.content[i].name = "Book" do + if r.content[i].name = "XMLPI" then + t := r.content[i].content; + if Length(t) > 4 and t{[1..5]} = "HTML " then + el := GetSTag(Concatenation("<", t, ">"), 2); + for a in NamesOfComponents(el.attributes) do + pi.(a) := el.attributes.(a); + od; + fi; + fi; + i := i+1; + od; + + ## Now the actual work starts, we give the processing instructions found + ## so far to the Book handler. + ## We call the Book handler twice and produce index, bibliography, toc + ## in between. + Print("#I first run, collecting cross references, index, toc, bib ", + "and so on . . .\n"); + GAPDoc2HTMLProcs.Book(r.content[i], [], pi); + + # now the toc is ready + Print("#I table of contents complete.\n"); + r.toctext := r.toc; + + # .index has entries of form [sorttext, subtext, numbertext, entrytext] + Print("#I producing the index . . .\n"); + Sort(r.index); + str := ""; + for a in r.index do + Append(str, a[4]); + if Length(a[2])>0 then + Append(str, ", "); + Append(str, a[2]); + fi; + Append(str, " "); + Append(str, a[3]); + Add(str, '\n'); + od; + r.indextext := str; + + if Length(r.bibkeys)>0 then + Print("#I reading bibliography data files . . . \n"); + bib := CallFuncList(ParseBibFiles, List(SplitString( + r.bibdata, "", ", \t\t\n"), f-> Filename(r.bibpath, f))); + keys := Immutable(Set(r.bibkeys)); + need := []; + for a in bib[1] do + if a.Label in keys then + NormalizeNameAndKey(a); + Add(need, a); + fi; + od; + SortParallel(List(need, a-> a.keylong), need); + keys := List(need, a-> a.Label); + labels := List(need, a-> a.key); + diff := Difference(r.bibkeys, keys); + if Length(diff) > 0 then + Print("#W could not find references: ", diff, "\n"); + fi; + r.bibkeys := keys; + r.biblabels := labels; + Print("#I writing bibliography . . .\n"); + text := ""; + stream := OutputTextString(text, false); + PrintTo1(stream, function() + for a in need do PrintBibAsText(a, true); od; + end); + CloseStream(stream); + r.bibtext := text; + fi; + + # second run + r.index := []; + Print("#I second run through document . . .\n"); + GAPDoc2HTMLProcs.Book(r.content[i], par, pi); + + ## remove the links to the root ??? +## RemoveRootParseTree(r); +end; + +## comments and processing instructions are in general ignored +GAPDoc2HTMLProcs.XMLPI := function(r, str) + return; +end; +GAPDoc2HTMLProcs.XMLCOMMENT := function(r, str) + return; +end; + +# just process content +GAPDoc2HTMLProcs.Book := function(r, par, pi) + # copy the name of the book to the root + r.root.bookname := r.attributes.Name; + GAPDoc2HTMLContent(r, par); +end; + +## Body is sectioning element +GAPDoc2HTMLProcs.Body := GAPDoc2HTMLContent; + +## the title page, the most complicated looking function +GAPDoc2HTMLProcs.TitlePage := function(r, par) + local strn, l, s, a, aa, cont, ss; + + strn := "
    \n"; + # title + l := Filtered(r.content, a-> a.name = "Title"); + s := ""; + GAPDoc2HTMLContent(l[1], s); + s := Concatenation("\n

    ", NormalizedWhitespace(s), "

    \n\n"); + Append(strn, s); + + # subtitle + l := Filtered(r.content, a-> a.name = "Subtitle"); + if Length(l)>0 then + s := ""; + GAPDoc2HTMLContent(l[1], s); + s := Concatenation("\n

    ", NormalizedWhitespace(s), "

    \n\n"); + Append(strn, s); + fi; + + # version + l := Filtered(r.content, a-> a.name = "Version"); + if Length(l)>0 then + s := "

    ("; + GAPDoc2HTMLContent(l[1], s); + while Length(s)>0 and s[Length(s)] in WHITESPACE do + Unbind(s[Length(s)]); + od; + Append(s, ")

    \n\n"); + Append(strn, s); + fi; + + # date + l := Filtered(r.content, a-> a.name = "Date"); + if Length(l)>0 then + s := "

    "; + GAPDoc2HTMLContent(l[1], s); + Append(strn, s); + Append(strn, "

    \n\n"); + fi; + Append(strn, "
    \n"); + + # author name(s) + l := Filtered(r.content, a-> a.name = "Author"); + for a in l do + s := "

    "; + aa := ShallowCopy(a); + aa.content := Filtered(a.content, b-> not b.name in ["Email", "Homepage"]); + GAPDoc2HTMLContent(aa, s); + Append(strn, s); + Append(strn, "\n"); + cont := List(a.content, b-> b.name); + if "Email" in cont then + s := ""; + GAPDoc2HTML(a.content[Position(cont, "Email")], s); + s := NormalizedWhitespace(s); + Append(strn, Concatenation("
    e-mail: ", s, "\n")); + fi; + if "Homepage" in cont then + s := ""; + GAPDoc2HTML(a.content[Position(cont, "Homepage")], s); + s := NormalizedWhitespace(s); + Append(strn, Concatenation("
    WWW: ", s, "\n")); + fi; + Append(strn, "

    "); + od; + Append(strn, "\n\n"); + + Add(par, r.count); + Add(par, strn); + + # abstract, copyright page, acknowledgements, colophon + for ss in ["Abstract", "Copyright", "Acknowledgements", "Colophon" ] do + l := Filtered(r.content, a-> a.name = ss); + if Length(l)>0 then + Add(par, l[1].count); + Add(par, Concatenation("

    ", ss, "

    \n")); + GAPDoc2HTMLContent(l[1], par); + fi; + od; +end; + +## these produce text for an URL +## ~ and # characters are correctly escaped +## arg: r, str[, pre] +GAPDoc2HTMLProcs.URL := function(arg) + local r, str, pre, s, p; + r := arg[1]; + str := arg[2]; + if Length(arg)>2 then + pre := arg[3]; + else + pre := ""; + fi; + + s := ""; + GAPDoc2HTMLContent(r, s); + Append(str, Concatenation("", s, "")); +end; + +GAPDoc2HTMLProcs.Homepage := GAPDoc2HTMLProcs.URL; + +GAPDoc2HTMLProcs.Email := function(r, str) + # we add the `mailto://' phrase + GAPDoc2HTMLProcs.URL(r, str, "mailto://"); +end; + +## utility: generate a chapter or (sub)section-number string +GAPDoc2HTMLProcs.SectionNumber := function(count, sect) + local res; + if IsString(count[1]) or count[1]>0 then + res := Concatenation(String(count[1]), "."); + else + res := ""; + fi; + if sect="Chapter" then + return res; + fi; + if count[2]>0 then + Append(res, String(count[2])); + fi; + if sect="Section" then + return res; + fi; + if count[3]>0 then + Append(res, Concatenation("-", String(count[3]))); + fi; + return res; +end; + +## utility: generate a chapter or (sub)section-number string +GAPDoc2HTMLProcs.SectionLabel := function(count, sect) + local res; + if IsString(count[1]) or count[1]>0 then + res := Concatenation("chap", String(count[1]), ".html"); + else + res := "chap0.html"; + fi; + res := [res, ""]; + if sect="Chapter" then + return res; + fi; + Append(res[2], Concatenation("s", String(count[2]))); + Append(res[2], Concatenation("ss", String(count[3]))); + return res; +end; + +## the sectioning commands are just translated and labels are +## generated, if given as attribute +GAPDoc2HTMLProcs.ChapSect := function(r, par, sect) + local types, nrs, hord, num, posh, s, lab; + + types := ["Chapter", "Appendix", "Section", "Subsection"]; + nrs := ["3", "3", "4", "5"]; + hord := nrs[Position(types, sect)]; + + # section number as string + num := GAPDoc2HTMLProcs.SectionNumber(r.count, sect); + + # the heading + posh := Position(List(r.content, a-> a.name), "Heading"); + if posh <> fail then + s := ""; + GAPDoc2HTMLProcs.Heading1(r.content[posh], s); + if hord = "3" then + r.root.chaptitle.(r.count[1]) := s; + fi; + + # the heading text + s := Concatenation("\n", num, " ", s, "\n\n"); + Add(par, r.count); + Add(par, s); + + # table of contents entry + lab := GAPDoc2HTMLProcs.SectionLabel(r.count, "Subsection"); + lab := Concatenation(lab[1], "#", lab[2]); + Append(r.root.toc, Concatenation("", s, "")); + fi; + + # label entry, if present + if IsBound(r.attributes.Label) then + r.root.labels.(r.attributes.Label) := [num, lab]; + fi; + + # the actual content + GAPDoc2HTMLContent(r, par); +end; + +## this really produces the content of the heading +GAPDoc2HTMLProcs.Heading1 := function(r, str) + GAPDoc2HTMLContent(r, str); +end; +## and this ignores the heading (for simpler recursion) +GAPDoc2HTMLProcs.Heading := function(r, str) +end; + +GAPDoc2HTMLProcs.Chapter := function(r, par) + GAPDoc2HTMLProcs.ChapSect(r, par, "Chapter"); +end; + +GAPDoc2HTMLProcs.Appendix := function(r, par) + GAPDoc2HTMLProcs.ChapSect(r, par, "Appendix"); +end; + +GAPDoc2HTMLProcs.Section := function(r, par) + GAPDoc2HTMLProcs.ChapSect(r, par, "Section"); +end; + +GAPDoc2HTMLProcs.Subsection := function(r, par) + GAPDoc2HTMLProcs.ChapSect(r, par, "Subsection"); +end; + +## table of contents, just puts "TOC" in first run +GAPDoc2HTMLProcs.TableOfContents := function(r, par) + Add(par, r.count); + if IsBound(r.root.toctext) then + Add(par, Concatenation("\n

    Contents

    \n\n", + r.root.toctext, "

    \n\n")); + else + Add(par,"

    TOC\n-----------

    \n\n"); + fi; +end; + +## bibliography, just "BIB" in first run, store databases in root +GAPDoc2HTMLProcs.Bibliography := function(r, par) + local s; + r.root.bibdata := r.attributes.Databases; + Add(par, r.count); + if IsBound(r.root.bibtext) then + Add(par, Concatenation("\n

    References

    \n\n", + r.root.bibtext, "

    \n\n")); + else + Add(par,"

    BIB\n-----------

    \n"); + fi; +end; + +## We filter TeX commands and substitute \& -> & and so on, ~ -> NoBrkSpace +GAPDoc2HTMLProcs.PCDATAFILTER := function(r, str) + local cont, lc, i, s, j; + cont := r.content; + lc := Length(cont); + i := 1; + s := ""; + while i <= lc do + if not cont[i] in "\\~" then + j := i+1; + while j <= lc and not cont[j] in "\\~" do + j := j+1; + od; + Append(s, cont{[i..j-1]}); + i := j; + elif cont[i] = '\\' then + if i=lc then + # trailing \ is removed + break; + elif cont[i+1] in LETTERS then + # TeX command is removed + j := i+2; + while j <= lc and cont[j] in LETTERS do + j := j+1; + od; + i := j; + else + # next character is considered to be escaped by the \ + # only the \ itself is removed + Add(s, cont[i+1]); + i := i+2; + fi; + elif cont[i] = '~' then + # character 160 is a non-breakable space in iso-8859-1 + Add(s, CHAR_INT(160)); + i := i+1; + fi; + od; + Append(str, s); +end; + +## inside element we don't want this filtering +GAPDoc2HTMLProcs.PCDATANOFILTER := function(r, str) + Append(str, r.content); +end; + +## default is with filter +GAPDoc2HTMLProcs.PCDATA := GAPDoc2HTMLProcs.PCDATAFILTER; + +## end of paragraph (end with double newline) +GAPDoc2HTMLProcs.P := function(r, str) + # ??? automatic in HTML ??? +## local l, i; +## l := Length(str); +## if l>0 and str[l] <> '\n' then +## Append(str, "\n\n"); +## elif l>1 and str[l-1] <> '\n' then +## Add(str, '\n'); +## else +## # remove too many line breaks +## i := l-2; +## while i>0 and str[i] = '\n' do +## Unbind(str[i+2]); +## i := i-1; +## od; +## fi; +end; + +## wrapping text attributes +GAPDoc2HTMLProcs.WrapAttr := function(r, str, a) + local s, tt; + s := ""; + GAPDoc2HTMLContent(r, s); + tt := GAPDoc2HTMLProcs.TextAttr.(a); + Append(str, Concatenation(tt[1], s, tt[2])); +end; + +## GAP keywords +GAPDoc2HTMLProcs.K := function(r, str) + GAPDoc2HTMLProcs.WrapAttr(r, str, "K"); +end; + +## buttons +GAPDoc2HTMLProcs.B := function(r, str) + GAPDoc2HTMLProcs.WrapAttr(r, str, "B"); +end; + +## verbatim GAP code +GAPDoc2HTMLProcs.C := function(r, str) + GAPDoc2HTMLProcs.WrapAttr(r, str, "C"); +end; + +## file names +GAPDoc2HTMLProcs.F := function(r, str) + GAPDoc2HTMLProcs.WrapAttr(r, str, "F"); +end; + +## argument names (same as Arg) +GAPDoc2HTMLProcs.A := function(r, str) + GAPDoc2HTMLProcs.WrapAttr(r, str, "Arg"); +end; + +## simple maths, here we try to substitute TeX command to something which +## looks ok in text mode +GAPDoc2HTMLProcs.M := function(r, str) + local subs, s, ss, ls, i, j, wd; + # We do the following substitutions (for other TeX commands only the + # backslash is removed. Furthermore {} are changed to (). + subs := rec( + ldots := "...", + mid := "|", + left := "", + right := "", + mathbb := "", + cdot := "*", + geq := ">=", + leq := "<=", + pmod := "mod", + equiv := "=", + rightarrow := "->", + to := "->", + longrightarrow := "-->", + mapsto := "->", # or |-> ???? + leftarrow := "<-", + langle := "<", + rangle := ">" + ); + s := ""; + # no filtering here + GAPDoc2HTMLProcs.PCDATA := GAPDoc2HTMLProcs.PCDATANOFILTER; + GAPDoc2HTMLContent(r, s); + GAPDoc2HTMLProcs.PCDATA := GAPDoc2HTMLProcs.PCDATAFILTER; + ss := ""; + ls := Length(s); + i := 1; + while i<=ls do + if s[i] = '\\' and i ls then + ss := s; + else + Append(ss, s{[i..j-1]}); + fi; + i := j; + fi; + od; + Append(str, ss); +#Print("\n------------\n",s,"\n",ss,"\n"); +end; + +## in HTML this is shown in TeX format +GAPDoc2HTMLProcs.Math := function(r, str) + Add(str, '$'); + GAPDoc2HTMLProcs.PCDATA := GAPDoc2HTMLProcs.PCDATANOFILTER; + GAPDoc2HTMLContent(r, str); + GAPDoc2HTMLProcs.PCDATA := GAPDoc2HTMLProcs.PCDATAFILTER; + Add(str, '$'); +end; + +## displayed maths (also in TeX format, but centered paragraph in itself) +GAPDoc2HTMLProcs.Display := function(r, par) + local s; + s := "\\["; + GAPDoc2HTMLProcs.PCDATA := GAPDoc2HTMLProcs.PCDATANOFILTER; + GAPDoc2HTMLContent(r, s); + GAPDoc2HTMLProcs.PCDATA := GAPDoc2HTMLProcs.PCDATAFILTER; + Append(s, " \\]"); + s := Concatenation("

    ", s, "

    \n\n"); + Add(par, r.count); + Add(par, s); +end; + +## emphazised text +GAPDoc2HTMLProcs.Emph := function(r, str) + GAPDoc2HTMLProcs.WrapAttr(r, str, "Emph"); +end; + +## quoted text +GAPDoc2HTMLProcs.Q := function(r, str) + Append(str, "``"); + GAPDoc2HTMLContent(r, str); + Append(str, "''"); +end; + +## Package names +GAPDoc2HTMLProcs.Package := function(r, str) + GAPDoc2HTMLProcs.WrapAttr(r, str, "Package"); +end; + +## menu items +GAPDoc2HTMLProcs.I := function(r, str) + GAPDoc2HTMLProcs.WrapAttr(r, str, "I"); +end; + +GAPDoc2HTMLProcs.ExampleLike := function(r, par, label) + local str, cont, a, s; + str := "\n\n
    \n";
    +  cont := "";
    +  for a in r.content do 
    +    # here we try to avoid reformatting
    +    if IsString(a.content) then
    +      Append(cont, a.content); 
    +    else
    +      s := "";
    +      GAPDoc2HTML(a, s);
    +      Append(cont, s);
    +    fi;
    +  od;
    +  Append(str, cont);
    +  Append(str, "\n
    \n\n"); + Add(par, r.count); + Add(par, str); +end; + +## log of session and GAP code is typeset the same way as +GAPDoc2HTMLProcs.Example := function(r, par) + GAPDoc2HTMLProcs.ExampleLike(r, par, "Example"); +end; +GAPDoc2HTMLProcs.Log := function(r, par) + GAPDoc2HTMLProcs.ExampleLike(r, par, "Log"); +end; +GAPDoc2HTMLProcs.Listing := function(r, par) + GAPDoc2HTMLProcs.ExampleLike(r, par, "Code"); +end; + +## explicit labels +GAPDoc2HTMLProcs.Label := function(r, str) + local num, lab; + num := GAPDoc2HTMLProcs.SectionNumber(r.count, "Subsection"); + lab := GAPDoc2HTMLProcs.SectionLabel(r.count, "Subsection"); + r.root.labels.(r.attributes.Name) := [num, Concatenation(lab[1],"#",lab[2])]; +end; + +## citations +GAPDoc2HTMLProcs.Cite := function(r, str) + local key, pos; + key := r.attributes.Key; + pos := Position(r.root.bibkeys, key); + if pos = fail then + Add(r.root.bibkeys, key); + Append(str, Concatenation("[?", key, "?]")); + elif not IsBound(r.root.biblabels) then + Append(str, Concatenation("[?", key, "?]")); + else + Append(str, Concatenation("[", r.root.biblabels[pos])); + if IsBound(r.attributes.Place) then + Append(str, ", "); + Append(str, r.attributes.Place); + fi; + Add(str, ']'); + fi; +end; + +## explicit index entries +GAPDoc2HTMLProcs.Index := function(r, str) + local s, entry; + + s := ""; + GAPDoc2HTMLContent(r, s); + NormalizeWhitespace(s); + if IsBound(r.attributes.Key) then + entry := [STRING_LOWER(r.attributes.Key)]; + else + entry := [STRING_LOWER(s)]; + fi; + if IsBound(r.attributes.Subkey) then + Add(entry, r.attributes.Subkey); + else + Add(entry, ""); + fi; + Add(entry, GAPDoc2HTMLProcs.SectionNumber(r.count, "Subsection")); + Add(entry, s); + Add(entry, r.count{[1..3]}); + Add(r.root.index, entry); +end; + +## for argument list of functions (e.g., "a, b[[c, ], d]") +GAPDoc2HTMLProcs.NormalizedArgList := function(argl) + local sp, res, i; + if Length(argl)=0 then + return ""; + fi; + sp := SplitString(argl, "", ", \n\r\t"); + res := sp[1]; + for i in [2..Length(sp)] do + if not sp[i][1] in "[]" then + Append(res, ", "); + fi; + Append(res, sp[i]); + od; + return res; +end; + +## this produces an implicit index entry and a label entry +GAPDoc2HTMLProcs.LikeFunc := function(r, par, typ) + local attr, s, name, lab; + attr := GAPDoc2HTMLProcs.TextAttr.Func; + s := Concatenation(attr[1], "> ", r.attributes.Name, attr[2]); + if IsBound(r.attributes.Arg) then + attr := GAPDoc2HTMLProcs.TextAttr.Arg; + Append(s, Concatenation("( ", attr[1], + GAPDoc2HTMLProcs.NormalizedArgList(r.attributes.Arg), + attr[2], " )")); + fi; + # index entry + name := r.attributes.Name; + attr := GAPDoc2HTMLProcs.TextAttr.Func; + Add(r.root.index, [STRING_LOWER(name), "", + GAPDoc2HTMLProcs.SectionNumber(r.count, "Subsection"), + Concatenation(attr[1], name, attr[2]), + r.count{[1..3]}]); + # label (if not given, the default is the Name) + if IsBound(r.attributes.Label) then + lab := Concatenation(r.attributes.Name, r.attributes.Label); + else + lab := r.attributes.Name; + fi; + GAPDoc2HTMLProcs.Label(rec(count := r.count, attributes := rec(Name + := lab), root := r.root), par); + # adding hint about the type of the variable + s := Concatenation("

    ", + "
    ", s, + "( ", typ, + " )

    \n"); + Add(par, r.count); + Add(par, s); +end; + +GAPDoc2HTMLProcs.Func := function(r, str) + GAPDoc2HTMLProcs.LikeFunc(r, str, "function"); +end; + +GAPDoc2HTMLProcs.Oper := function(r, str) + GAPDoc2HTMLProcs.LikeFunc(r, str, "operation"); +end; + +GAPDoc2HTMLProcs.Meth := function(r, str) + GAPDoc2HTMLProcs.LikeFunc(r, str, "method"); +end; + +GAPDoc2HTMLProcs.Filt := function(r, str) + # r.attributes.Type could be "representation", "category", ... + if IsBound(r.attributes.Type) then + GAPDoc2HTMLProcs.LikeFunc(r, str, r.attributes.Type); + else + GAPDoc2HTMLProcs.LikeFunc(r, str, "filter"); + fi; +end; + +GAPDoc2HTMLProcs.Prop := function(r, str) + GAPDoc2HTMLProcs.LikeFunc(r, str, "property"); +end; + +GAPDoc2HTMLProcs.Attr := function(r, str) + GAPDoc2HTMLProcs.LikeFunc(r, str, "attribute"); +end; + +GAPDoc2HTMLProcs.Var := function(r, str) + GAPDoc2HTMLProcs.LikeFunc(r, str, "global variable"); +end; + +GAPDoc2HTMLProcs.Fam := function(r, str) + GAPDoc2HTMLProcs.LikeFunc(r, str, "family"); +end; + +GAPDoc2HTMLProcs.InfoClass := function(r, str) + GAPDoc2HTMLProcs.LikeFunc(r, str, "info class"); +end; + +## using the HelpData(.., .., "ref") interface +GAPDoc2HTMLProcs.ResolveExternalRef := function(bookname, label, nr) + local info, match; + info := HELP_BOOK_INFO(bookname); + match := Concatenation(HELP_GET_MATCHES(info, STRING_LOWER(label), true)); + if Length(match) < nr then + return fail; + fi; + return HELP_BOOK_HANDLER.(info.handler).HelpData(info, match[nr][2], "ref"); +end; + +GAPDoc2HTMLProcs.Ref := function(r, str) + local funclike, int, txt, ref, lab, attr, sectlike; + + int := Difference(NamesOfComponents(r.attributes), ["BookName", "Label"])[1]; + lab := r.attributes.(int); + if IsBound(r.attributes.Label) then + lab := Concatenation(lab, r.attributes.Label); + fi; + if IsBound(r.attributes.BookName) then + ref := GAPDoc2HTMLProcs.ResolveExternalRef(r.attributes.BookName, lab, 1); + if ref <> fail and ref[6] <> fail then + ref := Concatenation("a href=\"", ref[6], "\">", ref[1], + ""); + elif ref <> fail then + ref := Concatenation("", ref[1], ""); + else + ref := Concatenation("", "???", ""); + fi; + else + if IsBound(r.root.labels.(lab)) then + ref := Concatenation("", + "", r.root.labels.(lab)[1], ""); + else + ref := "???"; + fi; + fi; + if int in [ "Func", "Oper", "Meth", "Filt", "Prop", "Attr", "Var", + "Fam", "InfoClass" ] then + attr := GAPDoc2HTMLProcs.TextAttr.Func; + txt := Concatenation(attr[1], r.attributes.(int), attr[2], " "); + else + txt := ""; + fi; + Append(str, txt); + Append(str, ref); + return; +## # function like cases +## funclike := [ "Func", "Oper", "Meth", "Filt", "Prop", "Attr", "Var", +## "Fam", "InfoClass" ]; +## int := Intersection(funclike, NamesOfComponents(r.attributes)); +## if Length(int)>0 then +## txt := r.attributes.(int[1]); +## if IsBound(r.attributes.BookName) then +## ref := GAPDoc2HTMLProcs.ResolveExternalRef(r.attributes.BookName, +## r.attributes.Label, 1); +## if ref <> fail an ref[6] <> fail then +## ref := Concatenation(""); +## elif ref <> fail then +## ref := Concatenation("", ref[1], ""); +## else +## ref := Concatenation("", txt, "???"); +## fi; +## else +## if IsBound(r.attributes.Label) then +## lab := Concatenation(txt, r.attributes.Label); +## else +## lab := txt; +## fi; +## if IsBound(r.root.labels.(lab)) then +## ref := Concatenation(""); +## else +## ref := "???"; +## fi; +## fi; +## attr := GAPDoc2HTMLProcs.TextAttr.Func; +## Append(str, Concatenation(ref, attr[1], txt, attr[2]); +## if Length(ref)>2 and ref{[1,2]} = ""); +## fi; +## return; +## fi; +## +## # section like cases +## sectlike := ["Chap", "Sect", "Subsect", "Appendix"]; +## int := Intersection(sectlike, NamesOfComponents(r.attributes)); +## if Length(int)>0 then +## if IsBound(r.attributes.BookName) then +## ref := GAPDoc2HTMLProcs.ResolveExternalRef(r.attributes.BookName, +## int[1], r.attributes.Label); +## if ref.style = "noresolve" then +## ref := ref.text; +## fi; +## else +## # with sectioning references Label must be given +## lab := r.attributes.(int[1]); +## if IsBound(r.root.labels.(lab)) then +## ref := r.root.labels.(lab); +## else +## ref := "???"; +## fi; +## fi; +## attr := GAPDoc2HTMLProcs.TextAttr.Ref; +## Append(str, Concatenation(attr[1], ref, attr[2])); +## return; +## fi; +## +## # neutral reference to a label +## if IsBound(r.attributes.BookName) then +## ref := GAPDoc2HTMLProcs.ResolveExternalRef(r.attributes.BookName, +## "Label", r.attributes.Label); +## if ref.style = "noresolve" then +## ref := ref.text; +## fi; +## else +## lab := r.attributes.Label; +## if IsBound(r.root.labels.(lab)) then +## ref := r.root.labels.(lab); +## else +## ref := "???"; +## fi; +## fi; +## attr := GAPDoc2HTMLProcs.TextAttr.Ref; +## Append(str, Concatenation(attr[1], ref, attr[2])); +## return; +end; + +GAPDoc2HTMLProcs.Description := GAPDoc2HTMLContent; + +GAPDoc2HTMLProcs.ManSection := function(r, par) + local strn, funclike, i, num, s, lab; + + strn := ""; + # function like elements + funclike := [ "Func", "Oper", "Meth", "Filt", "Prop", "Attr", "Var", + "Fam", "InfoClass" ]; + + # heading comes from name of first function like element + i := 1; + while not r.content[i].name in funclike do + i := i+1; + od; + + num := GAPDoc2HTMLProcs.SectionNumber(r.count, "Subsection"); + s := Concatenation(num, " ", r.content[i].attributes.Name); + Add(par, r.count); + Add(par, Concatenation("\n
    ", s, "
    \n\n")); + # append to TOC as subsection + lab := GAPDoc2HTMLProcs.SectionLabel(r.count, "Subsection"); + lab := Concatenation(lab[1], "#", lab[2]); + Append(r.root.toc, Concatenation("
    ", s, + "
    \n")); + GAPDoc2HTMLContent(r, par); +end; + +GAPDoc2HTMLProcs.Mark := function(r, str) + GAPDoc2HTMLProcs.WrapAttr(r, str, "Mark"); +end; + +GAPDoc2HTMLProcs.Item := function(r, str) +# local s; +# s := ""; + GAPDoc2HTMLContent(r, str); +# Append(str, s); +end; + +# must do the complete formatting +GAPDoc2HTMLProcs.List := function(r, par) + local s, a, ss, i; + s := "\n"; + if "Mark" in List(r.content, a-> a.name) then + # a
    list + Append(s, "
    \n"); + for a in r.content do + if a.name = "Mark" then + ss := ""; + GAPDoc2HTMLProcs.Mark(a, ss); + Append(s, Concatenation("
    ", ss, "
    \n")); + elif a.name = "Item" then + ss := ""; + GAPDoc2HTMLProcs.Item(a, ss); + ss := Concatenation(Filtered(ss, IsString)); + ss := Concatenation("
    ", ss, "
    \n"); + Append(s, ss); + fi; + od; + Append(s, "
    \n"); + else + # a
      list + Append(s, "
        \n"); + for a in r.content do + if a.name = "Item" then + ss := ""; + GAPDoc2HTMLProcs.Item(a, ss); + ss := Concatenation(Filtered(ss, IsString)); + Append(s, Concatenation("
      • ", ss, "
      • \n")); + fi; + od; + Append(s, "
      \n"); + fi; + Add(par, r.count); + Add(par, s); +end; + +## and this is an
        list +GAPDoc2HTMLProcs.Enum := function(r, par) + local s, i, a, ss, num; + s := ""; + # a
          list + Append(s, "
            \n"); + for a in r.content do + ss := ""; + GAPDoc2HTMLProcs.Item(a, ss); + Append(s, Concatenation("
          1. ", ss, "
          2. \n")); + od; + Append(s, "
          \n"); + Add(par, r.count); + Add(par, s); +end; + +GAPDoc2HTMLProcs.TheIndex := function(r, par) + local s; + + # the text, if available + Add(par, r.count); + if IsBound(r.root.indextext) then + Add(par, Concatenation("\n

          Index

          \n\n", + r.root.toctext, "

          \n\n")); + else + Add(par,"

          INDEX\n-----------

          \n\n"); + fi; +end; + +GAPDoc2HTMLProcs.Alt := function(r, str) + if (IsBound(r.attributes.Only) and r.attributes.Only = "HTML") or + (IsBound(r.attributes.Not) and r.attributes.Not <> "HTML") then + GAPDoc2HTMLContent(r, str); + fi; +end; + +# copy a few entries with two element names +GAPDoc2HTMLProcs.E := GAPDoc2HTMLProcs.Emph; +GAPDoc2HTMLProcs.Keyword := GAPDoc2HTMLProcs.K; +GAPDoc2HTMLProcs.Code := GAPDoc2HTMLProcs.C; +GAPDoc2HTMLProcs.File := GAPDoc2HTMLProcs.F; +GAPDoc2HTMLProcs.Button := GAPDoc2HTMLProcs.B; +GAPDoc2HTMLProcs.Arg := GAPDoc2HTMLProcs.A; +GAPDoc2HTMLProcs.Quoted := GAPDoc2HTMLProcs.Q; +GAPDoc2HTMLProcs.Par := GAPDoc2HTMLProcs.P; + +## +## +## +## + + +## Finally a function to print the text files: +GAPDoc2HTMLPrintHTMLFiles := function(t, path) + local a; + if IsString(path) then + path := Directory(path); + fi; + for a in NamesOfComponents(t) do + FileString(Filename(path, Concatenation("chap",a,".html")), t.(a).text); + od; +end; diff --git a/lib/GAPDoc2LaTeX.gd b/lib/GAPDoc2LaTeX.gd new file mode 100644 index 0000000..56fcafe --- /dev/null +++ b/lib/GAPDoc2LaTeX.gd @@ -0,0 +1,19 @@ +############################################################################# +## +#W GAPDoc2LaTeX.gd GAPDoc Frank Lübeck +## +#H @(#)$Id: GAPDoc2LaTeX.gd,v 1.1.1.1 2001-01-05 13:37:48 gap Exp $ +## +#Y Copyright (C) 2000, Frank Lübeck, Lehrstuhl D für Mathematik, +#Y RWTH Aachen +## +## The files GAPDoc2LaTeX.g{d,i} contain a conversion program which +## produces from a GAPDoc XML-document a version which can be processed +## by LaTeX and pdfLaTeX. +## + +DeclareGlobalVariable("GAPDoc2LaTeXProcs"); + +DeclareGlobalFunction("GAPDoc2LaTeX"); + + diff --git a/lib/GAPDoc2LaTeX.gi b/lib/GAPDoc2LaTeX.gi new file mode 100644 index 0000000..77e5629 --- /dev/null +++ b/lib/GAPDoc2LaTeX.gi @@ -0,0 +1,1123 @@ +############################################################################# +## +#W GAPDoc2LaTeX.gi GAPDoc Frank Lübeck +## +#H @(#)$Id: GAPDoc2LaTeX.gi,v 1.1.1.1 2001-01-05 13:37:48 gap Exp $ +## +#Y Copyright (C) 2000, Frank Lübeck, Lehrstuhl D für Mathematik, +#Y RWTH Aachen +## +## The files GAPDoc2LaTeX.g{d,i} contain a conversion program which +## produces from a GAPDoc XML-document a version which can be processed +## by LaTeX and pdfLaTeX. +## + +## All the work is done by handler functions for each GAPDoc XML +## element. These functions are bound as components to the record +## `GAPDoc2LaTeXProcs'. Most element markup is easily translated to a +## corresponding LaTeX markup. It should be easy to modify details for +## some elements by small local changes of the corresponding handler +## function. The only slight complications are in places where the XML +## elements imply some labeling or indexing. Also for all (sub)section +## commands we add some commands which cause LaTeX to produce a +## GAP readable .pnr file which contains the page numbers for all +## subsections. +InstallValue(GAPDoc2LaTeXProcs, rec()); + +## <#GAPDoc Label="GAPDoc2LaTeX"> +## +## +## +## The argument tree for this function is a tree +## describing a &GAPDoc; XML document as returned by (probably also checked with ). The output is a string +## containing a version of the document which can be written to a +## file and processed with &LaTeX; or pdf&LaTeX; (and probably +## &BibTeX; and makeindex).

          +## +## The output uses the report document class and +## needs the following &LaTeX; packages: a4wide, +## amssymb, isolatin1, makeidx, color, +## fancyvrb, pslatex and hyperref. These +## are for example provided by the teTeX-1.0 +## distribution of &TeX; (which in turn is used for +## most &TeX; packages of current Linux distributions); see +## http://www.tug.org/tetex/.

          +## +## In particular, the resulting dvi- or pdf-output +## contains (internal and external) hyperlinks which can be very +## useful for online browsing of the document.

          +## +## The &LaTeX; processing also produces a file with extension +## .pnr which is &GAP; readable and contains the page numbers +## for all (sub)sections of the document. This can be used by +## &GAP;'s online help; see . +## +## There is support for two types or XML processing instructions +## which allow to change the options used for the document class or +## to add some extra lines to the preamble of the &LaTeX; document. +## They can be specified as in the following examples: +## +##

          +## +## +## ]]> +## +## A hint for large documents: In many &TeX; installations one can +## easily reach some memory limitations with documents which contain +## many (cross-)references. In teTeX you can look +## for a file texmf.cnf which allows to enlarge certain +## memory sizes.

          +## +## This function works by running recursively through the document +## tree and calling a handler function for each &GAPDoc; XML +## element. These handler functions are all quite easy to understand +## (the greatest complications are some commands for index entries, +## labels or the output of page number information). So it should be +## easy to adjust layout details to your own taste by slight +## modifications of the program. +## +## +## <#/GAPDoc> +## +# the basic call, used recursivly with a result r from GetElement +# and a string str to which the output should be appended +# arg: r (then a string is returned) +# or: r, str (then the output is appended to string str) +InstallGlobalFunction(GAPDoc2LaTeX, function(arg) + local r, str, name; + r := arg[1]; + if Length(arg)>1 then + str := arg[2]; + else + str := ""; + fi; + name := r.name; + if not IsBound(GAPDoc2LaTeXProcs.(name)) then + Print("WARNING: Don't know how to process element ", name, + " ---- ignored\n"); + else + GAPDoc2LaTeXProcs.(r.name)(r, str); + fi; + if Length(arg)=1 then + return str; + fi; +end); + +## a common recursion loop +BindGlobal("GAPDoc2LaTeXContent", function(r, str) + local a; + for a in r.content do + GAPDoc2LaTeX(a, str); + od; +end); + +# two utilities for labels and text with _ or \ +GAPDoc2LaTeXProcs.EscapeUsBs := function(str) + str := SubstitutionSublist(str, "\\", "\\texttt{\\symbol{92}}"); + str := SubstitutionSublist(str, "_", "{\\_}"); + return str; +end; + +GAPDoc2LaTeXProcs.DeleteUsBs := function(str) + return Filtered(str, x-> not (x in "\\_")); +end; + +## this is for getting a string "[ \"A\", 1, 1 ]" from [ "A", 1, 1 ] +GAPDoc2LaTeXProcs.StringNrs := function(ssnr) + if IsInt(ssnr[1]) then + return String(ssnr); + else + return Concatenation("[ \"", ssnr[1], "\", ", String(ssnr[2]), ", ", + String(ssnr[3]), " ]"); + fi; +end; + +## standard head of LaTeX file - part 1 +GAPDoc2LaTeXProcs.Head1 := Concatenation([ +"% generated by GAPDoc2LaTeX from XML source (Frank Luebeck)\n", +"\\documentclass["]); + +GAPDoc2LaTeXProcs.Head1x := Concatenation([ +"]{report}\n", +"\\usepackage{a4wide}\n", +"\\sloppy\n", +"\\pagestyle{myheadings}\n", +"\\usepackage{amssymb}\n", +"\\usepackage{isolatin1}\n", +"\\usepackage{makeidx}\n", +"\\makeindex\n", +"\\usepackage{color}\n", +"\\definecolor{DarkOlive}{rgb}{0.1047,0.2412,0.0064}\n", +"\\definecolor{FireBrick}{rgb}{0.5812,0.0074,0.0083}\n", +"\\definecolor{RoyalBlue}{rgb}{0.0236,0.0894,0.6179}\n", +"\\definecolor{RoyalGreen}{rgb}{0.0236,0.6179,0.0894}\n", +"\\definecolor{RoyalRed}{rgb}{0.6179,0.0236,0.0894}\n", +"\\definecolor{LightBlue}{rgb}{0.8544,0.9511,1.0000}\n", +"\\definecolor{Black}{rgb}{0.0,0.0,0.0}\n", +"\\definecolor{FuncColor}{rgb}{1.0,0.0,0.0}\n", +"\\definecolor{SecColor}{rgb}{0.0,0.0,1.0}\n", +"\n", +"\\usepackage{fancyvrb}\n", +"\n", +"\\usepackage{pslatex}\n", +"\n"]); + +## head - part 2 for dvi, ps and pdf output (default is "dvi") +GAPDoc2LaTeXProcs.Head2dvi := "\\usepackage[\n"; +GAPDoc2LaTeXProcs.Head2ps := "\\usepackage[dvips=true,\n"; +GAPDoc2LaTeXProcs.Head2pdf := "\\usepackage[pdftex=true,\n"; +GAPDoc2LaTeXProcs.Head2 := GAPDoc2LaTeXProcs.Head2dvi; + +## head - part 3 +GAPDoc2LaTeXProcs.Head3 := Concatenation([ +" a4paper=true,\n", +" colorlinks=true,backref=page,breaklinks=true,linkcolor=RoyalBlue,\n", +" citecolor=RoyalGreen,filecolor=RoyalRed,\n", +" urlcolor=RoyalRed,pagecolor=RoyalBlue]{hyperref}\n", +"\n", +"% write page numbers to a .pnr log file for online help\n", +"\\newwrite\\pagenrlog\n", +"\\immediate\\openout\\pagenrlog =\\jobname.pnr\n", +"\\immediate\\write\\pagenrlog{PAGENRS := [}\n", +"\\newcommand{\\logpage}[1]{\\protect\\write\\pagenrlog{#1, \\thepage,}}\n", +"\\newcommand{\\Q}{\\mathbb{Q}}\n", +"\\newcommand{\\R}{\\mathbb{R}}\n", +"\\newcommand{\\C}{\\mathbb{C}}\n", +"\\newcommand{\\Z}{\\mathbb{Z}}\n", +"\\newcommand{\\N}{\\mathbb{N}}\n", +"\\newcommand{\\F}{\\mathbb{F}}\n", +"\n", +"\\newcommand{\\GAP}{\\textsf{GAP}}\n", +"\n", +"\\newsavebox{\\backslashbox}\n", +"\\sbox{\\backslashbox}{\\texttt{\\symbol{92}}}\n", +"\\newcommand{\\bs}{\\usebox{\\backslashbox}}\n", +"\n", +"\\begin{document}\n", +"\n"]); + +GAPDoc2LaTeXProcs.Tail := Concatenation( +"\\immediate\\write\\pagenrlog{[\"End\"], \\arabic{page}];}\n", +"\\immediate\\closeout\\pagenrlog\n", +"\\end{document}\n"); + +## arg: a list of strings +## for now only the output type (one of "dvi", "pdf" or "ps") is used +# to be enhanced, we don't document this for now. +SetGapDocLaTeXOptions := function(arg) + local gdp; + gdp := GAPDoc2LaTeXProcs; + if "pdf" in arg then + gdp.Head2 := gdp.Head2pdf; + elif "dvi" in arg then + gdp.Head2 := gdp.Head2dvi; + elif "ps" in arg then + gdp.Head2 := gdp.Head2ps; + fi; +end; + +## write head and foot of LaTeX file. +GAPDoc2LaTeXProcs.WHOLEDOCUMENT := function(r, str) + local i, pi, t, el, a; + + ## add internal paragraph numbering + AddParagraphNumbersGapDocTree(r); + + ## checking for processing instructions + i := 1; + pi := rec(); + while not r.content[i].name = "Book" do + if r.content[i].name = "XMLPI" then + t := r.content[i].content; + if Length(t) > 5 and t{[1..6]} = "LaTeX " then + el := GetSTag(Concatenation("<", t, ">"), 2); + for a in NamesOfComponents(el.attributes) do + pi.(a) := el.attributes.(a); + od; + fi; + fi; + i := i+1; + od; + ## collect headings of labeled sections + GAPDoc2LaTeXProcs._labeledSections := rec(); + + ## now the actual work starts, we give the found processing instructions + ## to the Book handler + GAPDoc2LaTeXProcs.Book(r.content[i], str, pi); + Unbind(GAPDoc2LaTeXProcs._labeledSections); +end; + +## comments and processing instructions are generally ignored +GAPDoc2LaTeXProcs.XMLPI := function(r, str); +end; +GAPDoc2LaTeXProcs.XMLCOMMENT := function(r, str); +end; + +## this makes head and foot of the LaTeX output +## - the only processing instructions handled currently are +## - options for the report class (german, papersize, ...) and +## - extra entries in the preamble (\usepackage, macro definitions, ...) +GAPDoc2LaTeXProcs.Book := function(r, str, pi) + local a; + + Append(str, GAPDoc2LaTeXProcs.Head1); + if IsBound(pi.Options) then + NormalizeWhitespace(pi.Options); + Append(str, pi.Options); + else + Append(str, "11pt"); + fi; + Append(str, GAPDoc2LaTeXProcs.Head1x); + + if IsBound(pi.ExtraPreamble) then + Append(str, pi.ExtraPreamble); + fi; + Append(str, GAPDoc2LaTeXProcs.Head2); + Append(str, GAPDoc2LaTeXProcs.Head3); + + # and now the text of the document + GAPDoc2LaTeXContent(r, str); + + # that's it + Append(str, GAPDoc2LaTeXProcs.Tail); +end; + +## the Body just prints its content +GAPDoc2LaTeXProcs.Body := GAPDoc2LaTeXContent; + +## the title page, the most complicated looking function +GAPDoc2LaTeXProcs.TitlePage := function(r, str) + local l, a, s, cont; + + # page number info for online help + Append(str, Concatenation("\\logpage{", + GAPDoc2LaTeXProcs.StringNrs(r.count{[1..3]}), "}\n")); + Append(str, "\\begin{titlepage}\n\\begin{center}"); + + # title + l := Filtered(r.content, a-> a.name = "Title"); + Append(str, "{\\Huge \\textbf{"); + s := ""; + GAPDoc2LaTeXContent(l[1], s); + Append(str, s); + Append(str, "}}\\\\[1cm]\n"); + + # the title is also used for the page headings + Append(str, "\\markright{\\scriptsize \\mbox{}\\hfill "); + Append(str, s); + Append(str, " \\hfill\\mbox{}}\n"); + + # subtitle + l := Filtered(r.content, a-> a.name = "Subtitle"); + if Length(l)>0 then + Append(str, "{\\Large \\textbf{"); + GAPDoc2LaTeXContent(l[1], str); + Append(str, "}}\\\\[1cm]\n"); + fi; + + # version + l := Filtered(r.content, a-> a.name = "Version"); + if Length(l)>0 then + Append(str, "{"); + GAPDoc2LaTeXContent(l[1], str); + Append(str, "}\\\\[1cm]\n"); + fi; + + # date + l := Filtered(r.content, a-> a.name = "Date"); + if Length(l)>0 then + Append(str, "{"); + GAPDoc2LaTeXContent(l[1], str); + Append(str, "}\\\\[1cm]\n"); + fi; + Append(str, "\\mbox{}\\\\[3cm]\n"); + + # author name(s) + l := Filtered(r.content, a-> a.name = "Author"); + for a in l do + Append(str, "{\\large \\textbf{"); + GAPDoc2LaTeXContent(rec(content := Filtered(a.content, b-> + not b.name in ["Email", "Homepage"])), str); + Append(str, "}}\\\\\n"); + od; + Append(str, "\\end{center}\\vfill\n\n\\mbox{}\\\\\n"); + + # email and WWW-homepage of author(s), if given + for a in l do + cont := List(a.content, b-> b.name); + if "Email" in cont or "Homepage" in cont then + Append(str, "{\\small \\noindent \\textbf{"); + GAPDoc2LaTeXContent(rec(content := Filtered(a.content, b-> + not b.name in ["Email", "Homepage"])), str); + Append(str, "}"); + if "Email" in cont then + Append(str, " --- Email: "); + GAPDoc2LaTeX(a.content[Position(cont, "Email")], str); + fi; + if "Homepage" in cont then + Append(str, "\\\\\n"); + Append(str, " --- Homepage: "); + GAPDoc2LaTeX(a.content[Position(cont, "Homepage")], str); + fi; + Append(str, "}\\\\\n"); + fi; + od; + Append(str, "\\end{titlepage}\n\n\\newpage"); + + # to make physical page numbers same as document page numbers + Append(str, "\\setcounter{page}{2}\n"); + + # abstract + l := Filtered(r.content, a-> a.name = "Abstract"); + if Length(l)>0 then + Append(str, "{\\small \n\\section*{Abstract}\n"); + # page number info for online help + Append(str, Concatenation("\\logpage{", + GAPDoc2LaTeXProcs.StringNrs(l[1].count{[1..3]}), "}\n")); + GAPDoc2LaTeXContent(l[1], str); + Append(str, "}\\\\[1cm]\n"); + fi; + + # copyright page + l := Filtered(r.content, a-> a.name = "Copyright"); + if Length(l)>0 then + Append(str, "{\\small \n\\section*{Copyright}\n"); + # page number info for online help + Append(str, Concatenation("\\logpage{", + GAPDoc2LaTeXProcs.StringNrs(l[1].count{[1..3]}), "}\n")); + GAPDoc2LaTeXContent(l[1], str); + Append(str, "}\\\\[1cm]\n"); + fi; + + # acknowledgement page + l := Filtered(r.content, a-> a.name = "Acknowledgements"); + if Length(l)>0 then + Append(str, "{\\small \n\\section*{Acknowledgements}\n"); + # page number info for online help + Append(str, Concatenation("\\logpage{", + GAPDoc2LaTeXProcs.StringNrs(l[1].count{[1..3]}), "}\n")); + GAPDoc2LaTeXContent(l[1], str); + Append(str, "}\\\\[1cm]\n"); + fi; + + # colophon page + l := Filtered(r.content, a-> a.name = "Colophon"); + if Length(l)>0 then + Append(str, "{\\small \n\\section*{Colophon}\n"); + # page number info for online help + Append(str, Concatenation("\\logpage{", + GAPDoc2LaTeXProcs.StringNrs(l[1].count{[1..3]}), "}\n")); + GAPDoc2LaTeXContent(l[1], str); + Append(str, "}\\\\[1cm]\n"); + fi; + Append(str,"\\newpage\n\n"); +end; + +## ~ and # characters are correctly escaped +## arg: r, str[, pre] +GAPDoc2LaTeXProcs.URL := function(arg) + local r, str, pre, s, p; + r := arg[1]; + str := arg[2]; + if Length(arg)>2 then + pre := arg[3]; + else + pre := ""; + fi; + s := ""; + GAPDoc2LaTeXContent(r, s); + s := SubstitutionSublist(s, "{\\textasciitilde}", "~"); + Append(str, "\\href{"); + Append(str, pre); + Append(str, s); + p := Position(s, '~'); + while p<>fail do + s := Concatenation(s{[1..p-1]}, "\\~{}", s{[p+1..Length(s)]}); + p := Position(s, '~', p+3); + od; + p := Position(s, '\#'); + while p<>fail do + s := Concatenation(s{[1..p-1]}, "\\\#", s{[p+1..Length(s)]}); + p := Position(s, '\#', p+1); + od; + Append(str, "}{\\texttt "); + Append(str, s); + Append(str, "}"); +end; + +GAPDoc2LaTeXProcs.Homepage := GAPDoc2LaTeXProcs.URL; + +GAPDoc2LaTeXProcs.Email := function(r, str) + # we add the `mailto://' phrase + GAPDoc2LaTeXProcs.URL(r, str, "mailto://"); +end; + +## the sectioning commands are just translated and labels are +## generated, if given as attribute +GAPDoc2LaTeXProcs.ChapSect := function(r, str, sect) + local posh, a, s; + posh := Position(List(r.content, a-> a.name), "Heading"); + # heading + Append(str, Concatenation("\n\\", sect, "{")); + s := ""; + if posh <> fail then + GAPDoc2LaTeXProcs.Heading1(r.content[posh], s); + fi; + Append(str, "\\textcolor{SecColor}{"); + Append(str, s); + Append(str, "}}"); + # label for references + if IsBound(r.attributes.Label) then + Append(str, "\\label{"); + Append(str, r.attributes.Label); + Append(str, "}\n"); + # save heading for "Text" style references to section + GAPDoc2LaTeXProcs._labeledSections.(r.attributes.Label) := s; + fi; + # page number info for online help + Append(str, Concatenation("\\logpage{", + GAPDoc2LaTeXProcs.StringNrs(r.count{[1..3]}), "}\n")); + # the actual content + Append(str, "{\n"); + GAPDoc2LaTeXContent(r, str); + Append(str, "}\n\n"); +end; + +## this really produces the content of the heading +GAPDoc2LaTeXProcs.Heading1 := function(r, str) + GAPDoc2LaTeXContent(r, str); +end; +## and this ignores the heading (for simpler recursion) +GAPDoc2LaTeXProcs.Heading := function(r, str) +end; + +GAPDoc2LaTeXProcs.Chapter := function(r, str) + GAPDoc2LaTeXProcs.ChapSect(r, str, "chapter"); +end; + +GAPDoc2LaTeXProcs.Appendix := function(r, str) + if r.count[1] = "A" then + Append(str, "\n\n\\appendix\n\n"); + fi; + GAPDoc2LaTeXProcs.ChapSect(r, str, "chapter"); +end; + +GAPDoc2LaTeXProcs.Section := function(r, str) + GAPDoc2LaTeXProcs.ChapSect(r, str, "section"); +end; + +GAPDoc2LaTeXProcs.Subsection := function(r, str) + GAPDoc2LaTeXProcs.ChapSect(r, str, "subsection"); +end; + +## table of contents, the job is completely delegated to LaTeX +GAPDoc2LaTeXProcs.TableOfContents := function(r, str) + # page number info for online help + Append(str, Concatenation("\\def\\contentsname{Contents\\logpage{", + GAPDoc2LaTeXProcs.StringNrs(r.count{[1..3]}), "}}\n")); + Append(str, "\n\\tableofcontents\n\\newpage\n\n"); +end; + +## bibliography, the job is completely delegated to LaTeX and BibTeX +GAPDoc2LaTeXProcs.Bibliography := function(r, str) + local st; + if IsBound(r.attributes.Style) then + st := r.attributes.Style; + else + st := "plain"; + fi; + # page number info for online help + Append(str, Concatenation("\\def\\bibname{References\\logpage{", + GAPDoc2LaTeXProcs.StringNrs(r.count{[1..3]}), "}}\n")); + + Append(str, "\n\\bibliographystyle{"); + Append(str, st); + Append(str,"}\n\\bibliography{"); + Append(str, r.attributes.Databases); + Append(str, "}\n\n"); +end; + +## as default we normalize white space in text and split the result +## into lines (leading and trailing white space is also substituted +## by one space). +GAPDoc2LaTeXProcs.PCDATA := function(r, str) + local lines, i; + if Length(r.content)>0 and r.content[1] in WHITESPACE then + Add(str, ' '); + fi; + lines := FormatParagraph(r.content, "left"); + if Length(lines)>0 then + if r.content[Length(r.content)] in WHITESPACE then + lines[Length(lines)] := ' '; + else + Unbind(lines[Length(lines)]); + fi; + fi; + Append(str, lines); +end; + +## end of paragraph +GAPDoc2LaTeXProcs.P := function(r, str) + Append(str, "\n\n"); +end; + +## setting in typewriter +GAPDoc2LaTeXProcs.WrapTT := function(r, str) + local s, a; + s := ""; + GAPDoc2LaTeXContent(r, s); + Append(str, Concatenation("\\texttt{", s, "}")); +end; + +## GAP keywords +GAPDoc2LaTeXProcs.K := function(r, str) + GAPDoc2LaTeXProcs.WrapTT(r, str); +end; + +## verbatim GAP code +GAPDoc2LaTeXProcs.C := function(r, str) + GAPDoc2LaTeXProcs.WrapTT(r, str); +end; + +## file names +GAPDoc2LaTeXProcs.F := function(r, str) + GAPDoc2LaTeXProcs.WrapTT(r, str); +end; + +## argument names +GAPDoc2LaTeXProcs.A := function(r, str) + Append(str, "\\mbox{"); + GAPDoc2LaTeXProcs.WrapTT(r, str); + Append(str, "}"); +end; + +## simple maths +GAPDoc2LaTeXProcs.M := function(r, str) + local a; + Append(str, "$"); + GAPDoc2LaTeXContent(r, str); + Append(str, "$"); +end; + +## in LaTeX same as +GAPDoc2LaTeXProcs.Math := function(r, str) + local a; + Append(str, "$"); + GAPDoc2LaTeXContent(r, str); + Append(str, "$"); +end; + +## displayed maths +GAPDoc2LaTeXProcs.Display := function(r, str) + local a; + if Length(str)>0 and str[Length(str)] <> '\n' then + Add(str, '\n'); + fi; + Append(str, "\\["); + GAPDoc2LaTeXContent(r, str); + Append(str, "\\]\n"); +end; + +## emphazised text +GAPDoc2LaTeXProcs.Emph := function(r, str) + local a; + Append(str, "\\emph{"); + GAPDoc2LaTeXContent(r, str); + Append(str, "}"); +end; + +## quoted text +GAPDoc2LaTeXProcs.Q := function(r, str) + local a; + Append(str, "``"); + GAPDoc2LaTeXContent(r, str); + Append(str, "''"); +end; + +## Package names +GAPDoc2LaTeXProcs.Package := function(r, str) + local a; + Append(str, "\\textsf{"); + GAPDoc2LaTeXContent(r, str); + Append(str, "}"); +end; + +## menu items +GAPDoc2LaTeXProcs.B := function(r, str) + local a; + Append(str, "\\textsc{"); + GAPDoc2LaTeXContent(r, str); + Append(str, "}"); +end; + +## verbatim GAP session +GAPDoc2LaTeXProcs.ExampleSimple := function(r, str) + local cont, a, s; + Append(str, "\n\\begin{verbatim}"); + cont := ""; + for a in r.content do + # here we try to avoid reformatting + if IsString(a.content) then + Append(cont, a.content); + else + s := ""; + GAPDoc2LaTeX(a, s); + Append(cont, s); + fi; + od; + cont := SplitString(cont, "", "\n"); + cont := Concatenation(List(cont, a-> Concatenation(" ", a, "\n"))); + Append(str, cont); + Append(str, "\\end{verbatim}\n"); +end; +GAPDoc2LaTeXProcs.ExampleLike := function(r, str, label) + local cont, a, s; + Append(str, Concatenation("\n\\begin{Verbatim}[fontsize=\\small,", + "frame=single,label=", label, "]\n")); + cont := ""; + for a in r.content do + # here we try to avoid reformatting + if IsString(a.content) then + Append(cont, a.content); + else + s := ""; + GAPDoc2LaTeX(a, s); + Append(cont, s); + fi; + od; + cont := SplitString(cont, "", "\n"); + cont := Concatenation(List(cont, a-> Concatenation(" ", a, "\n"))); + Append(str, cont); + Append(str, "\\end{Verbatim}\n"); +end; + +## log of session and GAP code is typeset the same way as +GAPDoc2LaTeXProcs.Example := function(r, str) + GAPDoc2LaTeXProcs.ExampleLike(r, str, "Example"); +end; +GAPDoc2LaTeXProcs.Log := function(r, str) + GAPDoc2LaTeXProcs.ExampleLike(r, str, "Example"); +end; +GAPDoc2LaTeXProcs.Listing := function(r, str) + if IsBound(r.attributes.Type) then + GAPDoc2LaTeXProcs.ExampleLike(r, str, r.attributes.Type); + else + GAPDoc2LaTeXProcs.ExampleLike(r, str, ""); + fi; +end; + +## explicit labels +GAPDoc2LaTeXProcs.Label := function(r, str) + Append(str, "\\label{"); + Append(str, r.attributes.Name); + Append(str, "}"); +end; + +## citations +GAPDoc2LaTeXProcs.Cite := function(r, str) + Append(str, "\\cite"); + if IsBound(r.attributes.Where) then + Add(str, '['); + Append(str, r.attributes.Where); + Add(str, ']'); + fi; + Add(str, '{'); + Append(str, r.attributes.Key); + Add(str, '}'); +end; + +## explicit index entries +GAPDoc2LaTeXProcs.Index := function(r, str) + local s; + s := ""; + GAPDoc2LaTeXContent(r, s); + NormalizeWhitespace(s); + if IsBound(r.attributes.Key) then + s := Concatenation(r.attributes.Key, "@", s); + fi; + if IsBound(r.attributes.Subkey) then + s := Concatenation(s, "!", r.attributes.Subkey); + fi; + Append(str, "\\index{"); + Append(str, s); + Append(str, "}"); +end; + +## for argument list of functions (e.g., "a, b[[c, ], d]") +GAPDoc2LaTeXProcs.NormalizedArgList := function(argl) + local sp, res, i; + if Length(argl)=0 then + return ""; + fi; + sp := SplitString(argl, "", ", \n\r\t"); + res := sp[1]; + for i in [2..Length(sp)] do + if not sp[i][1] in "[]" then + Append(res, ", "); + fi; + Append(res, sp[i]); + od; + return res; +end; + +## this produces an implicit index entry and a label entry +GAPDoc2LaTeXProcs.LikeFunc := function(r, str, typ) + local nam, namclean, lab; + Append(str, "\\textcolor{FuncColor}{$\\Diamond$\\ \\texttt{"); + nam := r.attributes.Name; + namclean := GAPDoc2LaTeXProcs.DeleteUsBs(nam); + # we allow _ and \ here + nam := GAPDoc2LaTeXProcs.EscapeUsBs(nam); + Append(str, nam); + if IsBound(r.attributes.Arg) then + Append(str, "( "); + Append(str, GAPDoc2LaTeXProcs.NormalizedArgList(r.attributes.Arg)); + Append(str, " )"); + fi; + # possible label + if IsBound(r.attributes.Label) then + lab := Concatenation("!", r.attributes.Label); + else + lab := ""; + fi; + # index entry + Append(str, Concatenation("\\index{", namclean, "@\\texttt{", + nam, "}", lab, "}\n")); + # label (if not given, the default is the Name) + if IsBound(r.attributes.Label) then + namclean := Concatenation(namclean, ":", r.attributes.Label); + fi; + Add(GAPDoc2LaTeXProcs._currentSubsection, namclean); + Append(str, Concatenation("\\label{", namclean, "}\n")); + # some hint about the type of the variable + Append(str, "}\\hfill{\\scriptsize ("); + Append(str, typ); + Append(str, ")}}\\\\\n"); +end; + +GAPDoc2LaTeXProcs.Func := function(r, str) + GAPDoc2LaTeXProcs.LikeFunc(r, str, "function"); +end; + +GAPDoc2LaTeXProcs.Oper := function(r, str) + GAPDoc2LaTeXProcs.LikeFunc(r, str, "operation"); +end; + +GAPDoc2LaTeXProcs.Meth := function(r, str) + GAPDoc2LaTeXProcs.LikeFunc(r, str, "method"); +end; + +GAPDoc2LaTeXProcs.Filt := function(r, str) + # r.attributes.Type could be "representation", "category", ... + if IsBound(r.attributes.Type) then + GAPDoc2LaTeXProcs.LikeFunc(r, str, r.attributes.Type); + else + GAPDoc2LaTeXProcs.LikeFunc(r, str, "filter"); + fi; +end; + +GAPDoc2LaTeXProcs.Prop := function(r, str) + GAPDoc2LaTeXProcs.LikeFunc(r, str, "property"); +end; + +GAPDoc2LaTeXProcs.Attr := function(r, str) + GAPDoc2LaTeXProcs.LikeFunc(r, str, "attribute"); +end; + +GAPDoc2LaTeXProcs.Var := function(r, str) + GAPDoc2LaTeXProcs.LikeFunc(r, str, "global variable"); +end; + +GAPDoc2LaTeXProcs.Fam := function(r, str) + GAPDoc2LaTeXProcs.LikeFunc(r, str, "family"); +end; + +GAPDoc2LaTeXProcs.InfoClass := function(r, str) + GAPDoc2LaTeXProcs.LikeFunc(r, str, "info class"); +end; + +## using the HelpData(.., .., "ref") interface +GAPDoc2LaTeXProcs.ResolveExternalRef := function(bookname, label, nr) + local info, match; + info := HELP_BOOK_INFO(bookname); + match := Concatenation(HELP_GET_MATCHES(info, STRING_LOWER(label), true)); + if Length(match) < nr then + return fail; + fi; + return HELP_BOOK_HANDLER.(info.handler).HelpData(info, match[nr][2], "ref"); +end; + +GAPDoc2LaTeXProcs.Ref := function(r, str) + local funclike, int, txt, ref, lab, sectlike; + + # function like cases + funclike := [ "Func", "Oper", "Meth", "Filt", "Prop", "Attr", "Var", + "Fam", "InfoClass" ]; + int := Intersection(funclike, NamesOfComponents(r.attributes)); + if Length(int)>0 then + txt := r.attributes.(int[1]); + if IsBound(r.attributes.Label) then + lab := Concatenation(txt, ":", r.attributes.Label); + else + lab := txt; + fi; + if IsBound(r.attributes.BookName) then + ref := GAPDoc2LaTeXProcs.ResolveExternalRef( + r.attributes.BookName, lab, 1); + if ref = fail then + ref := Concatenation(" (", lab, "???)"); + else + # the search text for online help including book name + ref := Concatenation(" (\\textbf{", ref[1], "})"); + fi; + else + ref := Concatenation(" (\\ref{", GAPDoc2LaTeXProcs.DeleteUsBs(lab), "})"); + fi; + # delete ref, if pointing to current subsection + if IsBound(GAPDoc2LaTeXProcs._currentSubsection) and + lab in GAPDoc2LaTeXProcs._currentSubsection then + ref := ""; + fi; + Append(str, Concatenation("\\texttt{", GAPDoc2LaTeXProcs.EscapeUsBs(txt), + "}", ref)); + return; + fi; + + # section like cases + sectlike := ["Chap", "Sect", "Subsect", "Appendix"]; + int := Intersection(sectlike, NamesOfComponents(r.attributes)); + if Length(int)>0 then + txt := r.attributes.(int[1]); + if IsBound(r.attributes.Label) then + lab := r.attributes.Label; + else + lab := txt; + fi; + if IsBound(r.attributes.BookName) then + ref := GAPDoc2LaTeXProcs.ResolveExternalRef( + r.attributes.BookName, lab, 1); + if ref = fail then + ref := Concatenation(" (", lab, "???)"); + else + # the search text for online help including book name + ref := Concatenation(" (\\textbf{", ref[1], "})"); + fi; + elif IsBound(r.attributes.Style) and r.attributes.Style = "Text" then + ref := Concatenation("`", StripBeginEnd( + GAPDoc2LaTeXProcs._labeledSections.(lab), WHITESPACE), "'"); + else + # with sectioning references Label must be given + lab := r.attributes.(int[1]); + ref := Concatenation("\\ref{", lab, "}"); + fi; + Append(str, ref); + return; + fi; + + # neutral reference to a label + if IsBound(r.attributes.BookName) then + ref := GAPDoc2LaTeXProcs.ResolveExternalRef( + r.attributes.BookName, lab, 1); + if ref = fail then + ref := Concatenation(" (", lab, "???)"); + else + # the search text for online help including book name + ref := Concatenation(" (\\textbf{", ref[1], "})"); + fi; + else + lab := r.attributes.Label; + ref := Concatenation("\\ref{", lab, "}"); + fi; + Append(str, ref); + return; +end; + +GAPDoc2LaTeXProcs.Description := function(r, str) + GAPDoc2LaTeXContent(r, str); +end; + +GAPDoc2LaTeXProcs.ManSection := function(r, str) + local funclike, f, lab, i; + + # function like elements + funclike := [ "Func", "Oper", "Meth", "Filt", "Prop", "Attr", "Var", + "Fam", "InfoClass" ]; + + # heading comes from name of first function like element + i := 1; + while not r.content[i].name in funclike do + i := i+1; + od; + f := r.content[i]; + if IsBound(f.attributes.Label) then + lab := Concatenation(" (", f.attributes.Label, ")"); + else + lab := ""; + fi; + Append(str, Concatenation("\n\n\\subsection{\\textcolor{SecColor}{", + GAPDoc2LaTeXProcs.EscapeUsBs(f.attributes.Name), lab, "}}\n")); + # page number info for online help + Append(str, Concatenation("\\logpage{", + GAPDoc2LaTeXProcs.StringNrs(r.count{[1..3]}), "}\n")); + # to avoid references to local subsection in description: + GAPDoc2LaTeXProcs._currentSubsection := r.count{[1..3]}; + Append(str, "{"); + GAPDoc2LaTeXContent(r, str); + Append(str, "}\n"); + Unbind(GAPDoc2LaTeXProcs._currentSubsection); +end; + +GAPDoc2LaTeXProcs.Mark := function(r, str) + Append(str, "\n\\item[{"); + GAPDoc2LaTeXContent(r, str); + Append(str, "}] "); +end; + +GAPDoc2LaTeXProcs.Item := function(r, str) + Append(str, "\n\\item "); + GAPDoc2LaTeXContent(r, str); +end; + +GAPDoc2LaTeXProcs.List := function(r, str) + local item, type, a; + if "Mark" in List(r.content, a-> a.name) then + item := ""; + type := "description"; + else + item := "\n\\item "; + type := "itemize"; + fi; + Append(str, Concatenation("\n\\begin{", type, "}")); + for a in r.content do + if a.name = "Mark" then + GAPDoc2LaTeXProcs.Mark(a, str); + elif a.name = "Item" then + Append(str, item); + GAPDoc2LaTeXContent(a, str); + fi; + od; + Append(str, Concatenation("\n\\end{", type, "}\n")); +end; + +GAPDoc2LaTeXProcs.Enum := function(r, str) + Append(str, "\n\\begin{enumerate}"); + GAPDoc2LaTeXContent(r, str); + Append(str, "\n\\end{enumerate}\n"); +end; + +GAPDoc2LaTeXProcs.TheIndex := function(r, str) + # page number info for online help + Append(str, Concatenation("\\def\\indexname{Index\\logpage{", + GAPDoc2LaTeXProcs.StringNrs(r.count{[1..3]}), "}}\n")); + Append(str, "\n\n\\printindex\n\n"); +end; + + +# like PCDATA +GAPDoc2LaTeXProcs.EntityValue := GAPDoc2LaTeXProcs.PCDATA; + +GAPDoc2LaTeXProcs.Table_old := function(r, str) + local cap; + if (IsBound(r.attributes.Only) and r.attributes.Only <> "LaTeX") or + (IsBound(r.attributes.Not) and r.attributes.Not = "LaTeX") then + return; + fi; + # head part of table and tabular + Append(str, "\n\\begin{table}[h]"); + if IsBound(r.attributes.Label) then + Append(str, "\\label{"); + Append(str, r.attributes.Label); + Add(str, '}'); + fi; + Append(str, "\\begin{center}\n\\begin{tabular}{"); + Append(str, r.attributes.Align); + Add(str, '}'); + # the rows of the table + GAPDoc2LaTeXContent(r, str); + # the trailing part with caption, if given + Append(str, "\\end{tabular}\n\\end{center}\n"); + cap := Filtered(r.content, a-> a.name = "Caption"); + if Length(cap) > 0 then + GAPDoc2LaTeXProcs.Caption1(cap[1], str); + fi; + Append(str, "\\end{table}\n"); +end; + +GAPDoc2LaTeXProcs.Table := function(r, str) + local cap; + if (IsBound(r.attributes.Only) and r.attributes.Only <> "LaTeX") or + (IsBound(r.attributes.Not) and r.attributes.Not = "LaTeX") then + return; + fi; + # head part of table and tabular + if IsBound(r.attributes.Label) then + Append(str, "\\mbox{}\\label{"); + Append(str, r.attributes.Label); + Add(str, '}'); + fi; + Append(str, "\\begin{center}\n\\begin{tabular}{"); + Append(str, r.attributes.Align); + Add(str, '}'); + # the rows of the table + GAPDoc2LaTeXContent(r, str); + # the trailing part with caption, if given + Append(str, "\\end{tabular}\\\\[2mm]\n"); + cap := Filtered(r.content, a-> a.name = "Caption"); + if Length(cap) > 0 then + GAPDoc2LaTeXProcs.Caption1(cap[1], str); + fi; + Append(str, "\\end{center}\n\n"); +end; + +# do nothing, we call .Caption1 directly in .Table +GAPDoc2LaTeXProcs.Caption := function(r, str) + return; +end; + +# here the caption text is produced +GAPDoc2LaTeXProcs.Caption1_old := function(r, str) + Append(str, "\\caption{"); + GAPDoc2LaTeXContent(r, str); + Append(str, "}\n"); +end; +GAPDoc2LaTeXProcs.Caption1 := function(r, str) + Append(str, "\\textbf{Table: }"); + GAPDoc2LaTeXContent(r, str); +end; + +GAPDoc2LaTeXProcs.HorLine := function(r, str) + Append(str, "\\hline\n"); +end; + +GAPDoc2LaTeXProcs.Row := function(r, str) + local i, l; + l := Filtered(r.content, a-> a.name = "Item"); + for i in [1..Length(l)-1] do + GAPDoc2LaTeXContent(l[i], str); + Append(str, "&\n"); + od; + GAPDoc2LaTeXContent(l[Length(l)], str); + Append(str, "\\\\\n"); +end; + +GAPDoc2LaTeXProcs.Alt := function(r, str) + if (IsBound(r.attributes.Only) and r.attributes.Only = "LaTeX") or + (IsBound(r.attributes.Not) and r.attributes.Not <> "LaTeX") then + GAPDoc2LaTeXContent(r, str); + fi; +end; + +# copy a few entries with two element names +GAPDoc2LaTeXProcs.E := GAPDoc2LaTeXProcs.Emph; +GAPDoc2LaTeXProcs.Keyword := GAPDoc2LaTeXProcs.K; +GAPDoc2LaTeXProcs.Code := GAPDoc2LaTeXProcs.C; +GAPDoc2LaTeXProcs.File := GAPDoc2LaTeXProcs.F; +GAPDoc2LaTeXProcs.Button := GAPDoc2LaTeXProcs.B; +GAPDoc2LaTeXProcs.Arg := GAPDoc2LaTeXProcs.A; +GAPDoc2LaTeXProcs.Quoted := GAPDoc2LaTeXProcs.Q; +GAPDoc2LaTeXProcs.Par := GAPDoc2LaTeXProcs.P; + diff --git a/lib/GAPDoc2Text.gd b/lib/GAPDoc2Text.gd new file mode 100644 index 0000000..a852ee3 --- /dev/null +++ b/lib/GAPDoc2Text.gd @@ -0,0 +1,21 @@ +############################################################################# +## +#W GAPDoc2Text.gd GAPDoc Frank Lübeck +## +#H @(#)$Id: GAPDoc2Text.gd,v 1.1.1.1 2001-01-05 13:37:48 gap Exp $ +## +#Y Copyright (C) 2000, Frank Lübeck, Lehrstuhl D für Mathematik, +#Y RWTH Aachen +## +## The files GAPDoc2Text.g{d,i} contain a conversion program which +## produces from a GAPDoc XML-document a text version for viewing the +## document on screen (GAP online help). +## + +DeclareGlobalVariable("GAPDoc2TextProcs"); + +DeclareGlobalFunction("GAPDoc2Text"); + +DeclareGlobalFunction("GAPDoc2TextPrintTextFiles"); + + diff --git a/lib/GAPDoc2Text.gi b/lib/GAPDoc2Text.gi new file mode 100644 index 0000000..3a14be3 --- /dev/null +++ b/lib/GAPDoc2Text.gi @@ -0,0 +1,1544 @@ +############################################################################# +## +#W GAPDoc2Text.gi GAPDoc Frank Lübeck +## +#H @(#)$Id: GAPDoc2Text.gi,v 1.1.1.1 2001-01-05 13:37:49 gap Exp $ +## +#Y Copyright (C) 2000, Frank Lübeck, Lehrstuhl D für Mathematik, +#Y RWTH Aachen +## +## The files GAPDoc2Text.g{d,i} contain a conversion program which +## produces from a GAPDoc XML-document a text version for viewing the +## document on screen (GAP online help). +## + +## +## We add a link to the document root to all recursively called functions +## by adding .root entries. The toc-, index- and bib-information is +## collected in the root. +## +## The set of elements is partitioned into two subsets - those which +## contain whole paragraphs and those which don't. +## +## The handler of a paragraph containing element (see +## GAPDoc2TextProcs.ParEls below) gets a list as argument to which it adds +## entries pairwise: the first of such a pair is the paragraph counter +## (like [3,2,1,5] meaning Chap.3, Sec.2, Subsec.1, Par.5) and the second +## is the formatted text of this paragraph. +## +## Some handlers of paragraph containing elements do the formatting +## themselves (e.g., .List), the others are handled in the main recursion +## function `GAPDoc2TextContent'. +## +## We produce a full version of the document in text format, including +## title page, abstract and other front matter, table of contents, +## bibliography (via BibTeX-data files) and index. Highlighting with +## colors for ANSI color sequence capable terminals is included. +## +## In this text converter we also produce the manual.six data. For +## getting page numbers in .dvi and .pdf versions, the LaTeX-converter +## and LaTeX must be run first. This produces a .pnr file. +## + +InstallValue(GAPDoc2TextProcs, rec()); + +## Some text attributes for display on ANSI terminals +GAPDoc2TextProcs.TextAttr := rec(); +GAPDoc2TextProcs.TextAttr.reset := TextAttr.reset; +GAPDoc2TextProcs.TextAttr.Heading := Concatenation(TextAttr.bold, + TextAttr.underscore, TextAttr.1); + +GAPDoc2TextProcs.TextAttr.Func := Concatenation(TextAttr.bold, TextAttr.4); +GAPDoc2TextProcs.TextAttr.Arg := Concatenation(TextAttr.normal, TextAttr.4); +GAPDoc2TextProcs.TextAttr.Example := Concatenation(TextAttr.normal, TextAttr.5); +GAPDoc2TextProcs.TextAttr.Package := TextAttr.bold; +GAPDoc2TextProcs.TextAttr.URL := TextAttr.4; +GAPDoc2TextProcs.TextAttr.Mark := Concatenation(TextAttr.bold, TextAttr.3); + +GAPDoc2TextProcs.TextAttr.K := Concatenation(TextAttr.normal, TextAttr.2); +GAPDoc2TextProcs.TextAttr.C := Concatenation(TextAttr.normal, TextAttr.2); +GAPDoc2TextProcs.TextAttr.F := Concatenation(TextAttr.bold, ""); +GAPDoc2TextProcs.TextAttr.B := Concatenation(TextAttr.bold, TextAttr.b6); +GAPDoc2TextProcs.TextAttr.Emph := Concatenation(TextAttr.normal, TextAttr.6); + +GAPDoc2TextProcs.TextAttr.Ref := TextAttr.bold; + +GAPDoc2TextProcs.ParEls := +[ "Display", "Example", "Log", "Listing", "List", "Enum", "Item", "Table", + "TitlePage", "Abstract", "Copyright", "Acknowledgements", "Colophon", + "TableOfContents", "Bibliography", "TheIndex", "Subsection", "ManSection", + "Description", "Section", "Chapter", "Appendix", "Body", "Book", + "WHOLEDOCUMENT", "Attr", "Fam", "Filt", "Func", "Heading", "InfoClass", + "Meth", "Oper", "Prop", "Var" ]; + +## arg: a list of strings +## nothing for now, may be enhanced and documented later. +SetGapDocTxtOptions := function(arg) + local gdp; + gdp := GAPDoc2TextProcs; + return; +end; + +## here we collect paragraphs to whole chapters and remember line numbers +## of subsections for the .six information +GAPDoc2TextProcs.PutFilesTogether := function(l, six) + local countandshift, concat, files, n, i, p, a; + + # count number of lines in txt and add 2 spaces in the beginning of + # each line, returns [newtxt, nrlines] + countandshift := function(txt) + local new, ind, n, p, pos; + # sometimes there may occur paragraph elements inside text elements + # (like list in list item) - we concatenate the text here. + concat := function(txt) + local new, a; + if not IsString(txt) then + new := ""; + for a in txt do + if IsChar(a) then + Add(new, a); + elif IsList(a) then + Append(new, concat(a)); + fi; + od; + else + new := txt; + fi; + ConvertToStringRep(new); + return new; + end; + txt := concat(txt); + new := " "; + ind := " "; + n := 0; + p := 0; + pos := Position(txt, '\n'); + while pos <> fail do + Append(new, txt{[p+1..pos]}); + if pos < Length(txt) then + Append(new, ind); + fi; + n := n+1; + p := pos; + pos := Position(txt, '\n', p); + od; + if p < Length(txt) then + Append(new, txt{[p+1..Length(txt)]}); + fi; + return [new, n]; + end; + + # putting the paragraphs together (one string (file) for each chapter) + files := rec(); + for n in Set(List([2,4..Length(l)], i-> l[i-1][1])) do + files.(n) := rec(text := "", ssnr := [], linenr := [], len := 0); + od; + for i in [2,4..Length(l)] do + n := files.(l[i-1][1]); + p := countandshift(l[i]); + if Length(n.ssnr)=0 or l[i-1]{[1..3]} <> n.ssnr[Length(n.ssnr)] then + Add(n.ssnr, l[i-1]{[1..3]}); + Add(n.linenr, n.len+1); + fi; + Append(n.text, p[1]); + n.len := n.len + p[2]; + od; + + # add line numbers to six information + for a in six do + p := Position(files.(a[3][1]).ssnr, a[3]); + if p = fail then + Error("don't find subsection ", a[3], " in text documention"); + fi; + Add(a, files.(a[3][1]).linenr[p]); + od; + + return files; +end; + +## <#GAPDoc Label="GAPDoc2Text"> +## +## +## +## The argument tree for this function is a tree +## describing a &GAPDoc; XML document as returned by (probably also checked with ). This function produces a text +## version of the document which can be used with &GAP;'s online +## help (with the "screen" viewer, see ). It includes title page, bibliography +## and index. The bibliography is made from &BibTeX; databases. +## Their location must be given with the argument bibpath (as +## string or directory object).

          +## +## The output is a record with one component for each chapter +## (with names "0", "1", ..., "Bib" and +## "Ind"). Each such component is also a record with +## components +## +## +## text +## the text of the whole chapter as a string +## ssnr +## list of subsection numbers in this chapter (like [3, 2, +## 1] for chapter 3, section 2, subsection 1) +## +## linenr +## corresponding list of line numbers where the subsections +## start +## len +## number of lines of this chapter +## +## +## The result can be written into files with the command .

          +## +## As a side effect this function also produces the +## manual.six information which is used for searching in +## &GAP;'s online help. This is stored in tree.six +## and can be printed into a manual.six file with +## (preferred after producing a +## &LaTeX; version of the document as well and adding the +## page number information to tree.six, see and ).

          +## +## The text produced by this function contains color markup via +## ANSI escape sequences, see . To view +## the colored text you need a terminal which interprets these +## escape sequences correctly and you have to set the variable +## ANSI&uscore;COLORS to true (a good place for doing +## this is your .gaprc file).

          +## +## With the optional argument width a different length of the +## output text lines can be choosen. The default is 76 and all lines +## in the resulting text start with two spaces. This looks good on a +## terminal with a standard width of 80 characters and you probably +## don't want to use this argument. +## +## +## <#/GAPDoc> +## +# the basic call, used recursively with a result r from GetElement +# and a string str or list l to which the output should be appended +# arg: r[, linelength] (then a list is returned, only for whole document) +# or: r, str[, linelength] (then the output is appended to string or +# list str) +InstallGlobalFunction(GAPDoc2Text, function(arg) + local r, str, linelength, name; + r := arg[1]; + if Length(arg)=2 and (IsList(arg[2]) or (r.name = "WHOLEDOCUMENT" and + IsDirectory(arg[2]))) then + str := arg[2]; + linelength := 76; + elif Length(arg)=2 and IsInt(arg[2]) then + linelength := arg[2]; + str := ""; + elif Length(arg)=3 then + str := arg[2]; + linelength := arg[3]; + else + str := ""; + linelength := 76; + fi; + + if r.name = "WHOLEDOCUMENT" then + r.linelength := linelength; + r.indent := ""; + if IsDirectory(str) then + r.bibpath := str; + else + r.bibpath := Directory(str); + fi; + str := ""; + fi; + + name := r.name; + if not IsBound(GAPDoc2TextProcs.(name)) then + Print("WARNING: Don't know how to process element ", name, + " ---- ignored\n"); + else + GAPDoc2TextProcs.(r.name)(r, str); + fi; + + if r.name = "WHOLEDOCUMENT" then + # put final record together and return it, also add line numbers to + # .six entries + return GAPDoc2TextProcs.PutFilesTogether(str, r.six); + fi; + + return str; +end); + +## recursion through the tree and formatting paragraphs +BindGlobal("GAPDoc2TextContent", function(r, l) + local par, cont, count, s, a; + + # utility: append counter and formatted paragraph to l + par := function(s) + if Length(s)>0 then + s := FormatParagraph(s, r.root.linelength - Length(r.root.indent), + "both", [r.root.indent, ""]); + if Length(s)>0 then + GAPDoc2TextProcs.P(0, s); + Add(l, count); + Add(l, s); + fi; + fi; + end; + + # if not containing paragraphs, then l is string to append to + if not r.name in GAPDoc2TextProcs.ParEls then + for a in r.content do + GAPDoc2Text(a, l); + od; + return; + fi; + + # otherwise we have to collect text and paragraphs + cont := r.content; + count := r.count; + s := ""; + for a in cont do + if a.count <> count then + par(s); + count := a.count; + s := ""; + fi; + if a.name in GAPDoc2TextProcs.ParEls then + # recursively collect paragraphs + GAPDoc2Text(a, l); + else + # collect text for current paragraph + GAPDoc2Text(a, s); + fi; + od; + if Length(s)>0 then + par(s); + fi; +end); + + +## write head and foot of Txt file. +GAPDoc2TextProcs.WHOLEDOCUMENT := function(r, par) + local i, pi, t, el, a, str, bib, keys, need, labels, + diff, text, stream; + + ## add paragraph numbers to all nodes of the document + AddParagraphNumbersGapDocTree(r); + + ## add a link .root to the root of the document to all nodes + ## (then we can collect information about indexing and so on + ## there) + AddRootParseTree(r); + r.index := []; + r.toc := ""; + r.labels := rec(); + r.labeltexts := rec(); + r.bibkeys := []; + # and the .six information for the online help index + # will contain pairs [string, [chap, sect, subsect]] + r.six := []; + + ## checking for processing instructions before the book starts + ## example: + i := 1; + pi := rec(); + while not r.content[i].name = "Book" do + if r.content[i].name = "XMLPI" then + t := r.content[i].content; + if Length(t) > 3 and t{[1..4]} = "Txt " then + el := GetSTag(Concatenation("<", t, ">"), 2); + for a in NamesOfComponents(el.attributes) do + pi.(a) := el.attributes.(a); + od; + fi; + fi; + i := i+1; + od; + + ## Now the actual work starts, we give the processing instructions found + ## so far to the Book handler. + ## We call the Book handler twice and produce index, bibliography, toc + ## in between. + Print("#I first run, collecting cross references, index, toc, bib ", + "and so on . . .\n"); + GAPDoc2TextProcs.Book(r.content[i], [], pi); + + # now the toc is ready + Print("#I table of contents complete.\n"); + r.toctext := r.toc; + + # .index has entries of form [sorttext, subtext, numbertext, entrytext] + Print("#I producing the index . . .\n"); + Sort(r.index); + str := ""; + for a in r.index do + Append(str, a[4]); + if Length(a[2])>0 then + Append(str, ", "); + Append(str, a[2]); + fi; + Append(str, " "); + Append(str, a[3]); + Add(str, '\n'); + od; + r.indextext := str; + + if Length(r.bibkeys)>0 then + Print("#I reading bibliography data files . . . \n"); + bib := CallFuncList(ParseBibFiles, List(SplitString( + r.bibdata, "", ", \t\t\n"), f-> Filename(r.bibpath, f))); + keys := Immutable(Set(r.bibkeys)); + need := []; + for a in bib[1] do + if a.Label in keys then + NormalizeNameAndKey(a); + Add(need, a); + fi; + od; + SortParallel(List(need, a-> a.keylong), need); + keys := List(need, a-> a.Label); + labels := List(need, a-> a.key); + diff := Difference(r.bibkeys, keys); + if Length(diff) > 0 then + Print("#W could not find references: ", diff, "\n"); + fi; + r.bibkeys := keys; + r.biblabels := labels; + Print("#I writing bibliography . . .\n"); + text := ""; + stream := OutputTextString(text, false); + PrintTo1(stream, function() + for a in need do PrintBibAsText(a, true); od; + end); + CloseStream(stream); + r.bibtext := text; + fi; + + # second run + r.six := []; + r.index := []; + Print("#I second run through document . . .\n"); + GAPDoc2TextProcs.Book(r.content[i], par, pi); + # adding .six entries from index + for a in r.index do + Add(r.six, [Concatenation(a[4], " ", a[2]), a[3], a[5]]); + od; + + ## remove the links to the root ??? +## RemoveRootParseTree(r); +end; + +## comments and processing instructions are in general ignored +GAPDoc2TextProcs.XMLPI := function(r, str) + return; +end; +GAPDoc2TextProcs.XMLCOMMENT := function(r, str) + return; +end; + +# just process content ??? putting together here +GAPDoc2TextProcs.Book := function(r, par, pi) + GAPDoc2TextContent(r, par); +end; + +## Body is sectioning element +GAPDoc2TextProcs.Body := GAPDoc2TextContent; + +## the title page, the most complicated looking function +GAPDoc2TextProcs.TitlePage := function(r, par) + local strn, l, s, a, aa, cont, ss; + + strn := "\n\n"; + + # the .six entry + Add(r.root.six, ["Title page", + GAPDoc2TextProcs.SectionNumber(r.count, "Subsection"), + r.count{[1..3]}]); + + # title + l := Filtered(r.content, a-> a.name = "Title"); + s := ""; + GAPDoc2TextContent(l[1], s); + s := FormatParagraph(s, r.root.linelength, "center", + [GAPDoc2TextProcs.TextAttr.Heading, + GAPDoc2TextProcs.TextAttr.reset]); + Append(strn, s); + Append(strn, "\n\n"); + + # subtitle + l := Filtered(r.content, a-> a.name = "Subtitle"); + if Length(l)>0 then + s := ""; + GAPDoc2TextContent(l[1], s); + s := FormatParagraph(s, r.root.linelength, "center", + [GAPDoc2TextProcs.TextAttr.Heading, + GAPDoc2TextProcs.TextAttr.reset]); + Append(strn, s); + Append(strn, "\n\n"); + fi; + + # version + l := Filtered(r.content, a-> a.name = "Version"); + if Length(l)>0 then + s := ""; + GAPDoc2TextContent(l[1], s); + while Length(s)>0 and s[Length(s)] in WHITESPACE do + Unbind(s[Length(s)]); + od; + s := FormatParagraph(s, r.root.linelength, "center"); + Append(strn, s); + Append(strn, "\n\n"); + fi; + + # date + l := Filtered(r.content, a-> a.name = "Date"); + if Length(l)>0 then + s := ""; + GAPDoc2TextContent(l[1], s); + s := FormatParagraph(s, r.root.linelength, "center"); + Append(strn, s); + Append(strn, "\n\n"); + fi; + + # author name(s) + l := Filtered(r.content, a-> a.name = "Author"); + for a in l do + s := ""; + aa := ShallowCopy(a); + aa.content := Filtered(a.content, b-> not b.name in ["Email", "Homepage"]); + GAPDoc2TextContent(aa, s); + s := FormatParagraph(s, r.root.linelength, "center"); + Append(strn, s); + Append(strn, "\n"); + od; + Append(strn, "\n\n"); + + # email and WWW-homepage of author(s), if given + for a in l do + cont := List(a.content, b-> b.name); + if "Email" in cont or "Homepage" in cont then + s := ""; + aa := ShallowCopy(a); + aa.content := Filtered(a.content, b-> not b.name in + ["Email", "Homepage"]); + GAPDoc2TextContent(aa, s); + NormalizeWhitespace(s); + Append(strn, s); + + if "Email" in cont then + Append(strn, " --- Email: "); + GAPDoc2Text(a.content[Position(cont, "Email")], strn); + fi; + if "Homepage" in cont then + Append(strn, "\n"); + Append(strn, " --- Homepage: "); + GAPDoc2Text(a.content[Position(cont, "Homepage")], strn); + fi; + Append(strn, "\n"); + fi; + od; + Append(strn, "\n-------------------------------------------------------\n"); + + Add(par, r.count); + Add(par, strn); + + # abstract, copyright page, acknowledgements, colophon + for ss in ["Abstract", "Copyright", "Acknowledgements", "Colophon" ] do + l := Filtered(r.content, a-> a.name = ss); + if Length(l)>0 then + # the .six entry + Add(r.root.six, [ss, + GAPDoc2TextProcs.SectionNumber(l[1].count, "Subsection"), + l[1].count{[1..3]}]); + Add(par, l[1].count); + Add(par, Concatenation(GAPDoc2TextProcs.TextAttr.Heading, ss, + GAPDoc2TextProcs.TextAttr.reset, "\n")); + GAPDoc2TextContent(l[1], par); + Append(par[Length(par)], + "\n-------------------------------------------------------\n"); + fi; + od; +end; + +## these produce text for an URL +## ~ and # characters are correctly escaped +## arg: r, str[, pre] +GAPDoc2TextProcs.URL := function(arg) + local r, str, pre, s, p; + r := arg[1]; + str := arg[2]; + if Length(arg)>2 then + pre := arg[3]; + else + pre := ""; + fi; + + s := ""; + GAPDoc2TextContent(r, s); + Append(str, Concatenation(GAPDoc2TextProcs.TextAttr.URL, + pre, s, GAPDoc2TextProcs.TextAttr.reset)); +end; + +GAPDoc2TextProcs.Homepage := GAPDoc2TextProcs.URL; + +GAPDoc2TextProcs.Email := function(r, str) + # we add the `mailto://' phrase + GAPDoc2TextProcs.URL(r, str, "mailto:"); +end; + +## utility: generate a chapter or (sub)section-number string +GAPDoc2TextProcs.SectionNumber := function(count, sect) + local res; + if IsString(count[1]) or count[1]>0 then + res := Concatenation(String(count[1]), "."); + else + res := ""; + fi; + if sect="Chapter" then + return res; + fi; + if count[2]>0 then + Append(res, String(count[2])); + fi; + if sect="Section" then + return res; + fi; + if count[3]>0 then + Append(res, Concatenation("-", String(count[3]))); + fi; + if sect="Par" then + Append(res, Concatenation(".", String(count[4]))); + return res; + fi; + # default is SubSection or ManSection number + return res; +end; + + +## the sectioning commands are just translated and labels are +## generated, if given as attribute +GAPDoc2TextProcs.ChapSect := function(r, par, sect) + local num, posh, s, ind, strn; + + # section number as string + num := GAPDoc2TextProcs.SectionNumber(r.count, sect); + + # the heading + posh := Position(List(r.content, a-> a.name), "Heading"); + if posh <> fail then + s := ""; + # first the .six entry + GAPDoc2TextProcs.Heading1(r.content[posh], s); + Add(r.root.six, [NormalizedWhitespace(FormatParagraph(s, + r.root.linelength, [GAPDoc2TextProcs.TextAttr.Heading, + GAPDoc2TextProcs.TextAttr.reset])), num, r.count{[1..3]}]); + + # label entry, if present + if IsBound(r.attributes.Label) then + r.root.labels.(r.attributes.Label) := num; + r.root.labeltexts.(r.attributes.Label) := s; + fi; + + # the heading text + s := Concatenation(num, " ", s); + Add(par, r.count); + # here we assume that r.indent = "" + Add(par, Concatenation("\n", FormatParagraph(s, + r.root.linelength, [GAPDoc2TextProcs.TextAttr.Heading, + GAPDoc2TextProcs.TextAttr.reset]), "\n")); + + # table of contents entry + if sect="Section" then + ind := " "; + elif sect="Subsection" then + ind := " "; + else + ind := ""; + fi; + Append(r.root.toc, FormatParagraph(s, + r.root.linelength-Length(ind), "left", [ind, ""])); + fi; + + # the actual content + GAPDoc2TextContent(r, par); +end; + +## this really produces the content of the heading +GAPDoc2TextProcs.Heading1 := function(r, str) + local a; + a := []; + GAPDoc2TextContent(r, a); + Append(str, a[2]); +end; +## and this ignores the heading (for simpler recursion) +GAPDoc2TextProcs.Heading := function(r, str) +end; + +GAPDoc2TextProcs.Chapter := function(r, par) + GAPDoc2TextProcs.ChapSect(r, par, "Chapter"); +end; + +GAPDoc2TextProcs.Appendix := function(r, par) + GAPDoc2TextProcs.ChapSect(r, par, "Appendix"); +end; + +GAPDoc2TextProcs.Section := function(r, par) + GAPDoc2TextProcs.ChapSect(r, par, "Section"); +end; + +GAPDoc2TextProcs.Subsection := function(r, par) + GAPDoc2TextProcs.ChapSect(r, par, "Subsection"); +end; + +## table of contents, just puts "TOC" in first run +GAPDoc2TextProcs.TableOfContents := function(r, par) + # the .six entry + Add(r.root.six, ["Table of contents", + GAPDoc2TextProcs.SectionNumber(r.count, "Subsection"), + r.count{[1..3]}]); + + Add(par, r.count); + if IsBound(r.root.toctext) then + Add(par, Concatenation("\n\n", GAPDoc2TextProcs.TextAttr.Heading, + "Content", GAPDoc2TextProcs.TextAttr.reset, "\n\n", r.root.toctext, + "\n\n-------------------------------------------------------\n")); + else + Add(par,"TOC\n-----------\n"); + fi; +end; + +## bibliography, just "BIB" in first run, store databases in root +GAPDoc2TextProcs.Bibliography := function(r, par) + local s; + # .six entries + s := GAPDoc2TextProcs.SectionNumber(r.count, "Chapter"); + Add(r.root.six, ["Bibliography", s, r.count{[1..3]}]); + Add(r.root.six, ["References", s, r.count{[1..3]}]); + + r.root.bibdata := r.attributes.Databases; + Add(par, r.count); + if IsBound(r.root.bibtext) then + Add(par, Concatenation("\n\n", GAPDoc2TextProcs.TextAttr.Heading, + "References", GAPDoc2TextProcs.TextAttr.reset, "\n\n", r.root.bibtext, + "\n\n-------------------------------------------------------\n")); + else + Add(par,"BIB\n-----------\n"); + fi; +end; + +## We filter TeX commands and substitute \& -> & and so on, ~ -> NoBrkSpace +GAPDoc2TextProcs.PCDATAFILTERoutdated := function(r, str) + local cont, lc, i, s, j; + cont := r.content; + lc := Length(cont); + i := 1; + s := ""; + while i <= lc do + if not cont[i] in "\\~" then + j := i+1; + while j <= lc and not cont[j] in "\\~" do + j := j+1; + od; + Append(s, cont{[i..j-1]}); + i := j; + elif cont[i] = '\\' then + if i=lc then + # trailing \ is removed + break; + elif cont[i+1] in LETTERS then + # TeX command is removed + j := i+2; + while j <= lc and cont[j] in LETTERS do + j := j+1; + od; + i := j; + else + # next character is considered to be escaped by the \ + # only the \ itself is removed + Add(s, cont[i+1]); + i := i+2; + fi; + elif cont[i] = '~' then + # character 160 is a non-breakable space in iso-8859-1 + Add(s, CHAR_INT(160)); + i := i+1; + fi; + od; + Append(str, s); +end; + +## inside element we don't want this filtering +GAPDoc2TextProcs.PCDATANOFILTER := function(r, str) + Append(str, r.content); +end; + +## default is with filter ???changed??? +GAPDoc2TextProcs.PCDATAFILTER := GAPDoc2TextProcs.PCDATANOFILTER; +GAPDoc2TextProcs.PCDATA := GAPDoc2TextProcs.PCDATAFILTER; + +## end of paragraph (end with double newline) +GAPDoc2TextProcs.P := function(r, str) + local l, i; + l := Length(str); + if l>0 and str[l] <> '\n' then + Append(str, "\n\n"); + elif l>1 and str[l-1] <> '\n' then + Add(str, '\n'); + else + # remove too many line breaks + i := l-2; + while i>0 and str[i] = '\n' do + Unbind(str[i+2]); + i := i-1; + od; + fi; +end; + +## wrapping text attributes +GAPDoc2TextProcs.WrapAttr := function(r, str, a) + local s; + s := ""; + GAPDoc2TextContent(r, s); + Append(str, Concatenation(GAPDoc2TextProcs.TextAttr.(a), s, + GAPDoc2TextProcs.TextAttr.reset)); +end; + +## GAP keywords +GAPDoc2TextProcs.K := function(r, str) + GAPDoc2TextProcs.WrapAttr(r, str, "K"); +end; + +## verbatim GAP code +GAPDoc2TextProcs.C := function(r, str) + GAPDoc2TextProcs.WrapAttr(r, str, "C"); +end; + +## file names +GAPDoc2TextProcs.F := function(r, str) + GAPDoc2TextProcs.WrapAttr(r, str, "F"); +end; + +## argument names (same as Arg) +GAPDoc2TextProcs.A := function(r, str) + GAPDoc2TextProcs.WrapAttr(r, str, "Arg"); +end; + +## simple maths, here we try to substitute TeX command to something which +## looks ok in text mode +GAPDoc2TextProcs.M := function(r, str) + local subs, s, ss, ls, i, j, wd; + # We do the following substitutions (for other TeX commands only the + # backslash is removed. Furthermore {} are changed to (). + subs := rec( + ldots := "...", + mid := "|", + left := "", + right := "", + mathbb := "", + cdot := "*", + geq := ">=", + leq := "<=", + pmod := "mod", + equiv := "=", + rightarrow := "->", + to := "->", + longrightarrow := "-->", + mapsto := "->", # or |-> ???? + leftarrow := "<-", + langle := "<", + rangle := ">" + ); + s := ""; + # no filtering here + GAPDoc2TextProcs.PCDATA := GAPDoc2TextProcs.PCDATANOFILTER; + GAPDoc2TextContent(r, s); + GAPDoc2TextProcs.PCDATA := GAPDoc2TextProcs.PCDATAFILTER; + ss := ""; + ls := Length(s); + i := 1; + while i<=ls do + if s[i] = '\\' and i ls then + ss := s; + else + Append(ss, s{[i..j-1]}); + fi; + i := j; + fi; + od; + Append(str, ss); +#Print("\n------------\n",s,"\n",ss,"\n"); +end; + +## in Txt this is shown in TeX format +GAPDoc2TextProcs.Math := function(r, str) + Add(str, '$'); + GAPDoc2TextProcs.PCDATA := GAPDoc2TextProcs.PCDATANOFILTER; + GAPDoc2TextContent(r, str); + GAPDoc2TextProcs.PCDATA := GAPDoc2TextProcs.PCDATAFILTER; + Add(str, '$'); +end; + +## displayed maths (also in TeX format, but printed as paragraph enclosed +## by "\[" and "\]") +GAPDoc2TextProcs.Display := function(r, par) + local s; + s := ""; + GAPDoc2TextProcs.PCDATA := GAPDoc2TextProcs.PCDATANOFILTER; + GAPDoc2TextContent(r, s); + GAPDoc2TextProcs.PCDATA := GAPDoc2TextProcs.PCDATAFILTER; + s := Concatenation(Filtered(s, IsString)); +# s := StripBeginEnd(s, "\n"); +# s := Concatenation("\\[\n", s, "\n\\]\n\n"); + s := FormatParagraph(s, r.root.linelength - 10 - Length(r.root.indent), + "left", [Concatenation(r.root.indent, " "), ""]); + s := Concatenation("\\[\n", s, "\\]\n\n"); + Add(par, r.count); + Add(par, s); +end; + +## emphazised text +GAPDoc2TextProcs.Emph := function(r, str) + GAPDoc2TextProcs.WrapAttr(r, str, "Emph"); +end; + +## quoted text +GAPDoc2TextProcs.Q := function(r, str) + Append(str, "`"); + GAPDoc2TextContent(r, str); + Append(str, "'"); +end; + +## Package names +GAPDoc2TextProcs.Package := function(r, str) + GAPDoc2TextProcs.WrapAttr(r, str, "Package"); +end; + +## menu items +GAPDoc2TextProcs.B := function(r, str) + GAPDoc2TextProcs.WrapAttr(r, str, "B"); +end; + +GAPDoc2TextProcs.ExampleLike := function(r, par, label) + local str, cont, a, s, len, l1; + len := r.root.linelength - Length(r.root.indent) - 10; + str := Concatenation(r.root.indent, GAPDoc2TextProcs.TextAttr.Example); + if Length(label) = 0 then + Append(str, RepeatedString('-', len)); + else + l1 := RepeatedString('-', Int((len - 4 - Length(label)) / 2)); + Append(str, Concatenation(l1, " ", label, " ", l1)); + while Length(str) < len + Length(GAPDoc2TextProcs.TextAttr.Example) do + Add(str, '-'); + od; + fi; + cont := ""; + for a in r.content do + # here we try to avoid reformatting + if IsString(a.content) then + Append(cont, a.content); + else + s := ""; + GAPDoc2Text(a, s); + Append(cont, s); + fi; + od; + cont := SplitString(cont, "\n", ""); + cont := Concatenation(List(cont, a-> Concatenation(r.root.indent, + " ", a, "\n"))); + Append(str, cont); + Append(str, Concatenation(r.root.indent, RepeatedString('-', len), + GAPDoc2TextProcs.TextAttr.reset, "\n\n")); + Add(par, r.count); + Add(par, str); +end; + +## log of session and GAP code is typeset the same way as +GAPDoc2TextProcs.Example := function(r, par) + GAPDoc2TextProcs.ExampleLike(r, par, "Example"); +end; +GAPDoc2TextProcs.Log := function(r, par) + GAPDoc2TextProcs.ExampleLike(r, par, "Log"); +end; +GAPDoc2TextProcs.Listing := function(r, par) + if IsBound(r.attributes.Type) then + GAPDoc2TextProcs.ExampleLike(r, par, r.attributes.Type); + else + GAPDoc2TextProcs.ExampleLike(r, par, ""); + fi; +end; + +## explicit labels +GAPDoc2TextProcs.Label := function(r, str) + r.root.labels.(r.attributes.Name) := + GAPDoc2TextProcs.SectionNumber(r.count, "Subsection"); +end; + +## citations +GAPDoc2TextProcs.Cite := function(r, str) + local key, pos; + key := r.attributes.Key; + pos := Position(r.root.bibkeys, key); + if pos = fail then + Add(r.root.bibkeys, key); + Append(str, Concatenation("[?", key, "?]")); + elif not IsBound(r.root.biblabels) then + Append(str, Concatenation("[?", key, "?]")); + else + Append(str, Concatenation("[", r.root.biblabels[pos])); + if IsBound(r.attributes.Where) then + Append(str, ", "); + Append(str, r.attributes.Where); + fi; + Add(str, ']'); + fi; +end; + +## explicit index entries +GAPDoc2TextProcs.Index := function(r, str) + local s, entry; + + s := ""; + GAPDoc2TextContent(r, s); + NormalizeWhitespace(s); + if IsBound(r.attributes.Key) then + entry := [STRING_LOWER(r.attributes.Key)]; + else + entry := [STRING_LOWER(StripEscapeSequences(s))]; + fi; + if IsBound(r.attributes.Subkey) then + Add(entry, r.attributes.Subkey); + else + Add(entry, ""); + fi; + Add(entry, GAPDoc2TextProcs.SectionNumber(r.count, "Subsection")); + Add(entry, s); + Add(entry, r.count{[1..3]}); + Add(r.root.index, entry); +end; + +## for argument list of functions (e.g., "a, b[[c, ], d]") +GAPDoc2TextProcs.NormalizedArgList := function(argl) + local sp, res, i; + if Length(argl)=0 then + return ""; + fi; + sp := SplitString(argl, "", ", \n\r\t"); + res := sp[1]; + for i in [2..Length(sp)] do + if not sp[i][1] in "[]" then + Append(res, ", "); + fi; + Append(res, sp[i]); + od; + return res; +end; + +## this produces an implicit index entry and a label entry +GAPDoc2TextProcs.LikeFunc := function(r, par, typ) + local str, s, name, lab, i; + s := Concatenation(GAPDoc2TextProcs.TextAttr.Func, "> ", r.attributes.Name); + if IsBound(r.attributes.Arg) then + Append(s, "( "); + Append(s, GAPDoc2TextProcs.TextAttr.reset); + Append(s, GAPDoc2TextProcs.TextAttr.Arg); + Append(s, GAPDoc2TextProcs.NormalizedArgList(r.attributes.Arg)); + Append(s, GAPDoc2TextProcs.TextAttr.reset); + Append(s, GAPDoc2TextProcs.TextAttr.Func); + Append(s, " ) "); + fi; + # label (if not given, the default is the Name) + if IsBound(r.attributes.Label) then + lab := Concatenation(" (", r.attributes.Label, ")"); + else + lab := ""; + fi; + GAPDoc2TextProcs.Label(rec(count := r.count, attributes := rec(Name + := Concatenation(r.attributes.Name, lab)), root := r.root), par); + # index entry + name := r.attributes.Name; + Add(r.root.index, [STRING_LOWER(name), "", + GAPDoc2TextProcs.SectionNumber(r.count, "Subsection"), + Concatenation(GAPDoc2TextProcs.TextAttr.Func, name, + GAPDoc2TextProcs.TextAttr.reset, lab), + r.count{[1..3]}]); + # some hint about the type of the variable + for i in [Length(StripEscapeSequences(s))+1 .. + r.root.linelength - Length(typ)] do + Add(s, '_'); + od; + Append(s, Concatenation(GAPDoc2TextProcs.TextAttr.reset, typ, "\n")); + Add(par, r.count); + Add(par, s); +end; + +GAPDoc2TextProcs.Func := function(r, str) + GAPDoc2TextProcs.LikeFunc(r, str, "function"); +end; + +GAPDoc2TextProcs.Oper := function(r, str) + GAPDoc2TextProcs.LikeFunc(r, str, "operation"); +end; + +GAPDoc2TextProcs.Meth := function(r, str) + GAPDoc2TextProcs.LikeFunc(r, str, "method"); +end; + +GAPDoc2TextProcs.Filt := function(r, str) + # r.attributes.Type could be "representation", "category", ... + if IsBound(r.attributes.Type) then + GAPDoc2TextProcs.LikeFunc(r, str, r.attributes.Type); + else + GAPDoc2TextProcs.LikeFunc(r, str, "filter"); + fi; +end; + +GAPDoc2TextProcs.Prop := function(r, str) + GAPDoc2TextProcs.LikeFunc(r, str, "property"); +end; + +GAPDoc2TextProcs.Attr := function(r, str) + GAPDoc2TextProcs.LikeFunc(r, str, "attribute"); +end; + +GAPDoc2TextProcs.Var := function(r, str) + GAPDoc2TextProcs.LikeFunc(r, str, "global variable"); +end; + +GAPDoc2TextProcs.Fam := function(r, str) + GAPDoc2TextProcs.LikeFunc(r, str, "family"); +end; + +GAPDoc2TextProcs.InfoClass := function(r, str) + GAPDoc2TextProcs.LikeFunc(r, str, "info class"); +end; + +## using the HelpData(.., .., "ref") interface +GAPDoc2TextProcs.ResolveExternalRef := function(bookname, label, nr) + local info, match; + info := HELP_BOOK_INFO(bookname); + match := Concatenation(HELP_GET_MATCHES(info, STRING_LOWER(label), true)); + if Length(match) < nr then + return fail; + fi; + return HELP_BOOK_HANDLER.(info.handler).HelpData(info, match[nr][2], "ref"); +end; + +GAPDoc2TextProcs.Ref := function(r, str) + local funclike, int, txt, ref, lab, sectlike; + + # function like cases + funclike := [ "Func", "Oper", "Meth", "Filt", "Prop", "Attr", "Var", + "Fam", "InfoClass" ]; + int := Intersection(funclike, NamesOfComponents(r.attributes)); + if Length(int)>0 then + txt := r.attributes.(int[1]); + if IsBound(r.attributes.Label) then + lab := Concatenation(txt, " (", r.attributes.Label, ")"); + else + lab := txt; + fi; + if IsBound(r.attributes.BookName) then + ref := GAPDoc2TextProcs.ResolveExternalRef(r.attributes.BookName, lab, 1); + if ref = fail then + ref := Concatenation(lab, "???"); + else + # the search text for online help including book name + ref := ref[1]; + fi; + else + if IsBound(r.root.labels.(lab)) then + ref := r.root.labels.(lab); + else + ref := Concatenation("???", lab, "???"); + fi; + fi; + Append(str, Concatenation(GAPDoc2TextProcs.TextAttr.Func, txt, + GAPDoc2TextProcs.TextAttr.reset)); + # add reference by subsection number or text if external, + # but only if it does not point to current subsection + if GAPDoc2TextProcs.SectionNumber(r.count, "Subsection") <> ref then + Append(str, Concatenation(" (", + GAPDoc2TextProcs.TextAttr.Ref, ref, + GAPDoc2TextProcs.TextAttr.reset, ")")); + fi; + return; + fi; + + # section like cases + sectlike := ["Chap", "Sect", "Subsect", "Appendix"]; + int := Intersection(sectlike, NamesOfComponents(r.attributes)); + if Length(int)>0 then + txt := r.attributes.(int[1]); + if IsBound(r.attributes.Label) then + lab := Concatenation(txt, r.attributes.Label); + else + lab := txt; + fi; + if IsBound(r.attributes.BookName) then + ref := GAPDoc2TextProcs.ResolveExternalRef(r.attributes.BookName, lab, 1); + if ref = fail then + ref := Concatenation(lab, "???"); + else + # the search text for online help including book name + ref := Concatenation("`", StripBeginEnd(ref[1], " "), "'"); + fi; + else + # with sectioning references Label must be given + lab := r.attributes.(int[1]); + # default is printing section number, but we allow a Style="Text" + # attribute + if IsBound(r.attributes.Style) and r.attributes.Style = "Text" and + IsBound(r.root.labeltexts.(lab)) then + ref := Concatenation("`", StripBeginEnd( + r.root.labeltexts.(lab), WHITESPACE), "'"); + elif IsBound(r.root.labels.(lab)) then + ref := r.root.labels.(lab); + else + ref := Concatenation("???", lab, "???"); + fi; + fi; + Append(str, Concatenation(GAPDoc2TextProcs.TextAttr.Ref, ref, + GAPDoc2TextProcs.TextAttr.reset)); + return; + fi; + + # neutral reference to a label + lab := r.attributes.Label; + if IsBound(r.attributes.BookName) then + ref := GAPDoc2TextProcs.ResolveExternalRef(r.attributes.BookName, lab, 1); + if ref = fail then + ref := Concatenation(lab, "???"); + else + # the search text for online help including book name + ref := ref[1]; + fi; + else + if IsBound(r.root.labels.(lab)) then + ref := r.root.labels.(lab); + else + ref := Concatenation("???", lab, "???"); + fi; + fi; + Append(str, Concatenation(GAPDoc2TextProcs.TextAttr.Ref, ref, + GAPDoc2TextProcs.TextAttr.reset)); + return; +end; + +GAPDoc2TextProcs.Description := function(r, par) + local l; + l := []; + GAPDoc2TextContent(r, l); + if Length(l) > 0 then + l[2] := Concatenation("\n", l[2]); + fi; + Append(par, l); +end; + +GAPDoc2TextProcs.ManSection := function(r, par) + local funclike, i, num, s, strn; + + strn := ""; + # function like elements + funclike := [ "Func", "Oper", "Meth", "Filt", "Prop", "Attr", "Var", + "Fam", "InfoClass" ]; + + # heading comes from name of first function like element + i := 1; + while not r.content[i].name in funclike do + i := i+1; + od; + + num := GAPDoc2TextProcs.SectionNumber(r.count, "Subsection"); + s := Concatenation(num, " ", r.content[i].attributes.Name); + Add(par, r.count); + Add(par, Concatenation(GAPDoc2TextProcs.TextAttr.Heading, s, + GAPDoc2TextProcs.TextAttr.reset, "\n\n")); + # append to TOC as subsection + Append(r.root.toc, Concatenation(" ", s, "\n")); + GAPDoc2TextContent(r, par); +end; + +GAPDoc2TextProcs.Mark := function(r, str) + GAPDoc2TextProcs.WrapAttr(r, str, "Mark"); + Append(str, "\n"); +end; + +GAPDoc2TextProcs.Item := function(r, str) + local s; +# s := ""; + s := r.root.indent; + r.root.indent := Concatenation(s, " "); + GAPDoc2TextContent(r, str); + r.root.indent := s; +# s:= FormatParagraph(s, r.root.linelength-6, "both", [" ", ""]); +# Append(str, s); +end; + +# must do the complete formatting +GAPDoc2TextProcs.List := function(r, par) + local s, a, ss; + if "Mark" in List(r.content, a-> a.name) then + for a in r.content do + if a.name = "Mark" then + s := ""; + GAPDoc2TextProcs.Mark(a, s); + Append(par, [a.count, s]); + elif a.name = "Item" then + GAPDoc2TextProcs.Item(a, par); + fi; + od; + else + for a in Filtered(r.content, a-> a.name = "Item") do + ss := []; + GAPDoc2TextProcs.Item(a, ss); + ss[2]{[1,2]} := "--"; + Append(par, ss); + od; + fi; +end; + +GAPDoc2TextProcs.Enum := function(r, par) + local s, i, a, ss, num; + i := 1; + for a in Filtered(r.content, a-> a.name = "Item") do + ss := []; + GAPDoc2TextProcs.Item(a, ss); + num := Concatenation("(", String(i), ")"); + ss[2]{[1..Length(num)]} := num; + Append(par, ss); + i := i+1; + od; +end; + +GAPDoc2TextProcs.TheIndex := function(r, par) + local s; + # .six entry + s := GAPDoc2TextProcs.SectionNumber(r.count, "Chapter"); + Add(r.root.six, ["Index", s, r.count{[1..3]}]); + + # the text, if available + Add(par, r.count); + if IsBound(r.root.indextext) then + Add(par, Concatenation("\n\n", GAPDoc2TextProcs.TextAttr.Heading, + "Index", GAPDoc2TextProcs.TextAttr.reset, "\n\n", r.root.indextext, + "\n\n-------------------------------------------------------\n")); + else + Add(par,"INDEX\n-----------\n"); + fi; +end; + +GAPDoc2TextProcs.Alt := function(r, str) + if (IsBound(r.attributes.Only) and r.attributes.Only = "Text") or + (IsBound(r.attributes.Not) and r.attributes.Not <> "Text") then + GAPDoc2TextContent(r, str); + fi; +end; + +# copy a few entries with two element names +GAPDoc2TextProcs.E := GAPDoc2TextProcs.Emph; +GAPDoc2TextProcs.Keyword := GAPDoc2TextProcs.K; +GAPDoc2TextProcs.Code := GAPDoc2TextProcs.C; +GAPDoc2TextProcs.File := GAPDoc2TextProcs.F; +GAPDoc2TextProcs.Button := GAPDoc2TextProcs.B; +GAPDoc2TextProcs.Arg := GAPDoc2TextProcs.A; +GAPDoc2TextProcs.Quoted := GAPDoc2TextProcs.Q; +GAPDoc2TextProcs.Par := GAPDoc2TextProcs.P; + +# like PCDATA +GAPDoc2TextProcs.EntityValue := GAPDoc2TextProcs.PCDATA; + +GAPDoc2TextProcs.Table := function(r, str) + local cap, align, i, j, z, a, b, t, l, s, d, m; + if (IsBound(r.attributes.Only) and r.attributes.Only <> "Text") or + (IsBound(r.attributes.Not) and r.attributes.Not = "Text") then + return; + fi; + # head part of table and tabular + if IsBound(r.attributes.Label) then + r.root.labels.(r.attributes.Label) := + GAPDoc2TextProcs.SectionNumber(r.count, "Subsection"); + fi; + + # add spaces as separators of colums if no "|" is given + a := r.attributes.Align; + align := ""; + for i in [1..Length(a)-1] do + if a[i] in "crl" then + Add(align, a[i]); + if a[i+1] <> '|' then + Add(align, ' '); + fi; + elif a[i] = '|' then + Add(align, '|'); + fi; + od; + Add(align, a[Length(a)]); + # make all odd positions separator descriptions + if not align[1] in " |" then + align := Concatenation(" ", align); + fi; + + # collect entries + t := []; + # the rows of the table + for a in r.content do + if a.name = "Row" then + z := []; + b := Filtered(a.content, x-> x.name = "Item"); + for i in [1..Length(align)] do + if i mod 2 = 1 then + Add(z, Concatenation(" ", align{[i]}, " ")); + elif IsBound(b[i/2]) then + l := []; + GAPDoc2TextProcs.Item(b[i/2], l); + s := Concatenation(l{[2,4..Length(l)]}); + NormalizeWhitespace(s); + Add(z, s); + else + Add(z, ""); + fi; + od; + Add(t, z); + elif a.name = "HorLine" then + Add(t, List(align, x-> "")); + fi; + od; + + # equalize width of entries in columns + for i in [2,4..2*QuoInt(Length(align), 2)] do + a := List(t, b-> Length(StripEscapeSequences(b[i]))); + m := Maximum(a); + z := ""; + for b in [1..m] do + Add(z, ' '); + od; + if align[i] = 'r' then + for j in [1..Length(t)] do + t[j][i] := Concatenation(z{[1..m-a[j]]}, t[j][i]); + od; + elif align[i] = 'l' then + for j in [1..Length(t)] do + t[j][i] := Concatenation(t[j][i], z{[1..m-a[j]]}); + od; + else + for j in [1..Length(t)] do + d := m - a[j]; + t[j][i] := Concatenation(z{[1..QuoInt(d, 2)]}, t[j][i], + z{[1..d - QuoInt(d, 2)]}); + od; + fi; + od; + + # put lines together + for i in [1..Length(t)] do + if Length(t[i][1])=0 then + t[i] := ["-"]; + fi; + od; + t := List(t, Concatenation); + a := Maximum(List(t, x-> Length(StripEscapeSequences(x)))); + z := " "; + for b in [1..a] do + Add(z, '-'); + od; + Add(z, '\n'); + for i in [1..Length(t)] do + if t[i][1] = '-' then + t[i] := z; + else + t[i] := Concatenation(" ", t[i], "\n"); + fi; + od; + t := Concatenation(t); + Add(t, '\n'); + + # the caption, if given + cap := Filtered(r.content, a-> a.name = "Caption"); + if Length(cap) > 0 then + s := ""; + GAPDoc2TextProcs.Caption1(cap[1], s); + Append(t, s); + Append(t, "\n\n"); + fi; + Add(str, r.count); + Add(str, t); +end; + +# do nothing, we call .Caption1 directly in .Table +GAPDoc2TextProcs.Caption := function(r, str) + return; +end; + +# here the caption for a table text is produced +GAPDoc2TextProcs.Caption1 := function(r, str) + local s; + s := ""; + Append(s, Concatenation(GAPDoc2TextProcs.TextAttr.Heading, "Table:", + GAPDoc2TextProcs.TextAttr.reset, " ")); + GAPDoc2TextContent(r, s); + Append(str, FormatParagraph(s, r.root.linelength - 10, + "both", [" ", ""])); +end; + +## <#GAPDoc Label="GAPDoc2TextPrintTextFiles"> +## +## +## +## The first argument must be a result returned by . The second argument is a path for the files +## to write, it can be given as string or directory object. The text +## of each chapter is written into a separate file with name +## chap0.txt, chap1.txt, ..., chapBib.txt and +## chapInd.txt. +## +## +## <#/GAPDoc> +## +# arg: t (result of GAPDoc2Text)[, directory] +InstallGlobalFunction(GAPDoc2TextPrintTextFiles, function(arg) + local t, dir, a; + t := arg[1]; + if Length(arg)>1 then + dir := arg[2]; + if IsString(dir) then + dir := Directory(dir); + fi; + else + dir := Directory(""); + fi; + + for a in NamesOfComponents(t) do + FileString(Filename(dir,Concatenation("chap",a,".txt")), t.(a).text); + od; +end); + diff --git a/lib/HelpBookHandler.g b/lib/HelpBookHandler.g new file mode 100644 index 0000000..f4fb1ca --- /dev/null +++ b/lib/HelpBookHandler.g @@ -0,0 +1,240 @@ +############################################################################# +## +#W HelpBookHandler.g GAPDoc Frank Lübeck +## +#H @(#)$Id: HelpBookHandler.g,v 1.1.1.1 2001-01-05 13:37:48 gap Exp $ +## +#Y Copyright (C) 2000, Frank Lübeck, Lehrstuhl D für Mathematik, +#Y RWTH Aachen +## +## This file contains the HELP_BOOK_HANDLER functions for the GapDocGAP +## format. This is the interface between the converter programs +## contained in the GAPDoc package and GAP's help system. +## + +HELP_BOOK_HANDLER.GapDocGAP := rec(); + +## +## The .entries info in the GapDocGAP six-format has entries of form +## +## [ showstring, +## sectionstring, (allows searching of section numbers, like: "1.3-4") +## [chapnr, secnr, subsecnr], +## linenr (for "text" format), +## pagenr (for .dvi, .pdf-formats) +## ] +## + +HELPBOOKINFOSIXTMP := 0; +if not IsBound(ANSI_COLORS) then + ANSI_COLORS := false; +fi; +HELP_BOOK_HANDLER.GapDocGAP.ReadSix := function(stream) + local res, a, fname; + # our .six file is directly GAP-readable + fname := ShallowCopy(stream![2]); + Read(stream); + res := HELPBOOKINFOSIXTMP; + Unbind(HELPBOOKINFOSIXTMP); + # translate strings back from numbers (they contain escape sequences) + for a in res.entries do + a[1] := List(a[1], CHAR_INT); + ConvertToStringRep(a[1]); + od; + + # if no ANSI_COLORS we strip the escape sequences: + if not IsBound(ANSI_COLORS) or ANSI_COLORS <> true then + for a in res.entries do + a[1] := StripEscapeSequences(a[1]); + od; + fi; + + # in position 6 of each entry we put the corresponding search string + for a in res.entries do + a[6] := STRING_LOWER(StripEscapeSequences(a[1])); + NormalizeWhitespace(a[6]); + od; + + # We check the current availability of the different + # formats. And we add the help directory. + res.handler := "GapDocGAP"; + res.directory := Directory(fname{[1..Length(fname)-10]}); + res.types := ["text"]; + # check if .dvi and .pdf files and HTML-version available + fname{[Length(fname)-2..Length(fname)]} := "dvi"; + if IsExistingFile(fname) then + res.dvifile := ShallowCopy(fname); + Add(res.types, "dvi"); + fi; + fname{[Length(fname)-2..Length(fname)]} := "pdf"; + if IsExistingFile(fname) then + res.pdffile := ShallowCopy(fname); + Add(res.types, "pdf"); + fi; + fname{[Length(fname)-2..Length(fname)+1]} := "html"; + if IsExistingFile(fname) then + Add(res.types, "url"); + fi; + + return res; +end; +Unbind(HELPBOOKINFOSIXTMP); + +# Our help output format contains the table of contents, +# so we just delegate. +HELP_BOOK_HANDLER.GapDocGAP.ShowChapters := function(book) + local info, match; + info := HELP_BOOK_INFO(book); + match := Concatenation(HELP_BOOK_HANDLER.GapDocGAP.SearchMatches(book, + "table of contents", true))[1]; + return HELP_BOOK_HANDLER.GapDocGAP.HelpData(info, match, "text"); +end; + +HELP_BOOK_HANDLER.GapDocGAP.ShowSections := + HELP_BOOK_HANDLER.GapDocGAP.ShowChapters; + +# very similar to the .default handler, but we allow search for +# (sub-)section numbers as well +HELP_BOOK_HANDLER.GapDocGAP.SearchMatches := function (book, topic, frombegin) + local info, exact, match, i; + + info := HELP_BOOK_INFO(book); + exact := []; + match := []; + for i in [1..Length(info.entries)] do + if topic=info.entries[i][6] or topic=info.entries[i][2] then + Add(exact, i); + elif frombegin = true then + if MATCH_BEGIN(info.entries[i][6], topic) or + MATCH_BEGIN(info.entries[i][2], topic) then + Add(match, i); + fi; + else + if IS_SUBSTRING(info.entries[i][6], topic) then + Add(match, i); + fi; + fi; + od; + + return [exact, match]; +end; + +## The data are all easy to get. +HELP_BOOK_HANDLER.GapDocGAP.HelpData := function(book, entrynr, type) + local info, a, str, fname, label; + + info := HELP_BOOK_INFO(book); + # we handle the special type "ref" for cross references first + if type = "ref" then + a := HELP_BOOK_HANDLER.HelpDataRef(info, entrynr); + a[1] := StripEscapeSequences(a[1]); + return a; + fi; + + if not type in info.types then + return fail; + fi; + + a := info.entries[entrynr]; + + if type = "text" then + str := StringFile(Filename(info.directory, Concatenation("chap", + String(a[3][1]), ".txt"))); + if not IsBound(ANSI_COLORS) or ANSI_COLORS <> true then + # strip escape sequences + str := StripEscapeSequences(str); + fi; + return rec(lines := str, formatted := true, start := a[4]); + fi; + + if type = "url" then + if a[3][1]=0 then + fname := Filename(info.directory, "manual.html"); + else + fname := Filename(info.directory, Concatenation("chap", + String(a[3][1]), ".html")); + fi; + label := Concatenation("#c", String(a[3][1]), "c", String(a[3][2]), + "s", String(a[3][3])); + return Concatenation("file://", fname, label); + fi; + + if type = "dvi" then + return rec(file := info.dvifile, page := a[5]); + fi; + + if type = "pdf" then + return rec(file := info.pdffile, page := a[5]); + fi; +end; + +## for ?<<, ?>>, ?< and ?> +HELP_BOOK_HANDLER.GapDocGAP.MatchBeginChap := function(book, entrynr) + local info, ent, cnr, nr; + info := HELP_BOOK_INFO(book); + ent := info.entries; + cnr := [ent[entrynr][3], 0, 0]; + nr := First([1..Length(ent)], i-> ent[i][3]=cnr); + if nr = fail then + # return current + nr := entrynr; + fi; + return [info, nr]; +end; + +HELP_BOOK_HANDLER.GapDocGAP.MatchNextChap := function(book, entrynr) + local info, ent, old, chnrs, pos, cnr, nr; + info := HELP_BOOK_INFO(book); + ent := info.entries; + old := ent[entrynr][3]; + # this handles appendices as chapters + chnrs := Set(Difference(List(ent, a-> a[1]), ["Bib", "Ind"])); + pos := Position(chnrs, old[1]); + if pos < Length(chnrs) then + cnr := [chnrs[pos+1], 0, 0]; + else + # no next chapter, return the last + cnr := [old[1], 0, 0]; + fi; + nr := First([1..Length(ent)], i-> ent[i][3]=cnr); + if nr = fail then + # return current + nr := entrynr; + fi; + return [info, nr]; +end; + +HELP_BOOK_HANDLER.GapDocGAP.MatchPrev := function(book, entrynr) + local info, ent, old, new, nr, i; + info := HELP_BOOK_INFO(book); + ent := info.entries; + old := ent[entrynr][3]; + new := [-1,0,0]; + nr := entrynr; + for i in [1..Length(ent)] do + if ent[i][3] < old and ent[i][3] > new and + not ent[i][3][1] in ["Bib", "Ind"] then + new := ent[i][3]; + nr := i; + fi; + od; + return [info, nr]; +end; + +HELP_BOOK_HANDLER.GapDocGAP.MatchNext := function(book, entrynr) + local info, ent, old, new, nr, i; + info := HELP_BOOK_INFO(book); + ent := info.entries; + old := ent[entrynr][3]; + new := ["ZZZ",0,0]; + nr := entrynr; + for i in [1..Length(ent)] do + if ent[i][3] > old and ent[i][3] < new and + not ent[i][3][1] in ["Bib", "Ind"] then + new := ent[i][3]; + nr := i; + fi; + od; + return [info, nr]; +end; + diff --git a/lib/Make.g b/lib/Make.g new file mode 100644 index 0000000..47f599a --- /dev/null +++ b/lib/Make.g @@ -0,0 +1,53 @@ +############################################################################# +## +#W Make.g GAPDoc Frank Lübeck +## +#H @(#)$Id: Make.g,v 1.1.1.1 2001-01-05 13:37:49 gap Exp $ +## +#Y Copyright (C) 2000, Frank Lübeck, Lehrstuhl D für Mathematik, +#Y RWTH Aachen +## +## This file contains a function which may be used for building all +## output versions of a GAPDoc XML document which are provided by the +## GAPDoc package. +## + +BindGlobal("MakeGAPDocDoc", function(path, main, files, bookname) + local str, r, l, t, h; + # ensure that path is directory object + if IsString(path) then + path := Directory(path); + fi; + # ensure that .xml is striped from name of main file + if Length(main)>3 and main{[Length(main)-3..Length(main)]} = ".xml" then + main := main{[1..Length(main)-4]}; + fi; + # compose the XML document + str := ComposedXMLString(path, Concatenation(main, ".xml"), files); + # parse the XML document + r := ParseTreeXMLString(str); + # clean the result + CheckAndCleanGapDocTree(r); + # produce LaTeX version + l := GAPDoc2LaTeX(r); + FileString(Filename(path, Concatenation(main, ".tex")), l); + # call latex and pdflatex (with bibtex, makeindex and dvips) + Exec(Concatenation("sh -c \" cd ", Filename(path,""), "; latex ", main, + ".tex ; bibtex ", main, "; latex ", main, "; makeindex ", main, + "; latex ", main, "; rm -f ", main, ".aux; pdflatex ", main, + "; pdflatex ", main, "; dvips -o ", main, ".ps ", main, + "; mv ", main, ".dvi manual.dvi; mv ", main, + ".pdf manual.pdf; mv ", main, ".ps manual.ps; ", "\"")); + # produce text version + t := GAPDoc2Text(r, path); + GAPDoc2TextPrintTextFiles(t, path); + # read page number information for .six file + AddPageNumbersToSix(r, Filename(path, Concatenation(main, ".pnr"))); + # print manual.six file + PrintSixFile(Filename(path, "manual.six"), r, bookname); + # produce html version +# h := GAPDoc2HTML(r); +# GAPDoc2HTMLPrintHTMLFiles(h, path); + return r; +end); + diff --git a/lib/PrintUtil.gd b/lib/PrintUtil.gd new file mode 100644 index 0000000..a77ad07 --- /dev/null +++ b/lib/PrintUtil.gd @@ -0,0 +1,33 @@ +############################################################################# +## +#W PrintUtil.gd GAPDoc Frank Lübeck +## +#H @(#)$Id: PrintUtil.gd,v 1.1.1.1 2001-01-05 13:37:48 gap Exp $ +## +#Y Copyright (C) 2000, Frank Lübeck, Lehrstuhl D für Mathematik, +#Y RWTH Aachen +## +## The files PrintUtil.gd and PrintUtil.gi contain utilities for printing +## objects or large amounts of data. +## + +## a filter for a bit tricky objects +DeclareFilter("IsObjToBePrinted"); +DeclareGlobalVariable("DUMMYTBPTYPE"); + +DeclareGlobalFunction("PrintTo1"); +DeclareGlobalFunction("AppendTo1"); + +## meta `String' function for objects without String-method +DeclareGlobalFunction("StringPrint"); +DeclareGlobalFunction("StringView"); + +## viewing "large" objects +DeclareGlobalFunction("PrintFormattedString"); +DeclareGlobalFunction("Page"); +DeclareGlobalFunction("PageDisplay"); + +## fast copy of file into string and vice versa +DeclareGlobalFunction("StringFile"); +DeclareGlobalFunction("FileString"); + diff --git a/lib/PrintUtil.gi b/lib/PrintUtil.gi new file mode 100644 index 0000000..a247f7a --- /dev/null +++ b/lib/PrintUtil.gi @@ -0,0 +1,219 @@ +############################################################################# +## +#W PrintUtil.gi GAPDoc Frank Lübeck +## +#H @(#)$Id: PrintUtil.gi,v 1.1.1.1 2001-01-05 13:37:48 gap Exp $ +## +#Y Copyright (C) 2000, Frank Lübeck, Lehrstuhl D für Mathematik, +#Y RWTH Aachen +## +## The files PrintUtil.gd and PrintUtil.gi contain utilities for printing +## objects or large amounts of data. +## + +## a hack: type for objects which only exist to print something +InstallValue(DUMMYTBPTYPE, NewType(NewFamily(""), IsObjToBePrinted)); + + +InstallMethod(PrintObj, "IsObjToBePrinted", true, [IsObjToBePrinted], 0, + function(obj) obj!.f(); +end); + +## <#GAPDoc Label="PrintTo1"> +## +## +## +## +## The argument fun must be a function without arguments. +## Everything which is printed by a call fun() is printed into +## the file filename. As with and this overwrites or +## appends to, respectively, a previous content of filename. +##

          +## +## These functions can be particularly efficient when many small pieces +## of text shall be written to a file, because no multiple reopening of +## the file is necessary. +## +## +## gap> f := function() local i; +## > for i in [1..100000] do Print(i, "\n"); od; end; +## gap> PrintTo1("nonsense", f); # now check the local file `nonsense' +## +## +## +## <#/GAPDoc> +## +InstallGlobalFunction(PrintTo1, function(file, fun) + local obj; + obj := rec(f := fun); + Objectify(DUMMYTBPTYPE, obj); + PrintTo(file, obj); +end); + +InstallGlobalFunction(AppendTo1, function(file, fun) + local obj; + obj := rec(f := fun); + Objectify(DUMMYTBPTYPE, obj); + AppendTo(file, obj); +end); + +## <#GAPDoc Label="StringPrint"> +## +## +## +## +## These functions return a string containing the output of a +## Print or ViewObj call with the same arguments.

          +## +## This should be considered as a (temporary?) hack. It would be +## better to have methods for +## all &GAP; objects and to have a generic -function which just interprets these strings. +## +## +## <#/GAPDoc> +## +InstallGlobalFunction(StringPrint, function(obj) + local str, out; + str := ""; + out := OutputTextString(str, false); + PrintTo1(out, function() Print(obj); end); + CloseStream(out); + return str; +end); + +InstallGlobalFunction(StringView, function(obj) + local str, out; + str := ""; + out := OutputTextString(str, false); + PrintTo1(out, function() View(obj); end); + CloseStream(out); + return str; +end); + + +## <#GAPDoc Label="PrintFormattedString"> +## +## +## +## This function prints a string str. The difference to +## Print(str); is that no additional line breaks are +## introduced by &GAP;'s standard printing mechanism. This can +## be used to print lines which are longer than the current +## screen width. In particular one can print text which contains +## escape sequences like those explained in , +## where lines may have more characters than visible +## characters. +## +## +## <#/GAPDoc> +## +InstallGlobalFunction(PrintFormattedString, function(str) + local n, l, i; + Print("\c"); + n := QuoInt(SizeScreen()[1], 2)+1; + l := Length(str); + i := 0; + while i+n<=l do + Print(str{[i+1..i+n]}, "\c"); + i := i+n; + od; + if i +## +## +## +## +## These functions are similar to and , respectively. The +## difference is that the output is not sent directly to the screen, +## but is piped into the current pager; see . +## +## +## gap> Page([1..1421]+0); +## gap> PageDisplay(CharacterTable("Symmetric", 14)); +## +## +## +## <#/GAPDoc> +## +InstallGlobalFunction(Page, function(arg) + local str, out; + str := ""; + out := OutputTextString(str, true); + CallFuncList(PrintTo, Concatenation([out],arg)); + CloseStream(out); + Pager(rec(lines := str, formatted:=true)); +end); + +InstallGlobalFunction(PageDisplay, function(x) + local str, out; + # since output to proper string is terribly slow + str := [,1]; + out := OutputTextString(str, true); + PrintTo1(out, function() Display(x);end); + CloseStream(out); + str := str{[3..Length(str)]}; + CONV_STRING(str); + Pager(rec(lines := str, formatted:=true)); +end); + +## <#GAPDoc Label="StringFile"> +## +## +## +## +## The function returns the content of +## file filename as a string. This works efficiently with +## arbitrary (binary or text) files.

          +## +## Conversely the function writes the +## content of a string str into the file filename. If +## the optional third argument append is given and equals +## true then the content of str is appended to the +## file. Otherwise previous content of the file is deleted.

          +## +## Both functions are quite efficient, even with large files. +## +## +## <#/GAPDoc> +## +InstallGlobalFunction(StringFile, function(name) + local f, str; + f := InputTextFile(name); + if f=fail then + return fail; + fi; + str := READ_STRING_FILE(f![1]); + CloseStream(f); + return str; +end); + +# arg: filename, string[, append] (default for append is false) +InstallGlobalFunction(FileString, function(arg) + local name, str, append, out; + name := arg[1]; + str := arg[2]; + if Length(arg)>2 then + append := arg[3]; + else + append := false; + fi; + out := OutputTextFile(name, append); + if out=fail then + return fail; + fi; + IS_STRING_CONV(str); + WRITE_STRING_FILE_NC(out![1], str); + CloseStream(out); + return Length(str); +end); + + diff --git a/lib/Text.gd b/lib/Text.gd new file mode 100644 index 0000000..f542e75 --- /dev/null +++ b/lib/Text.gd @@ -0,0 +1,35 @@ +############################################################################# +## +#W Text.gd GAPDoc Frank Lübeck +## +#H @(#)$Id: Text.gd,v 1.1.1.1 2001-01-05 13:37:48 gap Exp $ +## +#Y Copyright (C) 2000, Frank Lübeck, Lehrstuhl D für Mathematik, +#Y RWTH Aachen +## +## The files Text.g{d,i} contain some utilities for dealing with text +## strings. +## + +## some character lists +DeclareGlobalVariable("WHITESPACE"); +DeclareGlobalVariable("CAPITALLETTERS"); +DeclareGlobalVariable("SMALLLETTERS"); +DeclareGlobalVariable("LETTERS"); +DeclareGlobalVariable("HEXDIGITS"); +DeclareGlobalVariable("DIGITS"); + +## record containing ANSI terminal text attributes +DeclareGlobalVariable("TextAttr"); + +## some utility functions for strings +DeclareGlobalFunction("RepeatedString"); +DeclareGlobalFunction("PositionMatchingDelimiter"); +DeclareGlobalFunction("SubstitutionSublist"); +DeclareGlobalFunction("NumberDigits"); +DeclareGlobalFunction("DigitsNumber"); +DeclareGlobalFunction("StripBeginEnd"); +DeclareGlobalFunction("NormalizedWhitespace"); +DeclareGlobalFunction("FormatParagraph"); +DeclareGlobalFunction("StripEscapeSequences"); +DeclareGlobalFunction("WordsString"); diff --git a/lib/Text.gi b/lib/Text.gi new file mode 100644 index 0000000..8db9120 --- /dev/null +++ b/lib/Text.gi @@ -0,0 +1,665 @@ +############################################################################# +## +#W Text.gi GAPDoc Frank Lübeck +## +#H @(#)$Id: Text.gi,v 1.1.1.1 2001-01-05 13:37:48 gap Exp $ +## +#Y Copyright (C) 2000, Frank Lübeck, Lehrstuhl D für Mathematik, +#Y RWTH Aachen +## +## The files Text.g{d,i} contain some utilities for dealing with text +## strings. +## + +## +## <#GAPDoc Label="CharsColls"> +## +## +## +## +## +## +## +## +## These variables contain sets of characters which are useful for +## textprocessing. They are defined as follows.

          +## +## WHITESPACE +## " &bslash;n&bslash;t&bslash;r" +## CAPITALLETTERS"ABCDEFGHIJKLMNOPQRSTUVWXYZ" +## SMALLLETTERS"abcdefghijklmnopqrstuvwxyz" +## LETTERS +## concatenation of CAPITALLETTERS and SMALLLETTERS +## DIGITS"0123456789" +## HEXDIGITS"0123456789ABCDEFabcdef" +## +## +## +## <#/GAPDoc> +## +InstallValue(WHITESPACE, " \n\t\r"); +InstallValue(CAPITALLETTERS, "ABCDEFGHIJKLMNOPQRSTUVWXYZ"); +IsSet(CAPITALLETTERS); +InstallValue(SMALLLETTERS, "abcdefghijklmnopqrstuvwxyz"); +IsSet(SMALLLETTERS); +InstallValue(LETTERS, Concatenation(CAPITALLETTERS, SMALLLETTERS)); +IsSet(LETTERS); +InstallValue(DIGITS, "0123456789"); +InstallValue(HEXDIGITS, "0123456789ABCDEFabcdef"); + + +## +## <#GAPDoc Label="TextAttr"> +## +## +## +## The record contains strings which can be +## printed to change the terminal attribute for the following +## characters. This only works with terminals which understand basic +## ANSI escape sequences. Try the following example to see if this is +## the case for the terminal you are using. It shows the effect of the +## foreground and background color attributes and of the .bold, +## .blink, .normal, .reverse and.underscore +## which can partly be mixed. +## +##

          +## extra := ["CSI", "reset", "delline", "home"];; +## for t in Difference(RecNames(TextAttr), extra) do +## Print(TextAttr.(t), "TextAttr.", t, TextAttr.reset,"\n"); +## od; +## +## +## The suggested defaults for colors 0..7 are black, red, green, +## brown, blue, magenta, cyan, white. But this may be different for +## your terminal configuration.

          +## +## The escape sequence .delline deletes the content of the +## current line and .home moves the curser to the beginning of +## the current line. +## +##

          +## for i in [1..5] do +## Print(TextAttr.home, TextAttr.delline, String(i,-6), "\c"); +## Sleep(1); +## od; +## +## +## ANSI&uscore;COLORS +## Whenever you use this in some printing routines you should +## make it optional. Use these attributes only, when the variable +## ANSI&uscore;COLORS has the value true. +##
          +##
          +## +## <#/GAPDoc> +## +InstallValue(TextAttr, rec()); +TextAttr.CSI := [CHAR_INT(27), '[']; +TextAttr.reset := Concatenation(TextAttr.CSI, "0m"); +TextAttr.normal := Concatenation(TextAttr.CSI, "22m"); +TextAttr.bold := Concatenation(TextAttr.CSI, "1m"); +TextAttr.underscore := Concatenation(TextAttr.CSI, "4m"); +TextAttr.blink := Concatenation(TextAttr.CSI, "5m"); +TextAttr.reverse := Concatenation(TextAttr.CSI, "7m"); +# foreground colors 0..7 (default: black, red, green, brown, blue, magenta, +# cyan, white +TextAttr.0 := Concatenation(TextAttr.CSI, "30m"); +TextAttr.1 := Concatenation(TextAttr.CSI, "31m"); +TextAttr.2 := Concatenation(TextAttr.CSI, "32m"); +TextAttr.3 := Concatenation(TextAttr.CSI, "33m"); +TextAttr.4 := Concatenation(TextAttr.CSI, "34m"); +TextAttr.5 := Concatenation(TextAttr.CSI, "35m"); +TextAttr.6 := Concatenation(TextAttr.CSI, "36m"); +TextAttr.7 := Concatenation(TextAttr.CSI, "37m"); +# background colors 0..7 +TextAttr.b0 := Concatenation(TextAttr.CSI, "40m"); +TextAttr.b1 := Concatenation(TextAttr.CSI, "41m"); +TextAttr.b2 := Concatenation(TextAttr.CSI, "42m"); +TextAttr.b3 := Concatenation(TextAttr.CSI, "43m"); +TextAttr.b4 := Concatenation(TextAttr.CSI, "44m"); +TextAttr.b5 := Concatenation(TextAttr.CSI, "45m"); +TextAttr.b6 := Concatenation(TextAttr.CSI, "46m"); +TextAttr.b7 := Concatenation(TextAttr.CSI, "47m"); + +TextAttr.delline := Concatenation(TextAttr.CSI, "2K"); +TextAttr.home := Concatenation(TextAttr.CSI, "1G"); + + + +## <#GAPDoc Label="RepeatedString"> +## +## +## +## Here c must be either a character or a string and len +## is a non-negative number. Then returns +## a string of length len consisting of copies of c. +## +## gap> RepeatedString('=',51); +## "===================================================" +## gap> RepeatedString("*=",51); +## "*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*" +## +## +## +## +## <#/GAPDoc> +InstallGlobalFunction(RepeatedString, function(c, len) + local s; + s := ""; + if IsChar(c) then + while Length(s) < len do + Add(s, c); + od; + elif IsString(c) then + while Length(s) < len do + Append(s, c); + od; + while Length(s) > len do + Unbind(s[Length(s)]); + od; + else + Error("First argument must be character or string"); + fi; + return s; +end); + +## <#GAPDoc Label="PositionMatchingDelimiter"> +## +## +## +## Here str must be a string and delim a string with +## two different characters. This function searches the smallest +## position r of the character delim[2] +## in str such that the number of occurences of +## delim[2] in str between positions +## pos+1 and r is by one greater than the +## corresponding number of occurences of delim[1].

          +## +## If such an r exists, it is returned. Otherwise fail +## is returned. +## +## +## gap> PositionMatchingDelimiter("{}x{ab{c}d}", "{}", 0); +## fail +## gap> PositionMatchingDelimiter("{}x{ab{c}d}", "{}", 1); +## 2 +## gap> PositionMatchingDelimiter("{}x{ab{c}d}", "{}", 6); +## 11 +## +## +## +## <#/GAPDoc> +InstallGlobalFunction(PositionMatchingDelimiter, function(str, delim, pos) + local b, e, p, l, level; + + b := delim[1]; + e := delim[2]; + + p := pos+1; + l := Length(str); + level := 0; + while true do + if p > l then + return fail; + elif str[p] = b then + level := level+1; + elif str[p] = e then + if level = 0 then + return p; + else + level := level-1; + fi; + fi; + p := p+1; + od; +end); + +## <#GAPDoc Label="SubstitutionSublist"> +## +## +## +## This function looks for (non-overlapping) occurences of a sublist +## sublist in a list list (compare ) and returns a list where these are +## substituted with the list new.

          +## +## The optional argument flag can either be "all" +## (this is the default if not given) or "one". In the second +## case only the first occurence of sublist is substituted. +##

          +## +## If sublist does not occur in list then list +## itself is returned (and not a ShallowCopy(list)). +## +## +## gap> SubstitutionSublist("xababx", "ab", "a"); +## "xaax" +## +## +## +## <#/GAPDoc> +InstallGlobalFunction(SubstitutionSublist, function(arg) + local str, substr, lss, subs, all, p, s; + str := arg[1]; + substr := arg[2]; + lss := Length(substr); + subs := arg[3]; + if Length(arg)>3 then + all := arg[4]="all"; + else + all := true; + fi; + + p := PositionSublist(str, substr); + if p = fail then + # return original object in case of no substitution + return str; + fi; + s := str{[]}; + while p<>fail do + Append(s, str{[1..p-1]}); + Append(s, subs); + str := str{[p+lss..Length(str)]}; + if all then + p := PositionSublist(str, substr); + else + p := fail; + fi; + if p=fail then + Append(s, str); + fi; + od; + return s; +end); + + +## <#GAPDoc Label="NumberDigits"> +## +## +## +## +## The argument str of must be +## a string consisting only of an optional leading '-' +## and characters in "0123456789abcdefABCDEF, describing an +## integer in base base with 2 \leq base \leq +## 16. This function returns the corresponding integer.

          +## +## The function does the reverse. +## +## +## gap> NumberDigits("1A3F",16); +## 6719 +## gap> DigitsNumber(6719, 16); +## "1A3F" +## +## +## +## <#/GAPDoc> +## +InstallGlobalFunction(NumberDigits, function(str, base) + local res, x, nr, sign; + res := 0; + sign := 1; + for x in str do + nr := INT_CHAR(x) - 48; + if nr = -3 then + # '-' + sign := -sign; + else + if nr>48 then + nr := nr - 39; + elif nr>15 then + nr := nr - 7; + fi; + res := res*base + nr; + fi; + od; + return sign*res; +end); + +InstallGlobalFunction(DigitsNumber, function(n, base) + local str, s; + s := ""; + if n<0 then + Add(s, '-'); + n := -n; + fi; + str := ""; + while n <> 0 do + Add(str, HEXDIGITS[(n mod base) + 1]); + n := QuoInt(n, base); + od; + return Concatenation(s, Reversed(str)); +end); + + +## <#GAPDoc Label="StripBeginEnd"> +## +## +## +## Here list and strip must be lists. This function +## returns the sublist of list which does not contain the leading +## and trailing entries which are entries of strip. If the +## result is equal to list then list itself is +## returned. +## +## +## gap> StripBeginEnd(" ,a, b,c, ", ", "); +## "a, b,c" +## +## +## +## <#/GAPDoc> +## +InstallGlobalFunction(StripBeginEnd, function(str, chars) + local pb, l, pe; + pb := 1; + l := Length(str); + while pb <= l and str[pb] in chars do + pb := pb + 1; + od; + pe := l; + while pe > 0 and str[pe] in chars do + pe := pe - 1; + od; + if pb > 1 or pe < l then + return str{[pb..pe]}; + else + return str; + fi; +end); + + +## <#GAPDoc Label="NormalizedWhitespace"> +## +## +## +## This function gets a string str and returns a new +## string which is a copy of str with normalized white +## space. Note that the library function works in place and changes its +## argument. +## +## +## <#/GAPDoc> +## +InstallGlobalFunction(NormalizedWhitespace, function(str) + local res; + res := ShallowCopy(str); + NormalizeWhitespace(res); + return res; +end); + +## <#GAPDoc Label="FormatParagraph"> +## +## +## +## This function formats a text given in the string str as a +## paragraph. The optional arguments have the following meaning: +## +## +## len +## the length of the lines of the resulting text (default is +## 78) +## flush +## can be "left", "right", "center" or +## "both", telling that lines should be flushed left, flushed +## right, centered or left-right justified, respectively (default is +## "both") +## attr +## is a list of two strings; the first is prepended and the +## second appended to each line of the result (can for example +## be used for indenting, [" ", ""], or some markup, +## [TextAttr.bold, TextAttr.reset], default is ["", +## ""]) +## +## +## This function tries to handle markup with the escape sequences +## explained in correctly. +## +## +## gap> str := "One two three four five six seven eight nine ten eleven.";; +## gap> Print(FormatParagraph(str, 25, "left", ["/* ", " */"])); +## /* One two three four five */ +## /* six seven eight nine ten */ +## /* eleven. */ +## +## +## +## <#/GAPDoc> +## +BindGlobal("SPACESTRINGS", [" "]); +InstallGlobalFunction(FormatParagraph, function(arg) + local str, len, flush, attr, i, words, esc, l, j, k, lw, + lines, s, ss, nsp, res, a, new, qr, b; + str := arg[1]; + # default line length + len := 78; + # default flush (flush left and right) + flush := "both"; + # default attribute (empty) + attr := false; + # scan further arg's + for i in [2..Length(arg)] do + if IsInt(arg[i]) then + len := arg[i]; + elif arg[i] in ["both", "left", "right", "center"] then + flush := arg[i]; + elif IsList(arg[i]) then + attr := arg[i]; + else + Error("wrong argument", arg[i]); + fi; + od; + for i in [Length(SPACESTRINGS)+1..len] do + SPACESTRINGS[i] := Concatenation(SPACESTRINGS[i-1], " "); + od; + + # we scan the string + words := []; + i := 1; + esc := CHAR_INT(27); + l := Length(str); + while i<=l do + if str[i] in WHITESPACE then + # delete leading whitespace + if Length(words)>0 then + Add(words, 1); + fi; + i := i+1; + while i<=l and str[i] in WHITESPACE do + i := i+1; + od; + elif str[i] = esc then + # sequences starting with ESC and stopping with the first letter + # afterwards are not changed and considered to have length zero + j := i+1; + while j<=l and not str[j] in SMALLLETTERS and not str[j] in + CAPITALLETTERS do + j := j+1; + od; + if j>l then + Error("string end inside escape sequence"); + else + Add(words, [0, [i..j]]); + fi; + i := j+1; + else + j := i+1; + while j<=l and not (str[j] in WHITESPACE or str[j]=esc) do + j := j+1; + od; + Add(words, [j-i, [i..j-1]]); + i := j; + fi; + od; + # remove trailing white space + lw := Length(words); + if lw>0 and IsInt(words[lw]) then + Unbind(words[lw]); + fi; + + # split into lines + lines := []; + i := 1; + lw := Length(words); + while i <= lw do + s := words[i][1]; + j := i+1; + nsp := 0; + while j <= lw and s+nsp < len do + if IsInt(words[j]) then + nsp := nsp+1; + j := j+1; + else + # line breaks only at white space + ss := s+nsp; + k := j; + while k <= lw and IsList(words[k]) do + ss := ss+words[k][1]; + k := k+1; + od; + if s=0 or ss <= len then + s := ss-nsp; + j := k; + else + break; + fi; + fi; + od; + if IsInt(words[j-1]) then + Add(lines, [s,nsp-1,[i..j-2]]); + i := j; + else + Add(lines, [s,nsp,[i..j-1]]); + i := j+1; + fi; + od; + + # format lines + res := ""; + for i in [1..Length(lines)] do + a := lines[i]; + new := words{a[3]}; + # now fill with spaces + nsp := len - a[1] - a[2]; + if nsp > 0 then + if flush = "right" then + new := Concatenation([nsp], new); + elif flush = "both" and a[2] > 0 and i < Length(lines) then + qr := QuotientRemainder(nsp, a[2]); + for j in [1..Length(new)] do + if IsInt(new[j]) then + if qr[2]>0 then + new[j] := new[j]+qr[1]+1; + qr[2] := qr[2]-1; + else + new[j] := new[j]+qr[1]; + fi; + fi; + od; + elif flush = "center" and nsp > 1 then + new := Concatenation([QuoInt(nsp,2)], new); + fi; + fi; + # add text attribute begin + if attr <> false and Length(new)>0 then + if IsInt(new[1]) then + new := Concatenation([new[1]], [attr[1]], new{[2..Length(new)]}); + else + Append(res, attr[1]); + fi; + fi; + s := ""; + for b in new do + if IsInt(b) then + Append(s, SPACESTRINGS[b]); + elif IsString(b) then + Append(s, b); + else # range + Append(s, str{b[2]}); + fi; + od; + # add text attribute begin after each text attribute reset (if it + # is an escape sequence) + # and the end attribute + if attr <> false then + if Length(attr[1])>2 and attr[1]{[1,2]} = TextAttr.CSI then + s := SubstitutionSublist(s, TextAttr.reset, attr[1]); + fi; + Append(s, attr[2]); + fi; + Add(s, '\n'); + Append(res, s); + od; + return res; +end); + +## <#GAPDoc Label="StripEscapeSequences"> +## +## +## +## This function returns the string one gets from the string +## str by removing all escape sequences which are explained +## in . If str does not contain such a +## sequence then str itself is returned. +## +## +## <#/GAPDoc> +## +InstallGlobalFunction(StripEscapeSequences, function(str) + local esc, res, i, ls, p; + esc := CHAR_INT(27); + res := ""; + i := 1; + ls := Length(str); + while i <= ls do + if str[i] = esc then + i := i+1; + while not str[i] in LETTERS do + i := i+1; + od; + # first letter is last character of escape sequence + i := i+1; + else + p := Position(str, esc, i); + if p=fail then + if i=1 then + # don't copy if no escape there + return str; + else + Append(res, str{[i..ls]}); + return res; + fi; + else + Append(res, str{[i..p-1]}); + i := p; + fi; + fi; + od; + return res; +end); + +## <#GAPDoc Label="WordsString"> +## +## +## +## This returns the list of words of a text stored in the string +## str. All non-letters are considered as word boundaries and +## are removed. +## +## gap> WordsString("one_two \n three!?"); +## [ "one", "two", "three" ] +## +## +## +## <#/GAPDoc> +## +InstallGlobalFunction(WordsString, function(str) + local nonletters, wds; + nonletters := Set("0123456789 \n\r\t\b+*~^\\\"#'`'/?-_.:,;<>|=()[]{}&%$§!"); + wds := SplitString(str, "", nonletters); + return wds; +end); + + diff --git a/lib/XMLParser.gd b/lib/XMLParser.gd new file mode 100644 index 0000000..df6901d --- /dev/null +++ b/lib/XMLParser.gd @@ -0,0 +1,24 @@ +############################################################################# +## +#W XMLParser.gd GAPDoc Frank Lübeck +## +#H @(#)$Id: XMLParser.gd,v 1.1.1.1 2001-01-05 13:37:48 gap Exp $ +## +#Y Copyright (C) 2000, Frank Lübeck, Lehrstuhl D für Mathematik, +#Y RWTH Aachen +## +## The files XMLParser.g{d,i} contain a non-validating XML parser and some +## utilities. +## + +DeclareGlobalFunction("GetEnt"); +DeclareGlobalFunction("GetSTag"); +DeclareGlobalFunction("GetETag"); +DeclareGlobalFunction("GetElement"); + +DeclareGlobalFunction("ParseTreeXMLString"); +DeclareGlobalFunction("DisplayXMLStructure"); +DeclareGlobalFunction("ApplyToNodesParseTree"); +DeclareGlobalFunction("AddRootParseTree"); +DeclareGlobalFunction("RemoveRootParseTree"); + diff --git a/lib/XMLParser.gi b/lib/XMLParser.gi new file mode 100644 index 0000000..ab4dca2 --- /dev/null +++ b/lib/XMLParser.gi @@ -0,0 +1,618 @@ +############################################################################# +## +#W XMLParser.gi GAPDoc Frank Lübeck +## +#H @(#)$Id: XMLParser.gi,v 1.1.1.1 2001-01-05 13:37:48 gap Exp $ +## +#Y Copyright (C) 2000, Frank Lübeck, Lehrstuhl D für Mathematik, +#Y RWTH Aachen +## +## The files XMLParser.g{d,i} contain a non-validating XML parser and some +## utilities. +## + +BindGlobal("EMPTYCONTENT", 0); +BindGlobal("NAMECHARS", + ## here ':' is missing since it will probably become reserved + ## for name space syntax in future XML + Set(List(Concatenation([45,46], [48..57], [65..90], + [95], [97..122]), CHAR_INT)) + ); + +## two helper functions for parsing +# next successive characters not in delim (resp. enddelim) - default WHITESPACE +# arg: str, pos[, delim[, enddelim]] +BindGlobal("GetWord", function(arg) + local str, pos, delim, enddelim, len, pos2; + str := arg[1]; + pos := arg[2]; + if Length(arg)>2 then + delim := arg[3]; + if Length(arg)>3 then + enddelim := arg[4]; + else + enddelim := delim; + fi; + else + delim := WHITESPACE; + enddelim := WHITESPACE; + fi; + + len := Length(str); + + while pos <= len and str[pos] in delim do + pos := pos + 1; + od; + pos2 := pos; + while pos2 <= len and not str[pos2] in enddelim do + pos2 := pos2 + 1; + od; + if pos2>len then + return fail; + else + return [pos, pos2-1]; + fi; +end); + +# first position after pos with character outside chars +BindGlobal("GetChars", function(str, pos, chars) + local len; + len := Length(str); + while pos <= len and str[pos] in chars do + pos := pos + 1; + od; + if pos > len then + return fail; + else + return pos; + fi; +end); + +# printing of error message for non-well formed XML document, +# also shows some text around position of error. +BindGlobal("ParseError", function(str, pos, comment) + local p, l, nl; + p := 0; + nl := 0; + while p<>fail and p < pos do + l := p; + p := Position(str, '\n', p); + nl := nl+1; + od; + Print("XML Parse Error: Line "); + if pos = p then + Print(nl-1); + else + Print(nl); + fi; + if p=fail then + p := Length(str)+1; + fi; + Print(" Character ", pos-l, "\n-----------\n", + str{[l+1..p-1]}, "\n"); + if pos-l-1>=1 then + Print(List([1..pos-l-1], i-> ' ')); + fi; + Print("^", "\n-----------\n", comment, "\n"); + Error(); +end); + +## the predefined entities of the GAPDoc package +BindGlobal("ENTITYDICT", rec( + lt := "&#60;", + gt := ">", + amp := "&#38;", + apos := "'", + quot := """, + tamp := "\\&&", + tlt := "{\\textless}<", + tgt := "{\\textgreater}>", + hash := "\\##", + dollar := "\\$$", + percent := "\\%%", + tilde := "{\\textasciitilde}~", + bslash := "{\\textbackslash}\\", + obrace := "\\{{", + cbrace := "\\}}", + uscore := "{\\textunderscore}_", + circum := "{\\textasciicircum}^", + nbsp := "~ ", + GAP := "GAP", + GAPDoc := "GAPDoc", + TeX := "{\\TeX}TeX", + LaTeX := "{\\LaTeX}LaTeX", + BibTeX := "BibTeXBibTeX", + MeatAxe := "MeatAxe", + XGAP := "XGAP", + copyright := "{\\copyright}(C)" + ) +); + +## Parsing and resolving an entity, the needed substitution text for +## non-character entities must be bound in ENTITYDICT. +## -- assuming str[pos-1] = '&' +## -- returns pseudo-element (Char)EntityValue with content the result string +## -- character entities are just substituted and returned as string +## -- the replacement for other entities is reparsed for recursive +## substitution +InstallGlobalFunction(GetEnt, function(str, pos) + local d, i, ch, pos1, nam, doc, res, ent; + # character entity + if str[pos] = '\#' then + d := ""; + if str[pos+1] = 'x' then + i := pos + 2; + while str[i] <> ';' do + Add(d, str[i]); + i := i+1; + od; + ch := [CHAR_INT(NumberDigits(d, 16))]; + else + i := pos+1; + while str[i] <> ';' do + Add(d, str[i]); + i := i+1; + od; + ch := [CHAR_INT(NumberDigits(d, 10))]; + fi; + return rec(name := "CharEntityValue", content := ch, next := i+1); + fi; + # else replace and reparse for recursive entity replacements + pos1 := Position(str, ';', pos-1); + if pos1=pos then + ParseError(str, pos, "empty entity name not allowed"); + fi; + nam := str{[pos..pos1-1]}; + if not IsBound(ENTITYDICT.(nam)) then + ParseError(str, pos, "don't know entity name"); + fi; + doc := ENTITYDICT.(nam); + i := 1; + res := ""; + while i <= Length(doc) do + if doc[i] <> '&' or (i '\#') then + Add(res, doc[i]); + i := i+1; + else + ent := GetEnt(doc, i+1); + Append(res, ent.content); + i := ent.next; + fi; + od; + return rec(name := "EntityValue", content := res, next := pos1+1); +end); + +## reading a start tag including attribute values +# returns rec(name := elementname, +# attributes := rec( attributename1 := attributevalue1, ...) +# content := EMPTYCONTENT or [] (to be filled recursively) +# next := positon in string after start tag ) +# Special handling of case pos=1: the element name is not parsed but assumed +# to be WHOLEDOCUMENT; this way a complete document can be put in one pseudo +# element of this name. +# assuming str[pos-1] = '<' and str[pos]<>'/' +InstallGlobalFunction(GetSTag, function(str, pos) + local res, pos2, attr, atval, delim, ent; + res := rec(attributes := rec()); + # a small hack that allows to call GetElement with a whole document + # after appending "" + if pos=1 then + res.name := "WHOLEDOCUMENT"; + res.next := 1; + res.content := []; + return res; + fi; + # name of element + pos2 := GetChars(str, pos, NAMECHARS); + if pos2=fail then + ParseError(str, pos, "documents ends in element name"); + fi; + if pos2=pos then + ParseError(str, pos, "tag must start with name \'" do + if not str[pos-1] in WHITESPACE then + ParseError(str, pos-1, Concatenation("there must be white space ", + "before attribute name")); + fi; + pos2 := GetChars(str, pos, NAMECHARS); + if pos2=fail then + ParseError(str, pos, "document ends in attribute name"); + fi; + if pos2=pos then + ParseError(str, pos, "attribute must have non-empty name"); + fi; + # reading attribute value + attr := str{[pos..pos2-1]}; + if not (str[pos2] = '=' and str[pos2+1] in "\"'") then + ParseError(str, pos2, Concatenation("attribute must be specified ", + "in form \'attr=\"text\"\'")); + fi; + delim := str[pos2+1]; + atval := ""; + pos2 := pos2 + 2; + while str[pos2] <> delim do + # we allow attr='fkjf"fafds' as well, see AnnStd 2.3 + pos2 := GetWord(str, pos2, "", "<&\"'"); + if pos2=fail then + ParseError(str, pos, "document ends in attribute value"); + fi; + # must allow &xyz; for entity resolution as well + if not str[pos2[2]+1] = delim then + if str[pos2[2]+1] = '&' then + ent := GetEnt(str, pos2[2]+1); + Append(atval, str{[pos2[1]..pos2[2]]}); + Append(atval, ent.content); + pos2 := ent.next; + elif str[pos2[2]+1] in "\"'" then + Append(atval, str{[pos2[1]..pos2[2]+1]}); + pos2 := pos2[2]+2; + else + ParseError(str, pos2[2]+1, "non valid character in attribute value"); + fi; + else + Append(atval, str{[pos2[1]..pos2[2]]}); + pos2 := pos2[2]+1; + fi; + od; + res.attributes.(attr) := atval; + pos2 := pos2+1; + pos := GetChars(str, pos2, WHITESPACE); + if pos=fail then + ParseError(str, pos2, "documents ends in tag"); + fi; + od; + if str[pos] = '/' then + res.content := EMPTYCONTENT; + pos := pos+1; + else + res.content := []; + fi; + if not str[pos] = '>' then + ParseError(str, pos, "expecting end of tag \'>\' here"); + fi; + res.next := pos+1; + return res; +end); + +## reading an end tag, +## returns rec( name := elementname, +## next := first position after this end tag) +# assuming str{[pos-2,pos-1]} = " '>' then + ParseError(str, pos2, "expecting end of tag \'>\' here"); + fi; + res.next := pos2+1; + return res; +end); + +## reading an element: start tag, content (with recursive calls of +## GetElement) and end tag +# returns record explained before GetSTag, but with .content component +# filled +# assuming str[pos-1] = '<' and str[pos] in NAMECHARS +InstallGlobalFunction(GetElement, function(str, pos) + local res, r, s, pos2, lev, dt, p, nam, val, el; + res := GetSTag(str,pos); + res.start := pos - 1; + # case of empty element + if res.content = EMPTYCONTENT then + res.stop := res.next - 1; + return res; + fi; + pos := res.next; + while true do + if str[pos] = '&' then + # resolve entity + r := GetEnt(str, pos+1); + pos := r.next; + if r.name = "CharEntityValue" then + # consider as PCDATA + r.name := "PCDATA"; + Add(res.content, r); + else + # we have to parse the result + s := Concatenation(r.content, ""); + r := GetElement(s, 1); + Append(res.content, r.content); + fi; + elif str[pos] = '<' then + if str[pos+1] = '?' then + # processing instruction (PI), we repeat it literally + pos2 := PositionSublist(str, "?>", pos+2); + if pos2=fail then + ParseError(str,pos+2, "document ends within processing instruction"); + fi; + Add(res.content, rec(name := "XMLPI", + content := str{[pos+2..pos2-1]})); + pos := pos2+2; + elif str[pos+1] = '!' then + if str[pos+2] = '-' and str[pos+3] = '-' then + ## comment + # here we ignore the restriction that inside comment + # no "--" is allowed. + pos2 := PositionSublist(str, "-->", pos+4); + if pos2=fail then + ParseError(str,pos+4, "document ends within comment"); + fi; + Add(res.content, rec(name := "XMLCOMMENT", + content := str{[pos+4..pos2-1]})); + pos := pos2+3; + elif str[pos+2] = 'D' and str{[pos+3..pos+8]} = "OCTYPE" and + str[pos+9] in WHITESPACE then + ## " + ## we have to read ENTITY declarations + pos2 := pos+10; + lev := 0; + while str[pos2] <> '>' or lev > 0 do + if str[pos2] = '<' then + lev := lev+1; + elif str[pos2] = '>' then + lev := lev-1; + fi; + pos2 := pos2+1; + if pos2>Length(str) then + ParseError(str,pos+10, "document ends within DOCTYPE tag"); + fi; + od; + dt := rec(name := "XMLDOCTYPE", + content := str{[pos+10..pos2-1]}); + Add(res.content, dt); + ## parse entity declarations in here (no good error checking) + pos := PositionSublist(dt.content, " fail do + p := GetWord(dt.content, pos+8); + nam := dt.content{[p[1]..p[2]]}; + # value enclosed in ".." or '..' + p := p[2]+1; + while dt.content[p] in WHITESPACE do + p := p + 1; + od; + p := [p+1]; + Add(p, Position(dt.content, dt.content[p[1]-1], p[1])-1); + val := dt.content{[p[1]..p[2]]}; + ENTITYDICT.(nam) := val; + pos := PositionSublist(dt.content, "" + pos2 := PositionSublist(str, "]]>", pos+9); + if pos2=fail then + ParseError(str,pos+10, "document ends within CDATA text"); + fi; + if pos2>pos+9 then + Add(res.content, rec(name := "PCDATA", + content := str{[pos+9..pos2-1]})); + fi; + pos := pos2+3; + else + ParseError(str, pos, "unknown \" el.name then + ParseError(str, pos, Concatenation("wrong end tag, expecting \"\"")); + else + res.stop := el.next - 1; + res.next := el.next; + break; + fi; + elif not str[pos+1] in NAMECHARS then + ParseError(str, pos+1, "not allowed character after '<'"); + else + ## a new element starts, call GetElement recursively + el := GetElement(str, pos+1); + Add(res.content, el); + pos := el.next; + fi; + else + pos2 := GetWord(str, pos, "", "<&"); + if pos2 = fail then + ParseError(str, pos, "document ends before end of current element"); + fi; + if pos2[2] >= pos then + Add(res.content, rec(name := "PCDATA", + content := str{[pos..pos2[2]]})); + fi; + pos := pos2[2]+1; + fi; + od; + return res; +end); + +## the user function for parsing an XML document stored in a string, +## adds end tag for pseudo element WHOLEDOCUMENT (see before GetSTag) +## and calls GetElement + +## <#GAPDoc Label="ParseTreeXMLString"> +## +## +## +## This function parses an XML-document stored in string str +## and returns the document in form of a tree.

          +## +## A node in this tree looks corresponds either to an XML element, +## or some parsed character data. In the first case it looks as +## follows: +## +##

          +## rec( name := "Book", +## attributes := rec( Name := "EDIM" ), +## content := [ ... list of nodes for content ...], +## start := 312, +## stop := 15610, +## next := 15611 ) +## +## +## This means that str{[312..15610]} looks like +## &tlt;Book Name="EDIM"> ... content ... &tlt;/Book>.

          +## +## The leaves of the tree encode parsed character data as in the +## following example: +## +##

          +## rec( name := "PCDATA", +## content := "text without markup " ) +## +## +## This function checks if the XML document is well +## formed, see for an explanation. +## When an error in the XML structure is found, a break loop is +## entered and the text around the position where the problem starts +## is shown. All entities are resolved when they are either +## entities defined in the &GAPDoc; package (in particular the +## standard XML entities) or if their definition is included in the +## <!DOCTYPE ..> tag of the document.

          +## +## Note that does not parse +## and interpret the corresponding document type definition (the +## .dtd-file given in the <!DOCTYPE ..> tag). Hence +## it also does not check the validity of the document +## (i.e., it is no validating XML parser).

          +## +## If you are using this function to parse a &GAPDoc; document +## you can use for some +## validation and additional checking of the document structure. +## +## +## +## <#/GAPDoc> +## +InstallGlobalFunction(ParseTreeXMLString, function(str) + str := Concatenation(str, ""); + return GetElement(str, 1); +end); + +## Print document tree structure (without the PCDATA entries) + +## <#GAPDoc Label="DisplayXMLStructure"> +## +## +## +## This utility displays the tree structure of an XML document as it +## is returned by (without the +## PCDATA leaves).

          +## +## Since this is usually quite long the result is shown using the +## . +## +## +## <#/GAPDoc> +## +InstallGlobalFunction(DisplayXMLStructure, function(doc) + local NL, prs, app, str; + str := ""; + NL := "\n"; + app := function(arg) + local i; + for i in [2..Length(arg)] do + Append(arg[1], arg[i]); + od; + end; + prs := function(doc, indent) + local a, c, indentnext; + if doc.name = "PCDATA" then + return; + fi; + if IsBound(doc.count) then + c := doc.count; + else + c := ""; + fi; + app(str, indent, c, " ", doc.name, NL); + if IsBound(doc.attributes) then + for a in NamesOfComponents(doc.attributes) do + app(str, indent," #",a,":",doc.attributes.(a), NL); + od; + fi; + if doc.content = EMPTYCONTENT then + app(str, indent, " # empty element\n"); + elif IsString(doc.content) then +## ??? too much output +## Print(indent, " # data\n"); + else + for a in doc.content do + indentnext := Concatenation(indent, " "); + prs(a, indentnext); + od; + fi; + end; + prs(doc, ""); + Page(str); +end); + +## apply a function to all nodes of a parse tree + +## <#GAPDoc Label="ApplyToNodesParseTree"> +## +## +## +## +## +## The function applies a +## function fun to all nodes of the parse tree tree +## of an XML document returned by .

          +## +## The function is an application of +## this. It adds to all nodes a component .root which is +## assigned to the top node tree. These components can be +## removed afterwards with . +## +## +## <#/GAPDoc> +## +InstallGlobalFunction(ApplyToNodesParseTree, function(r, f) + local ff; + ff := function(rr) + local a; + if IsList(rr.content) and not IsString(rr.content) then + for a in rr.content do + f(a); + ff(a); + od; + fi; + end; + f(r); + ff(r); +end); + +## This is useful for things like indexing where one should have +## access to the root of the document tree during the whole processing +InstallGlobalFunction(AddRootParseTree, function(r) + ApplyToNodesParseTree(r, function(a) a.root := r; end); +end); + +## And this throws away the links +InstallGlobalFunction(RemoveRootParseTree, function(r) + ApplyToNodesParseTree(r, function(a) Unbind(a.root); end); +end); + diff --git a/lib/gapdocdtdinfo.g b/lib/gapdocdtdinfo.g new file mode 100644 index 0000000..5952c3e --- /dev/null +++ b/lib/gapdocdtdinfo.g @@ -0,0 +1 @@ +GAPDOCDTDINFO:=[rec(name:="Alt",attr:=["Not","Only"],reqattr:=[],type:="mixed",content:=["PCDATA","Alt","Emph","E","Par","P","Keyword","K","Arg","A","Quoted","Q","Code","C","File","F","Button","B","Package","M","Math","Display","Example","Listing","Log","URL","Email","Homepage","Cite","Label","Ref","Index"]),rec(name:="Emph",attr:=[],reqattr:=[],type:="mixed",content:=["PCDATA","Alt","Emph","E","Par","P","Keyword","K","Arg","A","Quoted","Q","Code","C","File","F","Button","B","Package","M","Math","Display","Example","Listing","Log","URL","Email","Homepage","Cite","Label","Ref","Index"]),rec(name:="E",attr:=[],reqattr:=[],type:="mixed",content:=["PCDATA","Alt","Emph","E","Par","P","Keyword","K","Arg","A","Quoted","Q","Code","C","File","F","Button","B","Package","M","Math","Display","Example","Listing","Log","URL","Email","Homepage","Cite","Label","Ref","Index"]),rec(name:="Par",attr:=[],reqattr:=[],type:="empty"),rec(name:="P",attr:=[],reqattr:=[],type:="empty"),rec(name:="Keyword",attr:=[],reqattr:=[],type:="mixed",content:=["Alt","PCDATA"]),rec(name:="K",attr:=[],reqattr:=[],type:="mixed",content:=["Alt","PCDATA"]),rec(name:="Arg",attr:=[],reqattr:=[],type:="mixed",content:=["Alt","PCDATA"]),rec(name:="A",attr:=[],reqattr:=[],type:="mixed",content:=["Alt","PCDATA"]),rec(name:="Code",attr:=[],reqattr:=[],type:="mixed",content:=["A","Alt","PCDATA"]),rec(name:="C",attr:=[],reqattr:=[],type:="mixed",content:=["A","Alt","PCDATA"]),rec(name:="File",attr:=[],reqattr:=[],type:="mixed",content:=["Alt","PCDATA"]),rec(name:="F",attr:=[],reqattr:=[],type:="mixed",content:=["Alt","PCDATA"]),rec(name:="Button",attr:=[],reqattr:=[],type:="mixed",content:=["Alt","PCDATA"]),rec(name:="B",attr:=[],reqattr:=[],type:="mixed",content:=["Alt","PCDATA"]),rec(name:="Package",attr:=[],reqattr:=[],type:="mixed",content:=["Alt","PCDATA"]),rec(name:="Quoted",attr:=[],reqattr:=[],type:="mixed",content:=["PCDATA","Alt","Emph","E","Par","P","Keyword","K","Arg","A","Quoted","Q","Code","C","File","F","Button","B","Package","M","Math","Display","Example","Listing","Log","URL","Email","Homepage","Cite","Label","Ref","Index"]),rec(name:="Q",attr:=[],reqattr:=[],type:="mixed",content:=["PCDATA","Alt","Emph","E","Par","P","Keyword","K","Arg","A","Quoted","Q","Code","C","File","F","Button","B","Package","M","Math","Display","Example","Listing","Log","URL","Email","Homepage","Cite","Label","Ref","Index"]),rec(name:="M",attr:=[],reqattr:=[],type:="mixed",content:=["A","Alt","Arg","PCDATA"]),rec(name:="Math",attr:=[],reqattr:=[],type:="mixed",content:=["A","Alt","Arg","PCDATA"]),rec(name:="Display",attr:=[],reqattr:=[],type:="mixed",content:=["A","Alt","Arg","PCDATA"]),rec(name:="Example",attr:=[],reqattr:=[],type:="mixed",content:=["PCDATA"]),rec(name:="Log",attr:=[],reqattr:=[],type:="mixed",content:=["PCDATA"]),rec(name:="Listing",attr:=["Type"],reqattr:=[],type:="mixed",content:=["PCDATA"]),rec(name:="URL",attr:=["Text"],reqattr:=[],type:="mixed",content:=["Alt","PCDATA"]),rec(name:="Email",attr:=[],reqattr:=[],type:="mixed",content:=["Alt","PCDATA"]),rec(name:="Homepage",attr:=[],reqattr:=[],type:="mixed",content:=["Alt","PCDATA"]),rec(name:="Cite",attr:=["Key","Where"],reqattr:=["Key"],type:="empty"),rec(name:="Label",attr:=["Name"],reqattr:=["Name"],type:="empty"),rec(name:="Ref",attr:=["Appendix","Attr","BookName","Chap","Fam","Filt","Func","InfoClass","Label","Meth","Oper","Prop","Sect","Style","Subsect","Text","Var"],reqattr:=[],type:="empty"),rec(name:="Index",attr:=["Key","Subkey"],reqattr:=[],type:="mixed",content:=["PCDATA","Alt","Emph","E","Par","P","Keyword","K","Arg","A","Quoted","Q","Code","C","File","F","Button","B","Package","M","Math","Display","Example","Listing","Log","URL","Email","Homepage","Cite","Label","Ref","Index"]),rec(name:="Item",attr:=[],reqattr:=[],type:="mixed",content:=["A","Alt","Arg","B","Button","C","Cite","Code","Display","E","Email","Emph","Enum","Example","F","File","Homepage","Index","K","Keyword","Label","List","Listing","Log","M","Math","P","PCDATA","Package","Par","Q","Quoted","Ref","Table","URL"]),rec(name:="Mark",attr:=[],reqattr:=[],type:="mixed",content:=["PCDATA","Alt","Emph","E","Par","P","Keyword","K","Arg","A","Quoted","Q","Code","C","File","F","Button","B","Package","M","Math","Display","Example","Listing","Log","URL","Email","Homepage","Cite","Label","Ref","Index"]),rec(name:="BigMark",attr:=[],reqattr:=[],type:="mixed",content:=["PCDATA","Alt","Emph","E","Par","P","Keyword","K","Arg","A","Quoted","Q","Code","C","File","F","Button","B","Package","M","Math","Display","Example","Listing","Log","URL","Email","Homepage","Cite","Label","Ref","Index"]),rec(name:="List",attr:=["Not","Only"],reqattr:=[],type:="elements",content:=["BigMark","Item","Mark"]),rec(name:="Enum",attr:=["Not","Only"],reqattr:=[],type:="elements",content:=["Item"]),rec(name:="Table",attr:=["Align","Label","Not","Only"],reqattr:=["Align"],type:="elements",content:=["Caption","HorLine","Row"]),rec(name:="Row",attr:=[],reqattr:=[],type:="elements",content:=["Item"]),rec(name:="HorLine",attr:=[],reqattr:=[],type:="empty"),rec(name:="Caption",attr:=[],reqattr:=[],type:="mixed",content:=["PCDATA","Alt","Emph","E","Par","P","Keyword","K","Arg","A","Quoted","Q","Code","C","File","F","Button","B","Package","M","Math","Display","Example","Listing","Log","URL","Email","Homepage","Cite","Label","Ref","Index"]),rec(name:="TitlePage",attr:=[],reqattr:=[],type:="elements",content:=["Abstract","Acknowledgements","Author","Colophon","Copyright","Date","Subtitle","Title","Version"]),rec(name:="Title",attr:=[],reqattr:=[],type:="mixed",content:=["A","Alt","Arg","B","Button","C","Cite","Code","Display","E","Email","Emph","Enum","Example","F","File","Homepage","Index","K","Keyword","Label","List","Listing","Log","M","Math","P","PCDATA","Package","Par","Q","Quoted","Ref","Table","URL"]),rec(name:="Subtitle",attr:=[],reqattr:=[],type:="mixed",content:=["A","Alt","Arg","B","Button","C","Cite","Code","Display","E","Email","Emph","Enum","Example","F","File","Homepage","Index","K","Keyword","Label","List","Listing","Log","M","Math","P","PCDATA","Package","Par","Q","Quoted","Ref","Table","URL"]),rec(name:="Version",attr:=[],reqattr:=[],type:="mixed",content:=["Alt","PCDATA"]),rec(name:="Author",attr:=[],reqattr:=[],type:="mixed",content:=["A","Alt","Arg","B","Button","C","Cite","Code","Display","E","Email","Emph","Enum","Example","F","File","Homepage","Index","K","Keyword","Label","List","Listing","Log","M","Math","P","PCDATA","Package","Par","Q","Quoted","Ref","Table","URL"]),rec(name:="Date",attr:=[],reqattr:=[],type:="mixed",content:=["A","Alt","Arg","B","Button","C","Cite","Code","Display","E","Email","Emph","Enum","Example","F","File","Homepage","Index","K","Keyword","Label","List","Listing","Log","M","Math","P","PCDATA","Package","Par","Q","Quoted","Ref","Table","URL"]),rec(name:="Abstract",attr:=[],reqattr:=[],type:="mixed",content:=["A","Alt","Arg","B","Button","C","Cite","Code","Display","E","Email","Emph","Enum","Example","F","File","Homepage","Index","K","Keyword","Label","List","Listing","Log","M","Math","P","PCDATA","Package","Par","Q","Quoted","Ref","Table","URL"]),rec(name:="Copyright",attr:=[],reqattr:=[],type:="mixed",content:=["A","Alt","Arg","B","Button","C","Cite","Code","Display","E","Email","Emph","Enum","Example","F","File","Homepage","Index","K","Keyword","Label","List","Listing","Log","M","Math","P","PCDATA","Package","Par","Q","Quoted","Ref","Table","URL"]),rec(name:="Acknowledgements",attr:=[],reqattr:=[],type:="mixed",content:=["A","Alt","Arg","B","Button","C","Cite","Code","Display","E","Email","Emph","Enum","Example","F","File","Homepage","Index","K","Keyword","Label","List","Listing","Log","M","Math","P","PCDATA","Package","Par","Q","Quoted","Ref","Table","URL"]),rec(name:="Colophon",attr:=[],reqattr:=[],type:="mixed",content:=["A","Alt","Arg","B","Button","C","Cite","Code","Display","E","Email","Emph","Enum","Example","F","File","Homepage","Index","K","Keyword","Label","List","Listing","Log","M","Math","P","PCDATA","Package","Par","Q","Quoted","Ref","Table","URL"]),rec(name:="TableOfContents",attr:=[],reqattr:=[],type:="empty"),rec(name:="Bibliography",attr:=["Databases","Style"],reqattr:=["Databases"],type:="empty"),rec(name:="TheIndex",attr:=[],reqattr:=[],type:="empty"),rec(name:="Subsection",attr:=["Label"],reqattr:=[],type:="mixed",content:=["A","Alt","Arg","B","Button","C","Cite","Code","Display","E","Email","Emph","Enum","Example","F","File","Heading","Homepage","Index","K","Keyword","Label","List","Listing","Log","M","Math","P","PCDATA","Package","Par","Q","Quoted","Ref","Table","URL"]),rec(name:="ManSection",attr:=["Label"],reqattr:=[],type:="elements",content:=["Attr","Description","Fam","Filt","Func","InfoClass","Meth","Oper","Prop","Var"]),rec(name:="Description",attr:=[],reqattr:=[],type:="mixed",content:=["A","Alt","Arg","B","Button","C","Cite","Code","Display","E","Email","Emph","Enum","Example","F","File","Homepage","Index","K","Keyword","Label","List","Listing","Log","M","Math","P","PCDATA","Package","Par","Q","Quoted","Ref","Table","URL"]),rec(name:="Func",attr:=["Arg","Comm","Label","Name"],reqattr:=["Arg","Name"],type:="empty"),rec(name:="Oper",attr:=["Arg","Comm","Label","Name"],reqattr:=["Arg","Name"],type:="empty"),rec(name:="Meth",attr:=["Arg","Comm","Label","Name"],reqattr:=["Arg","Name"],type:="empty"),rec(name:="Filt",attr:=["Arg","Comm","Label","Name","Type"],reqattr:=["Name"],type:="empty"),rec(name:="Prop",attr:=["Arg","Comm","Label","Name"],reqattr:=["Arg","Name"],type:="empty"),rec(name:="Attr",attr:=["Arg","Comm","Label","Name"],reqattr:=["Arg","Name"],type:="empty"),rec(name:="Var",attr:=["Comm","Label","Name"],reqattr:=["Name"],type:="empty"),rec(name:="Fam",attr:=["Comm","Label","Name"],reqattr:=["Name"],type:="empty"),rec(name:="InfoClass",attr:=["Comm","Label","Name"],reqattr:=["Name"],type:="empty"),rec(name:="Heading",attr:=[],reqattr:=[],type:="mixed",content:=["PCDATA","Alt","Emph","E","Par","P","Keyword","K","Arg","A","Quoted","Q","Code","C","File","F","Button","B","Package","M","Math","Display","Example","Listing","Log","URL","Email","Homepage","Cite","Label","Ref","Index"]),rec(name:="Section",attr:=["Label"],reqattr:=[],type:="mixed",content:=["A","Alt","Arg","B","Button","C","Cite","Code","Display","E","Email","Emph","Enum","Example","F","File","Heading","Homepage","Index","K","Keyword","Label","List","Listing","Log","M","ManSection","Math","P","PCDATA","Package","Par","Q","Quoted","Ref","Subsection","Table","URL"]),rec(name:="Chapter",attr:=["Label"],reqattr:=[],type:="mixed",content:=["A","Alt","Arg","B","Button","C","Cite","Code","Display","E","Email","Emph","Enum","Example","F","File","Heading","Homepage","Index","K","Keyword","Label","List","Listing","Log","M","Math","P","PCDATA","Package","Par","Q","Quoted","Ref","Section","Table","URL"]),rec(name:="Appendix",attr:=["Label"],reqattr:=[],type:="mixed",content:=["A","Alt","Arg","B","Button","C","Cite","Code","Display","E","Email","Emph","Enum","Example","F","File","Heading","Homepage","Index","K","Keyword","Label","List","Listing","Log","M","Math","P","PCDATA","Package","Par","Q","Quoted","Ref","Section","Table","URL"]),rec(name:="Body",attr:=[],reqattr:=[],type:="mixed",content:=["A","Alt","Arg","B","Button","C","Chapter","Cite","Code","Display","E","Email","Emph","Enum","Example","F","File","Homepage","Index","K","Keyword","Label","List","Listing","Log","M","Math","P","PCDATA","Package","Par","Q","Quoted","Ref","Section","Table","URL"]),rec(name:="Book",attr:=["Name"],reqattr:=["Name"],type:="elements",content:=["Appendix","Bibliography","Body","TableOfContents","TheIndex","TitlePage"])]; diff --git a/lib/getdtd.g b/lib/getdtd.g new file mode 100644 index 0000000..d92cfb4 --- /dev/null +++ b/lib/getdtd.g @@ -0,0 +1,127 @@ +############################################################################# +## +#W getdtd.g GAPDoc Frank Lübeck +## +#H @(#)$Id: getdtd.g,v 1.1.1.1 2001-01-05 13:37:48 gap Exp $ +## +#Y Copyright (C) 2000, Frank Lübeck, Lehrstuhl D für Mathematik, +#Y RWTH Aachen +## +## This is a utility file for the GAPDoc package, which reads +## gapdoc.dtd, creates the content of `GAPDOCDTDINFO' and writes it to +## `GAPDocDtdInfo.g'. (Because we don't have a dtd-parser.) +## +## This is not read by the package and only used when gapdoc.dtd is +## changed. +## +Revision.getdtd.g := + "@(#)$Id: getdtd.g,v 1.1.1.1 2001-01-05 13:37:48 gap Exp $"; + + +Read("stringutil.g"); + +# some hacks instead of writing a dtd-parser + +dtd := StringFile("gapdoc.dtd");; + +pos := PositionSubstring(dtd, " fail do + pos2 := Position(dtd, '>', pos); + Add(elementdecs, dtd{[pos+10..pos2-1]}); + pos := pos2; + pos := PositionSubstring(dtd, "', pos); +innertxt := WordsString(dtd{[pos+13..pos2]}); +txt := Concatenation(innertxt, [ "Enum", "List", "Table" ]); +ssent := [ "Subsection", "ManSection" ]; + +for x in elements do + if "InnerText" in elementcontents.(x) then + elementcontents.(x) := + Concatenation(Difference(elementcontents.(x), ["InnerText"]), innertxt); + fi; + if "Text" in elementcontents.(x) then + elementcontents.(x) := + Set(Concatenation(Difference(elementcontents.(x), ["Text"]), txt)); + fi; + if "SubsectionEnt" in elementcontents.(x) then + elementcontents.(x) := + Set(Concatenation(Difference(elementcontents.(x), ["SubsectionEnt"]), + ssent)); + fi; +od; + +pos := PositionSubstring(dtd, " fail do + pos2 := Position(dtd, '>', pos); + Add(elementatts, dtd{[pos+10..pos2-1]}); + pos := pos2; + pos := PositionSubstring(dtd, " not x in WHITESPACE); +Add(s,'\n'); +WriteToFile("GAPDocDtdInfo.g",s); +Read("GAPDocDtdInfo.g"); +Print(GAPDOCDTDINFO); + diff --git a/makedoc.g b/makedoc.g new file mode 100644 index 0000000..5f5f4e6 --- /dev/null +++ b/makedoc.g @@ -0,0 +1,24 @@ +############################################################################# +## +#A makedoc.g GAPDoc Frank Lübeck +## +#H @(#)$Id: makedoc.g,v 1.1.1.1 2001-01-05 13:37:46 gap Exp $ +## +## Rebuild the whole documentation, provided sufficiently good (pdf)LaTeX +## is available. +## +# main +MakeGAPDocDoc("doc", "gapdoc", ["../lib/BibTeX.gi", +"../lib/ComposeXML.gi", "../lib/GAPDoc2HTML.gi", +"../lib/GAPDoc.gi", "../lib/GAPDoc2LaTeX.gi", "../lib/GAPDoc2Text.gi", +"../lib/PrintUtil.gi", "../lib/Text.gi", "../lib/XMLParser.gi", +"../lib/Make.g" ], "GAPDoc"); + +# now load it (for cross reference in example) +DeclarePackageDocumentation("gapdoc","doc"); + +# example +MakeGAPDocDoc("example", "example", [], "GAPDocExample"); +# from first chapter +MakeGAPDocDoc("3k+1", "3k+1", [], "ThreeKPlusOne"); + diff --git a/read.g b/read.g new file mode 100644 index 0000000..17d0280 --- /dev/null +++ b/read.g @@ -0,0 +1,22 @@ +############################################################################# +## +#A read.g GAPDoc Frank Lübeck / Max Neunhöffer +## +#H @(#)$Id: read.g,v 1.1.1.1 2001-01-05 13:37:46 gap Exp $ +## +#Y Copyright (C) 2000, Frank Lübeck and Max Neunhöffer, +#Y Lehrstuhl D für Mathematik, RWTH Aachen +## + +ReadPkg("gapdoc", "lib/PrintUtil.gi"); +ReadPkg("gapdoc", "lib/Text.gi"); +ReadPkg("gapdoc", "lib/ComposeXML.gi"); +ReadPkg("gapdoc", "lib/XMLParser.gi"); +ReadPkg("gapdoc", "lib/gapdocdtdinfo.g"); +ReadPkg("gapdoc", "lib/GAPDoc.gi"); +ReadPkg("gapdoc", "lib/BibTeX.gi"); +ReadPkg("gapdoc", "lib/GAPDoc2LaTeX.gi"); +ReadPkg("gapdoc", "lib/GAPDoc2Text.gi"); +ReadPkg("gapdoc", "lib/GAPDoc2HTML.gi"); +ReadPkg("gapdoc", "lib/Make.g"); + diff --git a/version b/version new file mode 100644 index 0000000..c32c4f3 --- /dev/null +++ b/version @@ -0,0 +1 @@ +(Version 0.9)

    ManSections + x is in the + representation . + + + + + + + For objects in this representation there is a super-fast method + (see ) for the operation + . + + + + + + + A property. + + + + + + + An attribute. Number of blobbs. + + + + + + + This global variable holds a list of all blibbs. + + + + + + + Family of all blibbs. + + + + + + + This info class is used throughout the library of blibbs. + + + +