[1X5 The Converters and an XML Parser[0X The [5XGAPDoc[0m package contains a set of programs which allow us to convert a [5XGAPDoc[0m book into several output versions and to make them available to [5XGAP[0m's online help. Currently the following output formats are provided: text for browsing inside a terminal running [5XGAP[0m, LaTeX with [10Xhyperref[0m-package for cross references via hyperlinks and HTML for reading with a Web-browser. [1X5.1 Producing Documentation from Source Files[0X 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 [11XMyBook.xml[0m of a book [10X"MyBook"[0m in the directory [11X/my/book/path[0m. This contains [10X<#Include ...>[0m-statements as explained in Chapter [14X4[0m. These refer to some other files as well as pieces of text which are found in the comments of some [5XGAP[0m source files [11X../lib/a.gd[0m and [11X../lib/b.gi[0m (relative to the path above). A BibTeX database [11XMyBook.bib[0m for the citations is also in the directory given above. We want to produce a text-, [10Xpdf-[0m and HTML-version of the document. (A LaTeX version of the manual is produced, so it is also easy to compile [10Xdvi[0m-, and postscript-versions.) All the commands shown in this Section are collected in the single function [2XMakeGAPDocDoc[0m ([14X5.1-1[0m). First we construct the complete XML-document as a string with [2XComposedDocument[0m ([14X4.2-1[0m). This interprets recursively the [10X<#Include ...>[0m-statements. [4X--------------------------- Example ----------------------------[0X [4Xgap> path := Directory("/my/book/path");;[0X [4Xgap> main := "MyBook.xml";;[0X [4Xgap> files := ["../lib/a.gd", "../lib/b.gi"];;[0X [4Xgap> bookname := "MyBook";;[0X [4Xgap> doc := ComposedDocument("GAPDoc", path, main, files, true);;[0X [4X------------------------------------------------------------------[0X Now [10Xdoc[0m is a list with two entries, the first is a string containing the XML-document, the second gives information from which files and locations which part of the document was collected. This is useful in the next step, if there are any errors in the document. Next we parse the document and store its structure in a tree-like data structure. The commands for this are [2XParseTreeXMLString[0m ([14X5.2-1[0m) and [2XCheckAndCleanGapDocTree[0m ([14X5.2-8[0m). [4X--------------------------- Example ----------------------------[0X [4Xgap> r := ParseTreeXMLString(doc[1], doc[2]);;[0X [4Xgap> CheckAndCleanGapDocTree(r);[0X [4Xtrue[0X [4X------------------------------------------------------------------[0X We start to produce a text version of the manual, which can be read in a terminal (window). The command is [2XGAPDoc2Text[0m ([14X5.3-2[0m). This produces a record with the actual text and some additional information. The text can be written chapter-wise into files with [2XGAPDoc2TextPrintTextFiles[0m ([14X5.3-3[0m). The names of these files are [11Xchap0.txt[0m, [11Xchap1.txt[0m and so on. The text contains some markup using ANSI escape sequences. This markup is substituted by the [5XGAP[0m help system (user configurable) to show the text with colors and other attributes. For the bibliography we have to tell [2XGAPDoc2Text[0m ([14X5.3-2[0m) the location of the BibTeX database by specifying a [10Xpath[0m as second argument. [4X--------------------------- Example ----------------------------[0X [4Xgap> t := GAPDoc2Text(r, path);;[0X [4Xgap> GAPDoc2TextPrintTextFiles(t, path);[0X [4X------------------------------------------------------------------[0X This command constructs all parts of the document including table of contents, bibliography and index. The functions [2XFormatParagraph[0m ([14X6.1-4[0m) for formatting text paragraphs and [2XParseBibFiles[0m ([14X7.1-1[0m) for reading BibTeX files with [5XGAP[0m may be of independent interest. With the text version we have also produced the information which is used for searching with [5XGAP[0m's online help. Also, labels are produced which can be used by links in the HTML- and [10Xpdf[0m-versions of the manual. Next we produce a LaTeX version of the document. [2XGAPDoc2LaTeX[0m ([14X5.3-1[0m) returns a string containing the LaTeX source. The utility function [2XFileString[0m ([14X6.3-5[0m) writes the content of a string to a file, we choose [11XMyBook.tex[0m. [4X--------------------------- Example ----------------------------[0X [4Xgap> l := GAPDoc2LaTeX(r);;[0X [4Xgap> FileString(Filename(path, Concatenation(bookname, ".tex")), l);[0X [4X------------------------------------------------------------------[0X Assuming that you have a sufficiently good installation of TeX available (see [2XGAPDoc2LaTeX[0m ([14X5.3-1[0m) for details) this can be processed with a series of commands like in the following example. [4X--------------------------- Example ----------------------------[0X [4Xcd /my/book/path[0X [4Xpdflatex MyBook[0X [4Xbibtex MyBook[0X [4Xpdflatex MyBook[0X [4Xmakeindex MyBook[0X [4Xpdflatex MyBook[0X [4Xmv MyBook.pdf manual.pdf[0X [4X------------------------------------------------------------------[0X After this we have a [10Xpdf[0m-version of the document in the file [11Xmanual.pdf[0m. It contains hyperlink information which can be used with appropriate browsers for convenient reading of the document on screen (e.g., [10Xxpdf[0m is nice because it allows remote calls to display named locations of the document). Of course, we could also use other commands like [10Xlatex[0m or [10Xdvips[0m to process the LaTeX source file. Furthermore we have produced a file [11XMyBook.pnr[0m which is [5XGAP[0m-readable and contains the page number information for each (sub-)section of the document. We can add this page number information to the indexing information collected by the text converter and then print a [11Xmanual.six[0m file which is read by [5XGAP[0m when the manual is loaded. This is done with [2XAddPageNumbersToSix[0m ([14X5.3-4[0m) and [2XPrintSixFile[0m ([14X5.3-5[0m). [4X--------------------------- Example ----------------------------[0X [4Xgap> AddPageNumbersToSix(r, Filename(path, "MyBook.pnr"));[0X [4Xgap> PrintSixFile(Filename(path, "manual.six"), r, bookname);[0X [4X------------------------------------------------------------------[0X Finally we produce an HTML-version of the document and write it (chapter-wise) into files [11Xchap0.html[0m, [11Xchap1.html[0m and so on. They can be read with any Web-browser. The commands are [2XGAPDoc2HTML[0m ([14X5.3-7[0m) and [2XGAPDoc2HTMLPrintHTMLFiles[0m ([14X5.3-8[0m). We also add a link from [11Xmanual.html[0m to [11Xchap0.html[0m. You probably want to add a file [11Xmanual.css[0m, see [2XGAPDoc2HTMLPrintHTMLFiles[0m ([14X5.3-8[0m) for more details. The argument [10Xpath[0m of [2XGAPDoc2HTML[0m ([14X5.3-7[0m) specifies the directory containing the BibTeX database files. [4X--------------------------- Example ----------------------------[0X [4Xgap> h := GAPDoc2HTML(r, path);;[0X [4Xgap> GAPDoc2HTMLPrintHTMLFiles(h, path);[0X [4X------------------------------------------------------------------[0X [1X5.1-1 MakeGAPDocDoc[0m [2X> MakeGAPDocDoc( [0X[3Xpath, main, files, bookname[, gaproot][0X[2X ) __________[0Xfunction This function collects all the commands for producing a text-, [10Xpdf[0m- and HTML-version of a [5XGAPDoc[0m document as described in Section [14X5.1[0m. It checks the [10X.log[0m file from the call of [10Xpdflatex[0m and reports if there are errors, warnings or overfull boxes. [13XNote:[0m If this function works for you depends on your operating system and installed software. It will probably work on most [10XUNIX[0m systems with a standard LaTeX installation. If the function doesn't work for you look at the source code and adjust it to your system. Here [3Xpath[0m must be the directory (as string or directory object) containing the main file [3Xmain[0m of the document (given with or without the [10X.xml[0m extension. The argument [3Xfiles[0m is a list of (probably source code) files relative to [3Xpath[0m which contain pieces of documentation which must be included in the document, see Chapter [14X4[0m. And [3Xbookname[0m is the name of the book used by [5XGAP[0m's online help. The optional argument [3Xgaproot[0m must be a string which gives the relative path from [3Xpath[0m to the main [5XGAP[0m root directory. If this is given, the HTML files are produced with relative paths to external books. Experimental: [2XMakeGAPDocDoc[0m can be called with additional arguments [10X"Tth"[0m and/or [10X"MathML"[0m. If these are given additional variants of the HTML conversion are called, see [2XGAPDoc2HTML[0m ([14X5.3-7[0m) for details. It is possible to use [5XGAPDoc[0m with other languages than English, see [2XSetGapDocLanguage[0m ([14X5.3-10[0m) for more details. [1X5.2 Parsing XML Documents[0X Arbitrary well-formed XML documents can be parsed and browsed by the following functions. [1X5.2-1 ParseTreeXMLString[0m [2X> ParseTreeXMLString( [0X[3Xstr[, srcinfo][, entitydict][0X[2X ) _______________[0Xfunction [2X> ParseTreeXMLFile( [0X[3Xfname[, entitydict][0X[2X ) __________________________[0Xfunction [6XReturns:[0X a record which is root of a tree structure The first function parses an XML-document stored in string [3Xstr[0m and returns the document in form of a tree. The optional argument [3Xsrcinfo[0m must have the same format as in [2XOriginalPositionDocument[0m ([14X4.2-2[0m). If it is given then error messages refer to the original source of the text with the problem. With the optional argument [3Xentitydict[0m named entities can be given to the parser, for example entities which are defined in the [10X.dtd[0m-file (which is not read by this parser). The standard XML-entities do not need to be provided, and for [5XGAPDoc[0m documents the entity definitions from [10Xgapdoc.dtd[0m are automatically provided. Entities in the document's [10X<!DOCTYPE[0m declaration are parsed and also need not to be provided here. The argument [3Xentitydict[0m must be a record where each component name is an entity name (without the surrounding & and ;) to which is assigned its substitution string. The second function is just a shortcut for [10XParseTreeXMLString( StringFile([0m[3Xfname[0m[10X), ... )[0m, see [2XStringFile[0m ([14X6.3-5[0m). After these functions return the list of named entities which were known during the parsing can be found in the record [10XENTITYDICT[0m. A node in the result tree corresponds to an XML element, or to some parsed character data. In the first case it looks as follows: [4X------------------------- Example Node -------------------------[0X [4Xrec( name := "Book",[0X [4X attributes := rec( Name := "EDIM" ),[0X [4X content := [ ... list of nodes for content ...],[0X [4X start := 312,[0X [4X stop := 15610,[0X [4X next := 15611 )[0X [4X------------------------------------------------------------------[0X This means that [10X[3Xstr[0m[10X{[312..15610]}[0m looks like [10X<Book Name="EDIM"> ... content ... </Book>[0m. The leaves of the tree encode parsed character data as in the following example: [4X------------------------- Example Node -------------------------[0X [4Xrec( name := "PCDATA", [0X [4X content := "text without markup " )[0X [4X------------------------------------------------------------------[0X This function checks whether the XML document is [13Xwell formed[0m, see [14X2.1-14[0m for an explanation. If 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. With [10XShow();[0m one can browse the original input in the [2XPager[0m ([14XReference: Pager[0m), starting with the line where the error occurred. All entities are resolved when they are either entities defined in the [5XGAPDoc[0m package (in particular the standard XML entities) or if their definition is included in the [10X<!DOCTYPE ..>[0m tag of the document. Note that [2XParseTreeXMLString[0m does not parse and interpret the corresponding document type definition (the [10X.dtd[0m-file given in the [10X<!DOCTYPE ..>[0m tag). Hence it also does not check the [13Xvalidity[0m of the document (i.e., it is no [13Xvalidating XML parser[0m). If you are using this function to parse a [5XGAPDoc[0m document you can use [2XCheckAndCleanGapDocTree[0m ([14X5.2-8[0m) for some validation and additional checking of the document structure. [1X5.2-2 StringXMLElement[0m [2X> StringXMLElement( [0X[3Xtree[0X[2X ) _________________________________________[0Xfunction [6XReturns:[0X a list [10X[string, positions][0m The argument [3Xtree[0m must have a format of a node in the parse tree of an XML document as returned by [2XParseTreeXMLString[0m ([14X5.2-1[0m) (including the root node representing the full document). This function computes a pair [10X[string, positions][0m where [10Xstring[0m contains XML code which is equivalent to the code which was parsed to get [3Xtree[0m. And [10Xpositions[0m is a list of lists of four numbers [10X[eltb, elte, contb, conte][0m. There is one such list for each XML element occuring in [10Xstring[0m, where [10Xeltb[0m and [10Xelte[0m are the begin and end position of this element in [10Xstring[0m and where [10Xcontb[0m and [10Xconte[0m are begin and end position of the content of this element, or both are [10X0[0m if there is no content. Note that parsing XML code is an irreversible task, we can only expect to get equivalent XML code from this function. But parsing the resulting [10Xstring[0m again and applying [2XStringXMLElement[0m again gives the same result. See the function [2XEntitySubstitution[0m ([14X5.2-3[0m) for back-substitutions of entities in the result. [1X5.2-3 EntitySubstitution[0m [2X> EntitySubstitution( [0X[3Xxmlstring, entities[0X[2X ) ________________________[0Xfunction [6XReturns:[0X a string The argument [3Xxmlstring[0m must be a string containing XML code or a pair [10X[string, positions][0m as returned by [2XStringXMLElement[0m ([14X5.2-2[0m). The argument [3Xentities[0m specifies entity names (without the surrounding [3X&[0m and [10X;[0m) and their substitution strings, either a list of pairs of strings or as a record with the names as components and the substitutions as values. This function tries to substitute non-intersecting parts of [10Xstring[0m by the given entities. If the [10Xpositions[0m information is given then only parts of the document which allow a valid substitution by an entity are considered. Otherwise a simple text substitution without further check is done. Note that in general the entity resolution in XML documents is a complicated and non-reversible task. But nevertheless this utility may be useful in not too complicated situations. [1X5.2-4 DisplayXMLStructure[0m [2X> DisplayXMLStructure( [0X[3Xtree[0X[2X ) ______________________________________[0Xfunction This utility displays the tree structure of an XML document as it is returned by [2XParseTreeXMLString[0m ([14X5.2-1[0m) (without the [10XPCDATA[0m leaves). Since this is usually quite long the result is shown using the [2XPager[0m ([14XReference: Pager[0m). [1X5.2-5 ApplyToNodesParseTree[0m [2X> ApplyToNodesParseTree( [0X[3Xtree, fun[0X[2X ) _______________________________[0Xfunction [2X> AddRootParseTree( [0X[3Xtree[0X[2X ) _________________________________________[0Xfunction [2X> RemoveRootParseTree( [0X[3Xtree[0X[2X ) ______________________________________[0Xfunction The function [2XApplyToNodesParseTree[0m applies a function [3Xfun[0m to all nodes of the parse tree [3Xtree[0m of an XML document returned by [2XParseTreeXMLString[0m ([14X5.2-1[0m). The function [2XAddRootParseTree[0m is an application of this. It adds to all nodes a component [10X.root[0m to which the top node tree [3Xtree[0m is assigned. These components can be removed afterwards with [2XRemoveRootParseTree[0m. Here are two more utilities which use [2XApplyToNodesParseTree[0m. [1X5.2-6 GetTextXMLTree[0m [2X> GetTextXMLTree( [0X[3Xtree[0X[2X ) ___________________________________________[0Xfunction [6XReturns:[0X a string The argument [3Xtree[0m must be a node of a parse tree of some XML document, see [2XParseTreeXMLFile[0m ([14X5.2-1[0m). This function collects the content of this and all included elements recursively into a string. [1X5.2-7 XMLElements[0m [2X> XMLElements( [0X[3Xtree, eltnames[0X[2X ) ____________________________________[0Xfunction [6XReturns:[0X a list of nodes The argument [3Xtree[0m must be a node of a parse tree of some XML document, see [2XParseTreeXMLFile[0m ([14X5.2-1[0m). This function returns a list of all subnodes of [3Xtree[0m (possibly including [3Xtree[0m) of elements with name given in the list of strings [3Xeltnames[0m. Use [10X"PCDATA"[0m as name for leave nodes which contain the actual text of the document. As an abbreviation [3Xeltnames[0m can also be a string which is then put in a one element list. And here are utilities for processing [5XGAPDoc[0m XML documents. [1X5.2-8 CheckAndCleanGapDocTree[0m [2X> CheckAndCleanGapDocTree( [0X[3Xtree[0X[2X ) __________________________________[0Xfunction [6XReturns:[0X nothing The argument [3Xtree[0m of this function is a parse tree from [2XParseTreeXMLString[0m ([14X5.2-1[0m) of some [5XGAPDoc[0m document. This function does an (incomplete) validity check of the document according to the document type declaration in [11Xgapdoc.dtd[0m. It also does some additional checks which cannot be described in the DTD (like checking whether 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. With [10XShow();[0m one can browse the original input in the [2XPager[0m ([14XReference: Pager[0m). [1X5.2-9 AddParagraphNumbersGapDocTree[0m [2X> AddParagraphNumbersGapDocTree( [0X[3Xtree[0X[2X ) ____________________________[0Xfunction [6XReturns:[0X nothing The argument [3Xtree[0m must be an XML tree returned by [2XParseTreeXMLString[0m ([14X5.2-1[0m) applied to a [5XGAPDoc[0m document. This function adds to each node of the tree a component [10X.count[0m which is of form [10X[Chapter[, Section[, Subsection, Paragraph] ] ][0m. Here the first three numbers should be the same as produced by the LaTeX version of the document. Text before the first chapter is counted as chapter [10X0[0m and similarly for sections and subsections. Some elements are always considered to start a new paragraph. [1X5.2-10 InfoXMLParser[0m [2X> InfoXMLParser___________________________________________________[0Xinfo class The default level of this info class is 1. Functions like [2XParseTreeXMLString[0m ([14X5.2-1[0m) are then printing some information, in particular in case of errors. You can suppress it by setting the level of [2XInfoXMLParser[0m to 0. With level 2 there may be some more information for debugging purposes. [1X5.3 The Converters[0X Here are more details about the conversion programs for [5XGAPDoc[0m XML documents. [1X5.3-1 GAPDoc2LaTeX[0m [2X> GAPDoc2LaTeX( [0X[3Xtree[0X[2X ) _____________________________________________[0Xfunction [6XReturns:[0X LaTeX document as string [2X> SetGapDocLaTeXOptions( [0X[3X[...][0X[2X ) ___________________________________[0Xfunction [6XReturns:[0X Nothing The argument [3Xtree[0m for this function is a tree describing a [5XGAPDoc[0m XML document as returned by [2XParseTreeXMLString[0m ([14X5.2-1[0m) (probably also checked with [2XCheckAndCleanGapDocTree[0m ([14X5.2-8[0m)). The output is a string containing a version of the document which can be written to a file and processed with LaTeX or pdfLaTeX (and probably BibTeX and [10Xmakeindex[0m). The output uses the [10Xreport[0m document class and needs the following LaTeX packages: [10Xa4wide[0m, [10Xamssymb[0m, [10Xinputenc[0m, [10Xmakeidx[0m, [10Xcolor[0m, [10Xfancyvrb[0m, [10Xpslatex[0m and [10Xhyperref[0m. These are for example provided by the [5XteTeX-1.0[0m or [5Xtexlive[0m distributions of TeX (which in turn are used for most TeX packages of current Linux distributions); see [7Xhttp://www.tug.org/tetex/[0m. In particular, the resulting [10Xpdf[0m-output (and [10Xdvi[0m-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 [10X.pnr[0m which is [5XGAP[0m readable and contains the page numbers for all (sub)sections of the document. This can be used by [5XGAP[0m's online help; see [2XAddPageNumbersToSix[0m ([14X5.3-4[0m). There is support for two types of 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: [4X----------------- in top level of XML document -----------------[0X [4X<?LaTeX Options="12pt"?>[0X [4X<?LaTeX ExtraPreamble="\usepackage{blabla}[0X [4X\newcommand{\bla}{blabla}[0X [4X"?>[0X [4X------------------------------------------------------------------[0X Non-ASCII characters in the [5XGAPDoc[0m document are translated to LaTeX input in ASCII-encoding with the help of [2XEncode[0m ([14X6.2-2[0m) and the option [10X"LaTeX"[0m. See the documentation of [2XEncode[0m ([14X6.2-2[0m) for how to proceed if you have a character which is not handled (yet). A hint for large documents: In many TeX installations one can easily reach some memory limitations with documents which contain many (cross-)references. In [5XteTeX[0m you can look for a file [11Xtexmf.cnf[0m which allows to enlarge certain memory sizes. This function works by running recursively through the document tree and calling a handler function for each [5XGAPDoc[0m XML element. Many of these handler functions (usually in [10XGAPDoc2LaTeXProcs.<ElementName>[0m) are not difficult 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. A few settings can be adjusted by the function [2XSetGapDocLaTeXOptions[0m. It takes strings as arguments. If the arguments contain one of the strings [10X"pdf"[0m, [10X"dvi"[0m or [10X"ps"[0m then LaTeXs [10Xhyperref[0m package is configured for optimized output of the given format (default is [10X"pdf"[0m). If [10X"color"[0m or [10X"nocolor"[0m is in the argument list then colors are used or not used, respectively. The default is to use colors but [10X"nocolor"[0m can be useful for a printable version of a manual (but who wants to print such manuals?). If "utf8" is an argument then the package [10Xinputenc[0m is used with [10XUTF-8[0m encoding, instead of the default [10Xlatin1[0m. If [10X"nopslatex"[0m is an argument then the package [10Xpslatex[0m is not used, otherwise it is. [1X5.3-2 GAPDoc2Text[0m [2X> GAPDoc2Text( [0X[3Xtree[, bibpath][, width][0X[2X ) __________________________[0Xfunction [6XReturns:[0X record containing text files as strings and other information The argument [3Xtree[0m for this function is a tree describing a [5XGAPDoc[0m XML document as returned by [2XParseTreeXMLString[0m ([14X5.2-1[0m) (probably also checked with [2XCheckAndCleanGapDocTree[0m ([14X5.2-8[0m)). This function produces a text version of the document which can be used with [5XGAP[0m's online help (with the [10X"screen"[0m viewer, see [2XSetHelpViewer[0m ([14XReference: SetHelpViewer[0m)). It includes title page, bibliography and index. The bibliography is made from BibXMLext or BibTeX databases, see [14X7[0m. Their location must be given with the argument [3Xbibpath[0m (as string or directory object). The output is a record with one component for each chapter (with names [10X"0"[0m, [10X"1"[0m, ..., [10X"Bib"[0m and [10X"Ind"[0m). Each such component is again a record with the following components: [8X[10Xtext[0m[8X[0m the text of the whole chapter as a string [8X[10Xssnr[0m[8X[0m list of subsection numbers in this chapter (like [10X[3, 2, 1][0m for chapter 3, section 2, subsection 1) [8X[10Xlinenr[0m[8X[0m corresponding list of line numbers where the subsections start [8X[10Xlen[0m[8X[0m number of lines of this chapter The result can be written into files with the command [2XGAPDoc2TextPrintTextFiles[0m ([14X5.3-3[0m). As a side effect this function also produces the [11Xmanual.six[0m information which is used for searching in [5XGAP[0m's online help. This is stored in [10X[3Xtree[0m[10X.six[0m and can be printed into a [11Xmanual.six[0m file with [2XPrintSixFile[0m ([14X5.3-5[0m) (preferably after producing a LaTeX version of the document as well and adding the page number information to [10X[3Xtree[0m[10X.six[0m, see [2XGAPDoc2LaTeX[0m ([14X5.3-1[0m) and [2XAddPageNumbersToSix[0m ([14X5.3-4[0m)). The text produced by this function contains some markup via ANSI escape sequences. The sequences used here are usually ignored by terminals. But the [5XGAP[0m help system will substitute them by interpreted color and attribute sequences (see [2XTextAttr[0m ([14X6.1-2[0m)) before displaying them. There is a default markup used for this but it can also be configured by the user, see [2XSetGAPDocTextTheme[0m ([14X5.3-6[0m). Furthermore, the text produced is in UTF-8 encoding. The encoding is also translated on the fly, if [10XGAPInfo.TermEncoding[0m is set to some encoding supported by [2XEncode[0m ([14X6.2-2[0m), e.g., [10X"ISO-8859-1"[0m or [10X"latin1"[0m. With the optional argument [3Xwidth[0m a different length of the output text lines can be chosen. 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. [1X5.3-3 GAPDoc2TextPrintTextFiles[0m [2X> GAPDoc2TextPrintTextFiles( [0X[3Xt[, path][0X[2X ) ___________________________[0Xfunction [6XReturns:[0X nothing The first argument must be a result returned by [2XGAPDoc2Text[0m ([14X5.3-2[0m). 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 [11Xchap0.txt[0m, [11Xchap1.txt[0m, ..., [11XchapBib.txt[0m, and [11XchapInd.txt[0m. If you want to make your document accessible via the [5XGAP[0m online help you must put at least these files for the text version into a directory, together with the file [11Xmanual.six[0m, see [2XPrintSixFile[0m ([14X5.3-5[0m). Then specify the path to the [11Xmanual.six[0m file in the packages [11XPackageInfo.g[0m file, see [14X'Extending: The PackageInfo.g File'[0m. Optionally you can add the [10Xdvi[0m- and [10Xpdf[0m-versions of the document which are produced with [2XGAPDoc2LaTeX[0m ([14X5.3-1[0m) to this directory. The files must have the names [11Xmanual.dvi[0m and [11Xmanual.pdf[0m, respectively. Also you can add the files of the HTML version produced with [2XGAPDoc2HTML[0m ([14X5.3-7[0m) to this directory, see [2XGAPDoc2HTMLPrintHTMLFiles[0m ([14X5.3-8[0m). The handler functions in [5XGAP[0m for this help format detect automatically which of the optional formats of a book are actually available. [1X5.3-4 AddPageNumbersToSix[0m [2X> AddPageNumbersToSix( [0X[3Xtree, pnrfile[0X[2X ) _____________________________[0Xfunction [6XReturns:[0X nothing Here [3Xtree[0m must be the XML tree of a [5XGAPDoc[0m document, returned by [2XParseTreeXMLString[0m ([14X5.2-1[0m). Running [10Xlatex[0m on the result of [2XGAPDoc2LaTeX[0m ([14X5.3-1[0m)[10X([3Xtree[0m[10X)[0m produces a file [3Xpnrfile[0m (with extension [10X.pnr[0m). The command [2XGAPDoc2Text[0m ([14X5.3-2[0m)[10X([3Xtree[0m[10X)[0m creates a component [10X[3Xtree[0m[10X.six[0m which contains all information about the document for the [5XGAP[0m online help, except the page numbers in the [10X.dvi, .ps, .pdf[0m versions of the document. This command adds the missing page number information to [10X[3Xtree[0m[10X.six[0m. [1X5.3-5 PrintSixFile[0m [2X> PrintSixFile( [0X[3Xtree, bookname, fname[0X[2X ) ____________________________[0Xfunction [6XReturns:[0X nothing This function prints the [10X.six[0m file [3Xfname[0m for a [5XGAPDoc[0m document stored in [3Xtree[0m with name [3Xbookname[0m. Such a file contains all information about the book which is needed by the [5XGAP[0m online help. This information must first be created by calls of [2XGAPDoc2Text[0m ([14X5.3-2[0m) and [2XAddPageNumbersToSix[0m ([14X5.3-4[0m). [1X5.3-6 SetGAPDocTextTheme[0m [2X> SetGAPDocTextTheme( [0X[3X[optrec][0X[2X ) ___________________________________[0Xfunction [6XReturns:[0X nothing With this function can readers of the screen version of [5XGAP[0m manuals which are generated by the [5XGAPDoc[0m package configure the color and attribute layout of the displayed text. There is a default which can be reset by calling this function without argument. As an abbreviation the argument [3Xoptrec[0m can be a string for the known name of a theme. Currently, there is only [10X"none"[0m which displays just the plain text without any markup. Otherwise, [3Xoptrec[0m must be a record. Its entries overwrite the corresponding entries in the default. To construct valid markup you can use [2XTextAttr[0m ([14X6.1-2[0m). The following components are recognized: [8X[10Xreset[0m[8X[0m reset to default, don't change this [8X[10XHeading[0m[8X[0m chapter and (sub-)section headings [8X[10XFunc[0m[8X[0m function, operation, ... names [8X[10XArg[0m[8X[0m argument names in descriptions [8X[10XExample[0m[8X[0m example code [8X[10XPackage[0m[8X[0m package names [8X[10XReturns[0m[8X[0m Returns-line in descriptions [8X[10XURL[0m[8X[0m URLs [8X[10XMark[0m[8X[0m Marks in description lists [8X[10XK[0m[8X[0m [5XGAP[0m keywords [8X[10XC[0m[8X[0m code or text to type [8X[10XF[0m[8X[0m file names [8X[10XB[0m[8X[0m buttons [8X[10XEmph[0m[8X[0m emphasized text [8X[10XRef[0m[8X[0m reference text [8X[10XBibReset[0m[8X[0m reset for bibliography, don't change [8X[10XBibAuthor[0m[8X[0m author names in bibliography [8X[10XBibTitle[0m[8X[0m titles in bibliography [8X[10XBibJournal[0m[8X[0m journal names in bibliography [8X[10XBibVolume[0m[8X[0m volume number in bibliography [8X[10XBibLabel[0m[8X[0m labels for bibliography entries [4X--------------------------- Example ----------------------------[0X [4Xgap> # change display of headings to bold green[0X [4Xgap> SetGAPDocTextTheme(rec([0X [4X> Heading:=Concatenation(TextAttr.bold, TextAttr.2)));[0X [4X------------------------------------------------------------------[0X [1X5.3-7 GAPDoc2HTML[0m [2X> GAPDoc2HTML( [0X[3Xtree[, bibpath[, gaproot]][, mtrans][0X[2X ) ______________[0Xfunction [6XReturns:[0X record containing HTML files as strings and other information The argument [3Xtree[0m for this function is a tree describing a [5XGAPDoc[0m XML document as returned by [2XParseTreeXMLString[0m ([14X5.2-1[0m) (probably also checked with [2XCheckAndCleanGapDocTree[0m ([14X5.2-8[0m)). Without an [3Xmtrans[0m argument this function produces an HTML version of the document which can be read with any Web-browser and also be used with [5XGAP[0m's online help (see [2XSetHelpViewer[0m ([14XReference: SetHelpViewer[0m)). It includes title page, bibliography, and index. The bibliography is made from BibTeX databases. Their location must be given with the argument [3Xbibpath[0m (as string or directory object, if not given the current directory is used). If the third argument [3Xgaproot[0m is given and is a string then this string is interpreted as relative path to [5XGAP[0m's main root directory. Reference-URLs to external HTML-books which begin with the [5XGAP[0m root path are then rewritten to start with the given relative path. This makes the HTML-documentation portable provided a package is installed in some standard location below the [5XGAP[0m root. The output is a record with one component for each chapter (with names [10X"0"[0m, [10X"1"[0m, ..., [10X"Bib"[0m, and [10X"Ind"[0m). Each such component is again a record with the following components: [8X[10Xtext[0m[8X[0m the text of an HTML file containing the whole chapter (as a string) [8X[10Xssnr[0m[8X[0m list of subsection numbers in this chapter (like [10X[3, 2, 1][0m for chapter 3, section 2, subsection 1) [13XStandard output format without[0m [3Xmtrans[0m [13Xargument[0m The HTML code produced with this converter conforms to the W3C specification "XHTML 1.0 strict", see [7Xhttp://www.w3.org/TR/xhtml1[0m. First, this means that the HTML files are valid XML files. Secondly, the extension "strict" says in particular that the code doesn't contain any explicit font or color information. Mathematical formulae are handled as in the text converter [2XGAPDoc2Text[0m ([14X5.3-2[0m). We don't want to assume that the browser can use symbol fonts. Some [5XGAP[0m users like to browse the online help with [10Xlynx[0m, see [2XSetHelpViewer[0m ([14XReference: SetHelpViewer[0m), which runs inside the same terminal windows as [5XGAP[0m. [13XUsing a stylesheet file[0m The layout information for a browser should be specified in a cascading style sheet (CSS) file. The [5XGAPDoc[0m package contains an example of such a style sheet, see the file [11Xgapdoc.css[0m in the root directory of the package. This file conforms to the W3C specification CSS 2.0, see [7Xhttp://www.w3.org/TR/REC-CSS2[0m. You may just copy that file as [11Xmanual.css[0m into the directory which contains the HTML version of your documentation. But, of course, you are free to adjust it for your package, e.g., change colors or other layout details, add a background image, ... Each of the HTML files produced by the converters contains a link to this local style sheet file called [11Xmanual.css[0m. [13XOutput format with[0m [3Xmtrans[0m argument Currently, there are two experimental variants of this converter available which handle mathematical formulae differently. They are accessed via the optional last [3Xmtrans[0m argument. If this argument is set to [10X"Tth"[0m it is assumed that you have installed the LaTeX to HTML translation program [10Xtth[0m. This is used to translate the contents of the [10XM[0m, [10XMath[0m and [10XDisplay[0m elements into HTML code. Note that the resulting code is not compliant with any standard. Formally it is "XHTML 1.0 Transitional", it contains explicit font specifications and the characters of mathematical symbols are included via their position in a "Symbol" font. Some graphical browsers can be configured to display this in a useful manner, check the Tth homepage ([7Xhttp://hutchinson.belmont.ma.us/tth/[0m) for more details. If the [3Xmtrans[0m argument is set to [10X"MathML"[0m it is assumed that you have installed the translation program [10Xttm[0m, see also the Tth homepage ([7Xhttp://hutchinson.belmont.ma.us/tth/[0m)). This is used to translate the contents of the [10XM[0m, [10XMath[0m and [10XDisplay[0m elements to MathML 2.0 markup. The resulting files should conform to the "XHTML 1.1 plus MathML 2.0" standard, see the W3C information ([7Xhttp://www.w3.org/TR/MathML2/[0m) for more details. It is expected that the next generation of graphical browsers will be able to render such files (try for example [10XMozilla[0m, at least 0.9.9). You must copy the [10X.xsl[0m and [10X.css[0m files from [5XGAPDoc[0ms [11Xmathml[0m directory to the directory containing the output files. The translation with [10Xttm[0m is still experimental. The output of this converter variant is garbage for browsers which don't support MathML. This function works by running recursively through the document tree and calling a handler function for each [5XGAPDoc[0m XML element. Many of these handler functions (usually in [10XGAPDoc2TextProcs.<ElementName>[0m) are not difficult 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 certain details to your own taste by slight modifications of the program. The result of this converter can be written to files with the command [2XGAPDoc2HTMLPrintHTMLFiles[0m ([14X5.3-8[0m). [1X5.3-8 GAPDoc2HTMLPrintHTMLFiles[0m [2X> GAPDoc2HTMLPrintHTMLFiles( [0X[3Xt[, path][0X[2X ) ___________________________[0Xfunction [6XReturns:[0X nothing The first argument must be a result returned by [2XGAPDoc2HTML[0m ([14X5.3-7[0m). 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 [11Xchap0.html[0m, [11Xchap1.html[0m, ..., [11XchapBib.html[0m, and [11XchapInd.html[0m. The experimental versions which are produced with [10Xtth[0m or [10Xttm[0m use different names for the files, namely [11Xchap0_sym.html[0m, and so on for files which need symbol fonts and [11Xchap0_mml.xml[0m for files with MathML translations. You may also want to place a style sheet file [11Xmanual.css[0m into the same directory as the HTML files. You can copy for example the file [11Xgapdoc.css[0m in the root directory of the [5XGAPDoc[0m package ([10XFilename( Directory( PackageInfo( "gapdoc" )[1].InstallationPath), "gapdoc.css");[0m). [1X5.3-9 InfoGAPDoc[0m [2X> InfoGAPDoc______________________________________________________[0Xinfo class The default level of this info class is 1. The converter functions for [5XGAPDoc[0m documents are then printing some information. You can suppress this by setting the level of [2XInfoGAPDoc[0m to 0. With level 2 there may be some more information for debugging purposes. [1X5.3-10 SetGapDocLanguage[0m [2X> SetGapDocLanguage( [0X[3X[lang][0X[2X ) ______________________________________[0Xfunction [6XReturns:[0X nothing The [5XGAPDoc[0m converter programs sometimes produce text which is not explicit in the document, e.g., headers like "Abstract", "Appendix", links to "Next Chapter", variable types "function" and so on. With [2XSetGapDocLanguage[0m the language for these texts can be changed. The argument [3Xlang[0m must be a string. Calling without argument or with a language name for which no translations are available is the same as using the default [10X"english"[0m. If your language [3Xlang[0m is not yet available, look at the record [10XGAPDocTexts.english[0m and translate all the strings to [3Xlang[0m. Then assign this record to [10XGAPDocTexts.([3Xlang[0m[10X)[0m and send it to the [5XGAPDoc[0m authors for inclusion in future versions of [5XGAPDoc[0m. (Currently, there are translations for [10Xenglish[0m, [10Xgerman[0m, [10Xrussian[0m and [10Xukrainian[0m.) [13XFurther hints:[0m To get strings produced by LaTeX right you will probably use the [10Xbabel[0m package with option [3Xlang[0m, see the information on [10XExtraPreamble[0m in [2XGAPDoc2LaTeX[0m ([14X5.3-1[0m). If [3Xlang[0m cannot be encoded in [10Xlatin1[0m encoding you can consider the use of [10X"utf8"[0m with [2XSetGapDocLaTeXOptions[0m ([14X5.3-1[0m). [1X5.4 Testing Manual Examples[0X We also provide some tools to check the examples given in [10X<Example>[0m-elements. [1X5.4-1 ManualExamples[0m [2X> ManualExamples( [0X[3Xpath, main, files, units[0X[2X ) _______________________[0Xfunction [6XReturns:[0X a list of strings [2X> ManualExamplesXMLTree( [0X[3Xtree, units[0X[2X ) _____________________________[0Xfunction [6XReturns:[0X a list of strings The argument [3Xtree[0m must be a parse tree of a [5XGAPDoc[0m document, see [2XParseTreeXMLFile[0m ([14X5.2-1[0m). The function [2XManualExamplesXMLTree[0m returns a list of strings containing the content of [10X<Example>[0m elements. For each example there is a comment line showing the paragraph number and (if available) the original location of this example with file and line number. Depending on the argument [3Xunits[0m several examples are colleected in one string. Recognized values for [3Xunits[0m are [10X"Chapter"[0m, [10X"Section"[0m, [10X"Subsection"[0m or [10X"Single"[0m. The latter means that each example is in a separate string. For all other value of [3Xunits[0m just one string with all examples is returned. The arguments [3Xpath[0m, [3Xmain[0m and [3Xfiles[0m of [2XManualExamples[0m are the same as for [2XComposedDocument[0m ([14X4.2-1[0m). This function first contructs and parses the [5XGAPDoc[0m document and then applies [2XManualExamplesXMLTree[0m. [1X5.4-2 ReadTestExamplesString[0m [2X> ReadTestExamplesString( [0X[3Xstr[0X[2X ) ____________________________________[0Xfunction [6XReturns:[0X [9Xtrue[0m or [9Xfalse[0m [2X> TestExamplesString( [0X[3Xstr[, print][0X[2X ) _______________________________[0Xfunction [6XReturns:[0X [9Xtrue[0m or a list of records [2X> TestManualExamples( [0X[3X[tree, ][path, main, files][0X[2X ) ________________[0Xfunction [6XReturns:[0X [9Xtrue[0m or a list of records The argument [3Xstr[0m must be a string containing lines for the test mode of [5XGAP[0m. The function [2XReadTestExamplesString[0m just runs [2XReadTest[0m ([14XReference: ReadTest[0m) on this code. The function [2XTestExamplesString[0m returns [9Xtrue[0m if [2XReadTest[0m ([14XReference: ReadTest[0m) does not find differences. In the other case it returns a list of records, where each record describes one difference. The records have fields [10X.line[0m with the line number of the relevant input line of [3Xstr[0m, [10X.input[0m with the input line and [10X.diff[0m with the differences as displayed by [2XReadTest[0m ([14XReference: ReadTest[0m). If the optional argument [3Xprint[0m is given and set to [9Xtrue[0m then the differences are also printed before the function returns. The arguments of the function [2XTestManualExamples[0m is either a parse tree of a [5XGAPDoc[0m document or the information to build and parse such a document. The function extracts all examples in [10X"Single"[0m units and applies [2XTestExamplesString[0m to them. [4X--------------------------- Example ----------------------------[0X [4Xgap> TestExamplesString("gap> 1+1;\n2\n");[0X [4Xtrue[0X [4Xgap> TestExamplesString("gap> 1+1;\n2\ngap> 2+3;\n4\n");[0X [4X[ rec( line := 3, input := "gap> 2+3;", diff := "+ 5\n- 4\n" ) ][0X [4Xgap> TestExamplesString("gap> 1+1;\n2\ngap> 2+3;\n4\n", true);[0X [4X----------- bad example --------[0X [4Xline: 3[0X [4Xinput: gap> 2+3;[0X [4Xdifferences:[0X [4X+ 5[0X [4X- 4[0X [4X[ rec( line := 3, input := "gap> 2+3;", diff := "+ 5\n- 4\n" ) ][0X [4X------------------------------------------------------------------[0X